在Linux系统中,下载文件是一个非常基础且频繁的操作。无论是获取软件安装包、文档资料,还是处理远程服务器上的数据,掌握在Linux环境下下载文件的方法都至关重要。与图形界面下使用浏览器不同,Linux提供了强大灵活的命令行工具,尤其适合自动化、脚本化操作以及在没有图形界面的服务器环境中使用。

为什么要在Linux中下载文件?

在Linux中下载文件的原因多种多样,常见的场景包括:

  • 获取并安装新的软件或软件更新包。
  • 下载开发者提供的源代码或二进制文件。
  • 从远程服务器或云存储下载备份文件或重要数据。
  • 获取文档、电子书或其他网络资源。
  • 进行网站内容抓取或数据分析前的数据准备。
  • 更新操作系统或特定的组件。

使用命令行工具下载文件的优势在于:

  • 可以在没有图形界面的服务器上执行。
  • 易于集成到Shell脚本中,实现自动化批量下载。
  • 通常资源占用更少。
  • 提供丰富的选项,可以控制下载过程(如限速、断点续传、认证等)。

在Linux中下载文件的主要方式是什么?

在Linux中下载文件主要有两种方式:使用命令行工具和使用图形界面浏览器。

命令行工具

这是Linux用户尤其是服务器管理员最常用的方式。最流行的两个工具是 wgetcurl。它们都能完成文件下载任务,但在设计哲学和主要用途上略有不同。

wget

wget 是一个专门用于下载文件的非交互式命令行工具。它支持HTTP、HTTPS和FTP协议,特别适合在脚本中使用,因为它不需要用户交互。wget 在处理递归下载(下载整个网站)和断点续传方面表现出色。

基本语法:

wget [选项] [URL地址]

下载单个文件:

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

这会将 example.tar.gz 文件下载到当前目录。

curl

curl 是一个更通用的数据传输工具,它支持更多的协议(包括DICT, FILE, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP等)。curl 最初是为测试连接和传输数据而设计的,因此它默认会将下载内容输出到标准输出,而不是保存为文件。要将下载内容保存为文件,需要使用特定的选项。

基本语法:

curl [选项] [URL地址]

下载单个文件并保存到当前目录(使用远程文件名):

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

请注意这里的 -O(大写字母O)。

下载单个文件并保存为指定的文件名:

curl -o local_example.tar.gz http://example.com/files/example.tar.gz

这里的 -o(小写字母o)后面跟着要保存的文件名。

图形界面浏览器

如果你使用的是带有图形界面的Linux发行版(如Ubuntu桌面版、Fedora工作站版等),你也可以使用浏览器(如Firefox、Chrome、Chromium等)来下载文件,就像在其他操作系统中一样。这对于下载文档、图片或其他不需要脚本自动处理的文件非常方便。通常,你只需点击网页上的下载链接即可。

下载的文件存放在哪里?

使用命令行工具下载文件时,文件通常会下载到执行命令时的 当前工作目录

例如,如果你在 /home/user/Documents 目录下打开终端并执行下载命令,文件默认就会保存到 /home/user/Documents

你可以通过以下方式改变下载位置:

  1. 在执行下载命令前,先切换到目标目录:

    cd /path/to/your/download/directory
    wget http://example.com/file.zip

    或者

    cd /path/to/your/download/directory
    curl -O http://example.com/file.zip

  2. 使用工具提供的选项指定输出文件路径和名称:

    • 对于 wget,使用 -O(大写字母O)选项指定输出文件名和路径:

      wget -O /path/to/your/download/directory/file.zip http://example.com/file.zip

      请注意,wget -O 会强制将下载内容保存为指定的文件名,即使远程文件名不同。

    • 对于 curl,使用 -o(小写字母o)选项指定输出文件名和路径:

      curl -o /path/to/your/download/directory/file.zip http://example.com/file.zip

      或者使用 -O(大写字母O)选项,结合先切换目录的方式,将文件保存到指定目录并保留远程文件名:

      cd /path/to/your/download/directory
      curl -O http://example.com/file.zip

使用图形界面浏览器下载时,下载位置通常可以在浏览器设置中配置,默认为用户的“下载”或“Downloads”目录。

如何更灵活地进行文件下载?

断点续传:如何处理下载中断?

处理因网络问题或其他原因导致的下载中断是非常重要的,尤其是下载大文件时。wgetcurl 都支持断点续传功能。

  • 使用 wget 进行断点续传:使用 -c--continue 选项。

    wget -c http://example.com/large_file.iso

    如果同一个文件已经部分存在,wget 会检查本地文件大小,并尝试从上次中断的地方继续下载。

  • 使用 curl 进行断点续传:使用 -C ---continue-at - 选项。这里的 - 表示让 curl 自动确定从何处继续。

    curl -C – -O http://example.com/large_file.iso

    同样,curl 会检查本地同名文件并尝试续传。注意使用 -O-o 来指定保存文件,否则内容会输出到标准输出。

