凌峰创科服务平台

Linux如何从服务器下载文件?

在Linux系统中,从服务器下载文件是日常运维和开发中常见的操作,根据服务器环境的不同(如是否支持SSH、FTP、HTTP/S等协议),可以选择多种工具和方法,以下将详细介绍几种主流的下载方式,包括命令行工具的使用、参数配置、常见场景处理及注意事项。

Linux如何从服务器下载文件?-图1
(图片来源网络,侵删)

通过SSH协议下载(适用于Linux/Unix服务器)

SSH(Secure Shell)协议不仅用于远程登录,还可通过其文件传输协议(SFTP)或SCP(Secure Copy)实现安全高效的文件下载,这两种方式均基于SSH加密传输,适合在服务器与客户端之间传输敏感或大文件。

使用SCP(Secure Copy)命令

SCP是SSH内置的文件复制工具,语法简单,适合快速传输单个文件或目录,基本语法为:
scp [选项] [用户名@]服务器地址:/文件路径 [本地路径]

常用参数说明:
| 参数 | 功能描述 |
|------|----------|
| -P | 指定SSH端口(默认22),需大写 |
| -r | 递归复制整个目录 |
| -p | 保留文件修改时间、权限等属性 |
| -C | 启用压缩传输,适合网络环境较差时 |

示例操作:

Linux如何从服务器下载文件?-图2
(图片来源网络,侵删)
  • 下载单个文件:

    scp -P 2222 user@192.168.1.100:/home/user/data.txt ~/Downloads/

    (通过2222端口将服务器上的data.txt下载到本地Downloads目录)

  • 下载整个目录:

    scp -r -C user@192.168.1.100:/var/www/project/ ~/local_project/

    (启用压缩并递归下载project目录)

    Linux如何从服务器下载文件?-图3
    (图片来源网络,侵删)

注意事项:

  • 需确保服务器已开启SSH服务,且客户端有目标文件的读取权限。
  • 若服务器使用密钥认证,需通过-i参数指定私钥文件路径,如scp -i ~/.ssh/id_rsa user@host:/file /local/path

使用SFTP(SSH File Transfer Protocol)

SFTP是更安全的文件传输协议,基于SSH实现,支持交互式操作,类似于FTP但无需额外配置服务,基本命令如下:

操作步骤:

  1. 连接服务器:
    sftp user@192.168.1.100
  2. 登录后进入交互模式,常用命令:
    • ls:列出服务器当前目录文件
    • cd /path:切换服务器目录
    • get /remote/path/file [local/path]:下载文件
    • get -r /remote/dir/ [local/dir]:下载目录
    • exit:退出SFTP

示例:

sftp user@192.168.1.100
sftp> cd /home/user/documents
sftp> get report.pdf ~/Documents/
sftp> exit

优势:

  • 支持断点续传(通过-a参数)、文件权限保留等高级功能。
  • 可与脚本结合实现自动化传输,如通过batch mode(非交互模式)执行命令文件。

通过FTP/SFTP协议下载(适用于传统服务器)

若服务器仅支持FTP(File Transfer Protocol),需使用ftplftp工具,FTP协议本身不加密,存在安全隐患,建议优先选择SFTP(通过SSH实现加密)。

使用ftp命令(基础工具)

ftp ftp.example.com
Connected to ftp.example.com.
Name (ftp.example.com:local_user): username
331 Please specify the password.
Password: ********
ftp> ls
ftp> get file.zip
local: file.zip remote: file.zip
226 Transfer complete.
ftp> bye

缺点:

  • 不支持加密传输,密码可能被窃听。
  • 功能有限,无法断点续传。

使用lftp(增强型FTP工具)

lftp支持多协议(FTP、HTTP、SFTP等),支持断点续传、队列下载等功能,推荐替代传统ftp

示例:

lftp ftp.example.com -u username,password
lftp ftp.example.com:> get -c large_file.zip  # -c启用断点续传
lftp ftp.example.com:> exit

通过HTTP/HTTPS协议下载(适用于Web服务器)

若服务器文件可通过HTTP/HTTPS访问(如Nginx/Apache托管的资源),可直接使用wgetcurl工具下载。

使用wget(非交互式下载工具)

wget支持后台下载、断点续传、递归下载网页资源等功能,适合脚本自动化。

常用参数:
| 参数 | 功能描述 |
|------|----------|
| -c | 断点续传 |
| -b | 后台下载 |
| -r | 递归下载(如整站镜像) |
| -O | 指定本地保存文件名 |

示例:

  • 下载单个文件:
    wget -c https://example.com/files/archive.zip -O archive.zip
  • 递归下载网站(限制深度):
    wget -r -l 2 -p https://example.com/dir/

使用curl(灵活的网络传输工具)

curl支持多种协议,可显示下载进度、自定义请求头等,适合需要精细控制的场景。

示例:

  • 下载并显示进度:

    curl -L -o output.txt https://example.com/data.txt

    -L跟随重定向,-o指定输出文件)

  • 通过认证下载:

    curl -u username:password https://example.com/protected.zip

高级场景处理

  1. 批量下载

    • 结合find命令和xargs
      ssh user@server "find /path -name '*.log' -type f" | xargs -I {} scp user@server:"{}" ~/logs/
    • 使用wget-i参数读取URL列表文件:
      wget -i urls.txt
  2. 限速下载

    • wget --limit-rate=100k:限制下载速度为100KB/s。
    • scp -l 800:限制带宽为800Kbit/s(SCP的-l参数单位为Kbit/s)。
  3. 代理环境下载

    • 通过curl使用代理:
      curl -x http://proxy:8080 -o file https://example.com/file

注意事项

  • 权限问题:确保服务器对目标文件有读取权限,本地用户有写入权限。
  • 网络稳定性:大文件传输建议使用断点续传(如wget -c),避免网络中断导致重传。
  • 安全性:避免使用明文FTP,优先选择SFTP/HTTPS;定期更新SSH密钥。

相关问答FAQs

Q1: 如何通过SSH免密登录后自动下载文件?
A1: 可通过SSH密钥认证实现免密登录,结合scpsftp脚本自动化,步骤如下:

  1. 生成SSH密钥对:ssh-keygen -t rsa(默认生成~/.ssh/id_rsaid_rsa.pub)。
  2. 将公钥上传至服务器:ssh-copy-id -i ~/.ssh/id_rsa.pub user@server
  3. 编写脚本(如download.sh):
    scp -r user@192.168.1.100:/remote/path /local/path
  4. 赋予执行权限:chmod +x download.sh,直接运行即可。

Q2: 下载大文件时如何监控实时进度?
A2: 不同工具可通过不同方式监控进度:

  • scp:默认不显示进度,可通过pv工具管道显示(需安装pv):
    scp user@server:/large/file - | pv > local_file
  • wget:默认显示实时进度条,或通过-q静默模式后手动查看日志。
  • sftp:交互模式下使用progress命令开启进度显示。
分享:
扫描分享到社交APP
上一篇
下一篇