> 輸出重定向
重定向輸出 >
>> 追加
目 錄
1、 >正確定向等同於1>
2、 2> 錯誤定向
3. &> 把錯誤導成正確的{洗錢}
4. 正確的變成錯誤的
5. > 覆蓋
6. 舉一反三
最近學的命令中學到了一些很有意思的命令,分享一下
> 重定向輸出
最初見到這個符號是在學習終端的時候,那麽各個終端之間是如何交流的呢?那麽就用到了這個符號>
在這裏采取的是遠程控制的方法,所以以虛擬終端為例
對於兩個終端 dev/pts/0 /dev/pts/1
設備dev/pts/0給設備/dev/pts/1發出Hello!
在設備/dev/pts/0上發出命令 echo Hello! > /dev/pts/1
那麽便在設備/dev/pts/1上收到消息Hello!(類似於qq消息中的私聊)
還有另一種廣播的方式
wall Hi
每個終端都會收到打招呼 Hi(類似於qq消息中的群發)。很有意思吧,可以試一下。
1、 > 正確定向等同於 1>
我們一般鍵盤輸入信息,輸出的結果都是默認在終端上輸出
查看I/O 設備
cd /dev/fd/
ls –l
0 標準輸入 (默認輸入來自鍵盤)
1 標準輸出 (默認輸出都是終端)
2 標準錯誤 (默認輸出都是終端)
那麽當我們不想輸出在終端上,想導出一個文件,方便以後查看,便需要輸出重定向了。> 的作用就是把原本要輸出在終端上的信息重定向導出到指定的地方。
我們知道/etc/passwd 存放著我們用戶登錄的信息,而/app/passwd 這個是不存在的,我們就以這兩個為例子,終端還是dev/pts/0 /dev/pts/1
單獨查看會顯示一下結果
ls /app/passwd /etc/passwd
ls /app/passwd /etc/passwd > /dev/pts/1
結論: 可以看出在/dev/pts/0 上只顯示出錯誤的結果,因為/dev/pts/0把正確結果重定向輸出到/dev/pts/1 > 只導出了正確的結果
2、 > 錯誤定向
還是相同的例子
ls /app/passwd /etc/passwd 2> dev/pts/1
結論:可以看出可以看出在/dev/pts/0上只顯示出正確的結果,/dev/pts/0把錯誤結果重定向輸出到/dev/pts/1 2> 只導出了錯誤的結果
那麽有把正確和錯誤的都輸出去嗎,當然可以
3、 &> 把錯誤導成正確的{洗錢}
(1) ls /app/passwd /etc/passwd > dev/pts/1 2>&1(老一代)
結論:可以看出在/dev/pts/0上不顯示,/dev/pts/0把全部重定向輸出到/dev/pts/1,2>&1 一般在老版本的CentOS上用,接下來的是在新的版本上才有的。
(2) ls /app/passwd /etc/passwd &> /dev/pts/1
4、當然還可以把正確的變成錯誤的
ls /app/passwd/etc/passwd > dev/pts/1 1>&2
把正確的變成錯誤的都顯示出來
5、 > 覆蓋
(1) 例: > a.txt =touch a.txt 創建新文件a.txt
(2) 當已有文件存在時會怎樣呢??
現在就以a.txt為例,首先我們在a.txt中寫入內容Hello
echo Hello >a.txt
然後我們再將Hi apple!以同樣的方式再寫一遍
echo Hi apple!>a.txt
(3)那麽我們現實中必定會有不想覆蓋的文件,而我們想要繼續在原文件後面追加,那麽便需要>>了。
在後面追加Hello water
echo Hello water >>a.txt
(4)如果在工作中,我們想要在文件中追加內容時>>,卻不小心只寫入> 就執行了,那麽我們的文件被覆蓋了,因此就有了,禁止覆蓋的命令,set –C
讓我們試一下吧,首先輸入set–C 然後再輸入覆蓋命令
如果我們想一次強制覆蓋 >|
當然我們也可以解除這種禁止 set +C ,很好理解禁止 –C ,解除+C
6、當然可以舉一反三
>> 追加正確的內容
2>> 追加錯誤的內容
&>> 全部追加
() 合並 (echo abc ;echo 123)> b.txt 可以一次顯示兩條信息
結合以前所學的符號,命令,都會有新的發現。大家可以共同探討。
> 輸出重定向