Linux笔记 Day15---(常见压缩工具:zip、unzip;gzip、gunzip;bzip2、bunzip2;xz、unxz;打包归档命令tar ;建立YUM源服务器)

归档,也称为打包,指的是一个文件或目录的集合,而这个集合被存储在一个文件中。归档文件没有经过压缩,因此,它占用的空间是其中所有文件和目录的总和

通常,归档总是会和系统(数据)备份联系在一起

和归档文件类似,压缩文件也是一个文件和目录的集合,且这个集合也被存储在一个文件中,但它们的不同之处在于,压缩文件采用了不同的存储方式,使其所占用的磁盘空间比集合中所有文件大小的总和要小

压缩是指利用算法将文件进行处理,已达到保留最大文件信息,而让文件体积变小的目的。其基本原理为,通过查找文件内的重复字节,建立一个相同字节的词典文件,并用一个代码表示。

由于计算机处理的信息是以二进制的形式表示的,因此,压缩软件就是把二进制信息中相同的字符串以特殊字符标记,只要通过合理的数学计算,文件的体积就能够被大大压缩。把一个或者多个文件用压缩软件进行压缩,形成一个文件压缩包,既可以节省存储空间,又方便在网络上传送

如果你能够理解文件压缩的基本原理,那么很容易就能想到,对文件进行压缩,很可能损坏文件中的内容,因此,压缩又可以分为有损压缩和无损压缩。无损压缩很好理解,指的是压缩数据必须准确无误;有损压缩指的是即便丢失个别的数据,对文件也不会造成太大的影响。有损压缩广泛应用于动画、声音和图像文件中,典型代表就是影碟文件格式 mpeg、音乐文件格式 mp3 以及图像文件格式 jpg。

采用压缩工具对文件进行压缩,生成的文件称为压缩包,该文件的体积通常比原文件小很多。需要注意的是,压缩包中的数据无法直接使用,使用前需要利用压缩工具将文件数据还原,此过程又称解压缩

一、zip命令

压缩文件或目录

在 Windows 系统上使用 “.zip”格式压缩文件,其实“.zip”格式文件是 Windows 和 Linux 系统都通用的压缩文件类型,属于几种主流的压缩格式(zip、rar等)之一,是一种相当简单的分别压缩每个文件的存储格式,

通过此命令压缩得到的新文件,其扩展名通常标记为“.zip”

用法: zip [选项] 压缩包名 源文件或源目录列表

注意,zip 压缩命令需要手工指定压缩之后的压缩包名,建议自己写好.zip扩展名,以便区别及解压缩时使用。

zip命令在压缩任务完成后,默认会保留原始文件

常用选项:

  • -r: 递归压缩目录,及将制定目录下的所有文件以及子目录全部压缩。
  • -m: 将文件压缩之后,删除原始文件,相当于把文件移到压缩文件中。
  • -v: 显示详细的压缩过程信息。
  • -q: 在压缩的时候不显示命令的执行过程。
  • -压缩级别: 压缩级别是从 1~9 的数字,-1 代表压缩速度更快,-9 代表压缩效果更好。
  • -u: 更新压缩文件,即往压缩文件中添加新文件。
  • -d: 从压缩文件内删除指定的文件。

【例 1】
压缩passwd.txt文件

[root@admin roottest]# zip passwd.zip passwd.txt 
  adding: passwd.txt (deflated 79%)
[root@admin roottest]# ll passwd.zip 
-rw-r--r-- 1 root root 1439 8月   4 10:20 passwd.zip
[root@admin roottest]# ls
 passwd.txt  passwd.zip

可以看到,压缩后源文件依然会保留

不仅如此,该命令还可以同时压缩多个文件,例如:

[root@admin ~]# ls
anaconda-ks.cfg  UserManage.sh  userrecord.txt  u.sh
[root@admin ~]# zip messages.zip anaconda-ks.cfg UserManage.sh  userrecord.txt u.sh 
 adding: anaconda-ks.cfg (deflated 49%)
 adding: UserManage.sh (deflated 38%)
 adding: userrecord.txt (deflated 76%)
 adding: u.sh (stored 0%)
[root@admin ~]# ls
anaconda-ks.cfg  messages.zip  UserManage.sh  userrecord.txt  u.sh
[root@admin ~]# 

【例 2】

压缩效率分别为3和9

[root@admin roottest]# zip  -3 passwd3.zip passwd.txt 
  adding: passwd.txt (deflated 77%)
