zoukankan      html  css  js  c++  java
  • Linux 笔记

    博客地址:http://www.moonxy.com

    一、前言

    在 Linux 系统中,文件的后缀名没有实际的意义,加或者不加都无所谓。但是为了便于区分,我们习惯在定义文件名时加一个后缀名,比如常见的归档文件 .gz,归档压缩文件 .tar.gz 等,特别对于压缩文件,最好加上后缀名,这样方便判断压缩文件是由那种压缩工具所压缩,而后才能去正确地解压缩这个文件。打包和压缩虽然经常同时出现,但是两者却各不相同,打包是指将一大堆文件或目录什么的变成一个总的文件,压缩则是将一个大的文件通过一些压缩算法变成一个小文件。

    二、打包归档

    tar 是一个打包工具,可以把目录或文件打包成一个文件,它将所有文件归档成一个大文件整体,方便复制或者移动。命令格式为:tar [-zjxcvfpP] filename 目录或文件,此命令选项前的"-"可以省略。tar 命令可以用来压缩打包单文件、多个文件、单个目录、多个目录,使用 tar 命令打包后原文件不会删除

    -z:表示同时使用 gzip 压缩;
    -j:表示同时使用 bzip2 压缩;
    -J:表示同时使用 xz 压缩;
    -x:表示解包或者解压缩;
    -t:表示查看 tar 包里的文件;
    -c:表示建立一个 tar 包或者压缩包;
    -v:表示可视化,即显示打包的内容;
    -f:表示后面需要跟文件名,即 "-f filename",表示归档后的文件名为 filename,或者解包文件名为 filename。如果使用了多个参数时,-f 参数一定要写到参数列表的最后;
    -p:使用原文件的原来属性(属性不会依据使用者而变),恢复字段到它们的原始方式,忽略现有的用户权限屏蔽位(umask)。 加了 -p 之后,tar 进行解压后,生成的文件的权限,是直接取自 tar 包里面文件的权限(不会再使用该用户的 umask 值进行运算),那么不加 -p 参数,将还要再减去 umask 的值(位运算的减),但是如果使用 root 用户进行操作,加不加 -p 参数都一样;
    -P:不剥离起始路径的“/”目录,可以使用绝对路径来压缩。一般情况下,待压缩的目录如果是一个绝对路径,压缩后会将根目录符号/去掉,这样,在解压时,得到的目录结构是以当前目录为基础目录的,如果在压缩时加上-P,则解压时还是以根目录为基础目录;
    -r:向压缩归档文件末尾追加文件;
    -u:更新原压缩包中的文件;
    --exclude file:在打包或压缩的过程中,不要将 file 打包在内。
    不管是打包还是解包,原来的文件是不会删除的,而且它会覆盖当前已经存在的文件或者目录。

    打包:tar -cvf filename 文件或目录

    [root@ryan linux]# ls -l
    total 28
    -rw-r--r--. 1 root root 13368 Mar 18 17:48 install.log
    drwxr-xr-x+ 2 root root  4096 Dec  3 13:35 test
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    [root@ryan linux]# tar -cvf test1.tar test1
    test1/
    test1/cp1.txt
    [root@ryan linux]# ls -l
    total 40
    -rw-r--r--. 1 root root 13368 Mar 18 17:48 install.log
    drwxr-xr-x+ 2 root root  4096 Dec  3 13:35 test
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    -rw-r--r--. 1 root root 10240 Mar 18 21:11 test1.tar

    解包:tar -xvf filename

    [root@ryan linux]# tar -tf test1.tar
    test1/
    test1/cp1.txt
    [root@ryan linux]# rm -rf test1
    [root@ryan linux]# ls -l
    total 36
    -rw-r--r--. 1 root root 13368 Mar 18 17:48 install.log
    drwxr-xr-x+ 2 root root  4096 Dec  3 13:35 test
    -rw-r--r--. 1 root root 10240 Mar 18 21:11 test1.tar
    [root@ryan linux]# tar -xvf test1.tar
    test1/
    test1/cp1.txt
    [root@ryan linux]# ls -l
    total 40
    -rw-r--r--. 1 root root 13368 Mar 18 17:48 install.log
    drwxr-xr-x+ 2 root root  4096 Dec  3 13:35 test
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    -rw-r--r--. 1 root root 10240 Mar 18 21:11 test1.tar

    三、压缩工具

    Linux 中 compress 命令是一个相当古老的 Unix 档案压缩命令,压缩后的档案会加上一个 .Z 延伸档名以区别未压缩的档案,压缩后的档案可以以 uncompress 解压。若要将数个档案压成一个压缩档,必须先将档案 tar 起来再压缩。由于 gzip 可以产生更理想的压缩比例,所以现在通常改用 gzip 为档案压缩工具。

    3.1 gzip 压缩工具

    gzip 命令的格式为:gzip [-d#] filename,其中 # 为1-9的数字。gzip 后面跟文件名,压缩后原文件会删除,但是 gzip 不支持压缩目录

    -d:该参数在解压缩时使用,gzip -d 后面跟压缩文件表示解压已经压缩的文件;
    -#:表示压缩等级,1 为最差,9 为最好,6 为默认值。

    压缩:gzip filename

    [root@ryan linux]# ls -l
    total 40
    -rw-r--r--. 1 root root 13368 Mar 18 17:48 install.log
    drwxr-xr-x+ 2 root root  4096 Dec  3 13:35 test
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    -rw-r--r--. 1 root root 10240 Mar 18 21:11 test1.tar
    [root@ryan linux]# gzip test1
    gzip: test1 is a directory -- ignored
    [root@ryan linux]# gzip install.log
    [root@ryan linux]# ls -l
    total 28
    -rw-r--r--. 1 root root  3825 Mar 18 17:48 install.log.gz
    drwxr-xr-x+ 2 root root  4096 Dec  3 13:35 test
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    -rw-r--r--. 1 root root 10240 Mar 18 21:11 test1.tar

    解压文件:gzip -d filename

    [root@ryan linux]# ls -l
    total 28
    -rw-r--r--. 1 root root  3825 Mar 18 17:48 install.log.gz
    drwxr-xr-x+ 2 root root  4096 Dec  3 13:35 test
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    -rw-r--r--. 1 root root 10240 Mar 18 21:11 test1.tar
    [root@ryan linux]# gzip -d install.log.gz
    [root@ryan linux]# ls -l
    total 40
    -rw-r--r--. 1 root root 13368 Mar 18 17:48 install.log
    drwxr-xr-x+ 2 root root  4096 Dec  3 13:35 test
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    -rw-r--r--. 1 root root 10240 Mar 18 21:11 test1.tar

    3.2 bzip2 压缩工具

    bzip2 命令的格式为:bzip2 [-dz] filename,不能压缩目录,压缩后原文件会删除。-z 表示压缩,-d 表示解压缩。其实,压缩时,-z 选项可以省略。

    压缩:bzip2 [-z] filename 文件

    [root@ryan linux]# ls -l
    total 48
    -rw-r--r--. 1 root root 13368 Mar 20 20:46 file.log
    -rw-r--r--. 1 root root 13368 Mar 18 17:48 install.log
    drwxr-xr-x+ 2 root root  4096 Dec  3 13:35 test
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    -rw-r--r--. 1 root root   161 Mar 18 22:02 test1.tar.gz
    [root@ryan linux]# bzip2 test1
    bzip2: Input file test1 is a directory.
    [root@ryan linux]# bzip2 file.log
    [root@ryan linux]# ls -l
    total 36
    -rw-r--r--. 1 root root  3385 Mar 20 20:46 file.log.bz2
    -rw-r--r--. 1 root root 13368 Mar 18 17:48 install.log
    drwxr-xr-x+ 2 root root  4096 Dec  3 13:35 test
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    -rw-r--r--. 1 root root   161 Mar 18 22:02 test1.tar.gz

    解压缩:bzip2 -d filename

    [root@ryan linux]# ls -l
    total 36
    -rw-r--r--. 1 root root  3385 Mar 20 20:46 file.log.bz2
    -rw-r--r--. 1 root root 13368 Mar 18 17:48 install.log
    drwxr-xr-x+ 2 root root  4096 Dec  3 13:35 test
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    -rw-r--r--. 1 root root   161 Mar 18 22:02 test1.tar.gz
    [root@ryan linux]# bzip2 -d file.log.bz2
    [root@ryan linux]# ls -l
    total 48
    -rw-r--r--. 1 root root 13368 Mar 20 20:46 file.log
    -rw-r--r--. 1 root root 13368 Mar 18 17:48 install.log
    drwxr-xr-x+ 2 root root  4096 Dec  3 13:35 test
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    -rw-r--r--. 1 root root   161 Mar 18 22:02 test1.tar.gz

    3.3 命令 bzcat

    bzcat - decompresses files to stdout,查看压缩包文档内容,tar -tf filename 可以查看归档包或者压缩包的文件列表,对于 bzip2 压缩格式的文本文档,我们可以使用 bzcat 命令查看文档内容。bzcat filename

    [root@ryan linux]# bzcat file.log.bz2
    安装 libgcc-4.4.7-17.el6.x86_64
    warning: libgcc-4.4.7-17.el6.x86_64: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
    安装 setup-2.8.14-20.el6_4.1.noarch
    安装 filesystem-2.4.30-3.el6.x86_64
    安装 xml-common-0.6.3-33.el6.noarch

    对应的,zcat 查看 gzip 压缩格式的文本文档内容;xzcat 查看 xz 压缩格式的文本文档内容;此外还有zless、bzless、zmore、bzmore、xzless、xzmore 等命令,其实都是 cat、less、more 的延伸命令,用于查看压缩文档的内容。

    3.4 使用 zip 压缩

    如果没有安装 zip 命令,首先需要安装:[root@ryan linux]# yum install -y zip,zip 既可以压缩文件也可以压缩目录,且压缩后原文件不删除。

    -r 选项表示递归压缩下级目录和文件,如下:zip -r filename 目录或文件

    [root@ryan linux]# ls -l
    total 60
    -rw-r--r--. 1 root root 13368 Mar 20 20:46 file.log
    -rw-r--r--. 1 root root 13368 Mar 18 17:48 install.log
    drwxr-xr-x+ 2 root root  4096 Dec  3 13:35 test
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    -rw-r--r--. 1 root root   158 Mar 20 21:11 test1.tar.bz2
    -rw-r--r--. 1 root root   161 Mar 18 22:02 test1.tar.gz
    -rw-r--r--. 1 root root   162 Mar 20 21:21 test1.zip
    drwxr-xr-x. 3 root root  4096 Mar 20 21:24 test4
    [root@ryan linux]# zip -r test4.zip test4
      adding: test4/ (stored 0%)
      adding: test4/cp1.txt (stored 0%)
      adding: test4/testfolder/ (stored 0%)
      adding: test4/testfolder/cp2.txt (stored 0%)
    [root@ryan linux]# ls -l
    total 64
    -rw-r--r--. 1 root root 13368 Mar 20 20:46 file.log
    -rw-r--r--. 1 root root 13368 Mar 18 17:48 install.log
    drwxr-xr-x+ 2 root root  4096 Dec  3 13:35 test
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    -rw-r--r--. 1 root root   158 Mar 20 21:11 test1.tar.bz2
    -rw-r--r--. 1 root root   161 Mar 18 22:02 test1.tar.gz
    -rw-r--r--. 1 root root   162 Mar 20 21:21 test1.zip
    drwxr-xr-x. 3 root root  4096 Mar 20 21:24 test4
    -rw-r--r--. 1 root root   678 Mar 20 21:31 test4.zip

    3.5 解压 zip

    解压 zip 压缩包,需要使用 unzip,需要安装:[root@ryan linux]# yum install -y unzip,unzip 解压缩后,原压缩包文件不删除。unzip filename

    例如:将压缩文件 text.zip 在指定目录 /tmp下解压缩,如果已有相同的文件存在,要求 unzip命令 不覆盖原先的文件。

    unzip -n test.zip -d /tmp

    -n:解压缩时不要覆盖原有的文件;

    -d<目录>:指定文件解压缩后所要存储的目录;

    -v:执行时显示详细的信息;

    -o:不必先询问用户,unzip 执行后覆盖原有的文件;unzip -o test.zip -d tmp/

    查看压缩文件目录,但不解压。unzip -v test.zip

    [root@ryan linux]# ls -l
    total 64
    -rw-r--r--. 1 root root 13368 Mar 20 20:46 file.log
    -rw-r--r--. 1 root root 13368 Mar 18 17:48 install.log
    drwxr-xr-x+ 2 root root  4096 Dec  3 13:35 test
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    -rw-r--r--. 1 root root   158 Mar 20 21:11 test1.tar.bz2
    -rw-r--r--. 1 root root   161 Mar 18 22:02 test1.tar.gz
    -rw-r--r--. 1 root root   162 Mar 20 21:21 test1.zip
    drwxr-xr-x. 3 root root  4096 Mar 20 21:24 test4
    -rw-r--r--. 1 root root   678 Mar 20 21:31 test4.zip
    [root@ryan linux]# rm -rf test4
    [root@ryan linux]# ls -l
    total 60
    -rw-r--r--. 1 root root 13368 Mar 20 20:46 file.log
    -rw-r--r--. 1 root root 13368 Mar 18 17:48 install.log
    drwxr-xr-x+ 2 root root  4096 Dec  3 13:35 test
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    -rw-r--r--. 1 root root   158 Mar 20 21:11 test1.tar.bz2
    -rw-r--r--. 1 root root   161 Mar 18 22:02 test1.tar.gz
    -rw-r--r--. 1 root root   162 Mar 20 21:21 test1.zip
    -rw-r--r--. 1 root root   678 Mar 20 21:31 test4.zip
    [root@ryan linux]# unzip test4.zip
    Archive:  test4.zip
       creating: test4/
     extracting: test4/cp1.txt
       creating: test4/testfolder/
     extracting: test4/testfolder/cp2.txt
    [root@ryan linux]# ls -l
    total 64
    -rw-r--r--. 1 root root 13368 Mar 20 20:46 file.log
    -rw-r--r--. 1 root root 13368 Mar 18 17:48 install.log
    drwxr-xr-x+ 2 root root  4096 Dec  3 13:35 test
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    -rw-r--r--. 1 root root   158 Mar 20 21:11 test1.tar.bz2
    -rw-r--r--. 1 root root   161 Mar 18 22:02 test1.tar.gz
    -rw-r--r--. 1 root root   162 Mar 20 21:21 test1.zip
    drwxr-xr-x. 3 root root  4096 Mar 20 21:24 test4
    -rw-r--r--. 1 root root   678 Mar 20 21:31 test4.zip
    [root@ryan linux]# ls -lR test4
    test4:
    total 8
    -rw-r--r--. 1 root root   12 Mar 20 21:23 cp1.txt
    drwxr-xr-x. 2 root root 4096 Mar 20 21:24 testfolder
    
    test4/testfolder:
    total 4
    -rw-r--r--. 1 root root 12 Mar 20 21:24 cp2.txt

    3.6 xz 压缩工具

    linux 默认自带 xz 压缩工具,不支持压缩目录,压缩格式为:xz -z filename,-z 可有可无,默认会删除原文件,-k 保留原文件;-0至-9调节压缩率。如果不设置,默认压缩等级是6。xz -d 待解压文件,等价于 unxz 命令;-k 保留原文件。

    压缩:xz [-z] filename

    [root@ryan linux]# ls -l
    total 64
    -rw-r--r--. 1 root root 13368 Mar 20 20:46 file.log
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    [root@ryan linux]# xz test1
    xz: test1: Is a directory, skipping
    [root@ryan linux]# xz file.log
    [root@ryan linux]# ls -l
    total 52
    -rw-r--r--. 1 root root  3616 Mar 20 20:46 file.log.xz
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1

    解压:xz -d filename

    [root@ryan linux]# ls -l
    total 52
    -rw-r--r--. 1 root root  3616 Mar 20 20:46 file.log.xz
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    [root@ryan linux]# xz -d file.log.xz
    [root@ryan linux]# ls -l
    total 64
    -rw-r--r--. 1 root root 13368 Mar 20 20:46 file.log
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1

    四、打包的同时压缩

    tar 命令在使用时可以直接压缩,它支持 gzip 压缩和 bzip2 压缩。

    4.1 打包的同时使用 gzip 压缩

    使用 -z 选项可以压缩成 gzip 格式的文件,原文件不会删除

    打包并压缩:tar -czvf filename 文件或目录

    [root@ryan linux]# ls -l
    total 28
    -rw-r--r--. 1 root root 13368 Mar 18 17:48 install.log
    drwxr-xr-x+ 2 root root  4096 Dec  3 13:35 test
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    [root@ryan linux]# tar -czvf test1.tar.gz test1
    test1/
    test1/cp1.txt
    [root@ryan linux]# ls -l
    total 32
    -rw-r--r--. 1 root root 13368 Mar 18 17:48 install.log
    drwxr-xr-x+ 2 root root  4096 Dec  3 13:35 test
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    -rw-r--r--. 1 root root   161 Mar 18 22:02 test1.tar.gz

    解压:tar -zxvf filename

    [root@ryan linux]# ls -l
    total 32
    -rw-r--r--. 1 root root 13368 Mar 18 17:48 install.log
    drwxr-xr-x+ 2 root root  4096 Dec  3 13:35 test
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    -rw-r--r--. 1 root root   161 Mar 18 22:02 test1.tar.gz
    [root@ryan linux]# rm -rf test1
    [root@ryan linux]# ls -l
    total 28
    -rw-r--r--. 1 root root 13368 Mar 18 17:48 install.log
    drwxr-xr-x+ 2 root root  4096 Dec  3 13:35 test
    -rw-r--r--. 1 root root   161 Mar 18 22:02 test1.tar.gz
    [root@ryan linux]# tar -xzvf test1.tar.gz
    test1/
    test1/cp1.txt
    [root@ryan linux]# ls -l
    total 32
    -rw-r--r--. 1 root root 13368 Mar 18 17:48 install.log
    drwxr-xr-x+ 2 root root  4096 Dec  3 13:35 test
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    -rw-r--r--. 1 root root   161 Mar 18 22:02 test1.tar.gz

    4.2 打包的同时使用 bzip2 压缩

    使用 -j 选项可以压缩成 bzip2 格式的文件,原文件不会删除

    打包并压缩:tar -cjvf filename 文件或目录

    [root@ryan linux]# ls -l
    total 48
    -rw-r--r--. 1 root root 13368 Mar 20 20:46 file.log
    -rw-r--r--. 1 root root 13368 Mar 18 17:48 install.log
    drwxr-xr-x+ 2 root root  4096 Dec  3 13:35 test
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    -rw-r--r--. 1 root root   161 Mar 18 22:02 test1.tar.gz
    [root@ryan linux]# tar -cjvf test1.tar.bz2 test1
    test1/
    test1/cp1.txt
    [root@ryan linux]# ls -l
    total 52
    -rw-r--r--. 1 root root 13368 Mar 20 20:46 file.log
    -rw-r--r--. 1 root root 13368 Mar 18 17:48 install.log
    drwxr-xr-x+ 2 root root  4096 Dec  3 13:35 test
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    -rw-r--r--. 1 root root   158 Mar 20 21:11 test1.tar.bz2
    -rw-r--r--. 1 root root   161 Mar 18 22:02 test1.tar.gz

    解压:tar -jxvf filename

    [root@ryan linux]# ls -l
    total 48
    -rw-r--r--. 1 root root 13368 Mar 20 20:46 file.log
    -rw-r--r--. 1 root root 13368 Mar 18 17:48 install.log
    drwxr-xr-x+ 2 root root  4096 Dec  3 13:35 test
    -rw-r--r--. 1 root root   158 Mar 20 21:11 test1.tar.bz2
    -rw-r--r--. 1 root root   161 Mar 18 22:02 test1.tar.gz
    [root@ryan linux]# tar -xjvf test1.tar.bz2
    test1/
    test1/cp1.txt
    [root@ryan linux]# ls -l
    total 52
    -rw-r--r--. 1 root root 13368 Mar 20 20:46 file.log
    -rw-r--r--. 1 root root 13368 Mar 18 17:48 install.log
    drwxr-xr-x+ 2 root root  4096 Dec  3 13:35 test
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    -rw-r--r--. 1 root root   158 Mar 20 21:11 test1.tar.bz2
    -rw-r--r--. 1 root root   161 Mar 18 22:02 test1.tar.gz

    4.3 打包的同时使用 xz 压缩

    使用 -J 选项可以压缩成 xz 格式的文件,原文件不会删除。
    如果当前版本linux的tar命令参数支持使用xz压缩,则可直接使用如下命令:tar -cJvf filename.tar.xz
    同理,解压的时候,如果当前版本linux的tar命令参数支持使用xz解压,则可直接使用如下命令:tar -Jxv -f filename.tar.xz
    否则就要分两步,先用 xz -d 解压,变成 tar 包之后,再用 tar -xvf 解包:
    xz -d finename.tar.xz
    tar -xvf finename.tar

    打包并压缩:tar -cJvf filename 文件或目录

    [root@ryan linux]# ls -l
    total 64
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    [root@ryan linux]# tar -cJvf test1.tar.xz test1
    test1/
    test1/cp1.txt
    [root@ryan linux]# ls -l
    total 68
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    -rw-r--r--. 1 root root   208 Mar 21 22:24 test1.tar.xz

    解压:tar -Jxvf filename

    [root@ryan linux]# rm -rf test1
    [root@ryan linux]# ls -l
    total 64
    -rw-r--r--. 1 root root   208 Mar 21 22:24 test1.tar.xz
    [root@ryan linux]# tar -Jxvf test1.tar.xz
    test1/
    test1/cp1.txt
    [root@ryan linux]# ls -l
    total 68
    drwxr-xr-x. 2 root root  4096 Nov 26 03:46 test1
    -rw-r--r--. 1 root root   208 Mar 21 22:24 test1.tar.xz
  • 相关阅读:
    设计模式(5)>模板方法
    设计模式(2)>工厂方法模式
    分支限界>装载问题
    解决Oracle 11g在用EXP导出时,空表不能导出
    设计模式(7)>观察者模式
    算法>并行算法
    设计模式(15)>桥接模式
    设计模式(9)>迭代器模式
    设计模式(11)>建造者模式
    设计模式(17)>中介者模式
  • 原文地址:https://www.cnblogs.com/cnjavahome/p/8596810.html
Copyright © 2011-2022 走看看