shell编程--4

1、tar
-c:创建文件
-f:后接文件名
-r:向已存在的归档文件再添加一些文件
-u:一般来说,如果存在同名文件,会一并更新到归档文件中。-u选项指定只有比归档文件中的同名文件更新时才会被添加

例子:
1)归档:tar -cf output.tar file1 file2 file3 …
2)列出归档文件中所包含的文件:tar -tf archive.tar
3)如果想要显示更加详细的信息:tar -tvf archive.tar #-v或者-vv
4)向已存在的归档文件再添加一些文件:tar -rvf archive.tar new_file
5)提取归档文件到当前目录:tar -xf archive.tar #-C可以指定提取到某个特定目录
6)提取特定的文件:tar -xf archive.tar file1 file4 #只提取file1和file4,忽略其他文件
7)从归档文件中删除特定文件:tar -f archive.tar –delete file1 file2 … #删除file1,file2…
8)拼接两个归档文件:tar -Af file.tar file2.tar #将file2.tar的内容合并到file1.tar中
9)归档时排除部分文件:tar -cf archive.tar –exclude “*.txt” #排除txt结尾的文件,也可以将需要排除的文件列表放入文件,同时配合使用选项-X
tar -cf archive.tar -X list #list是需要排除文件的列表
10)排除版本控制目录(如.svn和.git):tar –exclude-vcs -czvvf archive.tar.gz svn
11)归档完成后打印出总共字节数:tar -cf archive.tar –exclude “*.txt” –total

对归档文件压缩:
不同的tar选项可以用来指定不同的压缩格式
-j:指定bunzip2格式
-z:指定gzip格式
–lzma:指定lzma格式
也可以不明确指定使用上面特定的选项来使用压缩功能。tar可以通过压缩文件名来判断使用哪个选项,也就是通过使用-a来让tar支持根据扩展名自动压缩:
tar -acvf archive.tar file1 file2 file3

2、cpio
另一种类似于tar的归档格式(不像tar那么常用,多用于rpm软件包)
1)归档:echo file1 file2 file3 |cpio -ov >archive.tar #-o指定输出,-v用来打印归档文件列表
2)列出归档文件中的内容:cpio -it <archive.tar
3)从归档文件中提取文件:cpio -id <archive.tar

3、gzip
gzip只能压缩单个文件或数据流,而无法对目录或多个文件进行压缩。因此我们先要创建tar归档文件,然后再用gzip进行压缩
1)压缩:gzip filename
2)解压缩:gunzip filename.gz
3)列出压缩文件的属性信息:gzip -l filename.gz
还可以指定gzip的压缩级别:
–fast:提供最低的压缩比
–best:提供最高的压缩比

通常将gzip与归档文件结合使用:
4)tar -czvvf archive.tar.gz files
或者
tar -cavvf archive.tar.gz files #选项-a表明从文件扩展名自动判断压缩格式
5)如果有大量的文件需要被压缩归档,可以在循环中使用追加选项-r来逐个添加文件:
示例:
FILE_LISTS=”file1 file2 file3 file4 file5”
for f in $FILE_LISTS;
do
tar -rvf archive.tar $f
done
gzip archive.tar
6)提取由gzip压缩的归档文件中的内容
tar -xavvf archive.tar.gz -C /PATH
7)压缩率:1-9级
1级的压缩率最低,但是压缩速度最快
9级的压缩率最高,但是压缩速度最慢
可以指定压缩比:
gzip -5 test.img #在压缩率和压缩速度之间取一个平衡

4、zcat
无需事先提取,直接查看gzip压缩过的压缩包内容
zcat test.gz

5、bzip2
与gzip类似,但是bzip2的压缩效率比gzip更高,但花费的时间比gzip更长
1)压缩:bzip2 filename
2)解压缩:bunzip2 filename.bz2
3)与tar搭配使用:tar -jxvf archive.tar.bz2 #-j表示该归档文件是bzip2格式

6、lzma
lzma是另一种压缩工具,压缩率比gzip和bzip2更好
1)压缩:lzma filename
2)解压缩:unlzma filename.lzma
3)解压缩(与tar搭配使用):tar -xvvf –lzma archive.tar.lzma -C /PATH #-x用于提取内容
4)与tar搭配使用:tar -cvvf –lzma archive.tar.lzma files
或者
tar -cavvf archive.tar.lzma files

7、zip
用zip来压缩,在linux上应用不如gzip和bzip2那么广泛,但是Internet上的文件通常都是采用这种格式
1)采用zip格式压缩:zip file.zip file
2)从zip文件中提取内容:unzip file.zip
3)更新压缩文件中的内容:zip file.zip -u new_file #-u表示更新
4)从压缩文件中删除内容:zip -d archive.zip file.txt #删除file.txt
5)列出压缩文件中的内容:unzip -l archive.zip

8、git
非常流行的版本控制系统(使用场景:基于版本控制的备份)
使用git进行数据备份:
1)进入需要备份的目录
cd /home/data/source
2)设置并初始化远端备份目录。在远程主机上创建备份目录:
$ mkdir -p /home/backups/backup.git
$ cd /home/backups/backup.git
$ git init –bare
3)在源主机中执行以下步骤:
a、在源主机中将用户详细信息添加到git:
git config –global user.name “jim”
git config –global user.email xx@163.com

b、初始化主机中需要备份的源目录:
git init
git commit –allow-empty -am “Init”

#–allow-empty:commit提交,但是在这里检查到暂存区并未修改,提交失败。可以使用–allow-empty参数放弃检查

#-a表示add,添加

#-m表示message,这里指”Init”

c、在源目录中执行以下命令来添加远程git目录并同步备份:
git remote add origin user@remotehost:/home/backups/backup.git

d、将当前目录下的所有文件和文件夹添加到备份目录中
git add *
也可以有条件的添加特定类型的文件:
git add *.txt
git add *.py

e、删除不需要跟踪的文件和文件夹:
git rm file

f、查看所有版本的备份:
git log

g、要恢复到之前的某个状态或版本,需要查看一个由32位十六进制串组成的提交ID(假设提交ID为3131f9661ec1739f72c213ec5769bc0abefa85a9)
git checkout 3131f9661ec1739f72c213ec5769bc0abefa85a9

h、从远端备份下载:
git clone user@remotehost:/home/backups/backup.git

9、fsarchiver
创建全盘镜像(fsarchiver默认并没有安装在大多数发布版中。你得用软件包管理器自行安装)
1)创建文件系统分区备份:使用savefs选项
fsarchiver savefs backup.fsa /dev/sda1 #backup.fsa是最终的备份文件,/dev/sda1是要备份的分区
2)同时备份多个分区:
fsarchiver savefs backup.fsa /dev/sda1 /dev/sda2
3)从备份中恢复分区:
fsarchiver restfs backup.fsa id=0,dest=/dev/sda1

##id=0表明我们希望从备份中提取第一个分区的内容,将其恢复到由dest=/dev/sda1所指定的分区中
4)从备份中恢复多个分区:
fsarchiver restfs backup.fsa id=0,dest=/dev/sda1 id=1,dest=/dev/sdb1

#我们使用了两组id,dest告诉fsarchiver从备份中将前两个分区的内容恢复到指定的物理分区中