• Linux打包命令


            上一篇文章谈到的命令大多仅能针对单一文件来进行压缩,尽管 gzip 与 bzip2 也可以针对文件夹来进行压缩, 只是。这两个命令对文件夹的压缩指的是『将文件夹内的全部文件 "分别" 进行压缩』的动作!

    而不像在 Windows 的系统。可以使用类似 WinRAR 这一类的压缩软件来将好多数据『包成一个文件』的样式。

            这样的将多个文件或文件夹包成一个大文件的命令功能,我们能够称呼他是一种『打包命令』啦! 那 Linux 有没有这样的打包命令呢?是有的!那就是鼎鼎大名的 tar 这个玩意儿了!

    tar 能够将多个文件夹或文件打包成一个大文件,同一时候还能够透过 gzip/bzip2 的支持,将该文件同一时候进行压缩! 更有趣的是。由於 tar 的使用太广泛了。眼下 Windows 的 WinRAR 也支持 .tar.gz 档名的解压缩呢。


    tar

    [root@www ~]# tar [-j|-z] [cv] [-f 创建的档名] filename... <==打包与压缩
    [root@www ~]# tar [-j|-z] [tv] [-f 创建的档名]             <==察看档名
    [root@www ~]# tar [-j|-z] [xv] [-f 创建的档名] [-C 文件夹]   <==解压缩
    选项与參数:
    -c  :创建打包文件,可搭配 -v 来察看过程中被打包的档名(filename)
    -t  :察看打包文件的内容含有哪些档名,重点在察看『档名』就是了;
    -x  :解打包或解压缩的功能。能够搭配 -C (大写) 在特定文件夹解开
          特别留意的是, -c, -t, -x 不可同一时候出如今一串命令列中。
    -j  :透过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2
    -z  :透过 gzip  的支持进行压缩/解压缩:此时档名最好为 *.tar.gz
    -v  :在压缩/解压缩的过程中,将正在处理的档名显示出来。
    -f filename:-f 后面要立马接要被处理的档名!建议 -f 单独写一个选项罗!
    -C 文件夹    :这个选项用在解压缩,若要在特定文件夹解压缩。能够使用这个选项。

    其它兴许练习会使用到的选项介绍: -p :保留备份数据的原本权限与属性。经常使用於备份(-c)重要的配置档 -P :保留绝对路径。亦即同意备份数据中含有根文件夹存在之意; --exclude=FILE:在压缩的过程中,不要将 FILE 打包!



    事实上最简单的使用 tar 就仅仅要记忆底下的方式就可以:

        压 缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或文件夹名称
        查 询:tar -jtv -f filename.tar.bz2
        解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的文件夹

            那个 filename.tar.bz2 是我们自己取的档名,tar 并不会主动的产生创建的档名喔!我们要自订啦。 所以扩展名就显的非常重要了。假设不加 [-j|-z] 的话,档名最好取为 *.tar 就可以。假设是 -j 选项,代表有 bzip2 的支持,因此档名最好就取为 *.tar.bz2 ,由于 bzip2 会产生 .bz2 的扩展名之故! 至於假设是加上了 -z 的 gzip 的支持,那档名最好取为 *.tar.gz 。

            另外,由於『 -f filename 』是紧接在一起的。过去非常多文章常会写成『-jcvf filename』。这样是对的, 但由於选项的顺序理论上是能够变换的,所以非常多读者会误觉得『-jvfc filename』也能够~其实这样会导致产生的档名变成 c !

    由于 -fc 嘛!所以罗,建议您在学习 tar 时。将『 -f filename 』与其它选项独立出来。会比較不easy发生故障。


    查阅 tar 文件的数据内容(可察看档名),与备份档名有否根文件夹的意义

    [root@www ~]# tar -jtv -f /root/etc.tar.bz2
    ....前面省略....
    -rw-r--r-- root/root  1016 2008-05-25 14:06:20 etc/dbus-1/session.conf
    -rw-r--r-- root/root   153 2007-01-07 19:20:54 etc/esd.conf
    -rw-r--r-- root/root   255 2007-01-06 21:13:33 etc/crontab
    

            假设加上 -v 这个选项时,具体的文件权限/属性都会被列出来!

    假设仅仅是想要知道档名而已, 那么就将 -v 拿掉就可以。从上面的数据我们能够发现一件非常有趣的事情。那就是每一个档名都没了根文件夹了!这也是上一个练习中出现的那个警告信息『tar: Removing leading `/' from member names(移除了档名开头的 `/' )』所告知的情况。

            那为什么要拿掉根文件夹呢?主要是为了安全!我们使用 tar 备份的数据可能会须要解压缩回来使用, 在 tar 所记录的档名 (就是我们刚刚使用 tar -jtvf 所察看到的档名) 那就是解压缩后的实际档名。

    假设拿掉了根文件夹,假设你将备份数据在 /tmp 解开,那么解压缩的档名就会变成『/tmp/etc/xxx』。

    但『假设没有拿掉根文件夹,解压缩后的档名就会是绝对路径。 亦即解压缩后的数据一定会被放置到 /etc/xxx 去!

    』如此一来,你的原本的 /etc/ 底下的数据, 就会被备份数据所覆盖过去了!


    范例:将档名中的(根)文件夹也备份下来,并察看一下备份档的内容档名
    [root@www ~]# tar -jpPcv -f /root/etc.and.root.tar.bz2 /etc
    ....中间过程省略....
    [root@www ~]# tar -jtf /root/etc.and.root.tar.bz2
    /etc/dbus-1/session.conf
    /etc/esd.conf
    /etc/crontab
    # 这次查阅档名不含 -v 选项。所以仅有档名而已。没有具体属性/权限等參数。
    


    将备份的数据解压缩,并考虑特定文件夹的解压缩动作 (-C 选项的应用)

    [root@www ~]# tar -jxv -f /root/etc.tar.bz2
    [root@www ~]# ll
    ....(前面省略)....
    drwxr-xr-x 105 root root    12288 Nov 11 04:02 etc
    ....(后面省略)....
    

            此时该打包文件会在『本文件夹下进行解压缩』的动作! 所以,你等一下就会在家文件夹底下发现一个名为 etc 的文件夹罗!所以罗,假设你想要将该文件在 /tmp 底下解开, 能够 cd /tmp 后,再下达上述的命令就可以。

    只是。这样好像非常麻烦呢~有没有更简单的方法能够『指定欲解开的文件夹』呢? 有的,能够使用 -C 这个选项喔!

    举例来说:

    [root@www ~]# tar -jxv -f /root/etc.tar.bz2 -C /tmp
    [root@www ~]# ll /tmp
    ....(前面省略)....
    drwxr-xr-x 105 root root    12288 Nov 11 04:02 etc
    ....(后面省略)....
    


    仅解开单一文件的方法

    # 1. 先找到我们要的档名。如果解开 shadow 文件好了:
    [root@www ~]# tar -jtv -f /root/etc.tar.bz2 | grep 'shadow'
    -r-------- root/root  1230 2008-09-29 02:21:20 etc/shadow-
    -r-------- root/root   622 2008-09-29 02:21:20 etc/gshadow-
    -r-------- root/root   636 2008-09-29 02:21:25 etc/gshadow
    -r-------- root/root  1257 2008-09-29 02:21:25 etc/shadow  <==这是我们要的!
    # 先搜寻重要的档名!

    当中那个 grep 是『撷取』keyword的功能。我们会在第三篇说明! # 这里您先有个概念就可以!

    那个管线 | 配合 grep 能够撷取keyword的意思! # 2. 将该文件解开!语法与实际作法例如以下: [root@www ~]# tar -jxv -f 打包档.tar.bz2 待解开档名 [root@www ~]# tar -jxv -f /root/etc.tar.bz2 etc/shadow etc/shadow [root@www ~]# ll etc total 8 -r-------- 1 root root 1257 Sep 29 02:21 shadow <==呦喝!仅仅有一个文件啦!

    # 非常有趣!

    此时仅仅会解开一个文件而已。只是。重点是那个档名!

    你要找到正确的档名。

    # 在本例中。你不能写成 /etc/shadow !由于记录在 etc.tar.bz2 内的档名之故!



    打包某文件夹,但不含该文件夹下的某些文件之作法

    [root@www ~]# tar -jcv  -f /root/system.tar.bz2 --exclude=/root/etc* 
    > --exclude=/root/system.tar.bz2  /etc /root
    

            上面的命令是一整列的~事实上你可以打成:『tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc* --exclude=/root/system.tar.bz2 /etc /root』,假设想要两行输入时。最后面加上反斜线 () 并立马按下 [enter] , 就行到第二行继续输入了。



    仅备份比某个时刻还要新的文件

    # 1. 先由 find 找出比 /etc/passwd 还要新的文件
    [root@www ~]# find /etc -newer /etc/passwd
    ....(过程省略)....
    # 此时会显示出比 /etc/passwd 这个文件的 mtime 还要新的档名,
    # 这个结果在每部主机都不同样!

    您先自行查阅自己的主机就可以,不会跟鸟哥一样!

    [root@www ~]# ll /etc/passwd -rw-r--r-- 1 root root 1945 Sep 29 02:21 /etc/passwd # 2. 好了,那么使用 tar 来进行打包吧。日期为上面看到的 2008/09/29 [root@www ~]# tar -jcv -f /root/etc.newer.then.passwd.tar.bz2 > --newer-mtime="2008/09/29" /etc/* ....(中间省略).... /etc/smartd.conf <==真的有备份的文件 ....(中间省略).... /etc/yum.repos.d/ <==文件夹都会被记录下来! tar: /etc/yum.repos.d/CentOS-Base.repo: file is unchanged; not dumped # 最后行显示的是『没有被备份的』,亦即 not dumped 的意思!

    # 3. 显示出文件就可以 [root@www ~]# tar -jtv -f /root/etc.newer.then.passwd.tar.bz2 | > grep -v '/$' # 透过这个命令能够呼叫出 tar.bz2 内的结尾非 / 的档名!就是我们要的啦!



    基本名称: tarfile, tarball ?

            另外值得一提的是,tar 打包出来的文件有没有进行压缩所得到文件称呼不同喔! 假设仅是打包而已。就是『 tar -cv -f file.tar 』而已。这个文件我们称呼为 tarfile 。 假设还有进行压缩的支持,比如『 tar -jcv -f file.tar.bz2 』时,我们就称呼为 tarball (tar 球?)! 这仅仅是一个主要的称谓而已。只是非常多书籍与网络都会使用到这个 tarball 的名称! 

  • 相关阅读:
    VS2010安装Nuget提示签名不匹配错误解决办法
    vs2010不能正确加载 'VSTS for Database Professionals Sql Server Datatier Application'包
    [改编]如何理解.NET Framework(CLI,CLS,CTS,CLR,FCL,BCL)
    [导入]google翻译 lcs
    [导入]Visual SourceSafe中的权限 lcs
    [导入]EnterpriseLibrary 3.1 第一次下载.安装,读取数据库,绑定到控件成功. lcs
    [导入]在缓存时使用SqlCacheDependency lcs
    windows 2008 成功 激活 lcs
    [导入]DIV弹出对话框 lcs
    开发小记4 lcs
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7168996.html
Copyright © 2020-2023  润新知