⼗⼀、tar打包命令的使⽤
Linux下最常⽤的打包命令就是tar,使⽤tar命令打包后,就可以⽤其它的命令来进⾏压缩了。tar命令的使⽤⽅法
tar命令
[root@dingjian ~]# tar [-cxtzjvfpPN] ⽂件与⽬录 ....
参数:
-c :建⽴⼀个压缩⽂件的参数指令(create 的意思);
-x :解开⼀个压缩⽂件的参数指令!
-t :查看 tarfile ⾥⾯的⽂件!
特别注意,在参数的下达中, c/x/t 仅能存在⼀个!不可同时存在!
因为不可能同时压缩与解压缩。
-z :是否同时具有 gzip 的属性?亦即是否需要⽤ gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要⽤ bzip2 压缩?
-v :压缩的过程中显⽰⽂件!这个常⽤,但不建议⽤在背景执⾏过程!
-f :使⽤档名,请留意,在 f 之后要⽴即接档名喔!不要再加参数!
-C(⼤写) : ⽬录这个参数⽤在解压缩时,若要在特定⽬录解压缩,可以使⽤这个参数
-p :使⽤原⽂件的原来属性(属性不会依据使⽤者⽽变)
-P (⼤写):可以使⽤绝对路径来压缩!.
-N :⽐后⾯接的⽇期(yyyy/mm/dd)还要新的才会被打包进新建的⽂件中!
--exclude FILE:在压缩的过程中,不要将 FILE 打包!
其实最简单的使⽤tar的记忆⽅法:
压缩:tar -zcvf 要被压缩的⽂件或⽬录名称
查看: tar -ztvf
解压缩: tar -zxvf -C 欲解压缩的⽬录
tar⽰例⼀:将整个 /etc ⽬录下的⽂件全部打包成为 /tmp/etc.tar
[root@localhost.localdomain /tmp]# tar -cvf /tmp/etc.tar /etc    <==仅打包,不压缩!
[root@localhost.localdomain /tmp]# tar -zcvf /tmp/ /etc  <==打包后,以 gzip 压缩
[root@localhost.localdomain /tmp]# tar -jcvf /tmp/etc.tar.bz2 /etc    <==打包后,以 bzip2 压缩
[root@localhost.localdomain /tmp]# ls -l
total 38212
-rw-r--r--. 1 root root 28948480 Sep 2415:16 etc.tar
-rw-r--r--. 1 root root 0 Sep 2415:18 etc.tar.bz2
-rw-r--r--. 1 root root 10170259 Sep 2415:16
# 特别注意,在参数 f 之后的⽂件档名是⾃⼰取的,我们习惯上都⽤ .tar 来作为辨识。
# 如果加 z 参数,则以 . 或 .tgz 来代表 gzip 压缩过的 tar file ~
# 如果加 j 参数,则以 .tar.bz2 来作为附档名啊~
在备份重要的系统数据时,我们可以利⽤-p参数保留原本⽂件的权限与属性
# 上述指令在执⾏的时候,会显⽰⼀个警告讯息:
# 『tar: Removing leading `/' from member names』那是关於绝对路径的特殊设定。
tar例⼆:在打包⼀个⽂件时,⼀般从要打包的⽬录或⽂件的上⼀层⽬录对其打包,如果要打包这个⽂件和其绝对路径时,可以从/开始打包[root@localhost.localdomain /tmp]# mkdir /tmp/dingjian/aa{1..3} -p
[root@localhost.localdomain /tmp]# tree dingjian/
dingjian/
├── aa1
├── aa2
└── aa3
[root@localhost.localdomain /tmp]# tar -zcvf /tmp/ /tmp/dingjian  <==打包其⽂件dingjian与绝对路径
tar: Removing leading `/' from member names
/tmp/dingjian/
/tmp/dingjian/aa1/
/tmp/dingjian/aa2/
/tmp/dingjian/aa3/
[root@localhost.localdomain /tmp]# tar -zccvf /tmp/ ./dingjian    <==在⽂件上⼀层⽬录只对这个dingjian这个⽂件进⾏打包
./dingjian/
./dingjian/aa1/
./dingjian/aa2/
./dingjian/aa3/
分别解压出来的路径:
[root@localhost.localdomain /tmp]# tar -zxvf /tmp/
tmp/dingjian/
tmp/dingjian/aa1/
tmp/dingjian/aa2/
tmp/dingjian/aa3/
[root@localhost.localdomain /tmp]# tar -zxvf /tmp/
./dingjian/
./dingjian/aa1/
./dingjian/aa2/
.
/dingjian/aa3/
[root@localhost.localdomain /tmp]# ls -l
total 8
drwxr-xr-x. 5 root root 39 Sep 2415:23 dingjian
-rw-r--r--. 1 root root 152 Sep 2415:25
-rw-r--r--. 1 root root 153 Sep 2415:25
drwxr-xr-x. 3 root root 22 Sep 2415:27 tmp
[root@localhost.localdomain /tmp]# tree tmp
tmp
└── dingjian
├── aa1
├── aa2
└── aa3
4 directories, 0 files
[root@localhost.localdomain /tmp]# tree dingjian/
dingjian/
├── aa1
├── aa2
└── aa3
tar⽰例三:查阅上述 /tmp/⽬录中各打包⽂件内有哪些⽂件?
[root@localhost.localdomain /tmp]# tar -tvf /tmp/etc.tar
[root@localhost.localdomain /tmp]# tar -jtvf /tmp/etc.tar.bz2
grep命令有什么用
[root@localhost.localdomain /tmp]#  tar -ztvf /tmp/
# 如果查看bz2 或gz压缩的⽂件就得要加上 j或z 这个参数了!这很重要的!
tar⽰例四:将 /tmp/ ⽂件解压缩在 /usr/local/src 底下
[root@localhost.localdomain /]# cd /usr/local/src
[root@localhost.localdomain src]# tar -zxvf /tmp/
# 在预设的情况下,我们可以将压缩档在任何地⽅解开的!以这个范例来说,
# 我先将⼯作⽬录变换到 /usr/local/src 底下,并且解开 /tmp/ ,
# 则解开的⽬录会在 /usr/local/src/etc 呢!另外,如果您进⼊ /usr/local/src/etc
# 则会发现,该⽬录下的⽂件属性与 /etc/ 可能会有所不同喔!
tar⽰例五:将/tmp/⽂件解压缩到指定的⽬录/root
[root@localhost.localdomain ~]# tar -zxvf /tmp/ -C /root
[root@localhost.localdomain ~]# ls
anaconda-ks.cfg etc install.log install.log.syslog tar.sh
tar⽰例六:在 /tmp 底下,我只想要将 /tmp/ 内的 etc/passwd 解开⽽已[root@localhost.localdomain tmp]# tar -ztvf |grep passwd
-rw-r--r-- root/root 146 2012-02-22 19:48 etc/pam.d/passwd
-rw-r--r-- root/root 1176 2013-11-05 05:52 etc/passwd-
-rw-r--r-- root/root 1176 2013-11-05 05:52 etc/passwd
-rw------- root/root 0 2013-02-22 08:16 etc/security/opasswd
[root@localhost.localdomain tmp]# tar -zxvf /tmp/ etc/passwd
etc/passwd
[root@localhost.localdomain tmp]# ls -l etc
total 4
-rw-r--r--. 1 root root 1176 Nov 5 05:52 passwd
#我们通过tar -ztvf 结合管道grep来过滤出passwd的所在位置
#在解压过程中etc/passwd不能客成/etc/passwd因为它是记录在内的⽂件名tar⽰例七:将 /etc/ 内的所有⽂件备份下来,并且保存其权限!
[root@localhost.localdomain ~]# tar -zxvpf /tmp/ /etc
# 这个 -p 的属性是很重要的,尤其是当您要保留原本⽂件的属性时!
tar⽰例⼋:在 /etc 当中,⽐ 2013/11/01 新的⽂件才备份
[root@localhost.localdomain tmp]# tar -N '2013/11/01' -zcvf etc_ /etc tar⽰例九:打包备份当前⽬录下dingjian⽂件夹,但不打包⾥⾯linuxfile⽂件
[root@localhost.localdomain tmp]# tree dingjian
dingjian
├──11
├──22
├──33
├──44
├──55
├── aa
├── bb
├── cc
├── dd
├── ee
├── linuxfile
├── q1
├── q2
└── q3.4
5 directories, 9 files
[root@localhost.localdomain tmp]# tar --exclude ./dingjian/linuxfile -zcvf ./dingjian
./dingjian/
./dingjian/33/
./dingjian/aa
./dingjian/11/
./dingjian/55/
./dingjian/dd
./dingjian/ee
.
/dingjian/q2
./dingjian/cc
./dingjian/q1
./dingjian/bb
./dingjian/44/
./dingjian/q3.4
./dingjian/22/
[root@localhost.localdomain tmp]# tar -ztvf
drwxr-xr-x root/root 02013-12-0409:04 ./dingjian/
drwxr-xr-x root/root 02013-12-0409:02 ./dingjian/33/
-rw-r--r-- root/root 02013-12-0409:02 ./dingjian/aa
drwxr-xr-x root/root 02013-12-0409:02 ./dingjian/11/
drwxr-xr-x root/root 02013-12-0409:02 ./dingjian/55/
-rw-r--r-- root/root 02013-12-0409:02 ./dingjian/dd
-rw-r--r-- root/root 02013-12-0409:02 ./dingjian/ee
-rw-r--r-- root/root 02013-12-0409:04 ./dingjian/q2
-rw-r--r-- root/root 02013-12-0409:02 ./dingjian/cc
-rw-r--r-- root/root 02013-12-0409:04 ./dingjian/q1
-rw-r--r-- root/root 02013-12-0409:02 ./dingjian/bb
drwxr-xr-x root/root 02013-12-0409:02 ./dingjian/44/
-rw-r--r-- root/root 02013-12-0409:04 ./dingjian/q3.4
drwxr-xr-x root/root 02013-12-0409:02 ./dingjian/22/
tar⽰例⼗:打包备份当前⽬录下dingjian⽂件夹,但不打包⾥⾯字每开头为q的⽂件[root@localhost.localdomain  tmp]# tree dingjian
dingjian
├──11
├──22
├──33
├──44
├──55
├── aa
├── bb
├── cc
├── dd
├── ee
├── linuxfile
├── q1
├── q2
└── q3.4
[rroot@localhost.localdomain tmp]# tar --exclude=./dingjian/q* -zcvf ./dingjian
./dingjian/
./dingjian/33/
./dingjian/aa
./dingjian/11/
./dingjian/55/
.
/dingjian/dd
./dingjian/ee
./dingjian/linuxfile
./dingjian/cc
./dingjian/bb
./dingjian/44/
./dingjian/22/
[root@localhost.localdomain  tmp]# tar -ztvf
drwxr-xr-x root/root 02013-12-0409:04 ./dingjian/
drwxr-xr-x root/root 02013-12-0409:02 ./dingjian/33/
-rw-r--r-- root/root 02013-12-0409:02 ./dingjian/aa
drwxr-xr-x root/root 02013-12-0409:02 ./dingjian/11/
drwxr-xr-x root/root 02013-12-0409:02 ./dingjian/55/
-rw-r--r-- root/root 02013-12-0409:02 ./dingjian/dd
-rw-r--r-- root/root 02013-12-0409:02 ./dingjian/ee
-rw-r--r-- root/root 02013-12-0409:02 ./dingjian/linuxfile
-rw-r--r-- root/root 02013-12-0409:02 ./dingjian/cc
-rw-r--r-- root/root 02013-12-0409:02 ./dingjian/bb
drwxr-xr-x root/root 02013-12-0409:02 ./dingjian/44/
drwxr-xr-x root/root 02013-12-0409:02 ./dingjian/22/
tar实例⼗⼀:⼯作环境实例:
打包站点⽬录/var/www/html 备份到/data ⽬录下(最好每次备份按时间
⽣成不同的备份包)
[root@localhost.localdomain tmp]# tar -zcvf html_$(date +%F). /var/www/html tar: Removing leading `/' from member names
/var/www/html/
[root@localhost.localdomain tmp]# ls
html_
tar⽰例⼗⼆:将 /etc/ 打包后直接解开在 /tmp 底下,⽽不产⽣⽂件!
[root@localhost.localdomain  ~]# cd /tmp
[root@localhost.localdomain  tmp]# tar -cvf - /etc | tar -xvf -
# 这个动作有点像是 cp -r /etc /tmp 啦~依旧是有其有⽤途的!
# 要注意的地⽅在於输出档变成 - ⽽输⼊档也变成 - ,⼜有⼀个 | 存在~
# 这分别代表 standard output, standard input 与管线命令啦!