linux's docs

9.1.0: 打包&压缩-基础


1. gzip

作用:压缩及解压缩文件,压缩文件后缀名为".gz"
语法: gzip [参数] filename
参数:

  • -c 将源文件做标准输出,源文件保留
  • -n n为数字代表压缩级别,默认为6(1-9),1最快,9压缩比最好
  • -d 解压缩的参数

压缩文件内容查看命令: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 参数:

  • -d 解压缩参数
  • -k 压缩及解压缩时都保留源文件

压缩文件内容查看命令: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
参数:

  • -d 解压缩参数
  • -c 将源文件做标准输出,源文件保留
  • -k 压缩及解压缩时都保留源文件

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

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

用法举例:同上


4. zip/unzip

作用:压缩及解压缩文件,后缀名为".zip"
安装方式:yum install -y zip/unzip(需要分别安装)
语法:

  • 压缩文件
    zip file.zip file
  • 解压缩
    unzip file.zip

参数:

  • -m "move"压缩源文件并删除
  • -b 跟path,指定压缩过程临时使用的文件夹,并不是说要把压缩文件放在那里
  • -d "delete"从压缩文件内删除指定文件(zip -d file.zip deletefile1 deletefile2)
  • -r 压缩目录(zip -r dir.zip dir/) 压缩文件内容查看命令:unzip -v file.zip

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
参数:

  • 主参数

    • -c 表示建立包
    • -x 表示拆包
    • -t 查看包
  • 次要参数

    • -v 显示打包过程
    • -f 后面跟包文件路径及包名称 -f后面必须紧跟路径及名称,中间有空格,此参数一般放在最后面
    • --exclude 可以在打包的时候,排除某些文件或者目录: tar -czvf 1.tar.gz --exclude 1.txt dir/ 排除多个文件或者目录: tar -czvf 1.tar.gz --exclude 1.txt --exclude 123/ dir/
    • -h (--dereference),打包软连接指向的文件而不是打包软连接本身
    • --hard-dereference,打包硬链接指向的文件而不是硬链接本身
    • -P 原本默认的是相对路径,加上-P后是绝对路径
  • 解压缩相关参数

    • -z 表示打包的同时使用gzip工具将其压缩,后缀名为".tar.gz"
    • -j 表示打包的同时使用bzip2工具将其压缩,后缀名为".tar.bz2"
    • -J 表示打包的同时使用xz工具将其压缩,后缀名为".tar.xz"
    • -C 制定解压目录

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

Contents