对于Java程序员来说,了解一定的Linux系统的知识是必须的,因为大部分服务器都是用Linux作为操作系统的,这篇文章作为我学习Linux系统的一个笔记来分享给大家,或许概念理解不是那么准确,但这是我自己学习过程中的一些通俗的理解,希望这些通俗的理解能过给予你一点点的小帮助。

一些基本概念

VFS(虚拟文件系统)

它是一个设计层面的东西,它将我们所有的程序、设备、文件、目录等一切都映射为文件系统中的一个个文件,相当于做了一个用户和操作系统硬软件之间的中间人,它屏蔽了操作系统不同硬软件的区别,让用户感觉自己无论和操作系统的任何一个硬软件打交道都是一样的操作流程,没有什么差别,其实是因为虚拟文件系统这个中间的抽象层为我们提供屏蔽掉了这种差异,可以这么说它向上给我们提供了一个统一接口,向下针对不同的硬软件做了不同的实现,才让我们有了这种感觉,其实我们访问不同的硬软件就会有不同的方式,例如,不同的设备就需要不同的驱动程序;同时正是因为它,在我们的Linux里才有了一切皆文件的概念,正是一切皆文件,才有了在我们感官上来看我们虽然操作不同的设备、硬件,但却有着相似的方法,可以说虚拟文件系统在Linux里是一个伟大的设计。

DF(文件描述符)

Linux系统的每个文件都会有自己的文件描述符,这是个什么东东呢?可以这么理解,这是个对象的引用(文件的引用),它记录了文件的基本信息(也可说元数据信息)说到DF那就的说下它在Linux里的使用场景了,明白了它的场景对我们理解这个概念非常有帮助。

作用或者使用场景:(可参考本文小知识里第五点DMA中的图) 当我们的应用程序想访问磁盘上的数据时,会向内核发出系统调用,而内核会将磁盘数据加载进入它自己的pageCache缓存页,然后将这个缓存页里的我们需要的数据的DF给到应用程序,这时我们的应用程序就可以访问我们需要的数据了,当其他的应用程序也需要这块数据时,内核会将这块数据的DF也给到其他应用程序,各个应用程序都会持有DF,都可以将操作这块数据,相当于Java集合中的迭代器对象,如果都是不操作同一个位置的数据,那么不会有影响,如果操作了同一位置的数据就会造成脏数据,这种情况这里不做详细论述,这里只是为了理解DF的作用。

iNode(i节点)

它相当于文件的ID,是文件的唯一标识。

常见文件类型


链接
可分为软链接和硬链接,软链接相当于Windows中应用的快捷方式,是一个新文件;硬链接相当于给文件起了个别名,实际文件还是一个。

输入输出

在Linux中,任何程序都有标准的输入(0文件描述符)、标准的输出(1文件描述符)、错误的输出(2文件描述符)

输入输出可称之为输入流输出流,它们相当于一个传输的管道,这样的传输管道必定有着输入源和输出源(不同的程序有着自己默认的输入源输出源)一般情况下0代表着标准输入源,1代表着标准输出源,2代表着错误输出;既然程序有着默认的输入输出源,那么我们就一定可以更改默认,我们称之为重定向,它不是一个命令,是一种机制。

上图中我们将 ls ./ /oosdfs 1> ls01.out 的标准输出重定向为ls01.out,因此它默认的输出没有打印到屏幕上而是写入了ls01文件中,而错误输出我们没有重定向,则输出到了屏幕; 然后我们更改了它的标准输出与错误输出;ls ./ /oosdfs 1> ls04.out 2>& 1 这条命令的意思是将标准输出重定向到文件ls04.out中而将错误输出重定向为标准输出(此时标准输出已经更改为文件ls04.out,因此标准输出错误输出都将输出到文件ls04.out中)
> 输出重定向符
< 输入重定向符
如果重定向符后面是文件描述符 则在重定向符后需要加&
在Linux里 例如我们在使用cat命令时 会有一个输入 和一个输出 此时我们可以利用重定向来指定cat的输入和输出
1< test.txt 代表将test.txt中的内容输入1(文件描述符)中 1和< 中间不能有空白 1> test.txt 代表将1中的内容写入test.txt中 同样1和> 之间也不能有空白

