0%

环境变量PATH等

Linux是一个多用户多任务的操作系统,可以在Linux中为不同的用户设置不同的运行环境,具体做法是设置不同用户的环境变量。

一、概念

      环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。

  1. 环境变量分类

    • 按照生命周期:
      • 永久:需要用户修改相关的配置文件(/etc/profile),变量永久生效。
      • 临时:用户利用export命令,在当前终端下声明环境变量,关闭Shell终端失效。
    • 按照作用域:
      • 系统环境变量:对该系统中所有用户都有效。
      • 用户环境变量:只对特定的用户有效。
  2. 常见环境变量

    • PATH:指定命令的搜索路径。
    • HOME:指定用户的主工作目录,即用户登录后默认的目录。
    • HISTSIZE:保存历史命令记录的条数。
    • LOGNAME:当前用户的登录名。
    • HOSTNAME:主机的名称。
    • SHELL:当前用户使用shell。
    • LANG/LANGUGE:当前使用的语言。
    • MAIL:当前用户的邮件存放目录。
  3. 环境变量相关命令

    • env:显示所有环境变量
    • set:显示本地定义的shell变量
    • echo:显示某个环境变量值echo $PATH
    • export:设置一个新的环境变量export HELLO=hello
    • unset:清除环境变量unset HELLO
    • readonly:设置只读环境变量readonly HELLO

二、PATH相关

  1. 一些文件及作用

    • /etc/profile:登录环境设置文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时该文件被执行,并从/etc/profile.d目录配置文件中搜集shell的设置。

    • /etc/bashrc: 非登录环境设置文件,为每一个运行bash shell的用户执行此文件,当bash shell被打开时该文件被读取。

    • ~/.bash_profile: 登录环境设置文件,每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时该文件仅仅执行一次。默认情况下会设置一些环境变量,执行用户的.bashrc文件。

    • ~/.bashrc:非登录环境设置文件,该文件包含专用于你的bash shellbash信息,当登录时以及每次打开新的shell时该该文件被读取。

    • ~/.bash_logout:当每次退出bash shell时执行该文件。

  2. 一些对比

    • profile用于登录式shellbashrc用于每个交互式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文件。

  1. 设置PATH
    • 永久设置(需要重启,可以使用source使其立即生效)
      • 修改/etc/profile,对所有用户生效
      • 修改~/.bash_profile,对当前用户生效
    • 临时设置
      • export $PATH=$PATH:/usr/local/your_path/bin

/usr/bin下面的都是系统预装的可执行程序,它会随着系统升级而改变。/usr/local/bin目录是给用户放置自己的可执行程序的地方,不会因系统升级而被覆盖。

usrUnix System Resource,而不是User

  1. $PATH优先级:越靠前优先级越高,即某个可执行文件同时在/usr/local/bin/usr/bin下,$PATH/usr/local/bin:/usr/bin,则当检测到/usr/local/bin时找到此文件即中止了,直接执行此文件。