如何从 Linux 终端查看可用磁盘空间和磁盘使用情况

Linux 系统中 df 和 du 命令详解

在 Linux、macOS 以及其他类 Unix 操作系统中,dfdu 命令是 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 为单位查看磁盘空间使用情况。注意,BM 之间没有空格。

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

通过使用 dfdu 命令,可以方便地找到哪些硬盘空间被占用,以及具体哪些文件或目录占用了空间。 然后,用户可以做出明智的决策,例如将数据转移到其他存储设备、添加新的硬盘或删除冗余数据。

df 命令du 命令 都有很多选项,本文介绍了最常用的部分,可以在 Linux 手册页中查看完整列表。