婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 詳解shell中;/dev/null 2;&1到底是什么

詳解shell中;/dev/null 2;&1到底是什么

熱門標簽:江西全自動外呼系統報價 梧州防封電銷卡 地圖標注人員分布 400的電話一般從哪里辦理 怎么用百度地圖標注坐標 益陽400電話申請辦理流程 春運地圖標注app 上海機器人外呼系統哪家好 昆明電銷機器人價格

前言

相信大家經常能在shell腳本中發現>/dev/null 2>1這樣的語句。以前的我并沒有去深入地理解這段命令的作用,照搬照用,直到上周我將這段命令不小心寫成了2>1 >/dev/null,出了一點小問題之后,我才開始去了解這段命令背后的“玄機”。

shell重定向介紹

就像我們平時寫的程序一樣,一段程序會處理外部的輸入,然后將運算結果輸出到指定的位置。在交互式的程序中,輸入來自用戶的鍵盤和鼠標,結果輸出到用戶的屏幕,甚至播放設備中。而對于某些后臺運行的程序,輸入可能來自于外部的一些文件,運算的結果通常又寫到其他的文件中。而且程序在運行的過程中,會有一些關鍵性的信息,比如異常堆棧,外部接口調用情況等,這些都會統統寫到日志文件里。

shell腳本也一樣,但是我們一般在使用shell命令的時候,更多地還是通過鍵盤輸入,然后在屏幕上查看命令的執行結果。如果某些情況下,我們需要將shell命令的執行結果存儲到文件中,那么我們就需要使用輸入輸出的重定向功能。

文件描述符

當執行shell命令時,會默認打開3個文件,每個文件有對應的文件描述符來方便我們使用:

類型 文件描述符 默認情況 對應文件句柄位置
標準輸入(standard input) 0 從鍵盤獲得輸入 /proc/self/fd/0
標準輸出(standard output) 1 輸出到屏幕(即控制臺) /proc/self/fd/1
錯誤輸出(error output) 2 輸出到屏幕(即控制臺) /proc/self/fd/2

所以我們平時在執行shell命令中,都默認是從鍵盤獲得輸入,并且將結果輸出到控制臺上。但是我們可以通過更改文件描述符默認的指向,從而實現輸入輸出的重定向。比如我們將1指向文件,那么標準的輸出就會輸出到文件中。

輸出重定向

輸出重定向的使用方式很簡單,基本的一些命令如下:

命令 介紹
command >filename 把標準輸出重定向到新文件中
command 1>filename 同上
command >>filename 把標準輸出追加到文件中
command 1>>filename 同上
command 2>filename 把標準錯誤重定向到新文件中
command 2>>filename 把標準錯誤追加到新文件中

我們使用>或者>>對輸出進行重定向。符號的左邊表示文件描述符,如果沒有的話表示1,也就是標準輸出,符號的右邊可以是一個文件,也可以是一個輸出設備。當使用>時,會判斷右邊的文件存不存在,如果存在的話就先刪除,然后創建一個新的文件,不存在的話則直接創建。但是當使用>>進行追加時,則不會刪除原來已經存在的文件。

為了更好地理解輸出重定向,感受重定向的“魅力”,我們看一下以下的例子:我們創建一個測試目錄,目錄下面僅有一個a.txt文件。

# tree
.
└── a.txt
0 directories, 1 file
# ls a.txt b.txt
ls: 無法訪問b.txt: 沒有那個文件或目錄
a.txt

在我們執行ls a.txt b.txt之后,一共有兩種輸出,其中ls: 無法訪問b.txt: 沒有那個文件或目錄是錯誤輸出,a.txt是標準輸出。

# ls a.txt b.txt 1>out
ls: 無法訪問b.txt: 沒有那個文件或目錄
# cat out
a.txt
# ls a.txt b.txt >>out
ls: 無法訪問b.txt: 沒有那個文件或目錄
# cat out
a.txt
a.txt

在上述命令中,我們將原來的標準輸出重定向到了out文件中,所以控制臺只剩下了錯誤提示。并且當執行了追加操作時,out文件的內容非但沒有被清空,反而又多了一條a.txt。

同理,我們也可以將錯誤輸出重定向到文件中:

# ls a.txt b.txt 2>err
a.txt
# cat err
ls: 無法訪問b.txt: 沒有那個文件或目錄
# ls a.txt b.txt >out 2>err
# cat out
a.txt
# cat err
ls: 無法訪問b.txt: 沒有那個文件或目錄

