linux 文件系统

1 Linux文件系统基础知识
  1.1 文件结构
  1.2 文件类型
  1.3 存取权限和文件模式
  1.4 Linux文件系统
2 虚拟文件系统
3 其他
  3.1 相关命令
  3.2 proc目录
    3.2.1 /proc 以数字命名的目录
    3.2.2 /proc 系统信息文件
4 参考

1 Linux文件系统基础知识

1.1 文件结构

Linux使用标准的目录结构,在Linux安装的时候,安装程序就已经为用户创建了文件系统和完整而固定的目录组成形式,并指定了每个目录的作用和其中的文件类型, 如下图所示:

Linux目录树结构

Linux采用的是树型结构。最上层是根目录,其他的所有目录都是从根目录出发而生成的。在Linux中,无论操作系统管理几个磁盘分区,这样的目录树只有一个。因为Linux是一个多用户系统,因此制定这样一个固定的目录规划有助于对系统文件和不同的用户文件进行统一管理。下面列出了Linux下一些主要目录的功能:

/bin 二进制可执行命令
/dev 设备特殊文件
/etc 系统管理和配置文件
/home 用户主目录的基点,比如用户user的主目录就是/home/user。
/lib 标准程序设计库,又叫动态链接共享库。
/sbin 系统管理命令,这里存放的是系统管理员使用的管理程序
/tmp 公用的临时文件存储点
/root 系统管理员的主目录
/mnt 用户临时安装其他文件系统的目录。
/proc 虚拟的目录,不占用磁盘空间,是系统内存的映射。可直接访问这个目录来获取系统信息。
/var 某些大文件的溢出区,例如各种服务的日志文件
/usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录下。

1.2 文件类型

文件类型 作用
常规文件 计算机用户和操作系统用于存放数据、程序等信息的文件。一般都长期地存 放在外存储器(磁盘、磁带等)中。常规文件一般又分为文本文件和二进制文件。
目录文件 Linux文件系统将文件索引节点号和文件名同时保存在目录中。所以,目录文件就是将文件的名称和它的索引节点号结合在一起的一张表。目录文件只允许系统进行修改。用户进程可以读取目录文件,但不能对它们进行修改。
设备文件 Linux把所有的外设都当作文件来看待。每一种I/O设备对应一个设备文件,存放在/dev目录中,如行式打印机对应/dev/lp文件,第一个软盘驱动器对应/dev/fd0文件
管道文件 主要用于在进程间传递数据。管道是进程间传递数据的“媒介”。某进程数据写入管道的一端,另一个进程从管道另一端读取数据。Linux对管道的操作与文件操作相同,它把管道做为文件进行处理。管道文件又称先进先出(FIFO)文件。
链接文件 又称符号链接文件,它提供了共享文件的一种方法。在链接文件中不是通过文件名实现文件共享,而是通过链接文件中包含的指向文件的指针来实现对文件的访问。使用链接文件可以访问常规文件,目录文件和其它文件

1.3 存取权限和文件模式

为了保证文件信息的安全,Linux设置了文件保护机制,其中之一就是给文件都设定了一定的访问权限。当文件被访问时,系统首先检验访问者的权限,只有与文件的访问权限相符时才允许对文件进行访问。
  Linux中的每一个文件都归某一个特定的用户所有,而且一个用户一般总是与某个用户组相关。Linux对文件的访问设定了三级权限:文件所有者,与文件所有者同组的用户,其他用户。对文件的访问主要是三种处理操作:读取、写入和执行。三级访问权限和三种处理操作形成了9种情况,如下图所示:

文件访问权和访问模式

1.4 Linux文件系统

文件系统指文件存在的物理空间,Linux系统中每个分区都是一个文件系统,都有自己的目录层次结构。Linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构。

  • 索引节点(inode)

Linux文件系统使用索引节点来记录文件信息,索引节点是一个数据结构,它包含文件的长度、创建时间、修改时间、权限、所属关系、磁盘中的位置等信息。每个文件或目录都对应一个索引节点,文件系统把所有的索引节点形成一个数组,系统给每个索引节点分配了一个号码,也就是该节点在数组中的索引号,称为 索引节点号。文件系统正是靠这个索引节点号来识别一个文件。可以用ls –i命令查看文件的索引节点。

  • 软链接和硬链接

