669 command-line partition disk-usage command
在管理 Linux 系统时,我经常发现自己在分区变满后很难找到罪魁祸首。我通常使用du / | sort -nr但在大型文件系统上这需要很长时间才能返回任何结果。
此外,这通常可以成功地突出显示最严重的罪犯,但我经常发现自己
在更微妙的情况下诉诸于du没有sort,然后不得不浏览输出。
我更喜欢依赖于标准 Linux 命令的命令行解决方案,因为我必须管理相当多的系统并且安装新软件很麻烦(尤其是在磁盘空间不足时!)
小智 867
Try ncdu,一个优秀的命令行磁盘使用分析器:
Ben*_*ins 369
不要直接去du /。使用df来找到伤害你的分区,然后尝试du命令。
我喜欢尝试的一个是
# U.S.
du -h <dir> | grep '[0-9\.]\+G'
# Others
du -h <dir> | grep '[0-9\,]\+G'
Run Code Online (Sandbox Code Playgroud)
因为它以“人类可读的形式”打印尺寸。除非您的分区非常小,否则以 GB 为单位搜索目录是您想要的非常好的过滤器。这将花费您一些时间,但除非您设置了配额,否则我认为这就是它的方式。
正如@jchavannes 在评论中指出的那样,如果您发现太多误报,表达式会变得更加精确。我采纳了这个建议,这确实使它变得更好,但仍然存在误报,所以只有权衡(更简单的 expr,更糟糕的结果;更复杂和更长的 expr,更好的结果)。如果您的输出中出现太多小目录,请相应地调整您的正则表达式。例如,
grep '^\s*[0-9\.]\+G'
Run Code Online (Sandbox Code Playgroud)
甚至更准确(不会列出小于 1GB 的目录)。
如果您确实有配额,则可以使用
quota -v
Run Code Online (Sandbox Code Playgroud)
查找占用磁盘的用户。
Kon*_*lph 117
首先,使用 的“摘要”视图du:
du -s /*
Run Code Online (Sandbox Code Playgroud)
效果是打印其每个参数的大小,即上面案例中的每个根文件夹。
此外,GNUdu和BSDdu都可以进行深度限制(但 POSIXdu不能!):
GNU(Linux,...):
du --max-depth 3
Run Code Online (Sandbox Code Playgroud)BSD(macOS,...):
du -d 3
Run Code Online (Sandbox Code Playgroud)这会将输出显示限制为深度 3。当然,计算和显示的大小仍然是完整深度的总和。但尽管如此,限制显示深度会大大加快计算速度。
另一个有用的选择是-h(在 GNU 和 BSD 上都有用,但同样不是在 POSIX-only 上du)用于“人类可读”的输出(即使用 KiB、MiB等)。
小智 57
您还可以使用以下命令运行以下命令du:
~# du -Pshx /* 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
-s选项总结并显示每个参数的总数。h 打印 Mio、Gio 等。x = 留在一个文件系统中(非常有用)。P = 不要遵循符号链接(例如,这可能导致文件被计算两次)。小心,/root目录不会显示,你必须运行~# du -Pshx /root 2>/dev/null才能得到它(有一次,我挣扎了很多,没有指出我的/root目录已经满了)。
编辑:更正选项 -P
rjm*_*nro 29
在文件系统上找到最大的文件总是需要很长时间。根据定义,您必须遍历整个文件系统以查找大文件。唯一的解决方案可能是在所有系统上运行 cron 作业,以便提前准备好文件。
另一件事, du 的 x 选项对于防止 du 跟随挂载点进入其他文件系统很有用。IE:
du -x [path]
Run Code Online (Sandbox Code Playgroud)
我通常运行的完整命令是:
sudo du -xm / | sort -rn > usage.txt
Run Code Online (Sandbox Code Playgroud)
该-m方法以MB为单位返回结果,并且sort -rn将结果数量最多的第一排序。然后您可以在编辑器中打开 usage.txt,最大的文件夹(以 / 开头)将位于顶部。
小智 22
我总是使用du -sm * | sort -n,它为您提供当前工作目录的子目录使用量的排序列表,以兆字节为单位。
您还可以尝试 Konqueror,它具有“大小视图”模式,类似于 Windows 上的 WinDirStat:它为您提供了哪些文件/目录占用了大部分空间的可视化表示。
更新:在更新的版本中,您还可以使用du -sh * | sort -hwhich 将显示人类可读的文件大小并按这些大小排序。(数字将以 K、M、G、...为后缀)
对于寻找 KDE3 的 Konqueror 文件大小视图替代品的人来说,可以看看 filelight,尽管它不是那么好。
小智 20
我将它用于当前目录下的前 25 个最坏的罪犯
# -S to not include subdir size, sorted and limited to top 25
du -S . | sort -nr | head -25
Run Code Online (Sandbox Code Playgroud)
小智 14
在以前的一家公司,我们曾经有一个 cron 作业,它会在一夜之间运行并识别出超过一定大小的任何文件,例如
find / -size +10000k
Run Code Online (Sandbox Code Playgroud)
您可能希望对正在搜索的目录更有选择性,并注意任何可能脱机的远程安装驱动器。
小智 11
我用
du -ch --max-depth=2 .
Run Code Online (Sandbox Code Playgroud)
我改变了最大深度以满足我的需要。“c”选项打印文件夹的总数,“h”选项根据需要打印 K、M 或 G 的大小。正如其他人所说,它仍然扫描所有目录,但它以一种我发现更容易找到大目录的方式限制了输出。
对于命令行,我认为 du/sort 方法是最好的。如果您不在服务器上,您应该查看Baobab-Disk 使用分析器。这个程序也需要一些时间来运行,但是你可以很容易地找到所有旧 Linux ISO 所在的子目录。
我要第二xdiskusage。但是我要在注释中添加它实际上是一个 du 前端并且可以从文件中读取 du 输出。所以你可以du -ax /home > ~/home-du在你的服务器上运行,scp返回文件,然后以图形方式分析它。或者通过 ssh 进行管道传输。
也许值得注意的是mc(Midnight Commander,一个经典的文本模式文件管理器)默认情况下仅显示目录 inode 的大小(通常 4096),但是使用CtrlSpace或使用菜单工具,您可以以人类可读的方式查看所选目录占用的空间格式(例如,有些像 103151M)。
例如,下图显示了 2018 年和 2017 年的普通 TeX Live 发行版的完整大小,而 2015 年和 2016 年的版本仅显示 inode 的大小(但它们实际上每个都接近 5 GB)。
也就是说,CtrlSpace必须一对一地完成,仅针对实际目录级别,但是当您导航时它是如此快速和方便,mc也许您不需要ncdu(确实,仅用于此目的更好)。否则,您也可以ncdu从运行mc。无需退出mc或启动另一个终端。
尝试将 du 的输出输入到一个简单的 awk 脚本中,该脚本检查目录的大小是否大于某个阈值,如果是,则将其打印出来。在开始获取信息之前,您不必等待遍历整个树(与许多其他答案相比)。
例如,以下显示占用超过 500 MB 的任何目录。
du -kx / | awk '{ if ($1 > 500000) { print $0} }'
Run Code Online (Sandbox Code Playgroud)
为了使上述内容更可重用,您可以在 .bashrc 中定义一个函数,(或者您可以将其变成一个独立的脚本)。
dubig() {
[ -z "$1" ] && echo "usage: dubig sizethreshMB [dir]" && return
du -kx $2 | awk '{ if ($1 > '$1'*1024) { print $0} }'
}
Run Code Online (Sandbox Code Playgroud)
因此dubig 200 ~/,在主目录下(不遵循设备外的符号链接)查找使用超过 200 MB 的目录。
我更喜欢使用以下内容来获得概述并从那里深入......
cd /folder_to_check
du -shx */
Run Code Online (Sandbox Code Playgroud)
这将显示具有人类可读输出(例如 GB、MB)的结果。它还将防止遍历远程文件系统。该-s选项仅显示找到的每个文件夹的摘要,因此如果您对文件夹的更多详细信息感兴趣,则可以进一步深入研究。请记住,此解决方案只会显示文件夹,因此如果您也需要文件,则需要省略星号后的 /。
小智 5
此处未提及,但您还应该检查 lsof 以防删除/挂起文件。我从失控的 cronjob 中删除了 5.9GB 的 tmp 文件。
https://serverfault.com/questions/207100/how-can-i-find-phantom-storage-usage帮助我找到了所述文件( cron )的进程所有者,然后我能够/proc/{cron id}/fd/{file handle #}减少文件问题开始逃跑,解决这个问题,然后 echo "" > file 清理空间,让 cron 优雅地关闭自己。