您的位置:首页 > 运维架构 > Shell

SHELL笔记之归档(五)

2016-04-12 09:48 597 查看
1.tar命令

1.1归档

tar可以将多个文件和文件夹保存为单个文件,同时还能保留所有的文件属性,如所有者,权限等。

eg: tar -cf output.tar client.c md5.txt //对文件client.c 和md5.txt 归档为output.tar文件 (-c代表创建文件;-f代表制定文件,而且-f应该是选项中的最后一个。)

eg: tar -tf output.tar //列出归档文件中包含的文件

eg: tar -tvf output.tar //加上参数-v显示更详细的信息 (-v代表冗长模式)

eg: tar -rvf output.tar new_file //向归档文件中添加新的文件new_file (-r代表追加新文件到已存在的归档文档中)

eg: tar -xf output.tar -C /home/mapgoo //将归档文件中的文件提取到/home/mapgoo目录中 (-x代表提取(exact)。-C代表提取到的目录,没有指定代表当前目录.)

eg: tar -xvf output.tar client.c //只提取文件client.c

eg: tar -Af output.tar output1.tar //拼接两个归档文件,将output1.tar中的文件也打包进output.tar

eg: tar -uf output.tar client.c //仅当client.c的时间戳比归档文件中的新时才追加进去

eg:tar -f output1.tar --delete md5.txt 从归档文件中删除md5.txt文件

eg: tar -cf arch.tar * --exclude "*.txt" //排除所有的txt文件,进行归档。(用--exclude[PATTERN] 排除匹配通配符样式的文件)

eg: tar -cf arch.tar * -X list //排除list文件中列出的文件,进行归档。

eg: tar -cvf output.tar *sh --totals //打印出归档了多少字节(用--totals可以在归档完成之后打印出总归档字节数)

1.2压缩

eg: tar -acvf archive.tar.gz *sh //tar能够通过查看输出或输入文件的扩展名来进行压缩。为了使tar支持扩展名自动进行压缩,使用-a或--auto-compress选项)

2. cpio命令归档

cpio命令类似于tar的归档格式,它用来将多个文件和文件夹存储为单个文件,同时保留所有文件属性,如权限,文件所有权等,不过cpio并不像tar那么常用。它多用于RPM软件包(Fedora使用这种格式),linux内核的initramfs文件等。

eg: echo file1 file2 file3 | cpio -ov >archive.cpio //归档

eg: cpio -it < archive.cpio //列出cpio归档文件中的内容

eg: cpio -id < archive.cpio //从cpio归档中提取文件

-o制定输出; -v用来打印归档文件列表;-i用来指定输入;-t表示列出归档文件中的内容;-d用来提取。

3. gzip命令 压缩

3.1 压缩

gzip只能压缩单个文件或数据流,而无法对目录和多个文件进行归档。因此需要先创建tar归档文件,然后再用gzip进行压缩。

eg: gzip filename //压缩 ,生成filename.gz压缩文件

eg: gunzip filename.gz //解压缩

eg: gzip -l filename.gz //列出压缩文件的属性

3.2压缩归档

第一种方法: tar -acvf archive.tar.gz *sh

第二种方法:

第一步:归档 tar -cvf archive.tar *sh

第二步:压缩 gzip archive.tar

3.3压缩率

1级的压缩率最低,但是压缩速度最快; 9级的压缩率最高,但是压缩速度最慢

eg: gzip -5 test.img //5级应该能在压缩速度和压缩比之间获得一个不错的平衡

4.bzip2命令 压缩

bzip2命令是另一种常用的工具,其功能和语法同gzip非常的类似。唯一的不同在于bzip2的压缩效率比gzip更高,但花费的时间比gzip更长

eg: bzip2 read.c //压缩read.c文件,生成read.c.bz2文件

eg:bunzip2 read.c.bz2 //解压缩

4.2归档,压缩

eg: tar -acvf archive.tar.bz2 *sh //归档压缩 (对比 tar -acvf archive.tar.gz *sh )

eg: tar -xjvf archive.tar.gz2 //解压缩 (对比 tar -xavf archive.tar.gz ) (-j表明该归档文件是bzip2格式)

