【问题标题】:Is wget or similar programs always available on POSIX systems?wget 或类似程序在 POSIX 系统上是否始终可用?
【发布时间】:2012-02-28 22:35:36
【问题描述】:

是否有像wget/lynx/GET 这样默认分布在 POSIX 或 *nix 操作系统中的 HTTP 客户端,可用于实现最大的可移植性?

我知道大多数系统都安装了 wgetlynx,但我似乎记得使用默认设置安装了一些 Ubuntu 服务器系统,并且它们在基本包中没有安装 wgetlynx

我正在为 Linux(可能还有 Mac)编写一个 shell 脚本来将一个软件安装到计算机上。为了避免分发几个大文件,我想从互联网上获取这些文件,而不是使用安装程序打包。目前,安装脚本将分发在从Makeself 创建的单个文件中。

我想避免安装脚本超过 100 MB,如果包含文件,则安装脚本会超过 100 MB,而且如果该人正在升级或重新安装软件,则可能不需要它们。也许最便携的做法是将文件包含在 pacakage 中。

现在我只想让脚本检查wgetlynxGET,按照这个顺序,它会使用它可以下载的任何一个,但如果有的话,我可以完全避免这种情况是一种我可以下载适用于所有系统的文件的方法。

编辑:

有人知道 lwp-request (GET) 及其可用性吗?到目前为止,这似乎在我检查过的几个系统上很容易获得,我记得这总是在大约 10 多年前回到 RedHat。

【问题讨论】:

  • 您也可以使用curl 或(极端示例)netcat(通常别名为nc)。但是,我认为wget 应该是最普遍可用的。如果这不可用,很可能所有其他人都不会那么好
  • True curl 也是一种可能性,但我认为这种可能性不如 wget 常见。我没有想到nc,所以这也有可能,我知道它已经存在了很长时间。
  • 对了,你也可以use bash itself来发起HTTP请求。我猜 bash 比 wget 更常用(尽管该特定功能可能不那么常用)。
  • 在 Bash /dev/tcp 上找到很酷的东西。如果您想添加有关 nc 和那个 bash 技巧的答案,我可能会接受。我开始认为,也许我过度分析了这个特定的部分,并且总是可以告诉他们在最坏的情况下安装其中一个包。
  • 既然你提到了 Mac:OS X 自带 curl(还有 ftp、sftp、nc,当然还有 bash)但没有 wget。

标签: linux bash posix wget lynx


【解决方案1】:

在 2019 年 11 月 4 日编辑:我正在重写我的答案,以反映确保转移在飞行中不被篡改的重要性。我将把我原来的答案留在规则之下。

我建议使用rsync 而不是ssh 来传输您的文件。 rsync 的界面可能看起来很繁琐,但大多数用户可能会选择rsync -avzP,如果您需要更大的灵活性,rsync 可以适应。使用 ssh 将为您的连接提供完整性、真实性和隐私性。

curl 是 http 传输的事实标准;如果首选纯 http 或 https,curl 或基于 curl 的工具可能是一个不错的选择。


根据我的经验,工具按以下顺序可用:

  • wget
  • curl
  • sftp
  • ftp
  • GET(我一直在使用HEAD,但经常忘记它只是套件中的一个工具)
  • tftp
  • nc(不像我希望的那样普遍)
  • socat(更不常见)

bash/dev/tcp 工具在我使用过的大多数系统上都可用(有些使用了dashpdksh),但将echobashnc 或@987654345 一起使用@ 正在为 HTTP 访问做长远打算——您必须以某种方式处理标头,这降低了它的优雅性。

【讨论】:

  • 许多ftp客户端、ncftplftp等,可能会或可能不会安装ftp符号链接; Debian 派生系统至少会使用系统首选的ftp 客户端填充/etc/alternatives/ftp/usr/bin/ftp 将指向它。
  • 我发现 wget 在我使用过的大多数系统上都可用,但是 curl 通常一直是我手动编译的。相比之下,由于 SFTP 基于 SSH 访问,我发现它通常也始终可用。所以我会排名更高
  • @sarnold 如果您提供一些关于您的体验样本是哪种操作系统的线索,这可能会有所帮助。我想它可能主要是unix和linux系统?但我刚刚注意到,在我的 macbook 上,安装了 curl 但没有安装 wget,这可能表明这对于 macos 用户来说是典型的,这意味着如果它包含 mac 世界(比 linux 世界大得多),你的列表看起来会完全不同)。当然,这里的大部分内容只是猜测细节。此外,我刚刚注意到您的回答来自 2012 年,所以无论如何我都不应该让您接受您在这里所说的任何事情:-)
  • @DonHatch,感谢您的 ping。我会稍微更新一下这个答案。
【解决方案2】:

POSIX 7 实用程序官方列表

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/contents.html

列表中有以下内容:

  • wget
  • 卷曲
  • ftp

LSB 也是如此,它基本上只保证 POSIX 实用程序。

但我确实认为 POSIX C 足以实现大部分netcat 功能,所以这确实是一个错失的机会。例如:How to make an HTTP get request in C without libcurl?

可能是因为像 HTTP 这样的网络协议被认为过于具体/在 POSIX 仍在发展的时候并不存在,而 POSIX 基本上永远冻结了。值得注意的是,HTTPS 加密的实施可能并非易事。

【讨论】:

    【解决方案3】:

    Curl 可能比 wget 更常见。至少根据我的经验,仅仅是因为更多其他工具依赖于它。但是 curl 和 wget 都是超级简单的安装,可以在任何系统上使用。

    【讨论】:

    • 我同意,但是在系统上预安装时,我不认为它通常是“开箱即用”安装的。尤其是当我们谈论 5 年以上的 linux 发行版时。
    • 你说得对,我不知道我在想什么。我不认为它会发生在那么古老的事情上。感谢 cmets
    • @ManfredMoser 举个例子:Debian(Stretch)预装了 wget,但没有 curl(我怀疑它在 2012 年有什么不同)。根据我的经验,wget 比 curl 更常安装(我希望它会有所不同)。
    • @JepZ 我不确定“根据我的经验,wget 比 curl 更常安装”是否有意义的声明,而不是作为您碰巧闲逛的亚文化的声明: -) 我这么说是因为我看到了,虽然 wget(而不是 curl)安装在我的分支 ubuntu linux 机器上,但 curl(而不是 wget)安装在我的 macbook 上。我猜后者意味着mac世界(比linux世界大得多)中的大多数人会说“根据我的经验,curl的安装频率高于wget”。
    • @DonHatch 您可能是正确的,这取决于亚文化。在我写了那条评论几天后,我也看到了 macOS 上的情况,并感到非常惊讶。的确,最近,我在发行版之间切换的次数不多,所以即使 curl 在 15 年前很少见(在默认安装中),情况也可能已经改变。
    【解决方案4】:

    gnu awk (gawk) 即使在非 Linux 系统上也内置了 TCP 处理http://www.gnu.org/software/gawk/manual/gawkinet/html_node/

    【讨论】:

      【解决方案5】:

      我建议使用 ftp 或 wget,因为它们是 Linux 发行版中最常见的。最佳做法可能是让您的脚本查看命令是否可用,如果没有则转到下一个命令。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-20
        • 2010-09-11
        • 1970-01-01
        • 1970-01-01
        • 2018-09-23
        • 2011-11-29
        • 1970-01-01
        • 2011-11-03
        相关资源
        最近更新 更多