第四十讲——LVM逻辑卷 DM(Device Mapper),能够将多个设备映射成逻辑设备,其功能要比MD的功能要强大,DM不仅仅能提供所谓的软RAID的功能,他还是逻辑卷的基础。 逻辑卷2,(逻辑卷1并不需要DM的功能)。 在DM的基础上我们也能够实现RAID0、RAID1,但是实现RAID5是比较麻烦的,Jbod也能有DM实现。 DM(Device Mapper)与MD有重叠之处,但又不完全重叠,这就是MD和DM都存在的原因。我们常常拿MD做RAID,拿DM做LVM2,MD和DM是linux内核中的两种不同的模块,是两种不同的逻辑设备的实现机制。 DM模块架构:(一些支持的功能,将物理设备组合成逻辑设备) LVM2 快照,snapshot linear,线性设备,类似于Jbod mirror,类似于MD中的镜像 multipath,多路径,在一些生产环境中,对数据可靠性要求非常高的场合用的比较多。 多路径: 例如,我们存储阵列可能是放在计算机的外部,通过线缆连接,如果这根线缆故障不同了,这在严格的场所是不被允许的,这时,我们就可以使用两根线缆连接,但是两根线缆怎么实现数据的传输?同样的数据发送量两次? 这时候我们就需要一个线路管理策略,发数据由两根线同时承担(负载均衡),也可以使用一根线传输,另一条冗余备份。 多路径需要通过(借助)DM来配置,让我们实现数据存储设备的寻路,能够通过多根不同的线来完成。 snapshot,快照: 快照就是保留数据在做快照的那一瞬间,在VMware中我们使用快照文件本身和安装操作系统对应的那块虚拟磁盘的大小是不一样的,快照一般会小于源数据。因为快照不是镜像,二是访问同一个数据的另外一条路径,类似于软连接。 但是我们需要明白的是,快照的这个访问路径不仅仅是一个路径的问题,它也可以作为用户去访问它所对应映射的那个磁盘上的通路,在刚做完快照的时候我们通过快照和原路径看到的数据是一样的。当我们之后对某这个文件进行了修改的时候,快照会将修改之前的数据保存至快照中,而修改后的文件则在本地,当通过快照去访问一个数据的时候,没有改变的数据还是通过原来的路径进行访问,已经修改过的数据通过快照访问快照中保存的数据。快照中保存的都是修改的数据(修改之前),因此快照都比较小,这也就是快照能够让数据停留在某一时刻的原因。 快照常常用于数据备份,为了实现线上服务器由于意外情况中断服务,我们要经常进行有效的备份,RAID0、RAID1只是在硬件层次保证不因硬件损坏而终止服务,但是并不能阻止类似于rm –rf /的操作,所以我们是要进行有效备份,对于一个企业来讲,硬件不是最主要的,数据才是最关键的。 对于很多的服务器来说,宕机,下线是不被允许的,其造成的损失是巨大的。 线上的服务器是每时每刻都在产生数据的,我们不能通过cp/dd等命令来进行备份,消耗资源不说,其时间不统一,此时快照酒派上用场了,即快照的那一刻的时间点是固定的,其保存的速度也是很快的,这堆文件系统来说是一个非常关键的功能。 DM(Device Mapper)可以实现边界的加减,且不影响原来的数据(支持动态增减)。 使用逻辑卷可以简单实现文件系统扩展, 最上面的类似于扩展分区,我们要知道,扩展分是不能直接使用的,需要划分成逻辑分区才能够使用。虽然这个逻辑边界可以实现快速的增加减少磁盘,但是其本身并不能实现文件系统,最多只能算是一个底层的物理空间融合器,并且向上一层提供一个统一的界面,我们想要使用数据存储数据的话,还得创建类似于逻辑逻辑分区,这个逻辑分区才是真正可以扩大和减少的。 在一个卷组中,可以包含多个物理卷进来,卷组的边界取决于底层物理卷加起来有多大。 PV组合起来为VG 在VG上可以创建多个逻辑卷,逻辑卷之和不能超过VG的边界。 我们对逻辑卷也可以创建快照,但是快照卷必须跟它的逻辑卷组在同一个卷组当中,这就意味着我们将来给某一个逻辑卷创建快照的话,一定要预留空间用于创建快照,而后通过快照作为访问逻辑卷的另一个入口。 增减边界: 在pv上(我们将物理设备做成物理卷),将pv加入某一个卷组,从而拓展某个卷组的空间,只要把这个pv放进VG(卷组),酒意味着这个卷组要把这个pv提供的存储能力划分成一个一个的数据块,类似于RAID中的chunk,这个块不是文件系统的块,因为我们还没有格式化,叫做PE(physical extend)盘区。 因此,当一个物理卷加入一个卷组后,它一定是跟卷组所定义的PE是相同的,我们创建卷组的时候要指定PE(物理盘区)的大小,物理卷只有加入了卷组才能有PE。 我么创建逻辑卷,实际上就是给它分配多少个PE,这个逻辑卷就成为一个存储空间了,只是到了逻辑卷层将它成为LE(logical extend),LE其实还是PE,只是站的角度不同。从物理卷看为PE,从逻辑卷看为LE。 由于一个块或者一个PE只能属于一个分区,所以实际的空间大小可能和指定的结果存在一定得差距。逻辑卷的大小是可以超过单个物理卷(PV)的大小的,因为在逻辑卷层是看不见PV层的,只能看到卷组和卷组中的PE。 一个逻辑卷中的PE可能来自不同的PV(物理卷),当某一个PV(物理卷)损坏,则该逻辑卷损坏,我们也可以将逻辑卷中的数据做成镜像的形式,即具有镜像功能的逻辑卷,两个物理设备(PV)上各一份,当其中一个物理设备损坏时数据还在。 逻辑卷就像一个分区一样,可以对其格式化、挂载使用。 我们要创建逻辑卷应当先准备物理设备(PV),逻辑卷的底层设备可以是分区、磁盘、甚至可以是RAID。且我们将逻辑卷建在硬件RAID上的优势是很明显的。 给自己讲linux 2017-01-09 评论 1571 次浏览
第三十九讲——软RAID 使用软RAID组合设备需要用到mdadm相关命令。 mdadm上任何块设备都可以做成RAID,这就意味着分区也是可以做成RAID,但是 几个分区做成RAID0、RAID1没有任何的意义,还浪费CPU的计算能力。但是使用分区做做实验还是可以的。 mdadm是一个模式化的命令。 -C 创建模式、管理模式 -l 指定RAID级别 -n # 指定RAID设备个数,并写出设备文件 -a 自动回答yes创建设备文件。自动回答是否创建设备文件 -c 指定chunk大小,应为2的整数倍。chunk为条带时划分数据的单位 chunk默认为64KB -x 指定空闲盘的个数 mdadm –C /dev/md0 –a yes –l 0 –n 2 /dev/sdb{2,3} -F 监控模式 -G 增长模式,例如向RAID5中添加磁盘 -A 装配模式,识别RAID并组合起来。 mdadm –A /dev/md# /dev/sda# /dev/sdb#(RAID中有几块盘写几块盘) -D、--detail显示设备相关信息,查看RAID阵列详细信息。 mdadm不指定选项时直接跟 --add/-a 添加 --fail/-f 损坏 mdadm /dev/md# --fail /dev/sda# 模拟磁盘损坏。 --remove/-r 移除 --del 删除 --scan 扫描当前主机上所有的RAID设备,以及RAID设备所关联的设备本身. 我们可以将扫描到的内容保存至/etc/mdadm.conf(配置文件) 以后装配时直接指定/dev/md#即可 mdadm –A /dev/md# 会直接读取配置文件。 mdadm –D –scan > /etc/mdadm.conf 我们启用一个阵列时如何停用阵列 mdadm –S、- -stop /dev/md# 即可停止RAID设备,停止后可以进行rm /dev/md#操作。 cat /proc/mdstat 可以查看到已经启用的RAID的阵列信息。 在我们练习软RAID的时候,实现应当准备几个大小一致的分区 创建完软RAID后,应当对RAID进行格式化/dev/md#,并挂载RAID设备。 当我们创建一个RAID1的时候,镜像磁盘有一个特点,它必须将两块磁盘上的每一个数据位一一对应起来,只要有一点变动就会进行同步操作。 挂载一个新的设备时候,进入挂载目录下会看大lost+found,就可以确定这是一个新设备,并成功挂载了。 但是我们必须要面对一个问题,那就是当RAID设备出现故障,但是数据还能正常访问的话,我们是意识不到的,这时可以使用冗余备份,使用三块盘做RAID1,其中两块工作,另一块在工作盘出现故障时接替工作。(热空闲盘) 软RAID性能的优化: 软RAID每生成一个chunk都需要计算一下相当于多少的磁盘块(block),因此我们在格式化RAID的时候可以指定块的大小,指定块大小的同时为了提高RAID的性能,还可以明确在mke2fs执行时指定-E选项,其有一个子选项,stride,条带倍数。 条带倍数 chunk / block 的商 以这样的方式格式化可以优化软RAID的性能,不需要每一次计算条带需要多少个块,chunk镜像卷意义不大,但是对RAID0和RAID5 意义比较大,应对RAID0、RAID5指定chunk,指定条带。 cat /proc/mdstat 可以查看chunk,默认为64KB,可以自己指定。 md是内核中的子模块,RAID0、RAID1、RAID5等等为md模块中的子模块。 mdadm只是作为一个用户的空间工具,一个管理工具,与真正的RAID并没有什么关系 这就是linux上MD的概念,除此还有DM的概念。 DM:Device Mapper 设备映射 MD:同设备映射机制相似,也是提供一种逻辑设备的机制 给自己讲linux 2017-01-08 评论 1469 次浏览
第三十八讲——磁盘存储 我们这一讲说一说硬盘,硬盘时很常见的,应该在每一台主机中都存在,且以多种形式存在,硬盘作为一种存储介质,我们有必要了解其结构以及存储形式。 我们常见的硬盘分为机械硬盘和固态硬盘。 简单地说,机械硬盘中有机械结构,固态硬盘中无机械结构。 按接口划分,可分为IDE、SATA、SCSI、USB等等 IDE是一种比较老的接口形式,传输方式为并行传输。其理论传输速度为133Mbps。 SATA是一种新的接口,但也分为SATA1、SATA2、SATA3,即1/2/3代,STAT口为串行传输。 SATA1:理论传输值为300Mbps SATA2:理论传输值为600Mbps SATA3:理论传输值为6Gbps。 USB接口的硬盘一般用于外存,方便携带。 USB3.0的接口传输速度为480Mbps,采用串行传输。 我们之前说了串行传输、并行传输,按道理来说串行传输相当于一条双向车道的马路,并行传输相当于双向12车道的马路,但是为什么并行传输速度低且在IDE时代作为接口使用? 我们知道,信息在计算机中表示为电路的通断,当线路中有磁场时就会对周围的线路产生影响,所以并行传输不可避免的会遇到干扰,这就使得传输效率大大降低,串行传输虽然只是一条路,但是不产生大的干扰,不会产生拥堵,所以速度上就会有优势,因此,很多的设备采用的都是串行传输。 SCSI:Small Computer System Interface采用串行传输。 SCSI接口的硬盘很特别,其硬盘内部有一块芯片,用以辅助存储,即减少CPU的占用,这块芯片可以完成数据的读写操作,所以价格也很昂贵。 SCSI接口的硬盘通常使用在服务器中,且SCSI接口的机械硬盘转速较高,所以读写也会更快,但是在服务器上很多时候在同一时间需要访问多个文件(比如下载),这些操作对于硬盘来说负荷会比较大,此时就需要组合多块硬盘来同时完成一个动作。 组合多个设备需要一种特殊的设备接口,这个设备能够将一个设备接口分为多个接口。 这种特殊的设备我们称为RAID,Redundant Arrays of Inexpensive Disk,即廉价冗余磁盘阵列,这个阵列在系统看来,这几块组合起来的硬盘为一块硬盘。 但是当这个控制器制造出来的时候,因为其昂贵的成本消失廉价的意义,于是使用 Independent(独立的)代替inexpensive。 现在的RAID称为:独立冗余磁盘阵列,这已经称为了事实上的众多存储解决方案的工业标准。 讲到RAID就得讲一讲条带化技术,为什么?因为条带化技术解决了RAID独立冗余磁盘阵列的存储问题。 条带化技术,解决了RAID磁盘阵列的存储问题,不是按数据块存储,而是将一个大文件类似于以32MB为单位存储,阵列中的每一个磁盘存储32MB,并且都是存放在同一位置。 即数据通过控制芯片发向底层控制芯片并存储在磁盘上的时候,数据是经过条带化以后分割存储在磁盘上的,在操作系统看来依然是一个一个的文件。 根据磁盘的组织方式不同,RAID有所谓的RAID级别之分,RAID level:级别,级别并不意味着性能先进,级别只是为了表述磁盘的组合方式不同,没有上下之分。 在有了RAID之后,因为每一个磁盘都分担了一部分的数据,所以数据的存取速度有了保障,但是我们不能只考虑存取速度,还要考虑数据的可靠性,即数据不能损坏、丢失,换句话说要保证数据的可用(可用性)。 对于数据的可用性,也有相应的机制作为保证: 1 磁盘镜像技术(mirror) 镜像技术指的是,两块磁盘存储相同的数据,如果其中的一块损坏,另一块还能继续工作。 2 校验码机制 校验码机制会将数据平均分配到N-1块磁盘上去,另一块盘存放循环冗余校验码,例如,第一块盘上存放的为2,第二块盘上存放的为5,那么校验位存放为7,当然这样说太简单暴力了,其实际情况比这复杂的多得多。 在校验码机制中,允许其中的一块盘损坏,通过其他盘都可以进行恢复,但是损坏数量大于一,则校验码机制也无力回天。 校验码机制的优势在于,一是提高了数据的存取速度,二是允许其中的一块盘损坏,其数据的存取速度和数据的可用性都有提高。 替换坏盘的过程称为硬盘的修复过程,如果在此过程中硬盘挂掉了,所有数据将失效。这在数据可用性较高的场景下是不适用的。 先讲一讲RAID level即RAID级别: RAID 0 表示条带存储 RAID 1 表示镜像 RAID 2/3/4很少使用 RAID 5 在使用校验码的机制的基础上,将校验码轮流在数据盘上存储,使得每一块磁盘被访问的量是均等的。,也只能允许损坏一块硬盘。 RAID 6 使用两块校验盘,将数据校验两次存储,允许损坏两块磁盘,但是应用较少。 我们单独的使用RAID级别各有优缺点,我们能不能结合其中的两种发挥出优势呢?事实上这是完全可以的,并且给出了RAID结合的方式。 下面来分别讲一讲每一个RAID级别的差别: RAID 0:条带化 至少需要两块盘 读写性能提升 无冗余能力,不能保证数据的完整性 空间利用率为100% RAID 1:镜像 至少两块盘 读性能提升,写性能下降 有冗余能力 空间利用率为50% RAID 5: 至少三块盘才有意义 读写性能提升 有冗余能力 空间利用率为(n-1)/n RAID 10 至少需要四块盘 读写性能提升 有冗余能力 空间利用率为50% RAID 01 至少需要四块盘 读写性能提升 有冗余能力 空间利用率为50% Jbod 一中将小硬盘组合成大空间的技术。 至少需要两块盘 性能无提升 冗余能力无 空间利用率为100% RAID 01以六块磁盘为例,先拿三块磁盘做成条带,即RAID 0,另外的三块盘做成此RAID的镜像。 RAID 10 以六块磁盘为例,先将磁盘分为三组镜像,即三组RAID1,然后对三组RAID1做条带,即RAID 0. RAID01 和RAID10 从性能上来说,两种方式都相差不多,但是如果其中的一块损坏其修复的速度就会产生很大的差距,企业中一般使用RAID10来进行数据的存储,就实用性来说,RAID10优于RAID01。 对于RAID硬件设备来说,只要能识别硬盘的接口就能够组合,一般来说,我们要求RAID阵列里的镜像盘的规格要求相同。 我们需要知道的是SCSI与IDE是同时代的产物,都是并行的接口 SAS:串行口的SCSI接口 SATA接口的盘比SAS接口的盘便宜的多,SAS盘单盘容量为73G、146G等等,其存储空间十分有限且价格高昂,这是由于SAS盘的转速较高,其盘片的密度要做的很大,另外SAS盘还需要一块强大的控制芯片。 SAS或者SCSI硬盘是一种很独特的硬盘,与IDE或者SATA不同的是,这种硬盘一根总线上可以接多块硬盘,总线上的每一个接口称为“目标(target)”,每一个target能够连接一块硬盘。 SCSI总线分为两类: 窄线(带):可以有八个target,适配器占用一个,还能连接七个目标(tartget)。 宽线(带):可以有十六个target,适配器占用一个,还能连接十五个target。 适配器的接口称为:initiator,数据请求的发起者。 对于工业生产的服务器上,窄带下的硬盘接口是远远不够的,于是人们将每一个目标(target)一分为多个子接口,为了区分是那个接口下的哪一块盘,数据在发送时会在数据前面加一段控制信息,数据包首部。 数据报文的首部(head),和TCP/IP协议的首部一样,这个报文也称为协议数据单元(协议报文),每一块盘都有自己的标记,地址。即每一块盘都有一个LUN:逻辑单元号码:logic unit number。 我们之前讲过RAID的级别,还讲了有RAID这种硬件设备。其实RAID有两种形式。 一是硬件RAID 二是软件RAID 公司、企业中使用的大多是硬件RAID,硬件RAID的芯片可能在服务器的主板上集成(RAID控制器),将插满磁盘的RAID阵列机箱连接到RAID控制器,如果主板上集成了RAID控制器,或者外部插入了适配器,则需要通过BIOS来进行设置。 如果要在RAID阵列上装操作系统,这个操作系统一定要能够识别RAID才行,如果识别不了得在安装操作系统之前提供驱动程序,U盘或者光盘,安装程序能够驱动硬件。 RAID阵列安装完操作系统后,在操作系统看来,RAID其实就是一个串口的设备,识别为/dev/[sh]d[a-z]# 的磁盘。 RAID 1 、RAID 0分别是在硬件配置好的基础上有硬件完成的。 现在很多的PC机的主板也都支持RAID和Jbod等等 有的RAID控制芯片为了使系统看起来会更快,会附带一个内存,多以RAID设备比单块硬盘性能要好得多,但可能会造成数据丢失,如果给RAID设备提供电源,保证意外断电情况数据不丢失。 软RAID: 例如在主板上插五块硬盘,其中的一块用于安装操作系统,另外四块组合成一个软RAID,这需要操作系统内核提供次功能。 linux中有一个模块:md:multi disks 在md工作起来后可以读取配置文件,按照配置文件中的信息将哪些磁盘组成一个RAID。md模拟一个RAID(逻辑RAID)设备,每一个创建的逻辑设备在/dev下都有一个设备文件,通常都以md开头,/dev/md# /dev/md0 用于标识不同的RAID设备,与RAID级别无关系。 通过MD模块访问(根据配置文件),是一个RAID设备,不通过md模块访问时,其实就是正常的硬盘设备。 软件RAID的性能取决于CPU的能力,如果操作系统坏了,有软RAID存放的数据就不能进行访问,这个问题可以通过对设备的标记解决。 RAID模块在设备上必须要标记为内核可以识别的类型,这种类型比较独特,我们称为fd(16进制),即软RAID必须将磁盘类型标记为fd类型,将磁盘标记为fd类型后,模块(md)在存放数据的时候会在数据之外存放一些元数据,就算将来重装操作系统,只要载入模块重新扫描即可重新组合起来,除非万不得已不建议在生产环境中架设软RAID。 给自己讲linux 2017-01-07 评论 1503 次浏览
Shell中判断字符串是否为数字的6种方法 ## 方法1 a=1234;echo “$a”|[ -n “`sed -n‘/^[0-9][0-9]*$/p’`” ] && echo string a is numbers 第一个-n是shell的测试标志,对后面的串”`sed -n ‘/^[0-9][0-9]*$/p’`”进行测试,如果非空,则结果为真。 sed默认会显示所有输入行信息的,sed 的“-n”选项是让sed不要显示,而只显示我们所需要的内容:即后面的表达式所匹配的行,这是通过表达式中加入“p”命令来实现的。 /^[0-9][0-9]*$/他的含义是匹配至少由一位数字构成的行 ## 方法2, 可以,不过不是bash实现的,是使用了grep的正则 #if grep ‘^[[:digit:]]*$’<<< "$1";then # echo "$1 is number." #else # echo'no.' #fi ## 方法3 #if [ "$1" -gt 0 ] 2>/dev/null ;then # echo “$1 is number.” #else # echo ‘no.’ #fi ## 方法4,case #case “$1” in # [1-9][0-9]*) # echo “$1 is number.” # ;; # *) # ;; #esac ## 方法5,awk #echo $1| awk‘{print($0~/^[-]?([0-9])+[.]?([0-9])+$/)?”number”:”string”}’ ## 方法5,awk #if [ -n “$(echo $1| sed -n“/^[0-9]\+$/p”)” ];then # echo “$1 is number.” #else # echo ‘no.’ #fi ## 方法6,expr expr $1 “+” 10 &> /dev/null if [ $? -eq 0 ];then echo “$1 is number” else echo “$1 not number” fi 随手笔记 2017-01-06 评论 1752 次浏览
第三十七讲——杂谈 我们先来讲一讲echo命令,虽然我们之前用过很多次了,但是只是说了echo命令能内容输出,其实echo命令还是比较强大的。 echo -n 不换行输出,这是我们之前使用的 echo -e 支持一些转义字符的使用\n换行等等,其实-e还支持其他的逃逸字符,也就是转义字符。 我们在linux目录中切换的时候会看到里面有各种颜色的文件名,这是怎么实现的? echo命令的-e选项就能够帮助我们实现。 举例说明: echo -e “\033[31mhello,world.\033[0m” \033表示ctrl [ 中括号表示处理通知字符 31m,3表示前景色,如果此位为4则表示背景色,1为颜色表示位(1-6)m表示文字处理字符结束。这里的结束指的是颜色指定结束,之后的字符都按照指定的样式显示。 1红 2绿 3黄 4蓝 5紫 6青 且前景色和背景色可以和同时使用,使用时用 分号 隔开,还可以使用一位字符控制字体的粗细,闪动样式,7为前景色和背景色反色显示。 hello,world为需要处理的字符 [0m 表示处理结束,也就是说,按照之前设定的方式显示的字符到这里结束所有样式,之后的字符不作处理。 echo控制颜色就讲到这里。下面开始一段文字,瞎扯淡。 我们知道,我们现在使用的操作系统是有64位和32位的区别的,但是在64位操作系统中可以向下兼容32位的操作系统上的软件,这是为什么?天生的? 其实不尽然,64位操作系统之所以能兼容32位的软件,是因为64位操作系统上有两个库,一个是32位软件所依赖的库,一个是64位软件所需要的库。 我们之前说过,编写软件就是调用硬件所提供的功能,而为了方便软件的编写,一些有能力的厂商就将硬件的功能以软件接口的形式向外提供硬件的各种功能,较为底层的我们称为系统调用,但是系统调用也不是那么友好,于是又将系统调用进行封装成接口,这个接口也是软件的形式,即接口的转换,这个我们称之为库调用,也就是通常说的API。 所以其底层芯片CPU也是分为32位和64位的,因底层硬件的不同,所以上层的操作系统也就不尽相同,从物理上64位的CPU是兼容32位的CPU的,所以32位的库能够运行在64位操作系统上。 所以软件的运行是离不开库的支持的。 我们在windows操作系统上经常会遇到一种情况,就是插入一个新设备的时候需要安装驱动程序,那么驱动程序又是个什么鬼? 简单的说,驱动程序能够发挥出硬件的最大性能,驱动程序能够将CPU的逻辑指定转换成对应设备的控制指令。 一般来说,驱动程序是由硬件厂商提供的。如果不是硬件厂商提供的,我们称为公版驱动,公版驱动可能无法最大化的发挥硬件性能。 所以安装设备驱动还是一个必要的过程,为了最大化的发挥性能,安装硬件厂商提供的驱动程序是很好的选择。 我们在一台主机上,无论是台式机还是笔记本,其上都有很多的接口,而且台式机的主板上还允许我们扩展设备,这些接口是一种控制转换器,它不仅仅是提供接口。 I/O控制器:对于直接结成在主板上的我们称为控制器controller。 I/O适配器:对于接口芯片为独立设备时,我们称之为适配器。 协议,这里先提一下这个概念,协议就是双方约定好的信号规范形式,双方都遵循理解某种信号的法则。 给自己讲linux 2017-01-06 评论 1416 次浏览
第三十六讲——linux常见的压缩格式 linux操作系统上常见的压缩格式有 .gz、.bz2、.xz、.zip、.Z 压缩:分析整个文档中有什么内容,然后把常见的字符串给加上标记,以后再出现这个字符串时,就使用标记来替代,压缩算法不同压缩比率也不相同。 .Z 是使用compress压缩的,使用uncompress解压缩,早期使用,压缩比率很小。 我们在使用中比较常见的有:xz、bz2、gz .gz:使用gzip工具压缩后的格式 .bz2:bzip2 工具 .xz :xz工具 这些压缩工具只能逐个文件进行压缩,不能压缩目录,如果给定的是一个目录,那么会将目录下的文件逐个压缩。且这些命令执行后只保留压缩后的文件,默认删除源文件,对于文本文件来说,文件的压缩比率是很大的。 gzip: gzip /path/to/somefile 压缩文件 ungzip /path/to/somefile_compress.gz 解压缩文件 解压完成后默认删除源文件。 gzip –d /path/to/somefile.gz -d选项可解压缩文件 -# 指定压缩比(1-9),默认压缩比为6,压缩比越小,压缩速度越快,压缩后的文件也就越大。 zcat 不解压查看gzip压缩文件中的内容,文件本身并没有解压缩,只是找了一个地方临时解压。 zcat /path/to/somefile.gz 只能查看文本文件 bzip2: bzip2拥有更大的压缩比率(对大文件很有效),对小文件不明显。 bzip2 /path/to/somefile 指定压缩文件。 -d /path/to/somefile.bz2 解压缩文件 -# 指定压缩比率(1-9),默认压缩比率为6 –k 压缩时保留源文件 bzip2 解压缩后默认删除源文件。 bunzip2 /path/to/somefile.bz2 解压缩文件 bzcat somefile.bz2 查看压缩的文本文档 xz:默认删除源文件 xz /path/to/somefile 指定压缩文件 -d /path/to/some.xz 解压缩指定文件 -# 指定压缩比率,默认为6 -k 压缩/解压缩后保留源文件 unxz /path/to/somefile.xz 解压缩指定文件 xzcat 查看xz压缩的文本文档 了解:xzdec 解压工具 decompress解压的缩写 -k 保留源文件 -c 输出到屏幕上 zip是众多操作系统默认支持的压缩格式。zip的压缩比率不大,但是zip可以压缩目录。 zip filename.zip filename/dir... 压缩后的文件名 需要压缩的文件或者目录 我们需要注意的是,只有zip后的第一个参数为压缩后的文件名,这种能够将众多文件整合成一个文件的功能我们称为归档。 zip是一个既压缩又归档的工具 unzip可以对zip格式的压缩文件进行解压缩 zip默认是不删除源文件的。 archive:归档,将多个文件整合成一个文件,但是归档并不意为着压缩。 很多时候我们需要极大的压缩一些文件,而且需要将一些目录等文件整合在一起,这样的操作难道只能使用zip?起始我们还有一个归档的命令:tar tar:文件归档命令, tar是一个只归档不压缩的工具。 tar 归档工具 -c 创建归档文件 -f 指定归档后的文件名 -f后要跟参数,即filename.tar tar 命令的格式 tar -cf test.tar /tmp/test将/tmp/test文件归档到当前目录下,并命名为test.tar 由于tar归档后的要保存元数据,可能体积会比源文件大。 tar -xf test.tar 展开归档 tar命令会保留源文件,但是使用tar归档的文件默认不会为其保留文件的扩展属性(如acl)。 --xattrs :归档时保留文件的扩展属性信息 --xattrs与cf同用,归档时保留文件的扩展属性 tar –tf filename.tar 不展开归档的情况下查看归档文件中的内容。 -ztf filename.tar.gz -jtf filename.tar.xz tar 命令还可以调用压缩工具 tar -zcf 既归档又压缩(调用gzip压缩工具) -zxf 先解压缩再展开归档。 tar –jcf 归档并调用bzip2压缩工具压缩 -jxf 调用bunzip2解压缩并展开 tar –Jcf 归档并调用xz压缩工具进行压缩 -Jxf 调用xz解压缩并展开 tar命令还可以根据文件名自动判断是否压缩,如果不指定压缩工具,tar会自己寻找合适的解压缩工具对文件进行解压缩,需要tar支持的压缩格式。 cpio 归档或者展开归档,cpio在某些情况下完成tar完成不了的工作。 例如在/boot 目录下的.img文件为gzip文件,可以使用file命令进行查看。 我们给img文件加上.gz的后缀,然后将文件解压缩,再次使用file命令查看.img文件可以看到其中为cpio archive 即cpio归档。 给自己讲linux 2017-01-05 评论 1542 次浏览