最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

linux輸入輸出重定向使用詳解

 更新時間:2014年01月05日 10:21:48   作者:  
linux中使用重定向符號可以實現(xiàn)輸出輸入重定向,默認條件下,標準輸出和錯誤輸出都是終端,用重定向符號可以把標準輸出和錯誤內(nèi)容進行重定向,例如把標準輸出重定向到文件,看下面的詳細解釋

1. 輸出重定向:

默認條件下,標準輸出和錯誤輸出都是終端,可以把標準輸出和錯誤內(nèi)容進行重定向:

復制代碼 代碼如下:

[~]# echo "hello\!"
hello\!
[~]# echo "hello!"
-bash: !": event not found "

把標準輸出重定向到文件

復制代碼 代碼如下:

[~]# echo "hello" > test.sh
[~]# cat test.sh
hello
'>'輸出方式默認等價'1>'
[~]#  echo "hello" 1> test.sh
[~]# cat test.sh
hello

但是錯誤內(nèi)容還是會顯示在屏幕上:

復制代碼 代碼如下:

[~]$cat edit.sql /root/test.sh > temp.sh
cat: /root/test.sh: Permission denied

可以把錯誤內(nèi)容也輸出到文件中(利用文件描述符):

復制代碼 代碼如下:

[~]$cat edit.sql /root/test.sh 1> temp.sh 2> error.sh
[~]$cat temp.sh
select           dbms_rowid.rowid_object('AAAZdQAAGAAATxjAAk') data_object_id#,
dbms_rowid.rowid_relative_fno('AAAZdQAAGAAATxjAAk') rfile#,
dbms_rowid.rowid_block_number('AAAZdQAAGAAATxjAAk') block#,
dbms_rowid.rowid_row_number('AAAZdQAAGAAATxjAAk') row# from dual
/
[~]$cat error.sh
cat: /root/test.sh: Permission denied

把標準輸出和錯誤信息寫入同一個文件:

復制代碼 代碼如下:

[~]$cat edit.sql /root/test.sh > temp.sh 2>&1
[~]$cat temp.sh
select           dbms_rowid.rowid_object('AAAZdQAAGAAATxjAAk') data_object_id#,
dbms_rowid.rowid_relative_fno('AAAZdQAAGAAATxjAAk') rfile#,
dbms_rowid.rowid_block_number('AAAZdQAAGAAATxjAAk') block#,
dbms_rowid.rowid_row_number('AAAZdQAAGAAATxjAAk') row# from dual
/
cat: /root/test.sh: Permission denied

這個看起來比較麻煩,實際應用中可能用的最多的是:

復制代碼 代碼如下:

[~]$cat edit.sql /root/test.sh &>temp.sh
[~]$cat temp.sh
select           dbms_rowid.rowid_object('AAAZdQAAGAAATxjAAk') data_object_id#,
dbms_rowid.rowid_relative_fno('AAAZdQAAGAAATxjAAk') rfile#,
dbms_rowid.rowid_block_number('AAAZdQAAGAAATxjAAk') block#,
dbms_rowid.rowid_row_number('AAAZdQAAGAAATxjAAk') row# from dual
/
cat: /root/test.sh: Permission denied
&>把所有輸出都寫入同一個文件

如果不想輸出到文件,也不想在屏幕上顯示,可以利用/dev/null這一特殊設備文件(bit bucket)
[~]$cat edit.sql /root/test.sh &>/dev/null
如果把標準輸出寫入到文件,就沒法利用管道符號'|'把內(nèi)容傳給接下來的命令,可以利用tee命令解決這個問題:

復制代碼 代碼如下:

[~]$cat edit.sql /root/test.sh | tee temp.sh | cat -n
cat: /root/test.sh: Permission denied
select           dbms_rowid.rowid_object('AAAZdQAAGAAATxjAAk') data_object_id#,
             dbms_rowid.rowid_relative_fno('AAAZdQAAGAAATxjAAk') rfile#,
             dbms_rowid.rowid_block_number('AAAZdQAAGAAATxjAAk') block#,
               dbms_rowid.rowid_row_number('AAAZdQAAGAAATxjAAk') row# from dual
/


