diff --git "a/42 \345\210\230\350\213\217\350\220\214/20240615_\350\256\276\347\275\256\346\226\207\344\273\266\351\232\220\350\227\217\346\235\203\351\231\220\343\200\201\345\221\250\346\234\237.md" "b/42 \345\210\230\350\213\217\350\220\214/20240615_\350\256\276\347\275\256\346\226\207\344\273\266\351\232\220\350\227\217\346\235\203\351\231\220\343\200\201\345\221\250\346\234\237.md" index 15bb56ca506a5fb5c82f37506fbdd38bca6e06c8..c15152ddd5b1170a9df4be0354f3af7dcd7d7e9d 100644 --- "a/42 \345\210\230\350\213\217\350\220\214/20240615_\350\256\276\347\275\256\346\226\207\344\273\266\351\232\220\350\227\217\346\235\203\351\231\220\343\200\201\345\221\250\346\234\237.md" +++ "b/42 \345\210\230\350\213\217\350\220\214/20240615_\350\256\276\347\275\256\346\226\207\344\273\266\351\232\220\350\227\217\346\235\203\351\231\220\343\200\201\345\221\250\346\234\237.md" @@ -39,7 +39,7 @@ 1. 命令格式 ```BASH - * *   *  *  *  command + * *   *  *  *  command 文件的绝对 分  时  日  月  周  命令 ``` @@ -51,54 +51,66 @@ - 第5列标识号星期0~6(0表示星期天) - 第6列要运行的命令 +注: + +- “ * ”:表示每个 + +- “ L ”:Last 最后(只能用于 日、周) + +- “ ?”:表示任意一个 + +- “ w ":weekday 工作日 + + + 2. 特殊标志 - - ```bash - -u #<用户名称> 是指设定指定<用户名称>的定时任务,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的定时任务。 - ``` +- ```bash + -u #<用户名称> 是指设定指定<用户名称>的定时任务,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的定时任务。 + ``` - - ```bash - -l  #列出该用户的定时任务设置 - ``` +- ```bash + -l  #列出该用户的定时任务设置 + ``` - - ```bash - -r  #删除该用户的定时任务设置 - ``` +- ```bash + -r  #删除该用户的定时任务设置 + ``` - - ```bash - -e  #编辑该用户的定时任务设置 - ``` +- ```bash + -e  #编辑该用户的定时任务设置 + ``` 3. cron是linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务 - ```bash - /sbin/service crond start #启动服务 - /sbin/service crond stop #关闭服务 - /sbin/service crond restart #重启服务 - /sbin/service crond reload #重新载入配置 - ``` +```bash +/sbin/service crond start #启动服务 +/sbin/service crond stop #关闭服务 +/sbin/service crond restart #重启服务 +/sbin/service crond reload #重新载入配置 +``` -4. 添加定时任务 +4. 定时任务 - ```bash - crontab -e #编辑cron任务模式 - i #默认文字编辑器为vim,按i字母键即可添加cron任务 - G #进入后 按G 到最后一行 - o #插入下一行同时进入了编辑模式 - - # 完成后 - ESC #按ESC键退出编辑模式 - :wq #键入:wq保存 - service crond restart #重启crontab服务 - ``` +```bash +crontab -e #编辑cron任务模式 +i #默认文字编辑器为vim,按i字母键即可添加cron任务 +G #进入后 按G 到最后一行 +o #插入下一行同时进入了编辑模式 + +# 完成后 + ESC #按ESC键退出编辑模式 + :wq #键入:wq保存 + service crond restart #重启crontab服务 +``` 5. 查看任务列表 - ```bash - crontab -l - ``` +```bash +crontab -l +``` + - #### 作业:周期任务练习 @@ -194,7 +206,7 @@ crontab -e #编辑cron任务模式 25,35,45,55 9 * * 1-5 echo "每周一到周五的9:25、9:35、9:45、9:55执行一次" /home/paidx/0615作业/a.txt 5-59/10 10 * * 1-5 echo"每周一到周五从10:05开始每隔10分钟执行一次" /home/paidx/0615作业/a.txt 05,15,25,35 11 * * 1-5 * * 1-5 echo"每周一到周五的11:05、11:15、11:25、11:35执行一次" /home/paidx/0615作业/a.txt - */10 13-15 * * 1-5 echo"每周一到周五的13:00-15:00Z之间每隔10分钟执行一次" /home/paidx/0615作业/a.txt + */10 13-14* * 1-5 echo"每周一到周五的13:00-15:00之间每隔10分钟执行一次" /home/paidx/0615作业/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分别执行一次 diff --git "a/42 \345\210\230\350\213\217\350\220\214/20240618_ \347\216\257\345\242\203\345\217\230\351\207\217.md" "b/42 \345\210\230\350\213\217\350\220\214/20240618_ \347\216\257\345\242\203\345\217\230\351\207\217.md" new file mode 100644 index 0000000000000000000000000000000000000000..50e7d3c8326e4bd8e655b14c8e0e07416dc359da --- /dev/null +++ "b/42 \345\210\230\350\213\217\350\220\214/20240618_ \347\216\257\345\242\203\345\217\230\351\207\217.md" @@ -0,0 +1,258 @@ +#### 环境变量 + +**环境变量(environment variables)** 一般是指在操作系统中用来指定操作系统运行环境的一些参数,是操作系统为了满足不同的应用场景预先在系统内预先设置的一大批全局变量 + +#### 环境变量分类 + +1. **按生命周期分:** + - 永久的:在环境变量脚本文件中配置,用户每次登录时会自动执行这些脚本,相当于永久生效。 + - 临时的:用户利用export命令,在当前终端下声明环境变量,关闭Shell终端失效。 +2. **作用域分:** + - 系统环境变量:公共的,对全部的用户都生效。 + - 用户环境变量:用户私有的、自定义的个性化设置,只对该用户生效。 + +![20240618_环境变量分类](./img/20240618_环境变量分类.png) + +#### Linux系统环境变量分类 + +1. **系统级环境变量:** + 系统级环境变量对所有用户和进程都可见。它们通常在系统启动时被设置,并被所有用户和进程共享。一些常见的系统级环境变量包括PATH(用于指定可执行文件的搜索路径)、LANG(用于设置系统语言环境)等。 + +2. **用户级环境变量:** + 用户级环境变量是每个用户独立设置的,只对该用户及其相关进程可见。这些变量可以在登录时通过不同的配置文件(如.bashrc、.bash_profile、.profile等)设置。常见的用户级环境变量包括HOME(指定用户的主目录路径)、USER(当前用户名)等。 + +3. **进程级环境变量:** + 进程级环境变量是由特定进程设置的,并且仅对该进程及其子进程可见。这些变量可以通过编程语言(如C语言中的setenv函数)在程序中进行设置,或者通过终端命令行在特定的进程上下文中设置。 + +注: + +- 系统级环境变量和用户级环境变量通常是通过配置文件进行设置和管理的。对于 **系统级环境变量**,常见的配置文件包括/etc/profile和/etc/environment。 +- 对于 **用户级环境变量**,常见的配置文件包括用户的个人配置文件(如.bashrc、.bash_profile、.profile等)。 + +#### 其他环境变量 + +- HOME:指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)。 + +- PWD:显示当前目录。 + +- SHELL:当前用户用的是哪种Shell。 + +- HISTSIZE:保存历史命令记录的条数。 + +- HOSTNAME:主机的名称,应用程序如果要用到主机名的话,通常是从这个环境变量中取得。 + +- LOGNAME:当前用户的登录名。 + +- LANG/LANGUGE:和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。 + + +#### 环境变量文件 + +1. **/etc/profile 文件** + - 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从 /etc/profile.d 目录的配置文件中收集 shell 的设置 + - 如果对 /etc/profile 有修改的话必须得手动执行 source /etc/profile,修改才会生效,此修改对每个用户都生效 + +2. **/etc/profile.d 目录(推荐)** + - **`/etc/profile` 在每次启动时会执行 `/etc/profile.d` 下全部的脚本文件** +3. **/etc/.bashrc 文件** + - **为每一个运行终端的用户执行此文件**。**当终端被打开时,该文件被读取**。如果你想对**所有的使用终端的用户**修改某个配置并在以后打开的终端都生效的话可以修改这个文件,**修改这个文件不用重启,重新打开一个终端即可生效** +4. **~/.bash_profile 或 ~/.bash_login 或 ~/.profile 文件(推荐)** + - 每个用户都可使用该文件输入专用于自己使用的 shell 信息,当用户登录时,该文件**仅仅执行一次!** 默认情况下,它设置一些环境变量,执行用户的 ~/ .bashrc 文件 + - 该文件类似于 /etc/profile,也是需要手动执行 **source ~/.profile** ,**修改才会生效** ,**/etc/profile 对所有用户生效,~/.profile 只对当前用户生效** + +5. **~/.bashrc 文件** + - 当用户登录时以及每次打开新的Shell时该文件都将被读取(每个用户都有一个 ~/.bashrc 文件,在用户目录下) 此文件类似于 /etc/bashrc + - 不需要重启就可以生效,重新打开一个 bash 即可生效,/etc/bashrc 对所有用户新打开的 bash 都生效,但 ~/.bashrc 只对当前用户新打开的 bash 生效 + - 不推荐在里面配置用户专用的环境变量,因为每开一个Shell,该文件都会被读取一次,效率肯定受影响。 +6. 执行顺序 + 1. `/etc/profile` + 2. `/etc/bashrc` + 3. `/etc/profile.d` + 4. `~/.bash_profile | ~/.bash_login | ~/.profile` + 5. `~/.bashrc` + +#### 相关命令 + +1. **env**:查看**当前用户**全部的环境变量 + +2. **env|grep 环境变量名**:筛选包含的环境变量 + + ```bash + evn|grep PATH + #查看包含PAYTH的环境变量 + ``` + +3. **export**:显示**当前系统**定义的所有环境变量 + +4. **printenv 环境变量名**:查看指定环境变量的值 + + ```bash + printenv PATH + ``` + +5. **echo $环境变量名**:查看指定环境变量的值 + + ```bash + echo $MY_AGE + ``` + +6. **unset 环境变量名**:清除指定环境变量 + + ```bash + unset MY_NAME + ``` + +7. 添加环境变量 + + - 将`当前用户的家目录`添加到`PATH`环境变量的末尾位置 + + ```bash + # 创建一个临时变量 new_path,将 $HOME 添加到 $PATH 的末尾 + new_path="$PATH:$HOME" + # 使用临时变量 new_path 来更新 PATH 环境变量 + export PATH="$new_path" + ``` + + - 将`/tmp`添加到PATH`环境变量的开始位置(注意:这可能会覆盖其他路径中的同名命令,所以请谨慎操作) + + ```bash + new_path="/tmp:$PATH" + export PATH="$new_path" + ``` + + + +### 练习题 1: 显示当前所有的环境变量 + +* 使用`printenv`或`env`命令来显示所有的环境变量。 + + +```bash +env +printenv +``` + +### 练习题 2: 显示`HOME`环境变量的值 + +* 使用`echo`命令和`$`符号来显示`HOME`环境变量的值。 + + +```bash +echo $HOME +``` + +### 练习题 3: 临时设置一个新的环境变量 + +* 设置一个名为`MY_AGE`的环境变量,并将其值设置为`18`。 + + +```bash +export MY_AGE="18" +``` + +### 练习题 4: 显示新设置的环境变量 + +* 使用`echo`命令来显示`MY_AGE`的值。 + + +```bash +echo $MY_AGE +``` + +### 练习题 5: 在新的shell会话中检查环境变量 + +* 打开一个新的终端窗口或标签页,并尝试显示`MY_AGE`的值。你会看到什么?为什么? + + ```bash + #在新的终端 + echo $MY_AGE #不会输出任何内容 + # 因为 export MY_AGE="18" 是临时环境变量 + ``` + +### 练习题 6: 修改`PATH`环境变量 + +* 将`你当前用户的家目录`添加到你的`PATH`环境变量的末尾位置 + + +```bash +# 创建一个临时变量 new_path,将 $HOME 添加到 $PATH 的末尾 +new_path="$PATH:$HOME" +# 使用临时变量 new_path 来更新 PATH 环境变量 +export PATH="$new_path" +echo $PATH +``` + +将`/tmp`添加到你的`PATH`环境变量的开始位置,(注意:这可能会覆盖其他路径中的同名命令,所以请谨慎操作)。 + +```bash +new_path="/tmp:$PATH" +export PATH="$new_path" +``` + +### 练习题 7: 验证`PATH`的修改 + +* 使用`echo`命令显示`PATH`的值,并确认`前面添加的目录`已经被添加到对应位置。 + + +```bash +echo $PATH +``` + +### 练习题 8: 永久设置环境变量 + +* 在你的shell配置文件中(如`~/.bashrc`、`~/.bash_profile`、`~/.zshrc`等,取决于你使用的shell和配置)添加一行来永久设置`MY_NAME`,值设置为`奥德彪`。 + +例如,对于bash shell,你可以使用: + + +```bash +vim ~/.bashrc +export MY_NAME="奥德彪" +``` + +如何让`MY_NAME`生效,并验证 + +```bash +source ~/.bashrc +echo $MY_NAME #查看 +``` + +### 练习题 9: 清理 + +* 清除你之前设置的`MY_AGE`和`PATH`的修改(如果你不想永久保留它们)。 + + +```bash +unset MY_AGE +unset PATH +``` + +### 练习题 10: 修改默认器 + +* 使用`EDITOR`变量,修改你默认的编辑器为nano。 + + +```bash +vim ~/.bashrc +export EDITOR=nano +source ~/.bashrc #使更改生效 +``` + +### 练习题 11: 修改语言 + +* 使用`LANG`变量,让你的文件支持中文和utf8编码来避免乱码。 + +```bash +vim ~/.bashrc +export LANG=zh_CN.UTF-8 +source ~/.bashrc #使更改生效 +``` + +- 使用`LANGUAGE`变量,让你的命令提示为中文 + +```bash +vim ~/.bashrc +export LANGUAGE=zh_CN.UTF-8: +source ~/.bashrc #使更改生效 +``` + diff --git "a/42 \345\210\230\350\213\217\350\220\214/img/20240618_\347\216\257\345\242\203\345\217\230\351\207\217\345\210\206\347\261\273.png" "b/42 \345\210\230\350\213\217\350\220\214/img/20240618_\347\216\257\345\242\203\345\217\230\351\207\217\345\210\206\347\261\273.png" new file mode 100644 index 0000000000000000000000000000000000000000..e3d7ce51c3fe5c2d29e0b11795d994eb7db0e3ef Binary files /dev/null and "b/42 \345\210\230\350\213\217\350\220\214/img/20240618_\347\216\257\345\242\203\345\217\230\351\207\217\345\210\206\347\261\273.png" differ