Linux是一个多用户多任务的操作系统,可以在Linux中为不同的用户设置不同的运行环境,具体做法是设置不同用户的环境变量。
一、概念
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。
环境变量分类
- 按照生命周期:
- 永久:需要用户修改相关的配置文件(
/etc/profile),变量永久生效。 - 临时:用户利用export命令,在当前终端下声明环境变量,关闭Shell终端失效。
- 永久:需要用户修改相关的配置文件(
- 按照作用域:
- 系统环境变量:对该系统中所有用户都有效。
- 用户环境变量:只对特定的用户有效。
- 按照生命周期:
常见环境变量
- PATH:指定命令的搜索路径。
- HOME:指定用户的主工作目录,即用户登录后默认的目录。
- HISTSIZE:保存历史命令记录的条数。
- LOGNAME:当前用户的登录名。
- HOSTNAME:主机的名称。
- SHELL:当前用户使用shell。
- LANG/LANGUGE:当前使用的语言。
- MAIL:当前用户的邮件存放目录。
环境变量相关命令
- env:显示所有环境变量
- set:显示本地定义的shell变量
- echo:显示某个环境变量值
echo $PATH - export:设置一个新的环境变量
export HELLO=hello - unset:清除环境变量
unset HELLO - readonly:设置只读环境变量
readonly HELLO
二、PATH相关
一些文件及作用
/etc/profile:登录环境设置文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时该文件被执行,并从/etc/profile.d目录配置文件中搜集shell的设置。/etc/bashrc: 非登录环境设置文件,为每一个运行bash shell的用户执行此文件,当bash shell被打开时该文件被读取。~/.bash_profile: 登录环境设置文件,每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时该文件仅仅执行一次。默认情况下会设置一些环境变量,执行用户的.bashrc文件。~/.bashrc:非登录环境设置文件,该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时该该文件被读取。~/.bash_logout:当每次退出bash shell时执行该文件。
一些对比
profile用于登录式shell,bashrc用于每个交互式shell。~/.bash_profile是交互式login方式进入bash时运行的,~/.bashrc是交互式non-login方式进入bash时运行的。- 二者设置大致相同,通常前者会调用后者,所以一般优先把变量设置在
.bashrc里面。 - 比如在crontab里面执行一个命令,
.bashrc设置的环境变量会生效,而.bash_profile不会。
- 二者设置大致相同,通常前者会调用后者,所以一般优先把变量设置在
login shell:当你通过终端输入用户名和密码,然后进入到terminal,这时候进入的shell环境就叫做是login shell,例如通过ssh远程进入到主机。
no-login shell:不需要输入用户名密码而进入的shell环境,如通过桌面环境进入,在应用管理器中找到termianl图标,然后双击打开终端,此时no-login shell,也可为调用子shell。
在
MacOS系统中,每次运行termianl的时候系统都会默认运行一个login shell环境,所以在MacOS系统中~/目录下只有一个.bash_profile文件而没有.bashrc文件。
- 设置PATH
- 永久设置(需要重启,可以使用
source使其立即生效)- 修改
/etc/profile,对所有用户生效 - 修改
~/.bash_profile,对当前用户生效
- 修改
- 临时设置
export $PATH=$PATH:/usr/local/your_path/bin
- 永久设置(需要重启,可以使用
/usr/bin下面的都是系统预装的可执行程序,它会随着系统升级而改变。/usr/local/bin目录是给用户放置自己的可执行程序的地方,不会因系统升级而被覆盖。
usr指Unix System Resource,而不是User。
$PATH优先级:越靠前优先级越高,即某个可执行文件同时在/usr/local/bin和/usr/bin下,$PATH为/usr/local/bin:/usr/bin,则当检测到/usr/local/bin时找到此文件即中止了,直接执行此文件。