Linux 系统中 df 和 du 命令详解
在 Linux、macOS 以及其他类 Unix 操作系统中,df
和 du
命令是 Bash shell 中用来报告磁盘空间使用情况的重要工具。它们可以帮助用户轻松了解系统存储空间的使用状况。
查看磁盘空间:总览、可用与已用
Bash 提供了两个相关的实用命令。 df
(磁盘文件系统) 用于查看可用和已用磁盘空间,而 du
(磁盘使用情况) 则用于分析哪些文件或目录占用了磁盘空间。
在 Bash 终端中输入 df
并按下回车键,你将看到类似下方截图的输出。 不带任何选项的 df
命令会显示所有已挂载文件系统的可用空间和已用空间。 初看可能有些复杂,但理解起来并不困难。
df
每一行输出由六列组成,含义如下:
Filesystem | 文件系统的名称。 |
1K-Blocks | 文件系统上可用的 1K 块数量。 |
Used | 文件系统上已使用的 1K 块数量。 |
Available | 文件系统上未使用的 1K 块数量。 |
Use% | 文件系统中已用空间占总空间的百分比。 |
File | 文件系统名称,如果在命令行中指定。 |
Mounted on | 文件系统的挂载点。 |
可以使用 -B
(块大小) 选项,将默认的 1K 块计数替换为更实用的单位。 例如,使用 df -BM
可以以 MB 为单位查看磁盘空间使用情况。注意,B
和 M
之间没有空格。
df -BM
-h
(人类可读) 选项指示 df
命令对每个文件系统的大小使用最合适的单位,如 GB、MB 或 KB。
df -h
若要查看 inode 的相关信息,可以使用 -i
(inode) 选项。 inode 是 Linux 文件系统中用于描述文件和存储文件元数据的数据结构。它保存着每个文件和目录的名称、修改日期、在硬盘上的位置等数据。对于系统管理员来说,这些信息有时非常重要。
df -i
默认情况下,df
命令会输出所有已挂载文件系统的信息,这可能导致输出内容繁杂。 例如,/dev/loop
条目是伪文件系统,用于将文件像分区一样挂载。 如果使用 Ubuntu snap 安装应用程序,可能会出现很多这样的条目。 因为它们不是真正的文件系统,可用空间总是为 0,所以可以将其排除。
可以使用 -T
(打印类型) 选项显示文件系统类型,以便排除特定类型的文件系统。
df -T
例如,/dev/loop
条目都是 squashfs 文件系统,可以使用以下命令将其排除:
df -x squashfs
可以添加 --total
选项来获取总计值。
df -x squashfs --total
使用 -t
(type) 选项可以只包含特定类型的文件系统。
df -t ext4
如果想查看特定文件系统的大小,可以直接指定文件系统的名称。 在 Linux 中,驱动器名称按字母顺序排列,如 /dev/sda
、/dev/sdb
等。 分区编号也遵循此规则,如 /dev/sda1
代表 /dev/sda
上的第一个分区。 以下命令可以显示第一个硬盘的第一个分区的信息:
df /dev/sda1
可以使用通配符 *
表示任意字符集,?
表示任意单个字符。例如,查看第一个驱动器上的所有分区,可以使用:
df /dev/sda*
可以要求 df
报告一组命名文件系统的信息并给出总计值。
df -h --total /dev /run
使用 --output
选项,可以自定义输出的列,列名之间使用逗号分隔,并且逗号前后不能有空格。以下是可用列的含义:
source | 文件系统的名称。 |
fstype | 文件系统的类型。 |
itotal | inode 中文件系统的大小。 |
iused | inode 中文件系统上已使用的空间。 |
iavail | inode 中文件系统上的可用空间。 |
ipcent | inode 中文件系统上已用空间的百分比。 |
size | 文件系统的大小,默认为 1K 块。 |
used | 文件系统上已使用的空间,默认为 1K 块。 |
avail | 文件系统上的可用空间,默认为 1K 块。 |
pcent | 文件系统上已用空间的百分比,默认为 1K 块。 |
file | 文件系统名称(如果在命令行上指定)。 |
target | 文件系统的挂载点。 |
以下命令显示第一个驱动器的第一个分区的信息,并显示 source, fstype, size, used, avail 和 pcent 列,且数字以人类可读的形式呈现。
df -h /dev/sda1 --output=source,fstype,size,used,avail,pcent
可以将常用的长命令设置为别名。例如,通过以下命令可以创建别名 dfc
(df custom):
alias dfc="df -h /dev/sda1 --output=source,fstype,size,used,avail,pcent"
输入 dfc
并按下回车键,效果与输入长命令相同。 为了使别名永久生效,需要将其添加到 .bashrc
或 .bash_aliases
文件中。
可以使用 -a
(all) 选项和 --output
选项获取 df
命令的全部信息。 -a
选项要求 df 包含每个文件系统,不带逗号分隔的列列表的 --output
选项会导致 df
包含每一列。
df -a --output
使用 less
命令可以将 df
的输出分页查看。
df -a --output | less
定位占用磁盘空间的原因
让我们继续使用一些命令来找出电脑上占用空间的原因。首先使用 df
命令:
df -h -t ext4
第一个硬盘的第一个分区使用了 78% 的磁盘空间。 现在可以使用 du
命令查看哪些文件夹占用了最多的数据。 不带任何选项的 du
命令会显示当前目录下的所有目录和子目录的列表。 如果在主目录执行,则输出的列表会非常长。
du
du
命令的输出格式非常简单,每行显示一个目录的大小和名称,默认大小以 1K 块显示。 类似 df
命令,可以使用 -B
选项更改块大小。 例如,使用 du -BM
可以以 MB 为单位查看目录大小。
du -BM
du
命令同样有 -h
(人类可读) 选项,可以根据每个目录的大小自动使用合适的单位。
du -h
-s
(summarize) 选项可以显示每个目录的总计大小,不显示子目录的信息。 例如,以下命令可以以摘要格式显示当前目录下所有目录的信息。
du -h -s *
可以结合 sort
命令,按照大小从大到小排序。
du -sm Pictures/* | sort -nr
通过使用 df
和 du
命令,可以方便地找到哪些硬盘空间被占用,以及具体哪些文件或目录占用了空间。 然后,用户可以做出明智的决策,例如将数据转移到其他存储设备、添加新的硬盘或删除冗余数据。