bash初始化机制

  <强>这篇文章主要介绍了详解bash中的初始化机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。      <强> Bash初始化文件         

在下列情况下,我们可以获得一个登录shell:

  

登录系统时获得的顶层壳,无论是通过本地终端登录,还是通过网络ssh登录。这种情况下获得的登录shell是一个交互式壳。   
在终端下使用,登录选项调用bash,可以获得一个交互式登录shell。   
在   脚本中使用,登录选项调用bash(例如:# !/bin/bash——登录)可以得到一个非交互式的登录shell。   
使用su -切换到指定用户时,获得此用户的登录shell。如果不使用,则获得non-login壳。   
登录shell启动时首先读?etc/profile系统全局配置,然后依次查找~/. bash_profile、~/. bash_login、~/. profile三个配置文件,并且读取首个找到的并且可读的文件。

  

登录shell退出时读取并执行~/. bash_logout中的   命令。如果配置文件存在但不可读,则会显示错误消息,如果文件不存在,bash将自动搜索下一个文件。

  

默认在/etc/profile文件中会定义路径,用户,邮件、主机名、HISTSIZE等全局环境变量,还会自动导入/etc/bash.bashrc文件(包含系统级壳函数和别名),以及/etc/profile.d路径下被用于针对特定程序进行初始化的所有* . sh。

        

非登录壳意味着在启动时不必通过系统身份验证。GUI中用户打开的终端默认为非登录壳,可以通过注销   命令判断:

  
 #,在Ubuntu  GUI桌面打开一个终端
  在注销
  bash:注销:not  login  shell:, use 退出# 39;
  祝辞bash ——登录
  祝辞,logout  #,正常登出,什么也不会输出
  

非登录壳牌在初始化时仅读取~/ashrc资(源文件,而~/. bashrc文件会自动被~/. bash_profile或~/8乓募釉?因此为了保证登录shell和交互式non-login壳得到相同的配置,一般将环境变量定义在~/. bashrc文件中。

  <>之前的祝辞,echo “export  sflag=\“login  shell  will 阅读却;能够消息\““,在祝辞,~/.profile ,   在bash   祝辞,echo  sflag 美元;   ,,,,,,,,,#,找不到这个变量,会打印一个空行   在退出   祝辞,bash ——login    祝辞,echo  sflag 美元;   login  shell  will 阅读;却;能够message    祝辞,注销         

通过bash命令执行   脚本时会以非交互(经常)的方式启动壳,这保证了在脚本执行过程中不会被用户干扰。在非交互式脚本启动时,仅会加那么它将扩展BASH_ENV变载量指向的文件。但要注意,由于路径变量默认不会被非交互式壳加载,因此变那么它将扩展BASH_ENV的量,值应该为绝对路径。

  

通过特殊变量,可以查看当前壳的模式:

  
祝辞echo 美元-
  himBHs  #,带有& # 39;我# 39;就是交互式壳
  

另一个简单的方式是检查当前壳中是否存在提示符环境变量PS1。

  <>以前if  [, -z “PS1"美元;,];,then  echo “非交互式“;else  echo “交互式“;fi      <>强特殊情况         

如果使用命令sh调用bash,则为了保证兼容性会按照sh的方式对bash进行初始化。作为登录shell启动时,bash依次读取和~//etc/配置文件。剖面配置文件。作为non-login壳启动时,bash仅会读取环境变量ENV指向的文件。

        

当通过以下方式启动bash时:

  <>前设置set  -o  posix 或,export  POSIXLY_CORRECT=1   bash ——posix   

bash会尽可能按照POSIX标准进行初始化,仅会读取环境变量ENV指向的文件。

        

使用rshd远程启动脚本时仅会加载~/ashrc文(件,但要注意的是尽量不要使用远程登录命令,telnet, rsh, rcp等远程命令,因为这些命令会传输未加密的明文信息。如果有远程访问需求尽量使用SSH。

        

在创建进程时会在task_struct中记录进程运行时所需要的信息。其中UID(真实用户ID)用于记录创建进程的用户的ID, EUID(有效用户ID)用于判断当前进程对文件的访问级别,一般情况下UID=EUID。如果可执行文件的set-user-ID: SUID位有效(例如:-rwsr-xr-x,用户的x被替换为s),表示当该文件被执行时,进程具有文件所有者的权限而不是执行者的权限(EUID的值为文件所有者的ID)。

bash初始化机制