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

Tre*_*vor -2 ls users root sudo

当我以 登录时username,为什么

sudo ls ~
Run Code Online (Sandbox Code Playgroud)

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

更多解释:

此外,如果我运行su命令,然后运行ls ~,我会看到/root. 所以我认为这样做相当于sudo ls ~.

再举一个例子,一些带有--user标志的命令在以sudo. 例如,将安装到 内的目录 ,而 将安装到. 请注意,不建议运行最后一个命令,我只是使用它来显示我所描述的功能。pip install --user packagename/home/usernamesudo pip install --user packagename/root

Ste*_*itt 7

外壳~在运行前展开sudo;你可以看到这个在行动set -x

$ set -x
$ sudo ls ~
+ sudo ls /home/skitt
Run Code Online (Sandbox Code Playgroud)

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

要查看目标用户的主目录,您必须推迟波浪号扩展

sudo bash -c 'ls ~'
Run Code Online (Sandbox Code Playgroud)