如何使用 du 命令示例

默认情况下,如果我们单独运行 'du' 命令,它将递归列出当前工作目录中每个目录正在使用的空间,以 kb 为单位。

[jack@onitroad /]# pwd
/
[jack@onitroad /]# du | wc -l
17253

“du”命令示例

    1. 指定最大深度
      如上例所示, du 递归查询其执行位置下面的所有目录。我们可以通过使用 --max-depth 指定我们应该检查的深度来使它更有用,它可以缩短为 -d 选项。通过将其设置为 1,我们将查看 1 个目录深度并显示当前位置内所有目录的使用大小。如果我们将深度指定为 2,我们将看到下一级所有目录的磁盘使用情况,依此类推。
[jack@onitroad test]# du -d 1
5520    ./test1
22080   ./test2
33120   .
[jack@onitroad test]# du -d 2
2760    ./test1/test1-sub
5520    ./test1
16560   ./test2/test2-sub
22080   ./test2
33120   .
  • 2.查看特定目录
    默认情况下,'du' 命令将在当前工作目录的上下文中运行。我们可以简单地将目录指定为命令的参数,而不是更改到我们要调查的目录。
[jack@onitroad /]# pwd
/
[jack@onitroad /]# du /root/test/test1/
2760    /root/test/test1/test1-sub
5520    /root/test/test1/
    1. 以人类可读的格式输出

-h 选项将通过转换为例如 KB、MB 或者 GB 来输出人类可读的格式。

[jack@onitroad /]# du -h -d 1 /
118M    /boot
0       /dev
0       /proc
8.6M    /run
0       /sys
21M     /etc
36M     /root
140K    /tmp
116M    /var
860M    /usr
0       /home
0       /media
0       /mnt
0       /opt
0       /srv
1.2G    /
    1. 以字节为单位显示磁盘使用情况

我们也可以采用另一种方式,以字节为单位显示数字,而不是使用 -b 选项显示默认 kb 值,这对于监视需要特定值的脚本可能更有用。

[jack@onitroad test]# du -b
2823810 ./test1/test1-sub
5647636 ./test1
16942830        ./test2/test2-sub
22590460        ./test2
96009266        .
    1. 显示文件的磁盘使用情况
      默认情况下,到目前为止,我们已经看到了目录而不是特定文件的磁盘空间使用情况。虽然这确实允许我们检查目录以查看正在使用空间的内容,但我们可以选择使用 -a 选项,该选项也将显示所有文件。
[jack@onitroad test]# du -h -d 2 -a
2.7M    ./test1/test1-sub
2.7M    ./test1/1
5.4M    ./test1
17M     ./test2/test2-sub
2.7M    ./test2/7
2.7M    ./test2/8
22M     ./test2
2.7M    ./1
2.7M    ./2
33M     .
    1. 报告总磁盘空间
      使用 -c 选项,我们可以在输出的底部报告总空间。
[jack@onitroad test]# du -h -d 2 -c
2.7M    ./test1/test1-sub
5.4M    ./test1
17M     ./test2/test2-sub
22M     ./test2
33M     .
33M     total

我们可能最好使用 -s 选项,它只会输出摘要。

[jack@onitroad test]# du -h -s
33M     .
    1. 按磁盘使用大小排序输出
      虽然没有内置在 du 命令中,但我们可以将其通过管道传递给 sort 命令,以便按文件大小的顺序列出文件,例如从最小到最大。这非常有用,因为我们可以搜索整个磁盘并根据文件大小对输出进行排序,从而使我们能够快速定位大文件。
[jack@onitroad test]# du -h -a / | sort -h | tail -n 15
105M    /usr/lib/firmware
113M    /usr/lib/modules/3.10.0-327.22.2.el7.x86_64/kernel
116M    /usr/lib/modules
116M    /usr/lib/modules/3.10.0-327.22.2.el7.x86_64
118M    /boot
128M    /usr/lib64
169M    /var/cache/yum
169M    /var/cache/yum/x86_64
169M    /var/cache/yum/x86_64/7
170M    /var/cache
209M    /var
265M    /usr/share
361M    /usr/lib
860M    /usr
1.3G
    1. 显示最后修改时间
      在使用磁盘空间搜索可能被删除的文件时,查看上次修改的时间戳可能会有所帮助。例如,如果使用的磁盘空间随着时间的推移而增加,那么最近修改的文件是一个很好的调查位置,例如我们可能有一个不断被修改和写入的大型日志文件。