[root@admin roottest]# zip  -9 passwd9.zip passwd.txt 
  adding: passwd.txt (deflated 79%)
[root@admin roottest]# ll 
总用量 16
-rw-r--r--  1 root root 1566 8月   4 10:33 passwd3.zip
-rw-r--r--  1 root root 1439 8月   4 10:33 passwd9.zip
-rw-r--r--. 1 root root 6086 8月   2 15:53 passwd.txt

注:
压缩率(Compression ratio),描述压缩文件的效果名,是文件压缩后的大小与压缩前的大小之比
例如:把100m的文件压缩后是90m,压缩率为90/100*100%=90%,压缩率一般是越小越好,但是压得越小,解压时间越长。

压缩效率越大压缩后的文件越小,解压时间越长

【例 3】

将当前目录下的所有文件和文件夹全部压缩成test.zip文件,-r表示递归压缩子目录下所有文件

[root@admin roottest]# zip -r test.zip ./*

【例 4】

删除test.zip压缩文件中的passwd.txt文件

[root@admin roottest]# zip -d test.zip passwd.txt 
deleting: passwd.txt

【例 5】

向压缩文件test.zip中添加file1文件

[root@admin roottest]# zip -m test.zip  file1 
  adding: file1 (stored 0%)

【例 6】

压缩文件时排除某个文件

#将当前目录下的所有文件进行压缩除了passwd.txt文件
[root@admin roottest]# ls
passwd3.zip  passwd9.zip  passwd.txt  test.zip
[root@admin roottest]# zip test1.zip ./* -x passwd.txt 
  adding: passwd3.zip (stored 0%)
  adding: passwd9.zip (stored 0%)
  adding: test.zip (stored 0%)

二、unzip命令

unzip 命令可以查看和解压缩 zip 文件

用法: unzip [选项] 压缩包名

unzip命令在解压缩任务完成后,默认会保留原始文件

常用选项:

  • -d: 目录名 将压缩文件解压到指定目录下。
  • -n: 解压时并不覆盖已经存在的文件。
  • -o: 解压时覆盖已经存在的文件,并且无需用户确认。
  • -v: 查看压缩文件的详细信息,包括压缩文件中包含的文件大小、文件名以及压缩比等,但并不做解压操作。
  • -t: 测试压缩文件有无损坏,但并不解压。
  • -x: 文件列表 解压文件,但不包含文件列表中指定的文件。

【例 1】

将压缩文件test.zip在当前目录下解压缩

[root@admin test001]# ls
file.zip
[root@admin test001]# unzip file.zip
Archive:  file.zip
 extracting: 00file                  
 extracting: 01file                  
 extracting: 02file                  
 extracting: 03file                  
 extracting: 04file                  
 extracting: 05file                  
[root@admin test001]# ls
00file  01file  02file  03file  04file  05file  file.zip

可以看到,解压缩后元压缩文件还存在

【例 2】

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

[root@admin test001]# unzip -n test.zip -d /tmp 

【例 3】

查看压缩文件目录,但不解压

[root@admin test001]# unzip -v file.zip
#或
[root@admin test001]# unzip -l file.zip

【例 4】

将压缩文件test.zip在指定目录tmp下解压缩,如果已有相同的文件存在,要求unzip命令覆盖原先的文件,并且无需用户手动确认

[root@admin test001]# unzip -o test.zip -d /tmp

【例 5】

解压当前目录下的所有zip文件

[root@admin test001]# unzip "*.zip"

三、gzip命令

压缩文件或目录

gzip 是 Linux 系统中经常用来对文件进行压缩和解压缩的命令,通过此命令压缩得到的新文件,其扩展名通常标记为“.gz”

gzip不仅可以用来压缩大的、较少使用的文件以节省磁盘空间,还可以和tar命令一起构成Linux操作系统中比较流行的压缩文件格式。据统计,gzip命令对文本文件有60%~70%的压缩率。

gzip命令在压缩或解压缩任务完成后,默认会删除原始文件

用法:gzip [选项] 源文件

常用选项:

  • -c: 将压缩数据输出到标准输出中,并保留源文件。
  • -d: 对压缩文件进行解压缩。
  • -r: 递归压缩指定目录下以及子目录下的所有文件。
  • -v: 对于每个压缩和解压缩的文件,显示相应的文件名和压缩比。
  • -l: 对每一个压缩文件,显示压缩信息(压缩文件的大小;未压缩文件的大小;压缩比;未压缩文件的名称)
  • -数字: 用于指定压缩等级,-1 压缩等级最低,压缩比最差;-9 压缩比最高。默认压缩比是 -6。
  • -t: 测试压缩文件的完整性

