如何在终端中看到您是否具有 sudo 权限?(所以知道我有这些权限,我只需输入sudo -k
)最好不要在终端中添加太多信息,只是一些简单而小的警报!
剩下的时间是不可能的,对吗?
另外,如何查看我在特定终端上仍拥有这些权限的时间?(这样我就可以让其结束,而不是输入sudo -k
)。我认为每次按下 Enter 键时都会显示剩余时间。
编辑:我进行了进一步研究并发现/var/lib/sudo/$USER/$nPts
(其中 $nPts 是截至的当前终端点ps -p $$
)每次发出 sudo 命令时其时间戳都会更新,并且只有在使用 sudo 命令时才可访问,因此剩余时间将始终是配置的时间...
附言:除此之外,我尝试过,alias sudo='sudo -k'
但我不喜欢必须为每个命令输入密码...而且,如果您只想通过输入来发出一个命令,那么这个alias sudos='sudo -k'
(或者alias ssudo='sudo -k'
,如果您输入了很长的一行,只需按 Home 并输入“s”)就可以了sudos
。但我仍然不知道何时拥有正常的 sudo 权限,以便知道我需要采取行动...
答案1
[我还是想知道是否有更好的答案。]
我找到了一种可行的方法,并且提示将保留在一行上:
在末尾~/.bashrc
添加以下内容:
function FUNCsudoOn() {
if sudo -n uptime 2>/dev/null 1>/dev/null; then
echo -ne "\E[0m\E[93m\E[41m\E[1m\E[5m SUDO \E[0m";
#echo #without newline, the terminal seems to bugout with lines that are too big... discomment this if you find any problems...
fi;
}
function FUNCpromptCommand () {
FUNCsudoOn
}
export PROMPT_COMMAND=FUNCpromptCommand
#export PS1="\`FUNCsudoOn\`$PS1" #this also works, use instead of PROMPT_COMMAND
编辑:我发现这sudo -n uptime
将更新 sudo 超时,因此每次按下 Enter 键时,该 sudo 时间都会更新...这使得知道剩余时间变得毫无用处,因为它始终是配置的时间,默认为 15 分钟...
并找到最适合您口味的颜色格式,您可以使用ScriptEchoColor选项--escapedchars
如下:
echoc --escapedchars "@{nRlyo} SUDO " #that outputs below...
echo -e "\E[0m\E[93m\E[41m\E[1m\E[5m SUDO \E[0m"
只需停止闪烁\E[5m
即可删除\E[0m\E[93m\E[41m\E[1m SUDO \E[0m
答案2
你的终端没有“sudo 权限”,除非你做了一些愚蠢的事情,例如sudo bash
不要这样做!
要“拥有正常的 sudo 权限”,您所要做的就是避免sudo
在命令前输入内容。
/usr/bin/id
是查看sudo
结果的好方法。例如:
id -a # returns my UID info
sudo id -a # returns root's info
id -a # me again
sudo id -a # root again
手册sudo
页上写着“除非在 sudoers(5) 中被覆盖,否则 sudoers 策略会将凭证缓存 15 分钟”。这意味着,默认情况下,如果您发出一个sudo
命令(并输入密码),然后等待 14.9 分钟再发出第二个sudo
命令,则无需再次输入密码。如果等待 15.1 分钟,则必须重新输入密码。sudo -k
只需立即使 15 分钟计时器过期即可。我能看到的唯一用途sudo -k
是,如果您即将把解锁的终端交给您不信任的人UID 0
。