linux上的rsync命令详解

linux上的rsync命令详解,第1张

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命令实例

你好 rsh命令是“remote shell”(远程 shell)的缩写。 该命令在指定的远程主机上启动一个shell并执行用户在rsh命令行中指定的命令。如果用户没有给出要执行的命令,rsh就用rlogin命令使用户登录到远程机上。

rsh命令的一般格式是:

rsh [-Kdnx] [-k realm] [-l username] host [command]

一般常用的格式是:

rsh host [command ]

command可以是从shell提示符下键人的任何Linux命令。

rsh命令中各选项的含义如下:

-K 关闭所有的Kerbero确认。该选项只在与使用Kerbero确认的主机连接时才使用。

-d 打开与远程主机进行通信的TCP sockets的socket调试。要了解更多的信息,请查阅setsockopt的联机帮助。

-k 请求rsh获得在指定区域内的远程主机的Kerberos许可,而不是获得由krb_relmofhost(3)确定的远程主机区域内的远程主机的Kerberos许可。

-l 缺省情况下,远程用户名与本地用户名相同。本选项允许指定远程用户名,如果指定了远程用户名,则使用Kerberos 确认,与在rlogin命令中一样。

-n 重定向来自特殊设备/dev/null的输入。

-x 为传送的所有数据打开DES加密。这会影响响应时间和CPU利用率,但是可以提高安全性。 Linux把标准输入放入rsh命令中,并把它拷贝到要远程执行的命令的标准输入中。它把远程命令的标准输出拷贝到rsh的标准输出中。它还把远程标准错误拷贝到本地标准错误文件中。任何退出、中止和中断信号都被送到远程命令中。当远程命令终止了,rsh也就终止了。

希望答案可以帮助你,谢谢。

如何配置rsh服务

redhat linux下配置rsh和rcp- -

1:安装前准备:

机器A:192.168.0.4 (安装rsh server)

机器B:192.168.0.10 (rsh client 调用执行192.168.0.4的命令)

2: 首先确认机器A是否安装rsh包:

[root@mg04 root]# rpm -aq |grep rsh

rsh-0.17-14

rsh-server-0.17-14

如果没有安装以上两个包,请找到相关软件安装(如果是LINUX,可以从安装碟中找到)

安装包:

rpm -ivh rsh-0.17-5 (linux *** 作系统)

rpm -ivh rsh-server-0.17-5 (linux *** 作系统)

3:确认是否启动rsh 服务:

方法一:

使用命令setup,查看service是否将[*] rsh 加上*,如果加上*表示可以启动。

/etc/rc.d/init.d/xinetd restart 或者 service xinetd restart

方法二:

rsh 属于xinetd服务,可以直接修改/etc/xinetd.d/rsh脚本文件。

service shell

{

disable = no

socket_type = stream

wait = no

user = root

log_on_success += USERID

log_on_failure += USERID

server = /usr/sbin/in.rshd

}

当然方法很多,目的就是使用rsh服务能启动。

/etc/rc.d/init.d/xinetd restart

检查是否启动: rsh server 监听和TCP 是514。

[root@mg04 root]# netstat -an |grep 514

tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN

如果能看到514在监听说明服务器已经启动。

4:配置rsh server:

修改/etc/securetty文件: echo rsh >>/etc/securetty

如果打算用root作为rsh用户的话:

先用root登录到机器A中进行以下 *** 作:

cd ~/

echo "192.168.0.10 root" >>.rhosts 允许192.168.0.10 以root访问

echo "192.168.0.4 root" >>.rhosts

重启rsh server.

5:测试和注意的问题:

登录到b机器进行测试: rsh -l root 192.168.0.204 ps -ef

看是否能看到结果。如果看到

[root@mg04 etc]# rsh -l root 192.168.0.204 ps -ef

Permission denied.

这是由于权权限问题,一般是由于 .rhosts没有配置正确。.rhosts一般位于

rsh server服务器相对应账号目录下比如root(与.bash_profile在同一目录)

rsh在执行命令有时会找不到。rsh 在调用命令是最好使用绝对路径。默认搜索路径为:

[root@mg04 etc]# rsh -l root 192.168.0.4 env |grep PATH

PATH=/usr/bin:/bin

rh8.0下rcp的用法设置

只对root用户生效

1、在双方root用户根目录下建立.rhosts文件,并将双方的hostname加进去.在此之前应在双方的/etc/hosts文件中加入对方的IP和hostname

2、把rsh服务启动起来,redhat默认是不启动的。方法:用执行ntsysv命令,在rsh选项前用空格键选中,确定退出。 然后执行:service xinetd restart即可。

3、到/etc/pam.d/目录下,把rsh文件中的auth required /lib/security/pam_securetty.so一行用“#


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7543926.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-06
下一篇 2023-04-06

发表评论

登录后才能评论

评论列表(0条)

保存