管道shell
主要概念bash
1.用UNIX所謂的「管道」能夠把一個進程標準輸出流與另外一個進程的標準輸入流鏈接起來。編輯器
2.UNIX中的許多命令被設計爲過濾器,從標準輸入中讀取輸入,將輸出傳送到標準輸出。ide
3.bash用「|」在兩個命令之間建立管道。ui
進程的輸出能夠被重定向到終端顯示器之外的地方,或者能夠讓進程從終端鍵盤之外的地方讀取輸入。(簡而言之:進程的輸入能夠不從鍵盤,進程的輸出也能夠不從顯示器)spa
一種最經常使用、最有利的重定向形式是把這兩者結合起來,在這種形勢下,一個命令輸出(標準輸出)被直接「用管道輸送」到另外一個命令的輸入(標準輸入)中,從而構成了Linux(和UNIX)所謂的管道(pipe)。設計
當兩個命令用管道鏈接起來時,第一個進程的標準輸出流被直接鏈接到第二個進程的標準輸入序列。排序
鏈接在管道中的全部進程被稱爲進程組(process group)進程
管道:把前一個命令的輸出,做爲後一個命令的輸入ip
命令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