当前位置: 首页 > 编程日记 > 正文

常用rsync命令操作梳理

作为一个运维工程师,经常可能会面对几十台、几百台甚至上千台服务器,除了批量操作外,环境同步、数据同步也是必不可少的技能。
说到“同步”,不得不提的利器就是rsync。rsync不但可以在本机进行文件同步,也可以作为远程同步工具。
前面提到了rsync+inotify实时同步方案部署,下面结合本人近几年运维工作中对这一工具使用的经验,简单在此梳理下:

rsync同步命令中常用的几个参数说明:

-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD 
-v, --verbose 详细模式输出 
-p, --perms 保持文件权限 
-g, --group 保持文件属组信息
-o, --owner 保持文件属主信息 
-r, --recursive 对子目录以递归模式处理。同步目录的时候要加上这个参数
-l, --links 保留软链结,加上这个参数,同步过来的文件会保持之前的软链接属性不变
-H, --hard-links 保留硬链结 
-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步 
-z, --compress 对备份的文件在传输时进行压缩处理 
--stats 给出某些文件的传输状态 
--progress 打印同步的过程 
--timeout=TIME 同步过程中,IP超时时间,单位为秒 
--delete 删除那些目标目录中有而源目录中没有的多余文件。这个是rsync做增量方式的全备份的最佳选择方案!!!!!!
--delete-before 接受者在输出之前进行删除操作。即先将目标目录中文件全部删除,再将源目录文件拷贝过去。这是rsync保持目标目录跟源目录一致的方案!!!
--delete-after 在同步操作之后做比较,删除那些目标目录中有而源目录中没有的多余文件 
--delete-excluded 删除目标目录中那些被该选项指定排除的文件
--ignore-errors 即使出现IO错误也进行删除,忽略错误
--exclude 指定同步时需要过滤掉的文件或子目录(即不需要同步过去的),后面直接跟不需要同步的单个文件名或子目录(不需要跟路径) ,过滤多个文件或子目录,就使用多个--exclude 
--exclude-from 指定同步时需要过滤掉的文件或子目录,后面跟文件(比如/root/exclue.txt),然后将不需要同步的文件和子目录放到/root/exclue.txt下。
--version 打印版本信息 
--port=PORT 指定其他的rsync服务端口 
--log-format=formAT 指定日志文件格式 
--password-file=FILE 从FILE中得到密码 
--bwlimit=KBPS 限制I/O带宽,KBytes per second

通常用到的rsync同步命令,如下:
25791是ssh端口
[root@bastion-IDC ~]# rsycn -e "ssh -p 25791" -avpgolr  php5.5.1 192.168.1.22:/Data/app/

==========================rsync常规错误=======================

