欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Linux base shell重定向詳解

 更新時間:2014年04月15日 09:20:52   作者:  
這篇文章主要介紹了Linux base shell重定向的相關(guān)資料,并用一個簡明例子總結(jié)了常見用法(在第三節(jié)),需要的朋友可以參考下

一、標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸出與標(biāo)準(zhǔn)錯誤輸出

在linux shell執(zhí)行命令時,每個進程都和三個打開的文件相聯(lián)系,并使用文件描述符來引用這些文件。由于文件描述符不容易記憶,shell同時也給出了相應(yīng)的文件名:

文件 文件描述符
輸入文件—標(biāo)準(zhǔn)輸入 0(缺省是鍵盤,為0時是文件或者其他命令的輸出)
輸出文件—標(biāo)準(zhǔn)輸出 1(缺省是屏幕,為1時是文件)
錯誤輸出文件—標(biāo)準(zhǔn)錯誤 2(缺省是屏幕,為2時是文件)
系統(tǒng)中實際上有12個文件描述符,我們可以任意使用文件描述符3到9.

標(biāo)準(zhǔn)輸入:從鍵盤輸入數(shù)據(jù),即從鍵盤讀入數(shù)據(jù)。
標(biāo)準(zhǔn)輸出:把數(shù)據(jù)輸出到終端上。
標(biāo)準(zhǔn)錯誤輸出:把標(biāo)準(zhǔn)錯誤輸出到終端上。

默認(rèn)的標(biāo)準(zhǔn)輸入指的是鍵盤,默認(rèn)的標(biāo)準(zhǔn)輸出與標(biāo)準(zhǔn)錯誤輸出指的是屏幕或者是終端。

系統(tǒng)為這三個文件分配了文件標(biāo)識符fd(file descripter).

在Linux系統(tǒng)下,一切皆是文件,對文件的操作,一般要用到文件標(biāo)識符。它們的文件標(biāo)識符,分別為0,1,2。他們的關(guān)系如下表:

文件描述符 名稱 通用縮寫 默認(rèn)值
0 標(biāo)準(zhǔn)輸入 stdin 鍵盤
1 標(biāo)準(zhǔn)輸出 stdout 屏幕
2 標(biāo)準(zhǔn)錯誤 stderr 屏幕

二.文件重定向:改變程序運行的輸入來源和輸出地點

1.輸出重定向:

Command > filename 把標(biāo)準(zhǔn)輸出重定向到一個新文件中
Command >> filename 把標(biāo)準(zhǔn)輸出重定向到一個文件中(追加)
Command > filename 把標(biāo)準(zhǔn)輸出重定向到一個文件中
Command > filename 2>&1 把標(biāo)準(zhǔn)輸出和錯誤一起重定向到一個文件中
Command 2 > filename 把標(biāo)準(zhǔn)錯誤重定向到一個文件中
Command 2 >> filename 把標(biāo)準(zhǔn)輸出重定向到一個文件中(追加)
Command >> filename2>&1 把標(biāo)準(zhǔn)輸出和錯誤一起重定向到一個文件(追加)

2.輸入重定向:

Command < filename > filename2 Command命令以filename文件作為標(biāo)準(zhǔn)輸入,以filename2文件作為標(biāo)準(zhǔn)輸出
Command < filename Command命令以filename文件作為標(biāo)準(zhǔn)輸入
Command << delimiter 從標(biāo)準(zhǔn)輸入中讀入,知道遇到delimiter分界符

3.綁定重定向

Command >&m 把標(biāo)準(zhǔn)輸出重定向到文件描述符m中
Command < &- 關(guān)閉標(biāo)準(zhǔn)輸入
Command 0>&- 同上

三、使用實例

復(fù)制代碼 代碼如下:

cmd > file
#說明: 將 cmd 的輸出發(fā)送到 file 文件(覆蓋模式)

cmd >> file
#說明: 將 cmd 的輸出發(fā)送到 file 文件(追加模式)

cmd < file
#說明: 以 file 文件的內(nèi)容作為 cmd 的輸入

cmd << text
#說明: 嵌入文件(here document, 類似于PHP語法)形式的輸入
#shell 可在行內(nèi)輸入中做變量、命令和算術(shù)替換

cmd <<- text
#說明: 作用同上, 不過會自動刪除here document中每行開頭的制表符Tab

