如何在Linux中使用du命令

时间:2020-03-05 15:28:29  来源:igfitidea点击:

DU(磁盘使用率)是Linux中使用的命令,以检查目录大小,包括其它内容以及各个文件的大小。

当文件和目录开始在硬盘上消耗大量磁盘空间时,Du是询问导致此目录或者文件的最佳命令。

在本教程中,我们了解如何在Linux中使用du命令来检查磁盘使用情况(文件或者目录)。

du命令和语法

以下行显示du命令的语法:

du [options] [file or directory name]

默认情况下,没有任何选项,它会显示给定文件或者目录的磁盘使用情况以及每个子目录中的每个子目录。
如果没有提到的文件或者目录名,则du commad显示当前工作目录的磁盘使用情况。

# du /boot
2508    /boot/grub2/fonts
3068    /boot/grub2/i386-pc
5592    /boot/grub2
4       /boot/efi/EFI/centos
8       /boot/efi/EFI
12      /boot/efi
16      /boot/loader/entries
20      /boot/loader
152440  /boot

du命令与-a选项打印目录中所有文件的磁盘使用情况。

# du -a /boot
7920    /boot/vmlinuz-4.18.0-147.5.1.el8_1.x86_64
3752    /boot/System.map-4.18.0-147.5.1.el8_1.x86_64
4       /boot/grub2/device.map
4       /boot/grub2/grub.cfg
4       /boot/grub2/grubenv
2504    /boot/grub2/fonts/unicode.pf2
2508    /boot/grub2/fonts
8       /boot/grub2/i386-pc/cs5536.mod
4       /boot/grub2/i386-pc/gcry_rsa.mod
8       /boot/grub2/i386-pc/lsacpi.mod
52      /boot/grub2/i386-pc/gcry_camellia.mod
4       /boot/grub2/i386-pc/cpio_be.mod
......
152440  /boot

我们可以看到它在命令末尾打印出"152440"是'/boot'目录的总大小(以字节为单位)的总大小。

获取指定目录的总大小

要显示我们必须使用-s选项的指定目录的总大小,但不会报告子目录。
以下示例,它显示了'/boot'目录的总大小。

# du -s /boot
152440  /boot

我们可以按以下目录打印总磁盘使用情况,如下所示:

# du -s /boot /var
152440 /boot
332168 /var

人类可读格式

到目前为止,我们看到磁盘大小以字节显示不大,这些格式并不多。
为了以千字节(k),兆字节(m)和千兆字节(g)打印输出,我们必须使用-h选项。

# du -h /boot
2.5M    /boot/grub2/fonts
3.0M    /boot/grub2/i386-pc
5.5M    /boot/grub2
4.0K    /boot/efi/EFI/centos
8.0K    /boot/efi/EFI
12K     /boot/efi
16K     /boot/loader/entries
20K     /boot/loader
149M    /boot

" - si"选项就像'-h"选项,但它使用1000而不是1024的权力。

# du --si /boot
2.6M    /boot/grub2/fonts
3.2M    /boot/grub2/i386-pc
5.8M    /boot/grub2
4.1k    /boot/efi/EFI/centos
8.2k    /boot/efi/EFI
13k     /boot/efi
17k     /boot/loader/entries
21k     /boot/loader
157M    /boot

要以人为可读的格式获取指定目录的总大小,这是非常常用的du命令,请使用以下命令:

# du -sh /boot
149M /boot

结合总体大小

当我们希望将总大小组合在多个目录上时非常有用。
以下示例du命令组合(-c)指定的总磁盘大小(-s)'/boot'和'/var'目录,并以人类可读格式的最后一行打印(-h):

# du -csh /boot//var
149M    /boot/
317M    /var
466M    total

显示所有文件和目录的单个大小

使用通配符(*)我们可以打印每个文件和目录的各个大小,然后将总大小组合在最后一行中打印。

