1. 程式人生 > >Linux中&&、&、|、||等特殊符號

Linux中&&、&、|、||等特殊符號

@Author  : Spinach | GHB
@Link    : http://blog.csdn.net/bocai8058

&& 和 &

& 表示任務後臺執行,與nohup命令功能差不多。

# 執行jar包,並且置於後臺執行,執行的日誌重定向到當前預設的log.txt檔案中
[[email protected] local]$ java -jar test.jar > log.txt &

&& 表示前一條命令執行成功時,才執行後一條命令。

# 執行ls -l成功後,執行cd ..
[[email protected]
tmp]$ ls -l && cd .. 總用量 4 -rw-r–r–. 1 root root 2252 1月 4 22:25 log.txt -rw——-. 1 root root 0 1月 3 23:23 yum.log [[email protected] /]$

| 和 ||

| 表示管道,上一條命令的輸出,作為下一條命令引數(輸入)。

# 查詢全部程序後輸出結果在進行過濾跟 進行中包含aux的程序。
[[email protected] ~]$ ps -aux | grep aux 
Warning: bad syntax, perhaps a bogus ‘-‘? See /usr/share/doc/procps-3.2.8/FAQ 
root        53  0.0  0.0      0     0 ?        S    16:33   0:00 [ata_aux] 
root      2379  4.0  0.1 110224  1172 pts/2    R+   22:55   0:00 ps -aux 
root      2380  0.0  0.0 103316   868 pts/2    D+   22:55   0:00 grep aux 

|| 表示上一條命令執行失敗後,才執行下一條命令。

[[email protected] tmp]$ als -l || cd ..
-bash: als: command not found
[[email protected] /]$ 

> 和 >>

> 表示stdout標準輸出資訊重定向輸出,覆蓋寫。

[[email protected] ~]$ cat test.txt
Hello
[[email protected] ~]$ echo 'World' > test.txt
[[email protected]
~]$ cat test.txt World

>> 表示內容追加寫。

[[email protected] ~]$ cat test.txt
Hello
[[email protected] ~]$ echo 'World' >> test.txt
[[email protected] ~]$ cat test.txt
HelloWorld

&> 、2>&1 和 2>1

&> 表示stderr標準錯誤輸出資訊重定向輸出,覆蓋寫。

[[email protected] ~]$ cat test.txt
World
[[email protected] ~]$ lll
-bash: lll: command not found 
[[email protected] ~]$ lll > test.txt
[[email protected] ~]$ cat test.txt
# 由於這個是錯誤資訊,所以不能使用標準輸出>將資訊重定向到test檔案中,但覆蓋寫為空
# 所以錯誤資訊直接在控制檯打印出來了
[[email protected] ~]$ lll &> test.txt
[[email protected] ~]$ cat test.txt
-bash: lll: command not found
# 使用&>重定向錯誤資訊沒有輸出到控制檯了,表示錯誤資訊正確重定向到了test檔案,也同樣是覆蓋寫

2>&1 表示把標準錯誤的輸出重定向到標準輸出1,&指示不要把1當做普通檔案,而是fd=1即標準輸出處理。

2>1 表示把標準錯誤的輸出重定向到1,但這個1不是標準輸出,而是一個名為1的檔案。

linux重定向的裝置程式碼

  • 空裝置檔案/dev/null
  • 標準輸入(stdin) 程式碼為0,實際對映關係:/dev/stdin -> /proc/self/fd/0
  • 標準輸出(stdout)程式碼為1,實際對映關係:/dev/stdout -> /proc/self/fd/1
  • 標準錯誤輸出(stderr)程式碼為2,實際對映關係:/dev/stderr ->/pro/self/fd/2

command>a 2>1 、command>a 2>a 與 command>a 2>&1的區別

1. command>a 2>&1 等價於 command 1>a 2>&1
   意思為執行command產生的標準輸入重定向到檔案a中,標準錯誤也重定向到檔案a中。

2. command>a 2>a 不等價於 command 1>a 2>&1,其區別如下:
   i. command>a 2>a開啟檔案兩次,而command 1>a 2>&1只打開檔案一次;
  ii. command>a 2>a由於開啟檔案兩次,導致stdout被stderr覆蓋;
 iii. 從IO效率上來講,command 1>a 2>&1比command 1>a 2>a的效率更高。

3. command>a 2>1 等價於 command 1>a 2>1
   意思為執行command產生的標準輸入重定向到檔案a中,標準錯誤重定向到檔案1中。