1、安装rsync

一般linux系统默认是安装发了rsync,如果没有的话就需要手动安装
官网:https://rsync.samba.org/
下载地址:https://rsync.samba.org/ftp/rsync/
https://download.samba.org/pub/rsync/src/rsync-3.1.2.tar.gz

# 解压
tar zxvf rsync-3.2.4.tar.gz
cd rsync-3.1.3/
# 配置
./configure
# 编译及安装
make && make install

2、安装inotify

inotify安装在文件更新服务器,比如

2.1、inofity-tools下载地址

http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
https://github.com/inotify-tools/inotify-tools
inotify-tools 的详细介绍可以看:https://github.com/rvoicilas/inotify-tools/wiki

# 解压
cd /soft
tar zxvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
# 配置
./configure
# 编译及安装
make && make install

在通过kill杀死rsync进程的时候,还需要处理掉/var/run/rsync.pid文件

2.2、调整inotify内核参数(在客户端操作)

在linux内核中,默认的inotify机制提供给了三个调控参数:
cat /proc/sys/fs/inotify/max_queued_events (表示监控事件队列)(16384)
16384
cat /proc/sys/fs/inotify/max_user_instances (最多监控实例数)(128)
128
cat /proc/sys/fs/inotify/max_user_watches (每个实例最多监控文件数)(8192)
8192

当要监控的目录,文件数量较多或者变化频繁时,建议加大这三个参数的值
vim /etc/sysctl.conf
fs.inotify.max_queued_events = 99999999
fs.inotify.max_user_watches = 99999999
fs.inotify.max_user_instances = 65535

sysctl -p

3、本机文件夹同步

rsync -av --progress /etc/fstab /tmp/back

会看到/etc/fstab文件传输到/tmp/back的列表和速率,再运行一次会看到 sending incremental file list

上面需要考虑以下问题:
删除/etc/fstab文件不会同步删除/tmp/back/fstab,除非加入–delete选项
文件访问时间等属性、读写等权限、文件内容等有任何变动,都会被认为修改,目标目录下如果文件比源目录还新,则不会同步

源路径的最后是否有斜杠有不同的含义:有斜杠,只是复制目录中的文件;没有斜杠的话,不但要复制目录中的文件,还要复制目录本身

rsync /abc/opt
复制目录
rsync /abc/ /opt
复制目录中的文件(不复制目录)

3、远程服务器同步

在服务器间rsync传输文件,需要有一个是开着rsync的服务,而这一服务需要两个配置文件,说明当前运行的用户名和用户组,这个用户名和用户组在改变文件权限和相关内容的时候有用,否则有时候会出现提示权限问题。配置文件也说明了模块、模块化管理服务的安全性,每个模块的名称都是自己定义的,可以添加用户名密码验证,也可以验证IP,设置目录是否可写等,不同模块用于同步不同需求的目录。

3.1、认证两种方式

rsync-daemon
ssh

=====================

rsync-daemon认证:
在rsync-daemon认证方式下,默认监听tcp的873端口
在rsync-daemon认证下,rsync可以把密码写入到一个文件中。

注意:被同步端的rsync必须启动,配置文件。同步端可以不起动服务,但必须有这个应用。

=====================

ssh认证:

通过ssh隧道进行传输,类似于scp工具,同步操作不在局限于rsync中定义的同步文件夹,并且双方只要安装rsync,也不要双方启动rsync。

如:rsync -avz /root/test root@192.168.19.248:/root/

若rsync服务端SSH为非标准端口,可通过rsync的-e参数进行端口指定。使用方式如下:

rsync -avz /root/test -e ‘ssh -p1234’ root@192.168.19.248:/root/

注意:在使用rsync时,源服务器和目标服务器都必须安装rsync程序。

3.2、配置rsync文件

1.建立rsyncd.conf配置文件、独立的rsunc账号文件

配置文件rsyncd.conf需手动配置,语法类似于Samba配置,此配置文件分两段:全局配置段:1个,共享配置段:多个,可自定义,是以[SHARED_NAME] 定义的.认证配置auth users、secrets file,不加则为匿名
rsync账号文件采用“用户名:密码”的格式记录,每行一个用户记录独立的账号数据,不依赖系统账号

