linux重定向命令
標准輸入,輸出和錯誤
---------------------------------
文件文件 描述符
---------------------------------
輸入文件—標准輸入 0
輸出文件—標准輸出 1
錯誤輸出文件—標准錯誤 2
---------------------------------
1.重定向
COMMAND_OUTPUT >
2 # 將stdout重定向到一個文件.
3 # 如果這個文件不存在, 那就創建, 否則就覆蓋.
4
5 ls -lR > dir-tree.list
6 # 創建一個包含目錄樹列表的文件.
7
8 : > filename
9 # >操作, 將會把文件"filename"變為一個空文件(就是size為0).
10 # 如果文件不存在, 那麼就創建一個0長度的文件(與'touch'的效果相同).
11 # :是一個占位符, 不產生任何輸出.
12
13 > filename
14 # >操作, 將會把文件"filename"變為一個空文件(就是size為0).
15 # 如果文件不存在, 那麼就創建一個0長度的文件(與'touch'的效果相同).
16 # (與上邊的": >"效果相同, 但是某些shell可能不支持這種形式.)
17
18 COMMAND_OUTPUT >>
19 # 將stdout重定向到一個文件.
20 # 如果文件不存在, 那麼就創建它, 如果存在, 那麼就追加到文件後邊.
21
22
23 # 單行重定向命令(只會影響它們所在的行):
24 # --------------------------------------------------------------------
25
26 1>filename
27 # 重定向stdout到文件"filename".
28 1>>filename
29 # 重定向並追加stdout到文件"filename".
30 2>filename
31 # 重定向stderr到文件"filename".
32 2>>filename
33 # 重定向並追加stderr到文件"filename".
34 &>filename
35 # 將stdout和stderr都重定向到文件"filename".
36
37 M>N
38 # "M"是一個文件描述符, 如果沒有明確指定的話默認為1.
39 # "N"是一個文件名.
40 # 文件描述符"M"被重定向到文件"N".
41 M>&N
42 # "M"是一個文件描述符, 如果沒有明確指定的話默認為1.
43 # "N"是另一個文件描述符.
44
45 #==============================================================================
46
47 # 重定向stdout, 一次一行.
48 LOGFILE=script.log
49
50 echo "This statement is sent to the log file, \"$LOGFILE\"." 1>$LOGFILE
51 echo "This statement is appended to \"$LOGFILE\"." 1>>$LOGFILE
52 echo "This statement is also appended to \"$LOGFILE\"." 1>>$LOGFILE
53 echo "This statement is echoed to stdout, and will not appear in \"$LOGFILE\"."
54 # 每行過後, 這些重定向命令會自動"reset".
58 # 重定向stderr, 一次一行.
59 ERRORFILE=script.errors
61 bad_command1 2>$ERRORFILE # Error message sent to $ERRORFILE.
62 bad_command2 2>>$ERRORFILE # Error message appended to $ERRORFILE.
63 bad_command3 # Error message echoed to stderr,
64 #+ and does not appear in $ERRORFILE.
65 # 每行過後, 這些重定向命令也會自動"reset".
66 #==============================================================================
67
70 2>&1
71 # 重定向stderr到stdout.
72 # 將錯誤消息的輸出, 發送到與標准輸出所指向的地方.
73
74 i>&j
75 # 重定向文件描述符i到j.
76 # 指向i文件的所有輸出都發送到j.
77
78 >&j
79 # 默認的, 重定向文件描述符1(stdout)到j.
80 # 所有傳遞到stdout的輸出都送到j中去.
81
82 0< FILENAME
83 < FILENAME
84 # 從文件中接受輸入.
85 # 與">"是成對命令, 並且通常都是結合使用.
86 #
87 # grep search-word <filename
88
90 [j]<>filename
91 # 為了讀寫"filename", 把文件"filename"打開, 並且將文件描述符"j"分配給它.
92 # 如果文件"filename"不存在, 那麼就創建它.
93 # 如果文件描述符"j"沒指定, 那默認是fd 0, stdin.
94 #
95 # 這種應用通常是為了寫到一個文件中指定的地方.
96 echo 1234567890 > File # 寫字符串到"File".
97 exec 3<> File # 打開"File"並且將fd 3分配給它.
98 read -n 4 <&3 # 只讀取4個字符.
99 echo -n . >&3 # 寫一個小數點.
100 exec 3>&- # 關閉fd 3.
101 cat File # ==> 1234.67890
102 # 隨機訪問.
106 |
107 # 管道.
108 # 通用目的處理和命令鏈工具.
109 # 與">", 很相似, 但是實際上更通用.
110 # 對於想將命令, 腳本, 文件和程序串連起來的時候很有用.
111 cat *.txt | sort | uniq > result-file
112 # 對所有.txt文件的輸出進行排序, 並且刪除重復行.
113 # 最後將結果保存到"result-file"中.
command > filename 把標准輸出重定向到一個新文件中
command >> filename 把標准輸出重定向到一個文件中(追加)
command 1 > fielname 把標准輸出重定向到一個文件中
command > filename 2>&1 把標准輸出和標准錯誤一起重定向到一個文件中
command 2 > filename 把標准錯誤重定向到一個文件中
command 2 >> filename 把標准輸出重定向到一個文件中(追加)
command >> filename 2>&1 把標准輸出和標准錯誤一起重定向到一個文件中(追加)
command < filename >filename2 把command命令以filename文件作為標准輸入,以filename2文件作為標准輸出
command < filename 把command命令以filename文件作為標准輸入
command << delimiter 把從標准輸入中讀入,直至遇到delimiter分界符
command <&m 把文件描述符m作為標准輸入
command >&m 把標准輸出重定向到文件描述符m中
command <&- 把關閉標准輸入
2.雙向重定向
即在重定向數據到目標文件的同時,還要保證數據能夠正常處理,使用tee命令。
tee [-a] file
-a 往文件尾添加內容
last | tee last_backup | cut -d " " -f 1 #tee相當於對last的結果備份了一次