zoukankan      html  css  js  c++  java
  • Linux Shell 裡一些很少用到卻很有用的指令

    Linux Shell 裡一些很少用到卻很有用的指令

    Linux Shell 裡一些很少用到卻很有用的指令 
    你是不是已經忘記可以使用命令列來完成工作,還是你從來不知道他可以為你節省許多的時間與煩惱?

    有個叫 80/20 法則的觀念可以聯想到軟體系統上? A觀查發現, 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 是一個簡單但很好用的編號過濾工具,我在輸入的地方下了�担�屗�行辛械木幋a皆靠左,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 指令來重新製作檔案格式,讓它一? 璊ㄜn超過 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"] < input > output

    要注意的是它不接受檔案參數,它是讀取標準輸入然後寫到標準輸出的,在兩個參數都有設定的情況下,tr 會處理 set1 裡頭的字元,然後根據 set2 裡的字元進行替換。


    結論

    這篇文章最主要的是要提醒大家在系統中有很多不引人注意的東西,其實是很好用的。我的目的是要讓大家知道有一些很少用到的功能,並展示這些工具其實是有其使用價值的,或許你會覺得,還不如用 X 還容易些 -- 在你寫一些 script 時,或是被卡在命令列的某個地方時,或許是吧,不過我建議你多去找資料, O'Reilly Linux in a Nutshell的書是一個不錯的參考來源,它編排的很好,可以很快的查到你要的東西,當然我也鼓勵你去查查它的安裝好的手冊 ( 編按:可利用 man 查詢指令用法 ) 還有參考一下相關的資訊頁 ( 編按:可以用 info 指令查詢各個命令的內容 ) ,不過,並不是所有命令列的指令都能查得到。

  • 相关阅读:
    HDU 5835 Danganronpa 贪心
    HDU 5842 Lweb and String 水题
    HDU 5832 A water problem 水题
    Codeforces Beta Round #14 (Div. 2) A. Letter 水题
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem K. UTF-8 Decoder 模拟题
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem I. Alien Rectangles 数学
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem H. Parallel Worlds 计算几何
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem F. Turning Grille 暴力
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem C. Cargo Transportation 暴力
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem G. k-palindrome dp
  • 原文地址:https://www.cnblogs.com/timssd/p/10248722.html
Copyright © 2011-2022 走看看