diff --git "a/11 \345\276\220\345\205\210\351\221\253/2024.06.13 \351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223 .md" "b/11 \345\276\220\345\205\210\351\221\253/2024.06.13 \351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223 .md" new file mode 100644 index 0000000000000000000000000000000000000000..7504e7a7742c82756ef88575ba7c8e3efad590a1 --- /dev/null +++ "b/11 \345\276\220\345\205\210\351\221\253/2024.06.13 \351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223 .md" @@ -0,0 +1,177 @@ +# 重定向: + +0 :标准输入(stdin) 键盘输入 + +1 :标准输出 (stdout) 只显示正确的信息 + +2 :标准错误 (stder) 只显示错误信息 + + + +重定向:重定向允许将命令的输入或输出重定向到文件或其他命令。常用的重定向符号包括 `>`、`>>`、`<`、`2>` 等。 + + + +## 输出重定向: + +1、覆盖输出重定向 > + +将命令的标准输出重定向到一个文件,如果文件已存在则覆盖他 + +```bash +ls > 1.txt + + +将ls命令的输出保存到1.txt文件中,如果文件已存在,则被覆盖 +``` + +2、追加输出重定向 >> + +将命令的标准输出追加到一个文件的末尾,如果文件不存在则创建它 + +```bash +echo "hello" >> 2.txt +``` + + + +## 输入重定向: + +1、输入重定向 < 将文件的内容作为命令的输入 + +```bash +sort < 3.txt +将3.txt这个文件的内容按照sort命令输入进行排序 +``` + + + +## 错误重定向: + +1、错误输出重定向 `2>` 将命令的错误输出重定向到一个文件。 + +```bash +ls non_existent_file 2> error_log.txt + + +这个命令会将 `ls` 命令的错误信息保存到 `error_log.txt` 文件中。 +``` + +2、错误输出追加重定向 2>> 将命令的错误输出追加到一个文件。 + +```bash + +ls non_existent_file 2>> error_log.txt + +这个命令会将 `ls` 命令的错误信息追加到 `error_log.txt` 文件中。 + + +``` + +3、同时重定向标准输出和标准错误输出 + +```bash +使用 `&>` 符号将标准输出和错误输出同时重定向到同一个文件。 + +command &> output_and_error_log.txt + + +这个命令会将 `command` 的标准输出和错误输出都保存到 `output_and_error_log.txt` 文件中。 +``` + + + + + +# 管道符: | + +管道符号 `|` 将一个命令的输出作为另一个命令的输入。管道是进行命令链式操作的重要工具。 + + + +使用场景: + +1、将命令的输出传递给另一个命令 + +```bash +ls -l | grep "txt" + +这个命令会将 `ls -l` 的输出传递给 `grep "txt"`,只显示包含 "txt" 的行 +``` + +2、多命令链式操作 + +```bash +ps aux | grep "sshd" | awk '{print $2}' + + +这个命令链会列出所有进程 (`ps aux`),然后过滤包含 "sshd" 的行 (`grep "sshd"`),最后提取进程 ID (`awk '{print $2}'`)。 +``` + +# 总结 + +* **重定向**: + + * `>`:将输出重定向到文件(覆盖)。 + * `>>`:将输出追加到文件。 + * `<`:将文件内容作为输入。 + * `2>`:将错误输出重定向到文件。 + * `2>>`:将错误输出追加到文件。 + * `&>`:将标准输出和错误输出同时重定向到文件。 + +* **管道 `|`**: + + * 将一个命令的输出作为另一个命令的输入,用于链式操作。 + + + +`<<` 是一个称为“Here Document”或“Hereis”的输入重定向符号。它允许你直接在命令行中嵌入一个多行字符串,并将其传递给一个命令作为输入。这个功能在脚本中特别有用,因为它允许你输入多行文本,而无需在外部文件中创建它们。 + +1. **Here Document**: + + * 使用`<<`后跟一个分隔符(通常是EOF,但可以是任何字符串),然后在下一行开始输入文本,直到再次遇到相同的分隔符为止。 + * 这个文本将被传递给紧接其前的命令。 + +```bash +cat <