我在 Windows 11 PC 上的 WSL 下安装了 Ubuntu Linux。安装过程中我设置了一个用户名,perdiem
。一切启动并运行后,我cd
输入了~
,最终进入的目录是/home/ls
。我不知道这是为什么;我以为这是我的用户名。奇怪的是,它实际上是一个 Linux 命令——有点令人困惑。
这不是问题,但有人知道为什么ls
将其建立为主目录而不是我的用户名吗?
输出id
:
uid=1000(ls) gid=1000(ls) groups=1000(ls),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),100(users),107(netdev)
输出grep /home/ls /etc/passwd
:
ls:x:1000:1000:,,,:/home/ls:/bin/bash
如果
cd ~
您进入/home/ls
,则在该会话中,$HOME
环境变量已被设置为/home/ls
。这可能是由于/home/ls
在 中的用户帐户信息中将主目录设置为/etc/passwd
(或用于用户帐户信息的任何插件机制),或者是由于某些因素将环境变量更改为不正确的值(仅适用于该特定会话,或适用于所有登录会话)。如果您没有写权限
/home/ls
,而该/home/perdiem
目录存在并且您的常规用户可以写入,那么我会怀疑自定义登录脚本中存在错误或输入错误的命令导致$HOME
环境变量被重新分配。如果
/home/perdiem
不存在,而/home/ls
存在,并且后者具有正确的所有权和权限来充当您的主目录,则表明负责创建用户帐户的脚本存在错误。在这种情况下,/etc/passwd
您的用户帐户对应的行也会将主目录指定为/home/ls
。您可以通过
getent passwd perdiem
查看输出行上的第 6 个冒号分隔的字段来检查这一点。输出如下
这意味着主目录在用户帐户信息中指定正确,因此
$HOME
在启动登录会话后必定有某些东西改变了变量。结果如下
意味着错误出现在用户帐户信息中,表明用户帐户创建时出现错误。
Debian/Ubuntu 似乎提供了
/usr/sbin/adduser
一个用于创建用户的包装脚本,并将其视为/usr/sbin/useradd
低级工具。如果您或 WSL 发行版打包人员自定义此脚本时出现错误,可能会导致该脚本调用useradd
带有错误参数的低级命令。但如果这是在安装 WSL 环境期间创建的初始用户帐户,那么该用户帐户可能是由安装过程中使用的任何脚本直接创建的,该脚本可能涉及或根本不涉及
useradd
命令或adduser
脚本。在通用 Linux 系统上,您可以退出 X-11(或 Wayland),注销 USER 权限,然后在没有 X-11 或图形界面运行的经典命令控制台中以 root 权限登录。请确保您未在任何 tty 中以 USER 权限登录,并且没有图形界面正在运行。换句话说,任何需要或在 USER 权限下运行的程序都不应处于活动状态。
然后发出以下命令:
退出 root 账户,然后尝试以 NEW_USER 身份登录(仍在命令控制台中),看看是否一切正常。如果一切正常,您可以运行“startx”(我使用 X-11,每次登录后都会手动使用“startx”启动它)来启动 GUI。您可能需要对 X-11、您选择的桌面管理器等进行一些重新配置。
更改用户名和目录的另一种方法是创建一个新用户!然后,您可以将所有非系统内容从当前用户目录复制/移动到新的用户目录。当一切运行正常且配置完成后,您可以删除旧用户和目录。简单易行,而且始终有效。
没有更多信息,我无法确定用户名为什么被设置为“ls”。我通常使用 Debian,并且总是从命令控制台启动,这样更容易跟踪问题——例如,如果需要重新配置 X-11,我可以直接终止它,然后在控制台模式下进行更改(例如,修改 xorg.conf),然后使用 startx 重新启动 X-11 显示器。无需重启或图形登录管理器。我非常老派!