每一种编程语言中,我们都会碰到变量的作用域的问题。Linux 是一个多用户的操作系统。多用户意味着每个用户登录系统后,都有自己专用的运行环境。而这个环境是由一组变量所定义, 这组变量被称为环境变量。用户可以对自己的环境变量进行修改以达到对环境的要求。
本地vs环境
本地变量只对当前shell生效,用“变量名=变量值”设定
环境变量对子进程也生效,用export设定
用户vs系统
系统级变量对所有用户生效
用户级变量只对当前用户生效
暂时vs永久
如果要设定永久的变量,需要写入相应文件
否则就是暂时的,下次登录不生效
对所有用户生效的永久性变量
vi /etc/profile
这类变量对系统内的所有用户都生效,所有用户都可以使用这类变量。作用范围是整个系统,只在 root 下才能修改。
修改后使用source命令进行生效
source /etc/profile
对单一用户生效的永久性变量
在用户目录下的.bash_profile 文件中添加变量,该文件是隐藏文件
若bash是以login方式执行时,读取~/.bash_profile,若它不存在,则读取~/.bash_login,若前两者不存在,读取~/.profile。
当bash是以non-login形式执行时,读取~/.bashrc
临时有效的环境变量
此类环境变量只对当前的 shell 有效。当我们退出登录或者关闭终端再重新打开时,这个环境变量就会消失。
export 变量名=变量值 #设置新的环境变量
变量名=变量值 #设置或更新本地变量
echo $变量名 #打印
unset 变量名 #删除
readonly 变量名 #设置只读
env #显示当前用户的变量;
set #显示当前 shell 变量(shell 变量包含用户变量)
生效顺序
bash会在用户登录时,读取下列四个环境配置文件:
全局环境变量设置文件:/etc/profile、/etc/bashrc。 用户环境变量设置文件:~/.bash_profile、~/.bashrc。
读取顺序:① /etc/profile、② ~/.bash_profile、③ ~/.bashrc、④ /etc/bashrc。
① /etc/profile:此文件为系统的每个用户设置环境信息,系统中每个用户登录时都要执行这个脚本,如果系统管理员希望某个设置对所有用户都生效,可以写在这个脚本里,该文件也会从/etc/profile.d目录中的配置文件中搜集shell的设置。
② ~/.bash_profile:每个用户都可使用该文件设置专用于自己的shell信息,当用户登录时,该文件仅执行一次。默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
③ ~/.bashrc:该文件包含专用于自己的shell信息,当登录时以及每次打开新shell时,该文件被读取。
④ /etc/bashrc:为每一个运行bash shell的用户执行此文件,当bash shell被打开时,该文件被读取。
常见的环境变量
BASH Bash Shell的全路径 CDPATH 用于快速进入某个目录。 PATH 决定了shell将到哪些目录中寻找命令或程序 HOME 当前用户主目录 HISTSIZE 历史记录数 LOGNAME 当前用户的登录名 HOSTNAME 指主机的名称 SHELL 当前用户Shell类型 LANGUGE 语言相关的环境变量,多语言可以修改此环境变量 MAIL 当前用户的邮件存放目录 PS1 基本提示符,对于root用户是#,对于普通用户是$
su和sudo
su - user #切换用户user且切换环境变量
su user #切换用户user,不切换环境变量
sudo user #使用user权限运行单个命令
su命令会启动一个新shell,环境变量和加不加“-”有关,执行时需要输入新用户的密码
sudo是以新用户的权限运行某个命令,这个能运行的范围由root用户规定,输入的是现在用户的密码