Linux命令學(xué)習(xí)之原來最簡單的ls命令這么復(fù)雜
簡介
ls命令的使用格式如下
ls [選項(xiàng)] [具體的文件] # [] 表示可選
直接在命令行輸入ls
將當(dāng)前目錄下的列出當(dāng)前目錄下的文件和目錄。
$ls LICENSE??README.md??hello.c
也可以指定具體的目錄和文件
$ls?/ bin???dev??home??lib32??libx32??mnt??proc??run???srv??tmp??var boot??etc??lib???lib64??media???opt??root??sbin??sys??usr
展示隱藏文件(所謂隱藏文件就是以.
開頭的目錄或者文件),增加-a
選項(xiàng)。
$ls?-a .??..??.git??LICENSE??README.md??hello.c?#?.?表示當(dāng)前目錄?..?表示上一級目錄
展示文件的詳細(xì)信息。
$ls?-al total?44 drwxr-xr-x?3?root?root??4096?Oct??6?04:20?. drwx------?1?root?root??4096?Oct??7?03:16?.. drwxr-xr-x?8?root?root??4096?Aug?26?15:28?.git -rw-r--r--?1?root?root?18027?Aug?26?15:28?LICENSE -rw-r--r--?1?root?root???210?Aug?26?15:28?README.md -rw-r--r--?1?root?root????72?Aug?26?15:32?hello.c
詳細(xì)信息說明
我們現(xiàn)在來仔細(xì)分析一下ls
輸出結(jié)果:
第一行 total 44
,表示這個目錄下面所有的文件的大小總和,單位是KiB
。
然后是接下來的每一行,每一行的開頭都有10個字符,他們的含義具體如下:
文件類型說明
第一個字符,有的是d
, 有的是-
,在linux系統(tǒng)當(dāng)中,這第一個字符表示文件的類型,他有如下幾種類型:
d
,表示目錄,比如說上面的.
當(dāng)前目錄,..
上一級的目錄。-
,表示一般的文件,比如說上面的hello.c
.b
,表示塊設(shè)備,比如我們的磁盤就是一種塊設(shè)備,他們的這個位置都是b
。
$ls?-al?/dev/?|?grep?sda brw-rw----??1?root?disk??????8,???0?Apr?30?23:16?sda brw-rw----??1?root?disk??????8,???1?Apr?30?23:16?sda1 brw-rw----??1?root?disk??????8,???2?Apr?30?23:16?sda2 brw-rw----??1?root?disk??????8,???3?Apr?30?23:16?sda3
l
,表示一個符號鏈接文件,也叫做軟鏈接。比如我們創(chuàng)建一個軟鏈接文件,并且查看它,軟鏈接就相當(dāng)于windows中的快捷方式,它并不真正的去存儲數(shù)據(jù),簡單說來只是存儲來一個指向一個文件的鏈接。
$ln?-s?hello.c?softlink.c $ls?-al total?52 drwxr-xr-x?3?root?root??4096?Oct??7?03:39?. drwx------?1?root?root??4096?Oct??7?03:33?.. drwxr-xr-x?8?root?root??4096?Aug?26?15:28?.git -rw-r--r--?1?root?root?18027?Aug?26?15:28?LICENSE -rw-r--r--?1?root?root???210?Aug?26?15:28?README.md -rw-r--r--?3?root?root????72?Aug?26?15:32?copy.c -rw-r--r--?3?root?root????72?Aug?26?15:32?dcopy.c -rw-r--r--?3?root?root????72?Aug?26?15:32?hello.c lrwxrwxrwx?1?root?root?????7?Oct??7?03:39?softlink.c?->?hello.c?#?這里就表示是軟鏈接
p
,表示一個管道,我們在進(jìn)行多進(jìn)程通信的時候可能需要使用到這個設(shè)備文件。比如我們創(chuàng)建一個具體的管道:
$mkfifo?test $ll total?52 drwxr-xr-x?3?root?root??4096?Oct??7?05:06?./ drwx------?1?root?root??4096?Oct??7?03:40?../ drwxr-xr-x?8?root?root??4096?Aug?26?15:28?.git/ -rw-r--r--?1?root?root?18027?Aug?26?15:28?LICENSE -rw-r--r--?1?root?root???210?Aug?26?15:28?README.md -rw-r--r--?3?root?root????72?Aug?26?15:32?copy.c -rw-r--r--?3?root?root????72?Aug?26?15:32?dcopy.c -rw-r--r--?3?root?root????72?Aug?26?15:32?hello.c lrwxrwxrwx?1?root?root?????7?Oct??7?03:39?softlink.c?->?hello.c prw-r--r--?1?root?root?????0?Oct??7?05:06?test?#?這里就是我么你創(chuàng)建的管道
s
,這個表示一個套接字,用于網(wǎng)絡(luò)通信。
權(quán)限說明
對于后面9個字符來說,是用于表示文件的相關(guān)權(quán)限的。對于每一種文件來說,它主要有三個權(quán)限,讀、寫和執(zhí)行,我們很容易理解這三種權(quán)限,對于一個文件來說我們當(dāng)然是想要讀和寫的,對于有的文件來說我們希望他是可執(zhí)行的。我們稍后具體具一個例子,我們先來看這個9個位置分表表示的含義。
在這9個位置的字符當(dāng)中如果是用-
表示,則說明沒有對應(yīng)的權(quán)限,如果是用對應(yīng)的r
,w
,x
表示,則說明有對應(yīng)的權(quán)限。這9個字符每三個字符是一組,第一組表示文件的作者的權(quán)限,第二組表示作者所在組內(nèi)的其他人的權(quán)限,第三組表示其他人的權(quán)限,也就是除了作者和作者所在的組之外的其他人的權(quán)限。
比如在上圖當(dāng)中有一個可執(zhí)行文件a.out,但是當(dāng)我們使用chmod命令將他的所有的可執(zhí)行權(quán)限都刪掉的時候他就不可以被執(zhí)行了,程序輸出的結(jié)果表示沒有權(quán)限。在沒有修改之前,作者、組和其他人的權(quán)限為-rwxr-xr-x
,所有的這些人都有可執(zhí)行的權(quán)限。但是當(dāng)執(zhí)行命令chmod -x a.out
之后去除了所有人的可執(zhí)行權(quán)限之后,再想執(zhí)行a.out就會報錯了,表示權(quán)限不夠,如果我們還想執(zhí)行a.out的話就需要將權(quán)限重新加回去:
上面主要談到了關(guān)于權(quán)限的問題,我們現(xiàn)在來好好談一談chmod命令,這條命令主要是用來修改文件的權(quán)限的,比如上面那樣。在chmod當(dāng)中我們可以有如下的幾種方式去修改文件的權(quán)限:
直接通過+r
,+w
,+x
和-r
,-w
,-x
去修改三個不同的位置的權(quán)限,具體如下面這個例子所示。
除此之外我們還可以指定特定的人或者組。
在上面的例子當(dāng)中我們還使用數(shù)組去表示權(quán)限,因?yàn)椴还苁悄侵蓄愋偷挠脩舳加腥N權(quán)限,每一種權(quán)限有具有兩種狀態(tài),有這個權(quán)限和沒有這個權(quán)限。那么每一個位置都可以使用一個二進(jìn)制位進(jìn)行表示,當(dāng)二進(jìn)制位為1的時候就說明有這個權(quán)限,為0的時候就沒有這個權(quán)限。那么三個二進(jìn)制位就表示一類用戶(作者、組和其他),因此每一個用戶的權(quán)限我們可以用三個二進(jìn)制數(shù)進(jìn)行表示,比如在上圖當(dāng)中的chmod 746 hello.c
這條命令的輸出結(jié)果和下圖當(dāng)中是相互對應(yīng)的,打擊可以仔細(xì)對照的思考一下。
其他說明
至此我們已經(jīng)完成了ls
輸出的第一步分析,接下來我們來看第二行,第二行輸出的數(shù)據(jù)是文件的鏈接的數(shù)目。對于目錄來說這個鏈接的數(shù)目就是子目錄的數(shù)目,對于文件來說就是硬鏈接的數(shù)量。對于一個新創(chuàng)建的文件來說硬鏈接的數(shù)目為1,我們可以是使用ln命令去增加一個文件的硬鏈接的數(shù)量,比如下圖
硬鏈接和軟鏈接的主要區(qū)別就是,軟鏈接不會影響鏈接的數(shù)量,他只是指向一個文件,而硬鏈接不一樣,他會增加一個文件鏈接的數(shù)量,當(dāng)我們刪除一個文件的時候事實(shí)上并不是直接將這個文件從磁盤當(dāng)中刪除,而是將這個文件的鏈接數(shù)減去一,當(dāng)這個鏈接數(shù)等于0的時候才會刪除這個文件,而刪除一個軟鏈接是不會影響鏈接的數(shù)量的,他只是在被發(fā)現(xiàn)是軟鏈接的時候去讀它指向的那個文件的內(nèi)容。
第三列和第四列主要是用戶名和用戶所在的組的組名。第五列是文件的大小,單位是Byte。后面三列是文件上一次修改時間分別對應(yīng)月、日、分秒,最后一列則是文件名。
彩蛋
我們可以使用stat命令去查看一個文件詳細(xì)的元數(shù)據(jù)信息,這些信息是存儲在文件的inode信息里面的。
$stat?hello.c? ??File:?hello.c ??Size:?72?????????Blocks:?8??????????IO?Block:?4096???regular?file Device:?91h/145d?Inode:?1577767?????Links:?3 Access:?(0644/-rw-r--r--)??Uid:?(????0/????root)???Gid:?(????0/????root) Access:?2022-10-07?05:41:32.685021010?+0000 Modify:?2022-10-07?05:41:27.547021008?+0000 Change:?2022-10-07?05:41:27.552021008?+0000 ?Birth:?2022-08-26?15:32:43.726183003?+0000?
對應(yīng)的信息如下:
- ls -R 遞歸列出子目錄當(dāng)中的文件。
- ls -S 根據(jù)文件大小排序
- ls - t 根據(jù)最后一次修改時間排序。
- ls -r 逆序排列。
到此這篇關(guān)于Linux命令學(xué)習(xí)之原來最簡單的ls這么復(fù)雜的文章就介紹到這了,更多相關(guān)Linux ls命令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Shell腳本實(shí)現(xiàn)進(jìn)度條的兩種方式
本文主要介紹了Shell腳本實(shí)現(xiàn)進(jìn)度條的兩種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03shell中打印ssh登錄遠(yuǎn)端ip地址的實(shí)現(xiàn)
本文主要介紹了shell中打印ssh登錄遠(yuǎn)端ip地址的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2008-12-12Shell命令行中特殊字符與其轉(zhuǎn)義詳解(去除特殊含義)
這篇文章主要給大家詳細(xì)介紹了Shell命令行中特殊字符與其轉(zhuǎn)義(去除特殊含義)的相關(guān)資料,文中介紹的很詳細(xì),相信對大家具有一定的參考價值,有需要的朋友們下面來一起看吧。2017-02-02