diff --git "a/\345\274\240\345\276\267\345\272\267/\351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223\347\254\246.md" "b/\345\274\240\345\276\267\345\272\267/\351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223\347\254\246.md" new file mode 100644 index 0000000000000000000000000000000000000000..b0868cf462a76fcc7536dd489eb14ec68c6fbfc5 --- /dev/null +++ "b/\345\274\240\345\276\267\345\272\267/\351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223\347\254\246.md" @@ -0,0 +1,69 @@ +重定向和管道 + +在 Unix 和 Linux 系统中,文件描述符用于表示打开的文件或者输入/输出流。常用的文件描述符包括: + +* `0`:标准输入(stdin): 键盘输入 +* `1`:标准输出(stdout): 直接显示在屏幕,不包含错误信息 +* `2`:标准错误(stderr): 只包含错误信息 + +使用形式: + +* 定向符前直接用数字,如 1> 1.txt 、 2> 2.txt +* 定向符后紧跟定向符并加&号如 >&1 + +### 重定向 + +重定向允许将命令的输入或输出重定向到文件或其他命令。常用的重定向符号包括 `>`、`>>`、`<`、`2>` &>等。 + +#### 输出重定向 + +1. **标准输出覆盖重定向 `>`**将命令的标准输出重定向到一个文件,如果文件已经存在,则覆盖它。 + ls > filelist.txt + 这个命令将 `ls` 命令的输出保存到 `filelist.txt` 文件中,如果文件已存在,则会被覆盖。 + +2. **追加输出重定向 `>>`**将命令的标准输出追加到一个文件的末尾,如果文件不存在,则创建它。 + echo "Hello, World!" >> greetings.txt + 这个命令会将 "Hello, World!" 追加到 `greetings.txt` 文件中。 + +3. 注意: + + 1. **标准输出不含错误信息** + +#### 输入重定向 + +1. **输入重定向 `<`**将文件的内容作为命令的输入。 + sort < unsorted_list.txt + + # 原文件 + + apple + orange + banana + + # 这个命令将 `unsorted_list.txt` 文件的内容作为 `sort` 命令的输入进行排序。 + +场景:你需要从一个SQL脚本文件中读取命令并在数据库中执行。 + # 示例: + mysql -u root -p mydatabase < script.sql + #该命令将 script.sql 文件中的SQL命令导入到 mydatabase 数据库中。 + # 还原数据库常用的命令 + +#### 错误重定向 + + 参考:find / -name '*.conf' + +1. **错误输出重定向 `2>`**将命令的错误输出重定向到一个文件。 + reboot 2> error_log.txt + 这个命令会将 `ls` 命令的错误信息保存到 `error_log.txt` 文件中。 + +2. **错误输出追加重定向 `2>>`**将命令的错误输出追加到一个文件。 + ls non_existent_file 2>> error_log.txt + 这个命令会将 `ls` 命令的错误信息追加到 `error_log.txt` 文件中。 + +3. **同时重定向标准输出和标准错误输出**使用 `&>` 符号将标准输出和错误输出同时重定向到同一个文件。 + command &> output_and_error_log.txt # 正确和错误原版混搭,原封不动 + command > 1.txt 2>&1 # 正确和错误原版混搭,原封不动 + command > 1.txt 2>> 1.txt # 先正确后错误 + command 2> 1.txt >> 1.txt # 先错误后正确 + + 这个命令会将 `command` 的标准输出和错误输出都保存到 `output_and_error_log.txt` 文件中。