看到這里,朋友們可能會發現>out 2>err和我們在一開頭提到的>/dev/null 2>1已經很像了,別急,這待會再說。

輸入重定向

在理解了輸出重定向之后,理解輸入重定向就會容易得多。對輸入重定向的基本命令如下:

命令 介紹
command filename 以filename文件作為標準輸入
command 0filename 同上
command delimiter 從標準輸入中讀入,直到遇到delimiter分隔符

我們使用對輸入做重定向,如果符號左邊沒有寫值,那么默認就是0。

我們這次以cat命令為例,如果cat后面沒有跟文件名的話,那它的作用就是將標準輸入(比如鍵盤)回顯到標準輸出(比如屏幕)上:

# cat
123
123
test
test

我們可以將利用輸入重定向,將我們在鍵盤上敲入的字符寫入到文件中。我們需要使用ctrl+c來結束輸入:

# cat >out
123
test
^C
# cat out
123
test

好了,此時我們覺得自己在鍵盤上敲比較累,還是直接讓cat讀取一個文件吧。那么我們需要利用輸入重定向:

# cat input
aaa
111
# cat >out input
# cat out
aaa
111

神奇的事情發生了,out文件里面的內容被替換成了input文件里的內容。那么又是什么作用呢?我們再看:

# cat >out end
> 123
> test
> end
# cat out
123
test

我們看到,當我們輸入完cat >out end,然后敲下回車之后,命令并沒有結束,此時cat命令像一開始一樣,等待你給它輸入數據。然后當我們敲入end之后,cat命令就結束了。end之前輸入的字符都已經被寫入到了out文件中。這就是輸入分割符的作用。

高級用法

重定向綁定

好了,在有了以上知識的基礎上,我們再來看開頭提到的>/dev/null 2>1。這條命令其實分為兩命令,一個是>/dev/null,另一個是2>1

1. >/dev/null

這條命令的作用是將標準輸出1重定向到/dev/null中。 /dev/null代表linux的空設備文件,所有往這個文件里面寫入的內容都會丟失,俗稱“黑洞”。那么執行了>/dev/null之后,標準輸出就會不再存在,沒有任何地方能夠找到輸出的內容。

2. 2>1

這條命令用到了重定向綁定,采用可以將兩個輸出綁定在一起。這條命令的作用是錯誤輸出將和標準輸出同用一個文件描述符,說人話就是錯誤輸出將會和標準輸出輸出到同一個地方。

linux在執行shell命令之前,就會確定好所有的輸入輸出位置,并且從左到右依次執行重定向的命令,所以>/dev/null 2>1的作用就是讓標準輸出重定向到/dev/null中(丟棄標準輸出),然后錯誤輸出由于重用了標準輸出的描述符,所以錯誤輸出也被定向到了/dev/null中,錯誤輸出同樣也被丟棄了。執行了這條命令之后,該條shell命令將不會輸出任何信息到控制臺,也不會有任何信息輸出到文件中。

>/dev/null 2>1 VS 2>1 >/dev/null

再回到文章的開頭,我說我弄反了>/dev/null2>1拼裝的順序,導致出了一點小問題。乍眼看這兩條命令貌似是等同的,但其實大為不同。剛才提到了,linux在執行shell命令之前,就會確定好所有的輸入輸出位置,并且從左到右依次執行重定向的命令。那么我們同樣從左到右地來分析2>1 >/dev/null

2>1,將錯誤輸出綁定到標準輸出上。由于此時的標準輸出是默認值,也就是輸出到屏幕,所以錯誤輸出會輸出到屏幕。
>/dev/null,將標準輸出1重定向到/dev/null中。

我們用一個表格來更好地說明這兩條命令的區別:

命令 標準輸出 錯誤輸出
>/dev/null 2>1 丟棄 丟棄
2>1 >/dev/null 丟棄 屏幕

>/dev/null 2>1 VS >/dev/null 2>/dev/null

那么可能會有些同學會疑問,為什么要用重定向綁定,而不是像>/dev/null 2>/dev/null這樣子重復一遍呢。

為了回答這個問題,我們回到剛才介紹輸出重定向的場景。我們嘗試將標準輸出和錯誤輸出都定向到out文件中:

# ls a.txt b.txt >out 2>out
# cat out
a.txt
無法訪問b.txt: 沒有那個文件或目錄

