Linux重定向筆記

2021-10-08 23:10:12 字數 2086 閱讀 3158

這部分知識幾度學習幾度忘卻,還是需要總結梳理才能真正領會。

重定向使用比較多的還是在我們去後台執行乙個程式說起,比如這下面的操作

& 1 &

[1] 3923

後台執行的地方我都記得住,主要是很多次2>& 1學會又忘記,這次圍繞這個知識點進行總

linux一大哲學便是一切皆檔案,資料輸入輸出則被定義為流,我們的程式就像自來水工廠一樣對資料進行加工,處理好的水則對外輸出。< 則是代表讀取的資料來源,> 則是輸出目的地。linux中每個程式都有標準的輸入和輸出流,標準輸入則是我們的鍵盤,標準輸出就是我們的控制台。

ls輸出到控制台

cat可以從檔案讀取,輸出到控制台

預設狀態下我們也沒有去深究,但是這個狀態其實是可以被我們去改變的

比如:

ll >ls.log

read 則從乙個檔案中讀取資料,然後結果給變數a

linux檔案中描述符file description其實是乙個結構體,是對檔案的引用,說白了其實就是定義乙個變數,然後我們訪問變數可以讀到內容。

使用exec可以繫結乙個檔案到 檔案描述符中,比如還是剛才的檔案:

echo

"lslog裡面內容"

>ls.log

exec 5< ls.log

cat<

& 5

我們這樣就繫結了5變數,箭頭《還是讀取的意思,所以原來我們需要讀取ls.log的寫法就可以變成使用變數去讀取了

看到效果其實是一樣的,這裡有個相當於使用變數的語法 ,其實反過來理解,如果直接去的&則會把5當成普通檔案去讀取,不就產生歧義了嘛!

lsof是列出開啟檔案(lists openfiles)的意思,後面接程序號即可,另外$$在linux可以拿到當前bash的程序號,我們可以組合使用去檢視我們定義的檔案描述符:

我們可以看到紅色部分有個5,其實那個就是我們變數名字啦,另外順帶看到下面有我們的0 1 2其實就是預設給我們帶的,這也是為啥我們可以去使用 >& 2 類似這種操作的原因了,具體是表示啥呢,其實都有直接規定的,我們通過/dev下面可以看到繫結的情況:

還是一切皆檔案,proc下面是linux程序資訊的對映,我們切可以看到2 0 1指向的變數,分別就是標準錯誤輸出,標準輸入和標準輸出,就是我們的控制台和鍵盤。

不僅如此,其實我們要建立外部鏈結也是可以的

系統會顯示tcp的連線型別了

回到最開始的指令碼

nohup ./callsystem >/dev/null  2>

& 1 &

其實這裡還有個坑,如果我們寫成

nohup ./callsystem  2>

& 1 1>/dev/null &

這樣子是有問題的,這個從程式理解可以比較方便,2>&1 其實是會把2賦值給1指向的實際內容,已經是控制台了,那麼後面的覆蓋1>/dev/null不會再對2起作用了

重定向(筆記)

簡單的重定向 stdin 標準輸入,對應你在終端的輸入 stdout 標準輸出,對應於終端的輸出 stderr 標準錯誤輸出,對應於終端的輸出 1.管道預設是連線前乙個命令的輸出到下乙個命令的輸入 2.重定向是需要乙個命令的輸出到下乙個命令的輸入 標準錯誤重定向 重定向標準輸出到檔案,這是乙個很實用...

重定向筆記

首先注意檔案描述符 三個數字0,1,2和檔案指標的關係。執行任何程式之前,都會首先開啟三個檔案 乙個用於輸入,乙個用於輸出,乙個用於錯誤輸出,這三個檔案開啟後形成的檔案結構分別用檔案指標stdin,stdout,stderr進行指向。這樣會形成三個檔案描述符0,1,2。具體哪個是0,哪個是1,哪個是...

Linux中重定向 追加重定向與輸入重定向

簡單介紹一下重定向 追加重定向與輸入重定向,輸入追加重定向的用法 重定向 我們可以將想要輸出的內容通過重定向新增到某個檔案中 ps 將hello寫入到當前資料夾下的a.txt檔案中,然後檢視a.txt檔案內容 追加重定向 追加重定向和重定向大致相同,不同點是追加重定向在檔案的基礎上繼續新增內容 ps...