从Linux服务器下载文件是日常运维和开发中的常见操作,根据服务器环境、文件大小及安全需求,可选择多种命令行工具实现,本文将详细介绍几种主流下载方法,包括原理、语法、参数及实际应用场景,帮助用户高效完成文件传输任务。
基于SSH的安全传输:scp与rsync
scp(Secure Copy)
scp是利用SSH协议进行安全文件传输的工具,适合小文件或目录的快速拷贝,其语法简单且默认加密,无需额外配置。
- 基本语法:
scp [选项] 源文件路径 目标地址
- 常用参数:
-r
:递归拷贝目录;-P
:指定SSH端口(默认22);-p
:保留文件权限、时间戳等元数据;-C
:启用压缩(适合大文件)。
- 示例:
从服务器user@192.168.1.100
下载/home/user/data.txt
到本地当前目录:scp user@192.168.1.100:/home/user/data.txt .
递归下载服务器
/home/user/docs
目录到本地/backup
:scp -r -P 2222 user@192.168.1.100:/home/user/docs /backup
rsync(Remote Sync)
rsync是更高效的文件同步工具,支持增量传输(仅同步变化部分),适合大文件或频繁同步场景,且可保留文件属性、支持断点续传。
- 基本语法:
rsync [选项] 源文件路径 目标地址
- 常用参数:
-a
:归档模式(保留权限、时间戳等,相当于-rlptgoD
);-v
:显示传输详情;-z
:传输过程压缩;-P
:显示传输进度,支持断点续传(相当于--partial --progress
);--delete
:目标目录与源目录保持一致(删除目标中多余的文件)。
- 示例:
同步服务器/data/logs
目录到本地/local_logs
,并删除本地已不存在的文件:rsync -avz --delete user@192.168.1.100:/data/logs /local_logs
断点续传未下载完的大文件
large_file.zip
:rsync -avzP user@192.168.1.100:/home/user/large_file.zip .
基于HTTP/FTP协议的下载:wget与curl
若服务器开启了HTTP/FTP服务(如Nginx、Apache),可直接通过wget
或curl
下载文件,无需SSH账号。
wget
wget是纯命令行下载工具,支持HTTP、FTP、HTTPS协议,可递归下载、断点续传,适合批量下载或离线下载。
- 基本语法:
wget [选项] [URL]
- 常用参数:
-c
:断点续传;-b
:后台下载;-O
:指定本地文件名(默认保留远程文件名);
-r
:递归下载(配合-np
不下载父级目录,-l
限制层级);
--limit-rate
:限制下载速度(如--limit-rate=100k
)。
- 示例:
下载服务器HTTP上的file.zip
并重命名为backup.zip
:wget -O backup.zip http://192.168.1.100/files/file.zip
递归下载服务器FTP目录
/pub/docs
下的所有文件(不超过2层):wget -r -np -l 2 ftp://user:pass@192.168.1.100/pub/docs
curl
curl功能更强大,支持多种协议(HTTP/FTP/SCP等),可结合管道处理文件内容,适合需要精细控制的场景。
- 基本语法:
curl [选项] -o [本地文件名] [URL]
- 常用参数:
-o
/-O
:-o
指定文件名,-O
保留远程文件名;
-L
:跟随重定向;
-u
:设置用户名密码(如-u user:pass
);
:显示进度条。 - 示例:
下载HTTP文件并显示进度条:curl -# -o data.json http://192.168.1.100/api/data
通过FTP匿名下载文件:
curl -O ftp://192.168.1.100/pub/file.txt
交互式文件传输:sftp
sftp(SSH File Transfer Protocol)是基于SSH的交互式文件传输工具,类似FTP但更安全,适合需要浏览服务器目录、选择性下载的场景。
- 基本语法:
sftp [用户名@服务器地址]
- 交互命令:
get [远程文件] [本地路径]
:下载文件;get -r [远程目录]
:递归下载目录;ls
/cd
:列出/切换服务器目录;
lcd
/lls
:切换/列出本地目录;
exit
:退出sftp。
- 示例:
连接服务器并下载/home/user/docs
目录:sftp user@192.168.1.100 sftp> cd /home/user/docs sftp> get -r . /local/path sftp> exit
网络文件系统挂载:NFS/SMB
若服务器通过NFS(Linux/Unix)或SMB(Windows)共享目录,可直接挂载到本地后复制文件,适合频繁访问共享场景。
- NFS挂载示例:
# 创建本地挂载点 mkdir /mnt/nfs_share # 挂载服务器共享目录 mount -t nfs 192.168.1.100:/share /mnt/nfs_share # 复制文件到本地 cp /mnt/nfs_share/file.txt /backup # 卸载挂载点 umount /mnt/nfs_share
- SMB挂载示例(需安装cifs-utils):
mkdir /mnt/smb_share mount -t cifs //192.168.1.100/share /mnt/smb_share -o username=user,password=pass cp /mnt/smb_share/data.csv /local/ umount /mnt/smb_share
方法对比与选择建议
方法 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
scp | 小文件/目录,需SSH加密传输 | 简单易用,默认加密 | 无增量传输,大文件效率低 |
rsync | 大文件/目录,增量同步,断点续传 | 高效,保留属性,支持删除冗余 | 参数稍复杂,需SSH权限 |
wget/curl | HTTP/FTP下载,批量下载,限速 | 协议支持广,适合公开资源 | 需服务器开启对应服务 |
sftp | 交互式操作,需浏览服务器目录 | 安全,类似FTP操作体验 | 交互式效率低,不适合自动化 |
挂载 | 频繁访问共享目录,需本地操作 | 像本地文件操作,支持随机读写 | 需配置共享服务,占用挂载点 |
相关问答FAQs
Q1:下载大文件时网络中断,如何续传?
A:根据工具选择续传方式:
- rsync:使用
-P
参数(如rsync -avP user@server:/file.zip .
),会自动检测已下载部分并续传; - wget:使用
-c
参数(如wget -c http://server/file.zip
),若本地存在同名文件,会从断点继续下载; - curl:使用
-C -
参数(如curl -C - -O http://server/file.zip
),功能与wget类似。
Q2:如何批量下载服务器上符合特定格式的多个文件(如所有.log文件)?
A:可通过以下方式实现:
- rsync:使用通配符(需服务器端支持bash扩展):
rsync -av user@server:'/path/to/*.log' /local/
- sftp:使用
mget
命令(支持通配符):sftp user@server sftp> cd /path/to sftp> mget *.log
- scp+for循环:通过服务器端命令生成文件列表,本地循环下载:
ssh user@server 'ls /path/to/*.log' | while read file; do scp user@server:"$file" /local/; done
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/33046.html