这太黑客了。
我有时需要在终端中快速地依次运行程序,其中一些命令需要,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
不记得了,请使用-v
sudo true
,sudo echo
或sudo date
(归功于链接的答案)。
sudo -v
在你原来的方法有效的情况下,应该对你有用。在你的例子中,如果command1
和c2
花费的时间比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
抑制换行怎么样?