美文网首页Linux学习学习之Linux
4-10.3 Linux 中的文件同步传输 --- rsync

4-10.3 Linux 中的文件同步传输 --- rsync

作者: 捌千里路雲和月 | 来源:发表于2021-07-31 08:54 被阅读0次
    • 4-10.2 提及到单纯用 -b 或 --backup 进行文件传输,生成的目标文件是当前的系统时间。那么每次进行相同文件的传输,系统都会进行源文件和目标文件的属性比对。即使文件内容没有变化,由于时间不一致都会进行一轮新的文件传输。如果目标目录有相同文件名的文件,以当前系统时间在目标目录产生一个新文件,旧时间的文件则变为备份文件,后缀带 ~ 符号而存在。

    • 实际上这样的会变成每次都会传输一次文件,和 cp 复制文件到目标目录操作一样,没有起到 rsync 增量备份的优势。rsync增量备份的优势是源文件对比目标文件没有改动的时候不传输,只传输有改动或新增的文件,这样才有效率。所以,在用 rsync 进行源文件备份的时候一般都会加 -a 参数,-a 是把源文件的属性一起传输到目标目录作备份。那么下次 rsync 进行传输时就会源文件对比备份文件,如果属性一致则跳过,只传输属性不一致,有改动的文件。

    • 4-10-3 内容:
      1、rsync -a -b / --backup 备份文件,传输文件的时候如检测到源文件与目标目录文件同名,大小、修改时间不一致,对目标目录中的旧文件进行备份,文件后缀加上 ~ 符号,然后传输一个新的备份文件到目标目录。如目标目录没有同名文件则会创建一个备份文件,新创建的备份文件不会带 ~ 符号。

      2、如果,源文件没有改动,与目标目录文件同名、大小、修改时间一致,则跳过备份操作。

      3、源文件只修改权限属性,文件大小和时间不改变的情况下 rsync -a -b / --backup传输文件到目标目录,如果目标目录已存在以前备份的同名文件则不会生成新的文件,但会更新目标目录文件的权限属性。


    1、rsync -a -b / --backup 备份文件,如目标目录没有同名文件则会创建一个备份文件,新创建的备份文件不会带 ~ 符号。

    • 操作步骤:
      1、按照国际惯例,首先还是要建立测试所需的框架。mkdir backups_ab 创建一个目标目录(备份目录)。
      2、源目录沿用之前预设的 SRC目录框架,目录下有demo1.txt、demo2.txt 和 demo3.txt,三个空文件。
      3、如 tree 所示。
      4、ll SRC/ 查看目录详情。
    [root@localhost test]# mkdir backups_ab
    [root@localhost test]# 
    [root@localhost test]# tree
    .
    ├── backups_ab
    └── SRC
        ├── demo1.txt
        ├── demo2.txt
        └── demo3.txt
    
    2 directories, 3 files
    [root@localhost test]# 
    [root@localhost test]# ll SRC/
    total 0
    -rw-r--r--. 1 root root 0 Jul 22 22:44 demo1.txt
    -rw-r--r--. 1 root root 0 Jul 22 22:44 demo2.txt
    -rw-r--r--. 1 root root 0 Jul 22 22:44 demo3.txt
    [root@localhost test]# 
    
    
    • 5、rsync -a -b / --backup 把SRC 目录 demo1.txt 和 demo2.txt 文件传输到 backups_ab 目录下。
      6、如 tree 所示,backups_ab 已有 demo1.txt 和 demo2.txt 文件。
    [root@localhost test]# 
    [root@localhost test]# rsync -a -b SRC/demo1.txt backups_ab/
    [root@localhost test]# 
    [root@localhost test]# rsync -a --backup SRC/demo2.txt backups_ab/
    [root@localhost test]# 
    [root@localhost test]# tree
    .
    ├── backups_ab
    │   ├── demo1.txt
    │   └── demo2.txt
    └── SRC
        ├── demo1.txt
        ├── demo2.txt
        └── demo3.txt
    
    2 directories, 5 files
    
    
    • 7、查看 backups_ab 目录的 demo1.txt 和 demo2.txt 文件,与源目录 SRC 的 demo1.txt 和 demo2.txt 文件属性一致。
    [root@localhost test]# ll backups_ab/
    total 0
    -rw-r--r--. 1 root root 0 Jul 22 22:44 demo1.txt
    -rw-r--r--. 1 root root 0 Jul 22 22:44 demo2.txt
    [root@localhost test]# 
    [root@localhost test]# ll SRC/
    total 0
    -rw-r--r--. 1 root root 0 Jul 22 22:44 demo1.txt
    -rw-r--r--. 1 root root 0 Jul 22 22:44 demo2.txt
    -rw-r--r--. 1 root root 0 Jul 22 22:44 demo3.txt
    [root@localhost test]# 
    
    

    • 如目标目录已存在同名的文件。当传输文件的时候检测到源文件与目标目录文件同名、大小、修改时间不一致。对目标目录中的旧文件进行备份,文件后缀加上 ~ 符号,然后创建一个新的备份文件。
    • 操作步骤:
      1、已知现在 backups_ab 目录下存在与源目录一致的 demo1.txt 和 demo2.txt 文件。
    [root@localhost test]# ll backups_ab/
    total 0
    -rw-r--r--. 1 root root 0 Jul 22 22:44 demo1.txt
    -rw-r--r--. 1 root root 0 Jul 22 22:44 demo2.txt
    
    • 2、vim 修改源目录 SRC 下的 demo1.txt 和 demo2.txt 文件内容。
    # 编辑 SRC 下的 demo1.txt,输入内容,然后 Esc 输入 :wq! 保存文件
    [root@localhost test]# vim SRC/demo1.txt     #
    
    hello demo1
    ~                                                                                                             
    ~                                                                                                                                                                                                                         
    :wq!     
    
    # 同样方法编辑 SRC 下的 demo2.txt
    [root@localhost test]# vim SRC/demo2.txt 
    
    hello demo2
    ~                                                                                                             
    ~                                                                                                                                                                                                                    
    :wq!        
                                       
    
    • 3、此时 ll SRC,查看 SRC目录下的 demo1.txt 和 demo2.txt 文件,他们的文件大小和时间都发生了变化。
    [root@localhost test]# ll SRC/
    total 8
    -rw-r--r--. 1 root root 12 Jul 30 00:03 demo1.txt    ## 更新了文件大小和时间
    -rw-r--r--. 1 root root 12 Jul 30 00:07 demo2.txt    ## 更新了文件大小和时间
    -rw-r--r--. 1 root root  0 Jul 22 22:44 demo3.txt   
    
    • 4、把 SRC 更新了的 demo1.txt 和 demo2.txt 文件再 rsync -a -b / --backup 备份一次到 backups_ab 目录。
    [root@localhost test]# rsync -a -b SRC/demo1.txt backups_ab/
    [root@localhost test]# 
    [root@localhost test]# rsync -a --backup SRC/demo2.txt backups_ab/
    
    • 5、由于目标目录已存在同名的文件。当传输文件的时候检测到源文件与目标目录文件同名、大小、修改时间不一致。对目标目录中的旧文件进行备份,文件后缀加上 ~ 符号,然后创建一个新的备份文件。如 tree 所示,backups_ab 目录下 demo1.txt 和 demo2.txt 文件分别都有两个带 ~ 符号的文件存在。
    [root@localhost test]# 
    [root@localhost test]# tree
    .
    ├── backups_ab
    │   ├── demo1.txt    ##新文件
    │   ├── demo1.txt~    ##旧文件
    │   ├── demo2.txt    ##新文件
    │   └── demo2.txt~    ##旧文件
    └── SRC
        ├── demo1.txt
        ├── demo2.txt
        └── demo3.txt
    
    2 directories, 7 files
    
    • 6、通过 ll 查看 backups_ab 下的文件详情。rsync 更新了源文件的备份,新的 demo1.txt 和 demo2.txt 文件不带 ~ 符号。带 ~ 符号的 demo1.txt 和 demo2.txt 文件就是之前的文件。
    [root@localhost test]# 
    [root@localhost test]# ll backups_ab/
    total 16
    -rw-r--r--. 1 root root 12 Jul 30 00:03 demo1.txt    ##新文件
    -rw-r--r--. 1 root root 0 Jul 22 22:44 demo1.txt~     ##旧文件
    -rw-r--r--. 1 root root 12 Jul 30 00:07 demo2.txt    ##新文件
    -rw-r--r--. 1 root root 0 Jul 22 22:44 demo2.txt~     ##旧文件
    [root@localhost test]# 
    [root@localhost test]# ll SRC/
    total 8
    -rw-r--r--. 1 root root 12 Jul 30 00:03 demo1.txt
    -rw-r--r--. 1 root root 12 Jul 30 00:07 demo2.txt
    -rw-r--r--. 1 root root  0 Jul 22 22:44 demo3.txt
    [root@localhost test]# 
    
    

    2、如果,源文件没有改动,与目标目录文件同名、大小、修改时间一致,则不进行备份操作。

    • 操作步骤:
      1、tree 查看当前目录结构
    [root@localhost test]# 
    [root@localhost test]# tree
    .
    ├── backups_ab
    │  ├── demo1.txt
    │  ├── demo1.txt~
    │  ├── demo2.txt
    │  └── demo2.txt~
    └── SRC
        ├── demo1.txt
        ├── demo2.txt
        └── demo3.txt
    
    2 directories, 7 files
    
    • 2、backups_ab 目录下没有 demo3.txt。执行 rsync -a -b,把 SRC 目录下的 demo3.txt 备份到 backups_ab/ 目录下。
    [root@localhost test]# 
    [root@localhost test]# rsync -a -b SRC/demo3.txt backups_ab/
    [root@localhost test]# 
    
    • 3、查看 backups_ab 和 SRC 目录。
    [root@localhost test]# ll backups_ab/
    total 16
    -rw-r--r--. 1 root root 12 Jul 30 00:03 demo1.txt
    -rw-r--r--. 1 root root 0 Jul 22 22:44 demo1.txt~  
    -rw-r--r--. 1 root root 12 Jul 30 00:07 demo2.txt
    -rw-r--r--. 1 root root 0 Jul 22 22:44 demo2.txt~
    -rw-r--r--. 1 root root  0 Jul 22 22:44 demo3.txt    ## 备份文件 demo3.txt
    [root@localhost test]# 
    [root@localhost test]# ll SRC/
    total 8
    -rw-r--r--. 1 root root 12 Jul 30 00:03 demo1.txt
    -rw-r--r--. 1 root root 12 Jul 30 00:07 demo2.txt
    -rw-r--r--. 1 root root  0 Jul 22 22:44 demo3.txt
    [root@localhost test]# 
    
    
    • 4、已知 SRC 的 demo3.txt 已经备份到 backups_ab。此时再执行一次 rsync -a -b,把 SRC 目录下的 demo3.txt 备份到 backups_ab/ 目录下。由于,源文件和目标目录文件大小、时间一致,所以不会产生新的备份文件。所以,也没有带 ~ 符号的 demo3.txt
    ## 再执行一次 rsync -a -b,把 SRC 目录下的 demo3.txt 备份到 backups_ab/ 目录下。
    [root@localhost test]# rsync -a -b SRC/demo3.txt backups_ab/
    [root@localhost test]# 
    [root@localhost test]# ll backups_ab/
    total 16
    -rw-r--r--. 1 root root 12 Jul 30 00:03 demo1.txt
    -rw-r--r--. 1 root root 0 Jul 22 22:44 demo1.txt~  
    -rw-r--r--. 1 root root 12 Jul 30 00:07 demo2.txt
    -rw-r--r--. 1 root root 0 Jul 22 22:44 demo2.txt~
    -rw-r--r--. 1 root root  0 Jul 22 22:44 demo3.txt    ## 还是原来第一次备份的 demo3.txt
    [root@localhost test]# 
    [root@localhost test]# tree
    .
    ├── backups_ab    ## 没有新增带 ~ 符号的demo3.txt 文件
    │   ├── demo1.txt
    │   ├── demo1.txt~
    │   ├── demo2.txt
    │   ├── demo2.txt~
    │   └── demo3.txt
    └── SRC
        ├── demo1.txt
        ├── demo2.txt
        └── demo3.txt
    
    2 directories, 8 files
    
    

    3、源文件只修改权限属性,文件大小和时间不改变的情况下 rsync -a -b / --backup传输文件到目标目录,如果目标目录已存在以前备份的同名文件则不会生成新的文件,但会更新目标目录文件的权限属性。

    • 操作步骤:
      1、先查询一下 backups_ab 和 SRC 的 demo3.txt 权限。
      权限都是 -rw-r--r--。
    [root@localhost test]# 
    [root@localhost test]# ll SRC/
    total 8
    -rw-r--r--. 1 root root 12 Jul 30 00:03 demo1.txt
    -rw-r--r--. 1 root root 12 Jul 30 00:07 demo2.txt
    -rw-r--r--. 1 root root  0 Jul 22 22:44 demo3.txt
    [root@localhost test]# 
    [root@localhost test]# 
    [root@localhost test]# ll backups_ab/
    total 16
    -rw-r--r--. 1 root root 12 Jul 30 00:03 demo1.txt
    -rw-r--r--. 1 root root 0 Jul 22 22:44 demo1.txt~  
    -rw-r--r--. 1 root root 12 Jul 30 00:07 demo2.txt
    -rw-r--r--. 1 root root 0 Jul 22 22:44 demo2.txt~
    -rw-r--r--. 1 root root  0 Jul 22 22:44 demo3.txt
    
    
    • 2、修改 SRC 的 demo3.txt 权限为 -rw-rw-rw-
    ## demo3.txt 所属组和其他人权限增加可写的权限,权限修改为 -rw-rw-rw-。
    [root@localhost test]# chmod g+w,o+w SRC/demo3.txt   
    [root@localhost test]# 
    [root@localhost test]# ll SRC/
    total 8
    -rw-r--r--. 1 root root 12 Jul 30 00:03 demo1.txt
    -rw-r--r--. 1 root root 12 Jul 30 00:07 demo2.txt
    -rw-rw-rw-. 1 root root  0 Jul 22 22:44 demo3.txt    ## 权限修改成功
    [root@localhost test]# 
    
    
    • 3、执行 rsync -a -b 备份 SRC 的 demo3.txt 到 backups_ab。由于,源文件和目标目录文件大小、时间一致,所以不会产生新的备份文件,没有带 ~ 符号的 demo3.txt。但,会更新权限。
    [root@localhost test]# rsync -a -b SRC/demo3.txt backups_ab/
    [root@localhost test]# 
    [root@localhost test]# tree
    .
    ├── backups_ab
    │   ├── demo1.txt
    │   ├── demo1.txt~
    │   ├── demo2.txt
    │   ├── demo2.txt~
    │   └── demo3.txt
    └── SRC
        ├── demo1.txt
        ├── demo2.txt
        └── demo3.txt
    
    2 directories, 8 files
    [root@localhost test]# ll backups_ab/
    total 16
    -rw-r--r--. 1 root root 12 Jul 30 00:03 demo1.txt
    -rw-r--r--. 1 root root 0 Jul 22 22:44 demo1.txt~  
    -rw-r--r--. 1 root root 12 Jul 30 00:07 demo2.txt
    -rw-r--r--. 1 root root 0 Jul 22 22:44 demo2.txt~
    -rw-rw-rw-. 1 root root  0 Jul 22 22:44 demo3.txt    ## backups_ab目录的demo3.txt 权限已更新为 -rw-rw-rw-
    [root@localhost test]# 
    
    

    相关文章

      网友评论

        本文标题:4-10.3 Linux 中的文件同步传输 --- rsync

        本文链接:https://www.haomeiwen.com/subject/panimltx.html