登录式:是需要用户名、密码登录后才能进入的shell(或者通过–login”选项生成的shell)。
- 直接通过终端输入账号密码登录
- 使用 “su - UserName” 切换的用户
非登录式:不需要输入用户名和密码即可打开的Shell,例如:直接命令“bash”就是打开一个新的非登录shell,在Gnome或KDE中打开一个“终端”(terminal)窗口程序也是一个非登录shell。会继承上一个shell的全部变量。
- su UserName
- 图形界面下打开的终端
- 执行脚本 (当我们执行脚本的时候.我们就已经进入到了一个子shell)
- 任何其它的bash实例
执行exit命令,退出一个shell(登录或非登录shell);
执行logout命令,退出登录shell(不能退出非登录shell)。
1.2 交互属性交互式:在终端上执行,shell等待你的输入,并且立即执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、退出。当你退出后,shell也终止了。
非交互式:以shell script(非交互)方式执行。在这种模式 下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾EOF,shell也就终止了。
2、bash 的 startup 文件【CentOS 7为例】Linux shell是用户与Linux系统进行交互的媒介,而bash作为目前Linux系统中最常用的shell,它支持的startup文件也并不单一,甚至让人感到费解。
例如:/etc/profile、/etc/bash.bash_logout、.bash_profile、.bashrc和.bash_logout。
总的来说,分为两大类:“profile”系列和 “rc”系列。
“profile”系列代表文件为:~/.bash_profile,通过 –noprofile 选项可以阻止系统加载 “profile” 系列的 startup 文件。
原理上讲,【登陆shell】启动时会加载 “profile” 系列的 startup 文件,而【交互式非登陆shell】启动时会加载 “rc” 系列的startup文件。
2.1 登录 shell 的 startup 文件登录时执行顺序:/etc/profile -> ~/.bash_profile
若 ~/.bash_profile 不存在,则换成 ~/.bash_login,还不存在则换成 ~/.profile。也就是说,如果这三个都同时存在,那就只执行 ~/.bash_profile。
登出时执行顺序:~/.bash_logout -> /etc/bash.bash_logout。
如果是非交互的登录 shell,则没有登出这个过程。
2.2 非登录 shell 的 startup 文件启动 shell 时执行:~/.bashrc或–rcfile选项指定的文件。
“rc” 系列 startup 文件还包括 /etc/bashrc。但是系统并不直接调用这个文件,而是通过~/.bashrc 文件显式地调用它。
3、startup 文件的默认调用关系startup文件的加载并不像上面所述的那样简单。这是因为在CentOS中,startup文件之间还存在着默认的显式调用关系,它们是:
- ~/.bash_profile显式调用~/.bashrc文件;
- ~/.bashrc显式调用/etc/bashrc文件;
“profile”系列文件的主要目的在于为【登录shell】设置环境变量和启动程序;而“rc”系列文件的主要目的在于设置功能和别名。
Linux中“rc”是英文“run command”的缩写,表示文件中存放需要执行的命令。其实这也非常符合逻辑,设置功能就要执行shopt命令,而设置别名要执行alias命令。与“rc”系列互补,“profile”系列用来设置环境变量,它不会去调用这两个命令,但却经常需要使用export语句。
这两个文件同时提到了一个位置:/etc/profile.d目录。这个目录用于存放个性化配置脚本,你可以把自己需要的全局配置放入以.sh结尾的文件中,系统在执行/etc/profile和/etc/bashrc文件时,都会择机调用它们。这样做最大的好处是便于维护,而且相对更加安全。
4、最后对于【登录shell】而言,“交互式”执行“登陆”和“登出”相关的“profile”系列startup文件,“非交互式”只执行“登陆”相关的“profile”系列startup文件;
对于【非登陆shell】而言,“交互式”执行“rc”系列的startup文件,而“非交互式”执行的配置文件由环境变量BASH_ENV指定。
Linux中startup文件区分全局和个人:全局startup文件放在/etc目录下,用于设置所有用户共同的配置,除非你清楚地知道你在做的事情,否则不要轻易改动它们;个人startup文件放在~目录下,用于设置某个用户的个性化配置。
~/.bash_profile会显式调用~/.bashrc文件,而~/.bashrc又会显式调用/etc/bashrc文件,这是为了让所有交互式界面看起来一样。无论你是从远程登录(登陆shell),还是从图形界面打开终端(非登陆shell),你都拥有相同的提示符,因为环境变量PS1在/etc/bashrc文件中被统一设置过。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)