Linux下 ls 命令的高階用法8例
在Linux下,ls這個命令大家肯定太熟悉了,良許相信只要是Linux工程師,每天都會離不開這個命令,而且一天會使用個幾百次。但是,除了 ls -l
以外,你還知 ls 的哪些高階用法呢?良許今天為大家介紹 ls 命令的8種高階用法。
假如我們有這樣的一個資料夾,我們用tree命令檢視它的目錄結構:

img
用法1:列出/home/alvin/test_dir目錄下所有檔案及目錄的詳細資料
命令:
ls -lR /home/alvin/test_dir/ 複製程式碼
結果:
[alvin@VM_0_16_centos test_dir]$ ls -lR /home/alvin/test_dir/ /home/alvin/test_dir/: total 28 -rw-rw-r-- 1 alvin alvin37 Nov 18 09:12 atb_aux.c -rw-rw-r-- 1 alvin alvin8 Nov 18 09:12 atb_can.c -rw-rw-r-- 1 alvin alvin24 Nov 18 09:12 atb_orch.c -rw-rw-r-- 1 alvin alvin5 Nov 18 09:12 atb_ota.c drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 include -rw-rw-r-- 1 alvin alvin0 Nov 18 09:12 Makefile drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 output drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 src /home/alvin/test_dir/include: total 0 -rw-rw-r-- 1 alvin alvin 0 Nov 18 09:12 a.h -rw-rw-r-- 1 alvin alvin 0 Nov 18 09:12 b.h -rw-rw-r-- 1 alvin alvin 0 Nov 18 09:12 c.h /home/alvin/test_dir/output: total 0 -rwxrwxr-x 1 alvin alvin 0 Nov 18 09:12 app /home/alvin/test_dir/src: total 0 -rw-rw-r-- 1 alvin alvin 0 Nov 18 09:12 a.c -rw-rw-r-- 1 alvin alvin 0 Nov 18 09:12 b.c -rw-rw-r-- 1 alvin alvin 0 Nov 18 09:12 c.c 複製程式碼
在這裡, -l
選項大家應該比較熟悉,是以列表的形式顯示結果的意思。而對於 -R
選項,意思是遞迴處理,將指定目錄下的所有檔案及子目錄一併處理。
用法2:列出/home/alvin/test_dir目錄下以atb開頭的所有檔案的詳細內容
命令:
ls -l atb* 複製程式碼
結果:
[alvin@VM_0_16_centos test_dir]$ ls -l atb* -rw-rw-r-- 1 alvin alvin 37 Nov 18 09:12 atb_aux.c -rw-rw-r-- 1 alvin alvin8 Nov 18 09:12 atb_can.c -rw-rw-r-- 1 alvin alvin 24 Nov 18 09:12 atb_orch.c -rw-rw-r-- 1 alvin alvin5 Nov 18 09:12 atb_ota.c 複製程式碼
用法3:只列出目錄下的子目錄
- 方法1 :
命令
ls -F /home/alvin/test_dir | grep /$ 複製程式碼
結果:
[alvin@VM_0_16_centos test_dir]$ ls -F /home/alvin/test_dir | grep /$ include/ output/ src/ 複製程式碼
其中: -F
選項表示在每個檔名後附上一個字元以說明改檔案的型別。“ *
”:表示可執行的普通檔案;“ /
”:表示目錄;“ @
”:表示符號連結;“ |
”:表示FIFOs;“ =
”:表示套接字。
/$
其實是一個正則表示式,表示以 /
結尾。 grep /$
表示過濾出以 /
結尾的結果,也就是子目錄。
- 方法2 :
命令:
ls -p /home/alvin/test_dir | grep /$ 複製程式碼
結果:
[alvin@VM_0_16_centos test_dir]$ ls -p | grep /$ include/ output/ src/ 複製程式碼
其中: -p
選項與 -F
選項類似,也是在每個檔名後附上一個字元以說明改檔案的型別。
- 方法3 :
命令:
ls -l /home/alvin/test_dir | grep "^d" 複製程式碼
結果:
[alvin@VM_0_16_centos test_dir]$ ls -l /home/alvin/test_dir | grep "^d" drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 include drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 output drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 src 複製程式碼
其中: ^d
也是一個正則表示式,表示以 d
開頭。 grep "^d"
表示過濾出以 d
開頭的結果,而 ls -l
所列出來的結果,首位如果是 d
的話,表示這個檔案是個目錄,這樣就可以過濾出子目錄了。
- 方法4 :
命令:
ls -d */ 複製程式碼
結果:
[alvin@VM_0_16_centos test_dir]$ ls -d */ include/output/src/ 複製程式碼
其中: -d
選項表示將目錄象檔案一樣顯示,而不顯示其下的檔案。
用法4:按時間順序列出目錄下的檔案,越新越排後面。
命令:
ls -ltr 複製程式碼
結果:
[alvin@VM_0_16_centos test_dir]$ ls -lrt total 28 drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 src drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 output -rw-rw-r-- 1 alvin alvin0 Nov 18 09:12 Makefile drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 include -rw-rw-r-- 1 alvin alvin5 Nov 18 09:12 atb_ota.c -rw-rw-r-- 1 alvin alvin24 Nov 18 09:12 atb_orch.c -rw-rw-r-- 1 alvin alvin8 Nov 18 09:12 atb_can.c -rw-rw-r-- 1 alvin alvin37 Nov 18 09:12 atb_aux.c 複製程式碼
其中: -t
選項表示以檔案修改時間排序,越新的越靠前。 -r
選項表示對結果進行反向排序,二者結合的話表示以修改時間排序,越新的越靠後。
用法5:以檔案大小進行排序
命令:
ls -lhS 複製程式碼
結果:
[alvin@VM_0_16_centos test_dir]$ ls -lhS total 28K drwxrwxr-x 2 alvin alvin 4.0K Nov 18 09:12 include drwxrwxr-x 2 alvin alvin 4.0K Nov 18 09:12 output drwxrwxr-x 2 alvin alvin 4.0K Nov 18 09:12 src -rw-rw-r-- 1 alvin alvin37 Nov 18 09:12 atb_aux.c -rw-rw-r-- 1 alvin alvin24 Nov 18 09:12 atb_orch.c -rw-rw-r-- 1 alvin alvin8 Nov 18 09:12 atb_can.c -rw-rw-r-- 1 alvin alvin5 Nov 18 09:12 atb_ota.c -rw-rw-r-- 1 alvin alvin0 Nov 18 09:12 Makefile 複製程式碼
其中: -h
選項表示以可讀選項顯示,否則檔案大小是預設以位元組數顯示,比如:4873位元組,你知道是多少嗎?加了 -h
選項系統就幫你換算成以k或者其它單位的結果。
-S
選項表示以檔案大小進行排序,檔案越大越靠前。想要檔案小者靠前的話,加個 -r
選項就行。
用法6:統計當前目錄下的檔案數和目錄數
- 統計檔案數 :
命令:
ls -l | grep "^-" | wc -l 複製程式碼
結果:
[alvin@VM_0_16_centos test_dir]$ ls -l | grep "^-" | wc -l 5 複製程式碼
其中: ^-
表示以 -
開頭,即普通檔案, ls -l | grep "^-"
過濾出普通檔案,再用 wc -l
統計過濾出的普通檔案的個數。
- 統計目錄數 :
命令:
ls -l | grep "^d" | wc -l 複製程式碼
結果:
[alvin@VM_0_16_centos test_dir]$ ls -l | grep "^d" | wc -l 3 複製程式碼
其中: ^d
表示以 d
開頭,即目錄, ls -l | grep "^d"
過濾出目錄,再用 wc -l
統計過濾出的目錄的個數。
用法7:列出所有檔案的絕對路徑
命令:
ls | sed "s:^:`pwd`/:" 複製程式碼
結果:
[alvin@VM_0_16_centos test_dir]$ ls | sed "s:^:`pwd`/:" /home/alvin/test_dir/atb_aux.c /home/alvin/test_dir/atb_can.c /home/alvin/test_dir/atb_orch.c /home/alvin/test_dir/atb_ota.c /home/alvin/test_dir/include /home/alvin/test_dir/Makefile /home/alvin/test_dir/output /home/alvin/test_dir/src 複製程式碼
其中: sed "s:^:``pwd``/:"
表示在行首增加 pwd
(即檔案所在路徑),與檔名組合成絕對路徑。
用法8:列出當前目錄下的所有檔案(包括隱藏檔案)的絕對路徑, 對目錄不做遞迴
在上一個用法裡,對於隱藏檔案(即以 .
開頭的檔案)是不作處理的,如果我們需要對隱藏檔案也作處理的話,就需要使用下面這個命令:
find $PWD -maxdepth 1 | xargs ls -ld 複製程式碼
結果:
[alvin@VM_0_16_centos test_dir]$ find $PWD -maxdepth 1 | xargs ls -ld drwxrwxr-x 5 alvin alvin 4096 Nov 18 17:30 /home/alvin/test_dir -rw-rw-r-- 1 alvin alvin37 Nov 18 09:12 /home/alvin/test_dir/atb_aux.c -rw-rw-r-- 1 alvin alvin8 Nov 18 09:12 /home/alvin/test_dir/atb_can.c -rw-rw-r-- 1 alvin alvin24 Nov 18 09:12 /home/alvin/test_dir/atb_orch.c -rw-rw-r-- 1 alvin alvin5 Nov 18 09:12 /home/alvin/test_dir/atb_ota.c drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 /home/alvin/test_dir/include -rw-rw-r-- 1 alvin alvin0 Nov 18 09:12 /home/alvin/test_dir/Makefile drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 /home/alvin/test_dir/output drwxrwxr-x 2 alvin alvin 4096 Nov 18 09:12 /home/alvin/test_dir/src 複製程式碼
其中: find $PWD -maxdepth 1
限定了在當前層級(即不遞迴),再對find結果傳遞給 ls -ld
作引數,這樣就將當前目錄下的所有檔案補齊了所在路徑。
更多精彩內容,請關注公眾號 良許Linux ,公眾內回覆 1024 可免費獲得5T技術資料,包括: Linux,C/C++,Python,樹莓派,嵌入式,Java,人工智慧 ,等等。公眾號內回覆 進群 ,邀請您進高手如雲技術交流群。