zl程序教程

您现在的位置是:首页 >  系统

当前栏目

Linux远程传输命令scp、rsync(tar打包归档并在系统之间传输文件)

Linux文件打包系统命令 远程 之间 传输
2023-09-11 14:21:19 时间

tar 打包命令

tar -cvfz xxx.tar.gz  source_file (tar -cvfz 包名.tar.gz  源文件)         #以tar.gz方式打包并gz方式压缩
tar -xvfz xxx.tar.gz -C path (tar -xvfz xxx.tar.gz -C 目标路径)          #解压缩包

查看压缩包内容:tar -tvf xxx.tar.gz

-c --create				创建新的归档文件
-v --verbose 			可视化,显示详细的tar处理的文件信息的过程
-f --file 				要操作的文件名
-x  --extract 			解压文件
-z --gzip, --gunzip, --ungzip      通过 gzip 来进行归档压缩
-j  --bzip2       		通过 bzip2 来归档压缩文件
-t  --list 				表示查看文件,查看文件中的文件内容
-C --directory=DIR      解压文件至指定的目录,如果是解压到当前目录,可以不加-C

注意:使用tar命令,打包仅仅是打包,一般使用xxx.tar标识,打包压缩就是打包+压缩,一般使用xxxx.tar.gz标识。

cp 复制命令

cp命令格式:cp [-r] 源文件   目标位置         					# 复制目录需要加  -r

示例:
cp /root/redis-6.2.6/redis.conf  /etc/redis/				#复制文件
cp /root/redis-6.2.6/redis.conf  /etc/redis/redis.conf_bak	#复制并重命名
cp -r /root/redis-6.2.6/	/redis/							#复制目录要加-r表示级联复制目录

scp远程传输命令

scp命令可以用于不同Linux主机之间传输文件,其格式如下:

scp source_file user@IP:/路径   或 scp  user@IP:/路径/filenmame   /localpath/file

scp常用参数:

-r :表示递归复制整个目录
-v :详细方式显示输出
-P :如果更换了ssh的默认22端口,则需要使用-P来指定ssh端口,如 -P 1223

备注:scp在传输的时候也可以重命名文件。

scp命令常用于设置定时任务将打包压缩文件传输到备份服务器中去。
scp使用的ssh协议,也就是说sshd远程连接服务必须处于运行状态才能使用scp命令。
scp命令是全量复制文件到远程服务器上。

(1)从本地拷贝文件到远程服务器

#将本地/home/liu/文件夹下的mysql.cnf文件传输到远程服务器192.168.1.100的/root/目录下
scp /home/liu/mysql.cnf root@192.168.1.100:/root/              #注意IP后面是冒号加路径

(2)从远程服务器拷贝文件到本地

#将远程服务器192.168.1.100 root用户/etc/目录下的mysql.cnf文件传输到你本地登录的用户的/root/mysql/目录中。
scp root@192.168.1.100:/etc/mysql.cnf /root/mysql/

(3)查看远程服务器是否存在已传输的文件

#注意:需要输入远程主机对应的用户密码,除非Linux服务器之间设置了免密登录
ssh root@192.168.1.100 "ls -l /root/mysql/"

rsync命令和rsync命令服务

用rsync来传输文件,其有两种使用形式,一种是将rsync作为命令来使用,一种是将rsync作为服务来使用。下面讲解一下这两种使用方式。

rsync命令在系统之间同步文件

rsync命令主要实现在两个系统之间同步文件(当然也可以在本地同步),但rsync命令无法单独做到实时同步,可以与crontab 结合任务计划同步。没有rsync命令的可以安装一下:yum install rsync -y

语法格式:

rsync [选项] 源  目标路径

rsync常用参数:

-a			:归档模式,归档传输文件并保持文件原有属性
-A			:保持ACL策略
-v			:可视化,详细显示传输过程
-r			:对目录递归
-e			:指定所要使用的远程shell程序,默认为ssh,如果ssh端口改变,需使用 -e 'ssh -p 922' 这些来指定
-z 			:压缩,同步的时候先压缩再同步
--delete	:删除目标路径的多余文件,即让源于目录路径的文件高度一致

(1)本地系统不同目录之间同步

rsync -avz  源  目标路径
rsync -avz /usr/local/mysqldump/  /home/

注意一点:/xxx/xxx/源目录/ 源目录后面是否有/是不同的,有/表示同步的是该目录下的文件,没有/ 表示同步的是这个目录本身,如:

rsync -avz /usr/local/mysqldump/  /home/ 					#有/斜杠,把mysqldump目录下的所有文件同步到home目录下了
rsync -avz /usr/local/mysqldump  /home/  					#没有/斜杠,把mysqldump这个目录本身同步到home目录下了

rsync命令只同步修改过的文件,这说明rsync是增量同步的,这比scp命令节约资源,如下:

mkdoir /test/   /home/test/ 				#创建测试目录
touch  /test/file{1..5}						#创建测试文件
rsync -avz /test/  /home/test/				#有斜杠,表示同步目录下的所有文件,即将test目录下的file1-file5同步到 /home/test/	
echo "test1" >> /test/file/file1			#更改/test/file/file1和/test/file/file2文件内容
echo "test2" >> /test/file/file2
rsync -avz /test/  /home/test/				#再次同步,发现只同步了修改过的文件file1和file2

在这里插入图片描述
注意:本地源目录删除了某个文件后再同步,目标路径并不会同步删除文件,如果需要源删除文件,目标也要删掉,则需要加 --delete
在这里插入图片描述
在这里插入图片描述
(2)不同系统之间同步
注意:双方系统之间都必须安装rsync命令,不然同步会报错命令不存在的

rsync -avz  本地源目录  user@IP:目标路径
rsync -avz /usr/local/mysqldump/  root@192.168.1.100:/home/
rsync -avz -e 'ssh -p 922' /usr/local/mysqldump/  root@192.168.1.100:/home/		#-e指定ssh的端口

#结合crontab计划任务同步,需要先做免密登录,不然有输入密码步骤也会阻拦同步
* * * * * /usr/bin/rsync -avz /usr/local/mysqldump  root@192.168.158.129:/home/

rsync作为服务运行,在系统之间同步文件

参考《rsync结合inotify工具实现实时同步传输文件》https://blog.csdn.net/MssGuo/article/details/120799777