来自https://calibre-ebook.com/download_linux
sudo -v && wget -nv -O- https://download.calibre-ebook.com/linux-installer.sh | sudo sh /dev/stdin
sudo -v &&
在这里的目的是什么,因为man sudo
说
-v,--验证更新用户缓存的凭据,必要时对用户进行身份验证。对于sudoers插件,默认情况下这会将sudo超时时间再延长15分钟,但不会运行命令。并非所有安全策略都支持缓存的凭据。
sh /dev/stdin
的目的是什么?(在Ubuntu18.04中,sh
是破折号)
谢谢。
发布于 2018-07-17 23:31:57
sudo -v &&
在这里的目的是什么?
我相信这会尽量减少用户的惊讶。考虑两种情况:
相对于:
在第一个场景中,对sudo的两个调用都在没有任何提示的情况下成功。问题解决了!
在第二个场景中,还有两种可能性:用户最近已经通过sudo身份验证,或者他们没有。
sudo -v
只需更新缓存凭据的时间戳即可。一旦sudo -v
进程成功,第二个sudo sh /dev/stdin
调用应该使用其缓存的凭据并不间断地运行。
考虑另一种情况( sudo仍然被配置为提示输入密码),其中没有初始的sudo -v
命令。在这种情况下,wget
可能已经将输出写到stdout或stderr,这可能会导致用户错过看到它,并想知道为什么什么都没有发生。
sh /dev/stdin
的目的是什么?
在这里,sh
是用一个参数作为command_file
调用的,这个参数是一个特殊的文件--一个指向stdin的链接。
名称破折号-命令解释器(外壳)简要说明破折号.[command_file 争论...]
结果,sh读取command_file,期待并执行它的命令。这个特殊的stdin“文件”通过管道连接到来自wget
的输出,因此最终的结果是将URL的内容发送到根级shell。
我不知道为什么口径项目具体选择这种语法。备选办法包括:
... | sudo sh
... | sudo sh -
https://unix.stackexchange.com/questions/456881
复制相似问题