我有一个 Ubuntu 20.04 LTS 服务器版本,在创建新用户并通过 ssh 连接在 shell 中使用它时遇到了一个奇怪的问题。重现此问题的步骤如下:
- 使用 root 帐户创建新用户
useradd --create-home test
。 - 以 root 用户登录来测试使用
su test
。
结果:
root@server:~# useradd --create-home test;
root@server:~# echo $BASH_VERSION
5.0.17(1)-release
root@server:~# su test;
$ echo $BASH_VERSION
$
提示未设置,环境变量未加载,自动完成功能不起作用,别名不起作用,就好像 .profile 和 .bashrc 文件不存在,但它们确实存在并且已正确设置其权限:
root@server:/home/test# md5sum /etc/skel/.profile ./.profile
f4e81ade7d6f9fb342541152d08e7a97 /etc/skel/.profile
f4e81ade7d6f9fb342541152d08e7a97 ./.profile
root@server:/home/test# md5sum /etc/skel/.bashrc ./.bashrc
1f98b8f3f3c8f8927eca945d59dcc1c6 /etc/skel/.bashrc
1f98b8f3f3c8f8927eca945d59dcc1c6 ./.bashrc
root@server:/home/test# ls -lah
total 24K
drwxr-xr-x 3 test test 4.0K Sep 18 13:18 .
drwxr-xr-x 9 root root 4.0K Sep 18 13:17 ..
-rw-r--r-- 1 test test 220 Feb 25 2020 .bash_logout
-rw-r--r-- 1 test test 3.7K Feb 25 2020 .bashrc
-rw-r--r-- 1 test test 807 Feb 25 2020 .profile
为什么当我以测试用户身份登录时配置文件没有加载?
答案1
正如文件所说su
:
为了向后兼容,
su
默认不更改当前目录,仅设置环境变量 HOME 和 SHELL(如果目标用户不是 root,则加上 USER 和 LOGNAME)。建议始终使用 选项--login
(而不是其快捷方式-
),以避免混合环境造成的副作用。
当处于--login
或之下时-l
,su
还运行登录shell,它反过来提供.profile
(.bashrc
应该始终提供)。
要查看已加载的文件,请在这些文件的开头插入一行简单的内容:
echo "$BASH_SOURCE" >&2