diff --git "a/53 \347\216\213\351\233\257\351\235\231/20240613\351\207\215\345\256\232\345\220\221\347\256\241\351\201\223.md" "b/53 \347\216\213\351\233\257\351\235\231/20240613\351\207\215\345\256\232\345\220\221\347\256\241\351\201\223.md" new file mode 100644 index 0000000000000000000000000000000000000000..537f2795a8c2a08f2fcc61617f31fe723caac773 --- /dev/null +++ "b/53 \347\216\213\351\233\257\351\235\231/20240613\351\207\215\345\256\232\345\220\221\347\256\241\351\201\223.md" @@ -0,0 +1,78 @@ +# 重定向和管道 + +## 重定向 + +重定向允许将命令的输入或输出重定向到文件或其他命令。常用的重定向符号包括 `>`、`>>`、`<`、`2>` + +### 标准输出 + +标准输出覆盖重定向 :> + +标准输出追加重定向:>> + +### 标准错误 + +标准错误覆盖重定向:2> + +标准错误追加重定向:2>> + +### 标准输入 < + +### 同时重定向标准输出和标准错误输出 + +标准输出和标准错误同时覆盖重定向:&> + +标准输出和标准错误同时追加重定向:&>> + +### 管道 `|` + +管道符号 `|` 将一个命令的输出作为另一个命令的输入。管道是进行命令链式操作的重要工具。 + +#### 使用场景 + +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}'`)。 + +`tee` 是一个在Unix和类Unix操作系统上非常有用的命令行实用程序。它的作用是从标准输入中读取数据,并同时将数据输出到标准输出和一个或多个文件中。 + +下面是 `tee` 命令的基本语法: + +```bash +tee [OPTION]... [FILE]... +``` + +- `[OPTION]`: 一些选项,可以控制 `tee` 命令的行为。 +- `[FILE]`: 一个或多个文件名,表示要将数据写入的目标文件。 + +### 选项 + +- `-a`:追加写入文件而不是覆盖。 +- `-i`:忽略中断信号。 +- `--help`:显示帮助信息和选项列表。 +- `--version`:显示版本信息。 + +### 总结 + +`tee` 命令是一个灵活而强大的工具,可以用于在命令行中处理数据流,同时向多个文件写入数据。 + +## 思考: + +``` +<< 是什么功能?here document +Here Document (<<) 是一种在命令行或脚本中将多行文本作为输入传递给命令的方法。 +()把命令包括起来,是干什么功能? +() 表示在当前 shell 中将多个命令作为一个整体执行。需要注意的是,使用 () 括起来的命令在执行前面都不会切换当前工作目录,也就是说命令组合都是在当前工作目录下被执行的,尽管命令中有切换目录的命令一条命令需要独占一个物理行,如果需要将多条命令放在同一行,命令之间使用命令分隔符(;)分隔 +```