【例 1】基本压缩

gzip 压缩命令非常简单,甚至不需要指定压缩之后的压缩包名,只需指定源文件名即可

[root@admin test001]# ls
passwd.txt
[root@admin test001]# gzip passwd.txt 
[root@admin test001]# ls
passwd.txt.gz

可以看到,不需要指定压缩之后的压缩包名,系统会默认给源文件名加上.gz,而且压缩后源文件默认是被删除了

【例 2】保留源文件压缩

#使用-c选项,但是不让压缩数据输出到屏幕上,而是重定向到压缩文件中,这样可以压缩文件的同时不删除源文件

[root@admin test001]# gzip -c passwd.txt > passwd.txt.zip
[root@admin test001]# ls
passwd.txt  passwd.txt.zip

【例 3】

将当前目录下的所有文件压缩成.gz文件

[root@admin test001]# ls
01file  02file  03file  04file
[root@admin test001]# gzip *
[root@admin test001]# ls
01file.gz  02file.gz  03file.gz  04file.gz

列出压缩文件的信息

[root@admin test001]# gzip -l  01file.gz 
         compressed        uncompressed  ratio uncompressed_name
                 27                   0   0.0% 01file

【例 4】递归的压缩目录

[root@admin roottest]# ls
passwd9.zip.gz  test001
[root@admin roottest]# gzip -r test001/
[root@admin roottest]# ls   ##但是查看发现test001目录依然存在,并没有变为压缩文件
passwd9.zip.gz  test001
[root@admin roottest]# cd test001
[root@admin test001]# ls     #察看其子目录
01file.gz  02file.gz  03file.gz  04file.gz  ii
[root@admin test001]# cd  ii
[root@admin ii]# ls
1hehe.gz  2hehe.gz  3hehe.gz  oo    #发现test001目录下的所有文件都被压缩了,但所有目录均没有被压缩

原来gzip命令不会打包目录,而是把目录下所有的子文件分别压缩
在 Linux 中,打包和压缩是分开处理的。而 gzip 命令只会压缩,不能打包,所以才会出现没有打包目录,而只把目录下的文件进行压缩的情况

强调:gzip 命令只能用来压缩文件,不能压缩目录,即便指定了目录,也只能压缩目录内的所有文件

【例 5】解压

[root@admin test001]# ls
01file.gz  
[root@admin test001]# gzip -d 01file.gz 
[root@admin test001]# ls
01file  
#同时显示解压过程信息
[root@admin test001]# gzip -dv 01file.gz 
01file.gz:	  0.0% -- replaced with 01file

递归的解压目录

[root@admin roottest]# gzip -dr test/

就是test目录下的所有.gz压缩包进行解压(可以达到目录树的最深)

四、gunzip命令

用于解压被 gzip 压缩过的文件(扩展名为 .gz)

所以说:对于解压被 gzip 压缩过的文件,可以使用 上面讲到的 gzip -d 压缩包,也可以使用gunzip 命令

gunzip命令在解压缩任务完成后,默认会删除原始文件

用法:gunzip [选项] 文件

常用选项:

  • -r: 递归处理,解压缩指定目录下以及子目录下的所有文件。
  • -c: 把解压缩后的文件输出到标准输出设备。
  • -f: 强制解压缩文件,不理会文件是否已存在等情况。
  • -l: 列出压缩文件内容。
  • -v: 显示命令执行过程。
  • -t: 测试压缩文件是否正常,但不对其做解压缩操作。

【例 1】直接解压缩文件

[root@admin test001]# gunzip 01file.gz 

解压缩目录下的内容:
"gunzip -r"依然只会解压缩目录下的.gz文件,而不会解打包。等价于gzip -dr

【例 2】列出压缩文件内容

[root@admin test001]# gzip -l 01file.gz 
         compressed        uncompressed  ratio uncompressed_name
                 27                   0   0.0% 01file
[root@admin test001]# gunzip -l 01file.gz 
         compressed        uncompressed  ratio uncompressed_name
                 27                   0   0.0% 01file

可以看到gzip -l 就等价于 gunzip -l

【例 3】显示解压缩过程

[root@admin test001]# gunzip -v 02file.gz 
02file.gz:	  0.0% -- replaced with 02file
[root@admin test001]# gzip -vd 03file.gz 
03file.gz:	  0.0% -- replaced with 03file

可以看到:gunzip -v 就等价于 gzip -dv

