<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • linux bash的重定向

    時間:2024-04-27 00:18:34 Linux認(rèn)證 我要投稿
    • 相關(guān)推薦

    關(guān)于linux bash的重定向

      所謂I/O重定向簡單來說就是一個過程,這個過程捕捉一個文件,或者命令,程序,腳本,甚至腳本中的代碼塊(code block)的輸出,然后把捕捉到的輸出,作為輸入發(fā)送給另外一個文件,命令,程序,或者腳本。

      如果談到I/O重定向,就涉及到文件標(biāo)識符(File Descriptor)的概念, 在Linux系統(tǒng)中,系統(tǒng)為每一個打開的文件指定一個文件標(biāo)識符以便系統(tǒng)對文件進(jìn)行跟蹤,這里有些和C語言編程里的文件句柄相似,文件標(biāo)識符是一個數(shù)字,不同數(shù)字代表不同的含義,默認(rèn)情況下,系統(tǒng)占用了3個,分別是0標(biāo)準(zhǔn)輸入(stdin),1標(biāo)準(zhǔn)輸出(stdout), 2標(biāo)準(zhǔn)錯誤(stderr), 另外3-9是保留的標(biāo)識符,可以把這些標(biāo)識符指定成標(biāo)準(zhǔn)輸入,輸出或者錯誤作為臨時連接。通常這樣可以解決很多復(fù)雜的重定向請求。

      標(biāo)準(zhǔn)輸入通常指鍵盤的輸入

      標(biāo)準(zhǔn)輸出通常指顯示器的輸出

      標(biāo)準(zhǔn)錯誤通常也是定向到顯示器

      請看以下例子,來描述一下他們的關(guān)系

      #ls /dev

      這個命令列出/dev目錄下的所有文件,在屏幕上輸出結(jié)果。

      這里 /dev 就是作為命令ls的標(biāo)準(zhǔn)輸入(從鍵盤輸入),而打印在屏幕的結(jié)果就是標(biāo)準(zhǔn)輸出(/dev目錄中的內(nèi)容)

      還是回到標(biāo)題,重定向就是把標(biāo)準(zhǔn)的輸入或者輸出更改成其他的方式,請參看如下例子

      或者等同于

      #ls /dev 1>filename #注意:"1"和">"中間沒有空格

      以上命令會把命令的標(biāo)準(zhǔn)輸出重新定向到一個文件filename,而不是顯示到屏幕上,如果不指明文件標(biāo)識符,系統(tǒng)默認(rèn)的就是1, 因此1可以省略

      如果把上面例子重的">"改成">>"則表示把輸出追加到filename文件的末尾,如果文件不存在則創(chuàng)建它。如下

      #ls /dev >>filename

      也可以把標(biāo)準(zhǔn)錯誤重新定向到文件

      #ls -qw /dev 2>filename

      顯然 -qw是一個錯誤參數(shù),通常會在顯示器上報告一個錯誤信息,但由于把2標(biāo)準(zhǔn)錯誤(stderr)重新定向到了文件filename,因此顯示器沒有錯誤信息,而信息寫到了文件里面

      以下命令是把標(biāo)準(zhǔn)輸出和錯誤都定向到文件

      #ls /dev &>filename

      "&"在這里代表標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤,這里無論是正常輸出還是錯誤信息都寫到filename中了。

      重新定義標(biāo)準(zhǔn)輸入,輸出,和錯誤的文件標(biāo)識符

      重新定義文件標(biāo)識符可以用i>&j命令,表示把文件標(biāo)識符i重新定向到j(luò),你可以把"&"理解為"取地址"

      請看以下例子

      #exec 5>&1

      表示把文件標(biāo)識符5定向到標(biāo)準(zhǔn)輸出,這個命令通常用來臨時保存標(biāo)準(zhǔn)輸入。

      同樣標(biāo)準(zhǔn)輸入也是可以重新定向的,請參考下面例子

      # grep search-word

      一般來說grep命令在給定文件中搜索字符串,以上命令把文件filename作為grep命令的標(biāo)準(zhǔn)輸入,而不是從鍵盤輸入。

      前面曾經(jīng)提到,系統(tǒng)為每一個打開的文件指定一個文件標(biāo)識符以便系統(tǒng)對文件進(jìn)行跟蹤,那么默認(rèn)的文件標(biāo)識符是什么呢?答案是0,也就是標(biāo)準(zhǔn)輸入,或者可以說從鍵盤輸入。當(dāng)然這個文件標(biāo)識符也可以自己指定,請參考下面例子

      #echo 123456789 >filename 把字符串寫到文件filename中 #exec 3<>filename 把文件filename打開,并指定文件標(biāo)識符為3 #read -n 4 <&3 從文件中讀4個字符,句柄已經(jīng)指到第四個字符末尾 #echo -n . >&3 在第5個字符處寫一個點(diǎn),覆蓋第5個字符,-n表示不換行 #exec 3>&- 關(guān)閉文件標(biāo)識符3

      現(xiàn)在cat filename文件的結(jié)果就成了1234.6789

      命令j<>filename表示把文件打開,并指明文件標(biāo)識符為j

      "&-"表示關(guān)閉文件標(biāo)識符

      有關(guān)關(guān)閉文件標(biāo)識符的操作請參考下面

      n<&- 關(guān)閉輸入文件標(biāo)識符n 0<&-或<&- 關(guān)閉標(biāo)準(zhǔn)輸入stdin n>&- 關(guān)閉輸出文件標(biāo)識符n 1>&-或>&-關(guān)閉標(biāo)準(zhǔn)輸出stdout

      另外還有一些其他命令,如下參考

      2. :> filename 或者 > filename

      表示把文件filename設(shè)置成空,也就是清空文件內(nèi)容,如果文件不存在,則創(chuàng)建一個空文件,(等同于touch命令) :表示一個空輸出,兩個命令的唯一區(qū)別就是>filename不是在所有shell都可以正常工作的。


    【linux bash的重定向】相關(guān)文章:

    Linux認(rèn)證系統(tǒng)管理:認(rèn)識與學(xué)習(xí)bash03-18

    Linux認(rèn)證考點(diǎn)03-19

    Linux認(rèn)證的概念03-25

    Linux認(rèn)證概念03-19

    Linux認(rèn)證優(yōu)勢03-19

    學(xué)習(xí)Linux的忠告03-21

    Linux認(rèn)證系統(tǒng)管理:linux下搭建ftp03-08

    Linux認(rèn)證基本介紹03-12

    Linux認(rèn)證賬戶映射01-23

    主站蜘蛛池模板: 69SEX久久精品国产麻豆| 精品性影院一区二区三区内射| 99精品全国免费观看视频..| 日韩精品无码一区二区中文字幕| 亚洲AV无码久久精品成人| 无码人妻精品一区二区三区东京热| 亚洲综合精品香蕉久久网| 青草国产精品久久久久久| 91麻豆国产福利精品 | 亚洲综合国产精品第一页 | 亚洲精品无码你懂的网站| 亚洲精品视频在线看| 日本VA欧美VA精品发布| 久久精品国产清高在天天线| 国产精品欧美久久久天天影视| 国产精品久久久久一区二区三区| 老年人精品视频在线| 精品人妻大屁股白浆无码| 精品国产日产一区二区三区| 久久亚洲国产精品五月天婷| 无码国内精品人妻少妇蜜桃视频| 99re8这里有精品热视频免费| 国产亚洲精品无码拍拍拍色欲| 欧美精品久久久久久久自慰| 亚洲综合一区二区精品导航 | 欧美日韩精品系列一区二区三区国产一区二区精品 | 精品久久久久久中文字幕人妻最新| 国产伦精品一区二区三区女| 国产精品综合久成人| 国产精品日韩AV在线播放| 久久九九久精品国产免费直播| 国语精品一区二区三区| 精品视频在线观看你懂的一区| 麻豆成人久久精品二区三区免费| mm1313亚洲国产精品无码试看| 色欲久久久天天天综合网精品 | 久久精品中文騷妇女内射| 国产亚洲精品无码专区| 99精品视频在线| 无码人妻精品一区二区三区在线| 国产精品无码素人福利不卡|