df
和du
两个错误地报告我的根分区,100GB的SSD,没有剩余空间并且分别使用100G; 仅85G /home/steven
。du
但是,由提供的磁盘使用情况的简单汇总报告使用的磁盘空间不足13G。
我怎样才能解决这个问题?
具体来说:
~ » du -sh ~
85G /home/steven
~ » du -b ~ | wc -l
15041
~ » du -h ~ | sort -h | tail -n 1
85G /home/steven # 91088489808 bytes if using -b for du
~ » du -b ~ | sort -n | head -n 15040 | cut -f 1 | perl -ne 'BEGIN{$i=0;}$i+=$_;END{print $i.qq|\n|;}'
12735983847 # 11-12G, roughly
显然,85G与11G或12G之间存在巨大差异。我运行lsof +L1
并消除了所有带有标记为的文件的过程deleted
,但是仍然没有运气。
我有几个软链接$HOME
指向repos
外部硬盘驱动器上的目录(例如),基于我阅读的某些Stack Exchange帖子,这可能是一个问题,但我似乎无法理解。
接下来我该怎么办?
du
对给定的树进行深度优先遍历。默认情况下,它显示每个目录树的使用情况,并显示每个目录树的包含磁盘使用情况:
$ du ~
4 /home/bob/Videos
40 /home/bob/.cache/abrt
43284 /home/bob/.cache/mozilla/firefox
43288 /home/bob/.cache/mozilla
12 /home/bob/.cache/imsettings
48340 /home/bob/.cache
4 /home/bob/Documents
48348 /home/bob
如果提供该-a
选项,它将另外显示每个文件的大小。
使用该-s
选项,它将仅显示每个自变量文件或目录树的总大小。
$ du -s ~
48348 /home/bob
$ du -s ~/*
4 /home/bob/Videos
4 /home/bob/Documents
所以,当你跑
$ du -b ~ | wc -l
15041
$ du -b ~ | sort -n | head -n 15040 | cut -f 1 | \
perl -ne 'BEGIN{$i=0;$i+=$_;END{print $i.qq|\n|;}'
12735983847
多次,不幸的是,由于报告在每一行的大小是包括所有子目录的- -你在你的主目录下的总结所有内容的大小,而是因为你忽略杜输出的最后一行,这将是该行/home/steven
,du
没不计算主目录顶层中任何常规文件的大小。因此,总和不包括您的大.xsession-errors
文件。
当你跑的时候
du -sb ~ returns 91296460205, but the sum of du -sb ~/* is only 1690166532
您的du -sb ~/*
输出未包含主目录中以开头的任何文件或目录.
。
两者du ~ | tail -1
和du -s ~
都应该在显示主目录的磁盘使用情况(当然不包括已删除但打开的文件)上做一个合理的工作,但是,如果您想不依赖而总结所有文件大小du
,则可以执行以下操作(假设现代人find
支持printf %s
以字节为单位显示大小的格式):
find ~ -type f -printf '%s\n' | perl -ne 'BEGIN{$i=0;$i+=$_;END{print $i.qq|\n|;}'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句