综上:gunzip 命令就等价于 gzip -d

五、bzip2命令

bzip2 命令同 gzip 命令类似,只能对文件进行压缩(或解压缩),对于目录只能压缩(或解压缩)该目录及子目录下的所有文件。当执行压缩任务完成后,会生成一个以“.bz2”为后缀的压缩包

“.bz2"格式是 Linux 的另一种压缩格式,从理论上来讲,”.bz2"格式的算法更先进、压缩比更好;而 ".gz"格式相对来讲的时间更快。

bzip2命令在压缩或解压缩任务完成后,默认会删除原始文件

**用法:**bzip2 [选项] 源文件

常用选项:

  • -d: 执行解压缩,此时该选项后的源文件应为标记有 .bz2 后缀的压缩包文件。
  • -k: bzip2 在压缩或解压缩任务完成后,会删除原始文件,若要保留原始文件,可使用此选项。
  • -f: bzip2 在压缩或解压缩时,若输出文件与现有文件同名,默认不会覆盖现有文件,若使用此选项,则会强制覆盖现有文件。
  • -t: 测试压缩包文件的完整性。
  • -v: 压缩或解压缩文件时,显示详细信息。
  • -数字: 这个参数和 gzip 命令的作用一样,用于指定压缩等级,-1 压缩等级最低,压缩比最差;-9 压缩比最高

注意,gzip 只是不会打包目录,但是如果使用“-r”选项,则可以分别压缩目录下的每个文件;而 bzip2 命令则根本不支持压缩目录,也没有“-r”选项

【例 1】直接压缩文件

[root@admin test001]# ls
passwd.txt
[root@admin test001]# bzip2 passwd.txt 
[root@admin test001]# ls
passwd.txt.bz2

此压缩命令会在压缩的同时删除源文件

压缩的时候不会输出,会将原来的文件file给删除,替换成filename.bz2.如果以前有file.bz2则不会替换并提示错误。如果想要替换则指定-f选项;如果file是目录则也提醒错误不做任何操作;如果file已经是压缩过的有 .bz2 后缀就显示提示信息,不再压缩,没有bz2后缀会再次压缩。

【例 2】压缩或解压的同时保留源文件

[root@admin test001]# ls
passwd.txt
#压缩的同时保留源文件
[root@admin test001]# bzip2 -k passwd.txt 
[root@admin test001]# ls
passwd.txt  passwd.txt.bz2       #压缩文件和源文件都存在
#解压的同时保留源文件
[root@admin test001]# ls
passwd.txt.bz2
[root@admin test001]# bzip2 -dk passwd.txt.bz2 
[root@admin test001]# ls
passwd.txt  passwd.txt.bz2

【例 3】

解压指定的文件

[root@admin test001]# ls
passwd.txt.bz2
[root@admin test001]# bzip2 -d passwd.txt.bz2 
[root@admin test001]# ls
passwd.txt

这里,解压的时候没标准输出,会将原来的文件filename.bz2给替换成filename。如果以前有filename则不会替换并提示错误。如果想要替换则指定-f选项,例如bzip2 -df filename.bz2

【例 4】压缩或解压的时候将执行结果输出

#压缩时显示执行结果
[root@admin test001]# bzip2 -v passwd.txt 
  passwd.txt:  0.409:1, 19.556 bits/byte, -144.44% saved, 27 in, 66 out.
  #解压缩时显示执行结果
[root@admin test001]# bzip2 -dv passwd.txt.bz2 
  passwd.txt.bz2: done

【例 5】模拟解压实际并不解压

[root@admin test001]# bzip2 -tv passwd.txt.bz2 
  passwd.txt.bz2: ok
[root@admin test001]# ls
passwd.txt.bz2

即用来测试压缩包文件的完整性。这里,-t 指定要进行模拟解压,不实际生成结果。为了在屏幕上输出,这里加上-v选项了

【例 6】解压到标准输出

[root@admin test001]# echo "abcdefghijklmnopqrstuvwxyz" > passwd.txt 
[root@admin test001]# bzip2 passwd.txt
[root@admin test001]# ls
passwd.txt.bz2
[root@admin test001]# bzip2 -dc passwd.txt.bz2 
abcdefghijklmnopqrstuvwxyz
[root@admin test001]# ls
passwd.txt.bz2

这里,使用 -c 指定到标准输出,输出的是文件file的内容,不会将 filename.bz2 进行解压或删除。

六、bunzip2命令

bz2格式的解压缩命令