这里配置以socket方式传输文件,[tools]自定义的一个共享目录配置,指定了要同步的目录path, 授权用户,密码文件, 允许哪台服务器IP同步发送等, 配置文件中各个参数具体定义可以通过# man rsyncd.conf查看手册

vim /etc/rsyncd.conf
# Global Settings
uid = nobody     # rsync以什么用户身份启动,uid和gid设置成root时可以读取任何文件目录,但会带来安全隐患
gid = nobody     # rsync以什么组启动
use chroot = no   # 固定在同步目录
max connections = 0  # 最大连接数,0代表没有限制
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
log file = /var/log/rsyncd.log
# exclude = lost+found/     # 设置不同步的目录或文件,多个用空格隔开
# transfer logging = yes
timeout = 900
ignore nonreadable = yes
# dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2# Directory to be synced
[tools]          #同步模块名称,可以设置多个(这个模块就是待会儿对端写脚本的里面一个参数的名称)
path = /data     #需要同步的目录(准确的说是同步过来后放到哪里的目录路径)
ignore errors = no    #是否允许忽略错误
read only = no       #表示网络权限可写(本地控制真正可写)
write only = no
host allow = *   #白名单列表,多个用逗号隔开
host deny = 172.16.0.0/16    #黑名单列表,多个用逗号隔开
list = true    # 是否允许列出文件
uid = root   #这个共享是以root用户运行的, 这里的共享配置可以覆盖global的里面的配置
gid = root
auth users=jingming         #执行数据同步的用户名,可以设置多个用逗号隔开
secrets file=/etc/rsyncd.secrets      #用户认证配置文件,里面保存用户名称和密码
密码文件/etc/rsynced.secrets内格式为:
username:password
内容为明文,一行一个用户,密码。这里的密码和系统用户无关,是自定义设置的
这里定义的用户要和/etc/rsyncd.conf的auth users 对应
[root@localhost soft]# more /etc/rsyncd.secrets
jingming:123456
修改权限:权限必须600,不然GG
[root@localhost soft]# chmod 600 /etc/rsyncd.secrets

2.启用rsync服务

通过 --daemon独自提供服务:rsync --daemon
可以通过执行kill $(cat /var/run/rsyncd.pid)关闭服务#开机启动
echo "rsync --daemon --config=/etc/rsyncd.conf" >>/etc/rc.local
#立即运行服务端,其实这儿的配置文件位置就是默认的,可以不加--config
rsync --daemon --config=/etc/rsyncd.conf

# yum -y install xinetd
# chkconfig rsync on1.1为rsync提供配置文件
/etc/rsyncd.conf此配置文件分两段:
全局配置段:1个
共享配置段:多个,可自定义,是以[SHARED_NAME] 定义的1、2配置示例# Global Settings
uid = nobody
gid = nobody
use chroot
max connections = 10
strict modes = yes 严格模式
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log# Directory to be synced
[tools]
path = /data
ignore errors = yes 是否允许忽略错误
read only = no
write only = no
host allow = 172.16.0.0/16 白名单列表
host deny = *
list = true 是否允许列出文件?
uid = root 这个共享是以root用户运行的, 这里的共享配置可以覆盖global的里面的配置
gid = root
auth users=jingming
secrets file=/etc/rsyncd.secrets
这里配置以socket方式传输文件,[tools]自定义的一个共享目录配置,指定了要同步的目录path, 授权用户,密码文件, 允许哪天服务器IP同步发送等, 配置文件中各个参数具体定义可以通过# man rsyncd.conf
查看手册
密码文件/etc/rsynced.secrets内格式为:
username:password
内容为明文,一行一个用户,密码。这里的密码和系统用户无关,是自定义设置的
这里定义的用户要和/etc/rsyncd.conf的auth users 对应
修改权限:
# chmod 600 /etc/rsyncd.secrets确保除了root,任何人不能访问此文件
黑白名单此处需要注意:
(1)默认规则为允许访问,二者都不出现时
(2)只出现hosts allow:定义白名单;但没有被匹配到的由默认规则处理,即为允许
(3)只出现hosts deny:定义黑名单;出现在名单中的都被拒绝
(4)二者同时出现,先检查hosts allow,如果匹配就allow,否则,检查hosts deny 如果匹配则拒绝,如二者均无匹配,则使用默认的,即允许

5、rysnc参数