WTF?竟然出現了亂碼,這是為啥呢?這是因為采用這種寫法,標準輸出和錯誤輸出會搶占往out文件的管道,所以可能會導致輸出內容的時候出現缺失、覆蓋等情況。現在是出現了亂碼,有時候也有可能出現只有error信息或者只有正常信息的情況。不管怎么說,采用這種寫法,最后的情況是無法預估的。

而且,由于out文件被打開了兩次,兩個文件描述符會搶占性的往文件中輸出內容,所以整體IO效率不如>/dev/null 2>1來得高。

nohup結合

我們經常使用nohup command 命令形式來啟動一些后臺程序,比如一些java服務:

# nohup java -jar xxxx.jar 

為了不讓一些執行信息輸出到前臺(控制臺),我們還會加上剛才提到的>/dev/null 2>1命令來丟棄所有的輸出:

# nohup java -jar xxxx.jar >/dev/null 2>1 

總結

本文主要介紹了linux重定向的原理以及一些基本命令,并且詳細地分析了>/dev/null 2>1這個命令以及一些注意點。

總而言之,在工作中用到最多的就是nohup command >/dev/null 2>1 命令,希望大家能夠好好掌握。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

您可能感興趣的文章:
  • shell中1小于/dev/null 2大于1的含義
  • PowerShell中的特殊變量$null介紹和創建多行注釋小技巧
  • shell腳本中 /dev/null 的用法小結

標簽:九江 新疆 贛州 懷化 北京 亳州 河南 惠州