要解压“.bz2”格式的压缩包文件,除了上面讲到的使用“ bzip2 -d 压缩包名 ”命令外,还可以使用 bunzip2 命令

bunzip2 命令的使用和 gunzip 命令大致相同,bunzip2 命令只能用于解压文件,即便解压目录,也是解压该目录以及所含子目录下的所有文件

bunzip2 命令在解压缩任务完成后,默认会删除原始文件

用法:bunzip2 [选项] 源文件

常用选项:

  • -k: 解压缩后,默认会删除原来的压缩文件。若要保留压缩文件,需使用此参数。
  • -f: 解压缩时,若输出的文件与现有文件同名时,默认不会覆盖现有的文件。若要覆盖,可使用此选项。
  • -v: 显示命令执行过程。

【例 1】解压缩

[root@admin test001]# ls
passwd.txt.bz2
[root@admin test001]# bunzip2 passwd.txt.bz2 
[root@admin test001]# ls
passwd.txt
#当然也可以这样
[root@admin test001]# ls
passwd.txt.bz2
[root@admin test001]# bzip2 -d passwd.txt.bz2 
[root@admin test001]# ls
passwd.txt

所以对于 .bz 的压缩包,使用 bzip2 -d 和 bunzip2 是等价的

【例 2】解压缩时保留源文件

[root@admin test001]# ls
passwd.txt.bz2
[root@admin test001]# bunzip2 -k passwd.txt.bz2 
[root@admin test001]# ls
passwd.txt  passwd.txt.bz2

七、xz,unxz命令

xz命令对文件进行压缩(或解压缩),当执行压缩任务完成后,会生成一个以“ .xz ”为后缀的压缩包。
xz 命令完成压缩或解压缩任务时,默认会删除源文件

用法:xz [选项] 源文件

常用选项:

  • -d:解压缩
  • -#:指定压缩比;默认是6;数字越大压缩比越大(1-9);
  • -k:保留原文件;

【例 1】压缩

[root@admin test001]# ls
passwd.txt
[root@admin test001]# xz passwd.txt 
[root@admin test001]# ls
passwd.txt.xz

【例 2】解压缩

[root@admin test001]# ls
passwd.txt.xz
[root@admin test001]# xz -d passwd.txt.xz 
[root@admin test001]# ls
passwd.txt

【例 3】保留源文件

#压缩时保留源文件
[root@admin test001]# ls
passwd.txt
[root@admin test001]# xz -k passwd.txt 
[root@admin test001]# ls
passwd.txt  passwd.txt.xz
#解压缩时保留源文件
[root@admin test001]# ls
passwd.txt.xz
[root@admin test001]# xz -dk passwd.txt.xz 
[root@admin test001]# ls
passwd.txt  passwd.txt.xz

【例 4】指定压缩比

[root@admin test001]# ls
passwd.txt
[root@admin test001]# xz -9 passwd.txt 
[root@admin test001]# ls
passwd.txt.xz

unxz 命令

要解压“ .xz ”格式的压缩包文件,除了上面讲到的使用“xz -d 压缩包名 ”命令外,还可以使用 unxz 命令

【例 1】解压缩

[root@admin test001]# ls
passwd.txt.xz
[root@admin test001]# unxz passwd.txt.xz 
[root@admin test001]# ls
passwd.txt

【例 2】保留源文件

[root@admin test001]# ls
passwd.txt.xz
[root@admin test001]# unxz -k passwd.txt.xz 
[root@admin test001]# ls

八、显示压缩文件内容

如果我们压缩的是一个纯文本文件,则可以直接使用以下命令查看压缩文件中的内容:

  • 对于" .gz "格式的压缩包:zcatzless
  • 对于" .bz2 " 格式的压缩包:bzcatbzless
  • 对于" .xz " 格式的压缩包:xzcatxzless

说明:以上命令查看对应格式的压缩包时不会解压该压缩包,只显示压缩的内容

当然,各种压缩方式基于不同的算法必定各有优缺点:时间快慢、压缩率高低、有无损坏等等

下面我们仅仅从压缩率的角度看看以上几个方式压缩的比较:

#对同一个文件进行不同方式的压缩
[root@admin test001]# ll
总用量 712
-rw------- 1 root root 505538 8月   4 14:15 messages
-rw------- 1 root root  34310 8月   4 14:15 messages.bz2
-rw------- 1 root root  75084 8月   4 14:13 messages.gz
-rw------- 1 root root  27456 8月   4 14:15 messages.xz
-rw-r--r-- 1 root root  75223 8月   4 14:13 messages.zip

