在 Linux 和 Unix 系统中,export 命令的作用是将一个 Shell 变量变成一个环境变量,并将其传递给当前 Shell 会话中的所有子进程(主要用于终端中,不同于设置中的网络代理)。通过设置环境变量,程序和脚本能够访问这些变量,并根据环境变量的值调整行为。

为什么 export 命令能让所有下载经过代理端口

1. 环境变量与代理配置

许多网络应用程序和工具(如 curl, wget, apt 等)在连接网络时会使用特定的环境变量来确定代理服务器的地址和端口。这些环境变量通常是:

  • http_proxy:用于指定 HTTP 代理服务器的地址和端口。
  • https_proxy:用于指定 HTTPS 代理服务器的地址和端口。
  • ftp_proxy:用于指定 FTP 代理服务器的地址和端口。
  • no_proxy:用于指定不需要代理的地址。

例如,如果你设置了如下的环境变量:

export http_proxy="http://localhost:8080"
export https_proxy="http://localhost:8080"

这意味着你告诉网络工具:所有的 HTTP 和 HTTPS 请求都应该通过 localhost 上的 8080 端口进行代理。

2. 通过 export 将代理设置为环境变量

当你在 Shell 中运行 export 命令时,变量会被传递给当前 Shell 会话中的所有子进程。因此,在终端中执行的任何命令(比如 wgetcurlapt-get 等)都会读取到这些环境变量,并按照设置的代理来进行网络请求。

例如:

export http_proxy="http://localhost:8080"
export https_proxy="http://localhost:8080"

这两行命令设置了代理,并使得所有子进程都能获取到这些代理设置。

3. 作用域

  • 当前 Shell 会话:这些环境变量只会在当前 Shell 会话中有效,关闭终端或退出 Shell 会话后,代理设置会失效,除非你在 Shell 配置文件(如 .bashrc.zshrc)中永久设置它们。
  • 子进程继承:当你运行一个程序(如 wgetcurl)时,程序会继承当前 Shell 的环境变量,进而使用相应的代理设置进行网络请求。

    举个例子,如果你在 Shell 中设置了代理,随后运行 wget 来下载一个文件,wget 会自动使用你设置的代理来发送 HTTP 请求。

4. 代理的使用方式

具体来说,当你设置了 http_proxy 环境变量后,系统和应用程序(如 curl, wget 等)会自动识别并使用这些代理信息来访问网络资源。比如:

export http_proxy="http://localhost:8080"
export https_proxy="http://localhost:8080"

这样,终端中的所有网络请求(例如,使用 curlwget)都将通过 localhost:8080 的代理进行。

  • wget 示例

    wget http://example.com/file.tar.gz
    

    这个请求将通过你设置的 localhost:8080 代理来发送。

  • curl 示例

    curl http://example.com/file.tar.gz -O
    

    这个请求也会通过代理进行。

5. no_proxy 环境变量

如果你不希望某些特定的地址通过代理访问,可以使用 no_proxy 环境变量。例如:

export no_proxy="localhost,127.0.0.1,.mycompany.com"

这表示对于 localhost127.0.0.1.mycompany.com 的请求将不使用代理。

总结

通过 export 命令将代理地址设置为环境变量(如 http_proxyhttps_proxy),你实际上是告诉当前 Shell 及其所有子进程(如 wgetcurl 等)在进行网络请求时使用指定的代理服务器。这种设置可以确保你通过指定的代理进行所有的下载和网络请求,直到 Shell 会话结束或环境变量被修改。