-a, --archive    归档模式,表示以递归方式传输文件,并保持所有文件属性,等价于 -rlptgoD (注意不包括 -H)
-v, --verbose 详细输出模式
-r, --recursive 对子目录以递归模式处理
-l, --links 保持软链接文件,加上这个参数,同步过来的文件会保持之前的软链接属性不变
-H, --hard-links 保持硬链接文件
-p, --perms 保持文件权限
-t, --times 保持文件时间信息
-g, --group 保持文件属组信息
-o, --owner 保持文件属主信息 (super-user only)
-D 保持设备文件和特殊文件 (super-user only)
-e, --rsh=COMMAND 指定替代 rsh 的 shell 程序
-z, --compress 在传输文件时进行压缩处理
--stats 给出某些文件的传输状态
--progress 在传输时显示传输过程
--timeout=TIME 同步过程中,IP超时时间,单位为秒
--exclude=PATTERN 指定同步时需要过滤掉的文件或子目录(即不需要同步过去的),后面直接跟不需要同步的单个文件名或子目录(不需要跟路径) ,过滤多个文件或子目录,就使用多个--exclude
--exclude-from=FILE    指定同步时需要过滤掉的文件或子目录,后面跟文件(比如/root/exclue.txt),然后将不需要同步的文件和子目录放到/root/exclue.txt下
--include=PATTERN 指定需要传输的文件匹配模式
--include-from=FILE    从 FILE 中读取包含规则
--copy-unsafe-links 拷贝指向SRC路径目录树以外的链接文件
--safe-links 忽略指向SRC路径目录树以外的链接文件(默认)
--existing 仅仅更新那些已经存在于接收端的文件,而不备份那些新创建的文件
--ignore-existing 忽略那些已经存在于接收端的文件,仅备份那些新创建的文件
-b, --backup 当有变化时,对目标目录中的旧版文件进行备份
--backup-dir=DIR 与 -b 结合使用,将备份的文件存到 DIR 目录中
--link-dest=DIR 当文件未改变时基于 DIR 创建硬链接文件
--delete 删除那些目标目录中有而源目录中没有的多余文件。这个是rsync做增量方式的全备份的最佳选择方案!!!!!
--delete-before 接受者在输出之前进行删除操作。即先将目标目录中文件全部删除,再将源目录文件拷贝过去。这是rsync保持目标目录跟源目录一致的方案!!!
--delete-after 在同步操作之后做比较,删除那些目标目录中有而源目录中没有的多余文件
--delete-excluded 删除目标目录中那些被该选项指定排除的文件
--ignore-errors 即使出现 I/O 错误也进行删除
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
-P  等价于 --partial --progress
--delay-updates 将正在更新的文件先保存到一个临时目录(默认为 “.~tmp~”),待传输完毕再更新目标文件
-q, --quiet 精简输出模式
-h, --human-readable 输出文件大小使用易读的单位(如,K,M等)
-n, --dry-run 显示哪些文件将被传输
--list-only 仅仅列出文件而不进行复制
--rsyncpath=PROGRAM 指定远程服务器上的 rsync 命令所在路径
--password-file=FILE 从 FILE 中读取口令,以避免在终端上输入口令,通常在 cron 中连接 rsync 服务器时使用
--version 打印版本信息
--port=PORT 指定其他的rsync服务端口
--log-format=formAT 指定日志文件格式
--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽,KBytes per second
--help 显示帮助信息
-4, --ipv4 使用 IPv4
-6, --ipv6 使用 IPv6
rsync命令的选项
-n: 同步测试, 不执行真正的同步过程
-v: 详细输出模式
-q: 静默模式, 不输出信息
-c: checksum,开启校验功能
-r: 递归复制
注意:rsync命令中,如果源路径是目录,且给出复制路径末尾含有/, 则会复制目录中的内容,而非目录本身,如果路径末尾没有/,则会同步目录本身及目录中的所有文件。
目标路径末尾是否有/无关紧要
eg:
# rsync /etc/yum.repo.d /tmp/test 此时源路径结尾不含/
则复制的是 yum.repo.d的文件夹本身及其内的所有文件
此时同步过去的目录结构为:/tmp/test/yum.repo.d
# rsync /etc/yum.repo.d/ /tmp/test 此时源路径结尾含有/
则复制的是/etc/yum.repo.d下所有的文件到/tmp/test/下
-a:归档, 保留文件的原有属性
-p: 保留文件权限(rwx)
-t: 保留文件时间戳
-l: 保留符号链接
-g: 保留属组
-o: 保留属主所以 -a相当用与 -rptlgo
-D: 保留设备文件
-e ssh: 使用ssh作为传输承载
-z: 压缩后传输--progress: 显示进度条--stats: 显示如何执行压缩和传输

