有什么好的方法可以按需启动“sudo”,以便它现在(方便时)询问我的密码,而不是稍后(不方便时)询问?

有什么好的方法可以按需启动“sudo”,以便它现在(方便时)询问我的密码,而不是稍后(不方便时)询问?

这太黑客了。

我有时需要在终端中快速地依次运行程序,其中一些命令需要,sudo而其他命令不需要,例如:

$ command1; c2; sudo c3 | c4; c5 | sudo c6; c7; sudo c8

我希望提前启动sudo(即输入密码),command1这样就不会出现c3等待密码的瓶颈。

大多数时候,我都是sudo使用在键盘上随意输入的随机命令来启动,例如:

$ sudo laksdfjlskjf; command1; c2; sudo c3 | c4; c5 | sudo c6; c7; sudo c8

它说command not found的是laksdfjlskjf,但我已经成功完成了我需要做的事情:启动sudo。没有瓶颈c3

问题:

有没有比输入(非)随机字符来启动更好的方法sudo? 有没有一个安全的命令,它不执行任何操作,因此可以安全使用sudo

答案1

sudo -v正是为此。从man 8 sudo

-v--validate
更新用户的缓存凭据,并在必要时对用户进行身份验证。对于 sudoers 插件,sudo默认情况下,这会将超时时间再延长 5 分钟,但不会运行命令。并非所有安全策略都支持缓存凭据。

补充命令是sudo -k,它使用户的缓存凭据无效。

虽然我认为sudo -v这是正确的做法,但我承认,人们必须记住不查阅手册就可以使用它的选项。这是一个缺点。作为替代方案,几乎任何无害的命令都可以用于实现您的目标;所以如果你碰巧现在sudo不记得了,请使用-vsudo truesudo echosudo date(归功于链接的答案)。


sudo -v在你原来的方法有效的情况下,应该对你有用。在你的例子中,如果command1c2花费的时间比sudo忘记缓存的凭据所需的时间长,那么sudo c3 将要询问您的密码。等等。sudo -v可以替换您的sudo laksdfjlskjf,但如果前面有长时间运行的命令,则sudo两者都不起作用。

如果您要运行的行包含一些长时间运行的命令(不排除sudo命令),则请考虑在后台足够频繁地sudo重复。示例:sudo -v

sudo -v    # in the foreground, so you can input your password if needed
while sudo -v; do sleep 58; done &
command1; c2; sudo c3 | c4; c5 | sudo c6; c7; sudo c8; kill "$!"

答案2

怎么样true?描述:真正的实用程序始终返回退出代码零。

如果您想要更短的代码,请尝试id。它返回用户身份(并且不会以任何方式更改系统)。

答案3

那么简单的echo或者echo -n抑制换行怎么样?

相关内容