文件的压缩与打包
1. Linux系统常见的压缩命令
Linux环境中,压缩文件名大多是 : 『*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2』
Linux的扩展名没作用,之所以要加上扩展名是因为不同命令使用的压缩技术并不相同,当下载到某个压缩档时,自然就需要知道该文件是由哪种压缩命令所制作出来的,好用来对照著解压缩。
1.1 gzip zcat
gzip 可以解开 compress, zip 与 gzip 等软件所压缩的文件。gzip 所创建的压缩档为 *.gz 的档名.
cat可以读取纯文字档,zcat可以读取纯文字档被压缩后的压缩档。
gzip [-cdtv#] 档名
zcat 档名.gz
# 范例1:将etc/sudo.config 复制到 /tmp
[root@centos /]# cd /tmp
[root@centos tmp]# cp /etc/sudo.conf .
[root@centos tmp]# gzip -v sudo.conf
sudo.conf: 52.2% -- replaced with sudo.conf.gz
[root@centos tmp]# ll /etc/sudo.conf /tmp/sudo*
-rw-r-----. 1 root root 1786 Sep 30 2020 /etc/sudo.conf
-rw-r-----. 1 root root 882 Aug 1 11:22 /tmp/sudo.conf.gz
[root@centos tmp]# zcat sudo.conf.gz
#
# Default /etc/sudo.conf file
#
# Format:
# Plugin plugin_name plugin_path plugin_options ...
# Path askpass /path/to/askpass
# Path noexec /path/to/sudo_noexec.so
# Debug sudo /var/log/sudo_debug all@warn
# Set disable_coredump true
#
# Sudo plugins:
..........
1.2 bzip2 bzcat
[root@www ~]# bzip2 [-cdkzv#] 档名
[root@www ~]# bzcat 档名.bz2
选项与参数:
-c :将压缩的过程产生的数据输出到萤幕上!
-d :解压缩的参数
-k :保留原始文件,而不会删除原始的文件喔!
-z :压缩的参数
-v :可以显示出原文件/压缩文件的压缩比等资讯;
-# :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!
2. 打包命令
gzip、bzip等命令基本都只能针对单一文件来进行压缩。虽然 gzip 与 bzip2 也能够针对目录来进行压缩, 不过,这两个命令对目录的压缩指的是『将目录内的所有文件 “分别” 进行压缩』的动作!
tar:将多个文件或目录包成一个大文件的命令功能.
# 打包和压缩
tar [-j | -z] [cv] [-f创建的档名] filename
# 查看档名
tar [-j|-z] [tv] [-f 创建的档名]
# 解压缩
tar [-j|-z] [xv] [-f 创建的档名] [-C 目录]
选项与参数:
-j:透过bzip2的支持进行压缩/解压缩:此时档名最好为*tar.bz2
-z:透过gzip的支持进行压缩/解压缩:此时档名最好为*tar.gz
-c:创建打包文件
-t:查看打包文件的内容含有哪些档名,重点在查看档名
-x:解打包或解压缩的功能,可以搭配 -C指定在特定目录解开
-f filename 指定要被处理的档名
-C 目录 用在解压缩,用于指定解压目录
-p:保留备份数据的原本权限与属性
-P:保留绝对路径,允许备份数据中含有根目录存在
# 范例1 使用tar加入 -j 或 -z的参数备份 /etc/目录
[root@centos liusongle]# tar -zpcv -f /root/etc.tar.gz /etc
# 此警告信息的含义是
tar: Removing leading `/' from member names
/etc/
/etc/fstab
/etc/crypttab
/etc/mtab
/etc/resolv.conf
/etc/fonts/
......
[root@centos liusongle]# tar -jpcv -f /root/etc.tar.bz2 /etc
# 范例2 查阅tar文件的数据内容(可查看档名),与备份档名是否有根目录意义
# 加上-v选项会列出详细的文件权限/属性
[root@centos liusongle]# tar -jt -f /root/etc.tar.bz2
etc/
etc/fstab
etc/crypttab
etc/mtab
etc/resolv.conf
etc/fonts/
etc/fonts/conf.d/
etc/fonts/conf.d/65-0-khmeros-base.conf
......
# 可以看到每个档名都没有了根目录,主要是为了安全,比如将压缩的文件在temp解开,解压的档名就会编程/tmp/etc/xxx,如果不拿掉的话,解压缩后的档名就会是绝对路径,解压的文件就会被放到/etc/xxx下,这样原本的数据就会被覆盖。
如果需要备份根目录到tar文件中,可以使用-P这个选项。
[root@centos liusongle]# tar -Ppjc -f /root/etc.and.root.tar.bz2 /etc
[root@centos liusongle]# tar -jt -f /root/etc.and.root.tar.bz2
# 有根目录
/etc/
/etc/fstab
/etc/crypttab
/etc/mtab
/etc/resolv.conf
/etc/fonts/
/etc/fonts/conf.d/
# 范例3 解压缩
# 解压缩
[root@centos liusongle]# tar -jxv -f /root/etc.tar.bz2
# 解压到指定文件夹下
[root@centos liusongle]# tar -jxv -f /root/etc.tar.bz2 -C /tmp
# 范例4 仅解开单一文件的方法
#(1)利用-t参数找到档名,假设解开shadow文件
[root@centos liusongle]# tar -ztv -f /root/etc.tar.gz | grep 'shadow'
-rw-r--r-- root/root 214 2020-10-16 03:24 etc/pam.d/sssd-shadowutils
---------- root/root 865 2023-07-30 14:32 etc/gshadow
---------- root/root 1403 2023-07-30 14:32 etc/shadow
---------- root/root 1435 2023-07-30 14:32 etc/shadow-
---------- root/root 879 2023-07-30 14:32 etc/gshadow-
# (2)将该文件解开,语法格式如下
[root@centos liusongle]# tar -zxv -f /root/etc.tar.gz etc/shadow
etc/shadow
# 范例4 打包某目录,但不包含该目录下的某些文件
tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc* \
> --exclude=/root/system.tar.bz2 /etc /root
# 范例5:备份比某个时刻还要新的文件
-newer:后面的日期包含mtime和ctime
-newer-mtime:仅仅只是mtime
# (1)找出比/etc/passwd还要新的文件
[root@centos liusongle]# find /etc -newer /etc/passwd
/etc
/etc/resolv.conf
/etc/group
/etc/gshadow
/etc/shadow
/etc/subgid
/etc/subuid
/etc/sysconfig/network-scripts
/etc/sysconfig/network-scripts/ifcfg-ens33
/etc/cups
/etc/cups/subscriptions.conf.O
/etc/cups/subscriptions.conf
/etc/tuned/active_profile
/etc/tuned/profile_mode
[root@centos liusongle]# ll /etc/passwd
-rw-r--r--. 1 root root 2493 Jul 30 14:32 /etc/passwd
# (2)使用tar命令进行打包
[root@centos liusongle]# tar -jcv -f /root/etc.newer.than.passwd.tar.bz2 --newer-mtime="2023/07/30" /etc/*
tar: Option --newer-mtime: Treating date `2023/07/30' as 2023-07-30 00:00:00
tar: Removing leading `/' from member names
/etc/abrt/
tar: /etc/abrt/abrt-action-save-package-data.conf: file is unchanged; not dumped
tar: /etc/abrt/abrt.conf: file is unchanged; not dumped
tar: /etc/abrt/gpg_keys.conf: file is unchanged; not dumped
/etc/abrt/plugins/
tar: /etc/abrt/plugins/xorg.conf: file is unchanged; not dumped
tar: /etc/abrt/plugins/oops.conf: file is unchanged; not dumped
tar: /etc/abrt/plugins/vmcore.conf: file is unchanged; not dumped
tar: /etc/abrt/plugins/python.conf: file is unchanged; not dumped
tar: /etc/abrt/plugins/CCpp.conf: file is unchanged; not dumped
tar: /etc/adjtime: file is unchanged; not dumped
tar: /etc/aliases: file is unchanged; not dumped
tar: /etc/aliases.db: file is unchanged; not dumped
/etc/alsa/
......
#(3)显示出文件即可
[root@centos liusongle]# tar -jtv -f /root/etc.newer.than.passwd.tar.bz2 | grep -v '/$'
-rw-r----- root/lp 415 2023-08-01 11:16 etc/cups/subscriptions.conf.O
-rw-r----- root/lp 111 2023-08-01 14:15 etc/cups/subscriptions.conf
-rw-r--r-- root/root 1080 2023-07-30 14:32 etc/group
-rw-r--r-- root/root 1098 2023-07-30 14:32 etc/group-
---------- root/root 865 2023-07-30 14:32 etc/gshadow
---------- root/root 879 2023-07-30 14:32 etc/gshadow-
-rw-r--r-- root/root 2493 2023-07-30 14:32 etc/passwd
-rw-r--r-- root/root 2542 2023-07-30 14:32 etc/passwd-
-rw-r--r-- root/root 74 2023-08-01 14:14 etc/resolv.conf
---------- root/root 1403 2023-07-30 14:32 etc/shadow
---------- root/root 1435 2023-07-30 14:32 etc/shadow-
-rw-r--r-- root/root 104 2023-07-30 14:32 etc/subgid
-rw-r--r-- root/root 127 2023-07-30 14:32 etc/subgid-
-rw-r--r-- root/root 104 2023-07-30 14:32 etc/subuid
-rw-r--r-- root/root 127 2023-07-30 14:32 etc/subuid-
-rw-r--r-- root/root 311 2023-07-31 11:29 etc/sysconfig/network-scripts/ifcfg-ens33
-rw-r--r-- root/root 14 2023-08-01 14:14 etc/tuned/active_profile
-rw-r--r-- root/root 5 2023-08-01 14:14 etc/tuned/profile_mode
-
基本名称:tarfile,tarball
仅仅打包(『 tar -cv -f file.tar 』)的文件称为tarfile
如果还有进行压缩的支持(『 tar -jcv -f file.tar.bz2 』),就称之为tarball
-
特殊应用 :利用管线命令与数据流
在 tar 的使用中,有一种方式最特殊,那就是透过标准输入输出的数据流重导向(standard input/standard output), 以及管线命令 (pipe) 的方式,将待处理的文件一边打包一边解压缩到目标目录去。
tar -cvf - /etc | tar -xvf -
完整备份工具:dump,restore
dump
dump除了可以备份整个文件系统之外,还可以指定等级