# du -csh /boot/*
184K    /boot/config-4.18.0-147.5.1.el8_1.x86_64
180K    /boot/config-4.18.0-80.7.1.el8_0.x86_64
12K     /boot/efi
0       /boot/grub
5.5M    /boot/grub2
53M     /boot/initramfs-0-rescue-3e729c2d7c094902af0333ce40564ffe.img
23M     /boot/initramfs-4.18.0-147.5.1.el8_1.x86_64.img
23M     /boot/initramfs-4.18.0-80.7.1.el8_0.x86_64.img
16M     /boot/initramfs-4.18.0-80.7.1.el8_0.x86_64kdump.img
20K     /boot/loader
3.7M    /boot/System.map-4.18.0-147.5.1.el8_1.x86_64
3.6M    /boot/System.map-4.18.0-80.7.1.el8_0.x86_64
7.6M    /boot/vmlinuz-0-rescue-3e729c2d7c094902af0333ce40564ffe
7.8M    /boot/vmlinuz-4.18.0-147.5.1.el8_1.x86_64
7.6M    /boot/vmlinuz-4.18.0-80.7.1.el8_0.x86_64
149M    total

du命令与模式匹配

使用du命令我们可以执行模式匹配。
在下面的命令中,它显示了如何查找以'bo'开头的所有目录的磁盘大小。

# du -sch /bo*
149M    /boot
217M    /bootstrap
366M    total

使用du命令获得明显的大小

"--apparent-size"选项"打印了明显的大小(文件中的实际数据量)而不是磁盘使用情况。

# du --apparent-size /boot
2505    /boot/grub2/fonts
2544    /boot/grub2/i386-pc
5057    /boot/grub2
4       /boot/efi/EFI/centos
8       /boot/efi/EFI
12      /boot/efi
6       /boot/loader/entries
10      /boot/loader
151852  /boot

检查包含硬链接的目录大小

使用-L或者--count-links选项,如果硬链接,大小将多次计数。
默认情况下,未显示硬链接。

例如

# ls -li
 total 648
 755150 -rw-r--r-- 1 root root 4719 Apr 19 00:46 file1
 755152 -rw-r--r-- 2 root root 312519 Apr 19 00:47 file2
 755152 -rw-r--r-- 2 root root 312519 Apr 19 00:47 file2.hard
 755153 lrwxrwxrwx 1 root root 19 Apr 19 00:57 file2.soft -> /etc/sysconfig/init

其中file2.hard是file2的硬链接。
现在注意用-L和没有它的输出。

# du -ah
 4.0K ./file2.soft
 316K ./file2
 12K ./file1
 340K .
# du -ahl
 4.0K ./file2.soft
 316K ./file2
 12K ./file1
 316K ./file2.hard
 656K .

符号链接的默认行为不是取消引用它们。
对于取消引用符号链接,使用-l或者--deference选项

# du -ahL
 8.0K ./file2.soft
 316K ./file2
 12K ./file1
 344K .

(请注意file2.soft的大小现在已更改)

-p或者--no-dereference选项不会取消引用这些符号链接(这是上面规定的默认行为)。

在"n"级别子目录中显示磁盘使用情况

此选项指示du命令列出子目录及其大小,以其所需的深度级别。

例如,下面的示例仅列出了当前目录树中的第一个层及其大小。
这里还报告了甚至常见的空间消耗。
如果我们将-max-depth =设置为零,则du命令不会列出任何子目录,它只会报告所选目录的大小。

# du --max-depth=1 -h /boot/
7.1M /boot/grub
110M /boot/

du命令排除文件

du命令可以使用-exclude选项排除特定目录。
在以下示例中,我排除了'grub2'目录:

# du  --exclude=grub2 /boot/
4       /boot/efi/EFI/centos
8       /boot/efi/EFI
12      /boot/efi
16      /boot/loader/entries
20      /boot/loader
146848  /boot/

以下是向我们展示如何排除"* .obj"或者'* .jpg'文件的两个示例。

# du -h –exclude=’*.obj’
# du -h –exclude=’*.jpg’

使用du命令打印修改时间

可以使用"时间"选项显示文件和/或者目录的修改时间(或者子目录中的文件/目录)。

# du /boot/--time
4    2016-03-23 15:03    /boot/grub/locale
2348    2016-03-23 15:03    /boot/grub/fonts
2480    2016-03-23 15:03    /boot/grub/i386-pc
7212    2016-04-05 08:31    /boot/grub
112180    2016-04-05 08:31    /boot/

使用du与其他命令

du命令可以使用管道(|)与其他命令组合。
让我们看几个例子

如果我们想在当前工作目录中通过大小查找前3个目录:

# du -skh * | sort -nr | head -3
386M    lib
252M    share
154M    lib64

显示按大小排序的所有文件和目录:

# du -sk * | sort -n
12160   libexec
37552   sbin
58900   bin
70048   src
157456  lib64
257492  share
394504  lib