我不明白“ls”命令是如何工作的

我不明白“ls”命令是如何工作的

我想检查文件夹的大小pg_backup,所以我使用了以下命令:

[postgres@server02 ~]$ pwd
/var/lib/pgsql

[postgres@server02 ~]$ ls -lh
total 4.0K
drwxr-x---. 7 postgres postgres   86 Oct  6 22:00 pg_backup

如上面的输出所示,大小为 86 字节。

但是,pg_backup目录本身还包含其他几个目录:

[postgres@server02 ~]$ ls -lh pg_backup
total 0
drwxr-xr-x. 3 postgres postgres 121 Oct  2 23:00 20211002
drwxr-xr-x. 2 postgres postgres 109 Oct  3 22:00 20211003
drwxr-xr-x. 2 postgres postgres 109 Oct  4 22:00 20211004
drwxr-xr-x. 2 postgres postgres 109 Oct  5 22:00 20211005
drwxr-xr-x. 2 postgres postgres 109 Oct  6 22:00 20211006
[postgres@server02 ~]$

然后这些子目录之一包含一些大文件:

[postgres@server02 ~]$ ls -lh pg_backup/20211006
total 23G
-rw-r--r--. 1 postgres postgres  23G Oct  6 23:21 file.dump
-rw-r--r--. 1 postgres postgres 418K Oct  6 22:00 backup_dba.dump
-rw-r--r--. 1 postgres postgres 1.4K Oct  6 22:00 backup_postgres.dump
-rw-r--r--. 1 postgres postgres  830 Oct  6 22:00 backup_dwh.dump

我很困惑为什么该ls -lh命令显示的大小pg_backup仅为 86 字节,如果实际上该目录包含许多较大的子目录,而这些子目录又包含大小可能达到 23GB 的文件?为什么pg_backup初始命令中没有反映 的所有子目录中的文件总数ls -lh

答案1

ls显示文件消耗的大小。如果我们简化一些事情,类 Unix 系统中的很多东西看起来都像文件。有些是文件文件,有些是套接字文件,有些是符号链接文件,有些是目录文件等。输出中显示的大小ls是该对象消耗的大小。但它没有考虑目标所指对象的大小。

您正在寻找

du -h -d 0 <directory>

命令。尺寸向ls您展示 - 嗯,事实并非如此。是的,它会变得更大,因为目录将包含更多的子目录,但这两种大小衡量的是不同的东西。

相关内容