[jack@onitroad log]# du -h -d 1 --time -a
0       2014-08-29 14:18        ./tallylog
24K     2014-08-30 09:22        ./lastlog
4.0K    2014-08-30 09:22        ./btmp
8.0K    2014-08-30 09:22        ./wtmp
0       2014-06-10 16:27        ./ppp
332K    2014-08-30 10:01        ./messages
8.0K    2014-08-30 09:22        ./secure
4.0K    2014-08-30 09:20        ./maillog
0       2014-08-29 14:18        ./spooler
4.0K    2014-08-30 09:20        ./tuned
308K    2014-08-30 10:01        ./audit
1.7M    2014-08-29 14:21        ./anaconda
4.0K    2014-08-30 10:01        ./cron
4.0K    2014-08-30 09:20        ./wpa_supplicant.log
8.0K    2014-08-29 16:23        ./yum.log
0       2014-07-19 01:30        ./httpd
12K     2014-08-30 09:20        ./boot.log
124K    2014-08-29 14:23        ./dmesg.old
124K    2014-08-30 09:20        ./dmesg
2.7M    2014-08-30 10:01        .

虽然最后修改时间是默认的,但我们可以选择分别使用“--time=atime”或者“--time=ctime”指定访问时间和更改时间。

    1. 只显示大于指定尺寸
      我们可以设置阈值以仅显示大于指定数字的结果,而不是显示所有文件和目录的大小。如果我们要搜索大于指定大小的文件,这可能会有所帮助,这对于查找可能占用大部分磁盘空间的大型单个文件很有用。
[jack@onitroad test]# du -h -t 100M -a /
118M    /boot
116M    /var
105M    /usr/lib/firmware
102M    /usr/lib/locale/locale-archive
102M    /usr/lib/locale
113M    /usr/lib/modules/3.10.0-327.22.2.el7.x86_64/kernel
116M    /usr/lib/modules/3.10.0-327.22.2.el7.x86_64
116M    /usr/lib/modules
361M    /usr/lib
128M    /usr/lib64
265M    /usr/share
860M    /usr
1.2G    /

在此示例中,仅返回大于 100MB 的文件和目录。

    1. 从搜索中排除模式
      使用 --exclude 选项,我们可以选择不显示与搜索结果中指定模式匹配的任何内容。
[jack@onitroad test]# du -h -d 1 -a
5.4M    ./test1
22M     ./test2
63M     ./3.iso
2.7M    ./1.txt
2.7M    ./2.mp3
96M     .
[jack@onitroad test]# du -h -d 1 -a --exclude="*.iso"
5.4M    ./test1
22M     ./test2
2.7M    ./1.txt
2.7M    ./2.mp3
33M     .

在这个例子中,我们可以看到我们的输出中有一个 .iso 文件,但是在排除这个特定的字符串后,它不再显示在输出中。如果我们知道要从结果中排除的某些文件,这将非常有用,因为我们可能不想调查某些已知文件集。

    1. 列出 inode 使用情况
      默认情况下 du 显示块使用情况,但是我们可以改为使用 -inode 选项更改它以显示 inode 使用情况。
[jack@onitroad test]# du -d 2 --inodes
2       ./test1/test1-sub
4       ./test1
7       ./test2/test2-sub
10      ./test2
18      .
    1. 删除换行符
      默认情况下,du 命令的输出每行显示一个结果,这在我们读取输出时很有帮助,但是如果我们可能正在创建脚本来收集数据并在输出上执行任务,则可能更容易使用不带换行符的数据字符串执行此操作。这就是 -0 选项的用武之地,它将新行字符替换为空字节并将所有内容输出到一行中。
[jack@onitroad test]# du -0
2760    ./test1/test1-sub5520   ./test116560    ./test2/test2-sub22080  ./test293788    .[jack@onitroad test]#
    1. 不要显示来自不同文件系统的内容
      默认情况下,du 命令将从指定的位置或者当前工作目录中的其他位置递归搜索。如果我们挂载了其他文件系统,例如挂载到 /mnt 的 NFS 共享,我们可能不想查看这些可能来自不同磁盘或者分区的其他文件系统。这是 -x 选项的用武之地,它将忽略它可能找到的所有其他文件系统。
[jack@onitroad test]# du -d 1 -x /
21400   /etc
97072   /root
140     /tmp
213716  /var
880124  /usr
0       /home
0       /media
0       /mnt
0       /opt
0       /srv
1212456 /

在此示例中,请注意我们在“/”中运行 du,但是缺少许多目录,例如 /boot。这是因为它们运行在不同的文件系统上,而“/”是 /dev/sda2 上的 XFS,/boot 位于 /dev/sda1 磁盘上并运行不同的文件系统。

Linux du 命令示例

du 命令是disk usage的缩写,用于找出 Linux 中正在使用磁盘空间。
在 CentOS 中,它是 coreutils 包的一部分。

日期:2020-07-07 20:56:59 来源:oir作者:oir