samba 中文乱码解决

步骤一:查看系统编码

[root@localhost public]# locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=

步骤二:修改smb.conf配置文件

根据步骤一来判断,
如果locale是zh_CN.UTF-8,做如下设置:

display charset = utf8

unix charset = utf8

dos charset = utf8

如果locale是zh_CN.GBK或zh_CN.gb2312,做如下设置:

display charset = cp936

unix charset = cp936

dos charset = cp936

步骤三:重启samba服务

service samba restart

Ubuntu 18.04安装Samba服务器及配置

局域网下使用samba服务在Linux系统与Windows系统直接共享文件是一项很方便的操作。以Ubuntu为例配置samba服务,Linux服务器的版本是Ubuntu 18.04.1 LTS。

未分类

在终端中执行下列指令:cat /etc/issue查看当前正在运行的 Ubuntu 的版本号。

未分类

以下是我的安装配置步骤:

(1)更新当前软件

sudo apt-get upgrade  
sudo apt-get update  
sudo apt-get dist-upgrade

(2)安装samba服务器

sudo apt-get install samba samba-common

未分类

(3)创建一个用于分享的samba目录

sudo mkdir /home/linuxidc/linuxidc.com/share

(4)给创建的这个目录设置权限

sudo chmod 777 /home/linuxidc/linuxidc.com/share

未分类

(5)添加用户(下面的linuxidc是我的用户名,之后会需要设置samba的密码)

sudo smbpasswd -a linuxidc

未分类

(6)配置samba的配置文件

sudo nano /etc/samba/smb.conf

在配置文件smb.conf的最后添加下面的内容:

[share]
comment = share folder
browseable = yes
path = /home/linuxidc/linuxidc.com/share
create mask = 0700
directory mask = 0700
valid users = linuxidc
force user = linuxidc
force group = linuxidc
public = yes 
available = yes 
writable = yes

未分类

在上面valid users = linuxidc中的linuxidc为我的用户名。

(7)重启samba服务器

sudo service smbd restart

(8)Windows徽标+R 在弹出的运行窗口中输入 \ip即可访问。如\192.168.182.188,输入samba用户名及密码访问即可看到共享,然后就可以在Linux系统与Windows系统直接进行文件共享了

Win+R:在弹出的运行窗口中输入ip(在ubuntu中用ifconfig查看ip)即可访问。

未分类

如果提示:提示你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问。这些策略可帮助保护你的电脑免受网络上不安全设备或恶意设备的威胁。

解决方法见:https://www.linuxidc.com/Linux/2018-11/155467.htm

(9)输入samba用户名及密码访问即可看到共享文件夹shar

未分类

上传创建文件

未分类

(10)选中share,点击右键,选择映射网络驱动器

未分类

未分类

(11)最终结果如下图

未分类

CentOS7 Squid 网络代理安装和配置

爬虫代理的作用

在我们的爬虫系统中,如果在一台服务器上不停的访问通一个目标站点,很有可能因为对方的发爬虫策略而将您的爬虫请求给阻止,导致您无法获取网站的信息。所以我们一般采用一个代理池的方式,不停的切换代理,将爬虫的请求伪装成为不同代理发起的,从而避开这种问题。这里以 centos7 和 squid 为例介绍如何建立一个 http 或者 https 的代理服务器。

软件安装

该软件需要使用 openssl 组件,所以如果没有安装请执行如下命令进行安装

yum install openssl

首先检查是否已经安装了 squid 软件。执行如下的命令

rpm -qa squid

如果显示 package squid is not installed 则表示没有安装,否则会显示具体的安装包信息。如果没有安装,则执行安装命令如下

yum install -y squid*

结束后,再执行检查命令,则显示结果如下

[root@localhost ~]# rpm -qa squid
squid-3.5.20-12.el7.x86_64

软件配置

squid 的配置文件默认是 /etc/squid/squid.conf 文件。默认情况下,squid 只允许有限几个内网地址段来访问。所以我们在的 acl localcal 部分加入如下的内容:

acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src 0.0.0.0/20

上面一行是原来有的,下面一个行是我们先加入的。然后我们改一下默认的端口号

#http_port 3128
http_port 5872

最后修改一下访问日志配置

coredump_dir /var/spool/squid
access_log /var/log/squid/access.log

下面一行设置了访问日志的文件为 /var/log/squid/access.log

启动服务

首先需要在防火墙中开放刚才配置的端口 5872 。执行如下命令

firewall-cmd --zone=public --add-port=5872/tcp --permanent
firewall-cmd --reload

这个命将 5872 端口加入到防火墙的开发端口列表中持久化保存,并且重新载入防火墙策略,让其生效

然后执行命令启动

systemctl start squid

启动后,我们执行命令命令

[root@localhost ~]# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1689/master         
tcp        0      0 0.0.0.0:15678           0.0.0.0:*               LISTEN      20050/sshd          
tcp6       0      0 :::5872                 :::*                    LISTEN      27903/(squid-1)    

可以看到,squid 服务已经在端口 5872 上开始监听了

使用和监控

已 chrome 为例。打开 chrome “设置菜单”,在底部展开“高级”,在底部找到“打开代理设置”菜单,在对话框中点击“局域网设置”按钮,在新出现的界面中输入代理服务器的设置。如下图所示

未分类

确定后,就可以在浏览器中使用代理服务器来访问网络了。为了看到效果,我们在浏览器上访问《不一样的 Java 日期格式化大全》 这篇文章,同时对代理服务器的访问日志进行监控,看到日志输出如下

