linux文件压缩和打包

6.1 压缩打包介绍

  • 使用压缩工具的好处:

使用压缩文件,不仅可以节省磁盘空间,而且在传输时还能节省网络宽带。

我们通常讲的家用宽带和机房宽带100M是有区别的:

机房宽带的上行和下行都是100M,所以价格昂贵,家用宽带下行是100M,但是上行往往只有10M-20M

  •  Linux常用的文件压缩格式:
  1. .gz   :   表示由gzip压缩工具压缩的文件。

  2. .bz2 :   表示由bzip2压缩工具压缩的文件。
  3. .tar  :    表示由tar打包程序打包的文件
  4. .tar.gz  :  表示先打包,再由gzip压缩。
  5. .tar.bz2 : 表示先打包,再由bzip2压缩
  6. .tar.xz :   表示先打包,再由xz压缩

6.2  gzip压缩工具

  • 格式:gzip [参数] filename  
gzip -# filename     //#压缩等级1-9,默认6
gzip filename       //压缩文件,暂不支持压缩目录,压缩后源文件消失
gzip -d filename.gz //解压文件,解压后,源压缩文件消失
gunzip filename.gz //解压文件, 解压后,源压缩文件消失
gzip –c filename > /tmp/filename.gz  //指定压缩文件路径,并且源文件存在
gzip –d –c /tmp/filename.gz > /目录/filename   //解压文件到那个路径下。
gunzip –c /tmp/filename.gz > /目录/filename    //解压文件到那个路径下。
zcat xzl.txt.gz   //查看.gz的压缩文件内容
file /tmp/xzl.txt.gz //查看此压缩文件的属性
gzip 不能压缩目录

例子:查找/etc/下后缀为.conf的文件,并将它的内容追加到文件xzl.txt中,并且压缩它,然后再解压。

[root@localhost d6z]# find /etc/ -type f -name "*.conf" -exec cat {} >> xzl.txt \;
[root@localhost d6z]# du -sh xzl.txt   
444K	xzl.txt   //这里查看该文件内存不是很大,我们多追加点,让它变大点
[root@localhost d6z]# find /etc/ -type f -name "*.conf" -exec cat {} >> xzl.txt \;
[root@localhost d6z]# find /etc/ -type f -name "*.conf" -exec cat {} >> xzl.txt \;
[root@localhost d6z]# find /etc/ -type f -name "*.conf" -exec cat {} >> xzl.txt \;
[root@localhost d6z]# find /etc/ -type f -name "*.conf" -exec cat {} >> xzl.txt \;
[root@localhost d6z]# find /etc/ -type f -name "*.conf" -exec cat {} >> xzl.txt \;
[root@localhost d6z]# find /etc/ -type f -name "*.conf" -exec cat {} >> xzl.txt \;
[root@localhost d6z]# find /etc/ -type f -name "*.conf" -exec cat {} >> xzl.txt \;
[root@localhost d6z]# find /etc/ -type f -name "*.conf" -exec cat {} >> xzl.txt \;
[root@localhost d6z]# find /etc/ -type f -name "*.conf" -exec cat {} >> xzl.txt \;
[root@localhost d6z]# find /etc/ -type f -name "*.conf" -exec cat {} >> xzl.txt \;
[root@localhost d6z]# find /etc/ -type f -name "*.conf" -exec cat {} >> xzl.txt \;
[root@localhost d6z]# find /etc/ -type f -name "*.conf" -exec cat {} >> xzl.txt \;
[root@localhost d6z]# find /etc/ -type f -name "*.conf" -exec cat {} >> xzl.txt \;
[root@localhost d6z]# du -sh xzl.txt 
7.9M	xzl.txt                      //现在文件已经达到将近8M大小了
[root@localhost d6z]# wc -l xzl.txt 
215084 xzl.txt    //查看文件行数
[root@localhost d6z]# gzip xzl.txt   //使用gzip压缩该文件
[root@localhost d6z]# ls
xzl.txt.gz                           //压缩后文件名后缀多了.gz,同时源文件消失
[root@localhost d6z]# du -sh xzl.txt.gz 
2.0M	xzl.txt.gz                   //压缩后文件大小缩小到2M
[root@localhost d6z]# gzip -d xzl.txt.gz   //使用gzip -d 解压
[root@localhost d6z]# ls
xzl.txt                                 
[root@localhost d6z]# du -sh xzl.txt 
7.4M	xzl.txt                           //解压完成,同时源压缩文件消失了
[root@localhost d6z]# wc -l xzl.txt 
215084 xzl.txt                           //文件行数不变
[root@localhost d6z]# gzip -c xzl.txt > /tmp/xzl.txt.gz // 指定压缩后的目录,并且保留原文件
[root@localhost d6z]# ls
xzl.txt
[root@localhost d6z]# ls /tmp/xzl.txt.gz 
/tmp/xzl.txt.gz
[root@localhost tmp]# gunzip -c xzl.txt.gz > /tmp/test/xzl.txt  //使用另一种解压方法gunzip解压文件并指定目录。原文件保留
[root@localhost tmp]# ls /tmp/test/
am  am1  xzl.txt
[root@localhost tmp]# ls /tmp/xzl.txt.gz 
/tmp/xzl.txt.gz