PageCache

为了提高内存的利用率,操作系统引入了pageCache这种缓存技术,pageCache是操作系统内核管理的一块空间,这块空间由一个个4k大小的pageCache缓存页组成,无论我们进行何种IO操作都需要经由pageCache,例如:当从磁盘读取数据时,总是会读到内核的pageCache中,由内核统一管理这块数据,然后内核将该数据页的DF给到对应的线程,这样其他线程就可以操作这块数据,而不需要每个线程都读一份进入内存,这样大大的提升了内存的利用率;可以说pageCache是我们学习IO的一个必备知识。

在引入pageCache后,我们的内存利用率是提高了,但它也带来了一定的问题,那就是数据一致性。有了pageCache多个线程可以修改同一个pageCache、我们写数据也是先写到pageCache中,然后再由内核将pageCache中的内容持久化到磁盘,此时,什么时候持久化?多长时间持久化?等等问题就特别重要,这些都可以通过参数调节,这里我们只是介绍下什么是pageCache,它有什么作用,所以这里不对具体的pageCache参数做过多的介绍。初次之外我们还应该知道一个概念那就是脏页,当线程写入或更改了与自己相关的pageCache,该pageCache就会被标记为脏页(pageCache由内核统一管理,内核维护着对pageCache的数据结构)。

小知识

  1. 在Linux里,/proc/目录下是Linux内核的映射


bash是和我们交互的程序 $$的优先级高于 $BASHPID

  1. | 管道 接收前一个命令的输出
    注:管道的左右两边会启动两个不同的线程 两线程通过管道连接

    $$的优先级高于管道,因此两次的结果不一致
  2. {}用来执行多条命令 开头和结尾一定得有空格,多条命令用分号隔开
  3. DMA:直接存储器访问,又称为协助处理器,当应用程序需要从磁盘读数据进入内存时,会通过80中断通知CPU,而CPU会将读数据的过程交给DMA来处理,而它自己去处理其他的线程请求,当数据加载到内存后,会以中断的形式通知CPU,在加载数据进入内存的过程中不需要CPU来参与,这样大大的提高了CPU的利用率。
  4. pachCache只是计算机中一个层面的缓存而已,CPU、内存甚至硬盘都有对应的缓存机制,缓存机制的引入,一方面确实缓解了CPU与存储设备之间速度不匹配的问题,但也引入了数据一致性的问题,真是因为硬件的机制,才有了其他一些软件层面的设计。比如Java的内存模型,它其实是对底层硬件的内存模型的一种实现方式。