[root@localhost ~]# tail -f /var/log/squid/access.log 
1543289079.273  16467 192.168.1.60 TCP_TUNNEL/200 3687 CONNECT upload-images.jianshu.io:443 - HIER_DIRECT/61.156.196.84 -
1543289079.274  16715 192.168.1.60 TCP_TUNNEL/200 152 CONNECT upload.jianshu.io:443 - HIER_DIRECT/150.138.176.244 -
1543289079.274  16667 192.168.1.60 TCP_TUNNEL/200 4159 CONNECT upload.jianshu.io:443 - HIER_DIRECT/150.138.176.244 -
1543289079.524      0 192.168.1.60 TCP_DENIED/403 4085 CONNECT events.jianshu.io:4006 - HIER_NONE/- text/html
1543289081.664      0 192.168.1.60 TCP_DENIED/403 4085 CONNECT events.jianshu.io:4006 - HIER_NONE/- text/html
1543289082.433      0 192.168.1.60 TCP_DENIED/403 4085 CONNECT events.jianshu.io:4006 - HIER_NONE/- text/html
1543289097.966  35623 192.168.1.60 TCP_TUNNEL/200 55584 CONNECT upload-images.jianshu.io:443 - HIER_DIRECT/61.156.196.84 -
1543289097.991  35259 192.168.1.60 TCP_TUNNEL/200 16029 CONNECT upload-images.jianshu.io:443 - HIER_DIRECT/61.156.196.84 -
1543289099.311  60913 192.168.1.60 TAG_NONE/503 0 CONNECT clients4.google.com:443 - HIER_NONE/- -
1543289100.321  38894 192.168.1.60 TCP_TUNNEL/200 23165 CONNECT upload.jianshu.io:443 - HIER_DIRECT/150.138.176.244 -
1543289109.312  47056 192.168.1.60 TCP_TUNNEL/200 10707 CONNECT upload.jianshu.io:443 - HIER_DIRECT/150.138.176.244 -

可以看到,是通过代理服务器的转发来访问的目标网站。

代理服务器鉴权

上面的代理服务器如果是在公网上提供服务的,那么所有人都能使用这个代理服务。如果我们想加入鉴权机制对这个进行限制,则需要增加其他配置。这里我们采用用户名和密码的鉴权方式,具体方法如下。
首先用 apache 的密码工具生成用户密码,如果没有的话需要先安装 httpd 软件

yum install httpd

然后生成密码。

[root@localhost ~]# htpasswd -c /etc/squid/passwd youname
New password: 
Re-type new password: 
Adding password for user youname

如果没有 htpasswd 命令,则安装 apache

yum install -y httpd

在 http_access deny all 语句之前,加入如下的配置内容

cache_dir ufs /var/spool/squid 100 16 256
cache_mem 128 MB
maximum_object_size 128 MB
cache_dir ufs /var/spool/squid 100 16 256

auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm your message
auth_param basic credentialsttl 5 hours
acl ncsa_users proxy_auth REQUIRED
http_access allow ncsa_users

然后重启

Sed:一些常用的命令详解

Sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下Sed的用法。

用法

Sed命令行格式

sed -$Options "$Features" $File

$Options

-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。

指定行数

不一定要存在指定的行数,一般代表选择进行动作的行数,举例来说,如果我的动作是需要在10到20行之间进行的,则完整代码是sed -$Options "10,20$Features" $File

$Features

a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代你指定行的所有内容!
d :删除, 因为是删除啊,所以 d 后面通常不接任何东西;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列印, 亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
r :引入, sed中的 r 命令会把其后面的任何字符判读为文件名,直到回车符或是单引号;
s :取代, 可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 sed “s/要被取代的字串/新的字串/g”就是啦!

$File

你要进行动作的文件名例如98k.txt

实例

假设我们有一文件名为98k.txt,内容如下

this is a newfile!
hello world
please
asd12
123asdasd

删除某行

对98k.txt的行进行操作,将操作结果输出到终端(只是做模拟操作,不改动源文件)

sed "1d" 98k.txt         # 输出删除第一行后的文件内容
sed "$d" 98k.txt         # 输出删除最后一行后的文件内容
sed "1,2d" 98k.txt       # 输出删除第一行到第二行后的文件内容
sed "2,$d" 98k.txt       # 输出删除第2行到最后1行后的文件内容

显示某行

sed -n "1p" 98k.txt           # 只显示文件的第一行 
sed -n "$p" 98k.txt           # 只显示文件的最后一行
sed -n "1,2p" 98k.txt         # 只显示文件的第一行到第二行
sed -n "2,$p" 98k.txt         # 显示文件的第二行到最后一行

使用安静模式进行查询

sed -n "/ruby/p" 98k.txt
输出关键字ruby所在行的内容;其中"/str/p",str为搜索的文本内容
sed -n "/$/p" 98k.txt
输出关键字$所在行的内容,使用反斜线屏蔽特殊含义

增加一行或多行字符串

sed "1a drink tea" 98k.txt            # 在第一行后增加字符串"drink tea"
sed "1,3a drink tea" 98k.txt          # 在第一行到第三行后增加字符串"drink tea"
sed "1a drink teanor coffee" 98k.txt # 在第一行后增加两行,换行使用n,可多次使用n添加多行

增加另外一个文件的内容

sed "1r 1.txt" 98k.txt     # 把1.txt的内容增加到98k.txt的第一行后

替代一行或多行

sed "1c Hi" 98k.txt    # 把98k.txt的第一行替换为Hi
sed "1,2c Hi" 98k.txt  # 把98k.txt的第一行到第二行替换为Hi

替换一行中的某部分字符串

格式:sed "s/要替换的字符串/新的字符串/g" 98k.txt (要替换的字符串可以用正则表达式)

