當前位置:
首頁 > 科技 > 8個Linux下ls 命令的高級用法!個個驚艷!

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作參數,這樣就將當前目錄下的所有文件補齊了所在路徑。

聲明:本文為作者投稿,版權歸其個人所有。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CSDN 的精彩文章:

新型 Linux 病毒,腳本超 1000 行,功能複雜
馬克·扎克伯格帝國的衰落

TAG:CSDN |