常用的Linux命令
ssh连接
1 | ssh root@106.15.94.49 |
scp传输文件
1 | scp my_file root@106.15.94.49:/root/user/ |
scp传输目录
1 | scp -r -v my_dir root@106.15.94.49:/root/user |
查看端口占用情况
list of open file
1 | lsof -i:8000 |
或者
1 | netstat -lnput|grep 8000 |
开启防火墙
1 | systemctl start firewalld |
查看已经开放的端口号
1 | firewall-cmd --list-ports |
开放端口号
1 | firewall-cmd --zone=public --add-port=8080/tcp --permanent |
需要重启防火墙
1 | firewall-cmd --reload |
1 | 启动: systemctl start firewalld |
查找文件并且切换到所在文件目录
1 | cd $(find /opt/lampp/ -name " php.ini" | xargs dirname ) |
xargs 能够捕获一个命令的输出,然后传递给另外一个命令。
之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数
压缩目录
1 | tar -cvf file.tar file/ |
解压目录
1 | tar -xvf file.tar |
curl
-a/–append | 上传文件时,附加到目标文件 |
---|---|
-A/–user-agent |
设置用户代理发送给服务器 |
-anyauth | 可以使用“任何”身份验证方法 |
-b/–cookie <name=string/file> | cookie字符串或文件读取位置 |
–basic | 使用HTTP基本验证 |
-B/–use-ascii | 使用ASCII /文本传输 |
-c/–cookie-jar |
操作结束后把cookie写入到这个文件中 |
-C/–continue-at |
断点续转 |
-d/–data | HTTP POST方式传送数据 |
–data-ascii | 以ascii的方式post数据 |
–data-binary | 以二进制的方式post数据 |
–negotiate | 使用HTTP身份验证 |
–digest | 使用数字身份验证 |
–disable-eprt | 禁止使用EPRT或LPRT |
–disable-epsv | 禁止使用EPSV |
-D/–dump-header |
把header信息写入到该文件中 |
–egd-file |
为随机数据(SSL)设置EGD socket路径 |
–tcp-nodelay | 使用TCP_NODELAY选项 |
-e/–referer | 来源网址 |
-E/–cert <cert[:passwd]> | 客户端证书文件和密码 (SSL) |
–cert-type |
证书文件类型 (DER/PEM/ENG) (SSL) |
–key |
私钥文件名 (SSL) |
–key-type |
私钥文件类型 (DER/PEM/ENG) (SSL) |
–pass |
私钥密码 (SSL) |
–engine |
加密引擎使用 (SSL). “–engine list” for list |
–cacert |
CA证书 (SSL) |
–capath |
CA目录 (made using c_rehash) to verify peer against (SSL) |
–ciphers |
SSL密码 |
–compressed | 要求返回是压缩的形势 (using deflate or gzip) |
–connect-timeout |
设置最大请求时间 |
–create-dirs | 建立本地目录的目录层次结构 |
–crlf | 上传是把LF转变成CRLF |
-f/–fail | 连接失败时不显示http错误 |
–ftp-create-dirs | 如果远程目录不存在,创建远程目录 |
–ftp-method [multicwd/nocwd/singlecwd] | 控制CWD的使用 |
–ftp-pasv | 使用 PASV/EPSV 代替端口 |
–ftp-skip-pasv-ip | 使用PASV的时候,忽略该IP地址 |
–ftp-ssl | 尝试用 SSL/TLS 来进行ftp数据传输 |
–ftp-ssl-reqd | 要求用 SSL/TLS 来进行ftp数据传输 |
-F/–form <name=content> | 模拟http表单提交数据 |
–form-string <name=string> | 模拟http表单提交数据 |
-g/–globoff | 禁用网址序列和范围使用{}和[] |
-G/–get | 以get的方式来发送数据 |
-H/–header |
自定义头信息传递给服务器 |
–ignore-content-length | 忽略的HTTP头信息的长度 |
-i/–include | 输出时包括protocol头信息 |
-I/–head | 只显示请求头信息 |
-j/–junk-session-cookies | 读取文件进忽略session cookie |
–interface |
使用指定网络接口/地址 |
–krb4 |
使用指定安全级别的krb4 |
-k/–insecure | 允许不使用证书到SSL站点 |
-K/–config | 指定的配置文件读取 |
-l/–list-only | 列出ftp目录下的文件名称 |
–limit-rate |
设置传输速度 |
–local-port |
强制使用本地端口号 |
-m/–max-time |
设置最大传输时间 |
–max-redirs |
设置最大读取的目录数 |
–max-filesize |
设置最大下载的文件总量 |
-M/–manual | 显示全手动 |
-n/–netrc | 从netrc文件中读取用户名和密码 |
–netrc-optional | 使用 .netrc 或者 URL来覆盖-n |
–ntlm | 使用 HTTP NTLM 身份验证 |
-N/–no-buffer | 禁用缓冲输出 |
-o/–output | 把输出写到该文件中 |
-O/–remote-name | 把输出写到该文件中,保留远程文件的文件名 |
-p/–proxytunnel | 使用HTTP代理 |
–proxy-anyauth | 选择任一代理身份验证方法 |
–proxy-basic | 在代理上使用基本身份验证 |
–proxy-digest | 在代理上使用数字身份验证 |
–proxy-ntlm | 在代理上使用ntlm身份验证 |
-P/–ftp-port | 使用端口地址,而不是使用PASV |
-q | 作为第一个参数,关闭 .curlrc |
-Q/–quote |
文件传输前,发送命令到服务器 |
-r/–range |
检索来自HTTP/1.1或FTP服务器字节范围 |
–range-file | 读取(SSL)的随机文件 |
-R/–remote-time | 在本地生成文件时,保留远程文件时间 |
–retry |
传输出现问题时,重试的次数 |
–retry-delay |
传输出现问题时,设置重试间隔时间 |
–retry-max-time |
传输出现问题时,设置最大重试时间 |
-s/–silent | 静默模式。不输出任何东西 |
-S/–show-error | 显示错误 |
–socks4 <host[:port]> | 用socks4代理给定主机和端口 |
–socks5 <host[:port]> | 用socks5代理给定主机和端口 |
–stderr |
|
-t/–telnet-option <OPT=val> | Telnet选项设置 |
–trace |
对指定文件进行debug |
–trace-ascii |
Like –跟踪但没有hex输出 |
–trace-time | 跟踪/详细输出时,添加时间戳 |
-T/–upload-file |
上传文件 |
–url |
Spet URL to work with |
-u/–user <user[:password]> | 设置服务器的用户和密码 |
-U/–proxy-user <user[:password]> | 设置代理用户名和密码 |
-w/–write-out [format] | 什么输出完成后 |
-x/–proxy <host[:port]> | 在给定的端口上使用HTTP代理 |
-X/–request <command> | 指定什么命令 |
-y/–speed-time | 放弃限速所要的时间,默认为30 |
-Y/–speed-limit | 停止传输速度的限制,速度时间 |
-A
: 指定User-Agent
1
2
3
4curl -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' https://google.com
# 移除`User-Agent
curl -A '' https://google.com-b
: 发送 Cookie1
2
3
4curl -b "foo=bar" https://google.com
curl -b "foo1=bar" -b "foo2=baz" https://google.com
curl -b cookies.txt https://www.google.com
curl -b name=hyl;age=21 https://httpbin.org/get-c
: 将服务器设置的 Cookie 写入一个文件。-i
: 获取响应和响应头```bash
curl -I https://httpbin.org/get–head参数等同于-I。
curl –head https://www.example.com
1
2
3
4
5
6
- `-x` : 指定 HTTP 请求的代理。
```bash
# 指定 HTTP 请求通过myproxy.com:8080的 socks5 代理发出。如果没有指定代理协议,默认为 HTTP。
curl -x socks5://james:cats@myproxy.com:8080 https://www.example.com-X
: 请求方法1
2curl -X POST www.example.com
curl -X DELETE www.example.com-v
: 显示一次HTTP请求的通信过程 , 用于调试。1
curl -v www.baidu.com
–connect-timeout
: 连接超时时间-m
: 数据传输的最大允许时间1
curl -connect-timeout 10 -m 20 “http://outofmemory.cn/”
-d
: 发送 POST 请求的数据体。1
2
3
4curl -d 'login=emma&password=123'-X POST https://google.com/login
curl -d 'login=emma' -d 'password=123' -X POST https://google.com/login
# -d参数可以读取本地文本文件的数据
curl -d '@data.txt' https://google.com/login--data-urlencode
: 等同于-d
,发送 POST 请求的数据体,区别在于会自动将发送的数据进行 URL 编码。1
2# 发送的数据hello world之间有一个空格,需要进行 URL 编码。
curl --data-urlencode 'comment=hello world' https://google.com/login-e
: 设置 HTTP 的标头Referer
,表示请求的来源。1
curl -e 'https://google.com?q=example' https://www.example.com
-H
: 设置headers , 可以通过直接添加标头Referer
,达到同样效果。1
2
3
4
5curl -H 'Referer: https://google.com?q=example' https://www.example.com
curl -H 'Accept-Language: en-US' https://google.com
curl -H 'Accept-Language: en-US' -H 'Secret-Message: xyzzy' https://google.com
# 添加 HTTP 请求的标头是Content-Type: application/json,然后用-d参数发送 JSON 数据
curl -d '{"login": "emma", "pass": "123"}' -H 'Content-Type: application/json' https://google.com/login-F
: 向服务器上传二进制文件。1
2
3
4
5
6# 给 HTTP 请求加上标头Content-Type: multipart/form-data,然后将文件photo.png作为file字段上传。(默认 MIME 类型设为application/octet-stream)
curl -F 'file=@photo.png' https://google.com/profile
# 指定 MIME 类型。
curl -F 'file=@photo.png;type=image/png' https://google.com/profile
# 指定文件名。
curl -F 'file=@photo.png;filename=me.png' https://google.com/profile-G
: 构造 URL 的查询字符串。1
2
3
4
5# 实际请求的 URL 为https://google.com/search?q=kitties&count=20
# 如果省略-G,会发出一个 POST 请求。
curl -G -d 'q=kitties' -d 'count=20' https://google.com/search
# 如果数据需要 URL 编码,可以结合--data--urlencode参数。
curl -G --data-urlencode 'comment=hello world' https://www.example.com-k
: 跳过 SSL 检测。不会检查服务器的 SSL 证书是否正确。1
curl -k https://www.example.com
-L
: 跟随重定向1
curl -L -d 'tweet=hi' https://api.twitter.com/tweet
--limit-rate
: 限制 HTTP 请求和回应的带宽,模拟慢网速的环境。1
2# 将带宽限制在每秒 200K 字节。
curl --limit-rate 200k https://google.com-o
: 将服务器的回应保存成文件,等同于wget
命令。1
2# 将www.example.com保存成example.html。
curl -o example.html https://www.example.com-O
: 将服务器回应保存成文件,并将 URL 的最后部分当作文件名1
2# 将服务器回应保存成文件,文件名为bar.html。
curl -O https://www.example.com/foo/bar.html-s
: 不输出错误和进度信息。1
2
3
4
5# 一旦发生错误,不会显示错误信息。不发生错误的话,会正常显示运行结果。
curl -s https://www.example.com
# 如果想让 curl 不产生任何输出,可以使用下面的命令。
curl -s -o /dev/null https://google.com-S
: 只输出错误信息1
2# 命令没有任何输出,除非发生错误。
curl -s -o /dev/null https://google.com-u
: 设置服务器认证的用户名和密码。1
2# 设置用户名为bob,密码为12345,然后将其转为 HTTP 标头Authorization: Basic Ym9iOjEyMzQ1。
curl -u 'bob:12345' https://google.com/login
常用:
-A
: 指定User-Agent
-b
: 发送 Cookie-i
: 获取响应和响应头-X
: 请求方法-v
: 显示一次HTTP请求的通信过程 , 用于调试。-d
: 发送 POST 请求的数据体。-G
: 构造 URL 的查询字符串。--data-urlencode
: 等同于-d
,发送 POST 请求的数据体,区别在于会自动将发送的数据进行 URL 编码。-e
: 设置 HTTP 的标头Referer
,表示请求的来源。-H
: 设置headers , 可以通过直接添加标头Referer
,达到同样效果。-F
: 向服务器上传二进制文件。-L
: 跟随重定向-o
: 将服务器的回应保存成文件,等同于wget
命令。
1 | curl -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' https://google.com |
实际上 ,
-o
参数比较少用 , 都是使用>
, 他们效果是一样的
1
2 curl -o hyl.html http://106.15.94.49/download/
curl http://106.15.94.49/download/ > hyl.html
wget
wget是一个使用HTTP,HTTPS,FTP和FTPS协议来下载文件的免费软件。
它是一个非交互式工具,因此它可以很轻松地通过脚本、cron和终端来调用。
- 下载单个文件
wget http://www.baidu.com/index.html
- 使用wget -O下载并以不同的文件名保存
wget -O 1.txt http://www.baidu.com/index.html
- 使用wget –limit -rate限速下载
wget –limit-rate=300k http://www.baidu.com/index.html
- 使用wget -c断点续传,重新启动下载中断的文件 , 需要继续中断的下载时可以使用-c参数
wget -c http://www.baidu.com/index.html
- 使用wget -b后台下载 , 对于下载非常大的文件的时候,我们可以使用参数-b进行后台下载
wget -b http://www.baidu.com/index.html
- 你可以使用以下命令来察看下载进度
tail -f wget-log
- 使用 wget –reject 过滤指定格式下载 , 你想下载一个网站,但你不希望下载图片,你可以使用以下命令。
wget –reject=gif http://www.baidu.com
sort
排序
- -n:使用数字排序(非 字符排序)。避免2比10大的情况
- -t -k:使用第几列进行排序,-t自定分隔符,-k指定第几列
- -r:reverse,逆序
- -f:忽略大小写
- -u:去除重复行
1 | curl localhost:9200/_cat/indices | grep project_s | sort -n -k 2 -t " " |
crontab
添加任务
通过crontab -e命令编辑crontab任务,增加内容如下:
1 | */30 * * * * /home/pi/shared/bash/timing_camera.sh |
查看任务
添加后,可以使用 crontab -l
查看.
增加了crontab任务后,在/var/spool/cron目录下会有一个当前登录账号命名的文件。比如我的登录账号是root。则会存在一个root文件。该文件的内容就是刚添加的crontab任务。
1 | cat /var/spool/cron/root |
删除任务
如果想删除任务,就可以直接编辑/var/spool/cron/root的文件.比如直接删除那一行
也使用sed命令来处理/var/spool/cron/root 文件,将含timing.sh的行的内容删除掉。
1 sed -i '/home/pi/shared/raspi_camera/bash/timing.sh/d' /var/spool/cron/root
启动cron
1 | sudo systemctl start crond |
inotifywait
由于每次前端同学的vue项目push到git后,都需要私下告诉我,然后我更新代码并重新构建,嫌麻烦,但由于本地环境的ip非公网ip,webhook不可达,所以只能使用crontab定时拉取代码,再配合inotifywait监听文件变化,自动build构建代码,遂写此文记录下inotifywait的安装和基本使用,以便后续查阅。
Inotify
一种强大的、细粒度的、异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性、读写属性、权限属性、删除创建、移动等操作,也就是可以监控文件发生的一切变化。
inotify-tools
是一个C库和一组命令行的工作,提供Linux下inotify的简单接口。inotify-tools
安装后会得到inotifywait
和inotifywatch
这两条命令:
inotifywait
命令 可以用来收集有关文件访问信息,Linux发行版一般没有包括这个命令,需要安装inotify-tools
,这个命令还需要将inotify支持编译入Linux内核,好在大多数Linux发行版都在内核中启用了inotify。inotifywatch
命令 用于收集关于被监视的文件系统的统计数据,包括每个 inotify 事件发生多少次。
检测系统内核是否支持inotify
- 方式一:使用
uname -r
命令检查Linux内核,如果低于2.6.13
,就需要重新编译内核加入inotify的支持。 - 方式二:使用
ll /proc/sys/fs/inotify
命令,是否有以下三条信息输出,如果没有表示不支持。
1 | $ ll /proc/sys/fs/inotify |
安装
可直接使用Linux系统自带的包管理工具进行安装,也可以手动从源码编译安装。
包管理工具进行安装
以centos系统自带等yum为例
其他Linux发行版安装方法可以参见:https://github.com/rvoicilas/inotify-tools/wiki#wiki-getting
1 | $ yum search inotify-tools |
源码编译安装
1 | $ wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz |
如果遇到以下错误
1 | inotifywait: error while loading shared libraries: libinotifytools.so.0: cannot open shared object file: No such file or directory |
解决方法:
1 | 32位系统:ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib/libinotifytools.so.0 |
inotifywait 基本使用
安装完成后可简单尝试下,执行以下命令监听log.txt文件
1 | $ inotifywait -m log.txt |
然后通过其他窗口执行以下命令向log.txt文件写入内容
1 | $ echo >> log.txt |
可观察到上一个屏幕输出了,因为监听到了文件打开、修改、关闭的事件。
1 | log.txt OPEN |
参数说明
常用参数
1 | --timefmt 时间格式 |
全部参数
建议通过 man inotifywait
命令查看文档中全部参数
1 | -h,–help |
可监听事件
- access 访问,读取文件。
- modify 修改,文件内容被修改。
- attrib 属性,文件元数据被修改。
- move 移动,对文件进行移动操作。
- create 创建,生成新文件
- open 打开,对文件进行打开操作。
- close 关闭,对文件进行关闭操作。
- delete 删除,文件被删除。
使用示例
以监听vue项目,发现有文件变化后,执行 npm run build
命令构建代码为例
假设vue项目文件目录为: /production/sites/vue-program
根据vue项目基本目录结构,则我们需要监听该目录下的src目录,且只监听文件变化的事件
1 | inotifywait /production/sites/vue-program/src #只监听src目录,因为package.json等文件在构建完成后也会被修改 |
以上为了方便阅读,对每个参数换行并加了注释,整理为一行如下:
1 | inotifywait /production/sites/vue-program/src -r --timefmt '%d/%m/%y %H:%M' --format "%T %f" -e MODIFY --exclude '^.*.swp$' |
运行可以观察是我们想要的效果,那我们监听到事件后加入构建代码到指令,创建shell文件 auto_build.sh
1 | !/bin/bash |
此处由于 -m
参数会监听多个文件,所以git一次提交可能会触发多个修改事件,因此没有使用 -m
,而是通过while
去触发inotifywait监听,然后等待在这里;而事件触发后再执行一遍 git pull
是因为第一个文件修改事件触发后,git未必将所有文件替换完,为保证npm run build
指令执行时代码全部更新,所以在此处又主动执行了一遍 git pull
之后就可以启动脚本了
1 | nohup /bin/bash auto_build.sh >> /tmp/auto_build.log 2>&1 |
这样,配合crontab定时拉取代码,当前端代码文件变化后,就会自动构建了,省去了每次手动操作的繁琐和遗漏。
示例二:
1 | /usr/bin/inotifywait -m -o log.txt --timefmt '%d/%m/%y/%H:%M' --format '%T %w %f' -e modify,delete,create,attrib var |
1 | nohup sh inotifywait.sh > /dev/null 2>&1 |
rsync
https://www.cnblogs.com/george-guo/p/7718515.html
简介
- Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。Rsync使用所谓的“Rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快
- Rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试,它在windows平台下也有相应的版本,如cwRsync和Sync2NAS等工具
原理
- Rsync本来是用于替代rcp的一个工具,目前由rsync.samba.org维护,所以rsync.conf文件的格式类似于samba的主配置文件;Rsync可以通过rsh或ssh使用,也能以daemon模式去运行
- 在以daemon方式运行时Rsync server会打开一个873 端口,等待客户端去连接。连接时,Rsync server会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,以后则就只需进行增量备份
特点
- 可以镜像保存整个目录树和文件系统;
- 可以很容易做到保持原来文件的权限、时间、软硬链接等;
- 无须特殊权限即可安装;
- 优化的流程,文件传输效率高;
- 可以使用rsh、ssh等方式来传输文件,当然也可以通过直接的socket连接;
- 支持匿名传输
参数
-r
表示递归,即包含子目录。注意,-r
是必须的,否则 rsync 运行不会成功。-a
参数可以替代-r
,除了可以递归同步以外,还可以同步元信息(比如修改时间、权限等)。由于 rsync 默认使用文件大小和修改时间决定文件是否需要更新,所以-a
比-r
更有用。- 如果不确定 rsync 执行后会产生什么结果,可以先用
-n
或--dry-run
参数模拟执行的结果。 --delete
参数:默认情况下,rsync 只确保源目录的所有内容(明确排除的文件除外)都复制到目标目录。它不会使两个目录保持相同,并且不会删除文件。如果要使得目标目录成为源目录的镜像副本,则必须使用--delete
参数,这将删除只存在于目标目录、不存在于源目录的文件。--exclude
参数:同步时排除某些文件或目录--exclude-from
参数:如果排除模式很多,可以将它们写入一个文件,每个模式一行--include
参数用来指定必须同步的文件模式,往往与--exclude
结合使用。
1 | rsync -r source destination |
-a
、--archive
参数表示存档模式,保存所有的元数据,比如修改时间(modification time)、权限、所有者等,并且软链接也会同步过去。--append
参数指定文件接着上次中断的地方,继续传输。--append-verify
参数跟--append
参数类似,但会对传输完成后的文件进行一次校验。如果校验失败,将重新发送整个文件。-b
、--backup
参数指定在删除或更新目标目录已经存在的文件时,将该文件更名后进行备份,默认行为是删除。更名规则是添加由--suffix
参数指定的文件后缀名,默认是~
。--backup-dir
参数指定文件备份时存放的目录,比如--backup-dir=/path/to/backups
。--bwlimit
参数指定带宽限制,默认单位是 KB/s,比如--bwlimit=100
。-c
、--checksum
参数改变rsync
的校验方式。默认情况下,rsync 只检查文件的大小和最后修改日期是否发生变化,如果发生变化,就重新传输;使用这个参数以后,则通过判断文件内容的校验和,决定是否重新传输。--delete
参数删除只存在于目标目录、不存在于源目标的文件,即保证目标目录是源目标的镜像。-e
参数指定使用 SSH 协议传输数据。--exclude
参数指定排除不进行同步的文件,比如--exclude="*.iso"
。--exclude-from
参数指定一个本地文件,里面是需要排除的文件模式,每个模式一行。--existing
、--ignore-non-existing
参数表示不同步目标目录中不存在的文件和目录。-h
参数表示以人类可读的格式输出。-h
、--help
参数返回帮助信息。-i
参数表示输出源目录与目标目录之间文件差异的详细情况。--ignore-existing
参数表示只要该文件在目标目录中已经存在,就跳过去,不再同步这些文件。--include
参数指定同步时要包括的文件,一般与--exclude
结合使用。--link-dest
参数指定增量备份的基准目录。-m
参数指定不同步空目录。--max-size
参数设置传输的最大文件的大小限制,比如不超过200KB(--max-size='200k'
)。--min-size
参数设置传输的最小文件的大小限制,比如不小于10KB(--min-size=10k
)。-n
参数或--dry-run
参数模拟将要执行的操作,而并不真的执行。配合-v
参数使用,可以看到哪些内容会被同步过去。-P
参数是--progress
和--partial
这两个参数的结合。--partial
参数允许恢复中断的传输。不使用该参数时,rsync
会删除传输到一半被打断的文件;使用该参数后,传输到一半的文件也会同步到目标目录,下次同步时再恢复中断的传输。一般需要与--append
或--append-verify
配合使用。--partial-dir
参数指定将传输到一半的文件保存到一个临时目录,比如--partial-dir=.rsync-partial
。一般需要与--append
或--append-verify
配合使用。--progress
参数表示显示进展。-r
参数表示递归,即包含子目录。--remove-source-files
参数表示传输成功后,删除发送方的文件。--size-only
参数表示只同步大小有变化的文件,不考虑文件修改时间的差异。--suffix
参数指定文件名备份时,对文件名添加的后缀,默认是~
。-u
、--update
参数表示同步时跳过目标目录中修改时间更新的文件,即不同步这些有更新的时间戳的文件。-v
参数表示输出细节。-vv
表示输出更详细的信息,-vvv
表示输出最详细的信息。--version
参数返回 rsync 的版本。-z
参数指定同步时压缩数据。
ssh模式
本地间同步
环境: 172.16.22.12
1 | mkdir src |
局域网间同步
1 | rsync -av source/ username@remote_host:destination |
环境: 172.16.22.11
1 | mkdir src |
局域网指定用户同步
1 | # --172.16.22.12 |
daemon模式
环境:192.168.22.11
服务启动方式
对于负荷较重的 rsync 服务器应该使用独立运行方式
1 | yum install rsync xinetd # 服务安装 |
对于负荷较轻的 rsync 服务器可以使用 xinetd 运行方式
1 | yum install rsync xinetd # 服务安装 |
rsync 协议
除了使用 SSH,如果另一台服务器安装并运行了 rsync 守护程序,则也可以用rsync://
协议(默认端口873)进行传输。具体写法是服务器与目标目录之间使用双冒号分隔::
。
1 | $ rsync -av source/ 192.168.122.32::module/destination |
注意,上面地址中的module
并不是实际路径名,而是 rsync 守护程序指定的一个资源名,由管理员分配。
如果想知道 rsync 守护程序分配的所有 module 列表,可以执行下面命令。
1 | $ rsync rsync://192.168.122.32 |
rsync 协议除了使用双冒号,也可以直接用rsync://
协议指定地址。
1 | $ rsync -av source/ rsync://192.168.122.32/module/destination |
ifconfig查看当前IP
1 | ifconfig | grep "inet " | grep -v 127.0.0.1 |