各种外壳轮廓有什么区别?

时间:2011-06-16 13:35:55

标签: bash shell profile

〜/ .bashrc,〜/ .bash_login,〜/ .bash_logout,〜/ .bash_profile,〜/ .profile,/ etc / profile,/ etc / bash.bashrc,/ etc / ssh / ssh_config之间有什么区别和sshd_config,什么时候加载它们的目的是什么?

2 个答案:

答案 0 :(得分:6)

bash的手册页说明了bash shell有以下初始化文件:

/etc/profile
      The systemwide initialization file, executed for login shells
/etc/bash.bashrc
      The systemwide per-interactive-shell startup file
/etc/bash.bash.logout
      The systemwide login shell cleanup file, executed when a login shell exits
~/.bash_profile
      The personal initialization file, executed for login shells
~/.bashrc
      The individual per-interactive-shell startup file
~/.bash_logout
      The individual login shell cleanup file, executed when a login shell exits
~/.inputrc
      Individual readline initialization file

显然,不同的shell(bash,zsh,csh和其他)似乎有不同的配置文件。似乎有不同的linux和unix版本的shell:csh,ksh,bash,zsh,... Bash有.bashrc,Zsh有.zshrc等。还可以区分登录shell和非登录shell以及系统范围的默认值和用户特定的默认值之间。

区分登录非登录 shell是有意义的,因为某些命令只应在登录时处理,而其他命令应在每次打开新命令时运行终端窗口。这是.bash_profile and .bashrc之间的差异。对于bash,每次启动bash的新副本时都会重新加载.bashrc,即当您启动新的bash但不登录时。只有在您登录时才会加载.bash_profile.profile。 bashrc中的abbtreviation rc代表“运行命令”或“运行控制”,是旧Unix系统采用的约定。

系统级默认值为..

  • /etc/profile ..登录shell,用于登录
  • 的交互式shell
  • /etc/bashrc ..非登录Bash shell

主目录中用户特定的默认值〜for ..

  • ~/.profile .login shell,登录后调用
  • ~/.bashrc ..非登录shell,如果已登录
  • ~/.bash_profile .login shell,登录后调用(优先级较低)

用于登录和注销的主目录中的用户特定默认值

  • ~/.bash_login ..登录shell(登录时调用)
  • ~/.bash_logout .login shell(在注销时调用)

以下链接很有用:.bashrc vs .bashprofile.bash_profile vs .bashrcbash manual page(man bash)和Zsh/Bash startup files loading order (.bashrc, .zshrc etc.)

答案 1 :(得分:2)

我碰巧对这些文件感到好奇,并自己做了一些实验。结果与文档中的内容略有不同。

我知道交互式和非交互式或登录和非登录之间的区别。

我尝试了两台计算机,我的macbook pro与OS 10.9和一台服务器与ubuntu服务器13.10。我将以下命令添加到/ etc / profile:

echo "Loading /etc/profile"

和/etc/bash.bashrc,/etc/bashrc,/etc/bash.bashrc,~ / .profile,〜/ .bash_profile,〜/ .bashrc,〜/ .bash_login中的类似命令并确保这些命令文件本身并不相互来源。

(OS 10.9,GNU bash,版本3.2.51(1)-release(x86_64-apple-darwin13)) 在Mac上,使用交互式登录bash,我有:

Loading /etc/profile
Loading ~/.bash_profile

这意味着直接加载的文件只是/ etc / profile和〜/ .bash_profile。

使用交互式非登录bash,我有:

Loading ~/.bashrc

表示直接加载的文件是〜/ .bashrc。

(ubuntu server 13.10 GNU bash,版本4.2.45(1)-release(x86_64-pc-linux-gnu)) 在ubuntu上,通过交互式登录bash,我有:

Loading /etc/profile
Loading ~/.bash_profile

这意味着直接加载的文件只是/ etc / profile和〜/ .bash_profile。

使用交互式非登录bash,我有:

Loading /etc/bash.bashrc
Loading ~/.bashrc

这意味着直接加载的文件是/etc/bash.bashrc和〜/ .bashrc。

我不知道为什么〜