如何一次下载多个文件?

有时你需要从不同的URL下载多个文件。

  • 使用 wget 下载多个文件:可以将所有URL列在一个文本文件中,每行一个URL,然后使用 -i--input-file 选项指定该文件。

    首先创建一个包含URL列表的文件,例如 download_list.txt

    http://example.com/file1.zip
    http://anothersite.org/document.pdf
    ftp://someftpsite.com/data.tar.gz

    然后执行:

    wget -i download_list.txt

    wget 会逐个下载文件列表中的URL。

  • 使用 curl 下载多个文件:curl 本身没有像 wget -i 那样直接读取文件列表的功能,但你可以在脚本中使用循环来遍历URL列表并调用 curl 下载。例如:

    while read url; do
        curl -O “$url”
    done < download_list.txt

如何下载需要认证的文件?

如果文件位于需要用户名和密码才能访问的HTTP或FTP服务器上,可以使用相应的选项进行认证。

  • 使用 wget 进行认证:使用 --user--password 选项。

    wget –user your_username –password your_password http://example.com/protected/file.zip

  • 使用 curl 进行认证:使用 -u--user 选项,格式为 username:password

    curl -u your_username:your_password -O http://example.com/protected/file.zip

请注意,在命令行中直接输入密码可能不安全,因为它会出现在命令行历史记录中。对于更安全的方式,可以查阅工具手册,了解如何通过配置文件或环境变量进行认证。

如何下载FTP上的文件?

wgetcurl 都支持FTP协议。

  • 使用 wget 下载FTP文件:直接使用 ftp:// 开头的URL。

    wget ftp://ftp.example.com/pub/file.tar.gz

    对于需要认证的FTP,使用 --user--password 选项。

  • 使用 curl 下载FTP文件:直接使用 ftp:// 开头的URL。

    curl -O ftp://ftp.example.com/pub/file.tar.gz

    对于需要认证的FTP,使用 -u 选项。

如何在后台下载?

下载大文件时,你可能希望下载过程在后台运行,以便关闭终端或继续做其他事情。

  • 使用 wget 在后台下载:使用 -b--background 选项。

    wget -b http://example.com/very_large_file.iso

    wget 会在后台启动一个进程,并将输出(包括下载进度)记录到一个名为 wget-log(或 wget-log.N)的文件中。

  • 使用 curl 在后台下载:curl 本身没有内置的后台选项,但你可以结合Linux的后台命令符号 & 和nohup命令来实现。

    nohup curl -O http://example.com/very_large_file.iso &

    这会将 curl 命令放到后台运行,并将输出重定向到 nohup.out 文件,即使关闭终端也不会中断。

如何查看下载进度和处理大文件?

默认情况下,wgetcurl 在下载时都会显示进度条,包括已下载的数据量、下载速度和预计剩余时间。这对于监控下载状态非常有用,特别是下载大文件时。

如果你想限制下载速度,以避免占用过多带宽,可以使用以下选项:

  • 使用 wget 限制速度:使用 --limit-rate=AMOUNT 选项,例如 --limit-rate=500k (500 KB/s) 或 --limit-rate=2m (2 MB/s)。

    wget –limit-rate=1m http://example.com/large_file.zip

  • 使用 curl 限制速度:使用 --limit-rate AMOUNT 选项,例如 --limit-rate 500K (500 KB/s) 或 --limit-rate 2M (2 MB/s)。注意 curl 的单位是 K, M, G。

    curl –limit-rate 1M -O http://example.com/large_file.zip

对于超大文件,除了断点续传外,还需要确保目标文件系统有足够的空间。在下载前可以使用 df -h . 命令查看当前目录所在分区剩余空间。

如何验证下载文件的完整性?

下载完成后,特别是重要的文件(如安装镜像、软件更新),验证文件的完整性非常重要,以确保文件在传输过程中没有损坏或被篡改。发布文件的人通常会提供校验和(Checksum)文件,如MD5、SHA-1、SHA-256等。

你可以在Linux中使用相应的工具计算下载文件的校验和,并与提供的校验和进行对比。

  • 计算MD5校验和:

    md5sum downloaded_file.zip

  • 计算SHA-256校验和:

    sha256sum downloaded_file.zip

将命令输出的校验和字符串与源网站提供的校验和进行比较。如果一致,说明文件完整且未被修改。

掌握这些在Linux中下载文件的方法和技巧,无论是简单的文件获取,还是复杂的自动化下载任务,都能让你事半功倍。命令行工具的灵活性和强大功能,是Linux系统高效工作的重要体现。

linux下载文件