diff --git "a/50 \347\216\213\346\231\264/20240618\347\216\257\345\242\203\345\222\214\345\221\250\346\234\237.md" "b/50 \347\216\213\346\231\264/20240618\347\216\257\345\242\203\345\222\214\345\221\250\346\234\237.md" new file mode 100644 index 0000000000000000000000000000000000000000..4962efb46fae4bcbd69d01eb9c465cd3079b93be --- /dev/null +++ "b/50 \347\216\213\346\231\264/20240618\347\216\257\345\242\203\345\222\214\345\221\250\346\234\237.md" @@ -0,0 +1,442 @@ +## 环境和周期 + +#### 周期任务管理 + +- **编辑`Cron`任务**: + + ```sh + crontab -e # edit + ``` + + 这将打开用户的`Cron`配置文件进行编辑。 + +- **查看`Cron`任务**: + + ```sh + crontab -l # list + ``` + + 这将列出用户当前的`Cron`任务。 + +- **删除`Cron`任务**: + + ```sh + crontab -r # remove + ``` + + 这将删除用户的所有`Cron`任务。 + +#### 语法 + +```sh +* * * * * command_to_execute # command_to_execute 可以是命令也可以是包含命令的文件 +- - - - - +| | | | | +| | | | +----- 星期几 (0 - 7) (星期天 = 0 或 7) +| | | +------- 月份 (1 - 12) +| | +--------- 日期 (1 - 31) +| +----------- 小时 (0 - 23) ++------------- 分钟 (0 - 59) +``` + +### 特殊符号 + +**常用的如下:** + +1. **星号(`*`)** + + - **含义**:匹配任何值,,即每一。 + - **示例**:在分钟字段中使用 `*` 表示每一分钟都运行一次任务。 + + ```sh + * * * * * /path/to/command + ``` + +2. **逗号(`,`)** + + - **含义**:指定一个列表值,列出所有指定值 a,b,c。 + - **示例**:在小时字段中使用 `0,6,12,18` 表示任务将在每天的0点、6点、12点和18点运行。 + + ```sh + 0 0,6,12,18 * * * /path/to/command + ``` + +3. **短横线(`-`)** + + - **含义**:指定一个范围值,开始-结尾。 + - **示例**:在日期字段中使用 `1-5` 表示任务将在每个月的1号到5号之间运行。 + + ```sh + 0 0 1-5 * * /path/to/command + ``` + +4. **斜杠(`/`)** + + - **含义**:指定步长值,即间隔。 + - **示例**:在分钟字段中使用 `*/15` 表示任务每15分钟运行一次。 + + ```sh + */15 * * * * /path/to/command + ``` + +5. **L(Last)** + + - **含义**:表示最后一个。可以在月的天数或星期几中使用。 + - **示例**:在日期字段中使用 `L` 表示每个月的最后一天。 + + ```sh + 0 0 L * * /path/to/command + ``` + + - **示例**:在星期几字段中使用 `5L` 表示每个月的最后一个星期五。 + +```sh +0 0 * * 5L /path/to/command +``` + +##### `crontab `和 `cron.d` + +/etc/crontab :是一个全局配置文件,用于定义系统级的定时任务。 + +`/etc/cron.d/`:目录中可以包含多个文件,每个文件可以定义多个任务。 + +#### 环境变量 + +##### 加载顺序 + +`/etc/environment` > `/etc/profile` > `~/.profile` > `~/.bashrc`。 + +#### 设置变量的位置: + +命令行(临时),脚本文件(永久) + +#### 环境变量的设置和使用示例 + +3.1 设置路径变量(PATH) + +```bash +# 在 ~/.bashrc 中添加 +export PATH=$PATH:/path/to/your/scripts +``` + +3.2 定义Java环境变量(JAVA_HOME) + +```bash +# 在 ~/.bashrc 或 /etc/environment 中添加 +export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 +export PATH=$JAVA_HOME/bin:$PATH +``` + +3.3 设置代理服务器(HTTP_PROXY、HTTPS_PROXY) + +```bash +# 在 ~/.bashrc 中添加 +export HTTP_PROXY=http://proxy.example.com:8080 +export HTTPS_PROXY=http://proxy.example.com:8080 +``` + +3.4 配置编辑器(EDITOR) + +```bash +# 在 ~/.bashrc 中添加 +export EDITOR=/usr/bin/vim +``` + +3.5 设置语言和地区(LANG、LC_系列变量) + +```bash +# 在 ~/.bashrc 或 /etc/environment 中添加 +export LANG=en_US.UTF-8 +export LC_ALL=en_US.UTF-8 +``` + +3.6 自定义命令别名(alias) + +```bash +# 在 ~/.bashrc 中添加 +alias ll='ls -alF' +alias grep='grep --color=auto' +``` + +3.7 设置临时环境变量 + +```bash +# 临时设置变量 +export MY_VAR="value" +``` + +### 4. 常用环境变量 + +打印所有环境变量: + +```bash +printenv +#或 +env +``` + +**系统级** + +* `PATH` 可执行文件的搜索路径 +* `LANG` 定义系统的语言环境和字符集, export LANG=zh_CN.utf8,编辑文件不乱码 +* `LANGUAGE` 用于设置消息语言的优先级 ,提示语言为中文 +* `EDITOR` 默认文本编辑器 editor + +**用户级** + +* **`HOME`** :当前用户的主目录。 +* **`USER`**:当前用户名。 +* **`UID`**:当前用户的用户ID。 +* **`SHELL`**:当前用户的默认Shell。 + +**临时变量**:在脚本中定义但不导出的变量仅在脚本执行期间有效,不会影响其他 shell 会话或子进程。 + +**环境变量**:使用 `export` 导出的变量在当前 shell 会话和所有子进程中都有效。 + +------ + +## 作业 + +### 周期任务练习 + +执行在家目录touch a.txt + +1. 每天3:00执行一次 + +```bash +* 3 * * * touch a.txt /home/wq/ +``` + +2.每周六2:00执行 + +```bash +* 2 * * 6 touch a.txt /home/wq/ +``` + +3.每周六1:05执行 + +```bash +5 1 * * 6 touch a.txt /home/wq/ +``` + +4.每周六1:25执行 + +```bash +25 1 * * 6 touch a.txt /home/wq/ +``` + +5.每天8:40执行 + +```bash +40 8 * * * touch a.txt /home/wq/ +``` + +6.每天3:50执行 + +```bash +50 3 * * * touch a.txt /home/wq/ +``` + +7.每周一到周五的3:40执行 + +```bash +40 3 * * 1-5 touch a.txt /home/wq/ +``` + +8.每周一到周五的3:41开始,每10分钟执行一次 + +```bash +41/10 3 * * 1-5 touch a.txt /home/wq/ +``` + +9.每天的10:31开始,每2小时执行一次 + +```bash +31 10/2 * * * touch a.txt /home/wq/ +``` + +10.每周一到周三的9:30执行一次 + +```bash +30 9 * * 1-3 touch a.txt /home/wq/ +``` + +11.每周一到周五的8:00,每周一到周五的9:00执行一次 + +```bash +0 8 * * 1-5 touch a.txt /home/wq/ +0 9 * * 1-5 touch a.txt /home/wq/ +``` + +12.每天的23:45分执行一次 + +```bash +45 23 * * * touch a.txt /home/wq/ +``` + +13.每周三的23:45分执行一次 + +```bash +45 23 * * 3 touch a.txt /home/wq/ +``` + +14.每周一到周五的9:25到11:35、13:00到15:00之间,每隔10分钟执行一次 + +```bash +25,35,45,55 9 * * 1-5 touch a.txt /home/wq/ +5-59/10 10 * * 1-5 touch a.txt /home/wq/ +5,15,25,35 11 * * 1-5 touch a.txt /home/wq/ +*/10 13-15 * * 1-5 touch a.txt /home/wq/ +``` + +15.每周一到周五的8:30、8:50、9:30、10:00、10:30、11:00、11:30、13:30、14:00、14:30、5:00分别执行一次 + +```bash +30,50 8 * * 1-5 touch a.txt /home/wq/ +30 9 * * 1-5 touch a.txt /home/wq/ +*/30 10-11 * * 1-5 touch a.txt /home/wq/ +30 13 * * 1-5 touch a.txt /home/wq/ +0,30 14-15 * * 1-5 touch a.txt /home/wq/ +``` + +16.每天16:00、10:00执行一次 + +```bash +0 10,16 * * * touch a.txt /home/wq/ +``` + +17.每天8:10、16:00、21:00分别执行一次 + +```bash +0 16,21 * * * touch a.txt /home/wq/ +10 8 * * * touch a.txt /home/wq/ +``` + +18.每天7:47、8:00分别执行一次 + +```bash +0 8 * * * touch a.txt /home/wq/ +47 7 * * * touch a.txt /home/wq/ +``` + + + +### 练习题 1: 显示当前所有的环境变量 + +* 使用`printenv`或`env`命令来显示所有的环境变量。 + + +```bash +wq@hecs-104052:~$ printenv +wq@hecs-104052:~$ env +``` + +### 练习题 2: 显示`HOME`环境变量的值 + +* 使用`echo`命令和`$`符号来显示`HOME`环境变量的值。 + + +```bash +wq@hecs-104052:~$ echo $HOME +``` + +### 练习题 3: 临时设置一个新的环境变量 + +* 设置一个名为`MY_AGE`的环境变量,并将其值设置为`18`。 + + +```bash +wq@hecs-104052:~$ export MY_AGE=18 +``` + +### 练习题 4: 显示新设置的环境变量 + +* 使用`echo`命令来显示`MY_AGE`的值。 + + +```bash +echo $MY_VARIABLE +``` + +### 练习题 5: 在新的shell会话中检查环境变量 + +* 打开一个新的终端窗口或标签页,并尝试显示`MY_AGE`的值。你会看到什么?为什么? + +### 练习题 6: 修改`PATH`环境变量 + +* 将`你当前用户的家目录`添加到你的`PATH`环境变量的末尾位置 + + +```bash +wq@hecs-104052:~$ export PATH=$PATH:/home +``` + +将`/tmp`添加到你的`PATH`环境变量的开始位置,(注意:这可能会覆盖其他路径中的同名命令,所以请谨慎操作)。 + +```bash +wq@hecs-104052:~$ export PATH=/tmp:$PATH +``` + +### 练习题 7: 验证`PATH`的修改 + +* 使用`echo`命令显示`PATH`的值,并确认`前面添加的目录`已经被添加到对应位置。 + + +```bash +wq@hecs-104052:~$ echo $PATH +``` + +### 练习题 8: 永久设置环境变量 + +* 在你的shell配置文件中(如`~/.bashrc`、`~/.bash_profile`、`~/.zshrc`等,取决于你使用的shell和配置)添加一行来永久设置`MY_NAME`,值设置为`奥德彪`。 + +例如,对于bash shell,你可以使用: + + +```bash +wq@hecs-104052:~$ vim ./.bashrc +export MY_NAME="奥德彪" +``` + +如何让`MY_NAME`生效,并验证 + +```bash +wq@hecs-104052:~$ source ~/.bashrc +wq@hecs-104052:~$ echo $MY_AGE +``` + +### 练习题 9: 清理 + +* 清除你之前设置的`MY_AGE`和`PATH`的修改(如果你不想永久保留它们)。 + + +```bash +wq@hecs-104052:~$ unset MY_AGE +wq@hecs-104052:~$ unset PATH +``` + +### 练习题 10: 修改默认器 + +* 使用`EDITOR`变量,修改你默认的编辑器为nano。 + + +```bash +wq@hecs-104052:~$ export EDITOR = nano +``` + +### 练习题 11: 修改语言 + +* 使用`LANG`变量,让你的文件支持中文和utf8编码来避免乱码。 + +```bash +wq@hecs-104052:~$ vim ./.bashrc +wq@hecs-104052:~$ export LANG=zh_CN.UTF-8 +``` + +- 使用`LANGUAGE`变量,让你的命令提示为中文 + +```bash +wq@hecs-104052:~$ vim ./.bashrc +wq@hecs-104052:~$ export LANGUAGE=zh_CN.utf8 +``` +