为什么它被称为sudo?

为什么我们要使用sudo来作为管理员执行终端命令?为什么不是admin或其他什么呢?sudo有什么原因吗?

19sudo ls读作"超级用户,执行ls"(不是傻的,助记法对于记住命令很重要)(不,可能意思是“s witch u ser and do”,因为su表示切换用户。但我觉得前者更好看;-)) - Rmano
1超级用户比管理员好多了 :) 谢谢你的回复。 - Mohammad
2这就是你所做的那种神奇操作。 :) - Shadur
1sudo不仅仅是“以管理员身份运行程序”这么简单 - 这也是为什么用“管理员或其他什么东西”来形容可能会误导的原因。 - Fuzzy76
14有趣的事实:在意大利语中,“sudo”意味着“我出汗”。我喜欢将“sudo X”解释为“因为害怕输入错误命令而流汗,以免误删所有数据”。这有助于记住,只有在以下情况下才应该在命令前加上“sudo”:1)必要时;2)你知道自己在做什么;3)你已经仔细编写和阅读了命令行,以避免拼写错误(尤其是难以察觉的空格问题,可能导致非常糟糕的意外结果)。 - Bakuriu
1@Mohammad,你也可以阅读我的回答,这样你就能清楚地了解为什么要使用sudo了,希望对其他人有所帮助。 - nux
1不推荐这样做,但如果你不喜欢它的名字,你可以在/usr/bin文件夹中创建一个副本。找到命令所在的位置(可能是在/bin或/usr/bin),然后将其复制粘贴并使用你自己选择的新名称。(你给它起的名字不能与其他应用程序重名,例如,你不能将其重命名为"su")。(当然,你需要root权限来执行此操作。) - Drew Stewart
1这不是一个好的重命名sudo的方式。如果sudo软件包有升级(比如与安全相关的升级),旧版本仍然存在。而且用户可能会优先选择使用旧版本。更好的做法是创建一个新名称的符号链接。 - nomen
危险你可以使用sudo -s命令切换到root用户,但是如果不小心的话也可能造成很大的破坏。 - Old Sub Sailor
1@AndrewFischer:正如nomen所指出的,创建/usr/bin/sudo的副本是一个不好的方式来提供替代名称。仅仅复制它是行不通的;你需要使用sudo chmod来恢复setuid位。符号链接可以工作,但是使用shell函数或别名是更简单的方式。(不过,在你付出所有这些努力之前,你应该已经记住了“sudo”这个名字。) - Keith Thompson
1@nomen:不需要符号链接;只需创建一个shell别名或函数即可。 - Keith Thompson
2@Rmano su 最初的意思是“超级用户”,后来才出现了“替代用户”的含义。 - Gilles 'SO- stop being evil'
8个回答

维基百科中得知:
sudo是一种用于类Unix计算机操作系统的程序,允许用户以另一个用户(通常是超级用户或root)的安全权限运行程序。它的名称是"su"(替代用户)和"do"(执行)的组合。
与su命令不同,用户通常会提供自己的密码给sudo,而不是root密码。经过身份验证,并且如果/usr/local/etc/sudoers(有时在/etc/sudoers找到)配置文件允许用户访问,则系统将调用所请求的命令。sudoers配置文件可以实现大量的可配置性,包括但不限于:仅从调用终端启用root命令;对某些命令不要求密码;对每个用户或组要求密码;每次需要重新输入密码或者根本不需要为特定命令行输入密码。它还可以配置以允许传递参数或多个命令,甚至支持带有正则表达式的命令。
这是一个临时的一次性命令,具有超级用户(管理员)权限,而无需直接登录root。

11关于维基部分的说法是正确的。关于“Mac is Su”的评论是不正确的。Mac系统既有sudo,也有su,就像BSD和Linux一样。 - daviewales
@Virusboy 你好,很抱歉在这个话题上打扰你。但我必须知道使用Toshiba M840 i3-3110M和Ubuntu 14.04是否容易。谢谢。 - Bonn
在任何电脑上都很容易。 - Virusboy

xkcd: Sandwich

在使用sudo之前,大多数管理员都以root用户登录,因为这是一种简便的配置系统的方法,您拥有所有权限。然而,一个小错误或者一个错误的网络链接可能会影响整个系统,甚至会受到威胁。
由于这个问题,sudo应运而生。其目的是仅在需要的时候短暂地使用管理特权,并避免用户登录到其他帐户。这显然可以提高系统安全性
Ubuntu下,他们选择增强系统的安全性。因此,他们决定采用“sudo”的方式。root用户被禁用;没有必要,尤其不会有通过X接口以root用户登录的风险。此外,他们允许授权用户使用sudo启动任何命令。很酷的是,高级用户可以访问root帐户。 sudo的缺点:
  • 你允许通过sudo使用哪些命令
  • 在需要管理员权限的每个命令之前,你需要写上sudo
  • 偶尔需要重新输入密码。

sudo是什么意思?它的名字是"su"(替代用户)和"do"的组合。

为什么不用admin而用sudo?我认为sudo只在特定时间内、只在需要时才表示admin

来自Windows环境的人应该明白为什么不是admin :)

参考资料:网站
图片:xkcd


