如何在Linux中使用du命令
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