在 Linux 系统中,上传文件的核心场景分为 本地文件上传到远程 Linux 服务器 和 本地 Linux 内部不同路径间传输文件,以下是最常用、高效的命令,附带详细用法和场景说明:
一、核心场景 1:本地 → 远程 Linux 服务器(最常用)
需通过 网络传输 ,核心命令为 scp(简单可靠)、rsync(高效增量传输)、sftp(交互式传输),均基于 SSH 协议(默认 22 端口),需知道远程服务器的 IP、用户名、密码 / SSH 密钥。
1. scp 命令(Secure Copy,简单直接)
scp 是基于 SSH 的安全拷贝命令,支持文件 / 目录传输,用法简单,适合一次性上传少量文件。
基本语法
bash
本地文件 → 远程服务器
scp[选项] 本地文件路径 远程用户名@远程IP:远程目标路径
`
本地目录 → 远程服务器(需加 -r 递归)`
scp-r[选项] 本地目录路径 远程用户名@远程IP:远程目标路径
常用选项
-
-r:递归传输目录(必须加,否则无法上传文件夹);
-
-P 端口号:指定远程 SSH 端口(默认 22,若服务器端口修改需显式指定);
-
-i 密钥文件路径:使用 SSH 私钥认证(免密码,比密码登录更安全);
-
-l 带宽限制:限制传输速率(如
-l 1024表示 1MB/s)。
实操示例
bash
1. 上传本地单个文件(如本地的 test.txt 上传到远程 /home/user 目录)
scp /home/local/test.txt root@192.168.1.100:/home/user/
`
2. 上传本地目录(如本地的 docs 文件夹上传到远程 /home/user 目录)`
scp-r /home/local/docs root@192.168.1.100:/home/user/
`
3. 服务器端口非默认(如 2222),上传文件`
scp-P2222 /home/local/image.jpg root@192.168.1.100:/home/user/images/
`
4. 使用 SSH 密钥认证(免密码),上传目录`
scp-r-i ~/.ssh/my_key.pem /home/local/project root@192.168.1.100:/opt/
注意事项
-
若远程目标路径是 目录,需确保目录已存在(否则会报错);
-
密码登录时,执行命令后会提示输入远程服务器的用户名密码;密钥登录需确保私钥权限为
600(chmod 600 ~/.ssh/my_key.pem),否则 SSH 会拒绝使用。
2. rsync 命令(高效增量传输,适合大文件 / 频繁同步)
rsync 是 Linux 下最强的同步工具,支持 增量传输 (仅传输变化的文件 / 文件片段),速度比 scp 快,且支持断点续传,适合上传大文件、频繁同步目录(如备份场景)。
基本语法
bash
本地文件/目录 → 远程服务器
rsync[选项] 本地路径 远程用户名@远程IP:远程目标路径
核心选项(必记)
-
-a:归档模式(等价于
-rlptgoD),递归传输目录、保留文件权限 / 时间戳 / 所有者等(推荐默认加); -
-v:显示详细传输日志(便于排查问题);
-
-z:传输时压缩数据(减少网络带宽占用);
-
-P:断点续传(
--partial --progress缩写,支持大文件中断后继续传输,且显示进度条); -
-e "ssh -p 端口号":指定 SSH 端口(如服务器端口非 22 时使用);
-
--delete:同步时删除远程目标路径中本地没有的文件(谨慎使用,适合全量同步场景)。
实操示例
bash
1. 上传大文件(如 10GB 的 video.mp4),支持断点续传+进度条
rsync-avzP /home/local/video.mp4 root@192.168.1.100:/home/user/media/
`
2. 同步本地目录到远程,保留权限+压缩传输,服务器端口 2222`
rsync-avzP-e"ssh -p 2222" /home/local/data root@192.168.1.100:/home/user/
`
3. 增量同步(仅传输变化的文件),适合频繁更新的项目目录`
rsync-avzP /home/local/project root@192.168.1.100:/opt/project/
优势对比 scp
-
大文件传输:
rsync支持断点续传,scp中断后需重新传输; -
频繁同步:
rsync仅传变化部分,scp每次全量传输,效率天差地别; -
带宽占用:
-z选项压缩数据,弱网环境下优势明显。
3. sftp 命令(交互式传输,适合手动选择文件)
sftp 是 SSH File Transfer Protocol 的缩写,交互式操作(类似 FTP 命令),适合需要手动浏览远程目录、选择上传 / 下载文件的场景(如临时上传少量文件,不确定远程路径时)。
基本用法
bash
1. 连接远程服务器(默认 22 端口,非默认端口加 -P)
sftp 远程用户名@远程IP # 或 sftp -P 2222 远程用户名@远程IP
`
2. 连接成功后,进入交互式命令行(常用命令如下)`
sftp> put 本地文件路径 远程目标路径 # 上传本地文件到远程
sftp> put -r 本地目录路径 远程目标路径 # 上传本地目录(-r 递归)
sftp>ls# 查看远程当前目录文件
sftp>cd 远程目录路径 # 切换远程目录
sftp> lls # 查看本地当前目录文件(加 l 表示本地操作)
sftp> lcd 本地目录路径 # 切换本地目录
sftp>exit# 退出 sftp 连接
实操示例
bash
1. 连接远程服务器
sftp root@192.168.1.100
`
2. 上传本地 /home/local/test.txt 到远程 /home/user 目录`
sftp> put /home/local/test.txt /home/user/
`
3. 上传本地 /home/local/docs 目录到远程 /home/user 目录`
sftp> put -r /home/local/docs /home/user/
`
4. 浏览远程目录,确认上传结果`
sftp>cd /home/user
sftp>ls# 查看是否有 test.txt 和 docs 目录
sftp>exit# 退出
特点
-
交互式操作,无需记忆复杂命令,适合临时手动传输;
-
基于 SSH 安全传输,支持密码 / 密钥认证;
-
不支持断点续传(大文件不推荐)。
二、场景 2:本地 Linux 内部传输文件(同一主机不同路径)
无需网络,直接通过 cp 命令(复制)或 mv 命令(移动,等价于 "剪切上传")操作。
1. cp 命令(复制文件 / 目录)
bash
复制单个文件到目标路径
cp /home/local/file.txt /home/user/backup/
`
复制目录(递归,加 -r)`
cp-r /home/local/docs /home/user/backup/
`
复制时保留文件属性(权限、时间戳等),加 -a`
cp-a /home/local/data /home/user/backup/
2. mv 命令(移动文件 / 目录,剪切 + 粘贴)
bash
移动单个文件到目标路径
mv /home/local/file.txt /home/user/backup/
`
移动目录(无需加 -r,直接移动)`
mv /home/local/docs /home/user/backup/
三、常见问题排查
1. 上传失败:"Permission denied"(权限不足)
-
原因:远程目标路径的写入权限不足(如远程目录是
root所有,普通用户无法写入); -
解决:
-
切换到有权限的用户(如
root)上传; -
给远程目录授权:
ssh 远程用户名@远程IP "chmod 777 /远程目标路径"(临时测试用,生产环境不推荐 777); -
选择远程用户有权限的目录(如
/home/用户名/目录)。
-
2. 上传超时 / 连接失败
-
原因:远程服务器 SSH 服务未启动、端口被防火墙拦截、IP / 端口错误;
-
解决:
-
测试 SSH 连接是否正常:
ssh 远程用户名@远程IP -p 端口号(能登录则 SSH 正常); -
检查防火墙:远程服务器开放 22 端口(或自定义端口),如
firewall-cmd --permanent --add-port=22/tcp && firewall-cmd --reload(CentOS); -
确认远程服务器 IP 可达(
ping 远程IP)。
-
3. 大文件上传中断
- 解决:使用
rsync -P命令(断点续传),重新执行相同命令即可继续传输,无需从头开始。
四、命令选择建议
| 场景 | 推荐命令 | 核心优势 |
|---|---|---|
| 一次性上传少量文件 / 目录 | scp | 语法简单,无需记忆复杂选项 |
| 大文件、频繁同步、增量传输 | rsync | 断点续传、高效增量、压缩传输 |
| 交互式操作、手动选择文件 | sftp | 可视化浏览目录,操作灵活 |
| 本地 Linux 内部文件移动 / 复制 | cp/mv | 本地操作,无需网络 |
掌握 scp(简单场景)和 rsync(复杂场景)即可覆盖 99% 的 Linux 上传需求,生产环境中优先使用 rsync 传输大文件或频繁同步的目录,效率和稳定性更优。