SSH 登录后,.bashrc 文件没有被加载问题探究与解决
问题描述
SSH 登录Linux 后,ll
命令不能用,而不使用 SSH 登录的时候却没有问题,问题的根本原因时 ~/.bashrc
文件没有被加载。
快速解决
1. 单次解决
1 | source ~/.bashrc |
这样的解决方法需要每次SSH登录后都要执行一遍
2. 永久解决
在 ~/.profile
文件(不存在则创建一个)中添加如下代码
1 |
|
技术探究
SHELL配置文件规则
在Linux系统中,当用户登录后,Shell会按照一定的规则和顺序加载各个目录的 profile
文件。这些 profile
文件通常包含了用户的环境变量、别名、函数等配置信息,用于定制用户的Shell会话环境。
以下是登录Linux后,Shell加载各个目录的 profile
的加载规则和顺序:
全局配置文件:
- /etc/profile:这是所有用户的全局配置文件,当登录Shell时,系统会首先读取并执行这个文件。它通常包含一些系统级别的环境变量和函数定义。
- /etc/profile.d/*.sh:这是一个目录,其中包含了以.sh结尾的脚本文件。系统会依次读取并执行这个目录下的所有脚本文件。这些脚本文件通常用于设置一些特定的环境变量或执行一些系统级的初始化操作。
用户个人配置文件: - ~/.bash_profile:这是用户个人的配置文件,当用户登录时,如果该文件存在,Shell会读取并执行它。这个文件通常用于设置用户级别的环境变量和别名。
- ~/.bash_login :如果
~/.bash_profile
不存在,Shell会尝试加载这个文件。这也是用户个人的配置文件,与~/.bash_profile
的功能类似。 - ~/.profile :如果前两个文件都不存在,Shell会加载
~/.profile
文件。这个文件同样是用户个人的配置文件,用于定义用户的环境和初始化设置。
交互式Shell配置文件:
- ~/.bashrc:这个文件是在用户每次打开一个新的交互式Shell时加载的。它通常包含了用户的别名、函数定义以及一些交互式Shell的特定设置。
- /etc/bashrc:这是全局的交互式Shell配置文件,当用户打开一个新的交互式Shell时,也会加载这个文件。这个文件通常包含一些全局的别名和函数定义。
加载顺序:
- /etc/profile
- /etc/profile.d/*.sh
- ~/.bash_profile(如果存在)
- ~/.bash_login (如果 ~/.bash_profile 不存在)
- ~/.profile(如果前两个文件都不存在)
交互式Shell时:~/.bashrc
和 /etc/bashrc
(通常是在新的交互式Shell启动时加载)
实践探究
1. ssh 默认参数登录
通过在 home
目录中手动添加多个文件 .bash_profile
.bash_login
. profile
.bashrc
发现 在 SSH 默认参数登录的情况下 .bash_profile
.bash_login
.profile
三个文件按照顺序先后优先级只会加载一个文件,而 .bashrc
不会被加载。
所以这种情况解决办法就是在 .profile
中添加对 .bashrc
的手动加载
2. SSH 指定SHELL登录
其实在SSH登录时可以指定使用的 shell
,如 sh
或者 bash
。比如指定 bash
代码如下:
1 |
|
这种情况登录后,.bash_profile
.bash_login
.profile
等三个文件都不会被加载,只会加载 .bashrc
探究总结
SSH 的不同登录方式会对 SHELL 配置文件加载有所影响,概况就是 要么是 .bashrc
要么就是 .bash_profile
.bash_login
.profile
三个中的一个。
所以为了适配不同的登录方式,脚本代码应该写在 .bashrc
中,然后再在 .profile
中添加对 .bashrc
的手动加载。
这样就能保住不同的登录方式都有相同的结果。
- 本文作者:scwang90
- 本文链接:https://blog.scwang90.cn/2024/03/22/ssh-bashrc/index.html
- 版权声明:本分享所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!