巨人網絡通訊聲明:本文標題《詳解shell中;/dev/null 2;&1到底是什么》,本文關鍵詞  詳解,shell,中,dev,null,amp,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解shell中;/dev/null 2;&1到底是什么》相關的同類信息!
  • 本頁收集關于詳解shell中;/dev/null 2;&1到底是什么的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    五月开心婷婷久久| 欧美成人艳星乳罩| 在线成人高清不卡| 精品国产乱码91久久久久久网站| 国产日韩v精品一区二区| 自拍偷自拍亚洲精品播放| 亚洲影院久久精品| 国精品**一区二区三区在线蜜桃| av欧美精品.com| 欧美日韩免费观看一区二区三区| 精品国产免费一区二区三区四区 | 亚洲一区二区三区四区五区黄 | 精品国产乱码久久久久久1区2区| 国产欧美一区二区精品忘忧草 | 欧美日韩亚洲综合在线 | 国产成人午夜电影网| 一本一道久久a久久精品| 日韩一区二区三区免费看| 国产欧美日韩激情| 亚洲国产精品一区二区www| 国产一区二区三区在线观看精品 | 亚洲高清免费一级二级三级| 国内精品视频666| 欧美在线视频日韩| 欧美激情一区二区三区| 午夜av一区二区三区| 成人一级片网址| 日韩一区二区在线观看视频播放| 国产精品国产三级国产aⅴ原创 | 国产亚洲一区二区三区四区 | 7777精品伊人久久久大香线蕉完整版| 久久精品一区蜜桃臀影院| 婷婷六月综合亚洲| 91亚洲精品久久久蜜桃网站| 精品国产电影一区二区| 亚洲va韩国va欧美va| 粉嫩av一区二区三区粉嫩| 日韩一区二区在线观看视频播放| 一区二区三区色| 岛国精品一区二区| 日韩精品一区二区三区在线| 亚洲午夜激情网站| av亚洲精华国产精华精| 国产亚洲va综合人人澡精品| 开心九九激情九九欧美日韩精美视频电影| 色成年激情久久综合| 中文在线一区二区| 国产高清不卡二三区| 日韩精品中午字幕| 视频在线观看一区二区三区| 色欧美乱欧美15图片| 中文字幕一区二区三| 国产精品资源站在线| 欧美xxxxxxxxx| 秋霞电影网一区二区| 欧美精品久久久久久久多人混战| 亚洲精品日日夜夜| jizzjizzjizz欧美| 国产精品久久久99| 成人丝袜视频网| 欧美激情一区不卡| 国产盗摄精品一区二区三区在线| 日韩欧美在线网站| 日韩精品电影在线| 欧美老肥妇做.爰bbww| 亚洲一区二区三区四区五区黄| 色呦呦国产精品| 亚洲人精品午夜| 色综合久久综合网97色综合 | 欧美无乱码久久久免费午夜一区| 亚洲日本免费电影| 色网综合在线观看| 亚洲在线一区二区三区| 91丨九色丨国产丨porny| 亚洲色图欧美激情| 色一区在线观看| 亚洲午夜久久久久久久久久久| 欧美日韩一区高清| 日韩电影免费在线观看网站| 制服丝袜激情欧洲亚洲| 国产人成亚洲第一网站在线播放 | 黄网站免费久久| 欧美日韩国产精品成人| 肉肉av福利一精品导航| 91精品欧美久久久久久动漫| 蜜桃视频一区二区三区在线观看| 精品日韩欧美一区二区| 蜜臀av一级做a爰片久久| 欧美成人vr18sexvr| 91欧美一区二区| 蜜臀av性久久久久av蜜臀妖精| 欧美国产亚洲另类动漫| 欧美日韩精品综合在线| 高清av一区二区| 视频一区视频二区中文| 国产欧美日韩综合精品一区二区| 欧美日韩高清在线播放| 国产精品一区在线| 亚洲精品伦理在线| 久久影院视频免费| 欧美日韩一级二级三级| 国产91丝袜在线播放0| 午夜影视日本亚洲欧洲精品| 国产亚洲1区2区3区| 91麻豆精品国产91久久久资源速度 | 国产馆精品极品| 午夜视频一区在线观看| 欧美韩国一区二区| 337p亚洲精品色噜噜| 99国产精品一区| 精品一区二区三区视频在线观看| 亚洲综合在线视频| 国产精品美女久久久久久久久| 日韩一区二区三区免费观看| 91久久精品日日躁夜夜躁欧美| 国产成人av电影在线| 美女性感视频久久| 亚洲自拍偷拍网站| 中文字幕一区二区三区精华液 | 欧美极品少妇xxxxⅹ高跟鞋| 欧美精品免费视频| 欧美综合在线视频| a4yy欧美一区二区三区| 久99久精品视频免费观看| 午夜欧美2019年伦理| 最新高清无码专区| 日本一区二区三级电影在线观看 | 日韩美女精品在线| 久久精品日韩一区二区三区| 678五月天丁香亚洲综合网| 色婷婷久久综合| www.日本不卡| 成人app网站| 国产精品亚洲一区二区三区妖精 | 日韩影院免费视频| 亚洲一区二区三区三| 亚洲日穴在线视频| 一区二区中文视频| 国产精品美女www爽爽爽| 久久久国产精品午夜一区ai换脸| 日韩久久精品一区| 日韩一区二区影院| 91精品国产欧美一区二区成人 | av激情综合网| 99久久综合国产精品| 成人激情图片网| 成人午夜激情在线| 懂色av一区二区三区蜜臀| 国产电影一区二区三区| 国产激情视频一区二区三区欧美| 黄色精品一二区| 国产精品综合久久| 国产高清久久久| 成人高清免费在线播放| 丁香另类激情小说| av一区二区久久| 日本福利一区二区| 欧美视频一区在线观看| 欧美日韩国产另类一区| 欧美日本韩国一区二区三区视频 | 欧美精品在线观看播放| 欧美精品xxxxbbbb| 欧美福利一区二区| 欧美www视频| 久久久精品一品道一区| 国产蜜臀av在线一区二区三区| 国产精品看片你懂得| 亚洲色图另类专区| 一个色在线综合| 天天亚洲美女在线视频| 美日韩一区二区三区| 国产馆精品极品| 97国产一区二区| 欧美性色aⅴ视频一区日韩精品| 欧美日韩卡一卡二| 精品欧美黑人一区二区三区| 久久久精品一品道一区| 最新日韩在线视频| 亚洲一区二区三区激情| 麻豆一区二区99久久久久| 国产一区二区福利| 99精品欧美一区| 欧美日免费三级在线| 日韩欧美123| 国产精品免费网站在线观看| 亚洲美女精品一区| 蜜桃视频在线观看一区| 国产成人一级电影| 色综合久久久久久久久久久| 欧美日韩在线一区二区| 欧美精品一区二区三区蜜桃| 中文字幕一区二区三区不卡在线| 亚洲国产一区二区在线播放| 久久精品国产网站| 99久久精品国产观看| 欧美另类videos死尸| 久久久三级国产网站| 亚洲免费观看高清完整版在线观看| 日韩av在线播放中文字幕| 风间由美性色一区二区三区|