“ echo ipv4 >>〜/ .curlrc”有什么作用?


8

今天,当我尝试使用以下命令安装composer时遇到一些问题:

curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer

它给了我这个错误:

curl: (7) Failed to connect to getcomposer.org port 443: Network is unreachable

我用谷歌搜索并找到此命令

echo ipv4 >> ~/.curlrc

我运行了它,它解决了这个问题,并且作曲家安装得很好。

但是我不知道上面的命令是做什么的,有人可以解释吗?


@Melebius添加了链接:)
Prashant Kumar

Answers:


9

什么是将“ ipv4”添加到文件“ curlrc”。以空文件开头的示例:

$ touch 1
$ more 1
$ echo ipv4 >> 1
$ more 1
ipv4

基本上,它会强制curl使用ipv4。


手册对此有以下说明:

IPv6

当主机查找返回IPv6地址时,curl将使用IPv6连接到服务器,如果连接失败,curl将返回到IPv4。该--ipv4--ipv6选项可以指定当两个都可以使用该地址。也可以使用以下语法在URL中直接指定IPv6地址


我只运行了该命令,它起作用了,所以我想它是正确的。只是一个问题,为什么我的作曲家不是一开始就工作,为什么它在执行此命令后仍然起作用。我认为这意味着,先前的curl尝试使用ipv6网络,但实际上未配置。是还是其他?
Prashant Kumar's

我会以为是这样:在您从预期的ipv6获得连接的地方,连接被拒绝。对文件的此编辑将强制ipv4。
林茨温德'17

但是,正如您所说的,curl will connect to a server with IPv6 when a host lookup returns an IPv6 address and fall back to IPv4 if the connection fails为什么我的系统只是给出错误,而不尝试在未找到ipv6的情况下尝试自己访问ipv4。
Prashant Kumar's

1
.curlrc使用不带前导-或的选项名称--
chepner

5

UNIX中的一个典型约定是程序(通常)从各种预定义文件中读取其启动配置。这仅是一种传统,不是POSIX或任何其他标准定义的任何内容。例如foobar,典型的UNIX程序将按以下优先级顺序读取:

~/.foobarrc  ## User specific configuration parameters
/etc/foobarrc  ## Global parameters, depending on taste
               ## `/etc/foobar/*(.conf)' might be chosen too 

可能会有回退,/usr/share/但这不是很常见。

因此,curl这里遵循约定并从中读取其初始配置~/.curlrc。这样echo ipv4 >>~/.curlrc,您就将字符串附加ipv4到了文件中~/.curlrc

该字符串ipv4具有特殊的含义curl- curl然后将使用IPv4进行主机解析。这类似于在命令行中将-4/ ipv4用作curl参数,但是保存~/.curlrc后将其永久保留。

正如您ipv4在此处设置的那样,现在一切都可以为您工作,大概是您已配置了IPv6,并且curl以前已将IPv6用于(成功的)主机解析,因此不会回退到IPv4。与站点的连接失败,因为并非所有站点的Web服务器都配置为侦听IPv6地址,因此socket()在这种情况下,调用将失败。


1
然而,实际上,/etc/foobar.conf将首先阅读,然后阅读~/.foobarrc,以便后者可以覆盖前者。因此,如果/etc/foobar.conf包含这样的行frobnitz=0,并~/.foobarrc具有frobnitz=1,则后者的值占上风
Monty Harder

@MontyHarder这正是我优先顺序的意思……
heemayl

是的,优先顺序,而不是阅读顺序。
Monty Harder
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.