diff --git "a/26\345\210\230\345\200\251\345\200\251/20240618_\347\216\257\345\242\203\345\217\230\351\207\217.md" "b/26\345\210\230\345\200\251\345\200\251/20240618_\347\216\257\345\242\203\345\217\230\351\207\217.md" new file mode 100644 index 0000000000000000000000000000000000000000..b5f3deb24d3a4d0a9917d92f8a7563844720c537 --- /dev/null +++ "b/26\345\210\230\345\200\251\345\200\251/20240618_\347\216\257\345\242\203\345\217\230\351\207\217.md" @@ -0,0 +1,140 @@ +### 1、系统启用步骤: + +1. 系统启动加载: + - /etc/environment 加载系统级的环境变量,不管有没有登录 +2. 登录Shell加载顺序 + - /etc/profile 系统被登录,就加载文件,任何人登录都执行 + - ~/.profile 具体哪个人登录后,加载自己目录下的文件 +3. 交互式Shell加载顺序: + - ~/.bashrc 加载对应的shell的配置文件,用于设置用户个性化的Shell环境。类似.zshrc .xshrc + - 不同的shell加载不同的文件,bash才加载.bashrc,zsh加载.zshrc + - 交互式:提供命令行窗口,非交互式:直接写在脚本里 +4. 配置文件的理论加载顺序通常是 + - /etc/environment + - /etc/profile + - ~/.profile + - ~/.bashrc + +### 2、环境变量的类型和作用 + +1. 用户级 + - 存储在用户家目录的个人配置文件中 + - ~/.bashrc + - ~/.profile + - 用于定义**用户个性化**的Shell设置,如别名、路径等 +2. 系统级 + - 存储在系统范围的配置文件中 + - /etc/environment + - /etc/profile + - 为**所有用户和系统服务**提供全局的环境设置 + - java_home + + + +### 3、设置环境变量 + +命令行是临时的,写入脚本文件是永久的 + +#### 3.1 永久设置环境变量(写在指定类型的配置文件) + +1. 进入配置文件 + + - vim .bashrc 或 ~/.profile(用户级别) + - export MY_VAR="value" + - vim /etc/environment 或 /etc/profile(系统级别) + - MY_VAR="value" + - 不需要使用 export命令 + +2. 编辑 + + ```bash + # 设置临时环境变量 + export MY_VAR="value" + + # 自定义命令别名 alias 别名='命令' + alias ll='ls -alF' + + # 设置路径变量(在 ~/.bashrc 中添加) + export PATH=$PATH:/path/to/your/scripts + + # 定义Java环境变量(在 ~/.bashrc 或 /etc/environment 中添加) + export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 + export PATH=$JAVA_HOME/bin:$PATH + + # 设置代理服务器 (在 ~/.bashrc 中添加) + export HTTP_PROXY=http://proxy.example.com:8080 + export HTTPS_PROXY=http://proxy.example.com:8080 + + # 配置编辑器 (在 ~/.bashrc 中添加) + export EDITOR=/usr/bin/vim + + # 设置语言和地区 (在 ~/.bashrc 或 /etc/environment 中添加) + export LANG=en_US.UTF-8 + export LC_ALL=en_US.UTF-8 + ``` + + +- 如果修改配置文件后不生效,则可以 + - 重新连接 + - 手动加载 + - source 文件名 + +#### 3.2 临时环境变量 + +只在当前Shell会话中有效,关闭Shell会话后失效 + +1. 临时变量(局部) + - 变量='值/命令' +2. 临时环境变量(全局) + - export 变量='值/命令' + + + +### 4、临时变量与环境变量 + +- 定义一个变量时,在变量名前加了export关键字,就是环境变量,作用域是全局环境子子进程中也有效 +- 否则就是临时变量,只在当前脚本文件或shell中有效 + +```bash +# 临时变量(局部) +# 临时变量:在脚本中定义,但不导出的变量,仅在脚本执行期间有效,不会影响其他 shell 会话或子进程 +MY_NAME="张三" +echo $MY_NAME + +# 环境变量(全局) +# 环境变量:使用 export 导出的变量在当前 shell 会话和所有子进程中都有效 +export MY_NAME="张三" +echo $MY_NAME +``` + + + +### 5、常用的环境变量 + +**系统级** + +1. PATH + - 可执行文件的搜索路径 +2. LANG + - 定义系统的语言环境和字符集 + - export LANG=zh_CN.utf8,编辑文件不乱码 +3. LANGUAGE + - 用于设置消息语言的优先级 ,提示语言为中文 +4. EDITOR + - 默认文本编辑器 editor + +**用户级** + +1. HOME:当前用户的主目录 +2. USER:当前用户名 +3. UID:当前用户的用户ID +4. SHELL:当前用户的默认Shell + +命令的执行顺序 + +1. 先判断该命令是否为绝对路径或者是相对路径 --> 直接执行 +2. 判断命令是否为别名 --> 就执行别名对应的命令 + - 别名命令即用alias命令创建的自己命令的别名 + - 格式:alias 别名=命令 + - 取消格式:unset 别名 +3. 从环境变量PATH值对应的路径中找有没有这个命令 --> 就从那个路径去执行 diff --git "a/26\345\210\230\345\200\251\345\200\251/20240618_\347\216\257\345\242\203\345\217\230\351\207\217\347\273\203\344\271\240.md" "b/26\345\210\230\345\200\251\345\200\251/20240618_\347\216\257\345\242\203\345\217\230\351\207\217\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..57d1c7eda619714506b786878ec398840464928b --- /dev/null +++ "b/26\345\210\230\345\200\251\345\200\251/20240618_\347\216\257\345\242\203\345\217\230\351\207\217\347\273\203\344\271\240.md" @@ -0,0 +1,130 @@ +### 练习题 1: 显示当前所有的环境变量 + +* 使用`printenv`或`env`命令来显示所有的环境变量。 + + +```bash +root@iZf8z9datgf1u8yo3zh7hxZ:~# env +SHELL=/bin/bash +PWD=/root +LOGNAME=root +XDG_SESSION_TYPE=tty +MOTD_SHOWN=pam +HOME=/root +``` +### 练习题 2: 显示`HOME`环境变量的值 + +* 使用`echo`命令和`$`符号来显示`HOME`环境变量的值。 + + +```bash +root@iZf8z9datgf1u8yo3zh7hxZ:~# echo $HOME +/root +``` +### 练习题 3: 临时设置一个新的环境变量 + +* 设置一个名为`MY_AGE`的环境变量,并将其值设置为`18`。 + + +```bash +root@iZf8z9datgf1u8yo3zh7hxZ:~# export MY_AGE='18' +``` +### 练习题 4: 显示新设置的环境变量 + +* 使用`echo`命令来显示`MY_AGE`的值。 + + +```bash +root@iZf8z9datgf1u8yo3zh7hxZ:~# echo $MY_AGE +18 +``` +### 练习题 5: 在新的shell会话中检查环境变量 + +* 打开一个新的终端窗口或标签页,并尝试显示`MY_AGE`的值。你会看到什么?为什么? +* 显示为空,因为MY_AGE是临时变量 + +### 练习题 6: 修改`PATH`环境变量 + +* 将`你当前用户的家目录`添加到你的`PATH`环境变量的末尾位置 + + +```bash +root@iZf8z9datgf1u8yo3zh7hxZ:~# export PATH=$PATH:~/root +``` +将`/tmp`添加到你的`PATH`环境变量的开始位置,(注意:这可能会覆盖其他路径中的同名命令,所以请谨慎操作)。 + +``` + +``` + +### 练习题 7: 验证`PATH`的修改 + +* 使用`echo`命令显示`PATH`的值,并确认`前面添加的目录`已经被添加到对应位置。 + + +```bash +root@iZf8z9datgf1u8yo3zh7hxZ:~# echo $PATH +/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/root +``` +### 练习题 8: 永久设置环境变量 + +* 在你的shell配置文件中(如`~/.bashrc`、`~/.bash_profile`、`~/.zshrc`等,取决于你使用的shell和配置)添加一行来永久设置`MY_NAME`,值设置为`奥德彪`。 + +例如,对于bash shell,你可以使用: + + +```bash +root@iZf8z9datgf1u8yo3zh7hxZ:~# echo 'export MY_NAME='奥德彪'' >> ~/.bashrc +``` +如何让`MY_NAME`生效,并验证 + +```bash +root@iZf8z9datgf1u8yo3zh7hxZ:~# source ~/.bashrc +root@iZf8z9datgf1u8yo3zh7hxZ:~# echo $MY_NAME +奥德彪 +``` + +### 练习题 9: 清理 + +* 清除你之前设置的`MY_AGE`和`PATH`的修改(如果你不想永久保留它们)。 + + +```bash +root@iZf8z9datgf1u8yo3zh7hxZ:~# unset MY_NAME +root@iZf8z9datgf1u8yo3zh7hxZ:~# echo $MY_NAME + +root@iZf8z9datgf1u8yo3zh7hxZ:~# echo $PATH +/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/root +# 赋值 +root@iZf8z9datgf1u8yo3zh7hxZ:~# export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +root@iZf8z9datgf1u8yo3zh7hxZ:~# echo $PATH +/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +``` +### 练习题 10: 修改默认器 + +* 使用`EDITOR`变量,修改你默认的编辑器为nano。 + + +```bash +# 临时 +root@iZf8z9datgf1u8yo3zh7hxZ:~# export EDITOR=nano + +# 永久 +echo 'export EDITOR=nano' >> ~/.bashrc +source ~/.bashrc +``` + +### 练习题 11: 修改语言 + +* 使用`LANG`变量,让你的文件支持中文和utf8编码来避免乱码。 + +```bash +echo 'export LANG=zh_CN.utf8' >> ~/.bashrc +``` + +- 使用`LANGUAGE`变量,让你的命令提示为中文 + +```bash +echo 'export LANGUAGE=zh_CN.utf8' >> ~/.bashrc +``` +