LinuxShell脚本攻略---第六章B计划
6.1 用tar归档
1 tar命令可以用来归档文件,可以用tar将多个文件和文件夹保存为单个文件,同时还能保留所有文件属性,如所有者,权限等,由该命令创建的文件通常称为tarball
2 按照下面的方法,用tar对文件进行归档: tar -cf output.tar sources
例如tar -cf output.tar file1 file2 file3....
命令中的-c代表的是创建文件,-f代表的是指定文件名
3 向归档中添加文件可以使用下面命令: tar -rvf output.tar new_file
4 用下面的方法列出归档文件的内容: tar -tf output.tar
5 如果需要在归档或列出归档内容的过程中获知更多细节,可以使用-v或-vv选项,它们允许在终端中输出更详细的信息
6 下面的命令可以将归档文件的内容提取到当前目录中: tar -xf output.tar
-x表示把当前归档文件中的内容提取到当前目录,我们可以使用-C选项指定需要提取到的目录
tar -xf output.tar -C path
7 连接两个归档文件: tar -Af file1.tar file2.tar // -A选项用来把两个归档文件进行合并
8 从归档文件中删除文件: tar -f output.tar --delete file1 file2 // 命令把归档文件中的file1和file2删除
9 从归档中排除部分文件
例如,排除所有的.txt文件: tar -cf output.tar * --exclude "*.txt"
也可以将需要排除的文件列表放入到文件中: tar -cf output.tar * -X file
6.2 用cpio归档
1 cpio是类似于tar的另一种归档格式,它用来将多个文件和文件夹存储为单个文件,同时保留所有文件属性,如权限,文件所有权等
2 cpio通过stdin获取输入文件名,并将归档文件写入stdout,我们必须将stdout重定向到一个文件,以接收cpio的输出
创建测试文件: touch file1 file2 file3
将测试文件按照下面的方法进行归档: echo file1 file2 file3 | cpio -ov > output.tar
3 要列出cpio归档文件中的内容,使用下面命令: cpio -it < output.tar // 这个命令列出给定的cpio归档文件中的所有内容
-i用于指定输入 -t 表示列出归档文件中的内容
6.3 用gunzip或gzip压缩
1 gzip是GNU/Linux平台下常用的压缩格式,gzip只能够压缩单个文件,而无法对目录和多个文件进行归档,因此我们一般把这个任务交给tar,然后再用gzip压缩
2 要使用gzip压缩文件,可以使用下面的命令: gzip filename
3 将gzip文件解压缩的方法如下: gunzip filename.gz
4 要列出压缩文件的属性信息: gzip -l filename.gz
5 zcat命令无需解压缩,直接读取gzip格式文件
zcat filename.gz // 这个命令可以直接读取压缩文件的内容
6 压缩率,我们可以指定压缩率,压缩率有9级,其中:
1级的压缩率最低,但是压缩速度最快; 9级的压缩率最高,但是压缩速度最慢
6.4 用bunzip和bzip压缩
1 bunzip是另一种以gzip类似的压缩技术
2 用bzip2进行压缩: bzip2 filename // bzip2会删除源文件并生成名为filename.bz2文件
3 解压缩bzip2格式文件: bunzip2 filename.bz2
4 使用bzip2或bunzip2时,它会删除输入文件并生成压缩过的输出文件,我们可以使用选项-k来避免删除输入文件
bunzip2 filename.bz2 -k
6.5 用lzma压缩
1 使用lzma进行压缩: lzma filename // lzma会删除原文件并生成名为filename.lzma
2 保留输入文件: 使用lzma或unlzma时,它们会删除输入文件并生成压缩过的输出文件,不过我们可以指定选项-k来避免删除原文件
6.6 用zip归档和压缩
1 zip做为一种流行的压缩格式,在很多的平台中都可以看到它的身影
2 对归档文件采用zip格式进行压缩: zip output.zip source //该命令会生成output.zip文件
3 对目录和文件进行递归操作: zip -r output.zip directory
4 要从zip文件中提取内容,可以使用: unzip output.zip //unzip这个命令并不会删除output.zip文件
5 从压缩归档文件中删除内容,则使用-d: zip -d output.zip file //这个命令删除压缩文件中的file
6 列出归档文件中的内容: unzip -l output.zip
6.7 加密工具与散列
crypt
1 crypt是一个简单的加密工具,它从stdin接受一个文件以及口令,做为输入,然后将加密数据输出到output
2 crypt < input_file > output_file
Enter passphrase:
gpg
1 gpg是一种应用广泛的加密方案,它采用密钥签名技术保护文件内容,只有经过认证的用户才能访问数据
2 用gpg加密文件: gpg -c filename //这条命令采用交互式读取口令,并生成filename.gpg
3 解密gpg文件: gpg filename.gpg // 这条命令读取口令,然后对文件进行解密
md5sum与sha1sum
1 md5sum与sha1sum都是单向散列算法,均无法拟推出原始数据,它们通常用于验证数据完整性或为特定数据生成唯一的密钥
2 它们可以为每个文件生成一个唯一的密钥: md5sum file 或 sha1sum file
6.8 用rsync备份系统快照
1 rsync可以对位于不同位置的文件和目录进行备份,它可以借助差异计算以及压缩技术来最小化数据传输量
2 将源目录复制到目的端: rsnyc -av source_path destination_path
其中-a表示要进行归档,-v表示在标准输出上打印出细节信息或进度
3 要将数据备份到远程服务器或主机,可以使用: rsnyc -av source_dir username@host:path
用下面的方法可以将远程主机上的数据恢复到本地主机: rsnyc -av username@host:path destination
rsnyc命令用ssh连接到远程主机,用user@host这种形式设定远程主机的地址,其中user代表的是用户名,host代表的是远程主机的ip地址或域名
6.9 用dd克隆磁盘
1 dd命令原意是data definition,由于不正确的使用会导致数据丢失,因此它获得了data destrory这一虐称
2 dd的语法如下: dd if=source of=target bs=block_size count=count
if代表输入文件或输入设备路径
of代表目标文件或目标设备路径
bs代表块大小,count则是需要复制的块数,bs和count都是可选的
3 要将一个分区复制到文件中,可以使用:dd if=/dev/sda1 of=sda1_partition.img //该命令中的/dev/sda1是该分区的设备路径
用备份恢复分区: dd if=sda1_partition.img of=/dev/sda1
4 如果要永久性删除一个分区中的所有数据,我们可以使用dd向该分区中写入0值
dd if=/dev/zero of=/dev/sda1 // /dev/zero是一个字符设备,它总是返回字符'\0'
5 在容量相同的硬盘间进行克隆: dd if=/dev/sda of=/dev/sdb