7、linux命令執行順序控制與管道
cut
,grep
,wc
,sort
命令的使用
管道的理解
簡單的順序執行你可以使用;
來完成,比如上述操作你可以:
sudo apt-get update;sudo apt-get insatll some-tool;some-tool
結合&&
和||
來實現一些操作
$ which cowsay>/dev/null && echo "exist" || echo "not exist"
管道
管道是什麼,管道是一種通訊機制,通常用於程序間的通訊(也可通過socket進行網路通訊),它表現出來的形式就是將前面每一個程序的輸出(stdout)直接作為下一個程序的輸入(stdin)。
管道又分為匿名管道和具名管道(這裡將不會討論在源程式中使用系統呼叫建立並使用管道的情況,它與命令列的管道在核心中實際都是採用相同的機制)。我們在使用一些過濾程式時經常會用到的就是匿名管道,在命令列中由|分隔符表示,|在前面的內容中我們已經多次使用到了。具名管道簡單的說就是有名字的管道,通常只會在源程式中用到具名管道。下面我們就將通過一些常用的可以使用管道的”過濾程式”來幫助你熟練管道的使用。
試用
ls -al /etc | less
cut 命令,列印每一行的某一欄位
列印/etc/passwd
檔案中以:
為分隔符的第1個欄位和第6個欄位分別表示使用者名稱和其家目錄:
cut /etc/passwd -d ':' -f 1,6
# 前五個(包含第五個)
$ cut /etc/passwd -c -5
# 前五個之後的(包含第五個)
$ cut /etc/passwd -c 5-
# 第五個
$ cut /etc/passwd -c 5
# 2到5之間的(包含第五個)
$ cut /etc/passwd -c 2-5
grep命令,在文字中或stdin中查詢匹配字串
grep
命令是很強大的,也是相當常用的一個命令,它結合正則表示式可以實現很複雜卻很高效的匹配和查詢,不過在學習正則表示式之前,這裡介紹它簡單的使用,而關於正則表示式後面將會有單獨一小節介紹到時會再繼續學習grep
命令和其他一些命令。
grep
grep [命令選項]... 用於匹配的表示式 [檔案]...
還是先體驗一下,我們搜尋/home/shiyanlou目錄下所有包含”shiyanlou”的所有文字檔案,並顯示出現在文字中的行號:
$ grep -rnI "shiyanlou" ~
-r
引數表示遞迴搜尋子目錄中的檔案,-n
表示列印匹配項行號,-I
表示忽略二進位制檔案。這個操作實際沒有多大意義,但可以感受到grep
命令的強大與實用。
當然也可以在匹配欄位中使用正則表示式,下面簡單的演示:
# 檢視環境變數中以"yanlou"結尾的字串
$ export | grep ".*yanlou$"
其中$就表示一行的末尾。
wc命令,簡單小巧的計數工具
wc
命令用於統計並輸出一個檔案中行、單詞和位元組的數目,比如輸出/etc/passwd
檔案的統計資訊:
# 行數
$ wc -l /etc/passwd
# 單詞數
$ wc -w /etc/passwd
# 位元組數
$ wc -c /etc/passwd
# 字元數
$ wc -m /etc/passwd
# 最長行位元組數
$ wc -L /etc/passwd
sort排序命令
這個命令前面我們也是用過多次,功能很簡單就是將輸入按照一定方式排序,然後再輸出,它支援的排序有按字典排序,數字排序,按月份排序,隨機排序,反轉排序,指定特定欄位進行排序等等。
預設字典排序:
cat /etc/passwd | sort
反轉排序:
cat /etc/passwd | sort -r
按特定欄位排序:
cat /etc/passwd | sort -t':' -k 3
按特定欄位排序按數字排序:
cat /etc/passwd | sort -t ':' -k 3 -n
uniq去重命令
使用以前介紹過的方法,安裝aview
和imagemagick
,然後用asciiview
命令顯示圖片,使用方法可以用 man
命令檢視。
wget http://labfile.oss.aliyuncs.com/courses/1/Linus.png