du -sh *显示更多用过的空间,即ls -lah

我遇到了用完我的一个客户端服务器的磁盘空间的问题。

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

 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实际上是一个目录,而不是一个文件。 所以混乱是由我的脑子组成的。

看来你对你被告知的有误解。 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的目录项。 该条目是一个文件typesd ,它表示它是一个目录,除此之外,目录“文件”的大小是16K。

要知道database_xyz文件的大小,只需input

 du -sh database_xyz 

你会发现确切的结果

ls不是find目录大小的正确工具。 它只适用于不是目录的文件。

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

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

du代替。 这是在stackoverflow 类似的post 。