sed "s/ruby/bird/g" 98k.txt   # 把全部的ruby替换为bird
sed "s/ruby//g" 98k.txt       # 把全部的ruby替换为空,即删除ruby字符串

sed -i 命令详解

sed -i是直接对文件进行操作

# 对每行匹配到的第一个字符串进行替换
sed -i "s/原字符串/新字符串/" 98k.txt

# 对全局匹配上的所有字符串进行替换
sed -i "s/原字符串/新字符串/g" 98k.txt

# 删除所有匹配到字符串的行
sed -i "/匹配字符串/d"  98k.txt

# 特定字符串的行后插入新行
sed -i "/特定字符串/a 新行字符串" 98k.txt

# 特定字符串的行前插入新行
sed -i "/特定字符串/i 新行字符串" 98k.txt

# 把匹配行中的某个字符串替换为目标字符串
sed -i "/匹配字符串/s/源字符串/目标字符串/g" 98k.txt

# 在文件98k.txt中的末行之后,添加bye
sed -i "$a bye" 98k.txt

# 对于文件第3行,把匹配上的所有字符串进行替换
sed -i "3s/原字符串/新字符串/g" 98k.txt

sed命令详解

sed是Linux中处理文本最重要的两个工具之一,能够极大简化需要进行的数据处理任务。

sed被称为流编辑器(stream editor),可以根据命令来处理数据流中的数据。这些命令要么从命令行中输入,要么存储在一个命令文本文件中。sed会执行一下操作:

(1)一次从输入中读取一行数据

(2)根据所提供的编辑器命令匹配数据

(3)按照命令修改流中的数据

(4)将新的数据输出到STDOUT

在流编辑器将所有命令与一行数据匹配完毕后,它会读取下一行数据并重复这个过程。在流编辑器处理完流中所有的数据行之后,它就会终止。

sed命令的格式为:

sed options script file

options中常用的选项如下所示:

  • -e command   将command中的命令添加到已有的命令中,也就是说当sed中使用多个命令时要使用这个选项。
  • -f file  将file中制定的命令添加到已有的命令中,注意每一个命令都要在独立的一行里。
  • -i  直接修改源文件。
  • -n 通常情况下,当所有命令执行完后输出会显示在STDOUT中,-n选项会禁止输出。通常和替换标记p一起使用,只输出被修改过的行。

script中的常用使用方式:

1、替换文本中的指定字符,形式为:

sed 's/pattern/replacement/flags'

主要用法有(注意:如果不加上-i选项,修改的都是流中的内容,file本身的内容没有变化):

sed 's/pattern/replacement/' file   将file的流中每行的第一个pattern替换成replacement
sed 's/pattern/replacement/g' file    将file的流中每行的每一个pattern替换成replacement
sed 's/pattern/replacement/2' file    将file的流中每行的第二个pattern替换成replacement
sed -n 's/pattern/replacement/p' file   将file的流中每行的第一个pattern替换成replacement,并打印出修改过的行
sed -n 's/pattern/replacement/2p' file   将file的流中每行的第二个pattern替换成replacement,并打印出修改过的行(标记符号可以多个一起使用,且顺序不影响结果)
sed 's/pattern/replacement/gw outFile' file   将file的流中每行的每一个pattern替换成replacement,并将输出保存到outFile中(w标记必须要放在最后,如果写作wg,标记g将无效,并生成名为g outFile的输出文件)
sed '2s/pattern/replacement/' file   将file的流中第二行的第一个pattern替换成replacement
sed '2,4s/pattern/replacement/' file   将file的流中第二行到第四行的第一个pattern替换成replacement
sed '2,$s/pattern/replacement/' file   将file的流中第二行到最后一行的第一个pattern替换成replacement
sed '/word/s/pattern/replacement/' file   将file的流中含有word的行中的第一个pattern替换成replacement,可以使用正则表达式

2、删除文本

sed 'd' file   将file的流中所有行全部删除
sed '2d' file   将file的流中的第二行删除
sed '2,4d' file   将file的流中的第二行到第四行删除
sed '2,$d' file   将file的流中的第二行到最后一行删除
sed '/word/d' file   将file的流中含有word的行删除

3、插入和附加文本

(1)插入(insert)命令(i)会在指定行前增加一个新行。

(2)附加(append)命令(a)会在指定行后增加一个新行。

格式为:

sed '[address]commandnew line'

主要用法为($和匹配模式/word/都可以使用):

sed '3iThis a an inserted line.' file   将一个新行插入到file的流的第三行前
sed '3aThis a an inserted line.' file   将一个新行插入到file的流的第三行后

4、修改行($和匹配模式/word/都可以使用):

sed '3cThis is a changed line.' file   将file的流的第三行修改为This is a changed line.

5、转换命令

转换(transform)命令(y)是唯一可以处理单个字符的sed命令,格式如下:

sed '[address]y/inchars/outchars'

转换命令会对inchars和outchars做一对一映射,inchars的第一个字符会被转换为outchars的第一个字符,inchars的第二个字符会被转换为outchars的第二个字符。如果inchars和outchars的长度不同,sed编辑器会产生一条错误消息:

sed: 1: "y/abc/de/": transform strings are not the same length

举例如下:

$ echo "1 2 3 1 2 3 2 3 4 5 6" | sed 'y/123/456/'

4 5 6 4 5 6 5 6 4 5 6

可以看出,转换命令是一个全局命令,会在文本行中找到的所有指定字符进行转换,无法限定只转换在特定地方出现的字符。

6、写入文件

sed 'w outFile' file   将file的内容写入到outFile中
sed '1,2w outFile' file   将file第一行到第二行的内容写入到outFile中

7、从文件读取数据($和匹配模式/word/都可以使用):

