使用以下命令通过 sudo 运行密集任务有什么区别吗?:
- nice sudo [此处为密集命令]
- sudo nice [此处强化命令]
顺便说一下,这是适用于 Linux 3.x 的。
答案1
这两者之间存在着一个差异,而且是一个至关重要的差异。
如果你想减少进程的优先级,顺序并不重要。另一方面,如果你想增加它,你必须放在sudo
之前nice
。
由于您以普通用户身份运行该命令(否则您根本不会理会 sudo),因此您只能降低命令的优先级。但是如果您sudo
先使用,则可以根据需要增加它。
答案2
如果您运行,nice sudo
那么输入密码的提示也会很好,但由于您将花费更多的时间来输入密码,所以这实际上并不重要。
正如 ThoriumBR 所指出的,如果您降低优先级,那么顺序就无关紧要了,但如果您想提高优先级,那么(因为这必须以 root 身份完成)您必须使用sudo nice
。
否则我无法想象任何真正的区别。
答案3
使用“最小特权原则”仅当程序需要 root 权限时才应运行该程序,一旦不再需要它们,就应立即删除它们。
所以是的,是有区别的,如果 nice 存在漏洞,攻击者就可以使用与 nice 程序相同的权限运行代码。
此外,sudo 会重置你的环境,因此可能会产生副作用,请尝试
$ echo 'echo $PATH' | sh
/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/home/jens/.local/bin:/home/jens/bin:/home/jens/.local/bin
$ echo 'echo $PATH' | sudo sh
[sudo] password for jens:
/sbin:/bin:/usr/sbin:/usr/bin
因此,您通过 sudo 运行的“nice”命令实际上可能最终成为不同的二进制文件。
$ which ash
~/.local/bin/ash
$ sudo which ash
[sudo] password for jens:
which: no ash in (/sbin:/bin:/usr/sbin:/usr/bin)
答案4
迟来的回答:
如果您的 sudo 访问权限仅限于某些程序(例如foo
和bar
),那么您将无权运行sudo nice foo
,但可以运行nice sudo foo
。