du -sh * 显示比 ls -lah 多得多的已用空间

du -sh * 显示比 ls -lah 多得多的已用空间

我遇到了一个客户服务器磁盘空间不足的问题。

命令的输出ls -lah显示/var/lib/mysql

drwx------  2 mysql mysql  16K Dec 30  2015 database_xyz

但是当我使用命令检查同一目录中的文件大小时du -sh *,输出显示:

22G     database_xyz

为什么这些命令的输出会显示两个完全不同的结果?

我的驱动器上只剩下2.2GB的空间了。

root@jon-cust-lifeincity:/var/lib/mysql# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg-root    49G   44G  2.2G  96% /
tmpfs                1007M     0 1007M   0% /lib/init/rw
udev                 1002M  108K 1002M   1% /dev
tmpfs                1007M     0 1007M   0% /dev/shm
/dev/sda1             228M   16M  200M   8% /boot

编辑:

事实证明那database_xyz实际上是一个目录,而不是一个文件。所以这个混淆是我的大脑造成的。

答案1

看来你误解了你被告知的内容。该ls -lah命令列出了当前目录的内容。在这个特定情况下,它是 /var/lib/mysql。除其他事项外,你被告知了这一点

drwx------  2 mysql mysql  16K Dec 30  2015 database_xyz

您误解了这句话的意思。

您可以将目录视为包含目录条目列表的平面文件。(简单来说)目录条目是文件名和指向该文件在磁盘上的位置的指针。此信息占用磁盘空间。

什么

drwx------  2 mysql mysql  16K Dec 30  2015 database_xyz

告诉您,其中有一个/var/lib/mysql名为的目录条目database.xyz。该条目用于表示文件类型的信息d,表明它是一个目录,此外,目录“文件”的大小为 16K。

答案2

了解尺寸数据库_xyz文件仅输入

du -sh database_xyz

你会得到准确的结果

答案3

ls不是查找目录大小的合适工具。它仅适用于文件,不适用于目录。

我看到你正在列出目录的详细信息(第一个d字符)

drwx------  2 mysql mysql  16K Dec 30  2015 database_xyz

改用du。这是一个类似帖子在 stackoverflow。

相关内容