cmd <<< word
#說明: here string 格式的輸入
#參見: http://bash.cyberciti.biz/guide/Here_strings
#參見: http://linux.die.net/abs-guide/x15683.html

cmd <> file
#說明: 以讀寫方式打開文件 file

cmd >| file
#說明: 強制以覆蓋方式將 cmd 的輸出發(fā)送到 file 文件
#即便 shell 設(shè)置了 noclobber 選項也是如此

cmd >&n
#說明: 將 cmd 的輸出發(fā)送到文件描述符 n

cmd m>&n
#說明: 作用同上。將本該輸出到文件描述符 m 的內(nèi)容, 發(fā)送到文件描述符 n

cmd >&-
#說明: 關(guān)閉標(biāo)準(zhǔn)輸出

cmd <&n
#說明: 從文件描述符 n 處獲取內(nèi)容作為 cmd 命令的輸入

cmd m<&n
#說明: 作用同上。除了本該從文件描述符 m 處獲取輸入,改為從文件描述符 n 處獲取

cmd <&-
#說明: 關(guān)閉標(biāo)準(zhǔn)輸入

cmd <&n-
#說明: 通過復(fù)制移動文件操作符 n 為標(biāo)準(zhǔn)輸入并且關(guān)閉原始輸入

cmd >&n-
#說明: 通過復(fù)制移動文件操作符 n 為標(biāo)準(zhǔn)輸出并且關(guān)閉原始輸出

cmd 2>file
#說明: 將標(biāo)準(zhǔn)錯誤輸出發(fā)送到文件 file

cmd  > file 2>&1
#說明: 將標(biāo)準(zhǔn)輸出發(fā)送到文件 file, 將標(biāo)準(zhǔn)錯誤發(fā)送到文件描述符 1, 也即 file 文件

cmd  >& file
#說明: 將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤都發(fā)送到文件 file (作用同上)

cmd  &> file
#說明: 作用同上, 更好的格式

cmd  &>> file
#說明: 將標(biāo)準(zhǔn)錯誤和標(biāo)準(zhǔn)輸出發(fā)送到文件 file (追加模式)

cmd  > f1 2> f2
#說明: 將標(biāo)準(zhǔn)輸出發(fā)送到文件 f1, 將標(biāo)準(zhǔn)錯誤發(fā)送到文件 f2

cmd  | tee files
#說明: 發(fā)送 cmd 的輸出到標(biāo)準(zhǔn)輸出 (通常為終端) 和 文件 files

cmd 2>&1 | tee files
#說明: 發(fā)送 cmd 的輸出和錯誤到標(biāo)準(zhǔn)輸出 (通常為終端) 和 文件 files

cmd |& tee files
#說明: 作用同上


四、shell重定向的一些高級用法

1.重定向標(biāo)準(zhǔn)錯誤
例子1:

復(fù)制代碼 代碼如下:
command 2> /dev/null

如果command執(zhí)行出錯,將錯誤的信息重定向到空設(shè)備
例子2:
復(fù)制代碼 代碼如下:
command > out.put 2>&1

將command執(zhí)行的標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤重定向到out.put(也就是說不管command執(zhí)行正確還是錯誤,輸出都打印到out.put)。

2.exec用法
exec命令可以用來替代當(dāng)前shell;換句話說,并沒有啟動子shell,使用這一條命令時任何現(xiàn)有環(huán)境變量將會被清除,并重新啟動一個shell(重新輸入用戶名和密碼進入)。

復(fù)制代碼 代碼如下:
exec command

其中,command通常是一個shell腳本。
對文件描述符操作的時候用(也只有再這時候),它不會覆蓋你當(dāng)前的shell
例子1:
復(fù)制代碼 代碼如下:
#!/bin/bash
#file_desc


exec 3<&0 0<name.txt
read line1
read line2
exec 0<&3
echo $line1
echo $line2

其中:
首先,exec 3<&0 0<name.txt的意思是把標(biāo)準(zhǔn)輸入重定向到文件描述符3(0表示標(biāo)準(zhǔn)輸入),然后把文件name.txt內(nèi)容重定向到文件描述符0,實際上就是把文件name.txt中的內(nèi)容重定向到文件描述符3。然后通過exec打開文件描述符3;
然后,通過read命令讀取name.txt的第一行內(nèi)容line1,第二行內(nèi)容line2,通過Exec 0<&3關(guān)閉文件描述符3;
最后,用echo命令輸出line1和line2。最好在終端運行一下這個腳本,親自嘗試一下。

