diff --git "a/\351\273\204\346\265\251\344\270\234/20240618 \347\216\257\345\242\203\345\217\230\351\207\217\345\222\214\345\221\250\346\234\237\344\273\273\345\212\241.md" "b/\351\273\204\346\265\251\344\270\234/20240618 \347\216\257\345\242\203\345\217\230\351\207\217\345\222\214\345\221\250\346\234\237\344\273\273\345\212\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..f0f0e12c44f7d9594b0037e720ebc15eb385158c --- /dev/null +++ "b/\351\273\204\346\265\251\344\270\234/20240618 \347\216\257\345\242\203\345\217\230\351\207\217\345\222\214\345\221\250\346\234\237\344\273\273\345\212\241.md" @@ -0,0 +1,839 @@ +## 环境变量 + +理解和使用Linux环境变量对于管理和配置系统至关重要。以下是关键的知识点、常用场景以及示例的综合整理: + +### 1. 环境变量的类型和作用 + +- **用户级别环境变量**: + - 存储在用户家目录的个人配置文件中,例如 `~/.bashrc`、`~/.profile`。 + - 用于定义**用户个性化**的Shell设置,如别名、路径等。针对不同用户独立设置 + +- **系统级别环境变量**: + - 存储在系统范围的配置文件中,如 `/etc/environment`、`/etc/profile` 。/etc/profile.d目录 + - 为**所有用户和系统服务**提供全局的环境设置。java_home、python + +### 2. 环境变量的加载顺序和文件 + +- **系统启动加载**:/etc/environment ,一开源就加载,初始化 + +- **登录Shell加载顺序**: + - 首先加载 `/etc/profile`,然后根据用户登录方式加载 `~/.profile`(存在性依次加载)。 + - 非登录shell: su 切换用户 等 source + +- **交互式Shell加载顺序**: + - 加载 `~/.bashrc` 或类似文件,用于设置用户个性化的Shell环境。 + - 不同的shell加载不同的文件,bash才加载.bashrc,zsh加载.zshrc + - 交互式:提供命令行窗口,非交互式:直接写在脚本里 +- **总结来说** + - 配置文件的理论加载顺序通常是 `/etc/environment` > `/etc/profile` > `~/.profile` > `~/.bashrc`。【实验】 + +### 3. 设置环境变量的方法 + +​ 设置变量的位置:命令行(临时),脚本文件(永久) + +#### 3.1 临时设置环境变量:临时变量(局部),临时环境变量(全部) + +​ 可以使用 `export` 命令来临时设置一个环境变量,例如: + +```bash +export MY_VAR="value" # export 变量名=值 环境变量是全局的,整个环境有效 +MY_VAR="value" # 少了export 就是临时变量,不是全局的 +``` + +​ 这种设置只在当前Shell会话中有效,关闭Shell会话后会失效。 + +#### 3.2 永久设置环境变量: + +​ **用户级别的** : 编辑用户的 `~/.bashrc` 或 `~/.profile` 文件,并添加如下行: + +```bash +export MY_VAR="value" +``` + +​ 保存文件后,新的设置会在下次登录时生效。 + +​ **系统级别的:** 编辑 `/etc/environment` 或 /etc/profile文件,并添加类似以下行: + +```plaintext +MY_VAR="value" +``` + +这里不需要使用 `export` 命令。保存文件后,变量会在系统启动时生效。 + +#### 3.3 环境变量的设置和使用示例 + +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。 + +### 5. 临时变量与环境变量 + +定义一个变量时,在变量名前加了export关键字,就是环境变量,作用域是全局环境子子进程中也有效,否则就是临时变量,只在当前脚本文件或shell中有效。 + +命令行示例: + +```bash +MY_NAME="张三" # 临时变量(局部) +echo $MY_NAME +bash -c 'echo $MY_NAME' +# 什么结果?对比下面的效果 + +export MY_NAME="张三" # 临时变量(全局) +echo $MY_NAME +bash -c 'echo $MY_NAME' # 子进程 +# 看下效果 +``` + + + +脚本文件示例 : + +`test1.sh` + +```bash +#!/bin/bash +MY_NAME="张三" # 前面加上export再试一次 +echo "test:我的名字是:$MY_NAME" +./subscript.sh +``` + +`test2.sh`: + +```bash +#!/bin/bash +echo "test2:你的名字是: $MY_NAME" +``` + +**临时变量**:在脚本中定义但不导出的变量仅在脚本执行期间有效,不会影响其他 shell 会话或子进程。 + +**环境变量**:使用 `export` 导出的变量在当前 shell 会话和所有子进程中都有效。 + +### 6. 总结: + +### 4.1 分类 + +#### 按生命周期分 + +- 永久环境变量 写在指定类型的配置文件,永不失效 ~/.bashrc /etc/profile.d/xxx.sh +- 临时环境变量 临时使用export 命令设置的环境变量 退出终端即失效 + +#### 按作用域分 + +* 系统级环境变量 对所有用户生效 /etc/profile.d/xxx.sh +* 用户级环境变量 只对当前用户生效 ~/.bashrc + +# 环境变量作业 + +### 练习题 1: 显示当前所有的环境变量 + +* 使用`printenv`或`env`命令来显示所有的环境变量。 + + +```bash +printenv +``` + +### 练习题 2: 显示`HOME`环境变量的值 + +* 使用`echo`命令和`$`符号来显示`HOME`环境变量的值。 + + +```bash +echo $HOME +``` + +### 练习题 3: 临时设置一个新的环境变量 + +* 设置一个名为`MY_AGE`的环境变量,并将其值设置为`18`。 + + +```bash +MY_AGE=18 +``` + +### 练习题 4: 显示新设置的环境变量 + +* 使用`echo`命令来显示`MY_AGE`的值。 + + +```bash +echo $MY_VARIABLE +``` + +### 练习题 5: 在新的shell会话中检查环境变量 + +* 打开一个新的终端窗口或标签页,并尝试显示`MY_AGE`的值。你会看到什么?为什么? + + ```shell + #找不到因为临时环境变量只能在当前shell窗口存在 + ``` + +### 练习题 6: 修改`PATH`环境变量 + +* 将`你当前用户的家目录`添加到你的`PATH`环境变量的末尾位置 + + +```bash +PATH=$PATH:$HOME +``` + +将`/tmp`添加到你的`PATH`环境变量的开始位置,(注意:这可能会覆盖其他路径中的同名命令,所以请谨慎操作)。 + +```shell +PATH=/tmp:$PATH +``` + +### 练习题 7: 验证`PATH`的修改 + +* 使用`echo`命令显示`PATH`的值,并确认`前面添加的目录`已经被添加到对应位置。 + + +```bash +echo $PATH +``` + +### 练习题 8: 永久设置环境变量 + +* 在你的shell配置文件中(如`~/.bashrc`、`~/.bash_profile`、`~/.zshrc`等,取决于你使用的shell和配置)添加一行来永久设置`MY_NAME`,值设置为`奥德彪`。 + +例如,对于bash shell,你可以使用: + + +```bash +echo 'export MT_NAME="奥德彪"' >> ~/.bashrc +``` + +如何让`MY_NAME`生效,并验证 + +```shell +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编码来避免乱码。 + +```shell +export LANG=zh_CN.UTF-8 +``` + +- 使用`LANGUAGE`变量,让你的命令提示为中文 + +```shell +export LANGUAGE=zh.CN.UTF-8 +``` + +# 周期任务笔记 + +好的,我们来聊一聊Linux系统中关于Debian的周期任务管理。周期任务管理主要涉及计划任务的创建和管理,通常使用`cron`工具。 + +## 1. 什么是Cron? + +Cron是一种基于时间的任务调度程序,用于在特定时间或时间间隔自动执行任务。它是Unix类操作系统(包括Linux)中的一个守护进程,能够按照用户定义的时间表运行指定的脚本或命令。 + +“Cron” 的读音是 /krɒn/,“Cron”的读音在中文中可以表述为“克隆”(kè róng)。 + +## 2. Cron的配置文件 + +在Debian系统中,Cron任务的配置文件通常分为以下几类: + +1. **用户级Cron任务**:每个用户都有自己的Cron任务配置文件,位于`/var/spool/cron/crontabs/username`。 +2. **系统级Cron任务**:系统级的Cron任务配置文件位于`/etc/crontab`和`/etc/cron.d/`目录下。 +3. **周期性任务目录**:这些目录包含在特定时间间隔运行的脚本,例如: + - `/etc/cron.hourly/` + - `/etc/cron.daily/` + - `/etc/cron.weekly/` + - `/etc/cron.monthly/` + +## 3. 编辑Cron任务 + +### 3.1 使用`crontab`命令 + +用户可以使用`crontab`命令来编辑、查看或删除自己的Cron任务【用户级】。 + +cron table 时间周期表,计划任务表 + +- **编辑Cron任务**: + + ```sh + crontab -e # edit + ``` + + 这将打开用户的Cron配置文件进行编辑。 + +- **查看Cron任务**: + + ```sh + crontab -l # list + ``` + + 这将列出用户当前的Cron任务。 + +- **删除Cron任务**: + + ```sh + crontab -r # remove + ``` + + 这将删除用户的所有Cron任务。 + +**Cron任务语法** + +Cron任务的格式如下: + +```sh +* * * * * command_to_execute # command_to_execute 可以是命令也可以是包含命令的文件 +- - - - - +| | | | | +| | | | +----- 星期几 (0 - 7) (星期天 = 0 或 7) +| | | +------- 月份 (1 - 12) +| | +--------- 日期 (1 - 31) +| +----------- 小时 (0 - 23) ++------------- 分钟 (0 - 59) +``` + +例如,要每天凌晨3点执行一个备份脚本,可以添加以下条目: + +```sh +0 15 * * * /path/to/backup_script.sh +``` + +[点击查看:cron表达式详细介绍以及常用的例子](https://developer.aliyun.com/article/1349827) + +### 3.2 使用`/etc/crontab` + +系统级的Cron任务可以直接编辑`/etc/crontab`文件。该文件具有一个额外的字段用于指定运行任务的用户: + +``` +# m h dom mon dow user command +17 * * * * root cd / && run-parts --report /etc/cron.hourly +25 6 * * 1 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) +47 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) +``` + +### 3.3 使用`/etc/cron.d/` + +在`/etc/cron.d/`目录下,可以创建单独的文件来定义Cron任务。每个文件的格式与`/etc/crontab`类似。 + +例如,可以在`/etc/cron.d/mytasks`中定义: + +``` +30 2 * * * root /usr/local/bin/my_script.sh +``` + + + +### 3.4 特殊符号 + +**常用的如下:** + +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 + ``` + +### 3.5 例子和应用 + +1. **每月的第一个工作日**3 + + ```sh + 0 9 2W * * /path/to/command + ``` + +2. **每月的最后一天** + + ```sh + 0 23 1L * * [ "$(date +\%d -d tomorrow)" == "01" ] && /path/to/command + ``` + +3. **每个月的最后一个星期五** + + ```sh + 0 23 ? * 5#2 /path/to/command + ``` + +4. **每隔10分钟** + + ```sh + 10/10 * * * * /path/to/command + ``` + +通过使用这些特殊符号,可以灵活地定义各种复杂的时间调度任务,使得cron更加强大和易用。 + + + +### 3.6 注意事项 + +1. **路径问题**:Cron任务运行时使用的环境变量可能与用户的交互式Shell不同,确保在脚本中使用绝对路径。 +2. **权限问题**:确保脚本具有可执行权限,并且Cron任务的用户有权限执行该脚本。 + +## 4. 系统级任务 + +### **4.1 crontab 和 cron.d** + +在Debian和其他基于Unix的操作系统中,`/etc/crontab` 和 `/etc/cron.d/` 目录用于管理系统级的计划任务。虽然它们的功能类似,但在使用场景和配置格式上有一些细微的区别。以下是它们的详细介绍和使用场景: + +#### **4.1.1** **`/etc/crontab`** + +**特点:** + +1. **全局配置文件**:`/etc/crontab` 是一个全局配置文件,用于定义系统级的定时任务。 + +2. **文件格式**:与用户级的 `crontab` 文件相比,`/etc/crontab` 多了一个字段,用于指定执行任务的用户。格式如下: + + ``` + m h dom mon dow user command + ``` + + 例如: + + ``` + 30 2 * * * root /usr/local/bin/backup.sh + ``` + + 这行表示每天凌晨2:30以root用户的身份执行 `/usr/local/bin/backup.sh`。 + +**使用场景:** + +- **统一管理系统任务**:适合定义一些系统级的任务,比如系统备份、日志轮替等。 +- **需要不同用户执行的任务**:如果需要在同一文件中定义由不同用户执行的任务,可以使用 `/etc/crontab`。 + +#### **4.1.2** **`/etc/cron.d/`** + +**特点:** + +1. **目录结构**:`/etc/cron.d/` 目录中可以包含多个文件,每个文件可以定义多个任务。 + +2. **文件格式**:与 `/etc/crontab` 文件的格式相同,需要包含一个用户字段。格式如下: + + ``` + m h dom mon dow user command + ``` + + 例如,在 `/etc/cron.d/mytasks` 文件中: + + ``` + 0 4 * * * root /usr/local/bin/daily_task.sh + 15 14 1 * * user /usr/local/bin/monthly_report.sh + ``` + +**使用场景:** + +- **模块化管理**:适合将不同的任务分模块管理,每个模块一个文件。例如,可以为不同的应用程序或服务创建单独的文件。 +- **包管理系统的任务**:一些软件包在安装时会自动在 `/etc/cron.d/` 中创建任务文件,这是包管理系统用来添加特定任务的常见方法。 + +#### **4..13 选择使用场景** + +1. **统一和简洁管理**: + - 如果你希望在一个文件中集中管理所有系统级的Cron任务,可以使用 `/etc/crontab`。 + - 适合于系统管理员需要定期检查和修改所有任务的场景。 + +2. **分离和模块化管理**: + - 如果你希望将Cron任务按模块或应用分开管理,使用 `/etc/cron.d/` 是更好的选择。 + - 适合于不同团队或不同软件包管理各自的定时任务,避免相互干扰。 + +#### **4.1.4 示例对比** + +`/etc/crontab` 示例: + +```sh +# m h dom mon dow user command +30 2 * * * root /usr/local/bin/backup.sh +45 3 * * 7 user /usr/local/bin/cleanup.sh +``` + +`/etc/cron.d/backup` 示例: + +```sh +# m h dom mon dow user command +30 2 * * * root /usr/local/bin/backup.sh +``` + +`/etc/cron.d/cleanup` 示例: + +```sh +# m h dom mon dow user command +45 3 * * 7 user /usr/local/bin/cleanup.sh +``` + +通过这种方式,使用 `/etc/cron.d/` 可以更加灵活地管理和组织不同的任务。 + + + +## 5. 周期性任务目录 + +### 5.1 目录说明 + +1. **`/etc/cron.hourly/`**:每小时运行一次目录中的所有脚本。 +2. **`/etc/cron.daily/`**:每天运行一次目录中的所有脚本。 +3. **`/etc/cron.weekly/`**:每周运行一次目录中的所有脚本。 +4. **`/etc/cron.monthly/`**:每月运行一次目录中的所有脚本。 + +### 5.2 **使用方法** + +1. **创建脚本**:将要定期运行的脚本放置到相应的目录中。 + +2. **设置权限**:确保脚本具有执行权限。可以使用以下命令设置: + + ```sh + chmod +x /etc/cron.daily/your_script.sh + ``` + +### 5.3 示例案例 + +1. **每小时运行任务**: + + - **用例**:每小时检查系统资源使用情况并记录到日志文件。 + + - **步骤**: + + 1. 创建脚本 `/etc/cron.hourly/resource_check.sh`: + + ```sh + #!/bin/bash + date >> /var/log/resource_usage.log + top -b -n1 | head -n 20 >> /var/log/resource_usage.log + ``` + + 2. 设置脚本权限: + + ```sh + chmod +x /etc/cron.hourly/resource_check.sh + ``` + +2. **每日运行任务**: + + - **用例**:每天备份数据库。 + + - **步骤**: + + 1. 创建脚本 `/etc/cron.daily/db_backup.sh`: + + ```sh + #!/bin/bash + mysqldump -u root -pYourPassword your_database > /backup/db_$(date +\%F).sql + # $(date +%F) 表示的是命令替换(command substitution),而不是简单的变量。 + # 在Shell中,命令替换的形式是 $(command),它会执行括号内的命令,并用其输出结果替换整个表达式。 + ``` + + 2. 设置脚本权限: + + ```sh + chmod +x /etc/cron.daily/db_backup.sh + ``` + +3. **每周运行任务**: + + - **用例**:每周清理一次系统缓存。 + + - **步骤**: + + 1. 创建脚本 `/etc/cron.weekly/cache_cleanup.sh`: + + ```sh + #!/bin/bash + apt-get clean + ``` + + 2. 设置脚本权限: + + ```sh + chmod +x /etc/cron.weekly/cache_cleanup.sh + ``` + +4. **每月运行任务**: + + - **用例**:每月生成并发送系统报告。 + + - **步骤**: + + 1. 创建脚本 `/etc/cron.monthly/system_report.sh`: + + ```sh + #!/bin/bash + report_date=$(date +\%Y-\%m-\%d) + df -h > /var/reports/system_report_$report_date.txt + mail -s "Monthly System Report" admin@example.com < /var/reports/system_report_$report_date.txt + ``` + + 2. 设置脚本权限: + + ```sh + chmod +x /etc/cron.monthly/system_report.sh + ``` + +### 5.4 注意事项 + +1. **脚本格式**:确保脚本是可执行的,并且首行包含正确的shebang(例如 `#!/bin/bash`)。 +2. **日志记录**:为调试和审计目的,可以在脚本中添加日志记录功能,以便了解脚本的执行情况。 +3. **测试脚本**:在将脚本放入周期性任务目录之前,最好手动测试脚本,以确保其在预期环境下正常工作。 + +通过将脚本放置到相应的周期性任务目录中,可以轻松实现定期自动化任务的管理,无需手动编辑cron表。这样不仅简化了管理任务的复杂性,还提高了系统的自动化和可靠性。 + +# 周期任务作业 + +### 周期任务练习 + +执行在家目录touch a.txt + +1. 每天3:00执行一次 + + ```shell + 0 3 * * * touch ~/a.txt + ``` + +2. 每周六2:00执行 + + ```shell + 0 3 * * 6 touch ~/a.txt + ``` + +3. 每周六1:05执行 + + ```shell + 5 1 * * 6 touch ~/a.txt + ``` + +4. 每周六1:25执行 + + ```shell + 25 1 * * 6 touch ~/a.txt + ``` + +5. 每天8:40执行 + + ```shell + 40 8 * * * touch ~/a.txt + ``` + +6. 每天3:50执行 + + ```shell + 50 3 * * * touch ~/a.txt + ``` + +7. 每周一到周五的3:40执行 + + ```shell + 40 3 * * 1-5 touch ~/a.txt + ``` + +8. 每周一到周五的3:41开始,每10分钟执行一次 + + ```shell + 41/10 3 * * 1-5 touch ~/a.txt + ``` + +9. 每天的10:31开始,每2小时执行一次 + + ```shell + 31 10-23/2 * * * touch ~/a.txt + ``` + +10. 每周一到周三的9:30执行一次 + + ```shell + 30 9 * * 1-3 touch ~/a.txt + ``` + +11. 每周一到周五的8:00,每周一到周五的9:00执行一次 + + ```shell + 0 8,9 * * 1-5 touch ~/a.txt + ``` + +12. 每天的23:45分执行一次 + + ```shell + 45 23 * * * touch ~/a.txt + ``` + +13. 每周三的23:45分执行一次 + + ```shell + 45 23 * * 3 touch ~/a.txt + ``` + +14. 每周一到周五的9:25到11:35、13:00到15:00之间,每隔10分钟执行一次 + + ```shell + 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分别执行一次 + + ```shell + 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执行一次 + + ```shell + 0 10,16 * * * touch ~/a.txt + ``` + +17. 每天8:10、16:00、21:00分别执行一次 + + ```shell + 10 8 * * * touch ~/a.txt + 0 16,21 * * * touch ~/a.txt + ``` + +18. 每天7:47、8:00分别执行一次 + +```shell +47 7 * * * touch ~/a.txt +0 8 * * * touch ~/a.txt +``` +