tee命令相當于把stdout副本寫入文件,再把stdout傳給下一個命令,但是錯誤內(nèi)容是無法用tee傳遞的,如同使用>>追加內(nèi)容,tee可以使用-a選項追加:

復制代碼 代碼如下:

[~]$cat edit.sql /root/test.sh | tee -a temp.sh | cat -n
cat: /root/test.sh: Permission denied
select           dbms_rowid.rowid_object('AAAZdQAAGAAATxjAAk') data_object_id#,
             dbms_rowid.rowid_relative_fno('AAAZdQAAGAAATxjAAk') rfile#,
            dbms_rowid.rowid_block_number('AAAZdQAAGAAATxjAAk') block#,
               dbms_rowid.rowid_row_number('AAAZdQAAGAAATxjAAk') row# from dual
/
[~]$cat temp.sh
select           dbms_rowid.rowid_object('AAAZdQAAGAAATxjAAk') data_object_id#,
dbms_rowid.rowid_relative_fno('AAAZdQAAGAAATxjAAk') rfile#,
dbms_rowid.rowid_block_number('AAAZdQAAGAAATxjAAk') block#,
dbms_rowid.rowid_row_number('AAAZdQAAGAAATxjAAk') row# from dual
/
select           dbms_rowid.rowid_object('AAAZdQAAGAAATxjAAk') data_object_id#,
dbms_rowid.rowid_relative_fno('AAAZdQAAGAAATxjAAk') rfile#,
dbms_rowid.rowid_block_number('AAAZdQAAGAAATxjAAk') block#,
dbms_rowid.rowid_row_number('AAAZdQAAGAAATxjAAk') row# from dual
/

2.輸入重定向

輸入重定向,在一些場合,例如數(shù)據(jù)庫監(jiān)控中用的比較多,常見的是使用內(nèi)聯(lián)重定向

復制代碼 代碼如下:

[~]$cat < edit.sql
select           dbms_rowid.rowid_object('AAAZdQAAGAAATxjAAk') data_object_id#,
dbms_rowid.rowid_relative_fno('AAAZdQAAGAAATxjAAk') rfile#,
dbms_rowid.rowid_block_number('AAAZdQAAGAAATxjAAk') block#,
dbms_rowid.rowid_row_number('AAAZdQAAGAAATxjAAk') row# from dual
/

例如,如下操作,把 <<EOF > temp.sh到最后EOF之間的內(nèi)容當作stdin,然后把stdout寫入文件temp.sh

復制代碼 代碼如下:

[~]$cat <<EOF > temp.s
this is my log
EOF
[~]$cat temp.sh
this is my log

3.自定義文件描述符:

自定義文件描述符的原理是使用基本的三種文件打開模式
只讀(<)
截斷(>)
追加(>>)
創(chuàng)建一個文件描述符3,用于打開文件
[~]# exec 3< test.sh
下面就可以直接使用文件描述符打開文件了,但是只能使用一次:

復制代碼 代碼如下:

[~]# cat <&3
hello
hello

創(chuàng)建文件描述符4,用于寫入文件(可以復用):

復制代碼 代碼如下:

[~]# exec 4>test.sh
[~]# echo okok >&4
[~]# cat test.sh
okok

這個實際類似前面的:

復制代碼 代碼如下:

[~]$cat edit.sql /root/test.sh > temp.sh 2>&1

創(chuàng)建文件描述符5,用于向文件追加內(nèi)容(也可以復用,不像輸入文件描述符那樣只能使用1次):

復制代碼 代碼如下:

[~]# exec 5>>test.sh
[~]# echo okokok >&5
[~]# cat test.sh    
okokok
[~]# echo okokok >&5
[~]# cat test.sh   
okokok
okokok

相關(guān)文章

最新評論

城口县| 怀仁县| 临江市| 崇义县| 嵩明县| 綦江县| 玉龙| 台北县| 肥西县| 武定县| 东兴市| 辉南县| 金华市| 象山县| 通海县| 永兴县| 门头沟区| 沙田区| 河西区| 英超| 赤壁市| 广丰县| 泸水县| 峨眉山市| 三原县| 泰宁县| 海丰县| 垦利县| 沂源县| 鹤庆县| 卢湾区| 承德市| 建始县| 横山县| 信宜市| 海兴县| 合阳县| 女性| 衡阳县| 东乡| 西丰县|