6、Inotify参数

1、inotify 可以监视的文件系统事件包括:
IN_ACCESS,即文件被访问
IN_MODIFY,文件被 write
IN_ATTRIB,文件属性被修改,如 chmod、chown、touch 等
IN_CLOSE_WRITE,可写文件被 close
IN_CLOSE_NOWRITE,不可写文件被 close
IN_OPEN,文件被 open
IN_MOVED_FROM,文件被移走,如 mv
IN_MOVED_TO,文件被移来,如 mv、cp
IN_CREATE,创建新文件
IN_DELETE,文件被删除,如 rm
IN_DELETE_SELF,自删除,即一个可执行文件在执行时删除自己
IN_MOVE_SELF,自移动,即一个可执行文件在执行时移动自己
IN_UNMOUNT,宿主文件系统被 umount
IN_CLOSE,文件被关闭,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
IN_MOVE,文件被移动,等同于(IN_MOVED_FROM | IN_MOVED_TO)
注:上面所说的文件也包括目录。

7、rsync实例配置,远程同步

A机配置,作为服务端,数据可上传下载

[root@localhost soft]# vi /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode# See rsyncd.conf man page for more options.# configuration example:# uid = nobody
# gid = nobody
# use chroot = yes
# max connections = 4
# pid file = /var/run/rsyncd.pid
# exclude = lost+found/
# transfer logging = yes
# timeout = 900
# ignore nonreadable = yes
# dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2# [ftp]
#        path = /home/ftp
#        comment = ftp export area[appcs]
path = /soft/1
uid = root
gid = root
auth users = cs
secrets file = /etc/rsyncd.secrets
read only=no
~

B机客户端执行同步

测试1

rsync -avzP /tmp/1 rsync://cs@192.168.14.152/appcs

结果是将B机/tmp下面的1文件夹同步到了A机的/soft/1目录

测试2

rsync -avzP /tmp/1/ rsync://cs@192.168.14.152/appcs
结果是将B机/tmp/1文件夹下面的内容同步到了A机的/soft/1目录

测试3

rsync -avp rsync://cs@192.168.14.152/appcs /tmp/1
将A机房/soft/1文件数据同步到B机/tmp/1文件夹下
下面的命令效果是一样的,前面两个测试一样有对应的命令
rsync -avp cs@192.168.14.152::appcs /tmp/1
上面是daemon的方式,都是通过rsync配置的内容,比如上面的cs用户是虚拟的,appcs是模块名称。下面是ssh的方式,需要使用实际的用户名和路径。不需要启动rysnc daemon。
rsync -avp root@192.168.14.152:/soft/1/ /tmp/1

8、inotify+rsync实例,远程同步

测试目的,A机/data目录下文件变化,同步到B机的/data/www1目录

B机作为rsync服务端,接受A机的文件同步

1、rsync配置

[root@pgsql1 1]# more /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode# See rsyncd.conf man page for more options.# configuration example:# uid = nobody
# gid = nobody
# use chroot = yes
# max connections = 4
# pid file = /var/run/rsyncd.pid
# exclude = lost+found/
# transfer logging = yes
# timeout = 900
# ignore nonreadable = yes
# dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2# [ftp]
#        path = /home/ftp
#        comment = ftp export areauid = root
gid = root
use chroot = no
max connections = 100
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
[web1]
path = /data/www1/
read only = no
list = no
auth users = www1
secrets file = /etc/www1.pwd

uid gid使用root用户,不然无权限写入,或者单独授权,这里为方便,直接用的root。

2、创建密码文件

[root@pgsql1 1]# ls -l /etc/www1.pwd
-rw------- 1 root root 12 5月  10 15:34 /etc/www1.pwd
[root@pgsql1 1]# more /etc/www1.pwd
www1:111111
[root@pgsql1 1]#

启动服务
rsync --daemon

