归档和备份

gzip

gzip 程序用来压缩文件,原文件的压缩版(添加gz后缀名)会替代原文件。gunzip 程序用来还原压缩版本。

  1. $ gzip foo.txt
  2. $ gunzip foo.txt.gz

gzip的参数如下。

  • -c 把输出写入到标准输出,并且保留原始文件。也有可能用—stdout 和—to-stdout 选项来指定。
  • -d 解压缩。正如 gunzip 命令一样。也可以用—decompress 或者—uncompress 选项来指定.
  • -f 强制压缩,即使原始文件的压缩文件已经存在了,也要执行。也可以用—force 选项来指定。
  • -h 显示用法信息。也可用—help 选项来指定。
  • -l 列出每个被压缩文件的压缩数据。也可用—list 选项。
  • -r 若命令的一个或多个参数是目录,则递归地压缩目录中的文件。也可用—recursive 选项来指定。
  • -t 测试压缩文件的完整性。也可用—test 选项来指定。
  • -v 显示压缩过程中的信息。也可用—verbose 选项来指定。
  • -number 设置压缩指数。number 是一个在1(最快,最小压缩)到9(最慢,最大压缩)之间的整数。 数值1和9也可以各自用—fast 和—best 选项来表示。默认值是整数6。

下面是一些例子。

  1. # 查看解压缩后的内容
  2. $ gunzip -c foo.txt | less

zcat程序等同于带有-c 选项的 gunzip 命令。它可以像cat命令那样,用来查看gzip压缩文件。

  1. $ zcat foo.txt.gz | less

bzip2

bzip2程序与gzip程序相似,但是使用了不同的压缩算法,舍弃了压缩速度,实现了更高的压缩级别。在大多数情况下,它的工作模式等同于gzip。 由bzip2压缩的文件,用扩展名.bz2表示。

  1. $ bzip2 foo.txt
  2. $ bunzip2 foo.txt.bz2

gzip程序的所有选项(除了-r),bzip2 程序同样也支持。同样有 bunzip2 和 bzcat 程序来解压缩文件。bzip2 文件也带有 bzip2recover 程序,其会 试图恢复受损的 .bz2 文件。

zip

zip程序既是压缩工具,也是一个打包工具,读取和写入.zip文件。

  1. $ zip options zipfile file...

它的用法如下。

  1. # 将指定目录压缩成zip文件
  2. $ zip -r playground.zip playground

ziptar命令有一个相反之处。如果压缩文件已存在,其将被更新而不是被替代。这意味着会保留此文件包,但是会添加新文件,同时替换匹配的文件。

解压使用unzip命令。

  1. $ unzip ../playground.zip

unzip命令的参数如下。

  • -l 列出文件包中的内容而不解压
  • -v 显示冗余信息
  • -p 输出发送到标准输出
  1. $ unzip -p ls-etc.zip | less

tar

tar是tape archive的简称,原来是一款制作磁带备份的工具,现在主要用于打包。一个 tar 包可以由一组独立的文件,一个或者多个目录,或者两者混合体组成。

tar程序的语法如下。

  1. $ tar mode[options] pathname...

tar支持以下模式。

  • c 表示create,为文件和/或目录列表创建归档文件。
  • x 抽取归档文件。
  • r 追加具体的路径到归档文件的末尾。
  • t 列出归档文件的内容。

支持的参数如下。

  • f 表示file,用来指定生成的文件。

模式和参数可以写在一起,而且不需要开头的短横线。注意,必须首先指定模式,然后才是其它的选项。

  1. # 创建子目录的tar包
  2. $ tar cf playground.tar playground
  3. # 查看tar包内容
  4. $ tar tf playground.tar
  5. # 查看更详细的列表信息
  6. $ tar tvf playground.tar
  7. # 还原归档文件
  8. $ tar xf playground.tar
  9. # 还原单个文件
  10. $ tar xf archive.tar pathname
  11. # 还原文件到指定目录
  12. $ tar xvf archive.tar -C /home/me/
  13. # 追加文件
  14. $ tar rf archive.tar file.txt
  15. # 验证归档文件内容是否正确
  16. $ tar tvfW archive.tar
  17. # 支持通配符
  18. $ tar xf ../playground2.tar --wildcards 'home/me/playground/\*.txt'

注意,tar命令还原的时候,总是还原为相对路径。如果归档的时候,保存的是绝对路径,那么还原的时候,这个绝对路径会整个变成相对路径。

find命令可以与tar命令配合使用。

  1. $ find playground -name 'file.txt' -exec tar rf playground.tar '{}' '+'

上面的命令先用find程序找到所有名为file.txt的文件,然后使用追加模式(r)的tar命令,把匹配的文件添加到归档文件playground.tar里面。

这种tarfind的配合使用,可以创建逐渐增加的目录树或者整个系统的备份。通过find命令匹配新于某个时间戳的文件,我们就能够创建一个归档文件,其只包含新于上一个 tar 包的文件。

tar支持压缩功能。

  1. # 打成gzip压缩包
  2. $ tar czvf assets.tar.gz dist
  3. # 打成bz2压缩包
  4. $ tar cvfj assets.tar.bz2 dist
  5. # 解压 tar.gz 文件
  6. $ tar xzv archive.tar.gz
  7. $ tar xvf archive.tar.gz
  8. # 解压bz2压缩包
  9. $ tar xvf archive.tar.bz2
  10. # 显示gzip压缩包内容
  11. $ tar tvf archive.tar.gz
  12. # 显示bz2压缩包内容
  13. $ tar tvf archive.tar.bz2
  14. # 从gzip压缩包取出单个文件
  15. $ tar zxvf archive.tar.gz file.txt
  16. # 从bz2压缩包取出单个文件
  17. $ tar jxvf archive.tar.bz2 file.txt
  18. # 按通配符取出文件
  19. $ tar zxvf archive.tar.gz --wildcards '*.php'
  20. $ tar jxvf archive.tar.bz2 --wildcards '*.php'
  21. # 追加文件到压缩包
  22. $ tar rvf archive.tar.gz xyz.txt
  23. $ tar rvf archive.tar.bz2 xyz.txt

rsync

rsync命令用于在多个目录之间、或者本地与远程目录之间同步。字母r表示remote

  1. $ rsync options source destination

source 和 destination 是下列选项之一:

  • 一个本地文件或目录
  • 一个远端文件或目录,以[user@]host:path的形式存在
  • 一个远端 rsync 服务器,由rsync://[user@]host[:port]/path指定

注意 source 和 destination 两者之一必须是本地文件。rsync 不支持远端到远端的复制。

rsync命令的参数如下。

  • -a 递归和保护文件属性
  • -v 冗余输出
  • --delete 删除可能在备份设备中已经存在但却不再存在于源设备中的文件
  • --rsh=ssh 使用 ssh 程序作为远程 shell,目的地必须标注主机名。
  1. # 同步两个本地目录
  2. $ rsync -av playground foo
  3. # 删除源设备不存在的文件
  4. $ sudo rsync -av --delete /etc /home /usr/local /media/BigDisk/backup
  5. # 远程同步
  6. $ sudo rsync -av --delete --rsh=ssh /etc /home /usr/local remote-sys:/backup
  7. # 与远程rsync主机同步
  8. $ rsync -av -delete rsync://rsync.gtlib.gatech.edu/path/to/oss fedora-devel