常用的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-Agent1
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 |