0%

scp命令

SCP 命令详解:跨机器文件传输的高效工具

scp(Secure Copy)是基于 SSH 协议的跨机器文件传输命令,具有安全性高、使用简单的特点,常用于服务器之间或本地与服务器之间的文件同步。本文将详细介绍 scp 的用法、参数及实战技巧。

scp 基本语法与核心参数

基本语法

1
scp [参数] 源文件 目标路径
  • 源文件 / 目标路径格式:
    • 本地路径:直接使用绝对路径(如 /home/user/file.txt)或相对路径(如 ./docs)。
    • 远程路径:用户名@主机地址:文件路径(如 root@192.168.1.100:/var/log)。

核心参数

参数 作用
-r 递归复制目录(必须用于目录传输,否则仅复制文件)
-v 显示详细传输过程(便于调试)
-P 端口 指定 SSH 端口(默认 22,非默认端口需指定)
-i 私钥文件 使用指定的 SSH 私钥进行认证(适用于密钥登录)
-l 限速 限制传输速率(单位:Kbit/s,如 -l 800 限制为 100KB/s)
-p 保留文件的修改时间、权限等元数据

常见传输场景示例

本地文件 → 远程服务器

1
2
3
4
5
6
7
8
# 传输单个文件到远程目录
scp /home/user/data.txt root@192.168.1.100:/tmp/

# 传输多个文件到远程目录
scp file1.txt file2.jpg root@server:/var/www/

# 传输目录(必须加 -r)
scp -r /home/user/docs root@192.168.1.100:/opt/

远程服务器 → 本地

1
2
3
4
5
6
7
8
# 从远程下载单个文件到本地
scp root@192.168.1.100:/var/log/syslog ./

# 从远程下载目录到本地
scp -r root@server:/usr/local/nginx/conf /home/user/backup/

# 指定非默认 SSH 端口(如 2222)
scp -P 2222 root@192.168.1.101:/etc/profile ./

远程服务器 → 远程服务器

直接在两台远程服务器之间传输文件(无需经过本地中转):

1
scp -r root@server1:/data/backup root@server2:/data/restore/

结合 SSH 密钥认证传输

若已配置 SSH 密钥登录,可通过 -i 参数指定私钥,避免输入密码:

1
2
# 使用私钥传输文件
scp -i ~/.ssh/my_key -r /local/path user@remote:/remote/path

实用技巧与注意事项

  1. 显示传输进度
    加上 -v 参数可查看详细过程,或使用 pv 工具显示进度条(需先安装 pv):

    1
    pv large_file.iso | scp -v -B - root@server:/tmp/
  2. 避免重复传输
    scp 会覆盖目标文件,若需增量传输(仅传输变化的文件),可使用 rsync 命令(功能更强大):

    1
    rsync -avz /local/path root@server:/remote/path  # 增量同步,速度更快
  3. 传输大文件的注意事项

    • 对于 GB 级大文件,建议使用-l参数限制速率,避免占用全部带宽:

      1
      scp -l 4000 large_file.tar.gz root@server:/data/  # 限制为 500KB/s
    • 若传输中断,可使用rsync —partial续传:

      1
      rsync --partial -avz large_file.tar.gz root@server:/data/
  4. 权限与所有权

    • 默认情况下,传输后的文件所有者为目标路径的登录用户。

    • 使用-p参数保留原文件的修改时间、权限等属性:

      1
      scp -p -r /etc/nginx root@server:/etc/  # 保留权限和时间戳

欢迎关注我的其它发布渠道

表情 | 预览
快来做第一个评论的人吧~
Powered By Valine
v1.3.10