rsync: failed to set times on "." (in test_upload): Permission denied (13)
rsync: opendir "." (in test_upload) failed: Permission denied (13)原因是由于selinux没有关闭导致的,关闭它即可!
[root@test ~]# getenforce 
Enforcing
[root@test ~]# setenforce 0
[root@test ~]# getenforce 
Permissive
[root@test ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

rsync如何实现同步目标路径下的目录,不同步路径下的文件 ,只想同步目录结构
[root@bastion-IDC ~]# rsync -av --delete -f '+ */' -f '- *' SRC/ DEST/

rsync在远程同步的时候,要求目标目录要和源目录保持同步,目标目录中多余的文件都要删除
这就需要用到了参数--delete,如下:
[root@bastion-IDC ~]# /usr/bin/rsync -vlzrtogp --progress --delete root@192.168.1.120::test --password-file=/root/192.168.1.115 /root/2013/
但是这个--delete加上去就是一个危险的命令,因为它是在同步之前先将目标目录中的文件删除,然后再将源目录中的文件同步过去。
如果目标目录比较大,在删除过程中出现宕机事故就不好了。所以最好还是用--delete-before或--delete-after比较温柔点,靠谱点。

----------------------------------------------------------------------------------------------------------
rsync远程拷贝的时候,过滤某些某个文件或多个文件就用“--exclude 文件名”
要是过滤多个文件或子目录,就把过滤的文件或目录名的关键字放在一个文件里,如下的exclude_file文件
然后使用--exclude-from exclude—-file文件进行过滤

[root@bastion-IDC ~]# cat /root/lxp/exclude_file         //即rsync同步的时候,过滤掉含有下面字样名的文件

.svn
.git
.DS_Store
*.sql
*.bak
.project
main.php
environment.php
main/upload         //这个过滤的是rsync同步目录下的main/upload目录
main/temp/runtime
fangff              //过滤的目录
hqtime              //过滤的目录
apiConfig.php
consoleConfig.php
tpl_c
consoleConfig.php

[root@bastion-IDC ~]# cat rsync_code.sh         //提前做本机与192.168.1.57的ssh无密码登陆的信任关系

#!/bin/sh
EXCLUDE_FILE="/root/lxp/exclude_file"
/usr/bin/rsync -avpgolr -e "ssh -p 25791" --exclude-from ${EXCLUDE_FILE} /var/www/vhosts/www.wangshibo.com/httpdocs/ root@192.168.1.57:/var/www/vhosts/www.wangshibo.com/httpdocs/
/usr/bin/rsync -avpgolr -e "ssh -p 25791" --exclude-from ${EXCLUDE_FILE} /var/www/vhosts/fanghu.xqshijie.com/httpdocs/ root@192.168.1.57:/var/www/vhosts/fanghu.xqshijie.com/httpdocs/
/usr/bin/rsync -avpgolr -e "ssh -p 25791" --exclude-from ${EXCLUDE_FILE} /Data/fanghu_temp/ root@192.168.1.57:/Data/fanghu_temp/

例如:同步本机目录到远程服务器上,过滤到同步目录中的个别文件
下面脚本说明:同步过程中,同步目录中凡是main-local.php和params-local.php文件都不覆盖!

[root@huanqiu ~]# cat /Data/webroot_svncode/exclude
main-local.php
params-local.php[root@huanqiu ~]# vim rsync.sh
#!/bin/bash
EXCLUDE_FILE="/Data/webroot_svncode/exclude"
SOURCE_DIR=/srv/apache-tomcat-7.0.67/webapps/jenkins/jobs/apihuanqiu}/workspace/
DEST_DIR=/var/www/vhosts/apihuanqiu/
REMOTE_IP=192.168.19.19/usr/bin/rsync -e "ssh -p22" -avpgolr --exclude-from ${EXCLUDE_FILE} $SOURCE_DIR $REMOTE_IP:$DEST_DIR
/usr/bin/ssh -p22 $REMOTE_IP "chmod a+w -R /var/www/vhosts/apihuanqiu/frontend/web/assets/"
/usr/bin/ssh -p22 $REMOTE_IP "chmod a+w -R /var/www/vhosts/apihuanqiu/frontend/runtime/"

1)排除单独的文件夹和文件

比如要排除sources文件夹,我们可以添加 '--exclude' 选项:
--exclude 'sources'
命令是这样的:
[root@bastion-IDC ~]# rsync -e 'ssh -p 30000' -avl --delete --stats --progress --exclude 'sources' demo@192.168.1.120:/home/demo /backup/比如要排除 "public_html" 文件夹下的 "database.txt" 文件:
--exclude 'public_html/database.txt'
命令是这样的:
[root@bastion-IDC ~]# rsync -e 'ssh -p 30000' -avl --delete --stats --progress --exclude 'sources' --exclude 'public_html/database.txt' demo@192.168.1.120:/home/demo /backup/比如排除掉同步目录中的类似*-prod.properties文件(比如global-prod.properties等)
命令是这样的:
[root@bastion-IDC ~]# /usr/bin/rsync -av -e "/usr/bin/ssh -p25791" --rsync-path="/usr/bin/rsync" --exclude=*-prod.properties --progress /opt/tomcat/webapps/awaken_beta/ 192.168.1.20:/Data/app/apache-tomcat-8/awakenweb/ROOT/

2)使用 '--exclude-from' 排除多个文件夹和文件

