自从我将服务器从 Debian 8 升级到 9 后,我的 bash 出现了奇怪的行为。当我通过 ssh 登录时,没有加载任何配置文件,我收到以下提示:
Linux myserver 4.9.0-7-amd64 #1 SMP Debian 4.9.110-1 (2018-07-05) x86_64
Last login: Mon Jul 16 22:37:12 2018 from x.x.x.x
-bash-4.4$
运行echo $0
返回 -bash。我已将echo "sourcing ..."
一行放入 /etc/profile、~/.bashrc 中以查看何时调用它们,但这些行均未显示。但是,如果我手动获取这些文件,则会显示文本,并且文件也会按应有的方式获取。
使用 strace (在这里找到)查看哪些文件已打开,我看到所有配置文件都已打开。
echo exit | strace bash -li |& less | grep '^open'
我得到以下输出:
...
open("/etc/profile", O_RDONLY) = 3
open("/etc/bash.bashrc", O_RDONLY) = 3
open("/etc/profile.d/", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3
open("/etc/profile.d/bash_completion.sh", O_RDONLY) = 3
...
open("/home/myuser/.bash_profile", O_RDONLY) = 3
open("/home/myuser/.bash_history", O_RDONLY) = 3
open("/home/myuser/.bash_history", O_RDONLY) = 3
...
open("/home/myuser/.bash_logout", O_RDONLY) = 3
open("/etc/bash.bash_logout", O_RDONLY) = -1 ENOENT (No such file or directory)
...
仅当我以普通用户身份登录时才会出现此问题,一旦我 su 到 root,配置文件就会按应有的方式加载。我怀疑现在可能只有 root 有权调用这些文件,但我快疯了,因为我检查的所有内容都应该是这样。
非常感谢任何提示或想法。