例子2:

復(fù)制代碼 代碼如下:
exec 3<>test.sh;
#打開test.sh可讀寫操作,與文件描述符3綁定

while read line<&3
 do
    echo $line;
done

#循環(huán)讀取文件描述符3(讀取的是test.sh內(nèi)容)
復(fù)制代碼 代碼如下:
exec 3>&-
exec 3<&-

#關(guān)閉文件的,輸入,輸出綁定

五、bash shell 重定向的幾個特殊文件

文件 說明
/dev/stdin 文件描述符 0 的復(fù)制品
/dev/stdout 文件描述符 1 的復(fù)制品
/dev/stderr 文件描述符 2 的復(fù)制品
/dev/fd/n 文件描述符 n 的復(fù)制品
/dev/tcp/host/port Bash 在 port 打開到 host 的 TCP 連接
/dev/udp/host/port Bash 在 port 打開到 host 的 UDP 連接

相關(guān)文章

  • 一天一個shell命令 linux文本內(nèi)容操作系列-awk命令詳解

    一天一個shell命令 linux文本內(nèi)容操作系列-awk命令詳解

    awk是一個強大的文本分析工具,相對于grep的查找,sed的編輯,awk在其對數(shù)據(jù)分析并生成報告時,顯得尤為強大。簡單來說awk就是把文件逐行的讀入,以空格為默認(rèn)分隔符將每行切片,切開的部分再進行各種分析處理
    2016-06-06
  • shell腳本中常見的一些特殊符號和作用詳解

    shell腳本中常見的一些特殊符號和作用詳解

    這篇文章主要介紹了shell腳本中常見的一些特殊符號和它的作用詳解,總結(jié)的很簡潔,容易看懂,需要的朋友可以參考下
    2014-06-06
  • shell函數(shù)內(nèi)調(diào)用另一個函數(shù)(不帶返回值和帶返回值)

    shell函數(shù)內(nèi)調(diào)用另一個函數(shù)(不帶返回值和帶返回值)

    本文主要介紹了shell函數(shù)內(nèi)調(diào)用另一個函數(shù)(不帶返回值和帶返回值),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Linux中shell腳本的jq命令用法詳解

    Linux中shell腳本的jq命令用法詳解

    這篇文章主要介紹了Linux中shell腳本的jq命令用法詳解,?jq是一個輕量級的命令行JSON處理工具,用于解析、過濾、修改和操作JSON數(shù)據(jù),它提供了一種簡潔和靈活的方式來處理JSON數(shù)據(jù),可以與其他命令行工具結(jié)合使用,需要的朋友可以參考下
    2023-07-07
  • Linux查看端口占用lsof -i:port的方法

    Linux查看端口占用lsof -i:port的方法

    下面小編就為大家?guī)硪黄狶inux查看端口占用lsof -i:port的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Shell獲取路徑操作(dirname $0 pwd)的實現(xiàn)

    Shell獲取路徑操作(dirname $0 pwd)的實現(xiàn)

    在shell腳本中經(jīng)常會看到$(cd $(dirname $0); pwd)、basename等操作,本文主要介紹了Shell獲取路徑操作(dirname $0 pwd)的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 通過短信發(fā)送LOG歸類號碼發(fā)送情況的shell腳本

    通過短信發(fā)送LOG歸類號碼發(fā)送情況的shell腳本

    通過短信發(fā)送LOG歸類號碼發(fā)送情況的shell腳本,有需要的朋友可以參考下
    2013-02-02
  • linux中的vi和vim編輯器操作方法

    linux中的vi和vim編輯器操作方法

    這篇文章主要介紹了linux中的vi和vim編輯器操作方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-05-05
  • 5個Shell腳本編程入門練習(xí)例子

    5個Shell腳本編程入門練習(xí)例子

    這篇文章主要介紹了5個Shell腳本編程入門例子,涵蓋了各種操作,又有一些游戲的性質(zhì),作為入門練習(xí)例子是不很不錯的,需要的朋友可以參考下
    2014-06-06
  • expect實現(xiàn)批量修改linux密碼腳本分享

    expect實現(xiàn)批量修改linux密碼腳本分享

    這篇文章主要介紹了expect實現(xiàn)批量修改Linux密碼腳本分享,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下
    2014-12-12

最新評論