我觉得这应该很简单,但我从未见过有人问过这个问题。情况相当简单。每当我成为用户时,它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
因此,您可以看到 postgres 用户的主目录存在,并且它在 /etc/passwd 中设置......但由于某种原因,它们从根目录开始。我创建的每个用户都会发生这种情况,我不知道为什么。我也不能说我以前曾见过这种情况发生。
答案1
如果您仅提供用户名作为参数,则su
更改用户不做太多改变:
为了向后兼容,
su
默认不更改当前目录,只设置环境变量HOME
andSHELL
(如果目标用户不是 root,则加上USER
and )。LOGNAME
所以su postgres
保留在同一目录中。但是由于HOME
设置为新用户的主目录,cd
将要带你到正确的地方。
要登录并从用户的默认目录启动,您需要要求su
启动适当设置的登录 shell:
su -l postgres
或其常见同义词,
su - postgres
答案2
你的雇主可能已经改变了这一点,因为 Debiansu
自 Buster 以来改变了行为。新人巴斯特我还创建了alias su='su -'