鸟哥的Linux私房菜基础学习篇读书笔记(9):Linux磁盘与文件系统管理(2)


上一篇文章主要从理论上分析了Linux的Ext2文件系统,这一篇主要讲解如何查看Linux的文件系统的容量以及讲解Linux文件系统中的连接文件。

可以通过df和du命令来查看磁盘与目录的容量,df命令用来列出文件系统的整体磁盘容量,df命令的用法是 df [-ahikHTm] 目录或文件名,如果df命令不加任何参数,则默认将系统内所有的文件系统的容量以及使用情况都列出来。关于df命令还需要说明的是 df命令是查看文件系统的整体使用情况,因此是从Super block(见前一篇文章)中读取信息,因此df命令的执行速度非常快。

以下是df命令的使用举例:

\

vc7EvP7Ptc2zxNrIpbLpv7TL+dPQtcTOxLz+z7XNs8r9vt2jrNLytMvWtNDQyrG85L/JxNy74b7D0ru146GjudjT2mR1w/zB7ru5yse24L2y0ru146Osv8nE3MTxuOfK6cnPvbK1xLK7yse63Mfls/6jrGR1w/zB7sSsyM+74c/Uyr64w8S/wrzPwrj3uPbX08S/wry1xMjdwb+jrLb4z9TKvrXE19zEv8K8yN3Bv8rH0tG+rb2ruMPEv8K8z8K497j219PEv8K8tcTI3cG/vNO6zbXEoaM8L3A+CjxwPr7ZuPbA/dfTo6zI5828y/nKvqO6PC9wPgo8cD48aW1nIHNyYz0="http://www.2cto.com/uploadfile/Collfiles/20141008/2014100810232217.png" alt="\">

\

/home目录下总共有三个子目录: /home/hw , /home/test_one ,/home/fuchencong ,它们的容量(已经算上子目录)分别是4k,52k,240k,而且可以查看到 /home 目录自己本身(不算子目录的容量)是4k,所以最终显示的/home目录的容量是 4k + 52k + 240k + 4k= 300k。

另外在使用du命令时,如果加上-S参数,则显示的目录容量就不会加上子目录的容量,此时只是显示该目录本身占用的容量(当然还包括该目录下的直接文件),如下图所示: /home目录显示的占用容量为4k,这就是/home目录本身所占用的容量,而不包括其子目录所占用的容量。

\

接下来讲解Linux中的连接文件,如果已经理解了Linux的Ext2文件系统,那么理解连接文件就非常简单了。

在Linux操作系统中,连接文件分为两种,硬连接(实际连接)和 符号连接。可以使用ln命令创建连接文件,ln命令的使用方法为 ln [-sf] 源文件 目标文件,如果不加任何参数制作连接文件,就是默认创建硬连接,如果加上-s参数,就是代表创建符号连接文件。那硬连接和符号连接有什么区别呢?

上一篇文章已经讲过,Linux读取一个文件时,首先要从目录block里找出该文件名对应的inode号码,那如果同时有多个文件名同时对应一个inode号码,那么无论通过哪个文件名实际上都访问到同一个文件,其实这就是硬连接。 简单的说,硬链接只是在某个目录下新建一条文件名关联到某个inode号码的关联记录而已。当有多个文件名关联到同一个inode号码,就可以通过其中的任意一个文件名来访问该文件的数据,而且无论通过哪个文件名来修改数据,最终都会修改到实际的文件数据。类似的,当删除一个文件时,其实只是将对应的inode里的引用计数-1,并不会真的删除文件数据,只有当该文件inode里的引用计数减为0,该文件数据才会真的被删除。

但是硬连接也是有限制的,因为每个文件系统都有自己的inode编号,所以目录项里文件名对应的inode号码只能是同一文件系统里的inode号码,因此硬连接只能针对同一文件系统创建,不能跨文件系统建立。而且硬连接也不能连接到目录。一方面对目录创建硬连接会增加系统环境的复杂度,另一方面对目录创建硬连接容易造成循环。因此不支持硬连接到目录。

Linux中还有一类连接,称为符号连接。不同于硬连接,符号连接是创建了一个独立的文件,只不过对这个文件的数据读取会被转向为对它指向文件的数据读取。因此当源文件被删除时,符号连接就会“开不了”。而且对于一个符号连接,它的文件长度就是它所引用文件的文件名长度,因为在连接文件中,它的内容就是目标文件的“文件名”。

以下是硬连接和符号连接的一个实例:

n块?玽X赚跌)鑥憩蔲钖X)鑥隵沧鈺?櫤%?涞?~)^?洟Yb濷mz薩奧喀澏銄x達楗╧yLinux命令总结:

df, du, ln。

相关内容