乙個程式執行起來最少會開啟三個檔案,分別是標準輸入(0)\標準輸出(1)\錯誤輸出(2)
三個檔案都是fd(檔案描述符)管理。
linux下使用標準輸入檔案stdin和標準輸出檔案stdout,來表示每個命令的輸入和輸出,還使用乙個標準錯誤輸出檔案stderr用於輸出錯誤資訊。這三個標準輸入輸出系統預設與控制終端裝置相聯絡在一起。
因此,在標準情況下,每個命令通常從它的控制終端中獲取輸入,將輸出列印到控制終端的螢幕上。但是也可以重新定義程式的標準輸入檔案stdin和標準輸出檔案stdout,將它們重新定向。最基本的用法是將它們重新定義到乙個檔案上,從乙個檔案獲取輸入,輸出到另外的檔案中等。標準輸入檔案stdin,通常對應終端的鍵盤;標準輸出檔案stdout和標準錯誤輸出檔案stderr,這兩個檔案都對應終端的螢幕。程序將從標準輸入檔案中得到輸入資料,將正常輸出資料輸出到標準輸出檔案,而將錯誤資訊送到標準錯誤檔案中。
檔案描述符是從0開始的整數,指向與程序相關的特定資料流。當程序啟動時,通常開啟三個檔案描述符,分別對應三種標準的i/o:標準輸入(檔案描述符0),標準輸出(檔案描述符1),標準錯誤(檔案描述符2)。
1)標準輸入(stdin):它是命令的輸入,預設和終端的鍵盤關聯
2)標準輸出(stdout):它是命令的輸出,預設和終端的螢幕關聯
3)標準錯誤(stderr):它是命令的錯誤資訊輸出,預設也和終端的螢幕關聯
4)如果程序開啟了額外的檔案進行輸入和輸出,則其被設定為下乙個可用的檔案描述符,從3到9
標準覆蓋輸出重定向 1> 將程式輸出的正確結果輸出到指定的檔案中,會覆蓋檔案原有的內容
標準追加輸出重定向 1>> 將程式輸出的正確結果以追加的方式輸出到指定檔案,不會覆蓋原有檔案
錯誤覆蓋輸出重定向 2> 將程式的錯誤結果輸出到執行的檔案中,會覆蓋檔案原有的內容
錯誤追加輸出重定向 2>> 將程式輸出的錯誤結果以追加的方式輸出到指定檔案,不會覆蓋原有檔案
標準輸入重定向 << 將命令中接收輸入的途徑由預設的鍵盤更改為指定的檔案或命令
1.將正確的輸出和錯誤的輸出,分別列印到不同的檔案中
su - lamp
find /etc/ > a.txt 2>b.txt
2.混合輸出,無論是正確的輸出還是錯誤的輸出都定向到乙個檔案中
$ find /etc/ &>abc
$ find /etc/ >aa.txt 2>&1 #
3.合併兩個檔案,將兩個檔案的輸出重新定向到乙個新的檔案中.
$ cat a.txt b.txt > c.txt
4.為了避免錯誤的輸出大量顯示在螢幕產生干擾,可以直接丟棄,
$ find /etc/ >bbbb.txt #將正確的輸出寫入bbbb檔案,錯誤的輸出直接輸出到螢幕
$ find /etc/ >bbbb.txt 2>/dev/null #正確的輸出寫入到bbbb檔案,錯誤的直接丟棄
$ find /etc/ 2>/dev/null #正確的輸出到螢幕,錯誤的丟棄
5.[root@lsy~]# vim ping.sh
ping -w1 -c1 10.0.0.1
if [ $? -eq 0 ];then
echo 「10.0.0.1 is up.」
else
echo 「10.0.0.1 is down.」
fi[root@lsy~]# chmod +x ping.sh
root@lsy~]# ./ping.sh
#改進後版,遮蔽掉ping命令產生所有輸出,無論正常還是異常,都不看
[root@lsy~]# vim ping.sh
ping -w1 -c1 10.0.0.1 &>/dev/null
if [ $? -eq 0 ];then
echo 「10.0.0.1 is up.」
else
echo 「10.0.0.1 is down.」
fi#改進後版,將人為定義的正確輸出和錯誤輸出定向到不同的檔案中
[root@lsy~]# vim ping2.sh
ping -c1 10.0.0.1 &>/dev/null
if [ $? -eq 0 ];then
echo 「10.0.0.1 is up.」 >>up.txt
else
echo 「10.0.0.1 is down.」 >>down.txt
fi[root@lsy~]# chmod +x ping2.sh
[root@lsy~]# ./ping2.sh #沒有+x 則bash ping2.sh
6.如何把程式放入後台(screen)
(while :; do date; sleep 2; done) & #&表示將程式放置後台
(while :; do date; sleep 2; done) &>date.txt &
表示執行的程式和&>date.txt 視為乙個命令, 然後將這乙個命令使用&放置後台
7.在子shell中執行程式
[root@lsy~]# cd /boot; ls #分號都執行,|前面成功才執行後面, ||失敗才執行後面
#subshell 中執行
[root@lsy~]# (cd /boot; ls)
8.將/etc/passwd 中的使用者按 uid 大小排序
[root@lsy~]# sort -t":" -k3 -n /etc/passwd
[root@lsy~]# sort -t":" -k3 -n /etc/passwd -r
[root@lsy~]# sort -t":" -k3 -n /etc/passwd |head
8.統計當前/etc/passwd 中使用者使用的 shell 型別
#思路:取出第七列(shell) | 排序(把相同歸類)| 去重
[root@lsy~]# awk -f: 『』 /etc/passwd
[root@lsy~]# awk -f: 『』 /etc/passwd |sort
[root@lsy~]# awk -f: 『』 /etc/passwd |sort |uniq
[root@lsy~]# awk -f: 『』 /etc/passwd |sort |uniq -c
9.統計**的訪問情況 top 2
#思路: 列印所有訪問的連線 | 過濾訪問**的連線 | 列印使用者的 ip | 排序 | 去重
10.列印當前所有 ip
[root@lsy~]# ip addr |grep 'inet 』 |awk 『』 |awk -f"/" 『』
11.列印根分割槽已用空間的百分比(僅列印數字)
[root@lsy~]# df |grep 『/$』 |awk 『』 |awk -f"%" 『』
[root@lsy~]# ip addr |grep 'inet 』 |tee ip.txt |awk -f"/" 『』 |awk 『』
12.重定向與 tee 區別
[root@lsy~]# date > date.txt #直接將內容寫入date.txt檔案中
[root@lsy~]# date |tee date.txt #命令執行會輸出至螢幕,但會同時儲存乙份至date.txt檔案中
13.xargs引數傳遞,主要讓一些不支援管道的命令可以使用管道技術
which cat|xargs ls- l
ls |xargs rm -fv
ls |xargs cp -rvt /tmp/ -或-> ls | xargs -i {} cp -rv {} /tmp/ #t目標 源
ls |xargs mv -t /tmp/ -或-> ls | xargs -i {} mv {} /tmp
Python基礎二(輸入與輸出)
通常,乙個程式都會有輸入 輸出,這樣可以與使用者進行互動。使用者輸入一些資訊,你會對他輸入的內容進行一些適當的操作,然後再輸出給使用者想要的結果。python的輸入 輸出,我們可以用input進行輸入,print進行輸出,這些都是簡單的控制台輸入 輸出,複雜的有處理檔案等。注 python3版本中沒...
Python基礎篇 輸入與輸出
在python中,我們一般用print 輸出,在括號裡輸入你想輸出的資訊,用引號包裹起來 單雙三都可以 例如我們來輸出乙個 hello,python print hello,python hello,python print hello,python hello,python如果要輸出多個字串,可以...
Linux輸入與輸出及vim
一 管理輸入輸出 1 輸出 在linux系統中,正確的輸出編號為1,錯誤輸出編號為2。用普通使用者student執行 find etc name passwd 命令,結果如下圖 因為studnet的許可權問題,該命令輸出為兩部分 劃線部分為正確輸出,其餘為錯誤輸出。在工作中有時只需要正確輸出,有時只...