sed '3r newFile' file   将newFile的内容添加到file的流的第三行之后

centos7下rsync+crontab定期同步备份

最近需求想定期备份内部重要的服务器数据到存储里面,顺便做个笔记

以前整过一个win下的cwrsync(客户端)+rsync(服务端:存储)的bat脚本

这次整一个Linux下的脚本sh,执行定期自动备份数据

  • 客户端:192.168.0.100(rsync-Linux)

  • 服务端:192.168.0.252(存储)

rsync简介

rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。

1.服务端配置

rsync的服务端主要是群辉的存储,所以直接有界面式的配置,所以这边就不详细讲解,如下图:

未分类

2.客户端配置

创建密码文件,/etc/rsyncd/rsyncd.pass,并修改为 600 权限

[root@localhost ~]# mkdir rsyncd
[root@localhost ~]# vim /rsyncd/rsyncd.pass
[root@localhost ~]# chmod 600 /rsyncd/rsyncd.pass

▲说明:/rsyncd/rsyncd.pass其内密码需要和服务端内/etc/rsyncd/rsyncd.pass或存储rsync指定用户的密码保持一致

客户端向服务端传输文件,如果是 873 端口,可以把 –port 去掉

rsync -arvz --progress /data [email protected]::log --password-file=/rsyncd/rsyncd.pass

若有需要也可以从服务端拉取文件,需要把服务器的 /etc/rsyncd/rsyncd.conf 中的 write only = yes 给去掉

#拉取整个目录
rsync -arvz --progress --password-file=/rsyncd/rsyncd.pass --port=873 [email protected]::log /var/log
#拉取单个文件
rsync -arvz --progress --password-file=/rsyncd/rsyncd.pass --port=873 [email protected]::log/a.log /var/log

rsync服务端配置参数:

全局参数

在文件中[module]之前的所有参数都是全局参数,当然也可以在全局参数部分定义模块参数,这时候该参数的值就是所有模块的默认值。

port
指定后台程序使用的端口号,默认为873。

motd file
"motd file"参数用来指定一个消息文件,当客户连接服务器时该文件的内容显示给客户,默认是没有motd文件的。

log file
"log file"指定rsync的日志文件,而不将日志发送给syslog。比如可指定为“/var/log/rsyncd.log”。

pid file
指定rsync的pid文件,通常指定为“/var/run/rsyncd.pid”。

syslog facility
指定rsync发送日志消息给syslog时的消息级别,常见的消息级别是:uth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, sys-log, user, uucp, local0, local1, local2, local3,local4, local5, local6和local7。默认值是daemon。

模块参数
主要是定义服务器哪个目录要被同步。其格式必须为“[module]”形式,这个名字就是在rsync 客户端看到的名字,其实有点象Samba服务器提供的共享名。而服务器真正同步的数据是通过 path 来指定的。我们可以根据自己的需要,来指定多个模块,模块中可以定义以下参数:

comment
给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户。默认没有描述定义。

path
指定该模块的供备份的目录树路径,该参数是必须指定的。

use chroot
如 果"use chroot"指定为true,那么rsync在传输文件以前首先chroot到path参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺 点是需要以roots权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下chroot值为true。

uid
该选项指定当该模块传输文件时守护进程应该具有的uid,配合gid选项使用可以确定哪些可以访问怎么样的文件权限,默认值是"nobody"。

gid
该选项指定当该模块传输文件时守护进程应该具有的gid。默认值为"nobody"。

max connections
指定该模块的最大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试。默认值是0,也就是没有限制。

list
该选项设定当客户请求可以使用的模块列表时,该模块是否应该被列出。如果设置该选项为false,可以创建隐藏的模块。默认值是true。

read only
该选项设定是否允许客户上载文件。如果为true那么任何上载请求都会失败,如果为false并且服务器目录读写权限允许那么上载是允许的。默认值为true。

exclude
用来指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到exclude列表中。这等同于在客户端命令中使用--exclude来指定模式,一个 模块只能指定一个exclude选项。但是需要注意的一点是该选项有一定的安全性问题,客户很有可能绕过exclude列表,如果希望确保特定的文件不能 被访问,那就最好结合uid/gid选项一起使用。

exclude from
指定一个包含exclude模式的定义的文件名,服务器从该文件中读取exclude列表定义。

include
用来指定不排除符合要求的文件或目录。这等同于在客户端命令中使用--include来指定模式,结合include和exclude可以定义复杂的exclude/include规则。

include from
指定一个包含include模式的定义的文件名,服务器从该文件中读取include列表定义。

auth users
该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。如果"auth users"被设置,那么客户端发出对该模块的连接请求以后会被rsync请求challenged进行验证身份这里使用的 challenge/response认证协议。用户的名和密码以明文方式存放在"secrets file"选项指定的文件中。默认情况下无需密码就可以连接模块(也就是匿名方式)。

secrets file
该选项指定一个包含定义用户名:密码对的文件。只有在"auth users"被定义时,该文件才有作用。文件每行包含一个username:passwd对。一般来说密码最好不要超过8个字符。没有默认的 secures file名,需要限式指定一个(例如:/etc/rsyncd.passwd)。注意:该文件的权限一定要是600,否则客户端将不能连接服务器。

strict modes
该选项指定是否监测密码文件的权限,如果该选项值为true那么密码文件只能被rsync服务器运行身份的用户访问,其他任何用户不可以访问该文件。默认值为true。

hosts allow
该选项指定哪些IP的客户允许连接该模块。客户模式定义可以是以下形式:
单个IP地址,例如:192.167.0.1
整个网段,例如:192.168.0.0/24,也可以是192.168.0.0/255.255.255.0
多个IP或网段需要用空格隔开,“*”则表示所有,默认是允许所有主机连接。

