Linux 文件的压缩与打包

文件的压缩与打包

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除了可以备份整个文件系统之外,还可以指定等级

  • 20
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值