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