Directory

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

  • October 8, 2021

我想檢查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

如果實際上該目錄包含許多較大的子目錄,而這些子目錄又包含可能達到 23GB 大小的文件,我很困惑為什麼該ls -lh命令僅顯示86 字節的大小?pg_backup為什麼所有子目錄中文件的總和pg_backup沒有反映在初始ls -lh命令中?

ls顯示文件佔用的大小。如果我們將事情簡化,類 Unix 系統中的很多東西看起來像文件。有些是文件文件,有些是套接字文件,有些是符號連結文件,有些是目錄文件等。ls輸出中顯示的大小是該對象消耗的大小。但它沒有考慮目標所指對象的大小。

你正在尋找

du -h -d 0 <directory>

命令。並且它向您展示的尺寸ls- 好吧,不是它。它會變得更大,是的,因為目錄將包含更多的孩子,但這兩種大小衡量不同的東西。

引用自:https://unix.stackexchange.com/questions/672303