杂学Linux-基础篇相关推荐

  1. Linux随笔-鸟哥Linux基础篇学习总结(全)

    Linux随笔-鸟哥Linux基础篇学习总结(全) 修改Linux系统语系:LANG-en_US,如果我们想让系统默认的语系变成英文的话我们可以修改系统配置文件:/etc/sysconfig/i18n ...

  2. tree老师:每天五分钟教你学linux基础命令02

    tree老师:每天五分钟教你学linux基础命令02 ls ls命令用于列出文件和目录.默认上,他会列出当前目录的内容.带上参数后,我们可以用ls做更多的事情.  比如,当我们刚刚改了文件,却不记得是 ...

  3. Linux基础篇--shell脚本编程基础

    Linux基础篇–shell脚本编程基础 本章内容概要  编程基础  脚本基本格式  变量  运算  条件测试  配置用户环境 7.1 编程基础 程序:指令+数据 程序编程风格:   过程式:以指令为 ...

  4. Linux基础篇_01_计算机概论

    学习资料:<鸟哥的Linux私房菜(基础篇)> 部分:Linux的规划与安装 时间:20130225 学习笔记: 计算机定义:接受使用者输入指令与数据, 经由中央处理器的数学与逻辑单元运算 ...

  5. 鸟哥Linux计算退伍时间,发现《鸟哥的Linux基础篇》中有个脚本还能再完善点。...

    我是个Linux入门"水手",身上只有一本<鸟哥的linux私房菜基础篇>,把这本书当成我的进入 Linux领域的"葵花宝典".鸟哥写的这本书讲的真 ...

  6. Linux基础篇大集合

    目录 一.基础篇 (一)基本常识 1.linux的三种网络连接方式 2.虚拟机的克隆 3.虚拟机的快照 4.虚拟机的迁移和删除 (二)目录结构 (三)基本实操 1.远程连接Linux操作系统 2.vi ...

  7. 运维面试题-Linux基础篇

    非技术类 你对现在运维工程师的理解以及对其工作的认识 答:运维工程师在公司当中责任重大,需要保证时刻为公司及客户提供最高.最快.最稳定.最安全的服务.运维工程师的一个小小的失误,很有可能会对公司及客户 ...

  8. 图学java基础篇之IO

    java io体系 如图可以看出,java的io按照包来划分的话可以分为三大块:io.nio.aio,但是从使用角度来看,这三块其实揉杂在一起的,下边我们先来概述下这三块: io:主要包含字符流和字节 ...

  9. Linux基础篇——Linux进程、服务管理

    文章目录 1. 什么是进程 2. Linux下进程与执行者的关系(多人多任务环境) 3. 工作(Job)管理 3.1 将指令丢到后端执行 & 3.2 将目前的工作暂停 Ctrl+z 3.3 j ...

  10. linux分区par,linux基础篇(磁盘分区)

    linux磁盘分区到文件系统创建 首先了解磁盘的基本构造 需要用到的分区命令: fdisk:对于一块硬盘来讲,最多只能管理15分区 语法:fdisk  [OPTION][DEVICE] p: prin ...

最新文章

  1. 设计模式复习-装饰模式
  2. ViewPager实现滑动翻页效果
  3. 连接 F5 大 IP 设备
  4. ios重签名shell脚本_iOS逆向——shell重签名及代码注入
  5. python绘制汉字_OpenCV Python 绘制中文字
  6. python的dev包怎么安装_几种Python包的安装方式
  7. java使用JMail通过QQ邮件服务器实现自动发送邮件
  8. fatal: could not read Username for ‘https://git.dev.tencent.com‘ 解决方法
  9. [2019上海网络赛F题]Rhyme scheme
  10. VGG16模型详解 and 代码搭建
  11. ip地址冲突该如何解决?
  12. python网易公开课官网_[Python][爬虫]网易公开课下载器,支持多线程,可分别下载视频及字幕...
  13. 过年啦!什么是你的春节专属年味儿?
  14. java2048_java之2048
  15. 耿建超英语语法---非谓语动词作同位语和定语
  16. 学术之声 | 专访邵俊教授:区块链用技术保证在链上说话算话
  17. quark h5 学习
  18. GNS3快捷安装指南
  19. Cocos2dx游戏开发素材/学习网站分享
  20. Kafka系列之:增加Kafka节点扩展Kafka集群

热门文章

  1. python字符串中既有单引号又有双引号_Python如何实现在字符串里嵌入双引号或者单引号...
  2. python爬虫培训班靠谱吗
  3. python实现云服务器上12306自动化抢票功能
  4. 程序员不懂过七夕?你怕是有什么误解
  5. JDK1.7 ImageIO的一个梗
  6. ArcGIS Engine 开发 (三)COM技术中的QueryInterface(接口查询)的实现原理和IUnknown接口
  7. 虹膜识别的原理和七大应用领域
  8. LEADTOOLS 20,识别,文档,医学,影像和多媒体技术
  9. js建立excel表格_建立Excel足球联赛表格传统方法与动态数组
  10. win10 游戏黑屏(英雄联盟 激战2)解决