4.3管道和重定向
管道和重定向:> < >> <<
運算器 控制器: CPU
存儲器:RAM
輸入設備/輸出設備
程序:指令和數據
控制器:指令
運算器
存儲器
地址總線:內存尋址
數據總線:傳輸數據
控制總線:控制指令
寄存器:CPU暫時存儲器
I/O:硬盤
INPUT設備:
OUTPUT設備:
系統設定
默認輸出設備:標準輸出,STDOUT,1
默認輸入設備:標準輸入,STDIN,0
標準錯誤輸出:STDERR,2
標準輸入:鍵盤
標準輸出和錯誤輸出:顯示器
I/O重定向:
Linux:
> 輸出 ls /var > /tmp/var.out 覆蓋輸出(覆蓋原有內容)
>>:追加輸出
/***
set 內建命令:
-C(不允許覆蓋) -開啟功能
+C(恢復覆蓋) +關閉功能
ls /var >| /tmp/var.out(-C沒作用)
**/
set -C:禁止對已經存在文件使用覆蓋重定向
強制覆蓋輸出,則使用>|
set +C: 關閉上述功能
2>:重定向錯誤輸出
2>>:追加方式
ls /varr > /tmp/var3.out 2> /tmp/err.out(兩次重定向)
&>:重定向標準輸出或錯誤輸出至同一個文件
&>>:追加方式
ls /var6 &> /tmp/var0.out
<: 輸入重定向
<<:Here Document(在此處生成文檔)cat << EOF(end of file)
cat >> /tmp/myfile.txt << EOF 在腳本中生成文件
cat < /etc/fstab 把文件顯示出來
tr ‘a-z‘ ‘A-Z‘ < /etc/fstab
passwd --stdin
管道:前一個命令的輸出,作為後一個命令的輸入
命令1 | 命令2 | 命令3 | ...
echo "hello , world" | tr ‘a-z‘ ‘A-Z‘
echo "redhat" | passwd --stdin hive
tee 從標準輸入輸入,保存到標準輸出和文件
echo "Hello,World" | tee /tmp/hello.out
wc -l(字母) /etc/passwd
wc -l /etc/passwd | cut -d‘ ‘ -f1
練習:
1 統計/usr/bin/目錄下的文件個數:
ls /usr/bin | wc -l
2 取出當前系統上所有用戶的shell,要求,每種shell只顯示一次,並且
按順序進行顯示
cut -d: -f7 /etc/passwd | sort -u
3 思考:如何顯示/var/log目錄下每個文件的內容類型
file /var/log/*
file ‘ls /var/log‘
4 取出/etc/inittab文件的第6行
head -6 /etc/inittab | tail -1
5 取出/etc/passwd文件中倒數第9個用戶的用戶名和shell,顯示到屏幕上
並將其保存至/tmp/users文件中
tail -9 /etc/passwd |head -1 | cut -d: -f1,7 | tee /tmp/users
6 顯示/etc/目錄下所有以pa開頭的文件,並統計其個數
ls -d(不加-d把目錄下的文件都顯示出來了) /etc/pa* | wc -l
7 不使用文本編輯器,將alias cls = clear一行內容添加至當前用戶的
.bashrc文件中
echo "alias cls = clear" >> ~/.bashrc
4.3管道和重定向