<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    九:輸入與輸出,重定向

    目前我們用到的大多數命令都是有輸入和輸出的,這不難理解,一個命令可能需要得到一個用戶指定的參數去執行,然后把執行的結果反饋給用戶。當然,這個命令可能不需要人為的指定要輸入的參數,會自帶默認的參數,比如:pwd;也許,命令給出的信息不是理想的結果,比如ls一個不存在的目錄或者文件,命令給出了錯誤提示。
    以上種種,都是程序所涉及的輸入與輸出常見途徑。就輸入而言,很多程序都從一個叫標準輸入的設備得到輸入信息,不難想到,這個設備就是我們的鍵盤,命令行下大多數操作都是通過鍵盤完成。而輸出分為兩種,標準輸出和標準錯誤,通常,這兩個輸出都會直接連接到屏幕,而不是保存到磁盤文件

    標準輸出:


    標準錯誤:


    重定向,就是允許我們自己重新確定輸入和輸出信息的流向。
    要實現重定向,我們需要用到重定向符“>”,這個符號很形象,像沙漏一樣,可以理解為從什么到什么。
    以往,我們使用“ls -l /”,會將程序的結果輸出到屏幕上,現在,我們使用重定向,將這個結果保存到一個文件中。“ls -l / > /testls.txt”,使用“>”,把程序的輸出結果,從標準輸出(屏幕)重定向到指定的文件。

    *之前提到過,“touch”命令是新建文件的一種手段,現在,我們知道了幫助命令,我們可以得知,“touch”命令的本來作用是更新目標文件的訪問和修改時間為當前時間,當目標文件不存在時才會新建一個以目標文件命名的文件,在重定向中,我們指定的重定向目標文件不存在時,也會新建一個文件。這也是新增文件的一種手段。可以說,當有輸出發生的時候,目標文件不存在,那么會新增一個文件。

    文件查看命令:cat
    cat命令的作用是連接到一個文件,并把文件內容輸出到標準輸出
    好了,我們查看一下剛才重定向的文件
    示例:cat /testls.txt
    呃,并沒有高亮顯示來區別文件內容,畢竟不是“ls”命令有高亮顯示,保存的只是純文本信息。

    我們再嘗試一下重定向錯誤信息到testls.txt文件

    文件之前保存的內容也不見了!之所以會這樣,是因為我們只指定了標準輸出的重定向,但是標準輸出因為錯誤而中斷了(目標文件不存在,所以壓根沒有輸出),所以標準輸出沒有任何內容。

    *所以直接使用重定向符號“> something.txt”會直接創建一個空文件,或者清空同名文件的內容

    重定向追加操作符“>>”
    當我們把“ls -l / > /testls.txt”改為“ls -l / >> /testls.txt”,那么意味著,如果目標文件不存在,會新建一個目標文件,并將標準輸出輸出到該文件,如果存在,那么會將標準輸出追加到該文件的尾部。

    重定向標準錯誤
    為了能使用重定向錯誤,我們需要先知道,Linux在執行一個程序的時候會打開多個流,我們把前三個看做標準輸入,標準輸出,標準錯誤,他們在shell中有各自的文件描述符(可以理解為流編號),分別是0,1,2,當我們使用“>”重定向標準輸出時,我們實際上是重定向了文件描述符為1的流,也就是說
    “ls . > a.txt”等同于”ls . 1> a.txt”

    那么重定向標準錯誤也就是
    “ls null 2> a.txt”
    假定null是一個不存在的文件,命令執行之后,產生的錯誤信息會重定向到你指定的文件。

    還可以使用“>&”(或者“&>”)來把標準輸出和標準錯誤都重定向到一個位置
    “ls null >& a.txt”

    這樣,兩種輸出信息都會寫到a.txt中。這是一種聯合的寫法,可以更具體去寫
    “ls null > a.txt 2>&1“重定向標準輸出到a.txt文件,然后重定向標準錯誤到標準輸出。這里要注意順序,需要先重定向標準輸出,再重定向標準錯誤,如果順序反過來,那么標準錯誤會重定向到屏幕。

    為了能更好的了解這些數字所對應輸入輸出的關系,我們進一步來說明一下。在Linux中,一切皆文件,設備也是如此,我們查看一下設備掛載點

    其中我們看到,有stderr,stdin,stdout三個軟連接,他們分別指向了proc掛載點下的三個文件,在這里,我們其實已經能找到文件描述符和輸入輸出的對應關系,文件描述符0,1,2都指向了同一個設備/dev/pts/0,這個設備中前三個流我們使用文件描述符0,1,2來規定為標準輸入,輸出和錯誤。這里額外說一句,為什么文件描述符會指向/dev/pts/0這個設備呢,因為演示的時候是使用的裝有Xwindow圖形界面的Linux,我們是在使用一個叫終端控制臺的東西在和shell進行交互,在這種情況下,/dev/pts/n(n代表序號,0代表當前終端,1代表第一個,2代表第二個,以此類推)是在Xwindow模式下的偽終端。如果在純Shell環境下,我們使用的設備將不是/dev/pts/n,而是/dev/tty1。關于終端的更多信息,可以自行查閱。

    Xwindow:


    Shell:


    重定向標準輸入
    剛才我們使用了cat命令,cat命令的標準輸入是什么呢?之前我們指定了一個文件作為cat命令的標準輸入,倘若不指定文件呢?

    我們發現命令行正在等待我們的輸入,是的,我們沒有指定文件作為cat的標準輸入,所以cat就查找默認的標準輸入:鍵盤,我們輸入一段字符,按下“ctrl+d”來通知cat已經完成寫入,按下回車,我們剛才鍵入的文字出現在了屏幕上。
    好了,重定向的功能已經實現了,不是么,但是這里我們并沒有使用重定向符號”>”,對于cat命令,我們可以
    cat < someText.txt 來重定向cat的標準輸入
    *”<“和“>”,還有”>>”都可以重定向

    Linux里的黑洞,神話中的貔貅,/dev/null文件
    我想已經能夠很清楚的描述/dev/null的作用了,首先/dev/null是一個文件,通過文獻,也可以得知他叫“位存儲桶”,他能處理掉任何寫入他的信息,換言之,寫入后不作任何處理。如果我們重定向輸出到位存儲桶,那么他既不會存儲,也不會輸出,但是會提示寫入成功。用來處理異常信息是個不錯的選擇。

    連接命令間的輸入與輸出,管道線
    管道線,寫作“|”,對,很形象,作用也很形象,就是連接命令之間的輸入和輸出。
    示例:
    “ls -l / | cat”,加不加管道線聯合cat都會在屏幕上輸出,雖然在這里,管道線看上去沒什么作用,但是再看下面這個例子
    “ps -ef|grep XXX”,簡而言之就是,找到我們所需的進程,ps命令執行之后會在屏幕上展示當前所有進程,通過管道線,將這個輸出作為grep命令的輸入,找到匹配我們給定字符的行并在屏幕上展示

    posted on 2015-06-27 15:24 都較瘦 閱讀(161) 評論(0)  編輯  收藏 所屬分類: Linux

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    公告

    博客定位:囿于目前的水平,博客定位在記錄自己的學習心得和隨手的練習

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久亚洲精品高潮综合色a片| 亚洲一级毛片免费看| 美女被免费视频网站a| 免费的一级片网站| 亚洲精品GV天堂无码男同| 天天拍拍天天爽免费视频| 亚洲高清有码中文字| 成人毛片18女人毛片免费| 亚洲大尺度无码无码专线一区| 特级淫片国产免费高清视频| 国产成人人综合亚洲欧美丁香花 | 97在线视频免费| 亚洲特级aaaaaa毛片| 夜夜爽免费888视频| 真正全免费视频a毛片| 久久综合亚洲色HEZYO国产| 国产在线观看无码免费视频| 亚洲AV无码码潮喷在线观看| 91高清免费国产自产拍2021| 亚洲精品亚洲人成在线播放| 免费鲁丝片一级在线观看| 一级毛片免费不卡| 亚洲AV无码专区电影在线观看| 在线观看永久免费| 亚洲精品无码mⅴ在线观看| 亚洲A∨精品一区二区三区| 国产真人无码作爱视频免费 | 国产v片免费播放| 精品一区二区三区免费观看| 久久久亚洲欧洲日产国码是AV| 无码日韩精品一区二区免费| 黄页网站在线观看免费| 久久精品亚洲综合专区| 久久不见久久见中文字幕免费| 边摸边吃奶边做爽免费视频网站| 亚洲av无码一区二区三区网站| 成人免费AA片在线观看| 羞羞视频免费网站日本| 亚洲综合激情六月婷婷在线观看| 国产一级做a爱免费视频| 人妻无码久久一区二区三区免费|