天天看點

linux 定向指令,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

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

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

command >&m    把标準輸出重定向到檔案描述符m中

command

2.雙向重定向

即在重定向資料到目标檔案的同時,還要保證資料能夠正常處理,使用tee指令。

tee [-a]  file

-a 往檔案尾添加内容

last | tee last_backup | cut -d " " -f 1  #tee相當于對last的結果備份了一次