From 9eb26fad6721f814c052e76e851881c8b1be9fa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B1=E6=AC=A3=E5=BD=A6?= <2779212691@qq.com> Date: Thu, 13 Jun 2024 22:47:28 +0800 Subject: [PATCH] 50 --- ...14\347\256\241\351\201\223\357\274\211.md" | 199 ++++++++++++++++++ 1 file changed, 199 insertions(+) create mode 100644 "50\351\202\261\346\254\243\345\275\246/20240612\357\274\210\351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223\357\274\211.md" diff --git "a/50\351\202\261\346\254\243\345\275\246/20240612\357\274\210\351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223\357\274\211.md" "b/50\351\202\261\346\254\243\345\275\246/20240612\357\274\210\351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223\357\274\211.md" new file mode 100644 index 0000000..388ee9f --- /dev/null +++ "b/50\351\202\261\346\254\243\345\275\246/20240612\357\274\210\351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223\357\274\211.md" @@ -0,0 +1,199 @@ +#### 重定向和管道 + +#### 重定向 + +##### 常用重定向符号: `>`、`>>`、`<`、`2>` &>等 + +- `0`:标准输入(stdin): 键盘输入 +- `1`:标准输出(stdout): 直接显示在屏幕,不包含错误信息 +- `2`:标准错误(stderr): 只包含错误信息(屏幕只显示正确的) + +##### 使用形式: + +- 定向符前直接用数字,如 1> 1.txt 、 2> 2.txt +- 定向符后紧跟定向符并加&号如 >&1 + + + +##### 输出重定向 + +1. ###### 输出覆盖重定向 **>** + + ```bash + qq@iZf8zfcpducv0kkmbkbzioZ:~$ find / -name '*.conf' > 1.txt + + #根目录下查找以.conf结尾的文件,将正确信息重定向到1.txt文件中,屏幕只显示错误的,文件不存在则创建,存在则会覆盖 + ``` + +2. ###### 追加输出重定向 **>>** + + ```bash + qq@iZf8zfcpducv0kkmbkbzioZ:~$ echo "Hello, World!" >> 1.txt + + #将 "Hello, World!" 追加到 `1.txt` 文件中 + ``` + +##### 输入重定向 + +1. ###### 输入重定向 **<** (将文件内容作为命令输入) + + ```bash + #命令 < 文件名 + sort < 1.txt + + #将1.txt 文件的内容作为 sort 命令的输入进行排序 + ``` + + ```bash + # 示例: + mysql -u root -p mydatabase < script.sql + #该命令将 script.sql 文件中的SQL命令导入到 mydatabase 数据库中。 + # 还原数据库常用的命令 + ``` + +##### 错误重定向 + +1. ###### 错误输出重定向 **2>** + + - 将命令的错误输出重定向到一个文件 + + ```bash + qq@iZf8zfcpducv0kkmbkbzioZ:~$ ccd 2> 1.txt + + #将ccd命令的错误信息保存到1.txt文件中 + ``` + +2. ###### 错误输出追加重定向 **2>>** + + - 将命令的错误输出追加到一个文件 + + ```bash + qq@iZf8zfcpducv0kkmbkbzioZ:~$ la ccd 2>> 1.txt + + #将 `la` 命令的错误信息追加到 `1.txt` 文件中 + ``` + +3. ###### 同时重定向标准输出肯标准错误输出 + + - 使用 `&>` 符号将标准输出和错误输出同时重定向到同一个文件 + + ```bash + command &> 1.txt # 正确和错误原版混搭,原封不动 + qq@iZf8zfcpducv0kkmbkbzioZ:~$ (aa || bb || echo lala) &> 1.txt + qq@iZf8zfcpducv0kkmbkbzioZ:~$ cat 1.txt + bash: aa: command not found + bash: bb: command not found + lala + + command > 1.txt 2>&1 # 正确和错误原版混搭,原封不动 + command > 1.txt 2>> 1.txt # 屏幕显示先正确后错误 + command 2> 1.txt >> 1.txt # 先错误后正确 + ``` + + - 将command的标准输出肯错误输出都保存到1.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}'`)。 + ``` + +**查找特定文件并将结果保存到文件** + +```bash +find / -name "*.conf" 2> 1.txt | sort > 2.txt + +#根目录下查找以.conf结尾的文件,将正确信息重定向到1.txt文件中,并将结果排序保存到2.txt文件中屏幕只显示错误的,文件不存在则创建,存在则会覆盖 +``` + + + + + +##### 扩展 + +**将错误输出丢弃:** + +- 若要忽略错误输出,可以将错误输出重定向到特殊设备 `/dev/null + ` + + ,例如: + + ```bash + command 2> /dev/null + ``` + + 这会将错误输出发送到 `/dev/null + `,从而丢弃错误输出而只保留标准输出 + +- 输入输出一起使用的情况 + + ```basn + sort < unsorted_list.txt > sorted_list.txt + ``` + +- **重定向标准输出和错误输出到不同文件:** + + - 若要将标准输出重定向到一个文件,将错误输出重定向到另一个文件,可以使用以下命令: + + ```sh + command > output.txt 2> error.txt + ``` + + 这样,标准输出会被写入 `output.txt`文件,而错误输出则会被写入`error.txt` + + 文件。 + + + +##### 总结 + +- **重定向**: + - `>`:将输出重定向到文件(覆盖)。 + - `>>`:将输出追加到文件。 + - `<`:将文件内容作为输入。 + - `2>`:将错误输出重定向到文件。 + - `2>>`:将错误输出追加到文件。 + - `&>`:将标准输出和错误输出同时重定向到文件。 + +- **管道 `|`**: + - 将一个命令的输出作为另一个命令的输入,用于链式操作。 + +##### 作业 + +1. << 是什么功能?here document + + - 双小于号后跟分界符 + + - 允许你直接在命令行或脚本中定义一大段 文本,然后将其作为命令的标准输入 + + ```bash + ccd << 111 + #命令行写文本,写111后停止编写 + ``` + + + +2. ()把命令包括起来,是干什么功能? + + - 可以使用子shell执行一系列命令,这样可以将多个命令组合在一起,形成一个独立的操作单元 + + - 优先执行括号里的命令 + - 在操作命令时,结果不更改当前路径 + + + -- Gitee