diff --git "a/20240613 \351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223.md" "b/20240613 \351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223.md" deleted file mode 100644 index 55659a630482ca8b1c1f4fdb3941ef91203ed9af..0000000000000000000000000000000000000000 --- "a/20240613 \351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223.md" +++ /dev/null @@ -1,156 +0,0 @@ -## 重定向和管道 - -在 Linux 和其他 Unix 系统中,重定向和管道是非常重要的功能,它们允许用户将命令的输出重定向到文件、其他命令或设备。以下是对重定向和管道符的详细解释、使用场景、核心术语以及示例。 - -### 重定向 - -重定向允许将命令的输入或输出重定向到文件或其他命令。常用的重定向符号包括 `>`、`>>`、`<`、`2>` 等。 - -#### 输出重定向 - -1. **覆盖输出重定向 `>`** - - 将命令的标准输出重定向到一个文件,如果文件已经存在,则覆盖它。 - - ```bash - ls > filelist.txt - ``` - - 这个命令将 `ls` 命令的输出保存到 `filelist.txt` 文件中,如果文件已存在,则会被覆盖。 - -2. **追加输出重定向 `>>`** - - 将命令的标准输出追加到一个文件的末尾,如果文件不存在,则创建它。 - - ```bash - echo "Hello, World!" >> greetings.txt - ``` - - 这个命令会将 "Hello, World!" 追加到 `greetings.txt` 文件中。 - -#### 输入重定向 - -1. **输入重定向 `<`** - - 将文件的内容作为命令的输入。 - - ```bash - sort < unsorted_list.txt - ``` - - 这个命令将 `unsorted_list.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}'`)。 - -### 示例解析 - -#### 使用管道和重定向的综合示例 - -1. **查找特定文件并将结果保存到文件** - - ```bash - find / -name "*.log" 2> errors.txt | sort > sorted_log_files.txt - ``` - - 这个命令会在根目录下查找所有以 `.log` 结尾的文件,将错误信息重定向到 `errors.txt`,并将结果进行排序后保存到 `sorted_log_files.txt`。 - -### 总结 - -- **重定向**: - - `>`:将输出重定向到文件(覆盖)。 - - `>>`:将输出追加到文件。 - - `<`:将文件内容作为输入。 - - `2>`:将错误输出重定向到文件。 - - `2>>`:将错误输出追加到文件。 - - `&>`:将标准输出和错误输出同时重定向到文件。 - -- **管道 `|`**: - - 将一个命令的输出作为另一个命令的输入,用于链式操作。 - -## 思考: - -``` -<< 是什么功能? -<< 是一种称为"here document"(这里文档)的特殊输入重定向方法。它允许在命令行中直接提供多行输入,而无需手动输入或从文件中读 -取。这在编写脚本或在命令行中执行需要大段输入的命令时非常有用。 - -<< 语法 -command << DELIMITER自定义结束分隔符(例END) -text -text -... -END - -command 是要接收输入的命令或程序。 -DELIMITER 是一个自定义的分隔符,可以是任何您选择的不包含空格或特殊字符的字符串,用于标记文档的开始和结束。 -text 是您要传递给命令或程序的文本内容,可以是多行的。 - - -()把命令包括起来,是干什么功能? - - -创建子shell、环境隔离、命令组合、用命令控制上下文 - -创建一个子shell,用于在一个独立的环境中执行一系列命令。 - -1. 基本语法和用法 - 在Shell脚本中,使用圆括号 () 来表示一组命令应该在一个子shell中执行。子shell中的命令可以是任何有效的Shell命令和语句,包括变量赋值、条件语句、循环等。 - -2. 子shell的特点 - 环境隔离: 子shell运行在独立的进程中,因此其环境变量、工作目录以及其他状态与父Shell是隔离的。 - 变量不共享: 在子shell中定义的变量和状态不会传递到父Shell中,它们只存在于子shell的生命周期中。 - 命令组合: 圆括号还可以用来组合多个命令,特别是在管道和命令替换的上下文中,这也是使用圆括号的另一种常见方式。 -``` - diff --git "a/24 \347\224\260\351\233\252\347\220\274/20240618 \345\221\250\346\234\237\344\273\273\345\212\241\344\270\216\347\216\257\345\242\203\345\217\230\351\207\217.md" "b/24 \347\224\260\351\233\252\347\220\274/20240618 \345\221\250\346\234\237\344\273\273\345\212\241\344\270\216\347\216\257\345\242\203\345\217\230\351\207\217.md" new file mode 100644 index 0000000000000000000000000000000000000000..dd65bb421d1370e74c4f78ba58a4cc5c7e32c7f7 --- /dev/null +++ "b/24 \347\224\260\351\233\252\347\220\274/20240618 \345\221\250\346\234\237\344\273\273\345\212\241\344\270\216\347\216\257\345\242\203\345\217\230\351\207\217.md" @@ -0,0 +1,245 @@ +## 周期任务练习 + +执行在家目录touch a.txt + +1. 每天3:00执行一次 + + ```sh + 0 3 * * * touch ~/a.txt + ``` + +2. 每周六2:00执行 + + ```sh + 0 2 * * 6 touch ~/a.txt + ``` + +3. 每周六1:05执行 + + ```sh + 5 1 * * 6 touch ~/a.txt + ``` + +4. 每周六1:25执行 + + ```sh + 25 1 * * 6 touch ~/a.txt + ``` + +5. 每天8:40执行 + + ```sh + 40 8 * * * touch ~/a.txt + ``` + +6. 每天3:50执行 + + ``` + 50 3 * * * touch ~/a.txt + ``` + +7. 每周一到周五的3:40执行 + + ```sh + 40 3 * * 1-5 touch ~/a.txt + ``` + +8. 每周一到周五的3:41开始,每10分钟执行一次 **★** + + ```sh + 41-59/10 3 * * 1-5 touch ~/a.txt + ``` + +9. 每天的10:31开始,每2小时执行一次 + + ```sh + 31 10-23/2 * * * touch ~/a.txt + ``` + +10. 每周一到周三的9:30执行一次 + + ```sh + 30 9 * * 1-3 touch ~/a.txt + ``` + +11. 每周一到周五的8:00,每周一到周五的9:00执行一次 + + ```sh + 0 8,9 * * 1-5 touch ~/a.txt + ``` + +12. 每天的23:45分执行一次 + + ```sh + 45 23 * * * touch ~/a.txt + ``` + +13. 每周三的23:45分执行一次 + + ```sh + 45 23 * * 3 touch ~/a.txt + ``` + +14. 每周一到周五的9:25到11:35、13:00到15:00之间,每隔10分钟执行一次**★** + + ```sh + 25-35/10 9-11 * * * touch ~/a.txt + 0-50/10 13-15 * * * touch ~/a.txt + ``` + +15. 每周一到周五的8:30、8:50、9:30、10:00、10:30、11:00、11:30、13:30、14:00、14:30、5:00分别执行一次 + + ```sh + 50 8 * * 1-5 touch ~/a.txt + 0 5,10,11,14 * * 1-5 touch ~/a.txt + 30 8,9,10,11,13,14 * * 1-5 touch ~/a.txt + ``` + +16. 每天16:00、10:00执行一次 + + ```sh + 0 10,16 * * * touch ~/a.txt + ``` + +17. 每天8:10、16:00、21:00分别执行一次 + + ```sh + 10 8 * * * touch ~/a.txt + 0 16,21 * * * touch ~/a.txt + ``` + +18. 每天7:47、8:00分别执行一次 + + ```sh + 47 7 * * * touch ~/a.txt + 0 8 * * * touch ~/a.txt + ``` + + +### 练习题 1: 显示当前所有的环境变量 + +* 使用`printenv`或`env`命令来显示所有的环境变量。 + + +```sh +printenv env +``` +### 练习题 2: 显示`HOME`环境变量的值 + +* 使用`echo`命令和`$`符号来显示`HOME`环境变量的值。sh + + +```bash +echo $HOME +``` +### 练习题 3: 临时设置一个新的环境变量 + +* 设置一个名为`MY_AGE`的环境变量,并将其值设置为`18`。 + + +```bash +MY_AGE=18 +#显示环境变量的值 +``` +### 练习题 4: 显示新设置的环境变量 + +* 使用`echo`命令来显示`MY_AGE`的值。 + + +```bash +echo $MY_AGE +``` +### 练习题 5: 在新的shell会话中检查环境变量 + +* 打开一个新的终端窗口或标签页,并尝试显示`MY_AGE`的值。你会看到什么?为什么? + + + + ```sh + #会看到空白,因为MY_AGE是在当前shell中设置的临时变量,不会传递到新的shell会话中。 + ``` + + + +### 练习题 6: 修改`PATH`环境变量 + +* 将`你当前用户的家目录`添加到你的`PATH`环境变量的末尾位置 + + +```bash +PATH=$PATH:$HOME +``` +将`/tmp`添加到你的`PATH`环境变量的开始位置,(注意:这可能会覆盖其他路径中的同名命令,所以请谨慎操作)。 + +```sh +PATH=/tmp:$PATH +``` + +### 练习题 7: 验证`PATH`的修改 + +* 使用`echo`命令显示`PATH`的值,并确认`前面添加的目录`已经被添加到对应位置。 + + +```sh +echo $PATH +``` +### 练习题 8: 永久设置环境变量 + +* 在你的shell配置文件中(如`~/.bashrc`、`~/.bash_profile`、`~/.zshrc`等,取决于你使用的shell和配置)添加一行来永久设置`MY_NAME`,值设置为`奥德彪`。 + +例如,对于bash shell,你可以使用: + + +```bash +echo 'export MT_NAME="奥德彪"' >> ~/.bashrc +``` +如何让`MY_NAME`生效,并验证 + +```sh +source ~/.bashrc #刷新 +echo $MY_NAME +``` + +### 练习题 9: 清理 + +* 清除你之前设置的`MY_AGE`和`PATH`的修改(如果你不想永久保留它们)。 + + +```bash +unset MY_AGE +PATH=$(echo $PATH | sed -e 's/:\/tmp//g') +# echo $PATH:首先通过echo $PATH命令输出当前PATH环境变量的值,$PATH是一个存储路径的环境变量,多个路径之间用冒号分隔。 + +# |:管道符号|将echo $PATH的输出作为下一条命令的输入。 + +# sed -e 's/:\/tmp//g':sed是流编辑器,-e表示后面跟着一个编辑动作。's/:\/tmp//g'是一个替换操作的命令: +# s/表示替换的操作 +# :/tmp是要替换的目标字符串,即要删除的路径/tmp +# /是分隔符,用来区分不同的部分 +# //为空,表示目标字符串删除后不留空格 +# g表示全局替换,即一行中的所有匹配项都会替换。 +# 因此,整句命令的作用是将PATH中包含的/tmp路径删除,从而清除PATH中之前添加的/tmp目录,确保环境变量PATH不包含/tmp路径。 + +``` +### 练习题 10: 修改默认器 + +* 使用`EDITOR`变量,修改你默认的编辑器为nano。 + + +```bash +export EDITOR=nano +``` + +### 练习题 11: 修改语言 + +* 使用`LANG`变量,让你的文件支持中文和utf8编码来避免乱码。 + +```sh +export LANG=zh_CN.UTF-8 +``` + +- 使用`LANGUAGE`变量,让你的命令提示为中文 + +```sh +export LANGUAGE=zh.CN.UTF-8 +``` \ No newline at end of file