我在一台运行 16.04 的服务器上遇到了一个问题:没有剩余磁盘空间。
我不知道是什么占用了空间。是否有命令可以列出当前目录的大小,以便我可以遍历并最终找到占用所有空间的目录?
答案1
与 Linux 中一样,完成这项工作的方法不止一种。但是,如果您需要从 CLI 执行此操作,这是我的首选方法:
我首先以 root 身份或使用 sudo 运行此命令:
du -cha --max-depth=1 / | grep -E "M|G"
grep 用于将返回的行限制为返回值在兆字节或千兆字节范围内的行。如果您的磁盘足够大,您还可以添加|T
以包含太字节量。您可能会在、和/或上遇到一些错误,/proc
因为/sys
它们/dev
不是磁盘上的真实文件。但是,它仍应为根目录中的其余目录提供有效的输出。找到最大的目录后,您可以在该目录中运行命令,以缩小查找罪魁祸首的范围。例如,如果/var
是最大的,您可以按如下方式执行:
du -cha --max-depth=1 /var | grep -E "M|G"
这应该能让你找到问题儿童!
其他注意事项
虽然上述命令肯定能解决问题,但我在下面的评论中提出了一些建设性的批评,指出了一些您还可以包括的内容。
- 如果目录或文件的名称以大写字母 G 或 M 开头,则提供的I
grep
可能会导致偶尔返回“K”值。如果您绝对不希望出现任何 K 值目录,则您需要提高正则表达式游戏的创造性和复杂性。例如grep -E "^[0-9\.]*[MG]"
如果您知道哪个驱动器存在问题,并且该驱动器上还安装了其他驱动器,而您又不想在搜索中浪费时间,则可以将该
-x
标志添加到du
命令中。该标志的手册页描述:-x, --one-file-system skip directories on different file systems
您可以对命令的输出进行排序
du
,以便最高值位于底部。只需将其附加到命令末尾即可:| sort -h
答案2
答案3
我使用这个命令:
sudo du -aBM -d 1 . | sort -nr | head -20
有时,我需要从/
目录运行它,因为我把某些东西放在了奇怪的位置。