1.管道命令的用法
將兩個或者多個命令(程序或者進程)連接到一起,把一個命令的輸出作為下一個命令的輸入,以這種方式連接的兩個或者多個命令就形成了管道(pipe)。管道使用豎線|
連接多個命令,這被稱為管道符。
Linux 管道的具體語法格式如下:
command1 | command2
command1 | command2 [ | commandN... ]
當在兩個命令之間設置管道時,管道符|
左邊命令的輸出就變成了右邊命令的輸入。只要第一個命令向標准輸出寫入,而第二個命令是從標准輸入讀取,那么這兩個命令就可以形成一個管道。
這里需要注意,command1 必須有正確輸出,而 command2 必須可以處理 command1 的輸出結果;而且 command2 只能處理 command1 的正確輸出結果,不能處理 command1 的錯誤信息。
2.使用管道命令的好處:
命令
|
作用
|
---|---|
3條命令來備份數據庫 mysqldump -u root -p '123456' wiki > /tmp/wikidb.backup gzip -9 /tmp/wikidb.backup scp /tmp/wikidb.backup username@remote_ip:/backup/mysql/ |
|
使用管道命令 mysqldump -u root -p '123456' wiki | gzip -9 | ssh username@remote_ip "cat > /backup/wikidb.gz" |
|
3.重定向和管道的區別
乍看起來,管道也有重定向的作用,它也改變了數據輸入輸出的方向,那么,管道和重定向之間到底有什么不同呢?
簡單地說,重定向操作符>將命令與文件連接起來,用文件來接收命令的輸出;而管道符|將命令與命令連接起來,用第二個命令來接收第一個命令的輸出。如下所示:
command > file
command1 | command1
4.Linux管道實例
|
|
輸出
|
---|---|---|
將 ls 命令的輸出發送到 grep 命令,查看文件 log.txt 是否存在於當前目錄下 | ls | grep log.txt |
log.txt |
重定向管道的輸出到一個文件 | ls -al | grep log.txt >output.txt cat output.txt |
-rw-rw-r--. 1 mozhiyan mozhiyan 0 4月 15 17:26 log.txt |
顯示按用戶名排序后的當前登錄系統的用戶的信息 | who | sort |
mozhiyan :0 2019-04-16 12:55 (:0) mozhiyan pts/0 2019-04-16 13:16 (:0) who 命令的輸出將作為 sort 命令的輸入, 所以這兩個命令通過管道連接后會顯示按照用戶名排序的已登錄用戶的信息。 |
5.管道與重定向
1)管道與輸入重定向
輸入重定向操作符<可以在管道中使用,以用來從文件中獲取輸入,其語法類似下面這樣:
command1 < input.txt | command2
command1 < input.txt | command2 -option | command3
功能
|
命令
|
輸出
|
---|---|---|
使用 tr 命令從 os.txt 文件中獲取輸入,然后通過管道將輸出發送給 sort 或 uniq 等命令 | cat os.txt
tr a-z A-Z <os.txt | sort |
|
2)管道與輸出重定向
你也可以使用重定向操作符>或>>將管道中的最后一個命令的標准輸出進行重定向,其語法如下所示:
command1 | command2 | ... | commandN > output.txt
command1 < input.txt | command2 | ... | commandN > output.txt
功能
|
命令
|
輸出
|
---|---|---|
使用 tr 命令將 os.txt 文件中的內容轉化為大寫,並使用 sort 命令將內容排序, 使用 uniq 命令去除重復的行,最后將輸出重定向到文件 ox.txt.new。 |
cat os.txt
tr a-z A-Z <os.txt | sort|uniq>os.txt.new cat os.txt.new |
|
6.過濾器
過濾器可以概括為兩點:
- 如果一個 Linux 命令是從標准輸入接收它的輸入數據,並在標准輸出上產生它的輸出數據(結果),那么這個命令就被稱為過濾器。
- 過濾器通常與 Linux 管道一起使用。
常用的被作為過濾器使用的命令如下所示:
命令
|
說明
|
---|---|
awk | 用於文本處理的解釋性程序設計語言,通常被作為數據提取和報告的工具。 |
cut | 用於將每個輸入文件(如果沒有指定文件則為標准輸入)的每行的指定部分輸出到標准輸出。 |
grep | 用於搜索一個或多個文件中匹配指定模式的行。 |
tar | 用於歸檔文件的應用程序。 |
head | 用於讀取文件的開頭部分(默認是 10 行)。如果沒有指定文件,則從標准輸入讀取。 |
paste | 用於合並文件的行。 |
sed | 用於過濾和轉換文本的流編輯器。 |
sort | 用於對文本文件的行進行排序。 |
split | 用於將文件分割成塊。 |
strings | 用於打印文件中可打印的字符串。 |
tac | 與 cat 命令的功能相反,用於倒序地顯示文件或連接文件。 |
tail | 用於顯示文件的結尾部分。 |
tee | 用於從標准輸入讀取內容並寫入到標准輸出和文件。 |
tr | 用於轉換或刪除字符。 |
uniq | 用於報告或忽略重復的行。 |
wc | 用於打印文件中的總行數、單詞數或字節數。 |
7.過濾器舉栗
|
功能
|
命令
|
輸出
|
知識點
|
---|---|---|---|---|
|
功能
|
命令
|
輸出
|
知識點
|
awk與管道結合 | 查看系統中的所有的賬號名稱,並按名稱的字母順序排序 | awk -F: '{print $1}' /etc/passwd | sort|head -5 |
|
-F: 以:作為分隔符,默認分隔符是空格 '{print $1}'打印第一列信息 |
列出當前賬號最常使用的 5個命令 | history | awk '{print $2}' | sort | uniq -c | sort -rn | head -5
|
|
uniq -c 在每列旁邊顯示該行重復出現的次數。 sort -rn 按照數值的大小反向排序 |
|
顯示當前系統的總內存大小,單位為 KB | free | grep Mem | awk '{print $2}' |
2029860 |
free命令可以顯示Linux系統中空閑的、已用的物理內存及swap內存,及被內核使用的buffer | |
cut 與管道命令結合 | 查看系統中登錄 Shell 是/bin/bash的用戶名和對應的用戶主目錄的信息 | grep "bin/bash" /etc/passwd|cut -d : -f1,6
|
root:/root roaddb:/home/roaddb asample:/home/asample |
/ctc/passwd 文件用來存放用戶賬號的信息,文件中的每一行會記錄一個賬號的信息,每個字段之間用冒號分隔,第一個字段即是賬號的賬戶名,第六個字段就是賬號的主目錄的路徑。
|
查看當前機器的CPU類型 | cat /proc/cpuinfo |grep name|cut -d : -f 2|uniq |
Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz | ||
查看當前目錄下的子目錄數 | ls -l|cut -c 1|grep d|wc -l |
4 | 命令cut -c 1 是截取每行的第一個字符 |
|
grep命令 | 查看系統日志文件中的錯誤信息 | grep -i "error:" /var/log/messages | less |
grep -iv [指定字條串] [文件] 在文件中搜索字符串匹配的行並輸出 |
|
查看系統中 HTTP 服務的進程信息 | ps aux | grep httpd |
|||
查找我們的程序列表中所有命令名中包含關鍵字 zip 的命令 | ls /bin /usr/bin | sort | uniq | grep zip |
|
||
查找 /etc 目錄下所有包含 IP 地址的文件 | find /etc -type f -exec grep '[0-9][0-9]*[.][0-9][0-9]*[.][0-9][0-9]*[.][0-9][0-9]*' {} \; |
|||
tar命令 | 復制一個目錄的整體結構 | tar cf - /home/mozhiyan | ( cd /backup/; tar xf - ) |
||
跨網絡地復制一個目錄的整體結構 | tar cf - /home/mozhiyan | ssh remote_host "( cd /backup/; tar xf - )" |
|||
跨網絡地壓縮復制一個目錄的整體結構 | tar czf - /home/mozhiyan | ssh remote_host "( cd /backup/; tar xzf - )" |
|||
檢査 tar 歸檔文件的大小,單位為字節 | cd /; tar cf - etc | wc -c |
|||
檢查 tar 歸檔文件壓縮為 tar.gz 歸襠文件后所占的大小 | tar czf - etc.tar | wc -c |
|||
檢查 tar 歸檔文件壓縮為 tar.bz2 歸襠文件后所占的大小 | tar cjf - etc.tar | wc -c |
|||
head 命令 | 顯示 ls 命令的前 10 行輸出 | ls /usr/bin | head |
|
默認的輸出行數為 10 行 |
顯示 ls 命令的前 5 行內容。 | ls /usr/bin | head -n 5 |
|
||
uniq命令 | 去掉輸出中重復的行 | sort testfile | uniq |
||
顯示輸出中各重復的行出現的次數,並按次數多少倒序顯示 | sort testfile | uniq -c | sort -nr |
|||
wc命令 | 統計當前登錄到系統的用戶數 | who | wc -l |
2 | wc 命令用於統計包含在文本流中的字符數、單同數和行數 |
統計當前的 Linux 系統中的進程數 | ps -ef | wc -l |
70 |