Ubuntu 22.04下useradd命令行为不符合预期的问题求助
Ubuntu 22.04下useradd命令行为不符合预期的问题求助
我来帮你捋捋这个问题哈,从你贴出来的操作记录和配置信息来看,核心原因其实很明确——新建用户的默认shell不是bash,导致.bashrc这些bash专属的配置文件没被加载,咱们一步步说:
问题拆解
先看你执行useradd -D的输出,里面明确写着SHELL=/bin/sh。在Ubuntu 22.04里,/bin/sh其实是dash的软链接,可不是咱们常用的bash。所以当你用su - test3登录时,系统启动的是dash而不是bash,自然不会去加载.bashrc、.profile这些bash的配置文件,这就出现了你看到的:提示符只有简单的$,看起来像是配置没生效的情况。
另外补充下,你说useradd test1没创建家目录是正常行为,useradd默认确实不会自动创建用户家目录,必须加上-m参数才会从/etc/skel里复制默认配置文件到家目录下,这部分你操作是对的。
解决办法
这里给你几个不同场景的解决方案:
- 临时切换到bash:如果只是想临时在test3用户下用bash,切换过去后直接执行
bash就行,此时.bashrc会被自动加载,提示符也会变成bash的样式。 - 永久修改单个用户的默认shell:执行
usermod -s /bin/bash test3,修改test3用户的默认shell为bash,之后再用su - test3登录就会直接进入bash环境了。 - 修改全局默认配置(后续新建用户都用bash):编辑
/etc/default/useradd文件,把里面的SHELL=/bin/sh改成SHELL=/bin/bash,保存后,以后用useradd -m创建的新用户默认shell都是bash,就不会再出现这个问题了。
验证方式
你可以执行ls -l /bin/sh看看,会发现它指向的是dash,而/bin/bash是独立的可执行文件,这就是为什么用sh登录时bash配置不生效的原因。
备注:内容来源于stack exchange,提问作者Bryan Chen
相关产品推荐
相关产品推荐

