如何更改字幕用户的主目录?

如何更改字幕用户的主目录?

我在 WSL2 环境中添加了一个用户(用户 2),然后想将该用户 2 的主目录更改为其他目录。但肯定出了问题。

$ usermod -d /var/lib/app1 user2
usermod: no changes
$ vim /etc/passwd
user2:x:1001:1001::/var/lib/app1:/bin/sh
$ sudo su user2

/var/lib/app1但事实并非如此/home/abc

我在这里遗漏了什么?

答案1

这是预期的行为。su默认情况下不会更改工作目录。它只切换用户。根据su手册页

为了向后兼容,su默认不更改当前目录,只设置环境变量HOMESHELLUSER如果LOGNAME目标用户不是 root 用户)。

su确实改变了用户,$HOME但没有改变cd该用户的$HOME

例如,我有 2 个用户,kulfy。BASHkulfy1是前一个用户的默认 shell,而 sh(指向 DASH 的符号链接)是后一个用户的默认 shell。

kulfy@leo:~$ echo $HOME
/home/kulfy
kulfy@leo:~$ sudo su kulfy1
$ echo $USER  
kulfy1  # User changed
$ pwd      
/home/kulfy # but directory didn't change 
$ echo $HOME
/home/kulfy1 # and HOME variable now points to the HOME of user2, i.e., kulfy1

要更改目录,您可以使用--login或简单地-使用su。来自手册页:

--l--login
        以登录 shell 的形式启动 shell,其环境与真实登录类似:

           o 清除所有环境变量,除了TERM以及由指定的变量--whitelist-environment

           o 初始化环境变量HOMESHELLUSERLOGNAME, 和PATH

           o 更改目标用户的主目录

           o 将 shell 的 argv[0] 设置为 '-',以使该 shell 成为登录 shell

kulfy@leo:~$ sudo su --login kulfy1 
$ echo $USER
kulfy1
$ pwd
/home/kulfy1  # directory changed automatically
$ echo $HOME
/home/kulfy1

相关内容