单从压缩率来说,xz 最好, .zip 排在最后

九、打包归档命令 tar

tar 命令可以为linux的文件和目录创建档

利用 tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar 最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用 tar 命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。通常,归档总是会和系统(数据)备份联系在一起

首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件
通过一些压缩算法变成一个小文件

为什么要区分这两个概念呢?这源于 Linux 中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大
堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。

功能:该命令可以将许多文件一起保存到一个单独的磁带或磁盘中进行归档。不仅如此,该命令还可以从归档文件中还原所需文件,也就是打包的反过程,称为解打包

(一)tar命令做打包操作

**用法:**tar [选项] 源文件或目录

常用选项:

  • -c: 将文件进行打包。
  • -A: 追加 tar 文件到归档文件。
  • -f 包名: 指定包的文件名。包的扩展名是用来给管理员识别格式的,所以一定要正确指定扩展名;这个参数是最后 一个参数,后面只能接包的文件名
  • -v: 显示打包文件过程;
  • -r:向压缩归档文件末尾追加文件
  • - -remove-files :在添加文件至归档后删除它们

打包后源文件默认还存在

需要注意的是,在使用 tar 命令指定选项时可以不在选项前面输入“-”。例如,使用“cvf”选项和 “-cvf”起到的作用一样

【例 1】打包文件和目录

#将当前目录下的所有文件进行打包,包名为test.tar
[root@admin ~]# ls
anaconda-ks.cfg  UserManage.sh  userrecord.txt  u.sh
[root@admin ~]# tar -cvf test.tar ./*
./anaconda-ks.cfg
./UserManage.sh
./userrecord.txt
./u.sh
[root@admin ~]# ls
anaconda-ks.cfg  test.tar  UserManage.sh  userrecord.txt  u.sh

选项 “-cvf” 一般是习惯用法,记住打包时需要指定打包之后的文件名,而且要用 “.tar” 作为扩展名。打包目录也是如此:

[root@admin ~]# ll -d test/
drwxr-xr-x 3 root root 69 8月   4 14:39 test/
[root@admin ~]# tar -cvf dir.tar test/   #把目录打包为test.tar文件,同时会将目录下的所有文件进行打包
test/
test/file0
test/file1
test/file2
test/file3
test/dir/
test/dir/demo1
test/dir/demo2
test/dir/demo3

tar命令也可以打包多个文件或目录,只要用空格分开即可

【例 2】打包并压缩目录
要声明的是:压缩命令不能直接压缩目录,必须先用 tar 命令将目录打包,然后才能用 gzip 命令或 bzip2 命令对打包文件进行压缩

[root@admin ~]# ll -d test/ dir.tar    #我们之前已经把test目录打包成dir.tar文件
-rw-r--r-- 1 root root 10240 8月   4 14:40 dir.tar
drwxr-xr-x 3 root root    69 8月   4 14:39 test/ 
[root@admin ~]# gzip dir.tar    #gzip命令便将dir.tar压缩成dir.tar.gz
[root@admin ~]# ll dir.tar.gz
-rw-r--r-- 1 root root 236 8月   4 14:40 dir.tar.gz 

【例 3】向压缩归档文件末尾追加文件

[root@admin Dir]# ls
file1.gz  file99  file.gz.tar  file.tar  test  test.tar.gz
[root@admin Dir]# tar -tf  file.tar   #查看该归档文件中有哪些文件
file
test.tar.gz
file1
file99
[root@admin Dir]# tar -rf file.tar test.tar.gz   #将test.tar.gz文件追加到file.tar归档文件中 
[root@admin Dir]# tar -tf  file.tar   #查看是否添加成功
file
test.tar.gz
file1
file99
test.tar.gz   #在该归档文件末尾可以看到添加成功

如果想将一个tar包进行解打包后追加到另一个tar包中,可以这样做:

[root@admin demo]# tar -tf demo.tar   #查看file.tar包中的文件
demo1
demo2
[root@admin demo]# tar -tf file.tar #查看demo.tar包中的文件
./file1
./file2
./file3
[root@admin demo]# tar -Af file.tar demo.tar  #将emo.tar包进行解打包并将解打包后的文件追加到file.tar包中
[root@admin demo]# tar -tf file.tar 
./file1
./file2   #如果是使用-r选项的话只是将demo.tar包文件直接追加到file.tar包中
./file3
demo1
demo2

(二)tar命令做解打包操作

当 tar 命令用于对 tar 包做解打包操作时,该命令的用法为: tar [选项] 压缩包

