环境变量

Posted on 2021-11-05 22:35  arra1888  阅读(114)  评论(0)    收藏  举报

bash shell 中用环境变量来保存有关会话和工作环境地信息,这也是其名称的来源。依据作用范围,可以分为全局变量和局部变量。局部变量在用 export 导出后,就可以成为全局变量,一般被写入文件并按时执行的也是全局变量。依据生效的用户来区分,可以分为系统变量和用户变量,前者一般在 /etc 目录下,后者一般在用户目录下,文件名中一般含有 bash。

常用 /etc/profile 和 ~/.bashrc 两个文件来分别设置全局的系统、用户环境变量。

需要注意的是,并非任何情况下都会加载系统环境变量,注意区分交互式与非交互式、登录的与非登录的 shell。交互式 bash 读取并执行 ~/.bashrc 文件,非交互式并不执行此文件,而是执行环境变量 ${BASH_ENV} 中指定的文件。登录 shell 一般要经过认证,比如输入密码或进行密钥的认证等,但登录之后开启的 shell,比如在图形界面下点击 terminal 的图标开启的 shell,算作非登录 shell,非登录 shell 不执行 /etc/profile。

关于全局的与局部的环境变量,其差别主要体现在使用 shell 定义新的环境变量之后,其开启的新 shell 或者其运行的脚本是否将新定义继承,当然这些也都是非登录 shell。

关于系统的与用户的,主要是体现在 su 和 sudo 命令上面。

su 命令用于切换用户身份,su uname 只是以 uname 身份执行命令,不会加载 uname 环境变量,类似非登录的、非交互的 shell。

su -l uname,或者省略 l,su - uname,则会使用登录 shell,加载环境变量并切换至 uname 的登录目录。

sudo 命令也仅仅是以 root 用户身份来执行后面的命令,并不改变环境变量、当前目录等,看作非登录的、非交互的 shell。

sudo su 或者 sudo su -,结合上面的分析就可以知道,sudo su 应该是切换为 root 用户,但不会更新环境变量,sudo su - 切换为 root 用户,并更新为 root 的环境变量,类似登录 shell。

关于 sudo 的行为属性,可以使用 visudo 来修改。

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3