6.3 bzip2压缩工具

bzip2命令的格式为bzip2 [-dz] filename, 它只有-z(压缩)和-d(解压)两个常用选项。压缩级别有1-9.默认级别是6。压缩时,加或不加-z选项都可以压缩文件。示例命令如下:

bzip2命令也不可以压缩目录,压缩目录时会报错,如下所示:

6.4 xz压缩工具

xz命令的格式为xz [-dz] filename, 和bzip2类似,它也只有-z(压缩)和-d(解压)两个常用选项。压缩级别有1-9.默认级别是9,压缩的最狠,同时也最耗费cpu资源。示例命令如下:

xz命令同样也不可以压缩目录。

xzcat 查看压缩文件

[root@localhost test]# xzcat xzl.txt.xz 

6.5 zip压缩工具

前面几个命令都不支持压缩目录,但是zip支持。 
需要安装zip工具。 
安装:yum install -y zip

  • 压缩文件

基本用法:zip [参数] [打包后的文件名] [打包的目录路径] 

压缩xzl.txt为xzl.zip:

  • 压缩目录 zip -r

压缩/tmp目录为tmp.zip:

[root@localhost tmp]# tree /tmp
/tmp
├── 123.txt.bz2
├── 8
│   └── test
│       └── 1.txt
├── d6z
│   └── xzl.txt
├── passwd
├── test
│   ├── am
│   ├── am1
│   ├── xzl.txt
│   └── xzl.zip
├── test.txt
├── xzl111.txt
├── xzl.txt.gz
└── yum.log.bak

6 directories, 10 files
[root@localhost tmp]# zip -r tmp.zip /tmp/
  adding: tmp/ (stored 0%)
  adding: tmp/.XIM-unix/ (stored 0%)
  adding: tmp/.Test-unix/ (stored 0%)
  adding: tmp/.font-unix/ (stored 0%)
  adding: tmp/.ICE-unix/ (stored 0%)
  adding: tmp/.X11-unix/ (stored 0%)
  adding: tmp/test/ (stored 0%)
  adding: tmp/test/am/ (stored 0%)
  adding: tmp/test/am1/ (stored 0%)
  adding: tmp/test/xzl.txt (deflated 74%)
  adding: tmp/test/xzl.zip (stored 0%)
  adding: tmp/test.txt (deflated 28%)
  adding: tmp/yum.log.bak (stored 0%)
  adding: tmp/xzl111.txt (stored 0%)
  adding: tmp/passwd (deflated 56%)
  adding: tmp/123.txt.bz2 (deflated 2%)
  adding: tmp/.1.txt.swp (deflated 84%)
  adding: tmp/8/ (stored 0%)
  adding: tmp/8/test/ (stored 0%)
  adding: tmp/8/test/1.txt (deflated 64%)
  adding: tmp/d6z/ (stored 0%)
  adding: tmp/d6z/xzl.txt (deflated 74%)
  adding: tmp/xzl.txt.gz (deflated 0%)
[root@localhost tmp]# du -sh tmp.zip 
9.0M	tmp.zip

使用zip压缩,默认保留原文件。

  • 解压 unzip

安装:yum install -y unzip 
解压tmp.zip:

因为压缩的时候并没有删除源文件,所以在解压缩的时候会提示,是不是要覆盖,是不是要替换,是不是要重命名,根据自己情况选择

解压到其他目录:unzip -d

注意。因为压缩前是目录,所以解压后也是目录。

查看压缩文件

zip压缩是不能查看文件内容的,只能查看目录

6.6 tar打包

tar本身就是一个打包工具,可以把目录打包成一个文件,它把所有文件整合成一个大文件,方便复制或者移动。该命令的格式为:

tar [-zjxcvfpP] filename 

  • 常用选项有:
-c:建立一个压缩文件的参数指令(create 的意思);    
-x:解开一个压缩文件的参数指令!    
-t:查看 tarfile 里面的文件!    
-r:向压缩归档文件末尾追加文件    
-u:更新原压缩包中的文件  
  • 打包一个目录 tar -cvf:
[root@localhost tmp]# ls
123.txt.bz2  8  d6z  passwd  test  test.txt  tmp  tmp.zip  xzl111.txt  xzl.txt.gz  yum.log.bak
[root@localhost tmp]# tar -cvf test.tar test/
test/
test/am/
test/am1/
test/xzl.txt
test/xzl.zip
test/tmp/
test/tmp/.XIM-unix/
test/tmp/.Test-unix/
test/tmp/.font-unix/
test/tmp/.ICE-unix/
test/tmp/.X11-unix/
test/tmp/test/
test/tmp/test/am/
test/tmp/test/am1/
test/tmp/test/xzl.txt
test/tmp/test/xzl.zip
test/tmp/test.txt
test/tmp/yum.log.bak
test/tmp/xzl111.txt
test/tmp/passwd
test/tmp/123.txt.bz2
test/tmp/.1.txt.swp
test/tmp/8/
test/tmp/8/test/
test/tmp/8/test/1.txt
test/tmp/d6z/
test/tmp/d6z/xzl.txt
test/tmp/xzl.txt.gz
[root@localhost tmp]# ls
123.txt.bz2  8  d6z  passwd  test  test.tar  test.txt  tmp  tmp.zip  xzl111.txt  xzl.txt.gz  yum.log.bak
[root@localhost tmp]# du -sh test.tar 
30M	test.tar
[root@localhost tmp]# du -sh test/
30M	test/

使用-cvf 表示创建、可视化、指定目录名字 
通过查看大小可以发现,tar不会改变目录或文件的大小

  • 解压包 tar -xvf
[root@localhost tmp]# tar -xvf test.tar 
test/
test/am/
test/am1/
test/xzl.txt
test/xzl.zip
test/tmp/
test/tmp/.XIM-unix/
test/tmp/.Test-unix/
test/tmp/.font-unix/
test/tmp/.ICE-unix/
test/tmp/.X11-unix/
test/tmp/test/
test/tmp/test/am/
test/tmp/test/am1/
test/tmp/test/xzl.txt
test/tmp/test/xzl.zip
test/tmp/test.txt
test/tmp/yum.log.bak
test/tmp/xzl111.txt
test/tmp/passwd
test/tmp/123.txt.bz2
test/tmp/.1.txt.swp
test/tmp/8/
test/tmp/8/test/
test/tmp/8/test/1.txt
test/tmp/d6z/
test/tmp/d6z/xzl.txt
test/tmp/xzl.txt.gz
[root@localhost tmp]# ls
123.txt.bz2  8  d6z  passwd  test  test.tar  test.txt  tmp  tmp.zip  xzl111.txt  xzl.txt.gz  yum.log.bak
[root@localhost tmp]# 
  • 查看包里的目录 tar -tf
[root@localhost tmp]# tar -tf test.tar 
test/
test/am/
test/am1/
test/xzl.txt
test/xzl.zip
test/tmp/
test/tmp/.XIM-unix/
test/tmp/.Test-unix/
test/tmp/.font-unix/
test/tmp/.ICE-unix/
test/tmp/.X11-unix/
test/tmp/test/
test/tmp/test/am/
test/tmp/test/am1/
test/tmp/test/xzl.txt
test/tmp/test/xzl.zip
test/tmp/test.txt
test/tmp/yum.log.bak
test/tmp/xzl111.txt
test/tmp/passwd
test/tmp/123.txt.bz2
test/tmp/.1.txt.swp
test/tmp/8/
test/tmp/8/test/
test/tmp/8/test/1.txt
test/tmp/d6z/
test/tmp/d6z/xzl.txt
test/tmp/xzl.txt.gz
[root@localhost tmp]# 
  • 过滤指定文件 –exclude
[root@localhost tmp]# tar -cvf d6z.tar --exclude xzl.txt d6z/   #过滤掉xzl.txt
d6z/
d6z/111.txt
d6z/222.txt
d6z/333.txt
d6z/444.txt
d6z/xzl/
d6z/d6z.tar
[root@localhost tmp]# tar -tf d6z.tar 
d6z/
d6z/111.txt
d6z/222.txt
d6z/333.txt
d6z/444.txt
d6z/xzl/
d6z/d6z.tar
[root@localhost tmp]# 