解打包操作完成后,源文件默认还会保留

当用于解打包时,常用的选项为:

  • -x: 对 tar 包做解打包操作。
  • -f: 指定要解压的 tar 包的包名。
  • -t: 只查看 tar 包中有哪些文件或目录,不对 tar 包做解打包操作。
  • -C 目录: 指定解打包位置。
  • -v: 显示解打包的具体过程。

其实解打包和打包相比,只是把打包选项 “-cvf” 更换为 "-xvf"

【例 1】
解打包到当前目录下

[root@admin Dir]# tar -xvf dir.tar.gz 
test/
test/file0
test/file1
test/file2
test/file3
test/dir/
test/dir/demo1
test/dir/demo2
test/dir/demo3
[root@admin Dir]# ls
dir.tar.gz  test

如果使用 “-xvf” 选项,则会把包中的文件解压到当前目录下。如果想要指定解压位置,则需要使用 “-C(大写)” 选项

[root@admin Dir]# tar -xvf dir.tar.gz -C /tmp
test/
test/file0
test/file1
test/file2
test/file3
test/dir/
test/dir/demo1
test/dir/demo2
test/dir/demo3

【例 2】

如果只想查看文件包中有哪些文件,则可以把解打包选项 “-x” 更换为测试选项 “-t”

[root@admin Dir]# tar tvf dir.tar.gz     #会用长格式显示test.tar文件包中文件的详细信息
drwxr-xr-x root/root         0 2020-08-04 14:39 test/
-rw-r--r-- root/root         0 2020-08-04 14:39 test/file0
-rw-r--r-- root/root         0 2020-08-04 14:39 test/file1
-rw-r--r-- root/root         0 2020-08-04 14:39 test/file2
-rw-r--r-- root/root         0 2020-08-04 14:39 test/file3
drwxr-xr-x root/root         0 2020-08-04 14:40 test/dir/
-rw-r--r-- root/root         0 2020-08-04 14:40 test/dir/demo1
-rw-r--r-- root/root         0 2020-08-04 14:40 test/dir/demo2
-rw-r--r-- root/root         0 2020-08-04 14:40 test/dir/demo3

(三)tar命令做打包压缩(解压缩解打包)操作

你可能会觉得 Linux 实在太不智能了,一个打包压缩,居然还要先打包成 “.tar” 格式,再压缩成 “.tar.gz” 或 “.tar.bz2” 格式。其实 tar 命令是可以同时打包压缩,也可以同时解压缩解打包的

**当 tar 命令同时做打包压缩的操作时,其用法为:**tar [选项] 压缩包 源文件或目录

常用选项:

  • -z:压缩和解压缩 “.tar.gz” 格式;
  • -j:压缩和解压缩 ".tar.bz2"格式。
  • -J: 压缩和解压缩 ".tar.xz"格式

【例 1】压缩与解压缩 ".tar.gz"格式

#将/tmp/打包并压缩为tmp.tar.gz(即先打包后压缩为.gz格式的)
[root@admin Dir]# tar -zcvf tmp.tar.gz  /tmp/
[root@admin Dir]# ls
 tmp.tar.gz
[root@admin Dir]# tar -zxvf tmp.tar.gz  (即先解压缩后解打包)
[root@admin Dir]# ls
 tmp   tmp.tar.gz 

【例 2】压缩与解压缩 ".tar.bz2"格式

#将/tmp/打包并压缩为tmp.tar.bz2
[root@admin Dir]# tar -jcvf tmp.tar.bz2  /tmp/
[root@admin Dir]# ls
 tmp.tar.bz2 
#将tmp.tar.bz2解压并解打包到当前目录下 
[root@admin Dir]# tar -jxvf tmp.tar.bz2
[root@admin Dir]# ls
 tmp  tmp.tar.bz2  

把文件直接压缩成".tar.gz"和".tar.bz2"格式,才是 Linux 中最常用的压缩方式,这是大家一定要掌握的压缩和解压缩方法

【例 3】压缩与解压缩 ".xz"格式

#将/tmp/打包并压缩为tmp.tar.xz
[root@admin Dir]# tar -Jcvf tmp.tar.xz /tmp/
[root@admin Dir]# ls
tmp.tar.xz
[root@admin Dir]# tar -tf tmp.tar.xz     #查看该压缩包中的内容
……省略此命令执行后的输出结果……
#将tmp.tar.xz解压并解打包到/usr/local目录下 
[root@admin Dir]# tar -Jxvf tmp.tar.xz -C /usr/local/
[root@admin local]# cd /usr/local
[root@admin local]# ll -d tmp
drwxrwxrwt 35 root root 4096 8月   4 15:01 tmp

