什么是輸出重定向
簡單說,就是把本來輸出到屏幕上的信息保存到指定的文件中,這個過程就叫重定向
重定向使用場景
1.希望將輸出的信息保存下來
2.希望將運行程序的執行結果保存下來
3.希望忽略某些命令的警告或者錯誤信息
4.希望將錯誤信息和正確信息保存在不同的文件中
5.程序運行報錯了我們希望把報錯信息保存下來
重定向分類
運行一個程序通常會有三種情況,標准輸入,標准輸出,錯誤輸出
名稱 | 文件描述 | 作用 |
---|---|---|
標准輸入 | 0 | 接受輸入,默認為鍵盤,也可以是其他文件或命令輸入 |
標准輸出 | 1 | 正確的輸出,默認輸出到屏幕 |
錯誤輸出 | 2 | 錯誤的輸出,默認輸出到屏幕 |
什么是輸出重定向
簡單來說,就是改變輸出內容的位置,比如將輸出信息保存到文件中
輸出重定向分類
名稱 | 操作符 | 作用 |
---|---|---|
標准覆蓋輸出重定向 | > | 將程序輸出的正確答案輸出到指定的文件中,但是會覆蓋原文件的內容 |
標准追加輸出重定向 | >> | 將程序輸出的正確結果追加輸出到指定文件中,不會覆蓋原文件,而是在后面追加內容 |
錯誤覆蓋輸出重定向 | 2> | 將程序的錯誤結果輸出到指定的文件中,但是會覆蓋原文件的內容 |
錯誤追加輸出重定向 | 2>> | 將程序的錯誤結果以追加的形式輸出到指定的文件中,不會覆蓋原文件,而是在后面追加內容 |
清空文件命令命令實例 >linux.txt
輸出重定向案例
案例1:標准覆蓋輸出重定向
echo Linux7 > linux.txt
echo linux > linux.txt
cat linux.tx
案例2: 標准追加輸出重定向
echo Linux7 >> linux.txt
echo linux7.1>> linux.txt
cat linux.txt
案例3:標准錯誤覆蓋輸出重定向
echooo 123 2> linux.txt
cat linux.txt
案例4:標准錯誤追加輸出重定向
112344 333 2>> linux.txt
案例5:正確和錯誤輸出到不同一個文件
#1.useradd zhaocheng
創建普通用戶
#2.su -zhaocheng
切換用戶
#3.find /etc/ -name "*.conf"
因為zhaocheng 是普通用戶,權限有限,所以有錯誤跟正確信息都會輸出到屏幕
#4.find /etc/ -name "*.conf" > 0k.txt
將正確的消息輸出到0k.txt中
#5.find /etc/ -name "*.conf" 2> on.txt
將錯誤的信息輸出到no.txt 中
#6.find /etc/ -name "*.conf" > 0k.txt && find /etc/ -name "*.conf" 2>no.txt
一條命令將錯誤正確的信息輸出到不同的文件中
cat ok.txt
cat no.txt
發現執行失敗,&& 必須都要成功,所以該方式不行
#7.find /etc/ -name "*.conf" >0k.txt find /etc/ -name "*.conf" 2>no.txt
ok.txt no.txt 都創建成功了,但是里面沒有內容。這種合並方法,只能用於創建文件,目錄。比如touch ,mkdir。
#8.find /etc/ -name "*.conf" > ok.txt 2>no.txt
一條命令將正確和錯誤信息輸出到不同的文件中
案例6:正確和錯誤都輸出到同一個文件
find /etc/ -name "*.conf" >> all.txt 2>&1
find /etc/ -name "*.conf" > all.txt 2>&1
兩個命令執行的效果是一樣的
一條命令將正確錯誤信息輸出到同一個文件中,並且還按照默認時間排序。
案例7:將正確錯誤結果信息輸出到null
echooo 44545 > /dev/null 2>&1
案例8:將正確的信息輸出到null
echo 123> /dev/null
輸入重定向
案例:寫入多行文本
cat > 123.txt << EOF
a
b
c
d
EOF
管道符號-每天都在用
什么是管道
1.管道符號為"|"
2.簡單來說,管道就是將多個命令連接起來,將左側命令的標准輸出做為右側命令的標准輸入。
3.前面一個命令處理成功的輸出信息,交給后面的命令做為輸入繼續處理。
4.只要命令不出錯,可以接多個管道命令
5.錯誤命令不會傳遞給管道后面的命令
管道應用場景
1.處理日志,比如找出日志中訪問排名前10的ip地址,url等
2.過濾輸出,比如一個命令輸出了10行信息,但是我們只需要其中關鍵信息
管道使用案例
案例1:取出網卡ip
ip ad | grep 10.0.0
查看網卡ip 地址信息后過濾含有10.0.0的關鍵字的行
cat /etc/sysconfig/network-scripts/ifcfg-eth0|grep -i "ipaddr" | awk -F"="'{print $2}'
查看ifcfg-eth0信息,部分大小寫過濾ipaddr行,在過濾查看IP地址
ip ad | grep -i "inet" |grep eth0 | awk '/inet /{print $2}'
簡單寫
案例2:將/etc/passwd中的用戶按照uid大小排序