[ Content contribution] 【Linux分享】文件压缩与传输
Tofloor
poster avatar
废物头子
deepin
2023-12-08 23:06
Author

文件压缩与传输

  • 文件压缩与传输
    • 一、文件压缩
      • tar选项
      • tar操作
    • 二、文件传输
      • (1)scp传输
      • (2)sftp传输
      • (3)rsync传输

一、文件压缩

跟windows一样,在Linux下一样需要压缩文件和解压缩包。在Linux中。我们把多个文件打包成一个文件,称为存档。但是我们通俗还是说压缩文件或者压缩包。使用tar命令可以来管理压缩文件。

tar选项

tar命令选项划分成不同的操作,其中包括一般选项和压缩选项。

操作选项

选项 作用
-c--create 创建压缩包
-x--extract 解压压缩包
-t--list 查看压缩包内容

一般选项

选项 作用
-v--verbose 详细信息。显示操作的文件有哪些
-f--file= 文件名。此选项后必需跟要使用或常见的文件名
-p--preserve-permissions 在解压缩是保留文件和目录的权限。

压缩选项

选项 作用
-z--gzip 使用gzip压缩方式(.tar.gz)
-j--bzip2 使用bzip2压缩方式(.tar.bz2)
-J--xz 使用xz压缩方式(.tar.xz)

tar操作

创建一个压缩包
[root@rhce opt]# touch file{1..3}
[root@rhce opt]# ls
file1  file2  file3
[root@rhce opt]# tar -cf file.tar file1 file2 file3
[root@rhce opt]# ls
file1  file2  file3  file.tar
注:创建tar压缩包,如果出现同名,会直接覆盖,不会提供警报。在生产环境中切记要先检查有无同名压缩包。
要创建压缩包。必需能够读取这些文件。如果没有读取权限,tar命令会忽略没有权限的文件,以及没有读取和执行权限的目录。
部分高级权限(如ACL和SElinux)不会自动保存到压缩包中,需要使用-x选项。

查看压缩包里面的内容
[root@rhce opt]# tar -tf file.tar 
file1
file2
file3

解压一个压缩包
[root@rhce opt]# mkdir backup
[root@rhce opt]# cd backup/
[root@rhce backup]# tar -tf /opt/file.tar 
file1
file2
file3
[root@rhce backup]# ls
[root@rhce backup]# tar -xf /opt/file.tar 
[root@rhce backup]# ls
file1  file2  file3

默认情况下,从压缩包中解压文件,不会暴露文件的权限,需要在解压的时候使用p选项。

二、文件传输

(1)scp传输

scp是OpenSSH套件的一部分,可以将文件从远程系统复制到本地,或者从本地复制到远程系统。scp使用ssh服务器进行身份验证,并在数据传输之前进行加密。远程位置的格式为 [user@]host:/path,当没有指定用户名时,则使用当前的本地用户名。

将本地文件/etc/yum.repos.d/local.repo复制到远程系统上。

[root@rhce ~]# scp /etc/yum.repos.d/local.repo 192.168.211.20:/etc/yum.repos.d/
The authenticity of host '192.168.211.20 (192.168.211.20)' can't be established.
ED25519 key fingerprint is SHA256:GY1+lg2p5HUnJ97i4xh24Lv2DrWCLGKyxu5bnMBGjpQ.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.211.20' (ED25519) to the list of known hosts.
root@192.168.211.20's password: 
local.repo                                                                         100%  152   263.3KB/s   00:00 

将远程系统上的/etc/yum.repos.d/local.repo复制到本地。

[root@rhce ~]# scp 192.168.211.20:/etc/yum.repos.d/local.repo /etc/yum.repos.d/
root@192.168.211.20's password: 
local.repo                                                                         100%  152   110.8KB/s   00:00  

当复制的对象为一个目录的时候需要使用 -r选项

[root@rhce ~]# scp -r /etc/yum.repos.d 192.168.211.20:/etc/
root@192.168.211.20's password: 
redhat.repo                                                                        100%  358   530.5KB/s   00:00  
local.repo                                                                         100%  152   340.0KB/s   00:00  

(2)sftp传输

sftp是以交互方式从远程系统上下载或上传文件。同样是先进行安全身份验证,并将数据加密进行传输。与scp一样,使用 [user@]host来标识目标系统和用户。交互式sftp会话接受各种命令,这些命令在远程文件系统上运行的方式与在本地文件系统上相同,如ls、cd、mkdir、rmdir和 pwd。put 命令将文件上载到远程系统。get 命令从远程系统下载文件。exit 命令可退出 sftp 会话。

将本地的/etc/hosts文件上传到目标系统,将目标系统的/etc/passwd保存到本地。

[root@rhce ~]# sftp 192.168.211.20
root@192.168.211.20's password: 
Connected to 192.168.211.20.
sftp> put /etc/host
host.conf  hostname   hosts  
sftp> put /etc/hosts /opt/
Uploading /etc/hosts to /opt/hosts
hosts                                                                              100%  179   289.6KB/s   00:00   
sftp> get /etc/passwd /root/
Fetching /etc/passwd to /root/passwd
passwd                                                                             100% 2551     2.1MB/s   00:00  
sftp> exit
[root@rhce ~]# ll passwd 
-rw-r--r--. 1 root root 2551 Aug 22 11:09 passwd

(3)rsync传输

rsync命令与scp一样都可以在本地和远程系统中复制文件,不同的是scp命令是将内容全部复制,而rsync会通过算法来同步已更改的文件部分,来保证数据量最小化。

rsync的优点就是可以在本地和远程之间安全而高效地复制文件。虽然首次目录同步的用时与复制操作大致相同,但在之后的同步只需要通过网络复制差异部分,从而大幅加快更新的速度。

rsync有一个重要的选项 -n,用于执行空运行。对执行命令时所发生情况的模拟。空运行显示了在命令正常运行时,rsync所以进行的更改。在生产环境中先执行空运行,可以避免重要文件被删除或者覆盖。

常用选项

选项 作用
-v--verbose 显示详细信息
-a--archive 启用存档模式,以保留文件的大部分特征。
-l--links 同步符号链接
-p--petms 保留权限
-t--times 保留时间戳
-g--group 保留所有组
-o--owner 保留拥有人
-D--devices 同步设备文件
-H--hard-links 保留硬链接
-A--acls 保留ACL权限
-X--xattrs 保留SElinux上下文

要保留文件属性,必需是root用户。如果目标为远程系统,则以root身份进行验证。如果目标是本地,则必须以root身份运行命令。

将本地的 /var/log同步到远程系统的/tmp目录

[root@rhce ~]# rsync -a /var/log 192.168.211.20:/tmp
root@192.168.211.20's password: 

将远程系统的 /var/log同步到本地

[root@rhce ~]# rsync -a 192.168.211.20:/var/log /tmp
root@192.168.211.20's password: 

注意:rsync命令在源目录名称中是否存在尾斜杠非常重要。它将决定同步到目标中的是目录,还是目录中的内容。

[root@rhce tmp]# rsync -a /var/log /tmp/text
[root@rhce tmp]# ls text
log
[root@rhce tmp]# rsync -a /var/log/ /tmp/text1
[root@rhce tmp]# ls text1
anaconda           cron-20230810        maillog            secure-20230803       vmware-network.5.log
audit              cron-20230817        maillog-20230803   secure-20230810       vmware-network.6.log
boot.log           cups                 maillog-20230810   secure-20230817       vmware-network.7.log
boot.log-20230814  dnf.librepo.log      maillog-20230817   speech-dispatcher     vmware-network.8.log
boot.log-20230815  dnf.log              messages           spooler               vmware-network.9.log
boot.log-20230817  dnf.rpm.log          messages-20230803  spooler-20230803      vmware-network.log
boot.log-20230818  firewalld            messages-20230810  spooler-20230810      vmware-vgauthsvc.log.0
boot.log-20230819  gdm                  messages-20230817  spooler-20230817      vmware-vmsvc-root.log
boot.log-20230821  hawkey.log           nginx              sssd                  vmware-vmtoolsd-root.log
boot.log-20230822  hawkey.log-20230815  private            tallylog              vmware-vmusr-root.log
btmp               hawkey.log-20230822  qemu-ga            tuned                 wtmp
btmp-20230801      httpd                README             vmware-network.1.log
chrony             insights-client      rhsm               vmware-network.2.log
cron               kdump.log            samba              vmware-network.3.log
cron-20230803      lastlog              secure             vmware-network.4.log


本人不才,在deepin论坛分享了一些自己在Linux学习过程中的一些知识积累,在分享的同时也在论坛中学习到了很多知识。现在想去拉起一个群聊,来分享知识,希望大家都能加入进来,分享自己所擅长的知识,本人也会在群里分享Linux,网络,docker,mysql等知识,同时也希望各位大佬能够帮助在下,完善自己的分享中的不足。

群号;751639288

Reply Favorite View the author
All Replies
废物头子
deepin
2023-12-08 23:07
#1

欢迎大家能够加入群聊,来一起分享与进步。

Reply View the author
yanjuner
Super Moderator
2023-12-08 23:08
#2

感谢分享

Reply View the author
阿尼樱奈奈
Moderator
2023-12-08 23:11
#3

like

Reply View the author
TSAC
deepin
2023-12-08 23:28
#4

rsync 贼好用,大家务必掌握呀joy

Reply View the author
废物头子
deepin
2023-12-08 23:36
#5
It has been deleted!
废物头子
deepin
2023-12-08 23:45
#6

1893541abdcade33278694023300fc2.jpg

Reply View the author
晚秋(lateautumn)
Moderator
2023-12-09 00:08
#7

每次看废物头子的帖子,都能涨很多知识joy

Reply View the author
废物头子
deepin
2023-12-09 00:46
#8
晚秋(lateautumn)

每次看废物头子的帖子,都能涨很多知识joy

可以加入技术分享群,大家一起来分享知识

Reply View the author
晚秋(lateautumn)
Moderator
2023-12-09 01:50
#9
废物头子

可以加入技术分享群,大家一起来分享知识

我是一个不懂技术的深迷joy

Reply View the author