A机为rsync客户端,部署inotify,文件更新服务器

1、安装rsync和inotify,参考上面1和2章节。
2、配置密码文件,和服务端密码对应

[root@localhost soft]# more /etc/www1.pwd
111111

2、配置inotify监控脚本
vi rsync.sh

#!/bin/bash
src_dir=/data  #需要实时同步的文件夹源路径,注意这里目录后要记得带上/,不带/会将data文件夹也同步过去,我们只是需要data下面的文件而已。
des_host=192.168.14.152  #B机IP,rsync服务IP
des_dir=web1     #B同步的模块名称
des_user=www1    #B rsync同步的用户名/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format  '%T %w%f' -e modify,delete,create,attrib ${src_dir} | while read file
dorsync -vzrtopg --delete --progress ${src_dir} ${des_user}@${des_host}::${des_dir} --password-file=/etc/www1.pwd &&echo "${file} was rsynced" >> /tmp/rsync.log 2>&1  #记录同步日志echo "---------------------------------------------------------------------------"
done

-r, 即–recursive,表示递归查询目录。
-q, 即–quiet,表示打印出监控事件。
-e, 即–event,通过此参数可以指定要监控的事件,常见的事件有modify、delete、create、attrib等
–timefmt:指定时间的输出格式
–format:指定变化文件的详细信息
%m  月份(以01-12来表示)。
%d  日期(以01-31来表示)。
%y  年份(以00-99来表示)。
%w:表示发生事件的目录
%f:表示发生事件的文件
%T:使用由-timefmt定义的时间格式
%e:表示发生的事件

3、启动监控脚本

[root@localhost soft]# chmod +x rsync.sh
[root@localhost soft]# nohup ./rsync.sh &
[1] 35304
[root@localhost soft]# nohup: ignoring input and appending output to ‘nohup.out’

4、测试

9、inotify+rsync实例,本地同步

A机实现不同目录同步,从/tmp/1同步到/tmp/2目录
1、安装了rsync和inotify工具
2、配置inotify监控脚本

#!/bin/bash
src_dir=/data  #需要实时同步的文件夹源路径,注意这里目录后要记得带上/,不带/会将data文件夹也同步过去,我们只是需要data下面的文件而已。
des_host=192.168.14.152  #B机IP,rsync服务IP
des_dir=web1     #B同步的模块名称
des_user=www1    #B rsync同步的用户名/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format  '%T %w%f' -e modify,delete,create,attrib ${src_dir} | while read file
do
#   rsync -vzrtopg --delete --progress ${src_dir} ${des_user}@${des_host}::${des_dir} --password-file=/etc/www1.pwd &&rsync -av --progress ${src_dir} /tmp/2 &&echo "${file} was rsynced" >> /tmp/rsync.log 2>&1  #记录同步日志echo "---------------------------------------------------------------------------"
done

只是把rsync的命令和目录替换下即可,然后启动监控脚本

10、开机启动

#rsync开机启动
echo “rsync --daemon --config=/etc/rsyncd.conf” >>/etc/rc.local
#inotify开机启动
echo “bash /soft/rsync.sh &” >>/etc/rc.local

在在CentOS7中,官方将/etc/rc.d/rc.local 的开机自启的权限禁止掉了,他为了兼容性,设置了这个,但是并不默认启动.如果需要的话.执行以下代码
chmod +x /etc/rc.d/rc.local
就可以开机自启了.

参考https://www.dandelioncloud.cn/article/details/1419660984435937282

https://www.cnblogs.com/jokerxtr/p/14802077.html