可以用链接命令ln(Link)对一个已经存在的文件再建立一个新的链接,而不复制文件的内容。顾名思义,ln是将两个文件名彼此链接起来,使得用户无论使用哪一个文件名都可以访问到同一文件。链接有 软链接(也叫 符号链接 )和 硬链接之分。

硬链接(hard link)就是让一个文件对应一个或多个文件名, 硬链接有两个限制,

  • 不允许给目录创建硬链接;
  • 只有在同一文件系统中的文件之间才能创建链接

例如, 为owner.txt创建硬链接owner2.txt

ln owner.txt owner2.txt
ls -i | grep owner
143432398 owner.txt
143432398 owner2.txt

可以看到, owner.txt和owner2.txt的索引节点号相同。

为了克服硬链接的两个限制,引入 符号链接 (symbolic link)。符号链接实际上是一种特殊的文件,这种文件包含了另一个文件的任意一个路径名。这个路径名指向位于任意一个文件系统的任意文件,甚至可以指向一个不存在的文件。系统会自动把对符号链接的大部分操作(如读、写等)变为对源文件的操作,但某些操作(如删除等)就会直接在符号链接上完成。
例如下面为文件创建软链:

ln -s owner.txt  owner2.txt
ls -i | grep owner
143432398 owner.txt
143448635 owner2.txt

可以看到, owner.txt和owner2.txt的索引节点号不相同。

由于索引节点号inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。

  • 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用, 比如删除上面的owner2.txt : find . -inum 143448635 -exec rm -i {} \;
  • 移动文件或重命名文件,只是改变文件名,不影响inode号码。
  • 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。

第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的inode则被回收。

索引节点号的总数是有限制的,可以通过df -i 命令查看索引节点的使用情况,如下示例:

df -i
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/vda1            2621440  127120 2494320    5% /
/dev/vdb             20971520  902254 20069266    5% /home

2 虚拟文件系统

为了保证Linux的开放性,设计人员必须考虑如何使Linux除支持Ext4文件系统外,还能支持其他各种不同的文件系统,例如集群文件系统以及加密文件系统等。为此,就必须将各种不同文件系统的操作和管理纳入到一个统一的框架中,使得用户程序可以通过同一个文件系统界面,也就是同一组系统调用,能够对各种不同的文件系统以及文件进行操作。这样,用户程序就可以不关心各种不同文件系统的实现细节,而使用系统提供的统一、抽象、虚拟的文件系统界面。这种统一的框架就是所谓的虚拟文件系统转换(Virtual Filesystem Switch),一般简称虚拟文件系统 (VFS)。虚拟文件系统描述如下所示:

image.png

可以把文件看作是一个有序字节串,字节串中第一个字节是文件的头,最后一个字节是文件的尾。为了便于系统和用户识别,每一个文件都被分配了一个便于理解的名字。典型的文件操作有读、写、创建和删除等。
  文件系统通过目录来组织文件。文件目录好比一个文件夹,用来容纳相关文件。因为目录也可以包含子目录,所以目录可以层层嵌套,形成文件路径。路径中的每一部分被称作目录项,例如“/home/clj/myfile”是文件路径的一个例子,其中根目录是/,home,clj和文件myfile都是目录项。在Unix中,目录属于普通文件,所以对目录和文件可以实施同样的操作。
  文件系统如何对文件的属性(例如文件名,访问控制权限、大小、拥有者、创建时间等信息)进行描述?这就是索引节点(index Inode),为什么不叫文件控制块而叫索引节点,主要是因为有一个叫索引号的属性可以惟一的标识文件。
  以上说明了文件,目录项,索引节点,还有超级块,超级块是一种包含文件系统信息的数据结构。
  通过以上的介绍,可以概括出VFS中四个主要对象:

  • 超级块对象:描述已安装文件系统。
  • 索引节点对象:描述一个文件。
  • 目录项对象:描述一个目录项,是路径的组成部分。
  • 文件对象:描述由进程打开的文件。

注意,因为VFS将目录作为一个文件来处理,所以不存在目录对象。换句话说,目录项不同于目录,但目录却和文件相同。

3 其他

3.1 相关命令

Linux文件系统相关命令比较多,大致列表如下:

命令 描述
cat 查看文件内存 cat [options] [file_names] , 主要的options有 -n ,可以显示每一行的行数
chmod 改变文件的权限,chmod [options] mode[,mode] file1 [file2 ...]
chown 将指定文件的拥有者改为指定的用户或组, chown [选项]... [所有者][:[组]] 文件...
chgrp
cksum
cmp cmp命令用来比较两个文件是否有差异。当相互比较的两个文件完全一样时,则该指令不会显示任何信息。若发现有差异,预设会标示出第一个不通之处的字符和列数编号。若不指定任何文件名称或是所给予的文件名为“-”,则cmp指令会从标准输入设备读取数据。
cp
dd
du disk usage, 查看文件或者目录的使用空间, 比如查看目录 du -hs dir
file
fuser
ln link , 创建软链或者硬链
ls
mkdir
mv
pax
pwd
rm
rmdir
split split命令可以将一个大文件分割成很多个小文件,有时需要将文件分割成更小的片段,比如为提高可读性,生成日志等。
tee
touch
type
umask
comm 比较2个文件,找出2个文件中的相同行或者不同行
lsof 在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,该文件描述符提供了大量关于这个应用程序本身的信息。lsof打开的文件可以是:<ul> <li>普通文件</li><li>目录</li><li>网络文件系统的文件</li><li>字符或设备文件</li><li>(函数)共享库</li><li>管道,命名管道</li><li>符号链接</li><li>网络文件(例如:NFS file、网络socket,unix域名socket)</li><li>还有其它类型的文件,等等</li></ul>

3.2 proc目录

在Linux下的/proc目录下,有两种类型的内容: ** 数字目录和系统信息文件 **。
/proc不是一个真正的文件系统,它是一个虚拟的文件系统。它不存系统磁盘上,而是存在系统内存中例如,当我们使用ls -al命令查看/proc/stat文件信息时,可以看到该文件的大小为0,但是当我们使用cat命令查看该文件时,却可以查看到该文件的一些内容。
了解/proc文件系统,如果要了解/proc目录下文件的详细信息,可以使用man 5 FILENAME命令查看。

3.2.1 /proc 以数字命名的目录

在/proc目录下,有很多以数字命名的目录,这些数字表示系统进程的id。在这些目录下的文件对应相应的进程。
在这种类型的目录下,有一些很重要的文件(每个进程都有):

  • cmdline
  • environ
  • fd
  • limits
  • mounts

还有一些很重要的链接:

  • cwd
  • exe
  • root

3.2.2 /proc 系统信息文件

  • /proc/cpuinfo
  • /proc/meminfo
  • /proc/loadvg
  • /proc/partitions
  • /proc/version

4 参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 143,396评论 1 301
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 61,482评论 1 258
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 94,858评论 0 213
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 41,131评论 0 179
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 48,903评论 1 256
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 38,847评论 1 177
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 30,454评论 2 273
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,206评论 0 167
  • 想象着我的养父在大火中拼命挣扎,窒息,最后皮肤化为焦炭。我心中就已经是抑制不住地欢快,这就叫做以其人之道,还治其人...
    爱写小说的胖达阅读 29,047评论 6 232
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 32,563评论 0 213
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,344评论 2 215
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 30,667评论 1 231
  • 白月光回国,霸总把我这个替身辞退。还一脸阴沉的警告我。[不要出现在思思面前, 不然我有一百种方法让你生不如死。]我...
    爱写小说的胖达阅读 24,264评论 0 32
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,163评论 2 214
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 31,546评论 3 207
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,630评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,032评论 0 166
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 33,572评论 2 231
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 33,668评论 2 232

推荐阅读更多精彩内容

  • inode是什么 理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector...
    狗尾巴草败了阅读 630评论 0 0
  • 万物皆是文件 在unix里面这是一句很有名的话: 在linux系统的大多数资源都以文件形式存在,包括文件 目录...
    deppyu阅读 2,154评论 0 51
  • 一个基本的计算机系统由“硬件”和“软件”组成,一台Linux设备,主要的组成如下图所示: 一般情况下,我们所说的L...
    时待吾阅读 1,575评论 0 16
  • 姓名:李振华 学号:17101223418 【嵌牛导读】:文件系统是linux的一个十分基础的知识,同时也是学习...
    大华华0504阅读 245评论 0 1
  • 姓名:李振华 学号:17101223418 【嵌牛导读】:文件系统是linux的一个十分基础的知识,同时也是学习...
    大华华0504阅读 590评论 0 2