linux 命令尾部&的作用

hasome發表於2024-03-19

參考:https://blog.csdn.net/succing/article/details/127355545

&

作用:表示任務在後臺執行,即使ssh視窗關閉,服務依然會在後臺持續執行。

bin/zookeeper-server-start.sh config/zookeeper.properties &

#docker run -d -p 8000:8080 tomcat 後臺阻塞執行(如果沒有-d,視窗被關閉,服務也會隨之關閉)

注意:預設情況下,程序是前臺程序,這時就把Shell給佔據了,此時Shell視窗無法進行其他操作。通常情況下,對於那些沒有互動的程序,很多時候,我們希望將其在後臺啟動,此時可以在啟動時,引數尾部加一個'&'或者'-d'實現這個目的。
當然,兩者也可以混合式使用,比如:./MediaServer -d &

擴充套件:單獨使用-d或&引數啟動服務時的區別和聯絡

  1. -d引數啟動服務時,服務會以守護程序的形式在後臺執行,並且會將輸出重定向到系統日誌或指定的日誌檔案中,便於後續檢視;
  2. 使用&啟動服務時,服務會以後臺程序的形式在後臺執行,並且會將輸出重定向到終端之外的標準輸出中,服務程序的輸出資訊只能在終端關閉前檢視,之後無法再次檢視;
  3. -d引數啟動服務時,可以使用service命令來檢視和管理服務,包括檢視服務狀態、重啟服務等;
  4. 使用&啟動服務時,如果需要檢視服務狀態或停止服務,需要使用ps命令和kill命令,較為繁瑣。

nohup

nohup是no hang up 的縮寫,即:不結束通話的意思,關閉終端介面後,程序繼續後臺執行。

[root@centOS7 ~]# nohup ./startup.sh >output 2>&1 &

注意事項:

  1. 使用nohup命令時,需新增 &( “and”符號)到命令的尾部。
  2. 使用nohup命令時,如果直接在shell中使用ctrl + c 或ctrl + z時,程序會結束!!!。
  3. nohup命令預設輸出重定向目錄,是當前目錄的nohup.out檔案中;如果當前目錄的 nohup.out 是隻讀的,則自動重定向輸出到$HOME/nohup.out 檔案中。

&&

作用:表示前一條命令執行成功時,才執行後一條命令;反之,前面的命令執行失敗,則&&後面的命令不會被執行

[root@centOS7 ~]# data && echo hello
bash: data: 未找到命令...
[root@centOS7 ~]# date && echo hello
2022年 10月 17日 星期一 00:07:01 CST
hello

|

作用:| 表示管道,上一條命令的輸出,作為下一條命令引數,通常用來過濾/彙總資料

示例一:配合grep,完成過濾

#過濾出佔用埠9092的程式(kafka)
netstat -nalpt | grep 9092

示例二:配合wc完成統計

 echo 'yes' | wc -l
 echo 'yes' | wc -m

示例三:連續使用管道

[root@centOS7 ~]# cat /etc/passwd | grep /bin/bash | wc -l
2
[root@centOS7 ~]#

||

作用:表示上一條命令執行失敗後,才執行下一條命令。一旦執行到一條成功的命令,後面用||連線的命令,就不會再被執行。

[root@centOS7 ~]# cat nofile || echo "hi,succ"
cat: nofile: 沒有那個檔案或目錄
hi,succ
[root@centOS7 ~]# cat /etc/hostname || echo "hello succ"
centOS7
[root@centOS7 ~]#

;

作用:把多條命令,拼接在一起後執行,可減少(人機)互動次數。
注意:用;號隔開每個命令, 每個命令按照從左到右的順序執行, 但是彼此之間不關心是否失敗, 所有命令都會執行。

[root@centOS7 ~]# data;echo 'hello';date;cat /etc/hostname
bash: data: 未找到命令...
hello
2022年 10月 17日 星期一 00:34:05 CST
centOS7
[root@centOS7 ~]#

()

作用:把多個命令,當做一個整體執行,同時增強了可讀性。
通常情況下,多個命令用“;”分隔後,最外層再用“()”包裹一下,通常用在稍微複雜點的shell中。

語法格式:(command1;command2;command3;...)

相關文章