那为什么它不叫罗多呢? - JamesRyan
3你的“before sudo”段落是错误的。在这方面,susudo之间没有区别,两者之间唯一的区别是使用的凭据不同。使用sudo而不是su并不更安全(事实上,它稍微不太安全);sudo的主要好处(也是Ubuntu选择它的原因)是对用户来说更简单(只需记住一个密码)。 - Gilles 'SO- stop being evil'

从Linux.com,Linux基金会的一个产品:
Sudo代表着“替代用户执行”或者“超级用户执行”(取决于你如何看待它)。Sudo的作用对于许多Linux发行版来说非常重要和关键。实际上,sudo允许用户以另一个用户(通常是root用户)的身份运行程序。
[强调是我的。 来源]

超级用户操作

有一个命令,su,可以成为超级用户,所以你可以这样说

$ su
# apt-get install somehorror
# exit
$

sudo让你一举搞定,而且你不必记得放弃你的魔法力量。
$ sudo apt-get install somehorror

2su("代替用户")允许您成为任何用户:您可以指定一个用户名作为参数。 - David Richerby
1实际上,这两者并不完全相同,但在大多数情况下是相似的。但是sudo主要只允许您以超级用户权限运行程序,同时保持您的正常环境不变。而su实际上使您成为超级用户,并使用超级用户的环境。 - Marty Fried

无论“superuser”是否是“su”最初衍生出来的,这个说法是不准确的,因为你给它的用户名并不一定是超级用户。对于使用“sudo -u”以另一个用户身份执行命令也是同样如此。
“Substitute user”更准确,但听起来有点笨拙。这让我想起了代课老师。
因此,我倾向于将“su”简单地理解为“切换用户”,而“sudo”则表示“切换用户并执行”。

1总是觉得"super user"这个词用起来不太对,但是换成"substitute user"听起来更合适。 - BeyondProgrammer

关于为什么不是"admin",或者更间接地说,为什么su不是"switchUser"之类的原因,传统的Unix命令往往是出于Unix起源的历史原因而采用最简化的缩写形式。
对于最基本的原因,我们需要回到Unix最初被称为Unix的原因。Unix的许多灵感来自于早期的多用户多任务操作系统MIT的Multics。(Unix的名称可以解释为"Multics的单数形式"或者"阉割版的Multics",这取决于你问的人和他们此刻的心情。)
在Multics的其他创新中,它引入了将实际文件位置与目录信息分离的概念,允许一个文件拥有多个名称(在Unix术语中称为"链接")。Multics充分利用了这一点;大多数Multics命令都有一个无法输入的长名称和一个只有专家才能记住的短名称。经验表明,长名称实际上并没有增加太多用户友好性,因为在那个时候,所有用户都是或迅速成为"专家",几乎没有人使用长名称。当Unix采用了Multics的一些设计时,他们简化了未使用的长名称,并只保留了专家友好的短名称。
这也与Unix的哲学相吻合,即将操作系统及其核心命令集减少到最基本的程度,使其能够在较小的系统上高效运行。那个时代的程序员仍然在尽可能地节省每一个字节和周期。处理器速度非常慢,终端速度同样非常慢,内存价格昂贵(而且更慢,并且几乎没有缓存)。将系统命令保持在最小长度可能并没有真正节省多少资源(如果有的话),但对于当时的思维方式来说,这种做法“感觉正确”。
如果您真的坚持要使用用户友好的命令名称,Unix的回答是:“你知道如何编写shell脚本;自己实现它。如果你不知道如何编写shell脚本,你需要学会如何做。如果你不喜欢学习和/或编码,你不会对Unix感到满意,应该使用其他东西。”

Sudo网站上:
"Sudo是什么?
Sudo(su "do")允许系统管理员委派权限,使某些用户(或用户组)能够以root或其他用户的身份运行一些(或全部)命令,同时提供命令及其参数的审计记录。"
"Sudo最初由Bob Coggeshall和Cliff Spencer于1980年左右在纽约州立大学布法罗分校计算机科学系设计和实现。它运行在一台VAX-11/750上,使用4.1BSD操作系统。更新版本由Phil Betchel、Cliff Spencer、Gretchen Phillips、John LoVerso和Don Gworek共同完成,并于1985年12月发布在net.sources Usenet新闻组中。"
话虽如此,虽然我没有任何证据,但我一直坚信这个名字是一种极客程序员的笑话。你有一个命令“su”(超级用户)“do”,但你实际上并不是超级用户 - 将“doo”变成“doh”,"sudo"看起来/听起来很像"pseudo"(假的,虚伪)。

大多数人都认为这是“超级用户做”的混搭。我喜欢这个解释,但更准确的说法可能是它是“替代用户做”的混搭,因为你可以通过-u标志选择要“做”的用户。
我还认为这是对“假名”一词的戏仿,因为你可以使用-u标志来假扮其他人,无论是root用户还是其他任何用户。

3好吧,问题是为什么它被命名为这个名字,而不是背诗和/或记忆法,所以...【需要引用】 - derobert
此外,默认目标用户不必是root(尽管这样做有意义,至少应该是一个具有uid 0的用户,通常也是如此),请参阅sudoers中的runas_default - Stéphane Chazelas
@derobert +1 对于使用“反向首字母缩略词”以及保持网站远离错误答案的做法表示赞赏。 - three-cups