对于 root 来说,'sudo' 是什么意思?

对于 root 来说,'sudo' 是什么意思?

我在 Ubuntu 14.04 中运行以下命令:

root@ubuntu:~# service rpki-ca restart 
stop: Unknown job: rpki-ca
start: Unknown job: rpki-ca
root@ubuntu:~# sudo service rpki-ca restart 
rpki-ca stop/waiting
rpki-ca start/running
root@ubuntu:~#

第二条命令中的 有什么作用sudo?为什么 root 需要sudo

答案1

好的,谷歌搜索这个,找到这个U&L 答案,检查其修订历史并按照引用的来源修订 #1,这恰好是一个新贵错误;问题是,当切换到 root 运行时,su环境$UPSTART_SESSION变量是从以前的环境中带过来的,而不是再次设置。

经过一番苦思冥想和谷歌搜索后,我找到了一篇帖子(https://unix.stackexchange.com/questions/120050/sudo-service-vsftpd-returns-unknown-job-vsftpd) 表明

sudo service xxxx start(或停止,或重新启动)

有效,同时

`service xxxx start(在 su 会话中)

不起作用。

因此,罪魁祸首显然是环境:如果您使用“su”而不是“sudo su”或“su - ”来获取 root 权限,“服务”也无法正常工作,因为“su”会将您大部分正常用户环境带入 root 会话。

经过一些测试,我发现罪魁祸首是 UPSTART_SESSION 环境变量,该变量在“su”时设置,但在“sudo su”或“su -”时不会设置。以下是一些测试结果:

-- 不起作用

jsveiga@dell:~$ su
Password:
root@dell:/home/jsveiga# service smbd restart
stop: Unknown job: smbd
start: Unknown job: smbd

-- 即使在 su 会话中也可以工作

root@dell:/home/jsveiga# sudo service smbd restart
smbd stop/waiting
smbd start/running, process 3823

-- 作品

root@dell:/home/jsveiga# exit
jsveiga@dell:~$ sudo su
root@dell:/home/jsveiga# service smbd restart
smbd stop/waiting
smbd start/running, process 3862

-- 作品

root@dell:/home/jsveiga# exit
jsveiga@dell:~$ su -
Password:
root@dell:~# service smbd restart
smbd stop/waiting
smbd start/running, process 3905

-- 转到 su 然后取消设置 UPSTART_SESSION 即可

root@dell:/home/jsveiga# exit
jsveiga@dell:~$ su
Password:
root@dell:/home/jsveiga# service smbd restart
stop: Unknown job: smbd
start: Unknown job: smbd
root@dell:/home/jsveiga# unset UPSTART_SESSION
root@dell:/home/jsveiga# service smbd restart
smbd stop/waiting
smbd start/running, process 4244

因此,启动/停止脚本仅仅因为环境变量的存在而以某种方式失败UPSTART_SESSION

BR,Joao S Veiga

要修复此问题,只需取消设置$UPSTART_SESSION

unset UPSTART_SESSION

或者通过其他方式切换到 root,例如su -或。sudo susudo -i

答案2

在这种情况下,它没有任何意义,应该被删除。在不指定其他用户的情况下,sudo尝试成为 root,因此如果您已经是 root,则这是一个无操作,除了创建一个额外的进程(为sudo自己),它会占用一些资源,直到它正在运行的命令完成。

相关内容