为什么“sudo ls ~”显示的是/home/用户名的内容而不是/root?

为什么“sudo ls ~”显示的是/home/用户名的内容而不是/root?

当我登录时username, 为什么

sudo ls ~

显示而不是?的内容我认为以 root 身份执行命令,在这种情况下代表./home/username/rootsudo~/root

更多解释:

此外,如果我运行该su命令,然后运行ls ~​​,我会显示 的内容/root。所以我认为这样做相当于sudo ls ~

作为另一个例子,一些带有标志的命令--user在运行时会将用户解释为 root sudo。例如,将安装到 中的目录 ,而 将安装到 中的目录。请注意,不建议运行最后一个命令,我只是用它来显示我所描述的功能。pip install --user packagename/home/usernamesudo pip install --user packagename/root

答案1

shell~在运行前展开sudo;你可以通过以下方式看到它的实际效果set -x

$ set -x
$ sudo ls ~
+ sudo ls /home/skitt

这表明实际运行的命令已经使用扩展时的当前用户扩展了主目录。

要查看目标用户的主目录,您必须推迟波形符扩展:

sudo bash -c 'ls ~'

相关内容