Linux Shell 裡一些很少用到卻很有用的指令(轉)
Linux Shell 裡一些很少用到卻很有用的指令(轉)[@more@] 有個叫 80/20 法則的觀念可以聯想到軟體系統上,觀查發現, 80% 的使用者族群,固定會去使用的只有 20% 的系統功能。不需要去大費周章的證實這樣的統計值,我二十年以上建立軟體架構及使用軟體系統的經驗告訴我,這樣的假定,極有可能是正確的。一堆的 Linux 命令列程式皆無一例外於這樣的普遍現象。 Linux 提供許多 Shell 層級的命令,可能只有十個能普遍被瞭解並使用之,而剩下的極大部份,幾乎是被忽略的。
這些在 Linux Shell 裡不起眼的小東西有哪些是具有被提出來討論的價值的呢? 我在這將簡短的介紹幾個不常用,但卻相當好用的 Linux Shell 命令,這些程式是我用了好幾年,經得起時間考驗的。特別是,我選擇將重點放在語法解析及格式化文字內容的命令上。
在這些例子裡,我假定大家對命令列的語法有基本的熟悉度,並具簡單的 Shell 概念還有一些並不是那麼普遍的Linux命令。即使如此,命令列的範例仍附上適當的批註而且它是很直接的。在每一個應用上,各個命令列的執行底下都會有一個使用範例給大家看。
下列便是這些語法、格式及文字內容的展現,雖然並非每個範例皆提供具體的說明,不過必須知道的一點是,下列命令若是沒有指定檔案引數,則它會讀取標準輸入。
Head/Tail
head 與 tail 就像它的名字一樣的淺顯易懂,它是用來顯示開頭或結尾某個數量的文字區塊,head 用來顯示檔案的開頭至標準輸出中,而 tail 想當然爾就是看檔案的結尾囉~,看看下面的範例:
## (1) displays the first 6 lines of a file
head -6 readme.txt
## (2) displays the last 25 lines of a file
tail -25 mail.txt
範例一是顯示檔案的前 6 行,範例二則是顯示檔案最後的 25 行。
而下面的範別,結合了 head 與 tail 的指令,顯示檔案的第 11 行到第 20 行:
# (3)
head -20 file | tail -10
在 tail 的使用手冊頁中顯示了比 head 還多的可用引數,其中有一個很好用的引數 " -f ",使用此引數時,tail 不會回傳結束訊號,除非我們去自行去中斷它;相反的,它會一直等待一段時間,一直到他發現資料自它最後一次被讀取後,又被加入新的一行時:
## (4) display ongoing updates to the given
## log file
tail -f /usr/tmp/logs/daemon_log.txt
上述範例可以動態顯示該 log 檔案的動態更新。
假設該服務程式是一直不斷的加入動態資料到 /usr/adm/logs/daemon_log.txt 的 log 檔案裡,在命令列控制視窗中使用 tail -f,它將會以一定的時間實時追蹤該檔的所有更新。 ( -f 的只有在其輸入為檔案時才能使用 )。
假如你在 tail 後下了多個檔案引數,你便能在同一個視窗內一次追蹤數個 log 檔:
## track the mail log and the server error log
## at the same time.
tail -f /var/log/mail.log /var/log/apache/error_log
tac -- 反過來串連?!
cat 倒過來怎麼拼 ? 對啦 !! 這就是 tac 的功能囉 ~ 它是把檔案的順序內容反過來串連用的,那麼 ~ 它都用在什麼狀況下呢 ? 任何須要以後進先出的順序重新排列元件的工作都用得上它 ! 以下面的指令來說,便是以自最後建立的到最先建立的順序,列出三個最新建的使用者帳號:
# (5) last 3 /etc/passwd records - in reverse
$ tail -3 /etc/passwd | tac
curly:x:1003:100:3rd Stooge:/homes/curly:/bin/ksh
larry:x:1002:100:2nd Stooge:/homes/larry:/bin/ksh
moe:x:1001:100:1st Stooge:/homes/moe:/bin/ksh
nl -- 為輸出列加上編號
nl 是一個簡單但很好用的編號過濾工具,我在輸入的地方下了引數,讓所有行列的編碼皆靠左,nl 是供了非常多的引數使用,可以定義到很細很細的程式來制定它下好編號的輸出,下面是一些引數使用的範例說明:
# (6) Display the first 4 entries of the password
# file - numbers to be three columns wide and
# padded by zeros.
$ head -4 /etc/passwd | nl -nrz -w3
001 root:x:0:1:Super-User:/:/bin/ksh
002 daemon:x:1:1::/:
003 bin:x:2:2::/usr/bin:
004 sys:x:3:3::/:
#
# (7) Prepend ordered line numbers followed by an
# ’=’ sign to each line -- start at 101.
$ nl -s= -v101 Data.txt
101=1st Line ...
102=2nd Line ...
103=3rd Line ...
104=4th Line ...
105=5th Line ...
.......
fmt -- 格式化
fmt 是一個簡單的文字格式化工具,它重點是在讓文字的資料與最大所能支援的寬度一致,它是利用結合及截斷行列的空白所完成的。前提是你需要維護的是一個由文書處理器所產生的文字內容,它所輸出的文字可能含括了各種不同長度的行列,若這樣的文字是由文字編輯器 ( 像是 vi ) 作的,fmt 便能夠將此原始文字轉化成更好維護的格式。下面的第一個例子,顯示的是下 fmt 指令來重新制作檔案格式,讓它一行不要超過 80 個字元:
# (8) No more than 60 char lines
$ fmt -w 60 README.txt > NEW_README.txt
#
# (9) Force uniform spacing:
# 1 space between words, 2 between sentences
$ echo "Hello World. Hello Universe." |
fmt -u -w80
Hello World. Hello Universe.
fold -- 將輸入分段
fold 跟 fmt 很像,但他通常是用來格式化與非增加文字可讀性的資料,下面有個簡單的例子:
# (10) Format text in 3 column width lines
$ echo oxoxoxoxo | fold -w3
oxo
xox
oxo
# (11) Parse by triplet-char strings -
# search for ’xox’
$ echo oxoxoxoxo | fold -w3 | grep "xox"
xox
# (12) One way to iterate through a string of chars
$ for i in $(echo 12345 | fold -w1)
> do
> ### perform some task ...
> print $i
> done
1
2
3
4
5
tr
tr 為一個簡單的字組轉換器,它的實際應用與一些較複雜的程式有點重複,像是 sed 和 awk [ 更大型的二進位制程式程式碼 ]。tr 在文字的置換、刪從及增加上很好用。它的指令模式是 " 從 ( 放在第一個引數 ) …到 ( 第二個引數 )… " 的模式;下面為它一般的使用語法:
# (13) tr usage
tr [options] "set1" ["set2"]
這些在 Linux Shell 裡不起眼的小東西有哪些是具有被提出來討論的價值的呢? 我在這將簡短的介紹幾個不常用,但卻相當好用的 Linux Shell 命令,這些程式是我用了好幾年,經得起時間考驗的。特別是,我選擇將重點放在語法解析及格式化文字內容的命令上。
在這些例子裡,我假定大家對命令列的語法有基本的熟悉度,並具簡單的 Shell 概念還有一些並不是那麼普遍的Linux命令。即使如此,命令列的範例仍附上適當的批註而且它是很直接的。在每一個應用上,各個命令列的執行底下都會有一個使用範例給大家看。
下列便是這些語法、格式及文字內容的展現,雖然並非每個範例皆提供具體的說明,不過必須知道的一點是,下列命令若是沒有指定檔案引數,則它會讀取標準輸入。
Head/Tail
head 與 tail 就像它的名字一樣的淺顯易懂,它是用來顯示開頭或結尾某個數量的文字區塊,head 用來顯示檔案的開頭至標準輸出中,而 tail 想當然爾就是看檔案的結尾囉~,看看下面的範例:
## (1) displays the first 6 lines of a file
head -6 readme.txt
## (2) displays the last 25 lines of a file
tail -25 mail.txt
範例一是顯示檔案的前 6 行,範例二則是顯示檔案最後的 25 行。
而下面的範別,結合了 head 與 tail 的指令,顯示檔案的第 11 行到第 20 行:
# (3)
head -20 file | tail -10
在 tail 的使用手冊頁中顯示了比 head 還多的可用引數,其中有一個很好用的引數 " -f ",使用此引數時,tail 不會回傳結束訊號,除非我們去自行去中斷它;相反的,它會一直等待一段時間,一直到他發現資料自它最後一次被讀取後,又被加入新的一行時:
## (4) display ongoing updates to the given
## log file
tail -f /usr/tmp/logs/daemon_log.txt
上述範例可以動態顯示該 log 檔案的動態更新。
假設該服務程式是一直不斷的加入動態資料到 /usr/adm/logs/daemon_log.txt 的 log 檔案裡,在命令列控制視窗中使用 tail -f,它將會以一定的時間實時追蹤該檔的所有更新。 ( -f 的只有在其輸入為檔案時才能使用 )。
假如你在 tail 後下了多個檔案引數,你便能在同一個視窗內一次追蹤數個 log 檔:
## track the mail log and the server error log
## at the same time.
tail -f /var/log/mail.log /var/log/apache/error_log
tac -- 反過來串連?!
cat 倒過來怎麼拼 ? 對啦 !! 這就是 tac 的功能囉 ~ 它是把檔案的順序內容反過來串連用的,那麼 ~ 它都用在什麼狀況下呢 ? 任何須要以後進先出的順序重新排列元件的工作都用得上它 ! 以下面的指令來說,便是以自最後建立的到最先建立的順序,列出三個最新建的使用者帳號:
# (5) last 3 /etc/passwd records - in reverse
$ tail -3 /etc/passwd | tac
curly:x:1003:100:3rd Stooge:/homes/curly:/bin/ksh
larry:x:1002:100:2nd Stooge:/homes/larry:/bin/ksh
moe:x:1001:100:1st Stooge:/homes/moe:/bin/ksh
nl -- 為輸出列加上編號
nl 是一個簡單但很好用的編號過濾工具,我在輸入的地方下了引數,讓所有行列的編碼皆靠左,nl 是供了非常多的引數使用,可以定義到很細很細的程式來制定它下好編號的輸出,下面是一些引數使用的範例說明:
# (6) Display the first 4 entries of the password
# file - numbers to be three columns wide and
# padded by zeros.
$ head -4 /etc/passwd | nl -nrz -w3
001 root:x:0:1:Super-User:/:/bin/ksh
002 daemon:x:1:1::/:
003 bin:x:2:2::/usr/bin:
004 sys:x:3:3::/:
#
# (7) Prepend ordered line numbers followed by an
# ’=’ sign to each line -- start at 101.
$ nl -s= -v101 Data.txt
101=1st Line ...
102=2nd Line ...
103=3rd Line ...
104=4th Line ...
105=5th Line ...
.......
fmt -- 格式化
fmt 是一個簡單的文字格式化工具,它重點是在讓文字的資料與最大所能支援的寬度一致,它是利用結合及截斷行列的空白所完成的。前提是你需要維護的是一個由文書處理器所產生的文字內容,它所輸出的文字可能含括了各種不同長度的行列,若這樣的文字是由文字編輯器 ( 像是 vi ) 作的,fmt 便能夠將此原始文字轉化成更好維護的格式。下面的第一個例子,顯示的是下 fmt 指令來重新制作檔案格式,讓它一行不要超過 80 個字元:
# (8) No more than 60 char lines
$ fmt -w 60 README.txt > NEW_README.txt
#
# (9) Force uniform spacing:
# 1 space between words, 2 between sentences
$ echo "Hello World. Hello Universe." |
fmt -u -w80
Hello World. Hello Universe.
fold -- 將輸入分段
fold 跟 fmt 很像,但他通常是用來格式化與非增加文字可讀性的資料,下面有個簡單的例子:
# (10) Format text in 3 column width lines
$ echo oxoxoxoxo | fold -w3
oxo
xox
oxo
# (11) Parse by triplet-char strings -
# search for ’xox’
$ echo oxoxoxoxo | fold -w3 | grep "xox"
xox
# (12) One way to iterate through a string of chars
$ for i in $(echo 12345 | fold -w1)
> do
> ### perform some task ...
> print $i
> done
1
2
3
4
5
tr
tr 為一個簡單的字組轉換器,它的實際應用與一些較複雜的程式有點重複,像是 sed 和 awk [ 更大型的二進位制程式程式碼 ]。tr 在文字的置換、刪從及增加上很好用。它的指令模式是 " 從 ( 放在第一個引數 ) …到 ( 第二個引數 )… " 的模式;下面為它一般的使用語法:
# (13) tr usage
tr [options] "set1" ["set2"]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-947421/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux Shell 指令碼的 10 個有用的“面試問題和解答”Linux指令碼面試
- Linux Shell指令碼的10個有用的“面試問題和解答”Linux指令碼面試
- MySQL的一些功能實用的Linux shell指令碼分享MySqlLinux指令碼
- Linux Shell指令碼Linux指令碼
- linux常用的shell指令碼Linux指令碼
- 最近在 Vue 專案中用到的一些小技巧,或許有用Vue
- 我的無線轉有線linux伺服器用到的指令碼們Linux伺服器指令碼
- linux shell指令碼中 =~ 的作用Linux指令碼
- Linux shell:執行shell指令碼的幾種方式Linux指令碼
- linux中的一些常用指令Linux
- redis裡顯示key大小的shell指令碼Redis指令碼
- Linux 【Shell指令碼經典案例】Linux指令碼
- Linux基礎五(shell指令碼)Linux指令碼
- 【Linux】【Shell】主控指令碼實現Linux指令碼
- 什麼是Shell指令碼?Shell指令碼在Linux運維工作中的地位!指令碼Linux運維
- iPhone錄音轉文字功能,打起字來事半功倍,卻很少有人去使用iPhone
- [轉]寫好shell指令碼的13個技巧指令碼
- Linux必須掌握的shell指令碼基礎Linux指令碼
- Linux命令和shell指令碼學習Linux指令碼
- Linux shell 指令碼基礎介紹Linux指令碼
- Linux Shell指令碼時間排程Linux指令碼
- Linux 使用 shell 指令碼處理字串Linux指令碼字串
- Linux shell程式設計(一)shell指令碼中的變數詳解Linux程式設計指令碼變數
- PJzhang:鳥哥的linux私房菜-shell指令碼-上Linux指令碼
- 一些Linux shell命令 - 持續更新Linux
- 什麼是shell指令碼?Linux為什麼學習shell?指令碼Linux
- 一些有用的Python庫Python
- 一些有用的網站網站
- 一些有用的連結
- shell指令碼linux命令連續執行指令碼Linux
- Linux學習之路(三)Shell指令碼初探Linux指令碼
- 【學習】Linux Shell指令碼程式設計Linux指令碼程式設計
- Linux中執行Shell指令碼的方式(三種方法)Linux指令碼
- Shell指令碼在Linux運維工作中的地位!指令碼Linux運維
- 設定Linux伺服器IP地址的shell指令碼Linux伺服器指令碼
- Linux Shell指令碼程式設計-基礎1Linux指令碼程式設計
- linux shell 指令碼語言教程(超詳細!)Linux指令碼
- linux學習day3——shell指令碼上Linux指令碼
- linux學習day4——shell指令碼中Linux指令碼