因此,我偶然发现了使用 wget 下载 youtube-dl 的代码,该代码通过管道传输到此处的 tee:我如何更新 youtube-dl?
代码如下:
wget -O - https://yt-dl.org/downloads/latest/youtube-dl | sudo tee /usr/local/bin/youtube-dl >/dev/null
与以下内容比较有何不同?:
sudo wget -P /usr/local/bin/ https://yt-dl.org/downloads/latest/youtube-dl
或者甚至就此而言:
sudo wget -O /usr/local/bin/youtube-dl https://yt-dl.org/downloads/latest/youtube-dl
关于使用 wget 和 tee 有什么特别之处是我遗漏的吗? 如果我理解正确的话,前者只是下载文件并将下载的文件输出到标准输出,然后通过 tee 传输到指定文件和标准输出,任何其他标准输出都会重定向到 /dev/null。如果后两行代码完全足够的话,前一行代码是否显得多余且过于复杂?
关于使用 tee 时还有一个问题:
从理论上讲,不能用 cat 代替 tee 吗?像这样:
wget -O - https://yt-dl.org/downloads/latest/youtube-dl | sudo cat >/usr/local/bin/youtube-dl
或这个:
wget -O - https://yt-dl.org/downloads/latest/youtube-dl | sudo cat /usr/local/bin/youtube-dl
当我执行前者时,我得到了这个输出(我只取了最后三行):
Saving to: ‘STDOUT’
- 0%[ ] 0 --.-KB/s in 0,003s
Cannot write to ‘-’ (Success).
当我执行后者时,我得到了相同的输出,只是没有“无法写入‘-’(成功)”。
在此先非常感谢您的解释!
答案1
不同之处在于您不需要wget
提升权限即可执行。这可以减少攻击面。
| sudo tee
命令wget
以常规权限执行,并仅使用提升的权限将数据写入选定的文件。- 利用
sudo wget
,wget
可以利用提升的权限来利用漏洞。