首页编程rsync?rsync命令技巧

rsync?rsync命令技巧

编程之家2023-11-0670次浏览

各位朋友,你是否对rsync和rsync命令技巧的相关问题感到好奇?别担心,我将为你揭示这些问题的答案,帮助你更好地理解和应用这些知识。让我们一起探索吧!

rsync?rsync命令技巧

linux上的rsync命令详解

rsync就是远程同步的意思remote sync.

rsync被用在UNIX/ Linux执行备份操作操作.

rsync工具包被用来从一个位置到另一个位置高效地同步文件和文件夹. rsync可以实现在同一台机器的不同文件直接备份,也可以跨服务器备份.

rsync语法如下

rsync?rsync命令技巧

从语法结构我们可以看出,源和目标即可以在本地也可以在远端.如果是远端的话,需要指明登录用户名,远端服务器名,和远端文件或目录.同时源可以是多个,目标位置只能是一个.

说明:

-z:--compress使用压缩机制

rsync?rsync命令技巧

-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的信息别忘了在本站进行查找哦。

百度站长(百度站长平台是做什么用的)flash源代码?怎么找FLASH的源代码