前面讲的选项 “-C” 用于指定解压位置、"-t" 用于查看压缩包内容,在这里同样适用

【例 4】
将/var/log/messages打包压缩成mess.tar.gz后,并删除源文件:

[root@admin ~]# tar -czf mess.tar.gz /var/log/messages  --remove-files

【例 5】
将 mess.tar.gz 解压缩解打包后,并删除源文件:

[root@admin ~]# tar -xvf mess.tar.gz && rm -rf mess.tar.gz 

十、建立YUM源服务器

实现目标1:提供基础软件Base

①安装ftp服务

[root@admin ~# yum -y install vsftpd       #搭建ftp服务。安装成功后会默认在/var下创建 ftp 目录
[root@admin ~]# mkdir /var/ftp/centos7   #在 /var/ftp/ 下创建名为 centos7的目录,存放centos7版本的iso镜像提供的基础软件(rpm包)
[root@admin ~]# systemctl start vsftpd   #启动ftp服务
[root@admin ~]# systemctl enable vsftpd

②配置防火墙

[root@admin ~]# firewall-cmd --permanent --add-service=ftp
[root@admin ~]# firewall-cmd --reload

③关闭SELinux

[root@admin ~]# setenforce 0
[root@admin ~]# vim /etc/sysconfig/selinux
SELINUX=disabled

④挂载centos镜像
通过xshell自带的ftp工具将CentOS 7.2的镜像上传至服务器的/home目录下

[root@admin ~]# mount -o loop /home/centos7u2.iso /var/ftp/centos7u2    #将ISO镜像挂载至ftp服务目录下的centos7u2目录
[root@admin ~]# echo “mount -o loop /home/centos7u2.iso /var/ftp/centos7u2” >> /etc/rc.local   #将该挂载写入开机启动项文件中
[root@admin ~]# chmod +x /etc/rc.d/rc.local   #并给该文件执行权限,这样 每次开机后会自动挂载

实现目标2: 提供其它软件包如nginx(这里模拟基础软件包中未提供的软件)

①复制已缓存的Nginx 及依赖包 到自定义YUM仓库目录中:

[root@localhost ~]# mkdir /var/ftp/nginx   #在ftp文件夹下创建 nginx目录,用于存放nginx的相关配置及软件包

②YUM缓存:

#1. 配置服务器的nginx
[root@admin ~]# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/   #因为官网未提供nginx所以专门配置nginx服务的官方源
gpgcheck=0
enabled=1
#2. 启动yum缓存安装nginx
[root@admin ~]# vim /etc/yum.conf   
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=1   #开启缓存,这样在下载后可以获得该软件包
debuglevel=2
[root@admin ~]#yum clean all   #清理缓存
[root@admin ~]# yum -y install nginx    #在服务器上下载并安装nginx
[root@admin ~]# find /var/cache/yum/x86_64/7/ -iname "*.rpm" -exec cp -rf {} /var/ftp/nginx \;    #下载完成后便会将该软件包存放在 /var/cache/yum目录下,这时需将该软件包存放在ftp目录下的nginx目录中,以供客户端使用

③创建yum仓库,创建索引信息

#3. 创建reopdata:
[root@admin ~]# yum -y install createrepo  #安装createrepo软件包
[root@admin ~]# createrepo /var/ftp/nginx //    #此程序主要用于生成创建yum仓库,创建索引信息
nginx-1.8.1-1.el6.ngx.x86_64.rpm repodata

这样就完成了Yum源服务器的配置

客户端配置YUM源:

[Demo@admin ~]$  vim /etc/yum.repos.d/centos7.repo //指向服务器基础源,即上面服务器的 /var/ftp/centos7 目录
[centos7]
name=centos7
baseurl=ftp://x.x.x.x/centos7u2   #服务器的ip地址
gpgcheck=0
[Demo@admin ~]$  vim /etc/yum.repos.d/nginx.repo //指向nginx源
[nginx]
name=nginx
baseurl=ftp://x.x.x.x/nginx #服务器的ip地址
gpgcheck=0

然后执行:

[Demo@admin ~]$  yum clean all 
[Demo@admin ~]$  yum makecache

这样客户端便可以使用内部Yum源服务器下载安装软件

猜你喜欢

转载自blog.csdn.net/weixin_45880055/article/details/107779888