首先惡臭命令提供簡單的方式列出匹配模式的文件:
命令: echo /bin/*sh #顯示/bin 下的 shell
輸出:/bin/bash /bin/csh /bin/dash /bin/sh /bin/tcsh
分析:shell 將通配符字符模式替換為匹配的文件列表,echo 以空格區(qū)分文件列表,在單一行上顯示他們.echp 不會更近一部解釋他的參數(shù),因此與文件系統(tǒng)里的文件也沒有任何關(guān)系.
ls命令則比 echo 能做更多的處理,因?yàn)樗埓约旱膮?shù)應(yīng)該是文件.未提供命令行選項(xiàng)時(shí),ls 只會驗(yàn)證其參數(shù)是否存在,并顯示它們,如果輸出并非終端,則以一行一個(gè)的方式顯示,如果是終端,則為多欄顯示模式.下例:
命令:ls /bin/*sh | cat
輸出:/bin/bash
/bin/csh
/bin/dash
/bin/sh
/bin/tcsh
分析:在輸出管道里顯示 shell
命令:ls /bin/*sh
輸出:/bin/bash /bin/csh /bin/dash /bin/sh /bin/tcsh
分析:以 80 個(gè)字幅寬度的終端窗口,顯示 shell
命令:ls /bin/*sh
輸出:/bin/bash /bin/csh /bin/dash /bin/sh
/bin/tcsh
分析:以 40 個(gè)字幅寬度的終端端口,顯示 shell.
為了終端輸出時(shí),ls 會使用剛好適合的多欄,將數(shù)據(jù)以欄加以排列,這只是為了人們方便檢查,如果你要單欄輸出到終端,可以使用 ls -1(數(shù)字 1 )強(qiáng)制執(zhí)行.另外,處理 ls 的管道輸出的程序,可預(yù)期得到一個(gè)文件明一行的模式.
ls 的語法:
ls [options] [file(s)]
用途:列出文件目錄的內(nèi)容
主要選項(xiàng):
選項(xiàng) | 作用 |
---|---|
-1 | 數(shù)字 1.強(qiáng)制為單欄輸出.在交互式模式下,ls 一般會以適用于當(dāng)前窗口的最小寬度,使用多個(gè)列 |
-a | 顯示所有文件,包括隱藏文件(文件名以點(diǎn)號其實(shí)的文件) |
-d | 顯示于目錄本身相關(guān)的信息,而非他們包含的文件的信息 |
-F | 使用特殊結(jié)尾字符,標(biāo)記特定的文件類型 |
-g | 僅適用于組:省略所有者名稱 |
-i | 列出 inode 編號 |
-L | 緊接著符號性連接,列出他們指向的文件 |
-l | 小寫的 l(字母).以冗長形式列出,帶有類型,全鄉(xiāng)保護(hù),所有者,組,字節(jié)計(jì)數(shù),最后修改事件和文件名 |
-r | 倒置默認(rèn)的排序順序 |
-R | 遞歸列出,下延進(jìn)入每個(gè)子目錄 |
-S | 按照由大到小的文件大小計(jì)數(shù)排序.僅 GNU 版本支持 |
-s | 以塊(一系統(tǒng)有關(guān))為單位,列出文件的大小 |
-t | 按照最后修改時(shí)間戳排序 |
--full-time
顯示完整的時(shí)間戳.僅GNu版本支持
行為模式:ls 通常只顯示文件名稱:如要取得與文件屬性相關(guān)的信息,必須提供額外選項(xiàng).文件是以辭典編排的順序排序,不過可通過-S 或-t 選項(xiàng)改變他.排序的順序是按照系統(tǒng)的語言環(huán)境而定.
不同于 echo 的是:ls 要求他的文件參數(shù)要存在,而且如果他們不存在的話,則會出現(xiàn)提示:
命令:ls dfrdsgjfgkjd
輸出:ls: 無法訪問 dfrdsgjfgkjd: 沒有那個(gè)文件或目錄
然后使用 echo $?查看一下 ls 的退出碼:
輸出:2
無參時(shí),echo 只會顯示一個(gè)空行,但 ls 會列出當(dāng)前目錄的內(nèi)容.
案例:依次輸入下列命令
mkdir test
cd test
touch one two three
然后應(yīng)用 echo 和 ls:
命令:echo *
輸出:one three two
命令: ls *
輸出:one three two
命令:echo
輸出:空行
命令:ls
輸出:one three two
以一個(gè)點(diǎn)號為開頭的文件名,在正規(guī) shell 模式匹配中會被隱藏.
依次執(zhí)行下列命令:
mkdir hidden
cd hidden
toucho .uno .dos .tres
接著使用下列命令嘗試顯示他的內(nèi)容:
$echo
*
$ls
不顯示任何東西
$ls *
ls: 無法訪問*: 沒有那個(gè)文件或目錄
當(dāng)沒有匹配模式的文件時(shí),shell 會將模式視為參數(shù):在這里 echo 看到星號并打印他,而 ls 則試圖尋找名為*的文件,然后報(bào)告尋找失敗.
現(xiàn)在,如果我們提供匹配前置點(diǎn)號的模式:
$echo #回應(yīng)隱藏文件
. .. .dos .tres .uno
$ls .* #列出隱藏文件
.dos .tres .uno
.:
..:
hidden test
linux 目錄總是包含特殊實(shí)例..(父目錄).(當(dāng)前目錄),且 shell 會床底所有的匹配給這兩個(gè)程序.echo 只報(bào)告他們,但 ls 會做更多的事:當(dāng)命令行參數(shù)為目錄時(shí),他會列出該目錄的內(nèi)容.
可以顯示目錄本身的相關(guān)信息,而非其內(nèi)容,只要使用-d 選項(xiàng)即可:
$ls -d .*
. .. .dos .tres .uno
$ls -d ../*
../hidden ../test
由于你通常要的不是顯示父目錄,因此,ls 還提供了-a 選項(xiàng),提供打印當(dāng)前目錄的所有文件,包含隱藏文件:
$ls -a
. .. .dos .tres .uno
長的文件列出
由于 ls 知道他的參數(shù)是文件,所以可以進(jìn)一步的報(bào)告相關(guān)細(xì)節(jié),尤其是文件系統(tǒng)的一些 metadata,這個(gè)功能通常以-l(字母)選項(xiàng)完成:
$ls -l /bin/*sh
-rwxr-xr-x. 1 root root 938832 7月 18 2013 /bin/bash
lrwxrwxrwx. 1 root root 4 5月 29 02:34 /bin/csh -> tcsh
-rwxr-xr-x. 1 root root 109672 10月 17 2012 /bin/dash
lrwxrwxrwx. 1 root root 4 5月 29 02:25 /bin/sh -> bash
-rwxr-xr-x. 1 root root 387328 2月 22 2013 /bin/tcsh
下面來介紹一下這種輸出類型是個(gè)什么東西
首字符描述文件類型:- 為一般文件,d 為目錄,l 為符號連接.,此處是文件.
接下來的 9 個(gè)字符,則報(bào)告文件權(quán)限:針對每個(gè)用戶,組以及除此外的其他人.r 表示讀權(quán)限,w 表示寫權(quán)限,x 表示執(zhí)行權(quán)限,如果未提供權(quán)限則是-.
第二欄包含連接計(jì)數(shù):在這里,只有/bin/zsh 擁有直接連接到另一個(gè)文件,但是還有其他的文件未顯示于這里的輸出,因?yàn)樗麄兊拿Q與參數(shù)模式不匹配.
第三欄,第四欄報(bào)告文件所有者和所屬組,第五欄則是以字節(jié)為單位的文件大小.
接下來的三欄是最后修改的時(shí)間戳.這里顯示的是一直沿用下來的形式:月,日,年.
最后說一下 od 命令
od 命令用于輸出文件的八進(jìn)制,十六進(jìn)制或其他格式編碼的字節(jié),通常用于顯示或查看文件中不能直接顯示在終端的字符.
常見的文件為文本文件和二進(jìn)制文件.此命令主要用來查看保存在二進(jìn)制文件中的值.比如,程序可能輸出大量的數(shù)據(jù)記錄,每個(gè)數(shù)據(jù)是一個(gè)單精度浮點(diǎn)數(shù).這些記錄存放在一個(gè)文件中,如果想查看下這個(gè)數(shù)據(jù),這時(shí)候 od 命令就派生用場了.個(gè)人認(rèn)為:od 命令主要用來格式化輸出文件數(shù)據(jù),即對文件中的數(shù)據(jù)進(jìn)行無二義性的解釋.不管是 IEEE754 格式的浮點(diǎn)數(shù)還是 ASCII 碼,od 命令都能按照需求輸出他們的值.
語法:od [選項(xiàng)] [參數(shù)]
選項(xiàng):
參數(shù):
文件:指定要顯示的文件
案例:
準(zhǔn)備一個(gè) test 文件
$ echo abcdef g >test
$cat test
abcdef g
使用單字節(jié)八進(jìn)制解釋進(jìn)行輸出,注意左側(cè)的默認(rèn)地址格式為八字節(jié)
$ od -b test
0000000 141 142 143 144 145 146 040 147 012
0000011
使用 ASCII 碼進(jìn)行輸出,注意其中包括轉(zhuǎn)義字符
$ od -c test
0000000 a b c d e f g \n
0000011
使用單字節(jié)十進(jìn)制進(jìn)行解釋
$od -t d1 test (這里是數(shù)字 1)
0000000 97 98 99 100 101 102 32 103 10
0000011
設(shè)置地址格式為十進(jìn)制
$ od -A d -c test
0000000 a b c d e f g \n
0000009
設(shè)置地址格式為十六進(jìn)制
$od -A x -c test
000000 a b c d e f g \n
000009
跳過開始的兩個(gè)字節(jié)
$ od -j 2 -c test
od -j 2 -c test
0000002 c d e f g \n
0000011
跳過開始的兩個(gè)字節(jié),并且僅輸出兩個(gè)字節(jié)
$ od -N 2 -j 2 -c test
0000002 c d
0000004
每行僅輸出一個(gè)字節(jié)
$od -w1 -c test (這里也是數(shù)字 1)
0000000 a
0000001 b
0000002 c
0000003 d
0000004 e
0000005 f
0000006
0000007 g
0000010 \n
0000011
每行輸出兩個(gè)字節(jié):
$ od -w2 -c test
0000000 a b
0000002 c d
0000004 e f
0000006 g
0000010 \n
0000011
每行輸出 3 個(gè)字節(jié),并使用八進(jìn)制字節(jié)進(jìn)行解釋
$ od -w3 -b test
0000000 141 142 143
0000003 144 145 146
0000006 040 147 012
0000011