管道
主要概念
1.用UNIX所謂的“管道”可以把一個進程標準輸出流與另一個進程的標準輸入流連接起來。
2.UNIX中的許多命令被設計爲過濾器,從標準輸入中讀取輸入,將輸出傳送到標準輸出。
3.bash用“|”在兩個命令之間創建管道。
進程的輸出可以被重定向到終端顯示器以外的地方,或者可以讓進程從終端鍵盤以外的地方讀取輸入。(簡而言之:進程的輸入可以不從鍵盤,進程的輸出也可以不從顯示器)
一種最常用、最有利的重定向形式是把這二者結合起來,在這種形勢下,一個命令輸出(標準輸出)被直接“用管道輸送”到另一個命令的輸入(標準輸入)中,從而構成了Linux(和UNIX)所謂的管道(pipe)。
當兩個命令用管道連接起來時,第一個進程的標準輸出流被直接連接到第二個進程的標準輸入序列。
連接在管道中的所有進程被稱爲進程組(process group)
管道:把前一個命令的輸出,作爲後一個命令的輸入
命令1 | 命令2 | 命令3 |···
把passwd中用戶名取出來,進行排序
[root@host2 tmp]# cut -d: -f1 /etc/passwd | sort
把passwd中UID號取出來,進行排序
[root@host2 tmp]# cut -d: -f3 /etc/passwd | sort -n
把passwd中用戶名取出來,進行排序,然後變成大寫
[root@host2 tmp]# cut -d: -f1 /etc/passwd | sort | tr 'a-z' 'A-Z'
【tee】
tee - read from standard input and write to standard output and files
從標準輸入讀取數據,並且發送至標準輸出和文件
即:屏幕輸出一份,保存至文件一份
[root@host2 tmp]# echo "Hello Red Squirrel" | tee /tmp/hello.out Hello Red Squirrel [root@host2 tmp]# cat hello.out Hello Red Squirrel
【wc】
wc - print newline, word, and byte counts for each file
只顯示文件的行數,不能顯示其他信息:
[root@host2 tmp]# wc -l /etc/passwd | cut -d' ' -f1 33
[備註:cut -d的''中間是空格]
題目:
1.統計/usr/bin目錄下的文件個數
[root@host2 tmp]# ls /usr/bin/ | wc -l 1434
2.取出當前系統上所有用戶的shell,要求每種shell只顯示一次,並且按順序進行顯示
[root@host2 tmp]# cut -d: -f7 /etc/passwd | sort -u /bin/bash /bin/sync /sbin/halt /sbin/nologin /sbin/shutdown
3.思考:如何顯示/var/log目錄下每個的內容類型?
[root@host2 tmp]# file /var/log/*
4.取出/etc/inittab文件中的第5行
[root@host2 tmp]# head -5 /etc/inittab | tail -1 # System initialization is started by /etc/init/rcS.conf
5.取出/etc/passwd文件中倒數第9個用戶的用戶名和shell,顯示到屏幕上並將其保存至/tmp/users文件中
[root@host2 tmp]# tail -9 /etc/passwd | head -1 | cut -d: -f1,7 | tee /tmp/users haldaemon:/sbin/nologin
6.顯示/etc目錄下所有以pa開頭的文件,並統計其個數
[root@host2 tmp]# ls -d /etc/pa* | wc -l 4
7.不使用文本編輯器,將alias cls=clear 一行內容添加至當前用戶的.bashrc文件中
[root@host2 tmp]# echo "alias cls=clear" >> ~/.bashrc