99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

3.1 輸入輸出重定向

2022-05-27 09:58 更新

既然我們已經(jīng)在上一章學(xué)完了幾乎所有基礎(chǔ)且常用的Linux命令,那么接下來(lái)的任務(wù)就是把多個(gè)Linux命令適當(dāng)?shù)亟M合到一起,使其協(xié)同工作,以便我們更加高效地處理數(shù)據(jù)。要做到這一點(diǎn),就必須搞明白命令的輸入重定向和輸出重定向的原理。

簡(jiǎn)而言之,輸入重定向是指把文件導(dǎo)入到命令中,而輸出重定向則是指把原本要輸出到屏幕的數(shù)據(jù)信息寫(xiě)入到指定文件中。在日常的學(xué)習(xí)和工作中,相較于輸入重定向,我們使用輸出重定向的頻率更高,所以又將輸出重定向分為了標(biāo)準(zhǔn)輸出重定向和錯(cuò)誤輸出重定向兩種不同的技術(shù),以及清空寫(xiě)入與追加寫(xiě)入兩種模式。聽(tīng)起來(lái)就很玄妙?劉遄老師接下來(lái)將慢慢道來(lái)。

標(biāo)準(zhǔn)輸入重定向(STDIN,文件描述符為0):默認(rèn)從鍵盤(pán)輸入,也可從其他文件或命令中輸入。

標(biāo)準(zhǔn)輸出重定向(STDOUT,文件描述符為1):默認(rèn)輸出到屏幕。

錯(cuò)誤輸出重定向(STDERR,文件描述符為2):默認(rèn)輸出到屏幕。

比如我們分別查看兩個(gè)文件的屬性信息,其中第二個(gè)文件是不存在的,雖然針對(duì)這兩個(gè)文件的操作都分別會(huì)在屏幕上輸出一些數(shù)據(jù)信息,但這兩個(gè)操作的差異其實(shí)很大:

    [root@linuxprobe ~]# touch linuxprobe
    [root@linuxprobe ~]# ls -l linuxprobe 
    -rw-r--r--. 1 root root 0 Aug 5 05:35 linuxprobe
    [root@linuxprobe ~]# ls -l xxxxxx
    ls: cannot access xxxxxx: No such file or directory

在上述命令中,名為linuxprobe的文件是存在的,輸出信息是該文件的一些相關(guān)權(quán)限、所有者、所屬組、文件大小及修改時(shí)間等信息,這也是該命令的標(biāo)準(zhǔn)輸出信息。而名為xxxxxx的第二個(gè)文件是不存在的,因此在執(zhí)行完ls命令之后顯示的報(bào)錯(cuò)提示信息也是該命令的錯(cuò)誤輸出信息。那么,要想把原本輸出到屏幕上的數(shù)據(jù)轉(zhuǎn)而寫(xiě)入到文件當(dāng)中,就要區(qū)別對(duì)待這兩種輸出信息。

對(duì)于輸入重定向來(lái)講,用到的符號(hào)及其作用如表3-1所示。

表3-1 輸入重定向中用到的符號(hào)及其作用

符號(hào) 作用
命令 < 文件 將文件作為命令的標(biāo)準(zhǔn)輸入
命令 << 分界符 從標(biāo)準(zhǔn)輸入中讀入,直到遇見(jiàn)分界符才停止
命令 < 文件1 > 文件2 將文件1作為命令的標(biāo)準(zhǔn)輸入并將標(biāo)準(zhǔn)輸出到文件2

表3-2 輸出重定向中用到的符號(hào)及其作用

符號(hào) 作用
命令 > 文件 將標(biāo)準(zhǔn)輸出重定向到一個(gè)文件中(清空原有文件的數(shù)據(jù))
命令 2> 文件 將錯(cuò)誤輸出重定向到一個(gè)文件中(清空原有文件的數(shù)據(jù))
命令 >> 文件 將標(biāo)準(zhǔn)輸出重定向到一個(gè)文件中(追加到原有內(nèi)容的后面)
命令 2>> 文件 將錯(cuò)誤輸出重定向到一個(gè)文件中(追加到原有內(nèi)容的后面)
命令 >> 文件 2>&1 或 命令 &>> 文件 將標(biāo)準(zhǔn)輸出與錯(cuò)誤輸出共同寫(xiě)入到文件中(追加到原有內(nèi)容的后面)

