最新国产好看的视频,伊人天堂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這一特殊設(shè)備文件(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)文章

最新評論

鄂州市| 建平县| 驻马店市| 咸阳市| 大港区| 绥江县| 会理县| 萍乡市| 阿图什市| 仪陇县| 苏州市| 沧州市| 武宣县| 昌黎县| 库伦旗| 富顺县| 博客| 嵊州市| 澄迈县| 乌拉特中旗| 遵义市| 普兰店市| 延长县| 新竹市| 鸡西市| 宾阳县| 墨脱县| 凤凰县| 柘城县| 盐津县| 新建县| 沙雅县| 革吉县| 马龙县| 龙川县| 韶山市| 平阴县| 建阳市| 资兴市| 揭阳市| 永春县|