6.7 打包并压缩

  • 打包的时候同时用gzip压缩tar -czvf:

  • 解压gzip的包 tar -zxvf (其中-C参数是指定目录的意思)

  • 打包的时候同时用bzip2压缩 tar -cjvf

  • 解压bzip2的包 tar -jxvf

  • 使用tar -tf 查看包内信息:

课堂笔记:

回到命令行首:ctrl+a

回到命令行尾:ctrl+e

/etc/fstab/详解:

一、etc/fstab文件的作用

         磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新挂载。

        系统开机时会主动读取/etc/fstab这个文件中的内容,根据文件里面的配置挂载磁盘。这样我们只需要将磁盘的挂载信息写入这个文件中我们就不需要每次开机启动之后手动进行挂载了。

二、挂载的限制

    在说明这个文件的作用之前我想先强调一下挂载的限制。

  1、根目录是必须挂载的,而且一定要先于其他mount point被挂载。因为mount是所有目录的跟目录,其他木有都是由根目录 /衍生出来的。

  2、挂载点必须是已经存在的目录。

  3、挂载点的指定可以任意,但必须遵守必要的系统目录架构原则

  4、所有挂载点在同一时间只能被挂载一次

  5、所有分区在同一时间只能挂在一次

  6、若进行卸载,必须将工作目录退出挂载点(及其子目录)之外。

三、/etc/fstab文件中的参数

下面我们看看看/etc/fstab文件,这是我的linux环境中/etc/fstab文件中的内容:

第一列:Device:磁盘设备文件或者该设备的Label或者UUID : 使用设备名称(/dev/sda)来挂载分区时是被固定死的,一旦磁盘的插槽顺序发生了变化,就会出现名称不对应的问题。因为这个名称是会改变的。不过使用label挂载就不用担心插槽顺序方面的问题。不过要随时注意你的Label name。至于UUID,每个分区被格式化以后都会有一个UUID作为唯一的标识号。使用uuid挂载的话就不用担心会发生错乱的问题了。

第二列:Mount point:设备的挂载点,就是你要挂载到哪个目录下。

第三列:filesystem:磁盘文件系统的格式,包括ext2、ext3、reiserfs、nfs、vfat等

第四列:parameters:文件系统的参数:

Async/sync

设置是否为同步方式运行,默认为async

auto/noauto 

 当下载mount -a 的命令时,此文件系统是否被主动挂载。默认为auto

rw/ro        

 是否以以只读或者读写模式挂载

exec/noexec        

 限制此文件系统内是否能够进行"执行"的操作

user/nouser

是否允许用户使用mount命令挂载

suid/nosuid

是否允许SUID的存在

Usrquota

启动文件系统支持磁盘配额模式

Grpquota

启动文件系统对群组磁盘配额模式的支持

Defaults

同时具有rw,suid,dev,exec,auto,nouser,async等默认参数的设置

第五列:能否被dump备份命令作用:dump是一个用来作为备份的命令。通常这个参数的值为0或者1

         0

代表不要做dump备份

         1

代表要每天进行dump的操作

         2

代表不定日期的进行dump操作

第六列:是否检验扇区:开机的过程中,系统默认会以fsck检验我们系统是否为完整(clean)。

0

不要检验

1

最早检验(一般根目录会选择)

2

1级别检验完成之后进行检验

RAID详解:

磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。

        磁盘阵列是由很多价格较便宜的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。

        磁盘阵列还能利用同位检查(Parity Check)的观念,在数组中任意一个硬盘故障时,仍可读出数据,在数据重构时,将数据经计算后重新置入新硬盘中。

优点

  •        提高传输速率。
  •        通过数据校验提供容错功能。

缺点

          RAID0没有冗余功能,如果一个磁盘(物理)损坏,则所有的数据都无法使用。

          RAID1磁盘的利用率最高只能达到50%(使用两块盘的情况下),是所有RAID级别中最低的。

          RAID0+1以理解为是RAID 0和RAID 1的折中方案。RAID 0+1可以为系统提供数据安全保障,但保障程度要比 Mirror低而磁盘空间利用率要比Mirror高。

RAID级别:

1、RAID 0

RAID 0是最早出现的RAID模式,即Data Stripping数据分条技术。RAID 0是组建磁盘阵列中最简单的一种形式,只需要2块以上的硬盘即可,成本低,可以提高整个磁盘的性能和吞吐量。RAID 0没有提供冗余或错误修复能力,但实现成本是最低的。

