为什么所有用户在以 root 身份使用 su 之后都从 /root 而不是他们的主目录开始?

Chr*_*nes 12 su centos cwd

我觉得这应该是直截了当的,但我从未见过有人问过我能说出来的问题。情况非常简单。每当我成为用户时,即su user它总是在 /root 目录而不是主目录中启动。让我演示给你看。

[root@st-test2 ~]# grep "postgres" /etc/passwd
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql/:/bin/bash
[root@st-test2 ~]# su postgres
bash-4.2$ pwd
/root
[root@st-test2 ~]# ls -lhart /var/lib |grep postgres
drwx------.  4 postgres postgres   86 May  5 16:07 pgsql
Run Code Online (Sandbox Code Playgroud)

因此,您可以看到 postgres 用户的主目录存在并且其设置在 /etc/passwd 中...但出于某种原因,它们从根目录开始。我创建的每个用户都会发生这种情况,我不知道为什么。我也不能说我以前见过这种情况。

Ste*_*itt 35

如果您只提供用户名作为参数,则su更改用户而不更改其他内容

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

所以su postgres留在同一个目录中。不过既然HOME设置为新用户的主目录,cd 就会带你到正确的地方。

要登录并从用户的默认目录启动,您需要要求su启动适当设置的登录 shell:

su -l postgres
Run Code Online (Sandbox Code Playgroud)

或其共同的同义词,

su - postgres
Run Code Online (Sandbox Code Playgroud)

  • 我想就是这样。我的雇主设置了 su - 也进入用户的主目录,我认为我的测试服务器没有这样做会导致问题,但现在我认为我的雇主在某处有一个别名,而且 su - 不去主目录没有引起问题。感谢您的解释!我真的应该更频繁地阅读 man 文件。 (2认同)