hosts deny
指定不允许连接rsync服务器的机器,可以使用hosts allow的定义方式来进行定义。默认是没有hosts deny定义。

ignore errors
指定rsyncd在判断是否运行传输时的删除操作时忽略server上的IO错误,一般来说rsync在出现IO错误时将将跳过--delete操作,以防止因为暂时的资源不足或其它IO错误导致的严重问题。

ignore nonreadable
指定rysnc服务器完全忽略那些用户没有访问权限的文件。这对于在需要备份的目录中有些文件是不应该被备份者得到的情况是有意义的。

lock file
指定支持max connections参数的锁文件,默认值是/var/run/rsyncd.lock。

transfer logging
使rsync服务器使用ftp格式的文件来记录下载和上载操作在自己单独的日志中。

log format
通过该选项用户在使用transfer logging可以自己定制日志文件的字段。其格式是一个包含格式定义符的字符串,可以使用的格式定义符如下所示:
%h 远程主机名
%a 远程IP地址
%l 文件长度字符数
%p 该次rsync会话的进程id
%o 操作类型:"send"或"recv"
%f 文件名
%P 模块路径
%m 模块名
%t 当前时间
%u 认证的用户名(匿名时是null)
%b 实际传输的字节数
%c 当发送文件时,该字段记录该文件的校验码
默认log格式为:"%o %h [%a] %m (%u) %f %l",一般来说,在每行的头上会添加"%t [%p] "。在源代码中同时发布有一个叫rsyncstats的perl脚本程序来统计这种格式的日志文件。

timeout
通过该选项可以覆盖客户指定的IP超时时间。通过该选项可以确保rsync服务器不会永远等待一个崩溃的客户端。超时单位为秒钟,0表示没有超时定义,这也是默认值。对于匿名rsync服务器来说,一个理想的数字是600。

refuse options
通过该选项可以定义一些不允许客户对该模块使用的命令参数列表。这里必须使用命令全名,而不能是简称。但发生拒绝某个命令的情况时服务器将报告错误信息然后退出。如果要防止使用压缩,应该是:"dont compress = *"。

dont compress
用来指定那些不进行压缩处理再传输的文件,默认值是*.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

rsync常用命令:

-v, --verbose 详细模式输出
 -q, --quiet 精简输出模式
 -c, --checksum 打开校验开关,强制对文件传输进行校验
 -a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
 -r, --recursive 对子目录以递归模式处理
 -R, --relative 使用相对路径信息
 -b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
 --backup-dir 将备份文件(如~filename)存放在在目录下。
 -suffix=SUFFIX 定义备份文件前缀
 -u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
 -l, --links 保留软链结
 -L, --copy-links 想对待常规文件一样处理软链结
 --copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
 --safe-links 忽略指向SRC路径目录树以外的链结
 -H, --hard-links 保留硬链结
 -p, --perms 保持文件权限
 -o, --owner 保持文件属主信息
 -g, --group 保持文件属组信息
 -D, --devices 保持设备文件信息
 -t, --times 保持文件时间信息
 -S, --sparse 对稀疏文件进行特殊处理以节省DST的空间
 -n, --dry-run现实哪些文件将被传输
 -W, --whole-file 拷贝文件,不进行增量检测
 -x, --one-file-system 不要跨越文件系统边界
 -B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节
 -e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步
 --rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
 -C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
 --existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
 --delete 删除那些DST中SRC没有的文件
 --delete-excluded 同样删除接收端那些被该选项指定排除的文件
 --delete-after 传输结束以后再删除
 --ignore-errors 及时出现IO错误也进行删除
 --max-delete=NUM 最多删除NUM个文件
 --partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
 --force 强制删除目录,即使不为空
 --numeric-ids 不将数字的用户和组ID匹配为用户名和组名
 --timeout=TIME IP超时时间,单位为秒
 -I, --ignore-times 不跳过那些有同样的时间和长度的文件
 --size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
 --modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
 -T --temp-dir=DIR 在DIR中创建临时文件
 --compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
 -P 等同于 --partial
 --progress 显示备份过程
 -z, --compress 对备份的文件在传输时进行压缩处理
 --exclude=PATTERN 指定排除不需要传输的文件模式
 --include=PATTERN 指定不排除而需要传输的文件模式
 --exclude-from=FILE 排除FILE中指定模式的文件
 --include-from=FILE 不排除FILE指定模式匹配的文件
 --version 打印版本信息
 --address 绑定到特定的地址
 --config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
 --port=PORT 指定其他的rsync服务端口
 --blocking-io 对远程shell使用阻塞IO
 -stats 给出某些文件的传输状态
 --progress 在传输时现实传输过程
 --log-format=formAT 指定日志文件格式
 --password-file=FILE 从FILE中得到密码
 --bwlimit=KBPS 限制I/O带宽,KBytes per second
 -h, --help 显示帮助信息

crontab简介

crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
Linux下的任务调度分为两类:系统任务调度和用户任务调度。
系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。
/etc/crontab文件包括下面几行:

