Linux `du` 命令:文件和目录空间使用分析
在Linux系统中,`du`(disk usage)命令是一个核心工具,专门用于评估文件和目录所占用的磁盘空间。与关注文件系统整体使用情况的`df`命令不同,`du`命令的侧重点在于深入分析特定文件、目录及其子目录的实际磁盘占用量,为用户提供精细的空间使用报告。
1. 命令格式
du [OPTION]... [FILE]...
此命令用于显示指定文件或目录的磁盘使用情况。如果未指定文件或目录,`du`默认显示当前目录的磁盘使用量。
2. 命令参数
`du`命令提供了丰富的选项,允许用户根据需要定制输出格式和内容:
-a或--all:不仅显示目录总大小,也列出目录中所有文件的独立大小。-b或--bytes:以字节(byte)为单位显示磁盘占用量。-c或--total:在列出各个文件或目录大小的同时,一并计算并显示所有指定项的总和。-k或--kilobytes:以千字节(KB,1024字节)为单位展示结果。-m或--megabytes:以兆字节(MB)为单位显示磁盘空间。-s或--summarize:只显示每个参数的总计,不列出子目录或文件的详细信息。-h或--human-readable:以人类可读的格式输出,例如使用 K、M、G 等单位。-x或--one-file-system:跳过位于不同文件系统上的目录或文件,仅处理初始文件系统内的内容。-L或--dereference:跟踪符号链接,显示其指向的源文件或目录的实际大小。-S或--separate-dirs:在显示单个目录大小时,不包含其子目录的大小,仅计算该目录自身直接包含的文件和目录项。--exclude=PATTERN:排除符合指定模式(PATTERN)的文件或目录。--max-depth=N:限制报告的深度为N层,例如`--max-depth=1`只显示当前目录下的文件和一级子目录的总和。
3. 使用实例
以下示例将演示`du`命令的常见用法。我们假设有一个名为project_data的目录,其结构和文件大小如下:
project_data/
├── documents/
│ ├── annual_report.pdf (80K)
│ └── meeting_notes.txt (5K)
├── archives/
│ ├── backup_2023.tar.gz (500K)
│ └── logs_archive.zip (120K)
├── temp_files/
│ └── scratch.tmp (10K)
└── readme.md (2K)
总大小:80+5+500+120+10+2 = 717 KB
实例1:显示当前目录下的磁盘使用情况
不带任何参数执行`du`命令,会列出当前目录下所有子目录及其内容的磁盘使用量,以及当前目录的总计。
$ cd project_data/
$ du
85 ./documents
620 ./archives
10 ./temp_files
717 .
实例2:显示特定文件或目录所占空间
查询单个文件或目录的磁盘占用量。
$ du readme.md
2 readme.md
$ du documents/
85 documents/
实例3:显示多个文件或目录的总空间
同时查询多个指定文件和目录的磁盘使用量。
$ du documents/ archives/
85 documents/
620 archives/
实例4:仅显示总和大小
使用-s(summarize)选项可以只显示指定目录或文件的总计大小,不列出详细内容。
$ du -s
717 .
$ du -s archives/
620 archives/
实例5:以人类可读的格式显示
-h(human-readable)选项能将输出转换为更易读的单位,如 K、M、G。
$ du -h archives/
500K archives/backup_2023.tar.gz
120K archives/logs_archive.zip
620K archives/
实例6:显示所有文件和目录(包括子文件)
结合使用-a和-h选项,可以显示所有文件和目录的详细大小,并以人类可读的格式输出。
$ du -ah documents/
80K documents/annual_report.pdf
5.0K documents/meeting_notes.txt
85K documents/
实例7:显示指定项的总和
使用-c(total)选项,可以在列出各个文件或目录大小后,在最后一行显示它们的总和。
$ du -c readme.md documents/annual_report.pdf
2 readme.md
80 documents/annual_report.pdf
82 total
实例8:按空间大小排序输出
通过管道将`du`的输出传递给`sort`命令,可以按磁盘使用量进行排序。
$ du | sort -nr | head -n 5
717 .
620 ./archives
120 ./archives/logs_archive.zip
85 ./documents
80 ./documents/annual_report.pdf
这里-n表示按数值排序,-r表示反向(降序)排序,head -n 5只显示前5行。
实例9:限制报告深度
使用--max-depth=N选项可以限制`du`命令递归的层级。例如,--max-depth=1只会显示当前目录下的文件和一级子目录的总大小。
$ du -h --max-depth=1
85K ./documents
620K ./archives
10K ./temp_files
2.0K ./readme.md
717K .