文件压缩与传输

  • 文件压缩与传输
  • 一、文件压缩
  • 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