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

shell 學習四十一天----列出文件 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 能做更多的處理,因為他紙袋自己的參數(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)用 echols
命令: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