• Linux之远程文件传输


    1)scp

    scp命令用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读read only system时,用scp可以帮你把文件移出来。另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。

      

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

      示例:

    从远程复制到本地的scp命令与上面的命令雷同,只要将从本地复制到远程的命令后面2个参数互换顺序就行了。
    
    
    
    从远处复制文件到本地目录
    scp root@10.10.10.10:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/
    从10.10.10.10机器上的/opt/soft/的目录中下载nginx-0.5.38.tar.gz 文件到本地/opt/soft/目录中。
    
    从远处复制到本地
    scp -r root@10.10.10.10:/opt/soft/mongodb /opt/soft/
    从10.10.10.10机器上的/opt/soft/中下载mongodb目录到本地的/opt/soft/目录来。
    
    
    scp -C -P 8932 /usr/local/openresty/nginx/logs/access.log.gz jiaoni@172.16.114.47:/home/jiaoni/lanlang

    2)ssh登陆

    远程登录服务器

    ssh -l root -p 188 192.168.1.2
    ssh -l 用户名 -p 端口号 主机名或IP
    输入密码即可

    3)rsync

    速度:第一次的rsync同步源的整个内容目录到目标位置。之后,rsync只传递改变的块或字节到目标位置,使传输非常快。
    安全:rsync在传输中允许使用ssh协议加密数据。
    更少的带宽:rsync分别在发送和接收端对数据进行压缩和解压缩。所以在使用rsync传输数据时使用的带宽总是比使用其他文件传输协议来的少。
    特权:不需要特殊权限来安装和执行rsync

    $ rsync options source destination
    source和destination可以是本地或远程。在远程的情况下,需要指定登录名、远程服务器的名称和位置。

    1. 在本地服务器上同步两个目录

    用rsync – zvr在本地服务器上同步两个目录

    $ rsync -zvr /var/opt/installation/inventory/ /root/temp
    building file list ... done
    sva.xml
    svB.xml
    .
    sent 26385 bytes  received 1098 bytes  54966.00 bytes/sec
    total size is 44867  speedup is 1.63

    在上面rsync例子中:
    • –z:允许压缩
    • –v:冗长
    • –r:递归
    注:Rsync不会同步源文件或目录的时间戳

    $ ls -l /var/opt/installation/inventory/sva.xml /root/temp/sva.xml
    -r--r--r-- 1 bin  bin  949 Jun 18  2009 /var/opt/installation/inventory/sva.xml
    -r--r--r-- 1 root bin  949 Sep  2  2009 /root/temp/sva.xml

    2. 用rsync –a. 同步时间戳

    rsync的-a选项是archive的意思,加了之后有以下作用:
    • 递归模式
    • 同步软链接
    • 同步权限
    • 同步时间戳
    • 同步属主和属组
    现在,我们执行与例1一样的命令,不同的是使用-a选项。

    $ rsync -azv /var/opt/installation/inventory/ /root/temp/
    building file list ... done
    ./
    sva.xml
    svB.xml
    .
    sent 26499 bytes  received 1104 bytes  55206.00 bytes/sec
    total size is 44867  speedup is 1.63

    我们可以看到,rsync将源目录下文件的时间戳也同步过来了。

    $ ls -l /var/opt/installation/inventory/sva.xml /root/temp/sva.xml
    -r--r--r-- 1 root  bin  949 Jun 18  2009 /var/opt/installation/inventory/sva.xml
    -r--r--r-- 1 root  bin  949 Jun 18  2009 /root/temp/sva.xml

    3. 只同步一个文件

    指定文件名称,只同步一个文件

    $ rsync -v /var/lib/rpm/Pubkeys /root/temp/
    Pubkeys
    
    sent 42 bytes  received 12380 bytes  3549.14 bytes/sec
    total size is 12288  speedup is 0.99

    4. 将本地文件同步到远程服务器

    当同步到远程服务器时,我们需要指定用户名、远程服务器的IP地址和目标路径。格式为:username@remote_server_ip:path

    $ rsync -avz /root/temp/ linuxprobe@192.168.200.10:/home/linuxprobe/temp/
    Password:
    building file list ... done
    ./
    rpm/
    rpm/Basenames
    rpm/Conflictname
    
    sent 15810261 bytes  received 412 bytes  2432411.23 bytes/sec
    total size is 45305958  speedup is 2.87

    5. 将远程文件同步到本地服务器

    $ rsync -avz linuxprobe@192.168.200.10:/var/lib/rpm /root/temp
    Password:
    receiving file list ... done
    rpm/
    rpm/Basenames
    .
    sent 406 bytes  received 15810230 bytes  2432405.54 bytes/sec
    total size is 45305958  speedup is 2.87

    6. 指定使用某一shell同步

    远程同步时,Rsync可以指定使用某一shell进行安全传输。如:使用rsync –e ssh选择ssh进行安全连接。

    $ rsync -avz -e ssh linuxprobe@192.168.200.10:/var/lib/rpm /root/temp
    Password:
    receiving file list ... done
    rpm/
    rpm/Basenames
    
    sent 406 bytes  received 15810230 bytes  2432405.54 bytes/sec
    total size is 45305958  speedup is 2.87

    7. 不覆盖目标位置已改变的文件

    如果目标位置的文件已被修改,而我们不希望旧文件覆盖它时,可以使用-u选项。下面例子中,目标位置的文件Basenames已经被修改,使用-u 选项是它不被旧文件覆盖。

    $ ls -l /root/temp/Basenames
    total 39088
    -rwxr-xr-x 1 root root        4096 Sep  2 11:35 Basenames
    
    $ rsync -avzu linuxprobe@192.168.200.10:/var/lib/rpm /root/temp
    Password:
    receiving file list ... done
    rpm/
    
    sent 122 bytes  received 505 bytes  114.00 bytes/sec
    total size is 45305958  speedup is 72258.31
    
    $ ls -lrt
    total 39088
    -rwxr-xr-x 1 root root        4096 Sep  2 11:35 Basenames

    8. 只同步目录树结构(不包括文件)

    使用rsync - d选项只将目录树从源位置同步至目标位置。下面的示例中,以递归方式只同步目录树而不同步目录中的文件。

    $ rsync -v -d linuxprobe@192.168.200.10:/var/lib/ .
    Password:
    receiving file list ... done
    logrotate.status
    CAM/
    YaST2/
    acpi/
    
    sent 240 bytes  received 1830 bytes  318.46 bytes/sec
    total size is 956  speedup is 0.46

    9. 查看rsync进度

    使用rsync –progress选项可以查看rsync进度,如多少文件已经被拷贝,完成率是多少等

    $ rsync -avz --progress linuxprobe@192.168.200.10:/var/lib/rpm/ /root/temp/
    Password:
    receiving file list ...
    19 files to consider
    ./
    Basenames
         5357568 100%   14.98MB/s    0:00:00 (xfer#1, to-check=17/19)
    Conflictname
           12288 100%   35.09kB/s    0:00:00 (xfer#2, to-check=16/19)
    .
    .
    .
    sent 406 bytes  received 15810211 bytes  2108082.27 bytes/sec
    total size is 45305958  speedup is 2.87

    10. 删除目标位置创建的文件

    若我们希望rsync时删除在源位置不存在而在目标位置存在的文件,可以使用-delete选项。
    此例中,我们在目标位置创建了一个新文件名为new-file.txt.,在同步过程中,-delete选项删除了new-file.txt文件

    # Source and target are in sync. Now creating new file at the target.
    $ > new-file.txt
    
    $ rsync -avz --delete linuxprobe@192.168.200.10:/var/lib/rpm/ .
    Password:
    receiving file list ... done
    deleting new-file.txt
    ./
    
    sent 26 bytes  received 390 bytes  48.94 bytes/sec
    total size is 45305958  speedup is 108908.55

    11. 在目标位置不创建新文件

    使用-existing选项使得在同步时只同步目标位置存在的文件,而不创建新文件。

    #在源位置创建新文件new-file.txt
    [/var/lib/rpm ]$ > new-file.txt
    #同步目录
    $ rsync -avz --existing root@192.168.1.2:/var/lib/rpm/ .
    root@192.168.1.2's password:
    receiving file list ... done
    ./
    
    sent 26 bytes  received 419 bytes  46.84 bytes/sec
    total size is 88551424  speedup is 198991.96

    12.查看源和目标的不同文件或目录

    源位置:

    $ ls -l /var/lib/rpm
    -rw-r--r-- 1 root root  5357568 2010-06-24 08:57 Basenames
    -rw-r--r-- 1 root root    12288 2008-05-28 22:03 Conflictname
    -rw-r--r-- 1 root root  1179648 2010-06-24 08:57 Dirnames
    

    目标位置:

    $ ls -l /root/temp
    -rw-r--r-- 1 root root    12288 May 28  2008 Conflictname
    -rw-r--r-- 1 bin  bin   1179648 Jun 24 05:27 Dirnames
    -rw-r--r-- 1 root root        0 Sep  3 06:39 Basenames
    

    源和目标之间有两个不同之处:1. 文件Dirnames属主和属组不同 2. 文件Basenames的大小不同
    使用-i选项来显示不同之处,如下所示

    $ rsync -avzi linuxprobe@192.168.200.10:/var/lib/rpm/ /root/temp/
    Password:
    receiving file list ... done
    >f.st.... Basenames
    .f....og. Dirnames
    
    sent 48 bytes  received 2182544 bytes  291012.27 bytes/sec
    total size is 45305958  speedup is 20.76
    In the output it displays some 9 letters in front of the file name or directory name indicating the changes.

    可以看到,在文件名或目录名前有9个字符来代表不同之处。此例中,Basenames和Dirnames前的字符代表含义如下:

    > 代表文件已被传输到本地主机。
    f:代表这是个文件
    s:代表文件大小发生变化
    t:代表时间戳发生变化
    o:属主发生变化
    g:属组发生变化
    

    13. 在传输时指定包括或排除某些文件
    只传输’P’开头的文件或目录(使用rsync include),不传输其他任何文件(使用rsync exclude)

    $ rsync -avz --include 'P*' --exclude '*' linuxprobe@192.168.200.10:/var/lib/rpm/ /root/temp/
    Password:
    receiving file list ... done
    ./
    Packages
    Providename
    Provideversion
    Pubkeys
    
    sent 129 bytes  received 10286798 bytes  2285983.78 bytes/sec
    total size is 32768000  speedup is 3.19

    14. 不传输大文件

    使用rsync –max-size选项后,rsync将不传输大于指定大小的文件

    $ rsync -avz --max-size='100K' linuxprobe@192.168.200.10:/var/lib/rpm/ /root/temp/
    Password:
    receiving file list ... done
    ./
    Conflictname
    Group
    Installtid
    Name
    Sha1header
    Sigmd5
    Triggername
    
    sent 252 bytes  received 123081 bytes  18974.31 bytes/sec
    total size is 45305958  speedup is 367.35

    15. 传输整个文件

    rsync的主要特征之一是它只传输改变的块到目标位置,而不是传输整个文件。如果网络带宽对你不是问题(CPU有),您可以使用-w选项来传输整个文件。它会加速rsync过程,因为它不用在源和目标位置执行校验和。

    #  rsync -avzW  linuxprobe@192.168.200.10:/var/lib/rpm/ /root/temp
    Password:
    receiving file list ... done
    ./
    Basenames
    Conflictname
    Dirnames
    Filemd5s
    Group
    Installtid
    Name
    
    sent 406 bytes  received 15810211 bytes  2874657.64 bytes/sec
    total size is 45305958  speedup is 2.87


    总结: 使用远程文件传输
    rsync -avzW --progress 源目录  目标目录
    参数: a保持属性
            v. 长格式
            z 压缩
    
        --progress. 显示进度












  • 相关阅读:
    中国象棋评估函数建模
    C语言中指针变量传参
    STM32外部中断
    C语言中的注释
    STM32学习网址
    C语言中的布尔值
    更改KEIL背景配色
    Modbus通讯协议
    DUP
    算法的时间复杂度
  • 原文地址:https://www.cnblogs.com/xingxia/p/linux_file_transfer.html
Copyright © 2020-2023  润新知