9.1.0: 打包压缩命令 - tar,gzip,bzip2,xz等



1. gzip

作用:压缩及解压缩文件,压缩文件后缀名为”.gz”

语法: gzip [参数] filename

参数:

压缩文件内容查看命令:zcat file.gz

PS:

  • gzip压缩和解压后
  • 默认源文件会消失
  • 不支持压缩目录
# 用-c保留源文件
gzip -c pass > pass.gz
du -sh pass*
8.0K    pass
4.0K    pass.gz

# 同时压缩或解压缩多个文件
gzip t1 t2 t3 t4 t5 t6
ls t*
t1.gz  t2.gz  t3.gz  t4.gz  t5.gz  t6.gz

gzip -d t1.gz t2.gz t3.gz t4.gz t5.gz t6.gz
ls t*
t1  t2  t3  t4  t5  t6

2. bzip2

作用:压缩及解压缩文件,压缩文件后缀名为”.bz2”

语法: bzip2 [参数] filename

参数:

压缩文件内容查看命令:bzcat file.bz2

PS:

  • 压缩效果好过gzip,但效果资源更多,压缩效果并不绝对;
  • bzip2压缩及解压缩后,默认源文件消失;
  • 不支持压缩目录
# 用-k参数保留源文件
bzip2 -k pass
du -sh pass*
8.0K    pass
4.0K    pass.bz2

# 同时压缩或解压缩多个文件
bzip2 t1 t2 t3 t4 t5 t6
ls t*
t1.bz2  t2.bz2  t3.bz2  t4.bz2  t5.bz2  t6.bz2

bzip2 -d t1.bz2 t2.bz2 t3.bz2 t4.bz2 t5.bz2 t6.bz2
ls t*
t1  t2  t3  t4  t5  t6

3. xz

作用:压缩及解压缩文件,后缀名为”.xz”

安装方法:yum install -y xz

语法:xz [参数] filename

参数:

压缩文件内容查看命令:xzcat file.xz

PS:

  • xz压缩及解压缩后,默认源文件消失;
  • 不支持压缩目录;
  • 支持压缩多个文件

4. zip/unzip

作用:压缩及解压缩文件,后缀名为”.zip”

安装方式:yum install -y zip/unzip(需要分别安装)

语法:

参数:

PS:

  • 不会删除源文件;
  • 多用于windows和linux互传文件
  • 可同时压缩多个文件
# -m参数压缩时会删除源文件
zip -m t1.zip t1
  adding: t1 (stored 0%)
ls t1
ls: cannot access t1: No such file or directory

# -v查看压缩文件内容
unzip -v t.zip
Archive:  t.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
       0  Stored        0   0% 12-02-2014 22:32 00000000  t1
       0  Stored        0   0% 12-02-2014 22:32 00000000  t2
      98  Defl:N       12  88% 12-02-2014 23:45 828c4283  t3
       0  Stored        0   0% 12-02-2014 22:35 00000000  t4
       0  Stored        0   0% 12-02-2014 22:37 00000000  t5
       0  Stored        0   0% 12-02-2014 22:37 00000000  t6
--------          -------  ---                            -------
      98               12  88%                            6 files

# -d参数删除压缩文件内的指定文件
zip -d t.zip t1 t2
deleting: t1
deleting: t2

unzip -v t.zip
Archive:  t.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
      98  Defl:N       12  88% 12-02-2014 23:45 828c4283  t3
       0  Stored        0   0% 12-02-2014 22:35 00000000  t4
       0  Stored        0   0% 12-02-2014 22:37 00000000  t5
       0  Stored        0   0% 12-02-2014 22:37 00000000  t6
--------          -------  ---                            -------
      98               12  88%                            4 files

# 压缩目录必须加-r,才可以压缩目录内容
tree a
a
└── a.txt

0 directories, 1 file

# 不加-r压缩目录
zip a.zip a
  adding: a/ (stored 0%)

unzip -v a.zip
Archive:  a.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
       0  Stored        0   0% 05-04-2016 05:56 00000000  a/
--------          -------  ---                            -------
       0                0   0%                            1 file

# 加-r压缩目录
zip -r a.zip a
  adding: a/ (stored 0%)
  adding: a/a.txt (stored 0%)

unzip -v a1.zip
Archive:  a1.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
       0  Stored        0   0% 05-04-2016 05:56 00000000  a/
       0  Stored        0   0% 05-04-2016 05:56 00000000  a/a.txt
--------          -------  ---                            -------
       0                0   0%                            2 files

5. tar

作用:将目录或文件打包的工具,后缀名为”.tar”
语法:tar [参数] file
参数:

ps:

  • tar命令会覆盖文件,不会提示
  • 参数前面的-可加可不加,强烈建议养成加-的习惯
  • gzip和bzip2单独不可对目录压缩,但是配合打包可以压缩目录。
  • 不管是打包还是解包,原来的文件是不会删除的,但它会覆盖当前已经存在的文件或者目录。
## 基础用法
# -c打包,-t查看包内容,-f紧跟压缩包名称
tar -czf t.tar.gz t1 t2 t3 t4
tar -tzf t.tar.gz
t1
t2
t3
t4

# -x解压包,-C制定解压目录
tar -xzf t.tar.gz -C tardir
ls tardir
t1  t2  t3  t4

## --exclude的用法
ls |xargs -i cp {} {}.bak
ls |xargs -i cp {} {}.log
ls
t1      t1.bak.log  t2      t2.bak.log  t3      t3.bak.log
t1.bak  t1.log      t2.bak  t2.log      t3.bak  t3.log

# 指定文件排除
tar -czf b.tar.gz t1 t2 t3 --exclude t3
tar -tzf b.tar.gz
t1
t2
# 利用通配排除以".log"结尾的,通配用法中需要用双引号哦
tar -czf a.tar.gz ./* --exclude "*.log"
tar -tzf a.tar .gz
./t1
./t1.bak
./t2
./t2.bak
./t3
./t3.bak

## 不常用用法
# 去除绝对路径(为了安全,避免tar解压覆盖目录)
# 打包/etc目录内容,会提示去除了根绝对路径
tar -czf q.tar /etc/*
tar: Removing leading '/' from member names
# -P是改变相对路径为绝对路径,危险,慎用。


## tar解压覆盖文件研究
# 第一种情况:
# tar命令使用时忘记写压缩包名称,产生的文件覆盖
cat t1
line 1

cat t2
line 1
line 2

tar -cvf t1 t2
t2
cat t1
t20000644000000000000000000000001612712424445010026 0ustar  rootrootline 1
line 2

# 第二种情况:
# tar解压文件时,会自动覆盖解压目录下的同名文件
cat t1
line 1

cat t2
line 1
line 2

tar cvf t.tar t1 t2
t1
t2

echo "new line" >> t1

cat t1
line 1
new line

tar xvf t.tar
t1
t2

cat t1
line 1