diff --git "a/03\351\231\210\346\255\243\346\245\240/20240614\351\207\215\345\256\232\345\220\221.md" "b/03\351\231\210\346\255\243\346\245\240/20240614\351\207\215\345\256\232\345\220\221.md" new file mode 100644 index 0000000000000000000000000000000000000000..7996ee00ba37dc8edee9dc22ce221831e7d8f5a4 --- /dev/null +++ "b/03\351\231\210\346\255\243\346\245\240/20240614\351\207\215\345\256\232\345\220\221.md" @@ -0,0 +1,133 @@ +````bash +### 重定向 + +重定向允许将命令的输入或输出重定向到文件或其他命令。常用的重定向符号包括 `>`、`>>`、`<`、`2>` 等。 + +#### 输出重定向 + +1. **覆盖输出重定向 `>`** + 将命令的标准输出重定向到一个文件,如果文件已经存在,则覆盖它。 + + ```bash + ls > z.txt + ``` + + 这个命令将 `ls` 命令的输出保存到 `z.txt` 文件中,如果文件已存在,则会被覆盖。 + +2. **追加输出重定向 `>>`** + 将命令的标准输出追加到一个文件的末尾,如果文件不存在,则创建它。 + + ```bash + echo "Hello, World!" >> z.txt + ``` + + 这个命令会将 "Hello, World!" 追加到 `z.txt` 文件中。 + +#### 输入重定向 + +1. **输入重定向 `<`** + 将文件的内容作为命令的输入。 + + ```bash + sort < z.txt + ``` + + 这个命令将 `z.txt` 文件的内容作为 `sort` 命令的输入进行排序。 + +#### 错误重定向 + +1. **错误输出重定向 `2>`** + 将命令的错误输出重定向到一个文件。 + + ```bash + ls k 2> z.txt + ``` + + 这个命令会将 `ls` 命令的错误信息保存到 `error_log.txt` 文件中。 + +2. **错误输出追加重定向 `2>>`** + 将命令的错误输出追加到一个文件。 + + ```bash + ls km 2>> z.txt + ``` + + 这个命令会将 `ls` 命令的错误信息追加到 `z.txt` 文件中。 + +3. **同时重定向标准输出和标准错误输出** + 使用 `&>` 符号将标准输出和错误输出同时重定向到同一个文件。 + + ```bash + (cd 99 || cat za.txt) &>z.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}'`)。 + +### 示例解析 + +#### 使用管道和重定向的综合示例 + +1. **查找特定文件并将结果保存到文件** + + ```bash + find / -name "*.log" 2> z.txt | sort > as.txt + ``` + + 这个命令会在根目录下查找所有以 `.log` 结尾的文件,将错误信息重定向到 `z.txt`,并将结果进行排序后保存到 `as.txt`。 + +### 总结 + +- **重定向**: + + - `>`:将输出重定向到文件(覆盖)。 + - `>>`:将输出追加到文件。 + - `<`:将文件内容作为输入。 + - `2>`:将错误输出重定向到文件。 + - `2>>`:将错误输出追加到文件。 + - `&>`:将标准输出和错误输出同时重定向到文件。 + +- **管道 `|`**: + + - 将一个命令的输出作为另一个命令的输入,用于链式操作。 + +## 思考: + +``` +<< 是什么功能? +从标准输入中读入,直到遇见分界符才停止。 +dqq@hecs-21286:~$ cat << asd +> 1 +> 2 +> 3 +> asd +1 +2 +3 + +()把命令包括起来,是干什么功能? +() 表示在当前 shell 中将多个命令作为一个整体执行。需要注意的是,使用 () 括起来的命令在执行前面都不会切换当前工作目录,也就是说命令组合都是在当前工作目录下被执行的,尽管命令中有切换目录的命令一条命令需要独占一个物理行,如果需要将多条命令放在同一行,命令之间使用命令分隔符(;)分隔 +不会改变当前路径,但是会执行命令 +````