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

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

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

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

从图中可以看到,虽然用df命令查看/etc目录的使用情况,但是df命令会自动分析该目录所在的分区,然后将该分区的使用情况列举出来。这里不要犯迷糊,只要不进行磁盘限额,那么/etc目录能够使用的容量就是该目录所在文件系统的容量。

那如果我就是要看当前/etc目录已占用的文件系统容量,那就得通过 du命令,du命令主要用来查看目录所占的容量。不同于df命令,du命令是直接到文件系统内去查看所有的文件系统数据,因此执行时间可能会久一点。关于du命令还是多讲一点,可能鸟哥书上讲的不是很清楚,du命令默认会显示该目录下各个子目录的容量,而显示的总目录容量是已经将该目录下各个子目录的容量加和的。

举个例子,如图所示:

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

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

图中可以清晰的观察到hard_link 和 test.file关联到同一个inode号码,因此这两个文件代表的是同一个文件,而且引用计数为2。而symbol_link文件的inode不同于test.file,因为symbol_link是一个独立的文件,只不过它是一个指向test.file的连接文件,而且可以观察到symbol_link的文件长度为9字节,其实就是test.file这个文件的文件名长度。

最后讲解一下关于目录的连接数量。每当新建一个空目录时,该新目录的连接数量为2。为什么呢?首先目录本身占据一个连接,然后该目录里还有一个特殊目录“.”,它也是代表该目录,因此该目录的连接数量为2。 如果在该新的目录里创建一个子目录,该目录的连接数又将+1。因为新建的子目录里有一个特殊目录“..”,代表上级目录,它也指向该目录,因此该目录的连接数+1。

本章Linux命令总结:

df, du, ln。

时间: 2024-11-05 12:09:51

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

鸟哥的Linux私房菜 基础学习篇读书笔记(7):Linux文件与目录管理

这一章主要讲述的是如何操作与管理Linux系统中的文件和目录,主要包括目录间的切换,目录的创建与删除,文件的创建与删除,文件的查找,文件内容的查看等等. 前一章中已经讲过相对路径以及绝对路径,绝对路径就是指从根目录("/")开始写起的路径名,而相对路径绝不会由根目录开始写起,相反,相对路径是相对于当前工作目录的路径名.Linux操作系统中有几个特殊的目录: . 代表此层目录: .. 代表上一层目录: - 代表前一个工作目录: ~ 代表当前用户身份所在的主文件夹: ~account 代表

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

Linux最传统的磁盘文件系统就是EXT2了(当然现在已经升级成为EXT4),这一章主要介绍Linux的磁盘文件系统,而这篇文章主要聚焦的是Linux的EXT2文件系统. 我们都知道磁盘分区完成之后要进行格式化,之所以要格式化就是因为每种操作系统所使用的文件系统格式是不一样的.在Linux中,主要就是EXT2这种文件系统格式了,默认情况下Windows操作系统是无法识别Linux的EXT2文件系统.通常情况下,一个分区就是一个文件系统,但是由于新技术的利用,我们可以将多个分区合成一个文件系统,因

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

这篇文章主要总结在Linux操作系统中管理我们的硬盘和文件系统所需要用到的命令.当我们在系统中增加了一块硬盘,我们需要经历哪些步骤才能真正使用这块硬盘呢?大致可以分为以下步骤: (1)对磁盘进行分区,新建可以使用的分区: (2)对分区进行格式化,将分区格式化为我们操作系统能够使用的文件系统: (3)对新建好的文件系统进行检验: (4)创建挂载点,将该文件系统挂载上来. 接下来就介绍磁盘分区,格式化,检验和挂载的相关命令. 磁盘分区通过 fdisk命令进行,fdisk命令的基本使用方法 为"fdi

【Linux】鸟哥的Linux私房菜基础学习篇整理(一)

最近,一直在写PPC的模拟器和汇编器,也在做设计.所以重新看了看<鸟哥的Linux私房菜>,还是有好多命令不太熟悉.就打算写几篇blog记下来. 1. nl [-bnw] filename:添加行号打印参数:-b:指定行号指定的方式,主要有两种: -b a:表示不论是否为空行,也同样列出行号(类似cat -n): -b t:如果有空行,空的那一行不要列出行号(默认值).-n:列出行号表示的方法,主要有三种: -n ln:行号在屏幕的最左方显示: -n rn:行号在自己字段的最右方显示,且不加0

【Linux】鸟哥的Linux私房菜基础学习篇整理(二)

1. dumpe2fs [-bh] devicename:查询superblock信息.参数:-b:列出保留为坏道的部分:-h:列出superblock的数据,不会列出其他的区段内容. 2. df [-ahikHTm] 目录或文件名:列出文件系统的整理磁盘使用量.参数:-a:列出所有的文件系统,包括系统特有的/proc等文件系统:-k:以KB的容量显示各文件系统:-m:以MB的容量显示各文件系统:-h:以人们易阅读的GB.MB.KB等格式自行显示:-H:以M=1000K替代M=1024K的进位方

【Linux】鸟哥的Linux私房菜基础学习篇整理(七)

1. test命令的测试功能.测试的标志:(1)关于文件类型的检测 test [-efdbcSpL] filename-e:该文件名是否存在:-f:该文件名是否为文件:-d:该文件名是否为目录:-b:该文件名是否存在且为一个block device设备:-c:该文件名是否存在且为一个character device设备:-S:该文件名是否存在且为一个Socket文件:-p:该文件名是否存在且为一个FIFO文件:-L:该文件名是否存在且为一个连接文件.(2)关于文件权限的检测 test [-r]

【Linux】鸟哥的Linux私房菜基础学习篇整理(九)

1. quotacheck [-avugfM] [/mount_point]:扫描文件系统并创建Quota配置文件.参数:-a:扫描所有在/etc/mtab内,含有quota支持的文件系统,加上此参数后,不必写/mount_point:-u:针对用户扫描文件与目录的使用情况,会新建aquota.user:-g:针对用户组扫描文件与目录的使用情况,会新建aquota.group:-v:显示扫描过程的信息:-f:强制扫描文件系统,并写入新的quota配置文件(危险):-M:强制以读写的方式扫描文件系

Bombe 【Linux】鸟哥的Linux私房菜基础学习篇整理(三)

1. gzip [-cdtv#] filename:压缩.参数:-c:将压缩的数据输出到屏幕上,可通过数据重定向进行处理:-d:解压缩的参数:-t:可以用来检验一个压缩文件的一致性,查看文件有无错误:-v:可以显示出原文件/压缩文件的压缩比等信息:-#:压缩等级,1最快(压缩比最差),9最慢(压缩比最好),默认6. 2. zcat *.gz:读取gzip压缩文件. 3. bzip2 [-cdkzv#] filename:压缩.参数:-c:将压缩过程中产生的数据输出到屏幕上:-d:解压缩的参数:-

【Linux】鸟哥的Linux私房菜基础学习篇整理(十二)

1. depmod [-Ane]:更新内核模块依赖.参数:无参数:depmod会主动分析目前内核的模块,并重新写入/lib/modules/$(uname -r)/modules.dep中:-A:depmod会查找比modules.dep内还要新的模块,如果找到符合模块才更新:-n:不写modules.dep,而将结果输出到屏幕:-e:显示目前已加载的不可执行的模块名称. 2. lsmod:查看内核目前加载的模块. 3. modinfo [-adln] [module_name|filename