linux文件实时同步(rsync+inotiy)相关推荐

  1. Inotify+Rsync实现linux文件实时同步

    公司一套系统的同步使用的donotify,不能实现子目录的实时同步,通过查资料,发现inotify可以实现子目录的实时同步,以下为笔记. 一.介绍 Inotify 是文件系统事件监控机制,作为 dno ...

  2. Linux文件实时同步--inotify + rsync + pyinotify

    本文介绍下用法.注意事项.pyinotify多进程实现数据同步 Inotify的出身: Linux 桌面系统与 MAC 或 Windows 相比有许多不如人意的地方,为了改善这种状况,开源社区提出用户 ...

  3. linux文件同步方法,inotify + rsync实现linux文件实时同步

    一.项目需求:服务器A的数据目录内容变化后,改变要实时更新到多台服务器B C 的相关目录. 二.解决方法: 1.多台服务器做为rsync服务器端,服务器A做为rsync客户端,使用rsync命令同步数 ...

  4. 【Linux下Inotify + Rsync文件实时同步】

    Linux下Inotify + Rsync文件实时同步 一.使用前言* 随着公司业务的发展,单web服务器不能满足用户的访问,需要增加多台web服务器实现均衡高可用性访问.为了统一各web服务器之间的 ...

  5. linux 文件双向同步,Linux文件双向实时同步rsync

    在线QQ客服:1922638 专业的SQL Server.MySQL数据库同步软件 echo"/usr/sersync/sersync2-d-o/usr/sersync/confxml.xm ...

  6. rsync+sersync实现数据文件实时同步

    rsync+sersync实现数据文件实时同步 使用rsync+sersync,实现nfs与backup服务器间实时数据同步 一.数据同步工具介绍 rsync是一款开源的.快速的.多功能的.可实现全量 ...

  7. inotify用法简介及结合rsync实现主机间的文件实时同步

    一.inotify简介 inotify是Linux内核2.6.13 (June 18, 2005)版本新增的一个子系统(API),它提供了一种监控文件系统(基于inode的)事件的机制,可以监控文件系 ...

  8. Linux与Windows之间实现文件实时同步的方案

    记linux与Windows之间实现文件实时同步的方案 近日,数据分析部提了个需求说要让一台linux的机器上的文件同步到一台Windows机器的某个目录下,由于本姑娘从来没有碰到过这种问题,于是上网 ...

  9. MySQL :rsync+sersync文件实时同步

    文章目录 1. rsync是什么 rsync+sersync文件实时同步 一:环境 二:备份服务器操作 三:数据源服务器操作 安装rsync客户端软件 安装sersync工具,实时触发rsync进行同 ...

  10. 关于解决多台linux服务器间的文件实时同步问题

    关于解决多台linux服务器间的文件实时同步问题 参考文章: (1)关于解决多台linux服务器间的文件实时同步问题 (2)https://www.cnblogs.com/fps2tao/p/1003 ...

最新文章

  1. springMVC 前后台日期格式传值解决方式之一(共二) @DateTimeFormat的使用和配置...
  2. poj 3662 Telephone Lines(好题!!!二分搜索+dijkstra)
  3. python 从入门到实践_Python编程从入门到实践日记Day15
  4. [C++]宏定义#define A B C
  5. [python 学习] requests 库的使用
  6. fir滤波器课程设计matlab,Matlab课程设计---FIR数字滤波器
  7. requests请求报字符编码异常信息
  8. 大数据分析五步法流程顺序
  9. 2016年零售业CIO的七大革命性挑战
  10. 微信浪漫告白小程序java_厉害了,微信小程序可以这样表白,还怕他(她)拒绝你?...
  11. php 图片上加文字,PHP语言之给图片添加文字(支持中文)//PHP函数
  12. linux开机自动启动sh脚本
  13. Android怎么设置快捷键,Android Studio的快捷键设置方法
  14. 消防信号总线原理_消防报警联动系统中,什么叫回路总线什么叫RS-485总线?
  15. python 多态 知乎_Python鸭子类型和多态
  16. iris莺尾花matplotlib实验柱状图饼图直方图
  17. 手写体数字识别的两种方法
  18. 学习编程,要不要去IT培训机构?自学和去培训班哪种方法更合适?
  19. UCK将信任建立在安全之上 让生态价值源远流长
  20. 6-7 拆分实数的整数与小数部分 (15 分)

热门文章

  1. 在屏幕上绘制圆形函数
  2. 【单例模式、多例模式、工厂模式和枚举】
  3. PC网站接入微信登陆流程一:微信开放平台账号注册和开发者资质认证
  4. 【开源】百度中文依存句法分析工具DDParser重磅开源,快来体验一下吧
  5. win10教育版激活部分方法
  6. linux,centos7环境下,安装RabbitMQ
  7. QQ群红包裂变吸粉引流 玩法解析实战操作
  8. 淘宝价格带卡位公式是什么?如何定价?
  9. qt界面之comboBox控件的三种基本用法
  10. Javascript AJAX回调函数传递参数