對(duì)于重定向中的標(biāo)準(zhǔn)輸出模式,可以省略文件描述符1不寫(xiě),而錯(cuò)誤輸出模式的文件描述符2是必須要寫(xiě)的。我們先來(lái)小試牛刀。通過(guò)標(biāo)準(zhǔn)輸出重定向?qū)an bash命令原本要輸出到屏幕的信息寫(xiě)入到文件readme.txt中,然后顯示readme.txt文件中的內(nèi)容。具體命令如下:

    [root@linuxprobe ~]# man bash > readme.txt
    [root@linuxprobe ~]# cat readme.txt 
    BASH(1)                     General Commands Manual                    BASH(1)
    NAME
    bash - GNU Bourne-Again SHell


    SYNOPSIS
    bash [options] [file]


    COPYRIGHT
    Bash is Copyright (C) 1989-2011 by the Free Software Foundation, Inc.


    DESCRIPTION
    Bash  is  an  sh-compatible  command language interpreter that executes
    commands read from the standard input or from a file.  Bash also incor‐
    porates useful features from the Korn and C shells (ksh and csh).


    Bash  is  intended  to  be a conformant implementation of the Shell and
    Utilities portion  of  the  IEEE  POSIX  specification  (IEEE  Standard
    1003.1).  Bash can be configured to be POSIX-conformant by default.
    ………………省略部分輸出信息………………

有沒(méi)有感覺(jué)到很方便呢?我們接下來(lái)嘗試輸出重定向技術(shù)中的覆蓋寫(xiě)入與追加寫(xiě)入這兩種不同模式帶來(lái)的變化。首先通過(guò)覆蓋寫(xiě)入模式向readme.txt文件寫(xiě)入一行數(shù)據(jù)(該文件中包含上一個(gè)實(shí)驗(yàn)的man命令信息),然后再通過(guò)追加寫(xiě)入模式向文件再寫(xiě)入一次數(shù)據(jù),其命令如下:

    [root@linuxprobe ~]# echo "Welcome to LinuxProbe.Com" > readme.txt
    [root@linuxprobe ~]# echo "Quality linux learning materials" >> readme.txt

在執(zhí)行cat命令之后,可以看到如下所示的文件內(nèi)容:

    [root@linuxprobe ~]# cat readme.txt
    Welcome to LinuxProbe.Com
    Quality linux learning materials

雖然都是輸出重定向技術(shù),但是不同命令的標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出還是有區(qū)別的。例如查看當(dāng)前目錄中某個(gè)文件的信息,這里以linuxprobe文件為例。因?yàn)檫@個(gè)文件是真實(shí)存在的,因此使用標(biāo)準(zhǔn)輸出即可將原本要輸出到屏幕的信息寫(xiě)入到文件中,而錯(cuò)誤的輸出重定向則依然把信息輸出到了屏幕上。

    [root@linuxprobe ~]# ls -l linuxprobe 
    -rw-r--r--. 1 root root 0 Mar  1 13:30 linuxprobe
    [root@linuxprobe ~]# ls -l linuxprobe > /root/stderr.txt 
    [root@linuxprobe ~]# ls -l linuxprobe 2> /root/stderr.txt 
    -rw-r--r--. 1 root root 0 Mar  1 13:30 linuxprobe

如果想把命令的報(bào)錯(cuò)信息寫(xiě)入到文件,該怎么操作呢?當(dāng)用戶在執(zhí)行一個(gè)自動(dòng)化的Shell腳本時(shí),這個(gè)操作會(huì)特別有用,而且特別實(shí)用,因?yàn)樗梢园颜麄€(gè)腳本執(zhí)行過(guò)程中的報(bào)錯(cuò)信息都記錄到文件中,便于安裝后的排錯(cuò)工作。接下來(lái)我們以一個(gè)不存在的文件進(jìn)行實(shí)驗(yàn)演示:

    [root@linuxprobe ~]# ls -l xxxxxx 
    cannot access xxxxxx: No such file or directory
    [root@linuxprobe ~]# ls -l xxxxxx > /root/stderr.txt
    cannot access xxxxxx: No such file or directory
    [root@linuxprobe ~]# ls -l xxxxxx 2> /root/stderr.txt
    [root@linuxprobe ~]# cat /root/stderr.txt 
    ls: cannot access xxxxxx: No such file or directory

輸入重定向相對(duì)來(lái)說(shuō)有些冷門(mén),在工作中遇到的概率會(huì)小一點(diǎn)。輸入重定向的作用是把文件直接導(dǎo)入到命令中。接下來(lái)使用輸入重定向把readme.txt文件導(dǎo)入給wc -l命令,統(tǒng)計(jì)一下文件中的內(nèi)容行數(shù)。

    [root@linuxprobe ~]# wc -l < readme.txt
    2

上述命令實(shí)際上等同于接下來(lái)要學(xué)習(xí)的cat readme.txt | wc -l的管道符命令組合。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)