一般的系统可能会有
/etc/profile
/etc/bashrc
~/.bashrc
~/.bash_profile
profile 是某个用户唯一的用来设置环境变量的地方, 因为用户可以有多个 shell 比如 bash, sh, zsh 之类的, 但像环境变量这种其实只需要在统一的一个地方初始化就可以了, 而这就是 profile.
bashrc是专门用来给 bash 做初始化的比如用来初始化 bash 的设置, bash 的代码补全, bash 的别名, bash 的颜色. 以此类推也就还会有 shrc, zshrc 这样的文件存在了, 只是 bash 比较常用.
/etc/xxx 文件里面的内容对所用的用户都适用
~/.xxx 文件里面的内容只适用于个人
login shell:该模式表示用户登入,比如使用 "su -" 命令, 或者用 ssh 连接到某一个服务器上, 都会使用该用户默认shell 启动 login shell 模式.该模式下的 shell 会去自动执行 /etc/profile 和 ~/.profile 文件, 但不会执行任何的 bashrc 文件, 所以一般再 /etc/profile 或者 ~/.profile 里我们会手动去 source bashrc 文件.
no-login shell:该模式是我们在终端下直接输入 bash 或者 bash -c “CMD” 来启动的 shell.该模式下是不会自动去运行任何的 profile 文件.
interactive shell:该默认是交互式shell, 就是用来和用户交互的, 提供了命令提示符可以输入命令.在这种模式下会存在一个叫 PS1 的环境变量, 如果还不是 login shell 的则会去 source /etc/bash.bashrc 和 ~/.bashrc 文件
non-interactive shell:
/etc/profile
/etc/bashrc
~/.bashrc
~/.bash_profile
profile 是某个用户唯一的用来设置环境变量的地方, 因为用户可以有多个 shell 比如 bash, sh, zsh 之类的, 但像环境变量这种其实只需要在统一的一个地方初始化就可以了, 而这就是 profile.
bashrc是专门用来给 bash 做初始化的比如用来初始化 bash 的设置, bash 的代码补全, bash 的别名, bash 的颜色. 以此类推也就还会有 shrc, zshrc 这样的文件存在了, 只是 bash 比较常用.
/etc/xxx 文件里面的内容对所用的用户都适用
~/.xxx 文件里面的内容只适用于个人
login shell:该模式表示用户登入,比如使用 "su -" 命令, 或者用 ssh 连接到某一个服务器上, 都会使用该用户默认shell 启动 login shell 模式.该模式下的 shell 会去自动执行 /etc/profile 和 ~/.profile 文件, 但不会执行任何的 bashrc 文件, 所以一般再 /etc/profile 或者 ~/.profile 里我们会手动去 source bashrc 文件.
no-login shell:该模式是我们在终端下直接输入 bash 或者 bash -c “CMD” 来启动的 shell.该模式下是不会自动去运行任何的 profile 文件.
interactive shell:该默认是交互式shell, 就是用来和用户交互的, 提供了命令提示符可以输入命令.在这种模式下会存在一个叫 PS1 的环境变量, 如果还不是 login shell 的则会去 source /etc/bash.bashrc 和 ~/.bashrc 文件
non-interactive shell:
SSH login, sudo su - [USER] 或者 mac 下开启终端这些都是典型的interactive login shell, 所以会有 PS1 变量, 并且会执行/etc/profile ~/.profile两个文件
本文转自西鼠 51CTO博客,原文链接:http://blog.51cto.com/10630401/1981763,如需转载请自行联系原作者