飞跃高山与大洋的鱼飞跃高山与大洋的鱼
首页
先看
计算机
  • 数学
  • Linux
  • Arch
  • Manjaro
  • Ubuntu
  • CentOS
  • Kubernetes
  • Web
  • JavaScript
  • TypeScript
  • CSS
  • Canvas
  • Vue
  • Vite
  • NuxtJS
  • Webpack
  • Flutter
  • D3
  • Jest
  • WeApp
  • Utils
  • Nodejs
  • Nestjs
  • Golang
  • Nginx
  • Traefik
  • MySQL
  • MongoDB
  • Redis
  • Docker
算法
  • 像素风
  • Git
  • Github
  • VSCode
  • Chrome
  • Google
  • Bookmark scripts
  • 导航 🎉
  • VuePress 侧边栏插件
  • VuePress 官网
🚇 开往
首页
先看
计算机
  • 数学
  • Linux
  • Arch
  • Manjaro
  • Ubuntu
  • CentOS
  • Kubernetes
  • Web
  • JavaScript
  • TypeScript
  • CSS
  • Canvas
  • Vue
  • Vite
  • NuxtJS
  • Webpack
  • Flutter
  • D3
  • Jest
  • WeApp
  • Utils
  • Nodejs
  • Nestjs
  • Golang
  • Nginx
  • Traefik
  • MySQL
  • MongoDB
  • Redis
  • Docker
算法
  • 像素风
  • Git
  • Github
  • VSCode
  • Chrome
  • Google
  • Bookmark scripts
  • 导航 🎉
  • VuePress 侧边栏插件
  • VuePress 官网
🚇 开往
  • LINUX

    • 为什么不试试 Linux 呢
    • 一切皆文件
    • Shell 脚本
    • 别名 alias
    • 分发脚本 ansible
    • 归档和压缩
    • 命令选项
    • 命令行快捷键
    • Linux 常用命令
    • 解放双手计划
    • 检测服务器通达
    • Linux 系统目录结构
    • Dnsmasq
    • fail2ban
    • 防火墙 firewalld
    • 花里胡哨且实用的命令
    • 文本三剑客
    • 如何启用硬盘
    • 输入、输出重定向
    • 作业控制
    • Prometheus
    • 磁盘阵列
    • 远程同步文件
      • Rsync
        • 1. 选项(特性)
        • 2. 语法
        • 3. 常用示例
        • 4. 可能存在的问题
      • Scp
        • 1. 语法
        • 2. 常用示例
    • SSH 让你的服务器更安全
    • 守护系统 systemd
    • 用户管理
    • 查看文本内容
    • 传参 xargs

远程同步文件

Rsync

Rsync(Remote Sync),使用其 “Quick Check” 算法实现增量复制数据。可以使用 rsync 在不同目录(本地),不同服务器(远程)之前实现数据备份。在 3.x 版本可以做到一边对比差异一边复制。

1. 选项(特性)

Rsync 具有很多优异的特性,例如保持文件属性、权限;使用 rsh、ssh 等隧道加密传输文件(rsync 本身不会对数据加密)等。

具体的特性可以根据其命令参数得知:

短参数长参数描述
-v--verbose显示输出过程
-q--quiet静默模式
-P--progress显示同步的过程及传输时的进度信息
-e--rsh指定隧道
-a--archive多参数集合(-rtopgDl)
-r--recursive递归
-t--times保持修改时间属性
-o--owner保持属主
-p--perms保持权限
-g--group保持用户组
-D--devices保持设备文件信息
-l--links保持软链接
-z--compress压缩
--bwlimit=KBPS限速,限制 I/O 带宽
--delete删除,即无差异同步数据
-b--backup备份,对于已存在同样的文件名时,老文件重命名为 ~filename,可以使用 --suffix 指定
--backup-dir备份文件指定目录
--exclude=PATTERN排除传输的文件模式
--exclude-from=FILE排除 FILE 中指定模式的文件
--include=PATTERN包含传输的文件模式
--include-from=FILE包含 FILE 中指定模式的文件
--password-file=FILE从 FILE 中得到密码

