Linux常用命令學習

轉自http://www.cnblogs.com/zendu/p/4991011.html

1.基本命令
新手必須要掌握的初級命令
ls
基本的列出所有文件的命令.但是往往就是因為這個命令太簡單,所以我們總是低估它.比如
,用 -R 選項,這是遞歸選項,ls 將會以目錄樹的形式列出所有文件, 另一個很有用的選項
是 -S ,將會按照文件尺寸列出所有文件, -t, 將會按照修改時間來列出文件,-i 選項會顯
示文件的 inode
cat, tac
cat, 是單詞 concatenate 的縮寫, 把文件的內容輸出到stdout. 當與重定向操作符 (> 或
>>)結合使用時, 一般都是用來將多個文件連接起來.
rev
把每一行中的內容反轉, 并且輸出到 stdout 上. 這個命令與 tac 命令的效果是不同的, 因
為它并不反轉行序, 而是把每行的內容反轉.
cp
這是文件拷貝命令. cp file1 file2 把 file1 拷貝到 file2, 如果存在 file2 的話,那
file2 將被覆蓋 (見 Example 12-6).
注意: 特別有用的選項就是 -a 歸檔選項 (為了copy 一個完整的目錄樹), -u 是更新選
項, 和 -r 與 -R 遞歸選項.
mv
這是文件移動命令. 它等價于 cp 與 rm 命令的組合. 它可以把多個文件移動到目錄中,甚
至將目錄重命名. 想查看 mv 在腳本中使用的例子, 見 Example 9-18 和 Example A-2.
注意: 當使用非交互腳本時,可以使用 mv 的-f (強制) 選項來避免用戶的輸入.
當一個目錄被移動到一個已存在的目錄時,那么它將成為目標目錄的子目錄.
rm
刪除(清除)一個或多個文件. -f 選項將強制刪除文件,即使這個文件是只讀的.并且可以
用來避免用戶輸入(在非交互腳本中使用).
rmdir
刪除目錄. 但是只有這個目錄中沒有文件 -- 當然會包含不可見的點文件 [1] -- 的
時候這個命令才會成功.
mkdir
生成目錄, 創建一個空目錄. 比如, mkdir -p project/programs/December 將會創建出
這個指定的目錄, 即使project 目錄和programs 目錄都不存在. -p 選項將會自動產生必要
的父目錄, 這樣也就同時創建了多個目錄.
chmod
修改一個現存文件的屬性 (見 Example 11-12).
chmod +x filename
# 使得文件filename 對所有用戶都可執行.
chattr
修改文件屬性. 這個命令與上邊的 chmod 命令相類似, 但是有不同的選項和不同的調用語
法, 并且這個命令只能工作在ext2 文件系統中.
chattr 命令的一個特別有趣的選項是i. chattr +i filename 將使得這個文件被標記為
永遠不變. 這個文件將不能被修改, 連接, 或刪除, 即使是root 也不行. 這個文件屬性只
能被 root 設置和刪除. 類似的, a 選項將會把文件標記為只能追加數據.
ln
創建文件鏈接, 前提是這個文件是存在的. "鏈接" 就是一個文件的引用, 也就是這個文
件的另一個名字. ln 命令允許對同一個文件引用多個鏈接,并且是避免混淆的一個很好的
方法 (見 Example 4-6).
ln 對于文件來說只不過是創建了一個引用, 一個指針而已, 因為創建出來的連接文件只有
幾個字節.
絕大多數使用 ln 命令時使用是 -s 選項, 可以稱為符號鏈接, 或軟鏈接.使用 -s 選項的
一個優點是它可以穿越文件系統來鏈接目錄.
關于使用這個命令的語法還是有點小技巧的. 比如: ln -s oldfile newfile 將對老文件
產生一個新的文件鏈接.
注意: 如果之前就存在newfile 的話, 那么將會產生一個錯誤消息.
使用鏈接中的哪種類型?
就像 John Macdonald 解釋的那樣:
不論是那種類型的鏈接, 都提供了一種雙向引用的手段 -- 也就是說, 不管你用文件
的那個名字對文件內容進行修改, 你修改的效果都即會反映到原始名字的文件, 也會
反映到鏈接名字的文件.當你工作在更高層次的時候, 才會發生軟硬鏈接的不同. 硬鏈
接的優點是, 原始文件與鏈接文件之間是相互獨立的 -- 如果你刪除或者重命名老文
件, 那么這種操作將不會影響硬鏈接的文件, 硬鏈接的文件講還是原來文件的內容.
然而如果你使用軟鏈接的, 當你把老文件刪除或重命名后, 軟鏈接將再也找不到原來
文件的內容了. 而軟鏈接的優點是它可以跨越文件系統(因為它只不過是文件名的一個
引用, 而并不是真正的數據). 與硬鏈接的另一個不同是, 一個符號鏈接可以指向一個
目錄.
鏈接給出了一種可以用多個名字來調用腳本的能力(當然這也適用于任何可執行的類型),
并且腳本的行為將依賴于腳本是如何被調用的.
man, info
These 這兩個命令用來查看系統命令或安裝工具的手冊和信息.當兩者都可用時, info 頁
一般比 man 也會包含更多的細節描述.
注意事項:
[1] Dotfiles 就是文件名以"."開頭的文件, 比如 ~/.Xdefaults. 這樣的文件在一般的 l
s 命令使用中將不會被顯示出來 (當然 ls -a 將會顯示它們), 并且它們也不會被一
個意外的 rm -rf *刪除. 在用戶的home 目錄中,Dotfiles 一般被用來當作安裝和配置
文件.
復雜命令
-------------
更高級的用戶命令
更高級的用戶命令
find
-exec COMMAND \;
在每一個 find 匹配到的文件執行 COMMAND 命令. 命令序列以 ; 結束( ";" 是轉義符 以
保證 shell 傳遞到find 命令中的字符不會被解釋為其他的特殊字符).
bash$ find ~/ -name '*.txt'
/home/bozo/.kde/share/apps/karm/karmdata.txt
/home/bozo/misc/irmeyc.txt
/home/bozo/test-scripts/1.txt
如果 COMMAND 中包含 {}, 那么 find 命令將會用所有匹配文件的路徑名來替換 "{}" .
find ~/ -name 'core*' -exec rm {} \;
# 從用戶的 home 目錄中刪除所有的 core dump 文件.
xargs
這是給命令傳遞參數的一個過濾器, 也是組合多個命令的一個工具.它把一個數據流分割為
一些足夠小的塊, 以方便過濾器和命令進行處理. 由此這個命令也是后置引用的一個強有
力的替換. 在一般使用過多參數的命令替換失敗的時候,用xargs 來替換它一般都能成功.
[1] 通常情況下, xargs 從管道或者stdin 中讀取數據, 但是它也能夠從文件的輸出中讀取
數據.
xargs 的默認命令是 echo. 這意味著通過管道傳遞給xargs 的輸入將會包含換行和空白, 不
過通過 xargs 的處理, 換行和空白將被空格取代.
expr
通用求值表達式: 通過給定的操作(參數必須以空格分開)連接參數,并對參數求值.可以使
算術操作, 比較操作, 字符串操作或者是邏輯操作.
expr 3 + 5
返回 8
expr 5 % 3
返回 2
expr 1 / 0
返回錯誤消息, expr: division by zero
不允許非法的算術操作.
expr 5 \* 3
返回 15
在算術表達式 expr 中使用乘法操作時, 乘法符號必須被轉義.
y=`expr $y + 1`
substr: 從指定位置提取指定長度的字串.
b=`expr substr $a 2 6`
echo "Substring of \"$a\", starting at position 2,\
and 6 chars long is \"$b\"."
時間/日期命令
date
直接調用, date 就會打印日期和時間到 stdout 上. 這個命令有趣的地方在于它的格式化
和分析選項上.
zdump
查看特定時區的當前時間.
bash$ zdump EST
EST Tue Sep 18 22:09:22 2001 EST
time
輸出統計出來的命令執行的時間.
time ls -l / 給出的輸出大概是如下格式:
0.00user 0.01system 0:00.05elapsed 16%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (149major+27minor)pagefaults 0swaps
touch
這是一個用來更新文件被存取或修改的時間的工具,這個時間可以是當前系統的時間,也可
以是指定的時間, 這個命令也用來產生一個新文件.命令 touch zzz 將產生一個以zzz 為名
字的 0 字節長度文件, 當然前提是zzz 文件不存在. 為了存儲時間信息, 就需要一個時間戳
為空的文件, 比如當你想跟蹤一個工程的修改時間的時候,這就非常有用了.
at
at 命令是一個作業控制命令, 用來在指定時間執行給定的命令集合.它有點像 cron 命令,
然而, at 命令主要還是用來執行那種一次性執行的命令集合.
at 2pm January 15 將會提示讓你輸入需要在這個時間你要執行的命令序列. 這些命令應
該是可以和 shell 腳本兼容的,因為, 實際上, 在一個可執行的腳本中, 用戶每次只能敲一
行. 輸入以 Ctl-D 結束.
你可以使用-f 選項或者使用 (<)重定向操作符, 來讓 at 命令從一個文件中讀取命令
集合. 這個文件其實就一個可執行的的腳本, 雖然它是一個不可交互的腳本. 在文件中包
含一個 run-parts 命令, 對于執行一套不同的腳本來說是非常聰明的做法.
bash$ at 2:30 am Friday < at-jobs.list
job 2 at 2000-10-27 02:30
batch
batch 作業控制命令與 at 命令的行為很相像, 但 batch 命令被用來在系統平均載量降到
0.8 以下時執行一次性的任務. 與 at 命令相似的是, 它也可以使用 -f 選項來從文件中
讀取命令.
cal
從 stdout 中輸出一個格式比較整齊的日歷. 也可以指定年和月來顯示那個月的日歷.
sleep
這個命令與一個等待循環的效果一樣. 你可以指定需要暫停的秒數, 這段時間將什么都不
干.當一個后臺運行的進程需要偶爾檢測一個事件時,這個功能很有用. 也可用于計時. 參
見 Example 29-6.
sleep 3 # Pauses 3 seconds.
注意: sleep 命令默認為秒, 但是你也可以指定天數, 小時數或分鐘數.
sleep 3 h # Pauses 3 hours!
注意: 如果你想每隔一段時間來運行一個命令的話, 那么 watch 命令將比 sleep 命令好
得多.
usleep
Microsleep 睡眠微秒( "u" 會被希臘人讀成 "mu", 或者是 micro- 前綴). 與上邊的 sl
eep 命令作用相同, 但這個命令是以百萬分之一秒為單位的. 當需要精確計時, 或者需要
非常頻繁的監控一個正在運行的進程的時候, 這個命令非常有用.
usleep 30 # 暫停 30 microseconds.
hwclock, clock
hwclock 命令可以存取或調整硬件時鐘. 這個命令的一些選項需要 root 權限. 在系統啟
動的時候, /etc/rc.d/rc.sysinit 這個啟動文件,會使用 hwclock 來從硬件時鐘中讀取
并設置系統時間.clock at bootup.
clock 命令與 hwclock 命令完全相同.
文本處理命令
處理文本和文本文件的命令
sort
文件排序, 通常用在管道中當過濾器來使用. 這個命令可以依據指定的關鍵字或指定的字
符位置, 對文件行進行排序. 使用 -m 選項, 它將會合并預排序的輸入文件. 想了解這個
命令的全部參數請參考這個命令的 info 頁. 見 Example 10-9, Example 10-10, 和
Example A-8.
tsort
拓撲排序 ,讀取以空格分隔的有序對, 并且依靠輸入模式進行排序.
uniq
這個過濾器將會刪除一個已排序文件中的重復行.這個命令經常出現在 sort 命令的管道后
邊.
cat list-1 list-2 list-3 | sort | uniq > final.list
# 將3 個文件連接起來,
# 將它們排序,
# 刪除其中重復的行,
# 最后將結果重定向到一個文件中.
-c 選項的意思是在輸出行前面加上每行在輸入文件中出現的次數.
expand, unexpand
expand 將會把每個tab 轉化為一個空格.這個命令經常用在管道中.
unexpand 將會把每個空格轉化為一個tab.效果與 expand 相反.
cut
一個從文件中提取特定域的工具. 這個命令與 awk 中使用的 print $N 命令很相似, 但是
更受限. 在腳本中使用cut 命令會比使用 awk 命令來得容易一些. 最重要的選項就是 -d
(字段定界符) 和 -f (域分隔符) 選項.
使用 cut 來獲得所有mount 上的文件系統的列表:
cut -d ' ' -f1,2 /etc/mtab
使用 cut 命令列出 OS 和 kernel 的版本:
uname -a | cut -d" " -f1,3,11,12
paste
將多個文件,以每個文件一列的形式合并到一個文件中, 合并后的文件沒列就是原來的一個
文件.對于創建系統log 文件來說, 使用 cut 命令與 paste 命令相結合是非常有用的.
join
這個命令與 paste 命令屬于同類命令, 但是它能夠完成某些特殊的目地. 這個強力工具能
夠以一種特殊的形式來合并 2 個文件, 這種特殊的形式本質上就是一個關聯數據庫的簡單版
本.
join 命令只能夠操作2 個文件, 它可以將那些具有特定標記域(通常是一個數字標簽)的行
合并起來, 并且將結果輸出到stdout. 被加入的文件應該事先根據標記域進行排序以便于
能夠正確的匹配.
head
將一個文件的頭打印到 stdout 上 ( 默認為10 行, 可以自己修改 ). 這個命令也有一些有趣
的選項.
grep
使用 正則表達式的一個多用途文本搜索工具. 這個命令本來是 ed 行編輯器中的一個命
令/過濾器: g/re/p -- global - regular expression - print.
grep pattern [file...]
在文件中搜索所有 pattern 出現的位置, pattern 既可以是要搜索的字符串,也可以是一
個正則表達式.
egrep - 擴展的 grep - 這個命令與 grep -E 等價. 這個命令用起來有些不同, 由于正
則表達式擴展, 將會使得搜索更具靈活性.
fgrep - 快速的 grep - 這個命令與 grep -F 等價. 這是一種按照字符串字面意思進行
的搜索(即不允許使用正則表達式), 這樣有時候會使搜索變得容易一些.
sed, awk
這個兩個命令都是獨立的腳本語言, 尤其適合分析文本文件和命令輸出. 既可以單獨使用,
也可以結合管道和在 shell 腳本中使用.
sed
非交互式的 "流編輯器", 在批量模式下, 允許使用許多 ex 命令.你會發現它在shell 腳本
中非常有用.
awk
可編程的文件提取器和文件格式化工具, 在結構化的文本文件中,處理或提取特定域(特定
列)具有非常好的表現.它的語法與 C 語言很類似.
wc
wc 可以統計文件或 I/O 流中的單詞數量.
bash $ wc /usr/share/doc/sed-4.1.2/README
70 447 README
[13 lines 70 words 447 characters]
wc -w 統計單詞數量.
wc -l 統計行數量.
wc -c 統計字節數量.
wc -m 統計字符數量.
wc -L 給出文件中最長行的長度.
tr
字符轉換過濾器.
注意: 必須使用引用或中括號, 這樣做才是合理的. 引用可以阻止 shell 重新解釋出現在
tr 命令序列中的特殊字符.中括號應該被引用起來防止被shell 擴展.
無論 tr "A-Z" "*" <filename 還是 tr A-Z \* <filename 都可以將 filename 中的大
寫字符修改為星號(寫到 stdout).但是在某些系統上可能就不能正常工作了, 而 tr A-Z '
[**]' 在任何系統上都可以正常工作.
fold
將輸入按照指定寬度進行折行. 這里有一個非常有用的選項 -s ,這個選項可以使用空格進
行斷行.(譯者: 事實上只有外文才需要使用空格斷行, 中文是不需要的) (參見 Example
12-23 和 Example A-1).
fmt
一個簡單的文件格式器, 通常用在管道中, 將一個比較長的文本行輸出進行折行.
col
這個命令用來濾除標準輸入的反向換行符號. 這個工具還可以將空白用等價的 tab 來替
換. col 工具最主要的應用還是從特定的文本處理工具中過濾輸出, 比如 groff 和 tbl.
(譯者: 主要用來將man 頁轉化為文本)
column
列格式化工具. 這個過濾工具將會將列類型的文本轉化為"易于打印"的表格式進行輸出,
通過在合適的位置插入 tab.
colrm
列刪除過濾器. 這個工具將會從文件中刪除指定的列(列中的字符串)并且寫到文件中, 如
果指定的列不存在,那么就回到 stdout. colrm 2 4 <filename 將會在filename 文件中對
每行刪除第 2 到第4 列之間的所有字符.
注意: 如果這個文件包含tab 和不可打印字符, 那將會引起不可預期的行為. 在這種情況下
, 應該通過管道的手段使用 expand 和 unexpand 命令來預處理 colrm.
nl
計算行號過濾器. nl filename 將會在 stdout 中列出文件的所有內容, 但是會在每個非
空行的前面加上連續的行號. 如果沒有 filename 參數, 那么就操作 stdin.
nl 命令的輸出與 cat -n 非常相似, 然而, 默認情況下 nl 不會列出空行.
pr
格式化打印過濾器. 這個命令會將文件(或stdout)分頁, 將它們分成合適的小塊以便于硬
拷貝打印或者在屏幕上瀏覽.使用這個命令的不同的參數可以完成好多任務, 比如對行和列
的操作,加入行, 設置頁邊, 計算行號, 添加頁眉, 合并文件等等. pr 命令集合了許多命
令的功能, 比如 nl, paste, fold, column, 和 expand.
pr -o 5 --width=65 fileZZZ | more 這個命令對fileZZZ 進行了比較好的分頁,并且打印
到屏幕上.文件的縮進被設置為5, 總寬度設置為65.
一個特定的使用選項 -d, 強制隔行打印 (與 sed -G 效果相同).
gettext
GNU gettext 包是專門用來將程序的輸出翻譯或者本地化為不同國家語言的工具集.在最開
始的時候僅僅支持 C 語言, 現在已經支持了相當數量的其它程序語言和腳本語言.
要想查看 gettext 程序如何在 shell 腳本中工作. 參見 info 頁.
msgfmt
一個產生2 進制消息目錄的程序. 這個命令主要用來本地化.
iconv
一個可以將文件轉化為不同編碼格式(字符集)的工具. 這個命令主要用來本地化.
# 將字符符串由 UTF-8 格式轉換為 UTF-16 并且打印到 BookList 中
function write_utf8_string {
STRING=$1
BOOKLIST=$2
echo -n "$STRING" | iconv -f UTF8 -t UTF16 | cut -b 3- | tr -d \\n >> "$BOOKLIST"
}
8 # 來自于 Peter Knowles' "booklistgen.sh" 腳本
#+ 目的是把文件轉換為 Sony Librie 格式.
# (http://booklistgensh.peterknowles.com)
recode
可以認為這個命令時上邊 iconv 命令的一個空想家版本. 這個非常靈活的并可以把整個文
件都轉換為不同編碼格式的工具并不是 Linux 標準安裝的一部分.
TeX, gs
TeX 和 Postscript 都是文本標記語言, 用來對打印和格式化的視頻顯示進行預拷貝.
TeX 是 Donald Knuth 精心制作的排版系統. 通常情況下, 通過編寫腳本的手段來把所有
的選項和參數封裝起來一起傳到標記語言中是一件很方便的事情.
Ghostscript (gs) 是一個遵循 GPL 的Postscript 解釋器.
enscript
將純文本文件轉換為 PostScript 的工具
比如, enscript filename.txt -p filename.ps 產生一個 PostScript 輸出文件
groff, tbl, eqn
另一種文本標記和顯示格式化語言是 groff. 這是一個對傳統 UNIX roff/troff 顯示和排
版包的 GNU 增強版本.Man 頁使用的就是 groff.
tbl 表處理工具可以認為是 groff 的一部分, 它的功能就是將表標記轉化到 groff
命令中.
eqn 等式處理工具也是 groff 的一部分, 它的功能是將等式標記轉化到 groff 命令中.
文件與歸檔命令
歸檔命令
tar
標準的 UNIX 歸檔工具. [1] 起初這只是一個磁帶 歸檔 程序, 而現在這個工具已經被開
發為通用打包程序, 它能夠處理所有設備的所有類型的歸檔文件, 包括磁帶設備, 正常文
件, 甚至是 stdout (參見Example 3-4). GNU 的tar 工具現在可以接受不同種類的壓縮過
濾器, 比如tar czvf archive_name.tar.gz *, 并且可以遞歸的處理歸檔文件, 還可以用
gzip 壓縮目錄下的所有文件, 除了當前目錄下($PWD)的點文件 . [2]
一些有用的 tar 命令選項:
1. -c 創建 (一個新的歸檔文件)
2. -x 解壓文件 (從存在的歸檔文件中)
3. --delete 刪除文件 (從存在的歸檔文件中)
注意: 這個選項不能用于磁帶類型設備.
4. -r 將文件添加到現存的歸檔文件的尾部
5. -A 將 tar 文件添加到現存的歸檔文件的尾部
6. -t 列出現存的歸檔文件中包含的內容
7. -u 更新歸檔文件
8. -d 使用指定的文件系統比較歸檔文件
9. -z 用 gzip 壓縮歸檔文件
(壓縮還是解壓, 依賴于是否組合了 -c 或 -x)選項
10. -j 用 bzip2 壓縮歸檔文件
注意: 如果想從損壞的用 gzip 壓縮過的 tar 文件中取得數據, 那將是很困難的. 所有當
我們歸檔重要的文件的時候, 一定要保留多個備份.
shar
Shell 歸檔工具. 存在于 shell 歸檔文件中的所有文件都是未經壓縮的, 并且本質上是一
個 shell 腳本,以 #!/bin/sh 開頭, 并且包含所有必要的解檔命令. Shar 歸檔文件至今
還在 Internet 新聞組中使用, 否則的話 shar 早就被 tar/gzip 所取代了. unshar 命令
用來解檔 shar 歸檔文件.
ar
創建和操作歸檔文件的工具, 主要在對2 進制目標文件打包成庫時才會用到.
rpm
Red Hat 包管理器, 或者說 rpm 工具提供了一種對源文件或2 進制文件進行打包的方法.
除此之外, 它還包括安裝命令, 并且還檢查包的完整性.
一個簡單的 rpm -i package_name.rpm 命令對于安裝一個包來說就足夠了, 雖然這個命
令還有好多其它的選項.
注意: rpm -qf 列出一個文件屬于那個包.
bash$ rpm -qf /bin/ls
coreutils-5.2.1-3
注意: rpm -qa 將會列出給定系統上所有安裝了的 rpm 包. rpm -qa package_name 命令
將會列出于給定名字匹配的包.
bash$ rpm -qa
redhat-logos-1.1.3-1
glibc-2.2.4-13
cracklib-2.7-12
dosfstools-2.7-1
gdbm-1.8.0-10
ksymoops-2.4.1-1
mktemp-1.5-11
perl-5.6.0-17
reiserfs-utils-3.x.0j-2
...
bash$ rpm -qa docbook-utils
docbook-utils-0.6.9-2
bash$ rpm -qa docbook | grep docbook
docbook-dtd31-sgml-1.0-10
docbook-style-dsssl-1.64-3
docbook-dtd30-sgml-1.0-10
docbook-dtd40-sgml-1.0-11
docbook-utils-pdf-0.6.9-2
docbook-dtd41-sgml-1.0-10
docbook-utils-0.6.9-2
cpio
這個特殊的歸檔拷貝命令(拷貝輸入和輸出)現在已經很少能見到了, 因為它已經被 tar/gz
ip 所替代了.現在這個命令只在一些比較特殊的地方還在使用,比如拷貝一個目錄樹.
rpm2cpio
這個命令可以從 rpm 歸檔文件中解出一個 cpio 歸檔文件.
壓縮命令
gzip
標準的 GNU/UNIX 壓縮工具, 取代了比較差的 compress 命令. 相應的解壓命令是gunzip,
gzip -d 是等價的.
zcat 過濾器可以將一個 gzip 文件解壓到 stdout, 所以盡可能的使用管道和重定向. 這
個命令事實上就是一個可以工作于壓縮文件(包括一些的使用老的 compress 工具壓縮的文
件)的 cat 命令. zcat 命令等價于 gzip -dc.
注意: 在某些商業的 UNIX 系統上, zcat 與 uncompress -c 等價, 并且不能工作于
gzip 文件.
bzip2
用來壓縮的一個可選的工具, 通常比 gzip 命令壓縮率更高(所以更慢), 適用于比較大的
文件. 相應的解壓命令是 bunzip2.
注意: 新版本的 tar 命令已經直接支持 bzip2 了.
compress, uncompress
這是一個老的, 私有的壓縮工具, 一般的商業 UNIX 發行版都會有這個工具. 更有效率的
gzip 工具早就把這個工具替換掉了. Linux 發行版一般也會包含一個兼容的 compress 命
令, 雖然 gunzip 也可以加壓用 compress 工具壓縮的文件.
注意: znew 命令可以將 compress 壓縮的文件轉換為 gzip 壓縮的文件.
sq
另一種壓縮工具, 一個只能工作于排過序的 ASCII 單詞列表的過濾器.這個命令使用過濾
器標準的調用語法, sq < input-file > output-file. 速度很快, 但是效率遠不及
gzip. 相應的解壓命令為 unsq, 調用方法與 sq 相同.
注意: sq 的輸出可以通過管道傳遞給 gzip 以便于進一步的壓縮.
zip, unzip
跨平臺的文件歸檔和壓縮工具, 與 DOS 下的 pkzip.exe 兼容. zip 歸檔文件看起來在互
聯網上比 tar 包更流行.
unarc, unarj, unrar
這些 Linux 工具可以用來解檔那些用 DOS 下的 arc.exe, arj.exe, 和 rar.exe 程序進
行歸檔的文件.
文件信息
file
確定文件類型的工具. 命令 file file-name 將會用 ascii 文本或數據的形式返回
file-name 文件的詳細描述. 這個命令會使用 /usr/share/magic, /etc/magic, 或
/usr/lib/magic 中定義的魔法數字 來標識包含某種魔法數字的文件, 上邊所舉出的這
3個文件需要依賴于具體的 Linux/UNIX 發行版.
-f 選項將會讓 file 命令運行于批處理模式, 也就是說它會分析 -f 后邊所指定的文件,
從中讀取需要處理的文件列表, 然后依次執行 file 命令. -z 選項, 當對壓縮過的目標文
件使用時, 將會強制分析壓縮的文件類型.
bash$ file test.tar.gz
test.tar.gz: gzip compressed data, deflated, last modified: Sun Sep 16 13:34:51 2001, os:
Unix
bash file -z test.tar.gz
test.tar.gz: GNU tar archive (gzip compressed data, deflated, last modified: Sun Sep 16
13:34:51 2001, os: Unix)
which
which command-xxx 將會給出 "command-xxx" 的完整路徑. 當你想在系統中準確定位一個
特定的命令或工具的時候, 這個命令就非常有用了.
$bash which rm
/usr/bin/rm
whereis
與上邊的 which 很相似, whereis command-xxx 不只會給出 "command-xxx" 的完整路徑,
而且還會給出這個命令的 man 頁的完整路徑.
$bash whereis rm
rm: /bin/rm /usr/share/man/man1/rm.1.bz2
whatis
whatis filexxx 將會在 whatis 數據庫中查詢 "filexxx". 當你想確認系統命令和重要的
配置文件的時候, 這個命令就非常重要了. 可以把這個命令認為是一個簡單的 man 命令.
$bash whatis whatis
whatis (1) - search the whatis database for complete words
vdir
顯示詳細的目錄列表. 與 ls -l 的效果類似.
這是一個 GNU fileutils.
bash$ vdir
total 10
-rw-r--r-- 1 bozo bozo 4034 Jul 18 22:04 data1.xrolo
-rw-r--r-- 1 bozo bozo 4602 May 25 13:58 data1.xrolo.bak
-rw-r--r-- 1 bozo bozo 877 Dec 17 2000 employment.xrolo
bash ls -l
total 10
-rw-r--r-- 1 bozo bozo 4034 Jul 18 22:04 data1.xrolo
-rw-r--r-- 1 bozo bozo 4602 May 25 13:58 data1.xrolo.bak
-rw-r--r-- 1 bozo bozo 877 Dec 17 2000 employment.xrolo
locate, slocate
locate 命令將會在預先建立好的檔案數據庫中查詢文件. slocate 命令是 locate 的安全
版本( locate 命令可能已經被關聯到 slocate 命令上了).
$bash locate hickson
/usr/lib/xephem/catalogs/hickson.edb
readlink
顯示符號連接所指向的文件.
strings
使用 strings 命令在二進制或數據文件中找出可打印字符. 它將在目標文件中列出所有找
到的可打印字符的序列. 這個命令對于想進行快速查找一個 n 個字符的打印檢查來說是很
方便的,也可以用來檢查一個未知格式的圖片文件 (strings image-file | more 可能會搜
索出像 JFIF 這樣的字符串, 那么這就意味著這個文件是一個 jpeg 格式的圖片文件).
在腳本中, 你可能會使用 grep 或 sed 命令來分析 strings 命令的輸出.
比較命令
diff, patch
diff: 一個非常靈活的文件比較工具. 這個工具將會以一行接一行的形式來比較目標文件.
在某些應用中, 比如說比較單詞詞典, 在通過管道將結果傳遞給 diff 命令之前, 使用諸
如 sort 和 uniq 命令來對文件進行過濾將是非常有用的.diff file-1 file-2 將會輸出
2個文件不同的行,并會通過符號標識出每個不同行所屬的文件.
diff 命令的 --side-by-side 選項將會把2 個比較中的文件全部輸出, 按照左右分隔的形
式, 并會把不同的行標記出來. -c 和 -u 選項也會使得 diff 命令的輸出變得容易解釋
一些.
還有一些 diff 命令的變種, 比如 sdiff, wdiff, xdiff, 和 mgdiff.
注意: 如果比較的兩個文件是完全一樣的話, 那么 diff 命令會返回 0 作為退出碼, 如果
不同的話就返回 1 作為退出碼. 這樣 diff 命令就可以用在 shell 腳本的測試結構
中了. (見下邊)
diff 命令的一個重要用法就是產生區別文件, 這個文件將用作 patch 命令的 -e 選項的
參數, -e 選項接受 ed 或 ex 腳本.
patch: 靈活的版本工具.給出一個用 diff 命令產生的區別文件, patch 命令可以將一個
老版本的包更新為一個新版本的包. 因為你發布一個小的區別文件遠比重新發布一個大的
軟件包來的容易得多.對于頻繁更新的 Linux 內核來說, 使用補丁包的形式來發布將是一
種很好的方法.
patch -p1 <patch-file
# 在'patch-file'中取得所有的修改列表
# 然后把它們應用于其中索引到的文件上.
# 那么這個包就被更新為新版本了.
diff3
一個 diff 命令的擴展版本, 可以同時比較3 個文件. 如果成功執行那么這個命令就返回0,
但是不幸的是這個命令不給出比較結果的信息.
sdiff
比較 和/或編輯 2 個文件, 將它們合并到一個輸出文件中. 因為這個命令的交互特性, 所
以在腳本中很少使用這個命令.
cmp
cmp 命令是上邊 diff 命令的一個簡單版本. diff 命令會報告兩個文件的不同之處, 而
cmp 命令僅僅指出那些位置有不同, 而不會顯示不同的具體細節.
comm
多功能的文件比較工具. 使用這個命令之前必須先排序.
comm -options first-file second-file
comm file-1 file-2 將會輸出3 列:
basename
從文件名中去掉路徑信息, 只打印出文件名. 結構 basename $0 可以讓腳本知道它自己的
名字, 也就是, 它被調用的名字. 可以用來顯示用法信息, 比如如果你調用腳本的時候缺
少參數, 可以使用如下語句:
echo "Usage: `basename $0` arg1 arg2 ... argn"
dirname
從帶路徑的文件名中去掉文件名, 只打印出路徑信息.
注意: basename 和 dirname 可以操作任意字符串. 
split, csplit
將一個文件分割為幾個小段的工具. 這些命令通常用來將大的文件分割, 并備份到軟盤上,
或者是為了切成合適的尺寸用 email 上傳.
csplit 根據上下文 來切割文件, 切割的位置將會發生在模式匹配的地方.
sum, cksum, md5sum, sha1sum
這些都是用來產生 checksum 的工具. checksum 的目的是用來檢驗文件的完整性, 是對文
件的內容進行數學計算而得到的. 出于安全目的一個腳本可能會有一個 checksum 列表,
這樣可以確保關鍵系統文件的內容不會被修改或損壞. 對于需要安全性的應用來說, 應該
使用 md5sum (message digest 5 checksum) 命令, 或者更好的更新的 sha1sum
(安全 Hash 算法).
shred
用隨機字符填充文件, 使得文件無法恢復, 這樣就可以保證文件安全的被刪除. 這個命令
的效果與 Example 12-55 一樣, 但是使用這個命令是一種更優雅更徹底的方法.
這是一個 GNU fileutils.
注意: 即使使用了 shred 命令, 高級的(forensic)辯論技術還是能夠恢復文件的內容.
編碼和解碼
uuencode
這個工具用來把二進制文件編碼成 ASCII 字符串,這個工具適用于編碼e-mail 消息體,或者
新聞組消息.
uudecode
這個工具用來把 uuencode 后的 ASCII 字符串恢復為二進制文件.
crypt
這個工具曾經是標準的 UNIX 文件加密工具. [3] 政府由于政策上的動機規定禁止加密軟
件的輸出, 這樣導致了 crypt 命令從 UNIX 世界消失, 并且在大多數的 Linux 發行版中
也沒有這個命令. 幸運的是, 程序員們想出了一些替代它的方法, 在這些方法中有作者自
己的 cruft (參見 Example A-4).
一些雜項工具
mktemp
使用一個"唯一"的文件名來創建一個臨時文件 [4] . 如果不帶參數的在命令行下調用
這個命令時, 將會在 /tmp 目錄下產生一個零長度的文件.
make
build 和 compile 二進制包的工具. 當源文件被增加或修改時就會觸發一些操作, 這個工
具用來控制這些操作.
make 命令將會檢查 Makefile, makefile 是文件的依賴和操作列表.
install
特殊目的的文件拷貝命令, 與 cp 命令相似, 但是具有設置拷貝文件的權限和屬性的能力.
這個命令看起來是為了安裝軟件包所定制的, 而且就其本身而言, 這個命令經常出現在
Makefile 中(在 make install : 區中). 在安裝腳本中也會看到這個命令的使用.
dos2unix
這個工具是由 Benjamin Lin 和其同事編寫的, 目的是將 DOS 格式的文本文件
(以 CR-LF 為行結束符) 轉換為 UNIX 格式 (以 LF 為行結束符), 反過來也一樣.
ptx
ptx [targetfile] 命令將會輸出目標文件的序列改變的索引(交叉引用列表). 如果必要的
話, 這個命令可以在管道中進行更深層次的過濾和格式化.
more, less
分頁顯示文本文件或 stdout, 一次一屏.可以用來過濾 stdout 的輸出 . . . 或一個腳本
的輸出.
more 命令的一個有趣的應用就是測試一個命令序列的執行, 來避免可能發生的糟糕的
結果.
通訊命令
-------------
下邊命令中的某幾個命令你會在 "追蹤垃圾郵件" 練習中找到其用法, 用來進行網絡數
據的轉換和分析.
信息與統計
host
通過名字或 IP 地址來搜索一個互聯網主機的信息, 使用 DNS.
bash$ host surfacemail.com
surfacemail.com. has address 202.92.42.236
ipcalc
顯示一個主機 IP 信息. 使用 -h 選項, ipcalc 將會做一個 DNS 的反向查詢, 通過 IP
地址找到主機(服務器)名.
bash$ ipcalc -h 202.92.42.236
HOSTNAME=surfacemail.com
nslookup
通過 IP 地址在一個主機上做一個互聯網的 "名字服務查詢". 事實上這與 ipcalc -h 或
dig -x 等價. 這個命令既可以交互運行也可以非交互運行, 換句話說, 就是在腳本中運
行.
nslookup 命令據說已經慢慢被"忽視"了, 但是它還是有它的用處.
bash$ nslookup -sil 66.97.104.180
nslookup kuhleersparnis.ch
Server: 135.116.137.2
Address: 135.116.137.2#53
Non-authoritative answer:
Name: kuhleersparnis.ch
dig
域信息查詢. 與 nslookup 很相似, dig 在一個主機上做一個互聯網的 "名字服務查詢".
這個命令既可以交互運行也可以非交互運行, 換句話說, 就是在腳本中運行.
下邊是一些 dig 命令有趣的選項, +time=N 選項用來設置查詢超時為 N 秒, +nofail
選項用來持續查詢服務器直到收到一個響應, -x 選項會做反向地址查詢.
比較下邊這 3 個命令的輸出, dig -x , ipcalc -h 和 nslookup.
traceroute
跟蹤包發送到遠端主機過程中的路由信息. 這個命令在 LAN, WAN, 或者在 Internet 上都
可以正常工作. 遠端主機可以通過 IP 地址來指定. 這個命令的輸出也可以通過管道中的
grep 或 sed 命令來過濾.
bash$ traceroute 81.9.6.2
traceroute to 81.9.6.2 (81.9.6.2), 30 hops max, 38 byte packets
ping
廣播一個 "ICMP ECHO_REQUEST" 包到其他主機上, 既可以是本地網絡也可以使遠端網絡.
這是一個測試網絡連接的診斷工具, 應該小心使用.
一個成功的 ping 返回的退出碼 為 0. 可以用在腳本的測試語句中.
bash$ ping localhost
whois
執行 DNS (域名系統) 查詢lookup. -h 選項允許指定需要查詢的特定的 whois 服務器.
參見 Example 4-6 和 Example 12-36.
finger
取得網絡上的用戶信息. 另外這個命令可以顯示一個用戶的~/.plan, ~/.project, 和
~/.forward 文件, 如果存在的話.
chfn
修改 finger 命令所顯示出來的用戶信息.
vrfy
驗證一個互聯網的 e-mail 地址.
遠端主機接入
sx, rx
sx 和 rx 命令使用 xmodem 協議, 設置服務來向遠端主機傳輸文件和接收文件. 這些都
是通訊安裝包的一般部分, 比如 minicom.
sz, rz
sz 和 rz 命令使用 zmodem 協議, 設置服務來向遠端主機傳輸文件和接收文件. zmodem
協議在某些方面比 xmodem 強, 比如使用更快的的傳輸波特率, 并且可以對中斷的文件進
行續傳.與 sx 一樣 rx, 這些都是通訊安裝包的一般部分.
ftp
向遠端服務器上傳或下載的工具和協議. 一個ftp 會話可以寫到腳本中自動運行. (見
Example 17-6, Example A-4, 和 Example A-13).
uucp, uux, cu
uucp: UNIX 到 UNIX 拷貝. 這是一個通訊安裝包, 目的是為了在 UNIX 服務器之間傳輸
文件. 使用 shell 腳本來處理 uucp 命令序列是一種有效的方法.
因為互聯網和電子郵件的出現, uucp 現在看起來已經很落伍了, 但是這個命令在互聯網
連接不可用或者不適合使用的地方, 這個命令還是可以完美的運行. uucp 的優點就是它
的容錯性, 即使有一個服務將拷貝操作中斷了, 那么當連接恢復的時候, 這個命令還是
可以在中斷的地方續傳.
telnet
連接遠端主機的工具和協議.
注意:telnet 協議本身包含安全漏洞, 因此我們應該適當的避免使用.
wget
wget 工具使用非交互的形式從 web 或 ftp 站點上取得或下載文件. 在腳本中使用正好.
wget -p http://www.xyz23.com/file01.html
# The -p or --page-requisite 選項將會使得 wget 取得顯示指定頁時
#+ 所需要的所有文件.(譯者: 比如內嵌圖片和樣式表等).
5 wget -r ftp://ftp.xyz24.net/~bozo/project_files/ -O $SAVEFILE
# -r 選項將會遞歸的從指定站點
#+ 上下載所有連接.
lynx
lynx 是一個網頁瀏覽器, 也是一個文件瀏覽器. 它可以(通過使用 -dump 選項)在腳本中
使用. 它的作用是可以從 Web 或 ftp 站點上非交互的獲得文件.
lynx -dump http://www.xyz23.com/file01.html >$SAVEFILE
使用 -traversal 選項, lynx 將從參數中指定的 HTTP URL 開始, 遍歷指定服務器上的
所有鏈接. 如果與 -crawl 選項一起用的話, 將會把每個輸出的頁面文本都放到一個 log
文件中.
rlogin
遠端登陸, 在遠端的主機上開啟一個會話. 這個命令存在安全隱患, 所以要使用 ssh 來
代替.
rsh
遠端 shell, 在遠端的主機上執行命令. 這個命令存在安全隱患, 所以要使用 ssh 來代
替.
rcp
遠端拷貝, 在網絡上的不同主機間拷貝文件.
rsync
遠端同步, 在網絡上的不同主機間(同步)更新文件.
bash$ rsync -a ~/sourcedir/*txt /node1/subdirectory/
ssh
安全 shell, 登陸遠端主機并在其上運行命令. 這個工具具有身份認證和加密的功能, 可
以安全的替換 telnet, rlogin, rcp, 和 rsh 等工具. 參見 man 頁來獲取詳細信息.
scp
安全拷貝, 在功能上與 rcp 很相似, 就是在2 個不同的網絡主機之間拷貝文件, 但是要通
過鑒權的方式, 并且使用與 ssh 類似的安全層.
Local Network
write
這是一個端到端通訊的工具. 這個工具可以從你的終端上(console 或者 xterm)發送整行
到另一個用戶的終端上. mesg 命令當然也可以用來對于一個終端的寫權限
因為 write 是需要交互的, 所以這個命令通常不使用在腳本中.
netconfig
用來配置網絡適配器(使用 DHCP)的命令行工具. 這個命令對于紅帽發行版來說是內置的.
Mail
mail
發送或讀取 e-mail 消息.
如果把這個命令行的 mail 客戶端當成一個腳本中的命令來使用的話, 效果非常好.
mailto
與 mail 命令很相似, mailto 命令可以使用命令行或在腳本中發送 e-mail 消息. 然而,
mailto 命令也允許發送 MIME (多媒體) 消息.
vacation
這個工具可以自動回復 e-mail 給發送者, 表示郵件的接受者正在度假暫時無法收到郵件.
這個工具與 sendmail 一起運行于網絡上, 并且這個工具不支持撥號的 POPmail 帳號.
終端控制命令
-----------------
tput
初始化終端或者從 terminfo data 中取得終端信息. 不同的選項允許特定的終端操作.
tput clear 與下邊的 clear 等價. tput reset 與下邊的 reset 等價. tput sgr0 也可
以重置終端, 但是并不清除屏幕.
infocmp
這個命令會打印出大量的當前終端的信息. 事實上它是引用了 terminfo 數據庫.
reset
重置終端參數并且清除屏幕. 與 clear 命令一樣, 光標和提示符將會重新出現在終端的
左上角.
clear
clear 命令只不過是簡單的清除控制臺或者 xterm 的屏幕. 光標和提示符將會重新出現
在屏幕或者 xterm window 的左上角. 這個命令既可以用在命令行中也可以用在腳本中.
參見 Example 10-25.
script
這個工具將會記錄(保存到一個文件中)所有的用戶在控制臺下的或在 xterm window 下的
按鍵信息. 這其實就是創建了一個會話記錄.
數學計算命令

factor
將一個正數分解為多個素數.
bc
Bash 不能處理浮點運算, 并且缺乏特定的一些操作,這些操作都是一些重要的計算功能.
幸運的是, bc 可以解決這個問題.
bc 不僅僅是個多功能靈活的精確的工具, 而且它還提供許多編程語言才具備的一些方便
的功能.
混雜命令
-------------
一些不好歸類的命令
jot, seq
這些工具通過用戶指定的范圍和增量來產生一系列的整數.
每個產生出來的整數一般都占一行, 但是可以使用 -s 選項來改變這種設置.
bash$ seq 5
getopt
getopt 命令將會分析以破折號開頭的命令行選項. 這個外部命令與Bash 的內建命令
getopts 作用相同. 通過使用 -l 標志, getopt 可以處理長(多字符)選項, 并且也允許參
數重置.
run-parts
run-parts 命令 [1] 將會執行目標目錄中所有的腳本, 這些將本會以 ASCII 的循序進行
排列. 當然, 這些腳本都需要具有可執行權限.
cron 幽靈進程會調用 run-parts 來運行 /etc/cron.* 下的所有腳本.
yes
yes 命令的默認行為是向 stdout 中連續不斷的輸出字符 y,每個y 占一行.使用control-c
來結束運行. 如果想換一個輸出字符的話, 可以使用 yes 其他的字符串, 這樣就會連續
不同的輸出你指定的字符串. 那么這樣的命令究竟能做什么呢? 在命令行或者腳本中,
yes 的輸出可以通過重定向或管道來傳遞給一些需要用戶輸入進行交互的命令. 事實上,
這個命令可以說是 expect 命令(譯者注: 這個命令本書未介紹, 一個自動實現交互的命
令)的一個簡化版本.
yes | fsck /dev/hda1 將會以非交互的形式運行fsck(因為需要用戶輸入的 y 全由yes
命令搞定了)(小心使用!).
yes | rm -r dirname 與 rm -rf dirname 效果相同(小心使用!).
注意: 當用 yes 的管道形式來使用一些可能具有潛在危險的系統命令的時候一定要深思
熟慮, 比如 fsck 或 fdisk. 可能會產生一些意外的副作用.
banner
將會把字符串用一個 ASCII 字符(默認是 '#')來畫出來(就是將多個'#'拼出一副字符的
圖形).可以作為硬拷貝重定向到打印機上(譯者注: 可以使用-w 選項設置寬度).
printenv
對于某個特定的用戶, 顯示出所有的環境變量.
bash$ printenv | grep HOME
HOME=/home/bozo
lp
lp 和 lpr 命令將會把文件發送到打印隊列中, 并且作為硬拷貝來打印. [2] 這些命令
會紀錄它們名字的起始位置并傳遞到行打印機的另一個位置.<rojy bug>
bash$ lp file1.txt 或者 bash lp <file1.txt
通常情況下都是將 pr 的格式化的輸出傳遞到 lp
tee
[UNIX 從管道行業借來的主意.]
這是一個重定向操作, 但是有些不同. 就像管道中的"三通"一樣, 這個命令可以將命令或
者管道命令的輸出抽出到一個文件中,而且并不影響結果. 當你想將一個正在運行的進程
的輸出保存到文件中時, 或者為了debug 而保存輸出記錄的時候, 這個命令就非常有用了.
(重定向)
|----> to file
|
==========================|====================
command ---> command ---> |tee ---> command ---> ---> output of pipe
===============================================
cat listfile* | sort | tee check.file | uniq > result.file
(在對排序的結果進行 uniq (去掉重復行) 之前,文件 check.file 中保存了排過序的
"listfiles".)
mkfifo
這個不大引人注意的命令可以創建一個命名管道, 并產生一個臨時的先進先出的buffer
用來在兩個進程間傳輸數據. [3] 典型的使用是一個進程向FIFO 中寫數據, 另一個進程讀
出來. 參見 Example A-15.
pathchk
這個命令用來檢查文件名的有效性. 如果文件名超過了最大允許長度(255 個字符), 或者
它所在的一個或多個路徑搜索不到, 那么就會產生一個錯誤結果.
不幸的是,并不能夠返回一個可識別的錯誤碼, 因此它在腳本中幾乎沒有什么用. 一般都
使用文件測試操作.
dd
這也是一個不太出名的工具, 但卻是一個令人恐懼的 "數據復制" 命令. 最開始, 這個命
令是被用來在 UNIX 微機和IBM 大型機之間通過磁帶來交換數據, 這個命令現在仍然有它的
用途. dd 命令只不過是簡單的拷貝一個文件 (或者 stdin/stdout), 但是它會做一些轉
換. 下邊是一些可能的轉換, 比如 ASCII/EBCDIC, [4] 大寫/小寫, 在輸入和輸出之間
的字節對的交換, 還有對輸入文件做一些截頭去尾的工作. dd --help 列出了所有轉換,
還有這個強力工具的一些其他選項.
od
od(octal dump)過濾器, 將會把輸入(或文件)轉換為8 進制或者其他進制. 在你需要查看
或處理一些二進制數據文件或者一個不可讀的系統設備文件的時候, 這個命令非常有用,
比如/dev/urandom,或者是一個二進制數據過濾器. 參見 Example 9-28 和
Example 12-13.
hexdump
對二進制文件進行 16 進制, 8 進制, 10 進制, 或者 ASCII 碼的查閱動作. 這個命令大體
上與上邊的 od 命令作用相同, 但是遠不及 od 命令有用.
objdump
顯示編譯后的 2 進制文件或2 進制可執行文件的信息, 以16 進制的形式顯示, 或者顯示反匯
編列表(使用-d 選項).
mcookie
這個命令會產生一個"magic cookie", 這是一個128-bit (32-字符) 的偽隨機16 進制數字,
這個數字一般都用來作為 X server 的鑒權"簽名". 這個命令還可以用來在腳本中作為一
種生成隨機數的手段, 當然這是一種"小吃店"(雖然不太正統, 但是很方便)的風格.
random000=$(mcookie)
units
這個工具用來在不同的計量單位之間互相轉換. 當你在交互模式下正常調用時, 會發現在
腳本中 units 也很有用.
m4
一個隱藏的財寶, m4 是一個強力的宏處理過濾器, [5] 差不多可以說是一種語言了. 雖
然最開始這個工具是用來作為 RatFor 的預處理器而編寫的, 但是后來證明 m4 作為獨
立的工具也是非常有用的. 事實上, m4 結合了許多工具的功能, 比如 eval, tr, 和 awk,
除此之外, 它還使得宏擴展變得容易.
doexec
doexec 命令允許將一個隨便的參數列表傳遞到一個二進制可執行文件中. 特別的, 甚至
可以傳遞 arg[0] (相當于腳本中的 $0 ), 這樣可以使用不同的名字來調用這個可執行
文件, 并且通過不同的調用的名字, 可以讓這個可執行文件執行不同的動作. 這也可以
說是一種將參數傳遞到可執行文件中的比較繞圈子的做法.
dialog
dialog 工具集提供了一種從腳本中調用交互對話框的方法.
sox
sox 命令, "sound exchange" (聲音轉換)命令, 可以進行聲音文件的轉換. 事實上,可執
行文件 /usr/bin/play (現在不建議使用) 只不過是 sox 的一個 shell 包裝器而已.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Ubuntu 14.04 下安裝nginx 介紹: Nginx是一款輕量級的Web 服務器/反向代理服務器及電...
    guoguo22閱讀 235評論 0 0
  • 前些日子從@張鑫旭微博處得一份推薦(Front-end-tutorial),號稱最全的資源教程-前端涉及的所有知識...
    谷子多閱讀 4,286評論 0 44
  • 在 Ubuntu 14.04 下安裝 mysql 5.7.20 mysql官網:http://dev.mysql....
    guoguo22閱讀 406評論 0 0
  • 黑黑的天 亮著的是星 今晚月亮失蹤 但引人注目的 是夜航的飛機 月亮缺勤 星星從未擔心 陪伴它的飛機 緩緩遠去 沒...
    烏鴉吃蛋糕閱讀 119評論 4 3
  • 去年這個時候,我開始在鞏義海上橋借山而居,原打算花些功夫,好好把院落打理一番,種上些花草,再搭個葡萄架,躲在那里過...
    海月先生閱讀 1,770評論 8 9