我想知道是否可以在命令行上(最好是在提示符中)指示sudo 模式已打开。
经过sudo 模式我的意思是我已经在这个 shell 会话中正确输入了一次密码,并且它还没有过期,但仍然被缓存了。
换句话说,我能否以某种方式知道sudo
我要运行的命令是否会要求我输入密码或是否会使用缓存的凭据?
答案1
长期以来,我一直在使用
sudo -S true < /dev/null 2> /dev/null
您可以尝试一下,但是最近的更新似乎破坏了这一点,因为我现在遇到了分段错误。
您可以尝试sudo -n true 2> /dev/null
(否-v
)。这似乎对我有用,无需更新超时。
您可以在提示符下以各种方式执行此操作,包括:
PS1='\u:\w$(sudo -n true 2> /dev/null && echo " : sudo :") \$ '
这取决于promptvars
默认启用的选项。
请注意,一旦发出提示,指示器就不会再更新。因此,如果提示一直停留在那里直到超时到期,则sudo
即使已过期,也可能表示该提示处于活动状态。
答案2
没有命令可以直接显示缓存凭据的剩余时间,您必须编写脚本。
从https://unix.stackexchange.com/questions/115506/sudo-testing-for-credentials
sudo -nv 2> /dev/null
如果密码被缓存,将给出退出值 0,您可以修改该链接中的脚本或编写自己的脚本。
或者,时间戳存储在其中,/var/lib/sudo
因此您可以编写脚本来显示或检查时间戳。