在典型配置中,该命令是不相关的。您需要在首次使用sudo时输入密码,并且在接下来的15分钟内无需在该特定shell中输入密码。
从计算机的角度来看,没有“需要sudo的命令”之类的东西。任何用户都可以尝试运行任何命令。结果可能只不过是一条错误消息,例如“权限被拒绝”或“没有这样的文件或目录”,但是始终可以运行该命令。
例如,如果您du
在目录树上运行的目录内容无权访问,则会出现权限错误。这就是“拒绝权限”的含义。如果运行sudo du
,sudo du
将以root身份运行,因此不会出现权限错误(这就是root帐户的要点:root¹始终具有权限)。当您运行时sudo du
,du
它将以root身份运行,并且sudo
在du
启动后完全不参与。du是否遇到权限错误与sudo的操作完全无关。
有些命令需要sudo 才能执行有用的操作。有用性是人类的观念。如果该命令在以root身份运行时执行了一些有用的操作,而在以您的帐户运行时却没有执行有用的操作,则需要使用sudo(或其他方法以root身份运行该命令)。
sudo是否要求输入密码取决于两件事。
- sudo根据配置确定是否需要进行身份验证。默认情况下,sudo需要密码。可以通过多种方式将其关闭,包括将
authenticate
选项设置为false以及对NOPASSWD
标签使用适用的规则。
- 如果sudo需要您的密码,则可以使用缓存的值。没关系,因为sudo需要密码的原因不是要验证谁在调用它(sudo知道用户是由谁调用的),而是要确认命令仍然是您,而不是有人控制了您的键盘。默认情况下,如果您在不到15分钟之前输入密码,sudo会认为您仍然在使用命令(可以使用该
timeout
选项进行更改)。您需要在同一终端上输入密码(这样,如果您仍然在一个终端上登录,则不用理会该终端,然后再使用另一终端,则有人可以tty_tickets
¹ 差不多,但这超出了本线程的范围。