Linux I-O 重定向詳細介紹

Linux I/O 重定向可以定義爲,更改從命令讀取輸入到命令發送輸出的方式。你可以重定向命令的輸入和輸出。對於重定向符號,可以是 <、> 或者 | 。

I/O 重定向中的標準流

Bash shell 在 I/O 重定向中有三個標準流:

標準輸入(stdin):stdin流編號爲stdin(0)。bash shell從stdin獲取輸入。默認情況下,鍵盤用作輸入。
標準輸出(stdout):stdout流編號爲stdout(1)。bash shell將輸出發送到stdout。輸出將顯示。
標準錯誤(stderr):stderr流編號爲stderr(2)。bash shell向stderr發送錯誤消息。顯示錯誤消息。

重定向到文件

每個流都使用重定向命令。單括號'>'或雙括號'>>'可用於重定向標準輸出。如果目標文件不存在,將創建一個具有相同名稱的新文件。

覆蓋:帶有單括號 “>” 的命令將覆蓋現有的文件內容。

>:標準輸出
<:標準輸入
2>:標準錯誤

注意:寫 “1>” 或“>”和 “0<” 或“<”是一回事。但對於 stderr,必須編寫“2>”。

用法:
cat > <fileName>

追加: 帶有雙括號 “>>” 的附加命令不會覆蓋現有的文件內容。

>>-標準輸出
<<-標準輸入
2>>-標準錯誤
用法:
cat >> <fileName>

重定向到程序

重定向到程序管道將流從一個程序重定向到另一個程序。當管道用於將一個程序的標準輸出發送到另一個程序時,第一個程序的數據將不會顯示在終端上,只顯示第二個程序的信息。儘管管道的功能看起來可能與 “>” 和“>>”相似,但有顯著差異。管道將數據從一個程序重定向到另一個程序,而括號僅用於文件的重定向。

用法:
ls *.txt | cat > txtFile

Linux input 重定向

<stdin

bash shell 使用 stdin 獲取輸入。在輸入重定向中,將文件輸入命令,並在 “<” 符號的幫助下執行此重定向。

Syntax:
cat < <fileName>
[root@localhost ~]# cat   < f.txt 
aa
[root@localhost ~]#

<< 文檔

EOF(文件結束)可以鍵入,也可以通過按(ctrl+d)鍵調用。任何單詞都可以代替 “EOF”,就像我們使用的“last” 一樣。

Syntax:
cat <<EOF> <fileName>

<< 字符串

字符串用於將字符串直接傳遞給命令。

Example:
base64 <<< format.txt

Linux 輸出重定向

輸出重定向用於將一個命令的輸出放入文件或另一個命令。

stdout

stdout 使用大於號'>'重定向。當 shell 遇到'>'號時,它將清除文件:

Example:
echo Hello everyone. > afile.txt

輸出文件被擦除

在輸出重定向中,在掃描命令行的過程中,shell 將遇到 “>” 符號,並將清除文件。

Example:
zcho Welcome > afile.txt

nolobber

我們可以在 nolobber 選項的幫助下,在使用'>'符號時防止文件刪除。

Syntax:
set -o noclobber    (防止覆蓋)  
set +o noclobber    (覆蓋)
Example:
echo Learn Linux. > newfile.txt

否定 noclobber

重寫 nolobber 意味着您可以在使用'>|'符號設置 nolobber 時覆蓋現有文件。

Syntax:
command >| <fileName>  
  
Example:
echo Welcome to JavaTpoint. >| newfile.txt

append

append'>>' 不允許覆蓋文件內容,因此顯示新的和舊的文件內容。

Syntax:
command >> <fileName>
Example:
echo You all are welcome here. >> newfile.txt

Linux 錯誤重定向

2> stderr

命令'2>'重定向輸出的錯誤,它可以通過重定向錯誤消息來幫助我們減少顯示的混亂。

Example:
zcho hyii 2> /dev/null

2> &1

此命令有助於重定向同一文件中的 stdout 和 stderr。

Example:
newfile.txt > abc.txt and error.txt 2>&1

注意:重定向的順序非常重要:

ls > dirlist 2>&1

然後,stdout 和 stderr 都將被定向到文件目錄列表:

ls 2>&1 > dirlist

然後,只有 stdout 會重定向到目錄列表。這是因爲,在將 stdout 重定向到目錄列表之前,stderr 已經複製了 stdout。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/roFaWtdBvbs06J7DKs42tA