Rsync工具
rsync是一个用于数据传输和备份的强大工具,它提供了许多功能和选项,可以满足各种数据同步和备份需求。以下是rsync工具的详细说明:
1. 基本功能:
- 文件同步:
rsync用于在本地和远程系统之间同步文件和目录。它可以检测文件的变化并仅传输发生变化的部分,从而使同步过程更加高效。 - 远程传输:
rsync支持通过SSH协议进行加密的远程传输,保护数据的安全性。
2. 使用方法:
基本语法:
确保两台机器的网络通信正常 rsync [options] source destination示例:
rsync -avz /local/dir/ user@remote_host:/remote/dir/
3. 主要选项:
- -a, --archive: 以归档模式进行传输,保留文件的权限、所有者等信息。
- -v, --verbose: 显示详细的输出信息。
- -z, --compress: 在传输过程中压缩数据,减少传输时间和带宽占用。
- -r, --recursive: 递归地同步目录及其子目录。
- -u, --update: 仅传输源目录中更新的文件。
- -n, --dry-run: 模拟执行同步操作,显示将要执行的操作,但不实际执行。
- --delete: 删除目标目录中源目录不存在的文件。
4. 高级功能:
- 带宽限制:
--bwlimit选项可以限制rsync使用的带宽。 - 过滤规则: 可以使用
--include和--exclude选项指定需要或不需要传输的文件或目录。 - 增量备份:
rsync可以配合--link-dest选项实现增量备份,只传输变更的部分并在目标端创建硬链接。 - 远程复制:
rsync可以与ssh命令一起使用,通过SSH协议进行加密的远程复制。 - 进度监控: 使用
--progress选项可以显示传输进度。
5. 实际应用:
- 备份:
rsync常用于创建文件和目录的备份,并可定期执行增量备份。 - 数据同步: 可以将数据从一个目录同步到另一个目录,以确保两者之间的一致性。
- 远程复制: 可以通过SSH协议远程复制数据,用于数据迁移或远程备份。
rsync是一个功能强大的工具,具有灵活的选项和广泛的应用场景,可以满足各种数据同步和备份需求。
案例
生成大文件 ,快速生成500M文件
dd if=/dev/zero of=chaoge.txt bs=100M count=5
fallocate -l 100M yuchao-ubuntu.txt
rsync 是一个非常强大的文件同步工具,可以在本地或远程主机之间高效地同步文件和目录。在实际的运维工作中,rsync 可以用于许多场景,例如备份、文件同步、数据迁移等。以下是一些 rsync 在实际运维中常见的用法:
备份文件和目录: 使用 rsync 可以轻松地创建文件和目录的备份。你可以将本地文件备份到远程主机,或者将远程主机上的文件备份到本地。
rsync -avzP /local/directory/ user@remote_host:/remote/directory/这条命令将本地
/local/directory/目录中的所有文件和子目录同步到远程主机的/remote/directory/目录中。增量备份,清理式备份: rsync 支持增量备份,只同步源和目标之间有变化的文件,这样可以节省带宽和时间。你可以通过指定
--delete参数来删除目标目录中不存在于源目录中的文件。# 注意目录尾部的斜杠,务必要有 rsync -avzP --delete /root/test-rsync/ ubuntu@49.232.220.205:/home/ubuntu/远程文件同步: 通过 rsync,你可以在不同的远程主机之间同步文件。这在多台服务器之间的数据同步和备份中非常有用。
rsync -avzP user1@remote_host1:/directory/ user2@remote_host2:/directory/指定文件过滤规则: 有时候你可能只想同步特定类型的文件,或者排除某些文件或目录。你可以使用
--include和--exclude参数指定过滤规则。rsync -avz --include="*.txt" --exclude="*.log" /local/directory/ user@remote_host:/remote/directory/SSH加密传输: rsync 可以通过 SSH 加密传输数据,确保数据在传输过程中的安全性。
rsync -avz -e "ssh -p port_number" /local/directory/ user@remote_host:/remote/directory/显示同步过程: 如果你想查看 rsync 同步过程中的详细信息,可以使用
-v参数显示同步过程中的详细输出。rsync -avz -v /local/directory/ user@remote_host:/remote/directory/
这些只是 rsync 在实际运维中的一些常见用法。根据具体的需求,你还可以使用 rsync 的其他参数和功能来满足不同的需求,如速度控制、部分文件同步、删除源文件等。
注意网络通信关系
准备2个虚拟机,网络互通,可以互相收发数据
个人机器,云机器
本地机器数据 ,远程发送给 云机器,备份。
# 远程机器公网ip,可用,可以找到对方机器位置,rsync > ssh 22
rsync -avzP /root/* ubuntu@49.232.220.205:/home/ubuntu/
云机器数据,发到你本地机器?
rsync -avzP /root/* 地址怎么填?(个人电脑,没有固定可用ip,运营商没给你)
云机器 > 云机器之间通信(2个公网ip,可以通信)
服务端提供文件下载功能就行
# 当前目录下,提供文件索引,下载 http 服务
root@VM-8-7-ubuntu:~# python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
Rsyncd服务
c/s
server---rsyncd守护进程
客户端 rsync命令,换一个语法协议,和rsyncd服务通信
# rsync走ssh协议完成认证,进行数据通信
rsync -avzP /root/* ubuntu@49.232.220.205:/home/ubuntu/
# 走rsyncd服务账号密码认证
语法格式也不一样,客户端命令
Rsyncd 是 rsync 服务的守护进程版本,它允许通过 rsync 协议在网络上共享文件和目录。
与直接通过 SSH 进行 rsync 连接不同,rsyncd 服务以守护进程的形式运行在服务器上,监听一个指定的端口,等待客户端发起 rsync 连接。以下是关于 rsyncd 服务的详细说明:
rsync通信协议
rsyncd,即rsync守护进程模式下运行时,使用的通信协议基于TCP/IP。它是专为文件传输和同步设计的一个应用层协议,允许客户端和服务端之间有效地同步文件和目录。这种模式下,rsync 服务端监听一个TCP端口(默认端口是873),等待来自客户端的连接。
rsyncd 通信协议的主要特点:
- 基于TCP/IP:
rsyncd使用TCP作为传输层协议,确保了数据传输的可靠性。 - 效率高:协议专门优化了文件同步过程,通过仅传输文件差异部分(增量更新)来减少网络上的数据传输量。
- 模块化服务:
rsyncd允许服务端配置多个模块(module),每个模块对应服务端的一个目录,客户端可以指定与之同步的模块,实现灵活的数据同步和共享。
/crm
/erp
/mysql-data
可以定义为rsyncd服务不同的模块,备份不同的数据目而已。
- 认证和权限控制:可以配置简单的用户名和密码认证,以及基于主机地址的访问控制,增加同步过程的安全性。
- 支持多种同步选项:客户端可以通过不同的参数和选项来定制同步行为,例如排除特定文件、设置带宽限制、保留文件权限和时间戳等。
Rsyncd 服务的工作原理:
- 启动服务: 在服务器上启动 rsyncd 服务时,rsyncd 进程将会以守护进程的形式运行,并监听指定的 TCP 端口(默认端口号为 873)。
- 配置文件: rsyncd 的配置文件通常是
/etc/rsyncd.conf,在该文件中可以指定服务的各种参数,包括共享的目录、访问控制、日志等。 - 共享目录: 在配置文件中定义了共享目录后,rsyncd 将会对该目录进行共享,允许客户端连接并进行文件同步。
- 客户端连接: 客户端可以通过 rsync 协议连接到 rsyncd 服务。在连接时,客户端可以指定共享目录的路径以及其他参数,如传输速度、过滤规则等。
- 数据传输: 一旦客户端连接成功,数据传输就会开始。客户端会发送文件和目录的列表以及相关的同步请求,rsyncd 服务将会根据客户端的请求进行相应的操作,如发送文件、接收文件或删除文件等。
- 日志记录: rsyncd 服务会记录客户端连接和数据传输的日志信息。你可以通过配置文件指定日志记录的级别和位置。
Rsyncd 服务的优势:
- 性能: 相对于 SSH 连接模式,rsyncd 服务通常具有更好的性能,因为它不需要为每个连接创建新的加密通道。
- 简单配置: rsyncd 的配置相对简单,易于理解和管理。你可以通过编辑一个简单的配置文件来配置共享目录和访问控制。
- 支持匿名访问: 你可以配置 rsyncd 服务允许匿名访问,这样用户无需提供用户名和密码就可以连接并访问共享目录。
- 细粒度控制: 通过 rsyncd 的配置文件,你可以精确地控制对共享目录的访问权限、过滤规则等。
配置 rsyncd 服务的步骤
- 编辑
/etc/rsyncd.conf配置文件,定义共享目录和相关参数。 - 启动 rsyncd 服务:
rsync --daemon或者使用系统的服务管理工具启动。 - 配置防火墙允许对 rsyncd 端口的访问(默认端口为 873)。
- 在客户端使用 rsync 命令连接到 rsyncd 服务,并进行文件同步操作。
总的来说,rsyncd 服务提供了一种更加灵活和高效的文件同步解决方案,特别适用于需要频繁进行文件同步的场景,如备份、文件分发等。
部署模式
1.本地linux虚拟机
2.远程服务端上部署rsyncd守护进程,且提供某个目录的备份
3. 考虑网络关系
案例
部署 rsync 服务器 (rsyncd) 可以实现高效的文件同步和备份。以下是部署 rsyncd 的一般流程:
安装 rsync: 首先,在你的服务器上安装 rsync 软件。rsync 通常在大多数 Linux 发行版的软件仓库中都可以找到。你可以使用包管理工具如 apt、yum 或者 dnf 来安装 rsync。
例如,在 Ubuntu 或者 Debian 上,可以运行以下命令来安装 rsync:
sudo apt-get update sudo apt-get install rsync配置 rsyncd.conf: 创建并编辑 rsyncd 配置文件
rsyncd.conf。这个文件通常位于/etc/rsyncd.conf。在这个文件中,你可以指定 rsync 服务器的共享目录、权限、访问控制等配置。一个简单的示例配置如下:
rsyncd以yu普通用户运行,降低权限
uid = yu gid = yu use chroot = no max connections = 4 pid file = /var/run/rsyncd.pid lock file = /var/run/rsyncd.lock log file = /var/log/rsyncd.log [myDir] path = /yuchao-website comment = 超哥演示rsyncd服务需要备份的一个目录 read only = no list = yes auth users = yuchao secrets file = /etc/rsyncd.secrets这个配置中创建了一个名为
backup的共享目录,路径为/path/to/backup,允许客户端读写,同时可以列出目录内容。创建共享目录: 确保在服务器上创建了配置文件中指定的共享目录,并设置正确的权限。你可以使用
mkdir命令来创建目录,并确保对 rsyncd 用户有适当的读写权限。sudo mkdir -p /path/to/backup sudo chown -R nobody:nogroup /path/to/backup 创建一个密钥文件来存储用户名和密码。替换 username 和 password 为你自己的设置。 echo "yuchao:yuchao666" | sudo tee /etc/rsyncd.secrets # rsyncd服务要求,密码文件,只能user读写,其他角色无权限 sudo chmod 600 /etc/rsyncd.secrets启动 rsync 服务: 确保 rsync 服务已经启动,并且监听在默认的端口(873)上。你可以使用以下命令启动 rsync 服务:
sudo systemctl start rsync你也可以使用
systemctl enable rsync命令来设置 rsync 服务开机自启动。配置防火墙规则: 如果你的服务器启用了防火墙,确保允许来自客户端的 rsync 连接通过。默认情况下,rsync 使用 TCP 端口 873。你需要打开此端口以允许流量通过。
sudo ufw allow 873/tcp测试连接: 使用 rsync 客户端测试连接到 rsync 服务器,确保配置正确
。
云服务器端,注意打开防火墙,安全组的837 tcp端口``` 可以直接列出远程rsyncd模块下的文件内容 root@yu-ubuntu:~# rsync yuchao@49.232.220.205::myDir Password: drwxr-xr-x 4,096 2024/04/10 17:38:43 . -rw-r--r-- 0 2024/04/10 17:38:43 1.png -rw-r--r-- 0 2024/04/10 17:38:43 10.png -rw-r--r-- 0 2024/04/10 17:38:43 2.png -rw-r--r-- 0 2024/04/10 17:38:43 3.png -rw-r--r-- 0 2024/04/10 17:38:43 4.png -rw-r--r-- 0 2024/04/10 17:38:43 5.png -rw-r--r-- 0 2024/04/10 17:38:43 6.png -rw-r--r-- 0 2024/04/10 17:38:43 7.png -rw-r--r-- 0 2024/04/10 17:38:43 8.png -rw-r--r-- 0 2024/04/10 17:38:43 9.png root@yu-ubuntu:~#
也可以同步数据
rsync -avzP username@
rsync -avzP yuchao@49.232.220.205::myDir /test-rsync/
rsync -avzP --delete /test-rsync/ yuchao@49.232.220.205::myDir
设置密码文件,只写密码,以及权限设置
echo 'yuchao666' > /etc/client-rsync.pwd chmod 600 /etc/client-rsync.pwd
rsync -avzP --password-file=/etc/client-rsync.pwd --delete /test-rsync/ yuchao@49.232.220.205::myDir
通过以上步骤,你应该能够成功地部署一个 rsync 服务器,并开始使用 rsync 进行文件同步和备份。记得在配置 rsyncd 时保持安全意识,设置适当的权限和访问控制,以确保服务器的安全性。
# Inotify
Inotify 是 Linux 内核提供的一种文件系统监控机制,它允许应用程序监视文件系统上的文件和目录,以便及时获知文件系统中的更改情况。通过 Inotify,应用程序可以注册特定的文件或目录,然后监听它们的变化,如文件创建、修改、删除等操作,一旦这些事件发生,应用程序就能收到通知并做出相应的处理。
以下是 Inotify 的一些基本概念和特性:
1. **监控对象:** Inotify 允许应用程序监视文件系统上的文件和目录。可以指定单个文件、特定目录,甚至是整个文件系统。
2. **事件类型:** Inotify 可以监控文件和目录的多种事件,包括文件创建、修改、删除、移动、访问等。应用程序可以选择订阅感兴趣的事件类型。
3. **事件队列:** Inotify 将事件存储在一个事件队列中,应用程序可以使用系统调用来检索事件,并对其进行处理。如果事件队列已满,新的事件将被丢弃。
4. **事件标志:** 每个事件都有一个相关的事件标志,用于描述事件的类型和其他相关信息。例如,一个文件创建事件可能包含新文件的文件名、文件类型等信息。
5. **非递归监控:** 默认情况下,Inotify 监控对象的变化是非递归的,即不会监控子目录中的变化。但可以通过特定的选项来开启递归监控。
6. **持久性:** Inotify 的监控是持久性的,即使在监控对象不存在时也可以注册监控,当对象重新出现时,监控将自动生效。
7. **效率:** Inotify 是高效的,它使用了内核事件通知机制,因此对系统资源的消耗相对较低。
Inotify 在实际应用中非常有用,可以用于实现文件同步、监控文件系统变化、实时日志监控等场景。通过监听文件系统的变化,应用程序可以做出及时的响应,从而提高系统的效率和可靠性。
## inotify和rsync组合
Inotify 和 rsync 是两个在文件系统管理和文件同步方面起到不同作用的工具。它们可以结合使用,以实现更高效的文件同步和监控功能。
1. **Inotify:** Inotify 是 Linux 内核提供的一种文件系统监控机制,可以实时监视文件系统上的文件和目录的变化。它可以监控文件的创建、修改、删除、移动等操作,并及时通知注册的应用程序。在文件系统变化监控方面,Inotify 提供了高效的解决方案,可以用于实现实时日志监控、文件备份、自动化任务等功能。
2. **rsync:** rsync 是一个强大的文件同步工具,可以在本地或远程主机之间高效地同步文件和目录。它使用增量传输算法,只传输发生变化的部分,从而减少传输的数据量,提高了文件同步的效率。rsync 可以结合 SSH 协议进行加密传输,也可以在本地进行文件同步。
结合 Inotify 和 rsync,可以实现以下功能:
- **实时文件同步:** 使用 Inotify 监控文件系统的变化,当文件发生变化时,立即触发 rsync 命令进行文件同步,保持多台主机之间文件的实时同步。
- **备份和恢复:** 使用 Inotify 监控文件的变化,当文件发生修改或删除时,自动触发 rsync 命令进行备份,以确保数据的安全性和可靠性。
- **文件系统监控:** 使用 Inotify 实时监控文件系统的变化,当特定类型的文件发生变化时,触发预先设定的动作,如自动备份、发送通知等。
- **远程文件同步:** 结合 rsync 和 SSH,在远程主机之间进行安全的文件同步,通过 Inotify 监控文件系统变化,触发 rsync 命令进行实时同步。
综上所述,Inotify 和 rsync 可以相互结合,实现文件系统监控和实时文件同步的功能,为系统管理和文件管理提供了强大的工具。

## inotify结合rsync
将 `inotify` 与 `rsync` 结合使用可以自动化文件的同步过程。`inotify` 是 Linux 内核的一个特性,它可以监视文件系统的变化,并在发生变化时通知应用程序。结合 `rsync`,你可以创建一个实时同步系统,当源目录中的文件发生变化时,自动将变化同步到目标目录。
下面是一个基础教程,展示如何在 Ubuntu 系统上使用 `inotify-tools`(`inotify` 的工具集)与 `rsync` 结合,来实现文件的实时同步。
### 步骤 1: 安装必要的软件
首先,你需要在你的系统上安装 `rsync` 和 `inotify-tools`。打开终端,执行以下命令:
sudo apt update sudo apt install rsync inotify-tools
## 实时同步
以下是一个结合使用 Inotify 和 rsync 的简单案例:
假设我们有两台主机 A 和 B,我们希望在主机 A 上修改某个目录中的文件后,自动将修改同步到主机 B 上。
1. 在主机 A 上启动 Inotify 监控:
inotifywait -m -r /path/to/directory
这条命令将监控 `/path/to/directory` 目录及其子目录下的所有文件和目录的变化。`-m` 参数表示持续监控,`-r` 参数表示递归监控子目录。
1. 在主机 A 上,当 Inotify 检测到目录中的文件发生变化时,执行 rsync 命令同步文件到主机 B:
!/bin/bash
SOURCE_DIR="
无限循环,监控目录变化
while true; do
使用 inotifywait 监控源目录的变化
inotifywait -r -e modify,create,delete,move $SOURCE_DIR
目录发生变化后,使用 rsync 同步
rsync -avz --delete $SOURCE_DIR $DEST_DIR >> $LOG_FILE 2>&1 done
在这个示例中,当 Inotify 监测到 `/path/to/directory` 目录中的文件发生变化时,`inotifywait` 命令将会输出文件的路径、操作类型和文件名,然后通过管道传递给 `while` 循环。在循环中,我们执行 rsync 命令将修改后的文件同步到主机 B 的 `/remote/path/to/directory` 目录下。
这样,当主机 A 上的文件发生变化时,Inotify 会立即触发 rsync 命令,将修改同步到主机 B 上,实现了实时文件同步的功能。
### 执行脚本
chmod +x sync.sh
### 注意事项
- 这个脚本是一个基本示例,用于演示如何结合使用 `inotify` 和 `rsync`。根据你的实际需求,可能需要对其进行调整。
- `inotifywait` 默认情况下不会递归监控子目录。在上述示例中,`-r` 选项使其递归监控整个目录树。
- 在生产环境中,可能需要考虑使用更复杂的逻辑来处理大量的文件变化事件,或者优化 `rsync` 命令以减少资源消耗。
- 如果你打算在生产环境中使用这种方法,考虑将脚本作为服务运行,并监控其运行状态,以确保数据一致性。
这个简单的实时同步解决方案利用了 `inotify` 的实时监控能力和 `rsync` 的高效文件同步功能,适用于需要文件变化实时反映到另一位置的场景。
## inotify事件命令
Inotify 是 Linux 内核提供的文件系统监控机制,通过监控文件和目录的变化,可以及时获知文件系统中的操作,如文件的创建、修改、删除、移动等。在使用 Inotify 时,可以使用 `inotifywait` 命令来监听文件系统事件。
以下是一些常用的 `inotifywait` 命令及其说明:
1. **监听单个文件或目录的事件:**
inotifywait /path/to/file
此命令会监听指定文件或目录的所有事件。
1. **递归监听目录及其子目录的事件:**
inotifywait -r /path/to/directory
添加 `-r` 参数可以递归监听指定目录及其所有子目录的事件。
1. **指定监听的事件类型:**
inotifywait -e modify /path/to/file
通过 `-e` 参数可以指定要监听的事件类型。例如,`modify` 表示文件内容修改事件,`create` 表示文件创建事件,`delete` 表示文件删除事件等。多个事件类型可以用逗号分隔。
1. **持续监听文件系统的事件:**
inotifywait -m /path/to/directory
使用 `-m` 参数可以持续监听文件系统的事件,直到显式中断为止。
1. **指定监听超时时间:**
inotifywait -t 60 /path/to/directory ```
使用 -t 参数可以指定监听的超时时间(秒)。如果在指定的时间内没有事件发生,则命令自动退出。
这些是 inotifywait 命令的一些常见用法。通过结合不同的参数选项,可以灵活地实现对文件系统事件的监控和处理。
linux文件事件
Linux 文件事件指的是对文件系统中文件的各种操作的事件,这些操作包括文件的创建、修改、删除、移动等。在 Linux 系统中,可以使用 Inotify 机制来监控文件事件。
以下是常见的 Linux 文件事件:
- 创建(Create): 当文件或目录被创建时,触发创建事件。这包括在文件系统中新建文件、新建目录等操作。
- 修改(Modify): 当文件的内容被修改时,触发修改事件。这包括文件的写入、修改文件属性、修改文件权限等操作。
- 删除(Delete): 当文件或目录被删除时,触发删除事件。这包括在文件系统中删除文件、删除目录等操作。
- 移动(Move): 当文件或目录被移动或重命名时,触发移动事件。这包括文件的移动、重命名等操作。
- 访问(Access): 当文件被访问时,触发访问事件。这包括文件的读取、执行、查看文件属性等操作。
- 关闭写入(Close Write): 当文件被关闭并且数据已经被写入时,触发关闭写入事件。
- 关闭不可写(Close No Write): 当文件被关闭但未写入数据时,触发关闭不可写事件。
- 打开(Open): 当文件被打开时,触发打开事件。
- 移除自监控(Self-Delete): 当监控的文件被删除时,触发移除自监控事件。
这些是常见的 Linux 文件事件,通过监控这些事件,可以实现对文件系统变化的实时感知和处理。在 Linux 中,可以使用 Inotify 机制来监听文件事件,并在事件触发时执行相应的操作。
封装Inotify的工具
封装 Inotify 的工具可以帮助简化对文件系统变化的监控和处理。这些工具通常提供了更友好的界面和更便捷的操作方式,使得开发者能够更轻松地利用 Inotify 来构建文件监控系统或实现特定功能。
以下是一些常见的封装 Inotify 的工具:
- Watchman: Watchman 是 Facebook 开源的一个文件监控工具,它基于 Inotify 技术,提供了一套简单易用的 API,用于监控文件系统变化。Watchman 可以实时监控文件系统中的文件和目录的变化,并通过 JSON 格式的输出提供详细的事件信息。它支持跨平台运行,并提供了多种语言的客户端库,如 Python、Node.js 等。
- pyinotify: pyinotify 是 Python 的一个 Inotify 模块,它提供了一个高级的 API,用于监听文件系统事件并触发相应的回调函数。pyinotify 可以在 Python 程序中方便地实现对文件系统变化的监控和处理,它支持递归监控、多种事件类型、超时处理等功能。
- inotify-tools: inotify-tools 是 Linux 下一个常用的命令行工具集,它提供了一组命令行工具,用于监控文件系统事件。inotify-tools 包括了
inotifywait和inotifywatch两个主要命令,前者用于实时监控文件系统变化,后者用于统计文件系统事件的发生情况。这些工具可以方便地在 Shell 脚本中使用,实现文件监控和处理的功能。 - fsnotify: fsnotify 是 Go 语言的一个文件系统监控库,它提供了一套简单易用的 API,用于监听文件系统事件。fsnotify 可以在 Go 程序中方便地实现对文件系统变化的监控和处理,它支持递归监控、多种事件类型、跨平台运行等功能。
这些工具提供了不同语言和不同应用场景下对 Inotify 的封装,可以根据具体需求选择合适的工具来实现文件系统监控和处理功能。