- >大于號:將一條命令執(zhí)行結(jié)果(標(biāo)準(zhǔn)輸出,或者錯誤輸出,本來都要打印到屏幕上面的)重定向其它輸出設(shè)備(文件,打開文件操作符,或打印機等等)
示例: echo 'abc' > test.txt
- >> 是追加內(nèi)容
ls -al >> a.txt
這樣a.txt文件中就是ls命令打印出來的內(nèi)容了
- <小于號
MySQL -u root -p -h test < test.sql 導(dǎo)入數(shù)據(jù)
- 什么是 > /dev/null
這是把 stdout 送到 /dev/null 里面,/dev/null 是 Unix/linux 里的【無底洞】
任何的 output 送去了【無底洞】就再也沒了。
那麼有人問,在什麼情況下要把 output 送去這無底洞呢?這里沒有標(biāo)準(zhǔn)答案,不過一般呢,要是你不想看到 output 或者output 太多太大了,有可能把硬碟給擠爆了的時候,程序的設(shè)計就會考慮把 output 送到 /dev/null 了。
用 >/dev/null 2>&1 這樣的寫法.這條命令的意思是將標(biāo)準(zhǔn)輸出和錯誤輸出全部重定向到/dev/null中,也就是將產(chǎn)生的所有信息丟棄. 下面就為大家來說一下, command > file 2>file 與command > file 2>&1 有什么不同的地方.
首先 command > file 2>file 的意思是將命令所產(chǎn)生的標(biāo)準(zhǔn)輸出信息,和錯誤的輸出信息送到file中,command > file 2>file 這樣的寫法,stdout和stderr都直接送到file中, file會被打開兩次,這樣stdout和stderr會互相覆蓋,這樣寫相當(dāng)使用了FD1和FD2兩個同時去搶占file 的管道.
而command >file 2>&1 這條命令就將stdout直接送向file, stderr 繼承了FD1管道后,再被送往file,此時,file 只被打開了一次,也只使用了一個管道FD1,它包括了stdout和stderr的內(nèi)容.
從IO效率上,前一條命令的效率要比后面一條的命令效率要低,所以在編寫shell腳本的時候,較多的時候我們會用command > file 2>&1 這樣的寫法.
關(guān)于shell中:>/dev/null 2>&1 詳解
shell中可能經(jīng)常能看到:>/dev/null 2>&1
分解這個組合:“>/dev/null 2>&1” 為五部分。
1:> 代表重定向到哪里,例如:echo "123" > /home/123.txt
2:/dev/null 代表空設(shè)備文件
3:2> 表示stderr標(biāo)準(zhǔn)錯誤
4:& 表示 等同于 的意思,2>&1,表示2的輸出重定向 等同于 1
5:1 表示stdout標(biāo)準(zhǔn)輸出,系統(tǒng)默認值是1,所以">/dev/null"等同于 "1>/dev/null"
因此,>/dev/null 2>&1也可以寫成“1> /dev/null 2> &1”
那么本文標(biāo)題的語句執(zhí)行過程為:
1>/dev/null :首先表示標(biāo)準(zhǔn)輸出重定向到空設(shè)備文件,也就是不輸出任何信息到終端,說白了就是不顯示任何信息。
2>&1 :接著,標(biāo)準(zhǔn)錯誤輸出重定向 到標(biāo)準(zhǔn)輸出,因為之前標(biāo)準(zhǔn)輸出已經(jīng)重定向到了空設(shè)備文件,所以標(biāo)準(zhǔn)錯誤輸出也重定向到空設(shè)備文件。-- 這里和上邊對應(yīng)(較多的時候我們會用command > file 2>&1 這樣的寫法.)
Linux系統(tǒng)中
0:表示鍵盤輸入(stdin)
1:表示標(biāo)準(zhǔn)輸出(stdout),系統(tǒng)默認是1
2:表示錯誤輸出(stderr)