RAID 0最简单的实现方式就是把N块同样的硬盘用硬件的形式通过智能磁盘控制器或用操作系统中的磁盘驱动程序以软件的方式串联在一起创建一个大的卷集。在使用中电脑数据依次写入到各块硬盘中,它的最大优点就是可以整倍的提高硬盘的容量。如使用了三块80GB的硬盘组建成RAID 0模式,那么磁盘容量就会是240GB。其速度方面,各单独一块硬盘的速度完全相同。最大的缺点在于任何一块硬盘出现故障,整个系统将会受到破坏,可靠性仅为单独一块硬盘的1/N。

2、RAID 1

RAID1称为磁盘镜像,原理是把一个磁盘的数据镜像到另一个磁盘上,也就是说数据在写入一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件,在不影响性能情况下最大限度的保证系统的可靠性和可修复性上,只要系统中任何一对镜像盘中至少有一块磁盘可以使用,甚至可以在一半数量的硬盘出现问题时系统都可以正常运行,当一块硬盘失效时,系统会忽略该硬盘,转而使用剩余的镜像盘读写数据,具备很好的磁盘冗余能力。虽然这样对数据来讲绝对安全,但是成本也会明显增加,磁盘利用率为50%,以四块80GB容量的硬盘来讲,可利用的磁盘空间仅为160GB。另外,出现硬盘故障的RAID系统不再可靠,应当及时的更换损坏的硬盘,否则剩余的镜像盘也出现问题,那么整个系统就会崩溃。更换新盘后原有数据会需要很长时间同步镜像,外界对数据的访问不会受到影响,只是这时整个系统的性能有所下降。因此,RAID 1多用在保存关键性的重要数据的场合。

RAID 1主要是通过二次读写实现磁盘镜像,所以磁盘控制器的负载也相当大,尤其是在需要频繁写入数据的环境中。为了避免出现性能瓶颈,使用多个磁盘控制器就显得很有必要。

3、RAID0+1

从RAID 0+1名称上我们便可以看出是RAID0与RAID1的结合体。在我们单独使用RAID 1也会出现类似单独使用RAID 0那样的问题,即

在同一时间内只能向一块磁盘写入数据,不能充分利用所有的资源。为了解决这一问题,我们可以在磁盘镜像中建立带区集。因为这

种配置方式综合了带区集和镜像的优势,所以被称为RAID 0+1。把RAID0和RAID1技术结合起来,数据除分布在多个盘上外,每个盘都有其物理镜像盘,提供全冗余能力,允许一个以下磁盘故障,而不影响数据可用性,并具有快速读/写能力。RAID0+1要在磁盘镜像中建立带区集至少4个硬盘。

4、RAID 2

将数据条块化地分布于不同的硬盘上,条块单位为位或字节,并使用称为“加重平均纠错码汉明码)”的编码技术来提供错误检查及恢复。

5、RAID 3

它同RAID 2非常类似,都是将数据条块化分布于不同的硬盘上,区别在于RAID 3使用简单的奇偶校验,并用单块磁盘存放奇偶校验信息。如果一块磁盘失效,奇偶盘及其他数据盘可以重新产生数据;如果奇偶盘失效则不影响数据使用。RAID 3对于大量的连续数据可提供很好的传输率,但对于随机数据来说,奇偶盘会成为写操作的瓶颈。

6、RAID 4

RAID 4同样也将数据条块化并分布于不同的磁盘上,但条块单位为块或记录。RAID 4使用一块磁盘作为奇偶校验盘,每次写操作都需要访问奇偶盘,这时奇偶校验盘会成为写操作的瓶颈,因此RAID 4在商业环境中也很少使用。

7、RAID 5

RAID 5不单独指定的奇偶盘,而是在所有磁盘上交叉地存取数据及奇偶校验信息。在RAID 5上,读/写指针可同时对阵列设备进行操作,提供了更高的数据流量。RAID 5更适合于小数据块和随机读写的数据。RAID 3与RAID 5相比,最主要的区别在于RAID 3每进行一次数据传输就需涉及到所有的阵列盘;而对于RAID 5来说,大部分数据传输只对一块磁盘操作,并可进行并行操作。在RAID 5中有“写损失”,即每一次写操作将产生四个实际的读/写操作,其中两次读旧的数据及奇偶信息,两次写新的数据及奇偶信息。

8、RAID 6

  1. 至少大于等于4块盘
  2. 总容量为n-2/n,其中一块为校验盘。
  3. 它的安全性大于raid5,性能则低于raid5。(支持两块盘同时损坏)

猜你喜欢

转载自blog.csdn.net/xzl18779631005/article/details/81566113
今日推荐