linux环境变量相关
几种环境变量文件的区别
- /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切换用户
- 非登录shell的情况:
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的区别
-
交互式登录:(清除掉所有变量,通过文件重新读入)
- 直接通过终端输入账号密码登录
- 使用
su -UserName
切换的用户
-
执行顺序:(影响该shell的配置文件)
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile--> ~/.bashrc--> /etc/bashrc
-
非交互式登录:(会继承上一个shell的全部变量)
su UserName
- 图形界面下打开的终端
- 执行脚本(当我们执行脚本的时候.我们就已经进入到了一个子shell)
- 任何其它的bash实例
-
执行顺序:(影响该shell的配置文件)
~/.bashrc--> /etc/bashrc--> /etc/profile.d/*.sh