如何find哪些文件占用了Linuxnetworking服务器上80%的空间?

驱动器不断充满。 你已经find了所有的备用和随机文件。 grep'd for coredump文件,甚至删除了一些不需要的备份…

你的下一步会是什么?

有问题的实际服务器有10GB的网站文件,操作系统不应该超过10GB,那么如何查找填满50GB(虚拟)驱动器的内容?

我发现ncdu( http://dev.yorhel.nl/ncdu )对此非常有帮助。

当然,还有更复杂的方法,但我记得的是

  du  - 最大深度= 1 -h / 

现在把占用大部分空间的目录(du --max-depth=1 -h /yourdir)加深,直到find你的罪魁祸首。
如果你希望你的输出按大小sorting,而且不关心人们可读的格式,你也可以这样做: du --max-depth=1 /your_dir | sort -n du --max-depth=1 /your_dir | sort -n

我使用Gnome程序猴面包树。 你可以在你的桌面上运行它,并且可以通过SSH连接到服务器。 它显示了一个易于阅读的磁盘空间使用的graphics图。 它在Gnome下被安装为“Disk Usage Analyzer”

给gt5一个尝试。

df -k显示哪个fs是问题。 然后cd到顶级目录中,运行du -xk | sort -n | 尾巴-25这将显示前25个目录,sorting,为太阳9或更早,用一个dreplacex。

请注意,可以在写入文件的同时删除文件,因此它们在创build过程正在运行时使用磁盘空间,但没有文件名。

这使得它不能用通常的工具 – 你可以使用lsof来调查哪些进程有打开的文件。

如果您可以在系统上运行软件,则xdiskusage会以graphics方式显示哪些目录/文件正在占用您的空间。 非常有用。

我相信KDE包含类似的东西。

如果它是纯文本的,你不能安装额外的软件,那么du创意使用可能会让你在那里。

  1. cd到Web服务器主目录(apache的主目录)
  2. 运行命令“du -a | head -30 | sort -nr”
  3. 它会给你30个最大的磁盘消耗文件/目录
  4. 你可以find它们并删除(如果不是有用的)

您可以使用以下命令查找占用太多空间的文件或文件夹。

例如,要显示当前文件夹中最大的前20个目录,请使用以下单行命令:

 du -ah . | sort -rh | head -20 

要么:

 du -a . | sort -rn | head -20 

对于当前目录中的前20个最大文件(recursion):

 ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20 

或与人类可读的大小:

 ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20 

第二个命令正确地工作在OSX / BSD(如sort没有-h ),你需要安装从coreutils sort 。 然后将bin文件夹添加到您的PATH

您可以将这些命令定义为别名(例如添加到您的rc文件,如.bash_profile ):

 alias big='du -ah . | sort -rh | head -20' alias big-files='ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20' 

然后在您认为正在发生的文件夹中运行big big-filesbig-files (例如在/home )。

这里是我拼凑在一起的东西,以追查我们的数据库服务器上的一些stream氓程序:rabbitfinder

 #!/bin/sh tree -s -f > /tmp/out1 && sleep 5 && tree -s -f > /tmp/out2; diff /tmp/out1 /tmp/out2 | egrep "\|--" | awk -F[ '{print $2}' | awk -F] '{print $2 }' | sort | uniq | xargs fuser -f | xargs ps -lFp 

它有点kludgey,不是很强大,但它的工作原理如下:

  1. 生成当前目录的recursion树列表
  2. 等待5秒钟
  3. 生成另一个列表
  4. 比较两个输出
  5. 定影已经改变大小的文件
  6. ps -lFp会显示文件的进程所拥有的文件

     user@poseidon:~$ tree -s -f > /tmp/out1 && sleep 5 && tree -s -f > /tmp/out2; diff /tmp/out1 /tmp/out2 | egrep "\|--" | awk -F[ '{print $2}' | awk -F] '{print $2 }' | sort | uniq | xargs fuser -f | xargs ps -lFp ./tmp/output: FS UID PID PPID C PRI NI ADDR SZ WCHAN RSS PSR STIME TTY TIME CMD 0 R 1000 14310 14275 23 80 0 - 1072 - 748 1 22:19 pts/2 00:00:06 dd if /dev/zero of ./output bs 1024 count 10000000