rsync?rsync命令技巧
各位朋友,你是否对rsync和rsync命令技巧的相关问题感到好奇?别担心,我将为你揭示这些问题的答案,帮助你更好地理解和应用这些知识。让我们一起探索吧!
linux上的rsync命令详解
rsync就是远程同步的意思remote sync.
rsync被用在UNIX/ Linux执行备份操作操作.
rsync工具包被用来从一个位置到另一个位置高效地同步文件和文件夹. rsync可以实现在同一台机器的不同文件直接备份,也可以跨服务器备份.
rsync语法如下
从语法结构我们可以看出,源和目标即可以在本地也可以在远端.如果是远端的话,需要指明登录用户名,远端服务器名,和远端文件或目录.同时源可以是多个,目标位置只能是一个.
说明:
-z:--compress使用压缩机制
-v:--verbose打印详细信息
-r:--recursive以递归模式同步子目录
注意:同步完成后,我们会发现文件的时间戳timestamps发生了改变.
有时我们希望拷贝或同步时,时间戳不要发生变化,源文件是什么时间戳,目标文件就是什么时间戳,这时我们需要使用-a--archive归档模式选项.-a选项相当于7个选项的组合-rlptgoD
-r,--recursive:递归模式Recursive mode
-l,--links:将符号链接当作符号链接文件拷贝,不拷贝符合链接指向的文件内容.
-p,--perms:保留文件权限
-t,--times:保留修改时间戳
-g,--group:保留用户组信息
-o,--owner:保留用户信息(需要超级用户权限)
-D,相当于--devices--specials的组合,保留设备文件,保留特殊文件.
同步完成后,我们再来看文件属性,时间戳信息得到了保留,不仅如此文件的所有者和所在组也得到保留.
说明: Pubkeys是一个普通文件
使用rsync,也可以从本地拷贝多个文件或目录到远端,以下即为示例:
注意:
与本地文件拷贝不同的地方在于,当拷贝文件到远程服务器时,我们指定远程主机上的用户名,服务器地址,路径等信息,类是于使用scp命令拷贝,如果没有设置ssh免密码登录我们还需要提供远程用户的密码等信息.有时你不想频繁输入密码,或者rsync运行在一个无人执守的脚本里面,这是需要预先设置ssh免密登录,或者使用结合expect命令,自动输入密码,但是出于安全考虑,密码需要加密.所以在条件许可的情况下,还是推荐设置ssh免密登录.
与示例 4稍有不同,这时远端目录或文件作为源位置,本地目录或文件作为目标位置,示例如下:
rsync允许指定远程主机上运行shell命令.
这时需要使用-e选项:
-e,--rsh=COMMAND指定远端使用的shell命令
Use rsync-e ssh to specify which remote shell to use. In this case, rsync will use ssh.
在一下特殊的使用场景中,我们不希望拷贝文件时,我们不希望拷贝过程覆盖掉目标位置中用户做出的修改.这时我们需要使用-u选项明确的告诉rsync命令保留用户在目标文件中作出的修改.在下面的例子中,文件Basenames是用户基于上次的拷贝,修改过的文件,当我们使用了-u选项后,该文件中的修改将不会被覆盖掉.
在某些特殊场景中,我们只需要远程服务器上的目录结构,而不希望花大量时间,带宽拷贝文件内容,这时我们可以使用-d,--dirs选项来达到目的.
有时我们希望拷贝文件时,能实时的显示拷贝进度,以及传输速率等信息.尤其是拷贝大文件时,程序不输出信息,用户往往无法区分程序是在响应中,还是已经挂起,在这种情况下如果使用–progress就会非常有帮助.
rsync–progress option displays detailed progress of rsync execution as shown below.
你也可以使用rsnapshot工具(rsnapshot会调用rsync)来备份本地linux服务器,或者备份远程linux服务器.
有时我们希望目标文件和源文件保持严格一致,不要多文件也不要少文件,这是我们可能需要使用-delete选项来达到目的.如果使用-delete选项, rsync将删除目标位置多余的文件或文件夹.此选项还可以结合--delete-excluded选项一起使用,添加一些例外的文件.
上述示例中, new-file.txt是源文件中没有的文件,其将会在拷贝时被删除掉.
在某些特殊的场景下,我们只想更新,目标位置已经存在的文件或目录,而不关心源位置的新文件,这时我们可以使用-existing选项仅仅更新已经存在的文件.
让我们来验证一下这个选项的功能,首先在源端添加一个新文件 new-file.txt.
从上面的例子可以看到,由于加了--existing选项新文件new-file.txt没有被拷贝到目标位置
选项-i,--itemize-changes非常有用,当我们想了解目标位置和源位置的文件差异时.
在源端:
在目标端:
注意:在上面的例子中,源位置和目标位置有两处差异.第一,源文件Basenames的所有者和组与目标文件不同,第一Dirnames文件大小也不一样.
现在让我们来看看rsync会怎样显示这些差异
输出信息只在相应文件前面显示了9个字母来标识改变,这些字母具体是什么意思呢?请参考以下详细说明
rsync可以使用--include和--exclude选项结合通配符进行文件或文件夹过滤
在上面的示例中,仅仅以P打头的文件和文件夹被包含了进来,其他的文件都被过滤在拷贝的过程中被排除在外了.
可以使用--max-size告诉rsync不要拷贝大小超过某个值的文件,可以使用K, M, G指定文件大小, M for megabytes and G for gigabytes.
rsync有个重要优点就是,可以做到在拷贝的过程中,只拷贝发生变化了的部分,而不是发送整个文件.
但是在某些场景中,比如文件较少,文件size较小时,我们的带宽又足够大, cpu资源相对又贫乏,我们不希望它这样做,因为毕竟计算源端和目标端的checksum,并做对比,也需要额外cpu开销.这时我们可以使用-W,--whole-file选项,让rsync不用计算那么多,一上来就直接开始传送文件.我们可以像下面这么做.
15个Rsync命令实例
rsync命令用法
在配置完rsync服务器后,就可以从客户端发出rsync命令来实现各种同步的操
作。rsync有很
多功能选项,下面就对介绍一下常用的选项:
rsync的命令格式可以为:
1. rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
2. rsync [OPTION]... [USER@]HOST:SRC DEST
3. rsync [OPTION]... SRC [SRC]... DEST
4. rsync [OPTION]... [USER@]HOST::SRC [DEST]
5. rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
6. rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
rsync有六种不同的工作模式:
1.拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。
2.使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。
3.使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。
4.从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。
5.从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。
6.列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。
例子:
rsync-ravuqz--delete 10.10.144.112::transcode/org.
其中各个参数含义:
-v,--verbose复杂的输出信息
-q,--quiet安静模式,几乎没有讯息产生,常用在以cron执行rsync
-a,--archive archive mode权限保存模式,相当于-rlptgoD参数。很快速的保存几乎所有的权限设定,除了硬式连接(透过-H设定)。
-r,--recursive复制所有下面的资料(透过)
--delete删除传送断已经不存在,而目的端存在的档案
-u只进行更新,防止本地新文件被重写,注意两者机器的时钟的同时
rsync命令技巧
rsync的常用参数如下:
--partial当有部分文件传输完成,再次传输的时候,会保留已经完成的部分;
--progress打印文件传输的进度
-P该参数与--partial--progress相同,表示打印文件传输进度,而对于重传发生的时候,会自动保留已经成功传输的部分
-v表示同步的时候,显示详细信息
-a等同于-rlptgoD,但是没有-A(保留acl),-H(保留硬链接),-X(保留 extended attributes),因为acl,extended attributes需要目标文件系统支持才可能实现保留
-r:递归到目录中
-l:保留软链接
-p:保留文件的权限
-t:保留文件的修改时间
-g:保留所属组
-o:保留所属者
-D:与--devices--specials相同,表示保留设备文件以及特殊文件;
所以常用的参数为: rsync-avP
我们知道,rsync默认采用873端口来进行通信,当有client连接进来的时候,会创建一个新的socket,从而建立连接;这样可能面临被攻击的风险,比如黑客成功和rsync建立了新的socket连接(873端口).
所以,我们可能面临这样的需求:在server端"不创建新的socket连接",但是依然要实现数据的传输; rsync是支持这种特性的;
没有 socket连接不能实现网络通信,而又不能创建新的socket连接,那么要实现网络通信就只能使用:已经处于listen状态的socket来进行通信;rsync的-e参数就是用来支持这个特定的:
当指定-e参数后,比如 rsync-e"ssh-l ssh_id-p PORT" rsync_user@REMOTE:/PATH/TO/COPY./,这个命令的执行过程如下:
因为-e指定了远程shell,所以 rsync会利用ssh方式连接到目标服务器,ssh的用户是 ssh_id,端口是 PORT,成功连接后,会spawn一个单用户的rsync进程,从而保证了当前的rsync传输数据的安全性,因为没有其他用户可以访问这个进程.如果不指定ssh的用户,那么默认的 rsync_user用户被用作ssh的用户;
rsync的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于rsync命令技巧、rsync的信息别忘了在本站进行查找哦。