为什么要将 tee 与 wget 一起使用?这不是多余的吗?

为什么要将 tee 与 wget 一起使用?这不是多余的吗?

因此,我偶然发现了使用 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 wgetwget可以利用提升的权限来利用漏洞。

相关内容