如何找到Linux网络服务器上哪些文件占用了80%的空间?


15

驱动器不断加满。您已经找到了所有可能的备用和随机文件。grep的coredump文件,甚至删除了一些不需要的备份...

您下一步将采取什么行动。

实际的服务器中有10GB的网站文件,操作系统不应占用超过10GB的空间,那么如何查找50GB(虚拟)驱动器的容量呢?


Answers:



23

当然,还有更多精心设计的方法,但是我记得的是

du --max-depth = 1 -h /

现在,使用占用最多空间的目录,(du --max-depth=1 -h /yourdir)并深入查找,直到找到罪魁祸首。
如果希望输出按大小排序并且不关心人类可读的格式,则也可以du --max-depth=1 /your_dir | sort -n


是的 我几乎做同样的事情“ du -S | sort -n -r | less”。我真的很希望看到一个看起来像htop和cron's mlocate的程序,但是运行时为您提供了有关系统文件的准确和及时的信息。
加雷斯

1
与其从Web服务器上的/开始,不如尝试从http_root开始。如果没有成功,那么可以使用'/'。在“ /”上运行du的目录将花费大量时间。
Saurabh Barjatiya 09年

4

我使用Gnome程序baobab。您可以在桌面上运行它,并且可以通过SSH连接到服务器。它显示了易于阅读的磁盘空间使用情况的图形映射。它作为“磁盘使用情况分析器”安装在Gnome下



2

df -k显示哪个fs是问题。然后cd到它的顶层目录并运行du -xk | 排序-n | 尾号-25,这将显示排在前25个目录,对于sun 9或更早版本,将x替换为d。


是的,类似于我在@Marie Fischer的回答中提到的内容。为什么对人类使用-k(块大小)而不是-h?
加雷斯

-k用于所有大小以kb为单位报告。这对排序很有用,否则排序时排序会在20mb之前放入10kb。
Saurabh Barjatiya 09年

1

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

这使它无法使用常规工具查找-您可以使用lsof调查哪些进程具有打开的文件。


/usr/sbin/lsof | grep deleted用来得到这个。
凯文M

0

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

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

如果它是纯文本的,并且您无法安装其他软件,那么创造性地使用du可能也会使您到达那里。


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

除非你改变的顺序,这是行不通的headsort。另外,您应该使用格式设置功能。
kasperd '16

0

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

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

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

要么:

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

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

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),你需要安装sortcoreutils。然后将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'

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


0

这是我拼凑的东西,用于跟踪数据库服务器上的一些恶意进程: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

这有点笨拙,但不是很健壮,但是可以这样工作:

  1. 生成当前目录的递归树列表
  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:       
    F S 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
    
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.