nohup java -jar xxxx.jar >/dev/null 2>&1 &中的>/dev/null 2>&1 &講解

本文轉(zhuǎn)自https://blog.csdn.net/Forward__/article/details/80646488

第一部分:shell重定向介紹

就像我們平時(shí)寫(xiě)的程序一樣匾效,一段程序會(huì)處理外部的輸入囊扳,然后將運(yùn)算結(jié)果輸出到指定的位置波丰。在交互式的程序中宛畦,輸入來(lái)自用戶(hù)的鍵盤(pán)和鼠標(biāo)惹挟,結(jié)果輸出到用戶(hù)的屏幕,甚至播放設(shè)備中。而對(duì)于某些后臺(tái)運(yùn)行的程序,輸入可能來(lái)自于外部的一些文件其徙,運(yùn)算的結(jié)果通常又寫(xiě)到其他的文件中胚迫。而且程序在運(yùn)行的過(guò)程中喷户,會(huì)有一些關(guān)鍵性的信息,比如異常堆棧访锻,外部接口調(diào)用情況等褪尝,這些都會(huì)統(tǒng)統(tǒng)寫(xiě)到日志文件里。

shell腳本也一樣期犬,但是我們一般在使用shell命令的時(shí)候河哑,更多地還是通過(guò)鍵盤(pán)輸入,然后在屏幕上查看命令的執(zhí)行結(jié)果龟虎。如果某些情況下璃谨,我們需要將shell命令的執(zhí)行結(jié)果存儲(chǔ)到文件中,那么我們就需要使用輸入輸出的重定向功能鲤妥。

文件描述符

當(dāng)執(zhí)行shell命令時(shí)佳吞,會(huì)默認(rèn)打開(kāi)3個(gè)文件,每個(gè)文件有對(duì)應(yīng)的文件描述符來(lái)方便我們使用:


所以我們平時(shí)在執(zhí)行shell命令中棉安,都默認(rèn)是從鍵盤(pán)獲得輸入底扳,并且將結(jié)果輸出到控制臺(tái)上。但是我們可以通過(guò)更改文件描述符默認(rèn)的指向贡耽,從而實(shí)現(xiàn)輸入輸出的重定向衷模。比如我們將1指向文件鹊汛,那么標(biāo)準(zhǔn)的輸出就會(huì)輸出到文件中。

輸出重定向

輸出重定向的使用方式很簡(jiǎn)單阱冶,基本的一些命令如下:


我們使用>或者>>對(duì)輸出進(jìn)行重定向刁憋。符號(hào)的左邊表示文件描述符,如果沒(méi)有的話(huà)表示1熙揍,也就是標(biāo)準(zhǔn)輸出职祷,符號(hào)的右邊可以是一個(gè)文件,也可以是一個(gè)輸出設(shè)備届囚。當(dāng)使用>時(shí)有梆,會(huì)判斷右邊的文件存不存在,如果存在的話(huà)就先刪除意系,然后創(chuàng)建一個(gè)新的文件泥耀,不存在的話(huà)則直接創(chuàng)建。但是當(dāng)使用>>進(jìn)行追加時(shí)蛔添,則不會(huì)刪除原來(lái)已經(jīng)存在的文件痰催。

為了更好地理解輸出重定向,感受重定向的“魅力”迎瞧,我們看一下以下的例子:我們創(chuàng)建一個(gè)測(cè)試目錄夸溶,目錄下面僅有一個(gè)a.txt文件。


在上述命令中凶硅,我們將原來(lái)的標(biāo)準(zhǔn)輸出重定向到了out文件中缝裁,所以控制臺(tái)只剩下了錯(cuò)誤提示。并且當(dāng)執(zhí)行了追加操作時(shí)足绅,out文件的內(nèi)容非但沒(méi)有被清空捷绑,反而又多了一條a.txt。

同理氢妈,我們也可以將錯(cuò)誤輸出重定向到文件中:


看到這里粹污,朋友們可能會(huì)發(fā)現(xiàn)>out 2>err和我們?cè)谝婚_(kāi)頭提到的>/dev/null 2>&1已經(jīng)很像了,別急首量,這待會(huì)再說(shuō)壮吩。

輸入重定向

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



out文件里面的內(nèi)容被替換成了input文件里的內(nèi)容鸭叙。那么<<又是什么作用呢?我們?cè)倏矗?/p>

我們看到生百,當(dāng)我們輸入完cat >out <<end递雀,然后敲下回車(chē)之后,命令并沒(méi)有結(jié)束蚀浆,此時(shí)cat命令像一開(kāi)始一樣缀程,等待你給它輸入數(shù)據(jù)搜吧。然后當(dāng)我們敲入end之后,cat命令就結(jié)束了杨凑。end之前輸入的字符都已經(jīng)被寫(xiě)入到了out文件中滤奈。這就是輸入分割符的作用。

第二部分:高級(jí)用法

重定向綁定

好了撩满,在有了以上知識(shí)的基礎(chǔ)上蜒程,我們?cè)賮?lái)看開(kāi)頭提到的>/dev/null 2>&1。這條命令其實(shí)分為兩命令伺帘,一個(gè)是>/dev/null昭躺,另一個(gè)是2>&1。

1. >/dev/null

這條命令的作用是將標(biāo)準(zhǔn)輸出1重定向到/dev/null中伪嫁。?/dev/null代表linux的空設(shè)備文件领炫,所有往這個(gè)文件里面寫(xiě)入的內(nèi)容都會(huì)丟失,俗稱(chēng)“黑洞”张咳。那么執(zhí)行了>/dev/null之后帝洪,標(biāo)準(zhǔn)輸出就會(huì)不再存在,沒(méi)有任何地方能夠找到輸出的內(nèi)容脚猾。

