〜/ .bashrc,〜/ .bash_login,〜/ .bash_logout,〜/ .bash_profile,〜/ .profile,/ etc / profile,/ etc / bash.bashrc,/ etc / ssh / ssh_config之间有什么区别和sshd_config,什么时候加载它们的目的是什么?
答案 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,用于登录/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 .bashrc,bash 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。
我不知道为什么〜