5.zip命令 归档和压缩

eg: zip archive.zip [SOURCE FILES / DIRS ] //zip格式进行归档压缩

eg: unzip archive.zip //提取zip文件中的内容 (zip提取完后并不会删除文件,这点与unlzma和gunzip不同)

eg: zip file.zip -u newfile //更新压缩文件中的内容。(-u选项)

eg: zip -d file.zip file.txt //从压缩文件中删除内容(-d选项)

eg: zip -l file.zip 、、列出压缩文件中的内容

6.pbzip2命令 更快速的归档工具

我们目前已经看到的多数压缩命令只能利用单个处理器核心,所以速度并不会特别快,而pbzip2能够借助多个处理器核心来降低压缩文件所需要的时间。

6.1压缩单个文件

pbzip2 myfile.tar //pbzip2会自动检测系统中处理器核心的数量,然后将myfile.tar压缩成myfile.tar.bz2 。

6.2要将多个文件或目录进行归档及压缩,可以使用tar配合pbzip2来实现

tar -cf myfile.tar.bz2 --use-compress-prog=pbzip2 dir_to_compress/

或者

tar -c dir_to_compress/ | pbzip2 -c >myfile.tar.bz2

6.3从pbzip2格式的文件中进行提取

pbzip2 -dc myfile.tar.bz2 | tar x //如果是tar.bz2文件,我们可以一次性完成解压缩和提取工作

pbzip2 -d myfile.tar.bz2 //如果是经过pbzip2压缩过的归档文件

6.4手动制定处理器数量

pbzip2 -p4 myfile.tar //使用4个处理器核心

7.创建压缩文件系统

squashfs是一种具有超高压缩率的只读文件系统。如果需要采用超高的文件压缩率,又希望在无需解压的情况下读取少量文件,那么squashfs就能够大显身手了,解压体积较大的压缩文件可得花上一阵功夫。但如果将文件以环回形式挂载,那么速度会变的飞快,因为只有出现访问请求时,对应的那部分压缩文件才会被解压缩。

7.1创建squashfs文件

mksquashfs SOURCES compressedfs.squashfs //SOURCES部分可以是通配符或文件,目录路径(eg: mksquashffs /etc test.squashfs )

7.2 利用环回形式挂载squashfs文件

mount -o loop compressedfs.squashfs /mnt/squash //将文件挂载在/mnt/squash目录

7.3补充:在创建squashfs文件时排除部分文件

eg: mksquashfs /etc test.squashfs -e /etc/passwd /etc/shadow

eg: mksquashfs /etc/ test.squashfs -ef excludelist //文件excludelist列出了要排除的文件

8.使用rsync备份

rsync可以对位于不同位置的文件和目录进行同步,它利用差异计算以及压缩技术来最小化数据传输量。相对于cp命令,rsync的优势在于使用了高效的差异算法。另外还支持网络数据传输。在进行复制的同时,rsync会比较源端和目的端的文件,只有当文件有更新时才进行复制。rsync也支持压缩加密等多种特性。

8.1将源目录复制到目的端

rsync -av source_path destination_path //(-a表示要进行归档; -v表示在stdout上打印细节信息或进度)

eg: rsync -av ./shell/ mapgoo@192.168.1.142:/home/mapgoo //远程复制

8.2压缩数据传输

rsync -avz source_path destination_path //-z选项指定在网络传输时压缩数据

8.3对比两条命令的区别

rsync -av /home/test /home/backups (test文件夹会复制过去)

rsync -av /home/test/ /home/backups (不会复制test文件夹,只会复制里面的内容)

8.4排除部分文件

eg: rsync -avz /home/code /mnt/disk/backup/code --exclude "*.txt" //不对.txt文件进行备份 (或利用 --exclude-from FILEPATH 排除文件夹)

8.5 在更新rsync备份时,删除源端不存在的文件

rsync -avz SOURCE DESTINATION --delete //加上--delete选项后,如果DESTINATION中存在,SOURCE不存在,那么会被删除。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: