文件压缩与传输
- 文件压缩与传输
- 一、文件压缩
- tar选项
- tar操作
- 二、文件传输
- (1)scp传输
- (2)sftp传输
- (3)rsync传输
一、文件压缩
跟windows一样,在Linux下一样需要压缩文件和解压缩包。在Linux中。我们把多个文件打包成一个文件,称为存档。但是我们通俗还是说压缩文件或者压缩包。使用tar命令可以来管理压缩文件。
tar选项
tar命令选项划分成不同的操作,其中包括一般选项和压缩选项。
操作选项
选项 | 作用 |
| 创建压缩包 |
| 解压压缩包 |
| 查看压缩包内容 |
一般选项
选项 | 作用 |
| 详细信息。显示操作的文件有哪些 |
| 文件名。此选项后必需跟要使用或常见的文件名 |
| 在解压缩是保留文件和目录的权限。 |
压缩选项
选项 | 作用 |
| 使用gzip压缩方式(.tar.gz) |
| 使用bzip2压缩方式(.tar.bz2) |
| 使用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所以进行的更改。在生产环境中先执行空运行,可以避免重要文件被删除或者覆盖。
常用选项
选项 | 作用 |
| 显示详细信息 |
| 启用存档模式,以保留文件的大部分特征。 |
| 同步符号链接 |
| 保留权限 |
| 保留时间戳 |
| 保留所有组 |
| 保留拥有人 |
| 同步设备文件 |
| 保留硬链接 |
| 保留ACL权限 |
| 保留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