nohub java -jar xx.jar /dev/null 21 以及/dev/null是什么 21又是什么?
原帖地址:
https://blog.csdn.net/dufufd/article/details/79061330#commentsedit
Linux 運行jar包命令如下:
方式一:
java?-jar?XXX.jar?特點:當前ssh窗口被鎖定,可按CTRL + C打斷程序運行,或直接關(guān)閉窗口,程序退出
那如何讓窗口不鎖定?
方式二
java?-jar?XXX.jar?&&代表在后臺運行。
特定:當前ssh窗口不被鎖定,但是當窗口關(guān)閉時,程序中止運行。
繼續(xù)改進,如何讓窗口關(guān)閉時,程序仍然運行?
方式三
nohup?java?-jar?XXX.jar?&nohup 意思是不掛斷運行命令,當賬戶退出或終端關(guān)閉時,程序仍然運行
當用 nohup 命令執(zhí)行作業(yè)時,缺省情況下該作業(yè)的所有輸出被重定向到nohup.out的文件中,除非另外指定了輸出文件。
方式四
nohup?java?-jar?XXX.jar?>temp.txt?&解釋下?>temp.txt
command >out.file ??
command >out.file是將command的輸出重定向到out.file文件,即輸出內(nèi)容不打印到屏幕上,而是輸出到out.file文件中。
?
可通過jobs命令查看后臺運行任務(wù)
jobs那么就會列出所有后臺執(zhí)行的作業(yè),并且每個作業(yè)前面都有個編號。?
如果想將某個作業(yè)調(diào)回前臺控制,只需要 fg + 編號即可。
Shell腳本———— /dev/null 2>&1詳解
1、可以將/dev/null看作"黑洞". 它非常等價于一個只寫文件. 所有寫入它的內(nèi)容都會永遠丟失. 而嘗試從它那兒讀取內(nèi)容則什么也讀不到. 然而, /dev/null對命令行和腳本都非常的有用.?
用處:?
禁止標準輸出.??? 1 cat $filename >/dev/null?? # 文件內(nèi)容丟失,而不會輸出到標準輸出.?
禁止標準錯誤. ?? 2>/dev/null 這樣錯誤信息[標準錯誤]就被丟到太平洋去了.?
2、1>/dev/null 2>&1的含義?
> 代表重定向到哪里,例如:echo "123" > /home/123.txt?
1 表示stdout標準輸出,系統(tǒng)默認值是1,所以">/dev/null"等同于"1>/dev/null"?
2 表示stderr標準錯誤?
& 表示等同于的意思,2>&1,表示2的輸出重定向等同于1?
那么本文標題的語句:?
1>/dev/null 首先表示標準輸出重定向到空設(shè)備文件,也就是不輸出任何信息到終端,說白了就是不顯示任何信息。?
2>&1 接著,標準錯誤輸出重定向等同于 標準輸出,因為之前標準輸出已經(jīng)重定向到了空設(shè)備文件,所以標準錯誤輸出也重定向到空設(shè)備文件。?
3、/dev/zero文件代表一個永遠輸出 0的設(shè)備文件,使用它作輸入可以得到全為空的文件。因此可用來創(chuàng)建新文件和以覆蓋的方式清除舊文件。?
下面使用dd命令將從zero設(shè)備中創(chuàng)建一個10K大小(bs決定每次讀寫1024字節(jié),count定義讀寫次數(shù)為10次),但內(nèi)容全為0的文件。?
dd if=/dev/zero of=file count=10 bs=1024
?
shell中可能經(jīng)常能看到:>/dev/null 2>&1?
命令的結(jié)果可以通過%>的形式來定義輸出
分解這個組合:“>/dev/null 2>&1” 為五部分。
1:> 代表重定向到哪里,例如:echo "123" > /home/123.txt
2:/dev/null 代表空設(shè)備文件
3:2> 表示stderr標準錯誤
4:& 表示等同于的意思,2>&1,表示2的輸出重定向等同于1
5:1 表示stdout標準輸出,系統(tǒng)默認值是1,所以">/dev/null"等同于 "1>/dev/null"
因此,>/dev/null 2>&1?也可以寫成“1> /dev/null 2> &1”
那么本文標題的語句執(zhí)行過程為:
1>/dev/null :首先表示標準輸出重定向到空設(shè)備文件,也就是不輸出任何信息到終端,說白了就是不顯示任何信息。
2>&1 :接著,標準錯誤輸出重定向 到 標準輸出,因為之前標準輸出已經(jīng)重定向到了空設(shè)備文件,所以標準錯誤輸出也重定向到空設(shè)備文件。
最常用的方式有:
?? ?
command > file 2>file? 與command > file 2>&1
它們有什么不同的地方嗎?
????? 首先command > file 2>file 的意思是將命令所產(chǎn)生的標準輸出信息,和錯誤的輸出信息送到file 中.command? > file 2>file 這樣的寫法,stdout和stderr都直接送到file中, file會被打開兩次,這樣stdout和stderr會互相覆蓋,這樣寫相當使用了FD1和FD2兩個同時去搶占file 的管道。
????? 而command >file 2>&1 這條命令就將stdout直接送向file, stderr 繼承了FD1管道后,再被送往file,此時,file 只被打開了一次,也只使用了一個管道FD1,它包括了stdout和stderr的內(nèi)容。
????? 從IO效率上,前一條命令的效率要比后面一條的命令效率要低,所以在編寫shell腳本的時候,較多的時候我們會command > file 2>&1 這樣的寫法。
貴在堅持,相信自己.
Shell中的>/dev/null 2>&1 與 2>&1 >/dev/null 與&>/dev/null 的區(qū)別
默認情況下,總是有三個文件處于打開狀態(tài),標準輸入(鍵盤輸入)、標準輸出(輸出到屏幕)、標準錯誤(也是輸出到屏幕),它們分別對應(yīng)的文件描述符是0,1,2 。那么我們來看看下面的幾種重定向方法的區(qū)別:
>/dev/null 2>&1?
// ?實際上,應(yīng)該等同于這樣: 1>/dev/null 2>/dev/null ,默認情況下就是1,標準輸出,所以一般都省略。 而&符號,后面接的是必須的文件描述符。不能寫成2>1,這樣就成了標準錯誤重定向到文件名為1的文件中了,而不是重定向標準錯誤到標準輸出中。所以這里就是:標準輸出重定向到了/dev/null,而標準錯誤又重定向到了標準輸出,所以就成了標準輸出和標準錯誤都重定向到了/dev/null
?
2>&1 >/dev/null?
// 咋一看,這個跟上面那個有啥區(qū)別呢,不也是標準錯誤重定向到標準輸出,而標準輸出重定向到/dev/null么? 最后不應(yīng)該都重定向/dev/null么? 我是這么理解的!一條指令同一時刻要么產(chǎn)生標準錯誤,要么產(chǎn)生標準輸出。 當產(chǎn)出標準錯誤的時候,因這個標準錯誤重定向到了標準輸出,而標準輸出是輸出到屏幕。這個時候標準輸出還沒有被重定向到/dev/null,于是在屏幕上打印了。當產(chǎn)生標準輸出時,那么它就不是標準錯誤,2>&1無效,于是標準輸出重定向dev/null,不打印到屏幕。所以最終結(jié)果將是:標準錯誤打印到屏幕,而標準輸出不打印到屏幕。
-------------
2016-01-22 更新
突然看到N年前的博客, 才發(fā)現(xiàn)錯誤百出.更新下, 以免誤人, 事實上, 命令行的重定向什么的, 是在執(zhí)行命令之前就準備好了的. 解釋順序從左至右依次進行, 2&>1 ,而1是屏幕, 所以標準錯誤重定向到屏幕, 再而 1>/dev/null , 即標準輸出重定向到 /dev/null, 上述2>&1 >/dev/null ?并不是什么同一時刻要么產(chǎn)生標準輸出要么產(chǎn)生標準錯誤. 而是兩個不同的東西.
?
以以下變量的方式做個解釋,就很明顯了,這兩種方式是不同的,前者就像:
a=1
b=a
?
而后者就像:
b=a
a=1
?
&>/dev/null
// 這個就是,不管你是啥玩意兒文件描述符,通通重定向到/dev/null
總結(jié)
以上是生活随笔為你收集整理的nohub java -jar xx.jar /dev/null 21 以及/dev/null是什么 21又是什么?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么用硕鼠下载优酷专辑
- 下一篇: InstallShield 2020 基