linux基礎 輸入與輸出

2021-09-25 09:31:31 字數 4029 閱讀 5572

乙個程式執行起來最少會開啟三個檔案,分別是標準輸入(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的許可權問題,該命令輸出為兩部分 劃線部分為正確輸出,其餘為錯誤輸出。在工作中有時只需要正確輸出,有時只...