From 1b925948821cb7e28f25504ac7c02d07ffac21a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E8=BE=89?= <11764079+elrianode@user.noreply.gitee.com> Date: Fri, 14 Jun 2024 03:44:59 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 张辉 <11764079+elrianode@user.noreply.gitee.com> --- ...21\345\222\214\347\256\241\351\201\223.md" | 217 ++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 "12 \345\274\240\350\276\211/20240613 \351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223.md" diff --git "a/12 \345\274\240\350\276\211/20240613 \351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223.md" "b/12 \345\274\240\350\276\211/20240613 \351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223.md" new file mode 100644 index 0000000..2035d5c --- /dev/null +++ "b/12 \345\274\240\350\276\211/20240613 \351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223.md" @@ -0,0 +1,217 @@ +# 笔记 + +进程(Process)是计算机中**正在运行的一个程序**的实例。一个进程包括了**程序代码**和其当前**活动状态**。它可以看作是操作系统分配资源和调度工作的基本单位。 + +在 Unix 和 Linux 系统中,文件描述符用于表示打开的文件或者输入/输出流。常用的文件描述符包括: + +- `0`:标准输入(stdin): 键盘输入 +- `1`:标准输出(stdout): 直接显示在屏幕,不包含错误信息 +- `2`:标准错误(stderr): 只包含错误信息 + +### 重定向 + +重定向允许将命令的输入或输出重定向到文件或其他命令。常用的重定向符号包括 `>`、`>>`、`<`、`2>` &>等。 + +#### 输出重定向 + +1. **标准输出覆盖重定向 `>`**只会将标准输出放在文件当中 +2. **追加输出重定向 `>>`**将标准输出追加到文件当中 + + +#### 输入重定向 + +1. **输入重定向 `<`** + +#### 错误重定向 + +1. **错误输出重定向 `2>`** + +2. **错误输出追加重定向 `2>>`** + +3. **同时重定向标准输出和标准错误输出** + + 使用 `&>` 符号将标准输出和错误输出同时重定向到同一个文件。 + + +### 管道 `|` + +管道符号 `|` 将一个命令的输出作为另一个命令的输入。管道是进行命令链式操作的重要工具。 + +### 总结 + +- **重定向**: + - `>`:将输出重定向到文件(覆盖)。 + - `>>:将输出追加到文件。 + - `<`:将文件内容作为输入。 + - `2>`:将错误输出重定向到文件。 + - `2>>`:将错误输出追加到文件。 + - `&>`:将标准输出和错误输出同时重定向到文件。 + - `&>>`:将标准输出和错误输出同时追加重定向到文件。 +- **管道 `|`**: + - 将一个命令的输出作为另一个命令的输入,用于链式操作。 + +- **将错误输出丢弃:** + + - 若要忽略错误输出,可以将错误输出重定向到特殊设备 `/dev/null + ` + + - 例如: + + ```bash + command 2> /dev/null + ``` + + 这会将错误输出发送到 `/dev/null + `,从而丢弃错误输出而只保留标准输出 + +## tee命令 + +`tee` 是一个在Unix和类Unix操作系统上非常有用的命令行实用程序。它的作用是从标准输入中读取数据,并同时将数据输出到标准输出和一个或多个文件中。 + +下面是 `tee` 命令的基本语法: + +```bash +tee [OPTION]... [FILE]... +``` + +- `[OPTION]`: 一些选项,可以控制 `tee` 命令的行为。 +- `[FILE]`: 一个或多个文件名,表示要将数据写入的目标文件。 + +### 示例 1:简单的使用方式 + +```bash +echo "Hello, world" | tee output.txt +``` + +在这个示例中,`echo "Hello, world"` 命令的输出被送到 `tee` 命令,然后 `tee` 将这个输出写入到 `output.txt` 文件,并同时将其输出到标准输出。 + +### 示例 2:同时写入多个文件 + +```bash +echo "Hello, world" | tee file1.txt file2.txt +``` + +在这个示例中,`tee` 命令将 `Hello, world` 写入到 `file1.txt` 和 `file2.txt` 文件中,并同时将其输出到标准输出。 + +### 示例 3:追加写入文件 + +```bash +echo "New data" | tee -a file1.txt +``` + +通过 `-a` 选项,`tee` 命令将数据追加写入到 `file1.txt` 文件中,而不是覆盖原有内容。 + +### 示例 4:结合重定向和管道 + +```bash +command1 | tee >(command2) | command3 +``` + +在这个示例中,`command1` 的输出被送到 `tee` 命令,然后 `tee` 将输出传递给 `command2`,并且同时将输出发送到 `command3`。这种结构可以用于复杂的管道命令中。 + +### 选项 + +- `-a`:追加写入文件而不是覆盖。 +- `-i`:忽略中断信号。 +- `--help`:显示帮助信息和选项列表。 +- `--version`:显示版本信息。 + +# 作业 + +## << 是什么功能? + +简述:在Linux和其他类Unix操作系统中,`<<` 是一种被称为“Here Document”(此处文档)的重定向符号。它**用于将多行输入直接传递给命令**,通常用于脚本编写中。基本格式如下: + +```sh +command << EOF +multi-line content +EOF +``` + +这里是一个简单的例子来说明如何使用 `<<`: + +```sh +Copy Codecat << EOF +This is a line of text. +This is another line of text. +EOF +``` + +在这个例子中,`cat` 命令会读取从 `<< EOF` 到 `EOF` 之间的所有文本,并将这些文本输出到标准输出(通常是终端)。 + +### 详细解释 + +1. **起始标记**:`<<` 后面的词(在上面的例子中是 `EOF`)是一个标记,这个标记可以是任何你喜欢的字符串。常用的是 `EOF` 但也可以用其他不冲突的标记。 +2. **结束标记**:所有在起始标记之后出现的文本将被认为是多行输入,直到遇到结束标记(在上面的例子中也是 `EOF`)。结束标记必须单独占据一行,并且前后没有空格或其他字符。 +3. **应用场景**: + - **编写脚本**:可以在脚本中嵌入多行文本,如内联配置文件、SQL查询、多行消息等。 + - **自动化任务**:在自动化任务中传递多行输入给某些命令而无需外部文件。 + +### 注意事项 + +- **结束标记**必须在行的开头,没有前导空格或其他字符,否则会被视为多行文本的一部分。 +- **标记名**可以是除了常见的 `EOF` 之外的任意字符串,只要起始和结束标记一致即可。 + +通过使用 `<<` 符号,可以方便地在脚本中处理多行文本,而不需要依赖外部文件,提高了脚本的可读性和维护性。 + + + +## ()把命令包括起来,是干什么功能? + +在 Linux 中,将命令包含在括号 `()` 中,表示在一个子 shell 中执行这些命令。子 shell 是一个单独的进程,它从当前 shell 派生出来,但与当前 shell 环境隔离。这种机制提供了一些有用的特性和功能。 + +### 主要功能和用途 + +1. **创建子 shell**: + - 在子 shell 中执行命令,不会影响父 shell 的环境。子 shell 有自己的变量、工作目录等环境设置。 +2. **命令分组**: + - 将一组命令放在一起,在同一个子 shell 中执行,可以将它们视为一个整体。例如,可以重定向整组命令的输出。 +3. **临时环境变量**: + - 可以在子 shell 中设置临时环境变量,而不会影响到父 shell。 + +### 示例 + +1. **子 shell 环境**: + + ```sh + Copy Code(cd /tmp; ls) + # 在 /tmp 目录下列出文件,但不会改变父 shell 的当前工作目录 + ``` + + 在这个例子中,`cd /tmp` 和 `ls` 命令在子 shell 中执行。当这组命令执行完毕后,父 shell 的当前工作目录不会改变。 + +2. **命令分组和输出重定向**: + + ```sh + Copy Code( + echo "This is line 1" + echo "This is line 2" + ) > output.txt + # 将两行文本的输出重定向到 output.txt 文件 + ``` + + 这里,两个 `echo` 命令在子 shell 中作为一个整体执行,其输出被重定向到 `output.txt` 文件。 + +3. **临时环境变量**: + + ```sh + Copy Code(export VAR="temp value"; echo $VAR) + # 只在子 shell 中有效的环境变量 + echo $VAR + # 在父 shell 中,VAR 不存在或没有被修改 + ``` + + 在子 shell 中,`VAR` 被设置为 `"temp value"` 并且可以被访问。但在子 shell 之外,父 shell 中的 `VAR` 不会受到影响。 + +4. **组合命令**: + + ```sh + Copy Code(command1; command2; command3) + # 依次执行 command1, command2 和 command3,所有命令在同一个子 shell 中 + ``` + + 这种方式可以确保一组相关命令在同一个环境中执行,例如为了共享某些设置或变量。 + +### 总结 + +括号 `()` 在 Linux shell 中用于在子 shell 中执行命令,有助于隔离环境、分组命令及管理临时变量等。这种功能在编写脚本和处理复杂任务时非常有用,可以帮助开发者更好地控制命令的执行环境和输出。 \ No newline at end of file -- Gitee