linux环境变量相关

zhushixia 2020-05-20

几种环境变量文件的区别

  • /etc/profile
    • 系统全局环境变量设定
    • 此文件为系统的为每个用户设置环境信息
    • 当用户第一次登录时,该文件被执行
    • 并从/etc/profile.d 目录的配置文件中搜集shell的设置
  • /etc/bashrc
    • 系统全局环境变量设定
    • 为每一个运行bash shell的用户执行此文件
    • 当bash shell被打开时,该文件被读取
  • ~/.bash_profile
    • 每个用户都可使用该文件输入专用于自己使用的shell信息
    • 在用户每次登录系统时被读取,里面的所有 命令都会被bash执行,该文件仅仅执行一次
    • 默认情况下,他设置一些环境变量,执行用户的.bashrc文件
    • .profile(Bourne Shell和Korn Shell).login(C Shell)两个文件是.bash_profile的同义词,目的是为了兼容其它Shell
  • ~/.bashrc
    • 该文件包含专用于你的bash shell的bash信息
    • 当登录时以及每次打开新的shell时,该文件被读取
    • 一般来说都会在.bash_profile里调用.bashrc脚本以便统一配置用户环境
  • ~/.bash_logout
    • 当每次退出系统(退出bash shell)时,执行该文件
    • 可把一些清理工作的命令放到这文件中

~/.profile和 ~/.bashrc的区别:

  • 都具有个性化定制功能
  • ~/.profile可以设定本用户专有的路径,环境变量等,它只能登入的时候执行一次
  • ~/.bashrc也是某用户专有设定文档,可以设定路径,命令别名,每次shell script的执行都会使用它一次

用户登录系统时候,相关的文件执行顺序

  • 首先启动 /etc/profile文件

  • 然后再启动用户目录下的 ~/.bash_profile~/.bash_login~/.profile文件中的其中一个,执行的顺序为:~/.bash_profile~/.bash_login~/.profile

  • 如果 ~/.bash_profile文件存在的话,一般还会执行 ~/.bashrc文件。

  • 准确的说,当shell是交互式登录shell时,读取.bash_profile文件,如:

    • 系统启动
    • 远程登录
    • 使用su -切换用户
  • 当shell是交互式登录和非登录shell时都会读取.bashrc文件,如:

    • 非登录shell的情况:
      • 图形界面中打开新终端
      • 使用su切换用户

source命令:

  • source命令也称为“点命令”,也就是一个点符号(.),是bash的内部命令。

    • source命令(从 C Shell 而来)是bash shell的内置命令
    • 点命令(.),就是个点符号(从Bourne Shell而来)是source的另一名称。
  • 功能:

    • 使Shell读入指定的Shell程序文件并依次执行文件中的所有语句
    • source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。
  • 用法:

    source filename 或 . filename

source filename 与 sh filename 及./filename执行脚本的区别

  • 当shell脚本具有可执行权限时,用sh filename./filename执行脚本是没有区别得。
    • ./filename是因为当前目录没有在PATH中,所以"."是用来表示当前目录的。
  • sh filename:重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量
    • 子shell是新建的,改变的变量不会被带回父shell,除非使用export。
  • source filename(.):读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell
    • 脚本里面所有新建、改变变量的语句都会保存在当前shell里面。

交互式shell和非交互式shell(interactive shell and non-interactive shell)

  • 交互式模式:在终端上执行,shell等待你的输入,并且立即执行你提交的命令。

    • 这种模式被称作交互式是因为shell与用户进行交互。
    • 这种模式也是大多数用户非常熟悉的:登录、执行一些命令、退出。
    • 当你退出后,shell也终止了。
  • 非交互式模式:以shell script(非交互)方式执行。

    • 在这种模式 下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。
    • 当它读到文件的结尾EOF,shell也就终止了。

登录式shell和非登录式shell

  • 登录shell:是需要用户名、密码登录后才能进入的shell(或者通过--login”选项生成的shell)。

  • 非登录shell:不需要输入用户名和密码即可打开的Shell,例如:

    • 直接命令“bash”就是打开一个新的非登录shell
    • 在Gnome或KDE中打开一个“终端”(terminal)窗口程序也是一个非登录shell
  • 执行exit命令,退出一个shell(登录或非登录shell)

  • 执行logout命令,退出登录shell(不能退出非登录shell)

交互式登录shell和非交互式登录shell的区别

  • 交互式登录:(清除掉所有变量,通过文件重新读入)

    1. 直接通过终端输入账号密码登录
    2. 使用su -UserName切换的用户
  • 执行顺序:(影响该shell的配置文件)

    • /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile--> ~/.bashrc--> /etc/bashrc
  • 非交互式登录:(会继承上一个shell的全部变量)

    1. su UserName
    2. 图形界面下打开的终端
    3. 执行脚本(当我们执行脚本的时候.我们就已经进入到了一个子shell)
    4. 任何其它的bash实例
  • 执行顺序:(影响该shell的配置文件)

    • ~/.bashrc--> /etc/bashrc--> /etc/profile.d/*.sh

相关推荐