鍍金池/ 教程/ Linux/ shell 學(xué)習(xí)四十一天---列出文件 ls 和 od 命令
shell 學(xué)習(xí)四十五天---xargs
shell學(xué)習(xí)第三天
shell 學(xué)習(xí)十五天---join 連接字段
shell 學(xué)習(xí)第二天
shell 學(xué)習(xí)四十三天---臨時(shí)性文件的建立與使用
shell 學(xué)習(xí)第六天---小結(jié)
shell 學(xué)習(xí)三十三天---關(guān)于重定向
shell 學(xué)習(xí)二十九天---循環(huán)
shell 學(xué)習(xí)二十四天---提取開頭或結(jié)尾數(shù)行
shell 學(xué)習(xí)第十天---sed 查找與替換
shell 學(xué)習(xí)第十一天---sed 正則的精確控制
shell 學(xué)習(xí)三十天---break,continue,shift,getopts
shell 學(xué)習(xí)---小結(jié)
shell 學(xué)習(xí)三十一天---函數(shù)問題
shell 學(xué)習(xí)第四天---華麗的 printf 輸出
shell 學(xué)習(xí)三十五天---波浪號展開與通配符
shell 學(xué)習(xí)十九天---文本塊排序
shell 學(xué)習(xí)十二天---行與字符串
shell 學(xué)習(xí)二十一天---重新格式化段落
shell 學(xué)習(xí)十八天---文本排序
shell 學(xué)習(xí)十三天---sed 案例分析
shell 學(xué)習(xí)四十一天---列出文件 ls 和 od 命令
shell 學(xué)習(xí)十七天---awk 命令
shell 學(xué)習(xí)三十六天---命令替換
shell 學(xué)習(xí)十六天---join 練習(xí)
shell 學(xué)習(xí)三十二天---read 讀取一行
shell 學(xué)習(xí)二十二天---計(jì)算行數(shù),字?jǐn)?shù)以及字符數(shù)
shell 學(xué)習(xí)小總結(jié)---本章小結(jié)
shell 學(xué)習(xí)第八天---擴(kuò)展正則表達(dá)式(ERE)
shell 學(xué)習(xí)四十二天---使用 touch 更新文件時(shí)間
shell 學(xué)習(xí)二十八天---case 語句
shell 學(xué)習(xí)三十九天---內(nèi)建命令
shell 學(xué)習(xí)第一天
shell 學(xué)習(xí)三十四天---printf 詳解
shell 學(xué)習(xí)二十六天---變量與算數(shù)
shell 學(xué)習(xí)三十八天---執(zhí)行順序和 eval
shell 學(xué)習(xí)四十四天---尋找文件
shell 學(xué)習(xí)二十五天---神器的管道符
shell 學(xué)習(xí)十四天---使用 cut 選定字段
shell 學(xué)習(xí)第五天---基本的I/O重定向
shell 學(xué)習(xí)四十天---awk 的驚人表現(xiàn)
shell 學(xué)習(xí)二十天---sort 的其他內(nèi)容以及 uniq 命令
shell 學(xué)習(xí)二十三天---打印
shell 學(xué)習(xí)第九天---分組
shell 學(xué)習(xí)四十八天---文件校驗(yàn)和匹配
shell 學(xué)習(xí)二十七天---退出狀態(tài)和 if 語句
shell 學(xué)習(xí)四十七天---文件比較 cmp,diff,patch
shell 學(xué)習(xí)第七天---基礎(chǔ)正則表達(dá)式(BRE)
shell 學(xué)習(xí)四十六天---文件系統(tǒng)的空間信息 df 和 du 命令
shell 學(xué)習(xí)三十七天---引用
shell 學(xué)習(xí)小結(jié)

shell 學(xué)習(xí)四十一天---列出文件 ls 和 od 命令

首先惡臭命令提供簡單的方式列出匹配模式的文件:
命令: 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):

  • -a:此參數(shù)的效果和同時(shí)指定“-ta”參數(shù)相同;
  • -A:<字碼基數(shù)>:選擇以何種基數(shù)計(jì)算字碼;
  • -b:此參數(shù)的效果和同時(shí)指定“-toC”參數(shù)相同;
  • -c:此參數(shù)的效果和同時(shí)指定“-tC”參數(shù)相同;
  • -d:此參數(shù)的效果和同時(shí)指定“-tu2”參數(shù)相同;
  • -f:此參數(shù)的效果和同時(shí)指定“-tfF”參數(shù)相同;
  • -h:此參數(shù)的效果和同時(shí)指定“-tx2”參數(shù)相同;
  • -i:此參數(shù)的效果和同時(shí)指定“-td2”參數(shù)相同;
  • -j<字符數(shù)目>或--skip-bytes=<字符數(shù)目>:略過設(shè)置的字符數(shù)目;
  • -l:此參數(shù)的效果和同時(shí)指定“-td4”參數(shù)相同;
  • -N<字符數(shù)目>或--read-bytes=<字符數(shù)目>:到設(shè)置的字符樹目為止;
  • -o:此參數(shù)的效果和同時(shí)指定“-to2”參數(shù)相同;
  • -s<字符串字符數(shù)>或--strings=<字符串字符數(shù)>:只顯示符合指定的字符數(shù)目的字符串;
  • -t<輸出格式>或--format=<輸出格式>:設(shè)置輸出格式;
  • -v或--output-duplicates:輸出時(shí)不省略重復(fù)的數(shù)據(jù);
  • -w<每列字符數(shù)>或--width=<每列字符數(shù)>:設(shè)置每列的最大字符數(shù);
  • -x:此參數(shù)的效果和同時(shí)指定“-h”參數(shù)相同;
  • --help:在線幫助;
  • --version:顯示版本信息。

參數(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