其中常用参数为 -avz。

2. 语法

rsync [OPTION]    SRC    DEST
rsync [OPTION]    SRC    [USER@]host:DEST
rsync [OPTION]    [USER@]HOST:SRC    DEST
rsync [OPTION]   [USER@]HOST::SRC   DEST
rsync [OPTION]    SRC    [USER@]HOST::DEST
rsync [OPTION]    rsync://[USER@]HOST[:PORT]/SRC    [DEST]

3. 常用示例

  • 目录间推送数据

    rsync /ect/hosts /opt
    # 保持属性
    rsync -vzrtopg --progress /etc/hosts /opt
    
  • 目录间同步数据

    # 同步文件
    touch /null.txt
    cat /opt/hosts
    rsync -r --delete /null.txt /opt/hosts
    cat /opt/hosts # 验证
    # 同步目录
    mkdir /null
    rsync  -r --delete /null /opt
    ls /opt # 验证
    
  • 推送数据到对应主机端口

    rsync -avz /etc/hosts root@45.78.12.89:/opt
    # 等价于
    rsync -avz /etc/hosts -e  'ssh -p 22' root@45.78.12.89:/opt 
    # 切换到对应服务器上
    cat /opt/hosts # 验证
    
  • 从服务器拉取数据

    rsync -avz -e  'ssh -p 22' root@45.78.12.89:/opt/hosts /opt
    cat /opt/hosts # 验证
    
  • 配合 sshpass 使用:

    sshpass -p 'your_password' rsync -avz /srv/app/dist tencent:/app
    

4. 可能存在的问题

看到部分文章说 rsync 传输大量小文件时会停止僵死(小文件是多小,大量是多大也没有描述清楚),这个问题搜了下,尚未得知具体的原因:

  1. Best way to copy millions of files between 2 servers
  2. How to speed up rsync for small files

Scp

rsync 虽然可以增量下载,速度快一些,还有更多的功能,但是 scp 非常不占资源,rsync 在小文件众多时会导致磁盘 I/O 非常高。

1. 语法

相对于 rsync,scp 的语法则简单很多:

scp (选项) (源文件) (目标文件)

# 选项
-1:使用 ssh 协议版本1;
-2:使用 ssh 协议版本2;
-4:使用 ipv4;
-6:使用 ipv6;
-B:以批处理模式运行;
-C:使用压缩;
-F:指定 ssh 配置文件;
-i:identity_file 从指定文件中读取传输时使用的密钥文件(例如私钥),此参数直接传递给 ssh;
-l:指定宽带限制;
-o:指定使用的 ssh 选项;
-P:指定远程主机的端口号;
-p:保留文件的最后修改时间,最后访问时间和权限模式;
-q:不显示复制进度;
-r:以递归方式复制。

# 源文件:指定要复制的源文件。
# 目标文件:目标文件。格式为 `user@host:filename` (文件名为目标文件的名称)。

2. 常用示例

  • 密码形式上传文件:

    scp -r /home/shanyuhai/Download/test shanyuhai@47.111.23.259:/home/shanyuhai/downloads
    

    接着输入密码即可

  • 秘钥形式上传文件:

    scp -i ~/.ssh/id_rsa_xxx hi.png shanyuhai@47.111.23.259:/home/shanyuhai/downloads
    
  • 秘钥形式下载文件:

    scp -i ~/.ssh/id_rsa_xxx shanyuhai@47.111.23.259:/home/shanyuhai/downloads/hi.png pictures
    

还可以使用 lrzsz 来进行本地和远程的文件交互,不过需要双端都安装 lrzsz:

  • 下载(sz)

    sz filename
    # 等待选择保存的本地路径
    
  • 上传(rz)

    rz
    # 等待选择文件
    # (还可以拖拽文件)
    
编辑文档!
上次更新:
贡献者: shanyuhai123
Prev
磁盘阵列
Next
SSH 让你的服务器更安全