{"msg":"操作成功","code":200,"data":{"createBy":"admin","createTime":"2024-08-04 20:32:47","updateBy":"admin","updateTime":"2024-08-04 20:32:47","remark":null,"id":85,"articleTitle":"每天一个Linux命令（九）du","articleUrl":"linux_du","articleThumbnail":"https://www.asumimoe.com/imgfiles/20250301/b95d839fa195428cb42fc7f104f50b0d.png","articleFlag":"0","draftStatus":"1","reprintStatement":"0","articleSummary":"du是 Linux/Unix 系统中用于统计文件和目录磁盘使用情况的命令（Disk Usage），支持显示文件大小、递归统计目录大小、按特定单位输出等功能。它是磁盘管理和空间分析中常用的工具之一。","articleContent":"`du` 是 Linux/Unix 系统中用于**统计文件和目录磁盘使用情况**的命令（Disk Usage），支持显示文件大小、递归统计目录大小、按特定单位输出等功能。它是磁盘管理和空间分析中常用的工具之一。\n\n---\n\n## 语法\n\n```bash\ndu [选项] [文件/目录...]\n```\n\n---\n\n## 常用选项\n\n| 选项                | 说明                                 |\n| ------------------- | ------------------------------------ |\n| `-h`                | 以易读格式显示大小（如 KB、MB、GB）  |\n| `-s`                | 显示总大小（不显示子目录详情）       |\n| `-a`                | 显示所有文件的大小（包括非目录文件） |\n| `-c`                | 显示总计大小（通常与 `-s` 一起使用） |\n| `--max-depth=N`     | 限制递归深度为 N 层                  |\n| `--exclude=PATTERN` | 排除匹配 PATTERN 的文件或目录        |\n| `--apparent-size`   | 显示文件表面大小（而非磁盘占用）     |\n| `-b`                | 以字节为单位显示大小                 |\n| `-k`                | 以 KB 为单位显示大小                 |\n| `-m`                | 以 MB 为单位显示大小                 |\n\n---\n\n## 使用示例\n\n### 1. 显示当前目录的磁盘使用情况\n\n```bash\ndu\n```\n\n输出示例：\n\n```bash\n4       ./dir1\n8       ./dir2\n12      .\n```\n\n---\n\n### 2. 以易读格式显示大小\n\n```bash\ndu -h\n```\n\n输出示例：\n\n```bash\n4.0K    ./dir1\n8.0K    ./dir2\n12K     .\n```\n\n---\n\n### 3. 显示目录总大小\n\n```bash\ndu -sh /var/log\n```\n\n输出示例：\n\n```bash\n1.2G    /var/log\n```\n\n---\n\n### 4. 显示所有文件的大小\n\n```bash\ndu -ah\n```\n\n输出示例：\n\n```bash\n4.0K    ./file1.txt\n4.0K    ./dir1/file2.txt\n8.0K    ./dir2\n12K     .\n```\n\n---\n\n### 5. 限制递归深度\n\n```bash\ndu -h --max-depth=1\n```\n\n输出示例：\n\n```bash\n4.0K    ./dir1\n8.0K    ./dir2\n12K     .\n```\n\n---\n\n### 6. 显示总计大小\n\n```bash\ndu -ch *.log\n```\n\n输出示例：\n\n```bash\n4.0K    file1.log\n8.0K    file2.log\n12K     total\n```\n\n---\n\n### 7. 排除特定文件或目录\n\n```bash\ndu -h --exclude=\"*.tmp\"\n```\n\n输出示例：\n\n```bash\n4.0K    ./file1.txt\n8.0K    ./dir2\n12K     .\n```\n\n---\n\n## 注意事项\n\n1. **权限问题**：若对目录无读权限，会报错 `Permission denied`\n2. **符号链接**：默认统计符号链接指向的文件大小，可通过 `-L` 强制统计链接本身\n3. **隐藏文件**：默认统计包括隐藏文件（以 `.` 开头的文件）\n\n---\n\n## 常见错误处理\n\n### 错误示例：目录不存在\n\n```bash\ndu non_existing_dir\n# 输出：du: cannot access 'non_existing_dir': No such file or directory\n```\n\n### 错误示例：权限不足\n\n```bash\ndu /root\n# 输出：du: cannot read directory '/root': Permission denied\n```\n\n---\n\n## 进阶技巧\n\n### 1. 统计当前目录下各文件类型的大小\n\n```bash\ndu -ah --max-depth=1 | sort -hr\n```\n\n输出示例：\n\n```bash\n1.2G    .\n500M    ./videos\n300M    ./images\n100M    ./documents\n```\n\n---\n\n### 2. 统计目录中前 10 个最大的文件\n\n```bash\ndu -ah | sort -hr | head -n 10\n```\n\n---\n\n### 3. 结合 `find` 统计特定文件类型的大小\n\n```bash\nfind . -name \"*.log\" -exec du -ch {} +\n```\n\n---\n\n### 4. 统计目录中文件的表面大小\n\n```bash\ndu -ah --apparent-size\n```\n\n---\n\n### 5. 统计目录中文件的实际磁盘占用\n\n```bash\ndu -ah --block-size=1K\n```\n\n---\n\n### 6. 统计 Git 仓库中文件的大小\n\n```bash\ngit ls-files | xargs du -ch\n```\n\n---\n\n### 7. 统计目录中文件的数量和总大小\n\n```bash\nfind . -type f | xargs du -ch\n```","categoryId":1,"viewCount":58,"categoryName":"Linux","author":"球接子","authorAvatar":null,"tagIds":[10],"tagNames":["Linux基础"]}}