建立文件:
[root@bastion-IDC ~]# touch /home/backup/exclude.txt在里面定义要排除的文件夹和文件
[root@bastion-IDC ~]# vim /home/backup/exclude.txt
sources
public_html/database.*
downloads/test/*使用指令:
--exclude-from '/home/backup/exclude.txt'最后的命令如下:
[root@bastion-IDC ~]# rsync -e 'ssh -p 30000' -avl --delete --stats --progress --exclude-from '/home/backup/exclude.txt' demo@192.168.1.120:/home/demo /backup/

-------------------------------------------------用rsync命令和scp命令实现本机带进度条提示拷贝-----------------------------------

rsync和scp拷贝时显示进度条提示
1)rsync命令
[root@dbtest bak]# rsync -e "ssh -p22222" -avpgolr --progress db170630.tar.gz 192.168.1.198:/data/upload/
root@192.168.1.198's password:
sending incremental file list
db170630.tar.gz
702087168 4% 5.60MB/s 0:41:47

--progress 可以实现本机带进度条提示拷贝,可以实现不同机器带进度条提示拷贝,可以拷贝多个文件

2)scp命令
[root@dbtest bak]# scp -v /mnt/full20100526.tar.gz /usr/local/src/
[以上命令] 本机拷贝无法显示进度

[root@dbtest bak]# scp -v /mnt/full20100526.tar.gz root@192.168.1.1:/usr/local/src/
[以上命令] 不同机器拷贝可以显示进度条,即使不带"-v"参数也可以显示进度条

[root@dbtest bak]# scp -v /mnt/full20100526.tar.gz root@127.0.0.1:/usr/local/src/
[以上命令] 变相实现本机带进度条提示拷贝,可以不带"-v"参数

3) cp命令
暂时没有找到带进度条提示拷贝

----------------------------------------------------- rsync同步时候的限流操作----------------------------------------------------
# rsync -auvz --progress --delete --bwlimit=1000 远程文件 本地文件 //限制为1000kBytes/s
# rsync -auvz --progress --delete --bwlimit=2048 远程文件 本地文件 //限制为2M/s

--------scp同步时的限流(-l参数)--------
# scp -l 1024 file root@192.168.1.100 //限制为1M Bytes/s

转载于:https://www.cnblogs.com/kevingrace/p/5689491.html

相关文章:

Word英文字符间距太大 中英文输入切换都不行

在Word中输入文字时会遇到这样的情况,就是说中文字符的间距是正常的,但是英文字符间的间距却不正常,总是太宽了,如图: 。 而且这时切换中英文输入都没用,Word的字体设置也正常。后来上网查了下,…

Hadoop集群搭建(六:HBase的安装配置)

实验 目的 要求 目的: 1、HBase的高可用完全分布模式的安装和验证 要求: 完成HBase的高可用完全分布模式的安装;HBase的相关服务进程能够正常的启动;HBase控制台能够正常使用;表创建、数据查询等数据库操作能够正常…

架构师的第一阶段:准备做(Pre-Architecture)

上节说到,做任何事情都可以分为三个阶段:准备做、做、做好。本文,就将进入第一个阶段,准备做阶段。 Pre-Architecture:准备架构 准备架构阶段,最最重要的是弄清楚要做什么东西,即掌握用户需求。…

iOS动画系列之八:使用CAShapeLayer绘画动态流量图

这篇文章通过使用CAShapeLayer和UIBezierPath来画出一个动态显示剩余流量的小动画。 最终实现的效果如下: Paste_Image.png 动态效果图: shapeLayerAni.gif 1. CAShapeLayer 实际中,能够用CALayer完成的任务是比较少的,如果使用这…

hiho_1139_二分+bfs搜索

题目 给定N个点和M条边,从点1出发,到达点T。寻找路径上边的个数小于等于K的路径,求出所有满足条件的路径中最长边长度的最小值。 题目链接:二分 最小化最大值,考虑采用二分搜索。对所有的边长进行排序,二分&#x…

Hadoop集群搭建(七:MySQL的安装配置)

实验 目的 要求 目的: 1、掌握MySQL在集群平台中的安装 要求: 完成MySQL的集群版的安装;MySQL集群的相关服务进程能够正常启动;MySQL集群的SQL服务能够作为系统服务开机自动启动;MySQL客户端能够远程连接MySQL集群的…

如何在VMware虚拟机上安装Linux操作系统(Ubuntu)

作为初学者想变为计算机大牛非一朝一夕,但掌握基本的计算机操作和常识却也不是多么难的事情。所以作为一名工科男,为了把握住接近女神的机会,也为了避免当白痴,学会装系统吧!of course为避免把自己的电脑作为牺牲品&am…

cf #363 b

B. One Bombtime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou are given a description of a depot. It is a rectangular checkered field of n  m size. Each cell in a field can be empty (".") or…

swift-video-generator:图片加音频生成视频及多视频合并库及演示

阅读 80收藏 92017-11-07原文链接:github.com腾讯云学生优惠套餐,985高校学习云计算的主力机型,2G2核,1M带宽系统盘(Linux 50G/Windows 50G)免费赠送50GB对象存储空间还有.cn域名一年使用权!不要…

Hadoop集群搭建(八:Hive的安装配置)

实验 目的 要求 目的: (1)掌握数据仓库工具Hive的安装和配置; 要求: 完成Hive工具的安装和配置;Hive工具能够正常启动运行;Hive控制台命令能够正常使用;能够正常操作数据库、表、…

iOS 富文本编辑工厂, 让书写更简便.

由于最近常用富文本, 在编辑一个富文本时需要操作很多的属性, 书写起来很不方便. 所以我将这些相关属性整理并使用链式方式将它简化了一下. 效果请看下面Demo. 项目工程 实现很简单, 我嘴太笨, 这里就不介绍了, 如有兴趣直接看源码吧. 同时可以通过cocoapods来使用它. pod SJAt…

ORACLE 数据的逻辑组成

数据块(block)Oracle数据块(Data Block)是一组连续的操作系统块。分配数据库块大小是在Oracle数据库创建时设置的,数据块是Oracle读写的基本单位。数据块的大小一般是操作系统块大小的整数倍,这样可以避免不…

Java 的zip压缩和解压缩

Java 的zip压缩和解压缩好久没有来这写东西了,今天中秋节,有个东西想拿出来分享,一来是工作中遇到的问题,一来是和csdn问候一下,下面就分享一个Java中的zip压缩技术,代码实现比较简单,代码如下:…

Hadoop集群搭建(九:各服务的启动)

1、查看Zookeeper服务状态,若集群中只有一个"leader"节点, 其余的均为"follower"节点,则集群的工作状态正常 $zkServer.sh status 2、在集群中所有主机上使用此命令,启动Zookeeper服务 $zkServer.sh start…

iOS 后台下载及管理库

说起下载第一个想起的就是ASI。一年前接手的新项目是核心功能是视频相关业务,在修改和解决视频下载相关的问题的时候让我体会到了ASI的下载的强大。后来新需求需要视频后台下载,使用NSURLSession的时候,更加深刻的体会到了ASI的强大好用。后来…

(转) 使用Speech SDK 5.1文字转音频

下载地址: http://www.microsoft.com/en-us/download/details.aspx?id10121 SeppchSDK51.exe 语音合成引擎 SpeechSDK51LangPack.exe 支持日语和简体中文需要这个支持。 SpeechSDK51MSM.exe 如果要将引擎作为产品的一部分发布需要这个。 Sp5TTintXP.exe XP下Mike和…

IE8下面的line-height的bug

当line-height小于正常值时,超出的部分将被剪裁掉转载于:https://www.cnblogs.com/jsingleegg/p/js_ie8.html

Hadoop集群的基本操作(一:HDFS操作及MapReduce程序练习)

实验 目的 要求 目的: 理解HDFS在Hadoop体系结构中的角色;熟练使用HDFS操作常用的Shell命令;了解Hadoop集群MapReduce程序的简单使用;(上传WordCount的jar执行程序;使用WordCount进行MapReduce计算&#x…

iOS实现动态区域裁剪图片

阅读 249收藏 322017-11-29原文链接:github.com想自己动手搭建一个 Discuz 论坛?试试腾讯云上实验室吧https://cloud.tencent.com/developer/labs 裁剪图片功能在很多上传图片的场景里都需要用到,一方面应用服务器可能对图片的尺寸大小有限制…

每天CookBook之JavaScript-062

鼠标进入事件鼠标离开事件<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>062</title> </head> <body> <div><img src"001" alt"001"><img src…

spring + Quartz定时任务配置

<bean id"exportBatchFileTask" class"com.ydcn.pts.task.ExportBatchFileTask"></bean><bean id"readBatchFileTask" class"com.ydcn.pts.task.ReadBatchFileResultTask"></bean><!-- 生成开卡档&#xf…

Hadoop集群的基本操作(二:HBase的基本操作)

实验 目的 要求 目的&#xff1a; 1、HBase的基本应用 要求&#xff1a; 完成HBase的高可用完全分布模式的安装&#xff1b;HBase的相关服务进程能够正常的启动&#xff1b;HBase控制台能够正常使用&#xff1b;表创建、数据查询等数据库操作能够正常进行&#xff1b; …

Abaqus用户子程序umat的学习

Abaqus用户子程序umat的学习 说明&#xff1a;在文件中&#xff0c;&#xff01;后面的内容为注释内容。本文为学习心得&#xff0c;很多注释是自己摸索得到。如有不正确的地方&#xff0c;敬请指正。 ! —————————————————————————— ! 1、为何需要…

PHP:isset()-检测变量是否被设置

isset()-检测变量是否被设置 bool isset(mixed $var [, mixed $...])&#xff0c;检查变量是否被设置&#xff0c;并且不是NULL。var,要检测的变量&#xff0c;...其他变量&#xff0c;允许有多个变量。 返回值&#xff1a;如果var存在并且不是NULL&#xff0c;则返回TRUE&…

Android通过ShareSDK实现新浪微博分享

ShareSDK社会化分享的官方说明&#xff1a;是中国最大的APP内分享服务提供商&#xff0c;ShareSDK社会化分享&#xff0c;全面支持微信&#xff0c;微博&#xff0c;QQ空间&#xff0c;来往&#xff0c;易信&#xff0c;Facebook等国内外40个平台。 ShareSDK官方网站&#xff…

Hadoop集群的基本操作(三:HBase的基本操作)

实验 目的 要求 目的&#xff1a; MySQL数据库的基本命令&#xff1b;MySQL数据库中使用SQL语句&#xff1b;MySQL数据库中数据库&#xff0c;表&#xff0c;数据的操作&#xff1b;要求&#xff1a; 完成MySQL的集群版的安装&#xff1b;MySQL集群的相关服务进程能够正常启…

iOS通过Plist保存离线调试日志

最近需要测试APP在iPhone没连接USB情况下定位时间间隔的情况&#xff0c;固把nslog的日志信息保存成本地Plist文件&#xff0c;以便测试结束后查阅运行时的日志。 一、新建一个保存日志的方法&#xff0c;参数为每次定位成功的时间&#xff08;作为key&#xff09;&#xff0c…

关于变量名前面加m的问题

为什么很多人写代码会在变量名前面加一个小写的m&#xff1f; 上大学那会儿就对这个问题感到很好奇。于是网上到处搜&#xff0c;有人说是member的意思。于是后来一直就这么认为。 最近在读Android源码&#xff0c;发现很多系统变量命名时都加了m&#xff0c;而有的变量又没有加…

谷歌推出情境感知API

在 Google I/O 2016 大会上&#xff0c;我们宣布推出新的 Google Awareness API&#xff0c;让您的应用可以利用快照和围栏智能应对用户情境&#xff0c;并且仅需占用极少量的系统资源。 所有开发者均可以通过 Google Play 服务获取 Google Awareness API。 利用 7 种不同类型的…

Hadoop集群的基本操作(四:Hive的基本操作)

实验 目的 要求 目的&#xff1a; &#xff08;1&#xff09;掌握数据仓库工具Hive的使用&#xff1b; 要求&#xff1a; 掌握数据仓库Hive的使用&#xff1b;能够正常操作数据库、表、数据&#xff1b; 实 验 环 境 五台独立PC式虚…