Linux 數據流重定向

目的

1.重定向怎麼用
2.文件描述符(0,1,2)

學習目錄

  1. 數據流重定向
  2. 簡單的重定向
  3. 標準錯誤的重定向
  4. 使用tee命令重定向到多個文件
  5. exec命令
  6. 創建文件描述符
  7. 關閉文件描述符
  8. 完全屏蔽命令的輸出
  9. 使用xargs分割參數列表

1.數據流重定向

命令

> : 覆蓋文件內容並寫入
>>:在文件後面追加,不覆蓋文件內容
<:和>作用一樣,表示從右到左
<<:和>>作用一樣,表示從右到左


2.簡單的重定向

前置知識:文件描述符

 1.  文件描述符:0   設備文件:/dev/stdin    縮寫:stdin    說明:標準輸入
 2.  文件描述符:1   設備文件:/dev/stdout   縮寫:stdout   說明:標準輸出
 3.  文件描述符:2   設備文件:/dev/stderr   縮寫:stderr   說明:標準錯誤

參考網址

實例(1:

mkdir Documents #創建目錄
cat > Documents/test.c << EOF   #將cat的連續輸出重定向到一個文件中
#include <stdio.h>
int main()
{
    printf("hello world/n");
    return 0;
}
EOF

補充EOF
是END Of File的縮寫,表示自定義終止符.既然自定義,那麼EOF就不是固定的,可以隨意設置別名,在linux按ctrl-d就代表EOF.
EOF一般會配合cat能夠多行文本輸出.
其用法如下:
<<EOF //開始

EOF //結束
參考網址

cat Documents/test.c

意義:將一個文件作爲命令的輸入(cat),標準輸出作爲命令的輸出

實例(2:

 #將echo命令的輸出從默認的標準輸出重定向到一個普通文件
echo 'hello world' > file 
#查看文件
cat file  

3.標準錯誤的重定向

實例(1:

 #用bash提供的特殊的重定向符號“&”將標準錯誤和標準輸出同時重定向到文件
 cat [目錄]/[標準輸出文件] [標準錯誤文件] &> [文件] 

實例(2:

#將標準錯誤重定向到標準輸出,將標準輸出重定向到文件中,注意要將標準輸出重定向到文件寫在前面
cat [目錄]/[標準輸出文件] [標準錯誤文件] > [文件] 2>&1 

補充:在輸出重定向文件描述符前加上&,否則shell會當作重定向到一個文件名爲1的文件中


4.使用tee命令同時重定向到多個文件

實例(1:

#將echo命令輸出通過tee命令同時重定向到file1 file2 file3
echo 'git is good' | tee file1 file2 file3  

5.exec命令

調用並執行指定的命令。
exec命令 用於調用並執行指令的命令。exec命令通常用在shell腳本程序中,可以調用其他的命令。如果在當前終端中使用命令,則當指定的命令執行完畢後會立即退出終端。

實例(1:

zsh #進入子shell
exec 1 > somefile   #使用exec替換當前進程的重定向,將標準輸出(1)重定向到文件中
#後面執行的命令都將重定向到文件中,知道使用exit退出當前子shell
ls            #ls命令重定向到文件(somefile)中
ll            #ll命令重定向到文件(somefile)中
pwd           #pwd命令重定向到文件(somefile)中
exit          #退出
cat somefile    #主進程查看文件(somefile)  ls ll  pwd命令會同時執行

參考網址

6.創建文件描述符

Linux系統將所有設備都當作文件來處理,而Linux用文件描述符來標識每個文件對象。其實我們可以想象我們電腦的顯示器和鍵盤在Linux系統中都被看作是文件,而它們都有相應的文件描述符與之對應。
shell中有9個文件描述符,上面是用了它提供的默認的0,1,2文件描述符,另外我們還可以使用3—8文件描述符。

cat /dev/fd;ls -Al:查看當前shell進程中打開的文件描述符。
;:路徑的分隔符

實例(1:

zsh #進入子shell
exec 3 > somefile           #將文件描述符3重定向到文件中(somefile)
cat /dev/fd;ls -Al;cd -     #查看當前shell中打開的文件描述符
echo "this is test" >&3           #將echo命令的輸出重定向到文件描述符3種
cat somefile           #查看文件(somefile)
exit           #退出

參考網址


7.關閉文件描述符

exec 3>&-:關閉文件描述符3


8.完全屏蔽命令的輸出

前置知識

/dev/null空設備,一般用來丟棄不需要的輸出流

實例(1:

cat directory/file 1>/dev/null 2>&1    
#將文件標準輸出(1)重定向到/dev/null中,將標準錯誤(2)重定向到標準輸出(1)中

補充:
cat:連接多個文件並打印到標準輸出


9.使用xargs分割參數列表

將列表參數轉換成小塊分段傳遞給其他命令,以避免參數列表過長問題。

實例(1:

cut -d: -f1 < /etc/passwd | sort |xargs echo
 #將/etc/passwd文件按:分割,取第一個字段排序後,使用echo命令生成一個列表。

參考網址

發佈了32 篇原創文章 · 獲贊 0 · 訪問量 900
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章