直接从URL执行Bash脚本
1. 概述
Linux 中的各种安装指南涉及首先运行一个 shell 脚本,我们下载该脚本,然后使用 Bash 单独执行。不仅安装指南,而且为自动化手动活动编写的自定义 shell 脚本都涉及下载和执行脚本。
在本教程中,我们将介绍一种使用curl和wget 一步即可下载和执行脚本的方法。
**使用此方法时我们必须谨慎,因为通过不安全的连接下载和执行脚本可能会导致安装恶意软件。**此外,我们还需要确保使用更新的 TLS 协议和curl/wget库。
我们可以通过创建一个专用的、无特权的 non- wheel 用户组来部分管理风险,并从中执行脚本。这可确保不会以管理员权限执行任何脚本。
2. 安装和使用*——curl*
某些 Linux 发行版可能没有默认安装curl。
我们可以使用apt-get在任何 Ubuntu/Debian 系统上安装它:
$ sudo apt-get install curl
或者我们可以类似地将它安装在 CentOs/Fedora/Redhat 上:
$ sudo yum install curl
现在,要使用 cURL 下载并执行脚本,我们可以使用*-s选项。然后,我们将结果传递给bash*:
$ curl -s <em>http://example.com/script.sh</em> | bash
当我们使用-s*选项时,我们要求 cURL 以* 静默方式获取 URL 中的所有内容, 这不会显示平均下载速度和总时间等统计信息。
这使我们能够使用pipes | 并将其提供给实际执行脚本的 Bash 命令。
3. 安装和使用——wget
大多数 Linux 发行版都 默认安装了wget 。
我们可以使用apt-get在任何 Ubuntu/Debian 系统上安装它:
$ sudo apt-get install wget
或者我们可以类似地将它安装在 CentOs/Fedora/Redhat 上:
$ sudo yum install wget
现在,要使用wget下载并执行脚本,我们可以使用*-q0选项、连字符,然后将结果通过管道传输到bash*:
$ wget -qO - <em>http://example.com/script.sh</em> | bash
当我们使用-q选项时,我们告诉wget*通过不打印其详细输出来安静地下载文件*。
选项O用于将script.sh的内容保存到文件中。尾随连字符(介于*-qO和 http://之间的连字符)是告诉wget将此内容定向到/dev/stdout。* 任何指向*/dev/stdout的内容都会显示在终端上,这就是为什么script.sh*的内容永远不会写入磁盘的原因。
这个尾随连字符使我们能够将script.sh的内容通过管道传递给实际执行它的bash命令。如果我们使用wget没有尾随连字符和大写O,那么get会将文件的内容以文件名script.sh保存到磁盘。这是因为wget 实际上是用于在 Linux 中下载文件的。
另一方面,默认情况下curl永远不会下载文件。虽然,我们刚刚看到了如何以这种方式使用它。