[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""HOME=/

# run-parts
51 * * * * root run-parts /etc/cron.hourly
24 7 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

前四行是用来配置crond任务运行的环境变量,第一行SHELL变量指定了系统要使用哪个shell,这里是bash,第二行PATH变量指定了系统执行命令的路径,第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户,第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。

用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。

crontab文件的含义

用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:

minute   hour   day   month   week   command

其中:

  • minute: 表示分钟,可以是从0到59之间的任何整数。

  • hour:表示小时,可以是从0到23之间的任何整数。

  • day:表示日期,可以是从1到31之间的任何整数。

  • month:表示月份,可以是从1到12之间的任何整数。

  • week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。

  • command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

未分类

在以上各个字段中,还可以使用以下特殊字符:

  • 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

  • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”

  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”

  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

crontab常用命令

1.列出crontab文件

为了列出crontab文件,可以用:

[root@localhost ~]# crontab -l
0,15,30,45,18-06 * * * /bin/echo `date` > dev/tty

你将会看到和上面类似的内容。可以使用这种方法在$HOME目录中对crontab文件做一备份:

[root@localhost ~]# crontab -l > $HOME/mycron

这样,一旦不小心误删了crontab文件,可以用上一节所讲述的方法迅速恢复。

2.编辑crontab文件

如果希望添加、删除或编辑crontab文件中的条目,而编辑环境变量又设置为v i,那么就可以用vi来编辑crontab文件,相应的命令为:

[root@localhost ~]# crontab -e

可以像使用vi编辑其他任何文件那样修改crontab文件并退出。如果修改了某些条目或添加了新的条目,那么在保存该文件时, c r o n会对其进行必要的完整性检查。如果其中的某个域出现了超出允许范围的值,它会提示你。

我们在编辑crontab文件时,没准会加入新的条目。例如,加入下面的一条:

# DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month(注释说明)

 30 3 1,7,14,21,26 * * /bin/find -name "core' -exec rm {} ;

现在保存并退出。最好在crontab文件的每一个条目之上加入一条注释,这样就可以知道它的功能、运行时间,更为重要的是,知道这是哪位用户的作业。

现在让我们使用前面讲过的crontab -l命令列出它的全部信息:

[root@localhost ~]# crontab -l 
 # (crondave installed on Tue May 4 13:07:43 1999)
 # DT:ech the date to the console every 30 minites
 0,15,30,45 18-06 * * * /bin/echo `date` > /dev/tty1
 # DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month
 30 3 1,7,14,21,26 * * /bin/find -name "core' -exec rm {} ;

3.删除crontab文件

要删除crontab文件,可以用:

[root@localhost ~]# crontab -r

crontab使用实例

实例1:每1分钟执行一次command

命令:

* * * * * command

实例2:每星期日的晚上00 : 00执行rsync-sh脚本

命令:

[root@localhost ~]# crontab -e
# DT:Execute rsync-sh script every Sunday at 00: 00(注释说明)
0 0 * * 7 sh /root/rsyncd/rsync-gitbak.sh

rsync客户端自动与rsync服务器端同步

首先,我们来做一个shell脚本

[root@localhost rsyncd]# vim rsyncd.sh
#!/bin/bash
rsync -arvz --progress /data [email protected]::log --password-file=/rsyncd/rsyncd.pass

命令:crontab -e来编辑加入计划任务

[root@localhost ~]# crontab -e
# DT:Execute rsync-sh script every Sunday at 00: 00(注释说明)
0 0 * * 7 sh /root/rsyncd/rsyncd.sh

使用crontab -l查看加入的计划任务

[root@localhost ~]# crontab -l
0 0 * * 7 sh /root/rsyncd/rsyncd.sh

注意:

  1. 当程式在你所指定的时间执行后,系统会寄一封信给你,显示该程式执行的内容,若是你不希望收到这样的信,请在每一行空一格之后加上 > /dev/null 2>&1 即可。

  2. %在crontab中被认为是newline,要用来escape才行。比如crontab执行行中,如果有”date +%Y%m%d”,必须替换为:”date +%Y%m%d”

遇到的问题和解决方法

在Windows上面编辑了sh脚本上传到Linux上面,执行报错:

bad interpreter:No such file or directory

vim rsyncd.sh用命令:set ff?查看是doc还是unix格式,如果是dos格式,用命令:set ff=unix转化为unix格式

Linux下rsync 数据镜像备份 client / server 模式

rsync特性:

  • 可以镜像保存整个目录树和文件系统
  • 可以增量同步数据,文件传输效率高,因而同步时间很短。
  • 可以保持原有文件的权限、时间等属性。
  • 加密传输数据,保证了数据的安全性

两种模式:

  • client / server
  • client / client

安装rsync

yum install rsync

查看rsync版本

rpm -qa rsync
rsync-3.1.2-4.el7.x86_64

查看rsync安装位置

rpm -ql rsync

未分类

在服务器端:

编辑rsync配置文件

vim /etc/rsyncd

内容如下

uid = nobody
gid = nobody
use chroot = no
max connections = 10
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log

[rsync_module_1]
path = /rsync_data_1
comment = rsync_data for sharing to client server
ignore errors
read only = true
list = false
uid = root
gid = root
auth users = rsync_bak
secrets file = /etc/rsync_server.pass

未分类

按照配置文件内容,创建/etc/rsync_server.pass 文件,且权限为600
内容

rsync_bak:rsyncpwd
chmod 600 /etc/rsync_server.pass

未分类

根据配置文件创建相应的目录

mkdir -p /rsync_data_1

启动rsync服务和验证

/usr/bin/rsync --daemon
ps -ef | grep rsync
lsof -c rsync
netstat -antlp | grep rsync

未分类

未分类

客户端

确保安装了rsync组件

创建客户端rsync的密码文件,其密码和服务器端一致,且文件权限为600

vim /etc/rsync_client.pass
cat /etc/rsync_client.pass
rsyncpwd
chmod 600 /etc/rsync_client.pass

客户端指定/创建rsync的目录

mkdir -p /rsync_data

从服务器端拉取数据

/usr/bin/rsync -vzrtopg --delete --progress [email protected]::rsync_module_1 /rsync_data --password-file=/etc/rsync_client.pass

验证是否成功从服务器端拉取到数据

ll /rsync_data/

未分类

rsync 工具备份服务端配置

在服务器端安装和配置rsync

1.安装rsync

如已默认安装,请卸载旧版本

$ sudo yum remove rsync -y

RPM 安装

RPM方式的好处,快速、方便、节时,具体安装如下:

$ yum -y install rsync

rsync文件:

/etc/rsyncd.conf
/etc/sysconfig/rsyncd
/etc/xinetd.d/rsync
/usr/bin/rsync
/usr/share/doc/rsync-3.1.2/COPYING
......

2.关于rsync认证方式

rsync有2种常用的认证方式,一种是rsync-daemon,另一种是SSH。

在生产环境中,通常使用rsync-daemon认证模式。

认证模式说明:

  • rsync-daemon认证:默认监听TCP的873端口。前提是双方都需要安装rsync,客户端可不启动rsync服务,但需要简单的配置。服务器端需要启动且需在服务器端配置rsync。

  • SSH认证:通过系统用户认证,即在rsync上通过SSH隧道进行传输,前提是需要服务器端与客户端建立无密码登录。

    • 无需服务器与客户端配置rsync,也无需启动rsync服务,只需双方都安装rsync即可。

3.配置服务端

3.1 设置rsync服务端密码文件 192.168.0.2

使用rsync-daemon认证方式。创建访问密码,格式为用户名:密码,一行一个,明文。
命令

$ sudo echo "renwole:renwolecom"  >>/etc/rsync.password
$ sudo chmod 600 /etc/rsync.password                    # 注意权限必须是 600 否则会报错

3.2 配置rsync服务端配置文件 192.168.0.2

配置文件所在目录: /etc/rsyncd.conf

$ sudo vim /etc/rsyncd.conf
uid = root               # 运行RSYNC守护进程的用户
gid = root               # 运行RSYNC守护进程的组
port = 873               # 默认端口
#address = 10.28.204.65  # 服务器IP地址
# pid file = /var/run/rsyncd.pid    # 进程启动后,进程号存放路径     centos 7 若不注释会报错
lock file = /var/run/rsync.lock   # 设置锁文件名称
log file = /var/log/rsyncd.log      # 指定rsync的日志文件
                                    # 这两个文件在配置过后系统会自己创建
use chroot = no             # 不使用chroot
read only = yes             # 只读,不让客户端上传文件到服务器
transfer logging = yes      # 将传输操作记录到传输日志文件

hosts allow=192.168.0.3             # 允许哪些主机访问(多个以空格隔开)
hosts deny=*                        # 拒绝哪些主机访问
max connections = 3                 # 最大连接数
# motd file = /etc/rsyncd.motd      # 登陆欢迎信息(生产环境不建议)

log format = %t %a %m %f %b        # 指定日志记录的格式
syslog facility = local3           # 消息级别
timeout = 600                      # 会话超时时间。

[BackupServer]              # 模块的名称,可以自定义    后续客户端进行同步的时候会使用到
path = /xxx/xxx             # 需要同步的目录
list=yes                    # 是否允许用户列出文件,默认为true
ignore errors               # 忽略错误信息
# exclude = myrenwole/      # 不同步的目录(多个以空格隔开)
comment = BackupServer      # 注释内容,任意
auth users = backup         # 那些用户才允许连接该模块,多个以,隔开     此用户是你上一步配置密码文件所设置的用户
secrets file = /etc/rsyncs.password    # 认证时所需的密码文件

注意:全局配置中的选项对所有模块有效;模块下定义的仅对当前模块有效;另外,模块中定义选项值优先于全局配置。

4.设置防火墙

$ sudo firewall-cmd --add-port=873/tcp --permanent
$ sudo firewall-cmd --add-port=873/udp --permanent
$ sudo firewall-cmd --reload

5.启动并加入开机自启动

$ sudo systemctl start rsyncd       # 开启
$ sudo systemctl enable rsyncd      # 开启守护进程
$ sudo systemctl list-unit-files    # 查看系统所有服务的状态

rsync的小坑

今天磁盘满了,打算将占磁盘大的文件给移走,再采用软连接的。同步的时候出现了一点小问题。

第一天:

先将要同步的文件给同步了一遍。

执行命令

rsync -auv /data/mysql/game /data1/mysql
rsync -auv /data/mysql/integral /data1/mysql
rsync -auv /data/mysql/interact /data1/mysql
rsync -auv /data/mysql/match /data1/mysql
rsync -auv /data/mysql/sns_admin /data1/mysql
rsync -auv /data/mysql/stock /data1/mysq

第二天:

又同步了一遍

rsync -auv /data/mysql/game /data1/mysql/game
rsync -auv /data/mysql/integral /data1/mysql/integral
rsync -auv /data/mysql/interact /data1/mysql/interact
rsync -auv /data/mysql/match /data1/mysql/match
rsync -auv /data/mysql/sns_admin /data1/mysql/sns_admin 
rsync -auv /data/mysql/stock /data1/mysql/stock

快要同步完的时候,检查文件大小,发现文件大了一倍。

原来第二步命令将/data/mysql/game文件 放在/data1/mysql/game文件下了。

这也不算是rsync的坑吧

应该这样这行

rsync -auv /data/mysql/game/ /data1/mysql/game/
rsync -auv /data/mysql/integral/ /data1/mysql/integral/
rsync -auv /data/mysql/interact/ /data1/mysql/interact/
rsync -auv /data/mysql/match/ /data1/mysql/match/
rsync -auv /data/mysql/sns_admin/ /data1/mysql/sns_admin/ 
rsync -auv /data/mysql/stock/ /data1/mysql/stock/

或者执行和昨天一样的命令

rsync -auv /data/mysql/game         /data1/mysql
rsync -auv /data/mysql/integral    /data1/mysql
rsync -auv /data/mysql/interact     /data1/mysql
rsync -auv /data/mysql/match        /data1/mysql
rsync -auv /data/mysql/sns_admin    /data1/mysql
rsync -auv /data/mysql/stock        /data1/mysq 

就可以了。

小结:

1、使用rsync同步,只要之前同步的内容和现在同步的内容有一点改变,就会重新全量同步,因此,同步的时候尽量找长时间没有变化的大文件
2、rsync不会追加文件

Linux下使用rsync同步文件

遇到的问题是几台游戏服务器,有一台新的服务器之前已经copy(Linux的scp命令)过文件上去,但在测试的过程中发现还是图片无法正常不显示出来,然后用httpwatch去分析请求的资源,发现有一个图片请求的地址是404(文件不存在),然后ssh登录上去,找到指定目录,发现确实是没有这个文件。。。

为了不至于再copy一次,就需要使用文件同步的管理软件了,同事推荐了linux下的rsync,小试了一下,还是很不错的。

假设有服务器A 和 服务器B,现在登录了服务器B,需要将服务器A上的文件同步到服务器B中,将A中有的B中没有的,或是A中文件比B中的文件要新就全部copy过来。

shell命令如下:

rsync -zvrtopg -progress -e 'ssh -p 端口号' [email protected]:/文件目录/  本机的目录地址

语法rsync -参数 ‘源文件访问路径’目标路径

第一次用的时候,我在源服务器(即上面所指的服务器A)中的文件目录没有加/导致后来直接把那个目录copy过来了,而不是它目录下的所有文件

关于rsync 这个命令的一些参数,英文好点就自己直接使用rsync –help去查看了,这里从其它人写的博客中转载过来的。

参考了:

rsync参数详解 http://hi.baidu.com/webv/blog/item/7c787a06581dab7e0208819a.html

rsync 使用说明 http://wandering.blog.51cto.com/467932/105113

使用之前需要先安装rsync,这个直接自行搜索吧..

关于参数的说明:

-v, --verbose 详细模式输出   
-q, --quiet 精简输出模式    
-c, --checksum 打开校验开关,强制对文件传输进行校验    
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD    
-r, --recursive 对子目录以递归模式处理    
-R, --relative 使用相对路径信息    
rsync foo/bar/foo.c remote:/tmp/    

则在/tmp目录下创建foo.c文件,而如果使用-R参数:

rsync -R foo/bar/foo.c remote:/tmp/    

则会创建文件/tmp/foo/bar/foo.c,也就是会保持完全路径信息。

-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。    
--backup-dir 将备份文件(如~filename)存放在在目录下。    
-suffix=SUFFIX 定义备份文件前缀    
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)    
-l, --links 保留软链结    
-L, --copy-links 想对待常规文件一样处理软链结    
--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结    
--safe-links 忽略指向SRC路径目录树以外的链结    
-H, --hard-links 保留硬链结    
-p, --perms 保持文件权限    
-o, --owner 保持文件属性信息    
-g, --group 保持文件属组信息    
-D, --devices 保持设备文件信息    
-t, --times 保持文件时间信息    
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间    
-n, --dry-run现实哪些文件将被传输    
-W, --whole-file 拷贝文件,不进行增量检测    
-x, --one-file-system 不要跨越文件系统边界    
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节    
-e, --rsh=COMMAND 指定替代rsh的shell程序    
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息    
-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件    
--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件    
--delete 删除那些DST中SRC没有的文件    
--delete-excluded 同样删除接收端那些被该选项指定排除的文件    
--delete-after 传输结束以后再删除    
--ignore-errors 及时出现IO错误也进行删除    
--max-delete=NUM 最多删除NUM个文件    
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输    
--force 强制删除目录,即使不为空    
--numeric-ids 不将数字的用户和组ID匹配为用户名和组名    
--timeout=TIME IP超时时间,单位为秒    
-I, --ignore-times 不跳过那些有同样的时间和长度的文件    
--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间    
--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0    
-T --temp-dir=DIR 在DIR中创建临时文件    
--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份    
-P 等同于 --partial    
--progress 显示备份过程    
-z, --compress 对备份的文件在传输时进行压缩处理    
--exclude=PATTERN 指定排除不需要传输的文件模式    
--include=PATTERN 指定不排除而需要传输的文件模式    
--exclude-from=FILE 排除FILE中指定模式的文件    
--include-from=FILE 不排除FILE指定模式匹配的文件    
--version 打印版本信息    
--address 绑定到特定的地址    
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件    
--port=PORT 指定其他的rsync服务端口    
--blocking-io 对远程shell使用阻塞IO    
-stats 给出某些文件的传输状态    
--progress 在传输时现实传输过程    
--log-format=FORMAT 指定日志文件格式    
--password-file=FILE 从FILE中得到密码    
--bwlimit=KBPS 限制I/O带宽,KBytes per second    
-h, --help 显示帮助信息

一般常用的:

-v 详细模式输出

-r 对子目录以递归模式处理

-t 保持文件的时间信息

-o 保持文件的属性信息

-g 保持文件属组的信息(不清楚这样翻译是否有问题)

-p 保持文件权限不变

-e, --rsh=COMMAND 指定替代rsh的shell程序

-z, --compress 对备份的文件在传输时进行压缩处理

--progress 显示备份过程

也就是:递归、保证文件一些基本属性不变(创建/修改时间 权限等)、传输文件时压缩以减少带宽消耗,当然还有一个就看需要了:是否删除源中没有,而目标中又有的文件