一、scp文件传输命令
scp命令:实现远程文件传输(文件的上传与文件的下载)
但是在实际的工作环境中,我们经常需要Linux操作系统与Linux操作系统之间实现文件的传输。这个功能主要就是通过scp命令来实现的。
scp实现文件上传
:# scp [选项] 本地文件路径 远程服务器的用户名@远程服务器的IP地址:远程文件的存储路径
-r:递归,针对文件夹
scp实现文件下载
基本语法:# scp [选项] 远程服务器的用户名@远程服务器的IP地址:远程文件的地址 本地文件存储路径
-r:递归针对文件夹
注意:如果修改了ssh端口 则需要加-p选项 指定端口
二、SSH免密登录
秘钥对的认证(免密登录工作原理)
假设现在有ssh客户端、ssh服务器端各一台
第一步:首先在客户端生成一对密钥对(公钥私钥)
第二步:通过网络把客户端刚刚生成的公钥发送到需要免密的服务端,追加在免密登录账号的家目录下的authroized_keys文件中
第三步:客户端向服务端发起登录请求,服务端根据authroized_keys文件中保存的公钥进行比对,如果找到了对应客户端的公钥,则对比成功。成功后会用此公钥随机生成一个字符串加密后返回给客户端
第四步:客户端收到服务端传送过来的加密密文后用本地的私钥解密把解密的结果传输回服务端
第五步:服务端收到后对比刚才生成的随机字符串,如果一致,则返回成功的结果给客户端
SSH免密登录的具体实现:
生成密钥对的命令:# ssh-keygen (命令输入之后一直按回车即可)
然后就是把公钥发送到服务端:# ssh-copy-id -i 服务端账号名@服务端ip地址
到此,SSH免密就配置成功了
可以测试 # ssh 服务端账号名@服务端ip地址
三、Linux下数据同步服务RSYNC
rsync概述:
sync:同步操作,刷新文件系统缓存,强制将修改过的数据块写入磁盘,并且更新超级块。
async:异步操作,将数据先放到缓冲区,再周期性(一般是30s)的去同步到磁盘。
rsync 远程同步:remote synchronous
rsync特点:
1.可以镜像保存整个目录树和文件系统
2.可以保留原有的权限(permission,mode),owner,group,时间(修改时间,modify time),软硬链接,文件acl,文件属性(attributes)信息等
3.传输效率高,使用同步算法,只比较变化的(增量备份)
4.支持匿名传输,方便网站镜像;也可以做验证,加强安全
rsync与scp区别
两者都可以实现远程同步,但是相对比而言,rsync能力更强
① 支持增量备份
② 数据同步时保持文件的原有属性
RSYNC的基本语法:# rsync [选项]
实际工作中,rsync主要使用-a、-v以及-e三个选项,重点记忆即可
-a :归档模式,递归的方式传输文件,并保持文件的属性
-v :详细模式输出
-e :指定要执行的远程shell命令,如果更改了SSH的默认端口必须使用此项rsync -e ‘ssh -p 10086’
RSYNC作为命令之本地文件同步(类cp)
假定我们现在有2个文件 /linux1 /linux2
把/linux1目录中的所有文件拷贝到/linux2目录中
: # rsync -av /linux1/ /linux2/
把/linux1整个目录拷贝到/linux2目录中
: # rsync -av /linux1 /linux2/
注意文件后面加了/ 表示把目录下的文件拷贝过去 没有加则表示直接把整个目录完整的拷贝过 但是通过-R选项:不管加不加"/",都会将源数据的绝对路径一起同步 :# rsync -avR /linux1/ /linux2/
–delete:删除目标目录里多余的文件
–delete可以保证源路径与目标路径中的文件高度一致
:# rsync -av --delete /linux1/ /linux2/
RSYNC作为命令之远程文件同步(类scp)
上传基本语法:# rsync -av 本地文件路径 远程服务器的用户名@远程服务器的IP地址:目标存储路径
下载基本语法:# rsync -av 远程服务器的用户名@远程服务器的IP地址:远程文件路径 本地存储路径
注意:rsync作为一个命令,则其底层就是基于SSH服务。首先要验证SSH的正确性,然后才能实现文件的同步。如果不想使用密码可以基于SSH免密操作
RSYNC作为系统服务
假设现在有一台代码服务器和一台备份服务器
创建代码目录以及测试代码文件
:# mkdir -p /app/java_project
在Code服务器中搭建RSYNC服务
第一步:创建一个/etc/rsyncd.conf文件:# touch /etc/rsyncd.conf
第二步:更改配置信息:# vim /etc/rsyncd.conf
[app] 标签很重要,调用时就是基于这个标签的!
path = /app/java_project/
log file = /var/log/rsyncd.log
第三步:启动RSYNC : # systemctl start rsyncd
在备份服务器端创建备份目录以及同步脚本
第一步:创建备份目录: # mkdir /backup/app1_java -p
第二步:测试Code服务器端的RSYNC服务是否可以正常连接
:# rsync -a root@ip地址::
第三步:创建rsync.sh脚本文件实现定时同步
:# vim rsync.sh
#!/bin/bash
rsync -av root@10.1.1.10::app /backup/app1_java/ &>/dev/null
:# chmod +x rsync.sh
第四步:编写计划任务,每天凌晨的1:03同步代码 :# crontab -e
03 01 * * * /root/rsync.sh
RSYNC+INOTIFY工具实现代码实时同步
RSYNC+INOTIFY实时同步:不需要配置RSYNC服务,然后其会监控代码文件夹的状态,如果一旦发现了这个文件夹有变化,则自动进行代码同步备份
第一步:上传inotify工具到/root目录下,然后编译安装
第三步:编写inotify.sh脚本,监测/app/java_project项目目录代码的变化
:# vim inotify.sh
#!/bin/bash
/usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib,move /app/java_project |while read events
do
rsync -a --delete /app/java_project/ 10.1.1.100:/backup/app1_java/
echo “date +%F\ %T
出现事件$events” >> /var/log/rsyncd.log 2>&1
done
第四步:添加x可执行权限,然后在后台调用这个sh脚本(要求其一直运行下去):# chmod +x inotify.sh
:# ./inotify.sh &
如何中止这个脚本?
使用jobs命令+kill命令
1.# jobs => 显示后台正在运行的脚本
2.# kill %后台程序的编号