在 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/

注意事项
  • 若远程目标路径是 目录,需确保目录已存在(否则会报错);

  • 密码登录时,执行命令后会提示输入远程服务器的用户名密码;密钥登录需确保私钥权限为 600chmod 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 所有,普通用户无法写入);

  • 解决:

    1. 切换到有权限的用户(如 root)上传;

    2. 给远程目录授权:ssh 远程用户名@远程IP "chmod 777 /远程目标路径"(临时测试用,生产环境不推荐 777);

    3. 选择远程用户有权限的目录(如 /home/用户名/ 目录)。

2. 上传超时 / 连接失败

  • 原因:远程服务器 SSH 服务未启动、端口被防火墙拦截、IP / 端口错误;

  • 解决:

    1. 测试 SSH 连接是否正常:ssh 远程用户名@远程IP -p 端口号(能登录则 SSH 正常);

    2. 检查防火墙:远程服务器开放 22 端口(或自定义端口),如 firewall-cmd --permanent --add-port=22/tcp && firewall-cmd --reload(CentOS);

    3. 确认远程服务器 IP 可达(ping 远程IP)。

3. 大文件上传中断

  • 解决:使用 rsync -P 命令(断点续传),重新执行相同命令即可继续传输,无需从头开始。

四、命令选择建议

场景

推荐命令

核心优势

一次性上传少量文件 / 目录

scp

语法简单,无需记忆复杂选项

大文件、频繁同步、增量传输

rsync

断点续传、高效增量、压缩传输

交互式操作、手动选择文件

sftp

可视化浏览目录,操作灵活

本地 Linux 内部文件移动 / 复制

cp/mv

本地操作,无需网络

掌握 scp(简单场景)和 rsync(复杂场景)即可覆盖 99% 的 Linux 上传需求,生产环境中优先使用 rsync 传输大文件或频繁同步的目录,效率和稳定性更优。

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