Linux Shell 脚本攻略 --- 第六章 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


你可能感兴趣的:(Linux shell)