8個Linux下ls 命令的高級用法!個個驚艷!
作者 | 良許
責編 | 胡巍巍
在Linux下,ls這個命令大家肯定太熟悉了,筆者相信只要是Linux工程師,每天都會離不開這個命令,而且一天會使用個幾百次。
但是,除了ls -l以外,你還知ls的哪些高級用法呢?筆者今天為大家介紹ls命令的8種高級用法。
假如我們有這樣的一個文件夾,我們用tree命令查看它的目錄結構:
用法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/:
total28
-rw-rw-r-- 1 alvin alvin 37 Nov 18 09:12 atb_aux.c
-rw-rw-r-- 1 alvin alvin 8 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 alvin 5 Nov 18 09:12 atb_ota.c
drwxrwxr-x2alvin alvin4096Nov1809:12include
-rw-rw-r-- 1 alvin alvin 0 Nov 18 09:12 Makefile
drwxrwxr-x2alvin alvin4096Nov1809:12output
drwxrwxr-x2alvin alvin4096Nov1809:12src
/home/alvin/test_dir/include:
total
-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
-rwxrwxr-x1alvin alvinNov1809:12app
/home/alvin/test_dir/src:
total
-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 alvin 8 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 alvin 5 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-x2alvin alvin4096Nov1809:12include
drwxrwxr-x2alvin alvin4096Nov1809:12output
drwxrwxr-x2alvin alvin4096Nov1809:12src
其中:^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
total28
drwxrwxr-x2alvin alvin4096Nov1809:12src
drwxrwxr-x2alvin alvin4096Nov1809:12output
-rw-rw-r-- 1 alvin alvin 0 Nov 18 09:12 Makefile
drwxrwxr-x2alvin alvin4096Nov1809:12include
-rw-rw-r-- 1 alvin alvin 5 Nov 18 09:12 atb_ota.c
-rw-rw-r-- 1 alvin alvin 24 Nov 18 09:12 atb_orch.c
-rw-rw-r-- 1 alvin alvin 8 Nov 18 09:12 atb_can.c
-rw-rw-r-- 1 alvin alvin 37 Nov 18 09:12 atb_aux.c
其中:-t選項表示以文件修改時間排序,越新的越靠前。-r選項表示對結果進行反向排序,二者結合的話表示以修改時間排序,越新的越靠後。
用法5:以文件大小進行排序
命令:
ls-lhS
結果:
[alvin@VM_0_16_centos test_dir]$ ls -lhS
total28K
drwxrwxr-x2alvin alvin4.0K Nov1809:12include
drwxrwxr-x2alvin alvin4.0K Nov1809:12output
drwxrwxr-x2alvin alvin4.0K Nov1809:12src
-rw-rw-r-- 1 alvin alvin 37 Nov 18 09:12 atb_aux.c
-rw-rw-r-- 1 alvin alvin 24 Nov 18 09:12 atb_orch.c
-rw-rw-r-- 1 alvin alvin 8 Nov 18 09:12 atb_can.c
-rw-rw-r-- 1 alvin alvin 5 Nov 18 09:12 atb_ota.c
-rw-rw-r-- 1 alvin alvin 0 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-maxdepth1| xargs ls -ld
結果:
[alvin@VM_0_16_centos test_dir]$find$PWD -maxdepth1| xargs ls -ld
drwxrwxr-x5alvin alvin4096Nov1817:30/home/alvin/test_dir
-rw-rw-r-- 1 alvin alvin 37 Nov 18 09:12 /home/alvin/test_dir/atb_aux.c
-rw-rw-r-- 1 alvin alvin 8 Nov 18 09:12 /home/alvin/test_dir/atb_can.c
-rw-rw-r-- 1 alvin alvin 24 Nov 18 09:12 /home/alvin/test_dir/atb_orch.c
-rw-rw-r-- 1 alvin alvin 5 Nov 18 09:12 /home/alvin/test_dir/atb_ota.c
drwxrwxr-x2alvin alvin4096Nov1809:12/home/alvin/test_dir/include
-rw-rw-r-- 1 alvin alvin 0 Nov 18 09:12 /home/alvin/test_dir/Makefile
drwxrwxr-x2alvin alvin4096Nov1809:12/home/alvin/test_dir/output
drwxrwxr-x2alvin alvin4096Nov1809:12/home/alvin/test_dir/src
其中:find $PWD -maxdepth 1限定了在當前層級(即不遞歸),再對find結果傳遞給ls -ld作參數,這樣就將當前目錄下的所有文件補齊了所在路徑。
聲明:本文為作者投稿,版權歸其個人所有。
※新型 Linux 病毒,腳本超 1000 行,功能複雜
※馬克·扎克伯格帝國的衰落
TAG:CSDN |