Kar*_*son 131 disk-usage
我在一台运行 16.04 的服务器上遇到了一个问题:没有剩余的磁盘空间。
我不知道是什么占用了空间。是否有命令列出当前目录大小,以便我可以遍历并最终进入占用所有空间的目录?
Top*_*Hat 162
与在 Linux 中一样,完成工作的方法不止一种。但是,如果您需要从 CLI 执行此操作,这是我的首选方法:
我首先以 root 身份或使用 sudo 运行它:
du -cha --max-depth=1 / | grep -E "M|G"
Run Code Online (Sandbox Code Playgroud)
grep 将返回行限制为返回值在兆字节或千兆字节范围内的行。如果您的磁盘足够大,您也可以添加|T以包含 TB 数量。您可能会在/proc、/sys和/ 或/dev因为它们不是磁盘上的真实文件而遇到一些错误。但是,它仍然应该为 root 中的其余目录提供有效的输出。在找到最大的那些之后,您可以在该目录中运行该命令,以缩小罪魁祸首的范围。因此,例如,如果/var是最大的,你可以这样做:
du -cha --max-depth=1 /var | grep -E "M|G"
Run Code Online (Sandbox Code Playgroud)
那应该把你引向问题儿童!
其他注意事项
虽然上面的命令肯定会奏效,但我在下面的评论中提出了一些建设性的批评,指出了一些你也可以包括的内容。
grep如果目录或文件的名称有大写的 G 或 M ,我提供的可能会导致偶尔返回“K”值。您的正则表达式游戏更具创意和复杂性。例如grep -E "^[0-9\.]*[MG]"如果您知道哪个驱动器有问题,并且它上面有其他已安装的驱动器,您不想浪费时间(包括在搜索中),则可以将该-x标志添加到您的du命令中。该标志的手册页描述:
-x, --one-file-system
skip directories on different file systems
Run Code Online (Sandbox Code Playgroud)您可以对du命令的输出进行排序,以便最大值位于底部。只需将此附加到命令的末尾:| sort -h
Dun*_*can 106
您可以ncdu为此使用。它运作良好。
sudo apt install ncdu
Run Code Online (Sandbox Code Playgroud)
Cha*_*een 21
我使用这个命令:
sudo du -aBM -d 1 . | sort -nr | head -20
Run Code Online (Sandbox Code Playgroud)
有时,我需要从/目录中运行它,因为我将某些东西放在了一个奇怪的位置。
小智 14
关于找到哪些目录占用大部分空间的方法,已经有很多很好的答案。如果您有理由相信几个大文件是主要问题,而不是许多小文件,您可以使用以下内容:
find / -size +10M
Run Code Online (Sandbox Code Playgroud)
mir*_*173 12
我不知道 Ubuntu 并且无法检查我的答案,但是根据我很久以前作为 unix 管理员的经验在这里发布我的答案。
找出哪个文件系统空间不足
df -h
Run Code Online (Sandbox Code Playgroud)
将列出所有文件系统、它们的大小和它们的可用空间。如果您调查具有足够空间的文件系统,您只会浪费时间。假设完整的文件系统是 /myfilesystem。如果 /myfilesystems 的子目录上安装了文件系统,请检查 df 输出。如果是这样,以下规格必须适应这种情况。
找出这个文件系统的文件使用了多少空间
du -sh /myfilesystem
Run Code Online (Sandbox Code Playgroud)
-x 选项可用于保证仅考虑作为此文件系统成员的文件。某些 Unix 变体(例如 Solaris)不知道 du 的 -x 选项。然后你必须使用一些解决方法来找到你的文件系统的 du。
现在检查可见文件的 du 是否大约是 df 显示的已用空间的大小。如果是这样,您可以开始查找 /myfilesystem 文件系统的大文件/目录进行清理。
查找目录的最大子目录 /.../dir 使用
du -sk /.../dir/*|sort -n
Run Code Online (Sandbox Code Playgroud)
-k 选项强制 du 以千字节为单位输出 sie,没有任何单位。这可能是某些系统上的默认设置。然后你可以省略这个选项。最大的文件/子目录将显示在输出的底部。
如果您发现不再需要的大文件/目录,您可以以适当的方式将其删除。不要理会输出顶部的小目录。如果你删除它们,它不会解决你的问题。如果您仍然没有足够的空间,则可以在列表底部显示的 larges 子目录中重复步骤 4。
但是如果 du 输出不是 df 显示的可用空间,会发生什么?
如果 du 输出较大,则您错过了安装另一个文件系统的子目录。如果 du 输出小得多,那么在 du 检查的任何目录中都不会显示 som 文件。他的现象可能有不同的原因。
某些进程正在使用已删除的文件。因此,这些文件已从目录中删除,du 看不到它们。但是对于文件系统,它们的块仍在使用中,直到进程关闭文件。您可以尝试找出相关进程(例如使用 lsof)并强制它们关闭此文件(例如通过停止应用程序或通过终止进程)。或者您只需重新启动机器。
目录中的文件不再可见,因为在其父目录之一上安装了另一个文件系统。因此,如果您有一个文件 /myfilesysem/subdir/bigfile 并且现在在 /myfilesystem/subdir 上挂载另一个文件系统,那么您将无法再看到该文件并且
du -shx /myfilesystem
Run Code Online (Sandbox Code Playgroud)
将报告一个不包含 /myfilesystem/subdir/bigfile 大小的值。找出此类文件是否存在的唯一方法是卸载 /myfilesystem/subir 并检查
ls -la /myfilesystem/subdir
Run Code Online (Sandbox Code Playgroud)
如果它包含文件。
可能有特殊类型的文件系统使用/保留磁盘上的空间对 ls 命令不可见。您需要特殊的工具来显示它。
除了这种使用 du 命令的系统方法之外,您还可以使用其他一些方法。因此,您可以使用 find 命令查找大于您提供的某个值的文件,您可以搜索大于您提供的某个值或新创建的或具有特殊名称的文件(例如 *.log、core、* .trc)。但是你总是应该像 1 中描述的那样做一个 df 以便你在正确的文件系统上工作
我经常用这个
du -sh /*/
Run Code Online (Sandbox Code Playgroud)
然后,如果我发现一些大文件夹,我会切换到它并进行进一步调查
cd big_dir
du -sh */
Run Code Online (Sandbox Code Playgroud)
如果需要,您还可以使其自动排序
du -s /*/ | sort -n
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
173811 次 |
| 最近记录: |