2. 2>&1

這條命令用到了重定向綁定葱峡,采用&可以將兩個(gè)輸出綁定在一起。這條命令的作用是錯(cuò)誤輸出將和標(biāo)準(zhǔn)輸出同用一個(gè)文件描述符龙助,說(shuō)人話(huà)就是錯(cuò)誤輸出將會(huì)和標(biāo)準(zhǔn)輸出輸出到同一個(gè)地方砰奕。

linux在執(zhí)行shell命令之前,就會(huì)確定好所有的輸入輸出位置泌参,并且從左到右依次執(zhí)行重定向的命令脆淹,所以>/dev/null 2>&1的作用就是讓標(biāo)準(zhǔn)輸出重定向到/dev/null中(丟棄標(biāo)準(zhǔn)輸出)常空,然后錯(cuò)誤輸出由于重用了標(biāo)準(zhǔn)輸出的描述符沽一,所以錯(cuò)誤輸出也被定向到了/dev/null中,錯(cuò)誤輸出同樣也被丟棄了漓糙。執(zhí)行了這條命令之后铣缠,該條shell命令將不會(huì)輸出任何信息到控制臺(tái),也不會(huì)有任何信息輸出到文件中昆禽。

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

再回到文章的開(kāi)頭蝗蛙,我說(shuō)我弄反了>/dev/null和2>&1拼裝的順序,導(dǎo)致出了一點(diǎn)小問(wèn)題醉鳖。乍眼看這兩條命令貌似是等同的捡硅,但其實(shí)大為不同。剛才提到了盗棵,linux在執(zhí)行shell命令之前壮韭,就會(huì)確定好所有的輸入輸出位置北发,并且從左到右依次執(zhí)行重定向的命令。那么我們同樣從左到右地來(lái)分析2>&1 >/dev/null:

2>&1喷屋,將錯(cuò)誤輸出綁定到標(biāo)準(zhǔn)輸出上琳拨。由于此時(shí)的標(biāo)準(zhǔn)輸出是默認(rèn)值,也就是輸出到屏幕屯曹,所以錯(cuò)誤輸出會(huì)輸出到屏幕狱庇。

>/dev/null,將標(biāo)準(zhǔn)輸出1重定向到/dev/null中恶耽。

我們用一個(gè)表格來(lái)更好地說(shuō)明這兩條命令的區(qū)別:


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

那么可能會(huì)有些同學(xué)會(huì)疑問(wèn)密任,為什么要用重定向綁定,而不是像>/dev/null 2>/dev/null這樣子重復(fù)一遍呢偷俭。

為了回答這個(gè)問(wèn)題批什,我們回到剛才介紹輸出重定向的場(chǎng)景。我們嘗試將標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出都定向到out文件中:

竟然出現(xiàn)了亂碼社搅,這是為啥呢驻债?這是因?yàn)椴捎眠@種寫(xiě)法,標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出會(huì)搶占往out文件的管道形葬,所以可能會(huì)導(dǎo)致輸出內(nèi)容的時(shí)候出現(xiàn)缺失合呐、覆蓋等情況。現(xiàn)在是出現(xiàn)了亂碼笙以,有時(shí)候也有可能出現(xiàn)只有error信息或者只有正常信息的情況淌实。不管怎么說(shuō),采用這種寫(xiě)法猖腕,最后的情況是無(wú)法預(yù)估的拆祈。

而且,由于out文件被打開(kāi)了兩次倘感,兩個(gè)文件描述符會(huì)搶占性的往文件中輸出內(nèi)容放坏,所以整體IO效率不如>/dev/null 2>&1來(lái)得高


————————————————

版權(quán)聲明:本文為CSDN博主「大漠窮秋_」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議老玛,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明淤年。

原文鏈接:https://blog.csdn.net/Forward__/java/article/details/80646488

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蜡豹,隨后出現(xiàn)的幾起案子麸粮,更是在濱河造成了極大的恐慌,老刑警劉巖镜廉,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弄诲,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡娇唯,警方通過(guò)查閱死者的電腦和手機(jī)齐遵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)凤巨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人洛搀,你說(shuō)我怎么就攤上這事敢茁。” “怎么了留美?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵彰檬,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我谎砾,道長(zhǎng)逢倍,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任景图,我火速辦了婚禮较雕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘挚币。我一直安慰自己亮蒋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布妆毕。 她就那樣靜靜地躺著慎玖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪笛粘。 梳的紋絲不亂的頭發(fā)上趁怔,一...
    開(kāi)封第一講書(shū)人閱讀 52,158評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音薪前,去河邊找鬼润努。 笑死,一個(gè)胖子當(dāng)著我的面吹牛示括,可吹牛的內(nèi)容都是我干的铺浇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼例诀,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼随抠!你這毒婦竟也來(lái)了裁着?” 一聲冷哼從身側(cè)響起繁涂,我...
    開(kāi)封第一講書(shū)人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎二驰,沒(méi)想到半個(gè)月后扔罪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡桶雀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年矿酵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了唬复。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡全肮,死狀恐怖敞咧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辜腺,我是刑警寧澤休建,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站评疗,受9級(jí)特大地震影響测砂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜百匆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一砌些、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧加匈,春花似錦存璃、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至悲没,卻和暖如春篮迎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背示姿。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工甜橱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人栈戳。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓岂傲,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親子檀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子镊掖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359