我正在使用 ubuntu 10.04。
我注意到在终端运行后:
sudo -s
提示从以下情况改变:
my_user@my_hostname
到:
root@my_hostname
似乎它已更改为 root 权限。
sudo
但是当我检查命令的文档时这里,它解释了另一个故事sudo -s
,有人能向我解释sudo -s
一下到底在做什么吗?
答案1
这两者实际上并不一致 - 该sudo
命令始终会更改用户,要么更改为 root,要么更改为您使用开关指定的用户-u
。 它-s
所做的只是提供以该用户身份启动 shell 的快捷方式。 它实际上相当于:
sudo $SHELL
除非它没有设置,否则它可能会回退到/bin/sh
或其他方式。SHELL
答案2
sudo -s
$SHELL
以超级用户/root 身份运行环境变量中指定的 shell 。您可以使用 指定其他用户-u
。
环境$SHELL
变量包含用户默认登录 shell 的路径。默认 shell 程序的实际设置通常位于 中etc/passwd
。根据您在当前会话中执行的操作,变量$SHELL
可能不包含您当前正在使用的 shell 程序。zsh
例如,如果您使用 自动登录,但随后调用 bash,$SHELL
则不会从 更改/bin/zsh
。
显示当前用户和shell程序:
echo $(whoami) is logged in and shell is $0
whoami
打印出用户正在使用的用户名。$0
包含当前正在运行的程序(在本例中为 shell 程序)的名称/路径。
答案3
从手册:
sudo 允许允许的用户以超级用户或其他用户的身份执行命令,如 sudoers 文件中所指定。
-s Shell,运行 SHELL 环境变量指定的 shell(如果已设置)或者 passwd(5) 中指定的 shell。
更严重的是,sudo -s
运行 shell 环境变量。由于您没有添加任何变量,因此它会按照 中指定的方式运行passwd
,因此会以 root 身份连接您。
答案4
听起来好像是在当前 shell 之上创建了另一个 shell 实例,但具有 root 权限。我敢打赌,sudo -s
如果你输入 exit,你就会回到原来的 shell。