首页 > 系统 > Linux > 正文

Linux 文件系统的操作实现

2024-08-28 00:04:27
字体:
来源:转载
供稿:网友

此读书笔记比较主要记录文件系统的相关操作。

磁盘与目录的容量

磁盘的整体数据是在superblock块中,但是每个个别文件的容量则在inode当中记载,常用来显示磁盘使用量的两个命令

df: 列出文件系统的整体磁盘使用量

du: 评估文件系统的磁盘使用量(常用于评估目录所占容量)

$ df [-ahikHTm] [目录或文件名]参数:-a: 列出所有的文件系统,包括系统特有的/proc(/proc挂载在内存中,不会占用磁盘空间)等文件系统;-k: 以KB的容量显示各文件系统-m: 以MB的容量显示各文件系统-h:以人们较易阅读的GB、MB、KB等格式自行显示-H: 以M=1000K 替换M=1024K 的进位方式-T: 连同该分区的文件系统名称也列出(例如ext3)-i: 不用硬盘容量,而以inode的数量显示

df主要读取的数据几乎都是针对整个文件系统,因此读取的范围只要是在super block内的信息,所以这个命令显示结果的速度非常快速。

$ du [-ahskm] 文件或者目录名称参数:-a 列出所有的文件与目录容量,因为默认仅统计目录的文件量而已-h 以人们较易读的容量显示-s 列出总量,而不列出每个个别的目录占用容量-S 不包括子目录下的总计-k 以KB列出容量显示-m 以MB列出容量显示

du会直接查找文件系统的所有文件数据

连接文件: ln

在linux下的连接文件有两种:一种是类似Windows上的快捷方式,可以让你快速连接到目标文件或目录。另外一种则是通过文件系统的inode连接来产生新文件名,而不是产生新文件,这种称为硬链接(hard link)。

hard link(硬连接和实际连接)

每个文件都会占用一个inode,文件的内容由inode的记录来指向。 想要读取文件,必须要经过目录记录的文件名来指向到正确的inode号码才能读取。 文件名与目录有关,而文件内容则与inode有关,而hard link就是在某个目录下新建一个文件名连接到某inode号码的关联记录。
vagrant@vagrant-ubuntu-trusty-64:~$ cd /tmpvagrant@vagrant-ubuntu-trusty-64:/tmp$ touch tesvagrant@vagrant-ubuntu-trusty-64:/tmp$ ln test test1vagrant@vagrant-ubuntu-trusty-64:/tmp$ ll -i test test162273 -rw-rw-r-- 2 vagrant vagrant 0 Dec 17 12:39 test62273 -rw-rw-r-- 2 vagrant vagrant 0 Dec 17 12:39 test1

可以看到两个文件的inode号码是一致的,他们的文件权限属性完全一样,而连接数变为了2。

硬连接最大的好处就是安全,如果你将任何一个文件名删除,其实inode与block都是存在的。此时可以通过另外一个文件名来读取到正确的文件数据,不论你使用哪个文件名来编辑,最终的结果都会写到相同的inode与block中,因此均能进行数据的修改。

一般来说,使用hard link设置连接文件时,磁盘的空间和inode的数目都不会改变,hard link只是在某个目录下的block多写一个关联数据而已,既不会增加inode也不会耗用block数量(除非当你在block增加多一个关联数据时刚好磁盘满了,就可能需要增加多一个block来记录文件名关联性,而导致磁盘空间的变化)。

硬连接的限制:

不能跨文件系统 不能连接到目录,因为如果使用hard link连接到目录,连接的数据需要连同被连接目录下面的所有数据都建立连接,会造成环境相当大的复杂度,因此对于目录暂时不支持

symbolic link(符号连接,也即快捷方式)

symbolic link就是创建一个独立的文件,而这个文件会让数据的读取指向它链接的那个文件的文件名,由于只是利用文件作为指向的操作,所以当源文件被删除后,symbolic link的文件会找不到源文件而导致无法打开。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表