Alex_McAvoy

想要成为渔夫的猎手

Linux 文件系统基本操作

【磁盘与目录容量】

df 命令

df 命令用于列出文件系统的整体磁盘使用量,命令格式为:df [选项] [目录或文件名]

其选项有:

  • -a:列出所有的文件系统
  • -k:以 KB 的容量显示文件系统
  • -m:以 MB 的容量显示文件系统
  • -h:以容易阅读的 KB、MB、GB 等形式显示
  • -H:以 M=1000K 代替 M=1024K 的进位方式
  • -T:连同分区的文件系统名称一起列出
  • -i:不使用硬盘容量,而用 inode 数量显示

如下图,将系统内所有的文件系统列出

对于输出的结果信息,各字段含义如下:

  • 文件系统:该文件系统是在哪个分区,所列出的设备名称
  • 类型:该分区的文件系统名称,由 -T 选项指示
  • 1-K 块:数字单位是 1K,可由 -h 或 -T 选项来改变容量
  • 已用:已使用的硬盘空间
  • 可用:剩余的磁盘空间
  • 已用 %:磁盘的使用率
  • 挂载点:磁盘挂载的目录所在

需要注意的是,如果使用 -a 选项,系统会出现 /proc 这个挂载点,但所有的字段均为 0,这是因为 /prop 内的文件都是系统所需要加载的系统数据,且挂载在内存中,没有占用任何硬盘空间

du 命令

du 命令用于评估文件系统的磁盘使用量,常用于评估目录所占容量,命令格式为:du [选项] 目录或文件名

其选项有:

  • -a:列出所有的文件与目录容量,默认情况下,只统计目录下的文件量
  • -k:以 KB 的容量显示
  • -m:以 MB 的容量显示
  • -h:以容易阅读的 KB、MB、GB 等形式显示
  • -s:列出总量,而不列出各目录所占容量
  • -S:列出不包括子目录下的总量

如下图,在未加任何选项时,du 命令会自动分析当前目录下文件与目录所占的硬盘空间,但实际显示时,仅会显示目录容量,且默认情况下,以 KB 容量显示

【连接文件】

ln 命令

ln 命令用于连接文件,命令格式为:ln [选项] 源文件 目标文件

其选项如下:

  • -s:进行软连接(若不加任何参数,则进行硬连接)
  • -f:若目标文件存在时,就主动将目标文件删除后重新创建

硬连接

在 Linux 中,每个文件都会占用一个 inode,文件内容由 inode 的记录来指向,想要读取文件,必须经过目录记录的文件名来指向到正确的 inode 号才可读取

也就是说,文件名只与目录有关,但文件内容与 inode 有关,硬连接就是在某个目录下新建一条文件名连接到某 inode 号的关联记录

举例来说,假设系统存在一个文件名为 /root/crontab,其是 /etc/crontab 的实际连接,也就是说这两个文件名连接到同一个 inode,自然而然这两个文件的所有相关信息除文件名外相同

如下图所示,可以通过 1 或 2 的目录的 inode 指定 block 找到两个不同的文件名,但无论使用哪个文件名均可以指到 real 所对应的 inode 以读取文件内容

使用硬连接最大的好处就是安全,如果将任何一个文件名删除,其实 inode 与 block 都是存在的,此时可以通过另一个文件名来读取文件内容,此外,无论使用哪个文件名进行编辑,最终都会写入到相同的 inode 与 block 中

但硬连接仅能在单一文件系统中进行,无法跨文件系统,此外,其也无法连接到目录

软连接

软连接又称符号连接,其类似于 Windows 系统下的快捷方式

也就是说,软连接是在建立一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件的文件名,由于只是利用文件来做指向操作,因此当源文件被删除后,软连接的文件会无法打开,实际上就是找不到源文件的文件名

如下图所示,由 1 号 inode 读取到连接文件的内容只有文件名,根据文件名连接到正确的目录去取得目标文件的 inode,如果目标文件被删除,那么整个读取环节就无法进行下去

感谢您对我的支持,让我继续努力分享有用的技术与知识点!