|
| 1 | +# 归档和备份 |
| 2 | + |
| 3 | +## gzip |
| 4 | + |
| 5 | +gzip 程序用来压缩文件,原文件的压缩版(添加`gz`后缀名)会替代原文件。gunzip 程序用来还原压缩版本。 |
| 6 | + |
| 7 | +```bash |
| 8 | +$ gzip foo.txt |
| 9 | +$ gunzip foo.txt.gz |
| 10 | +``` |
| 11 | + |
| 12 | +`gzip`的参数如下。 |
| 13 | + |
| 14 | +- -c 把输出写入到标准输出,并且保留原始文件。也有可能用--stdout 和--to-stdout 选项来指定。 |
| 15 | +- -d 解压缩。正如 gunzip 命令一样。也可以用--decompress 或者--uncompress 选项来指定. |
| 16 | +- -f 强制压缩,即使原始文件的压缩文件已经存在了,也要执行。也可以用--force 选项来指定。 |
| 17 | +- -h 显示用法信息。也可用--help 选项来指定。 |
| 18 | +- -l 列出每个被压缩文件的压缩数据。也可用--list 选项。 |
| 19 | +- -r 若命令的一个或多个参数是目录,则递归地压缩目录中的文件。也可用--recursive 选项来指定。 |
| 20 | +- -t 测试压缩文件的完整性。也可用--test 选项来指定。 |
| 21 | +- -v 显示压缩过程中的信息。也可用--verbose 选项来指定。 |
| 22 | +- -number 设置压缩指数。number 是一个在1(最快,最小压缩)到9(最慢,最大压缩)之间的整数。 数值1和9也可以各自用--fast 和--best 选项来表示。默认值是整数6。 |
| 23 | + |
| 24 | +下面是一些例子。 |
| 25 | + |
| 26 | +```bash |
| 27 | +# 查看解压缩后的内容 |
| 28 | +$ gunzip -c foo.txt | less |
| 29 | +``` |
| 30 | + |
| 31 | +`zcat`程序等同于带有-c 选项的 gunzip 命令。它可以像`cat`命令那样,用来查看`gzip`压缩文件。 |
| 32 | + |
| 33 | +```bash |
| 34 | +$ zcat foo.txt.gz | less |
| 35 | +``` |
| 36 | + |
| 37 | +## bzip2 |
| 38 | + |
| 39 | +`bzip2`程序与`gzip`程序相似,但是使用了不同的压缩算法,舍弃了压缩速度,实现了更高的压缩级别。在大多数情况下,它的工作模式等同于`gzip`。 由`bzip2`压缩的文件,用扩展名`.bz2`表示。 |
| 40 | + |
| 41 | +```bash |
| 42 | +$ bzip2 foo.txt |
| 43 | +$ bunzip2 foo.txt.bz2 |
| 44 | +``` |
| 45 | + |
| 46 | +gzip程序的所有选项(除了`-r`),bzip2 程序同样也支持。同样有 bunzip2 和 bzcat 程序来解压缩文件。bzip2 文件也带有 bzip2recover 程序,其会 试图恢复受损的 .bz2 文件。 |
| 47 | + |
| 48 | +## zip |
| 49 | + |
| 50 | +`zip`程序既是压缩工具,也是一个打包工具,读取和写入.zip文件。 |
| 51 | + |
| 52 | +```bash |
| 53 | +$ zip options zipfile file... |
| 54 | +``` |
| 55 | + |
| 56 | +它的用法如下。 |
| 57 | + |
| 58 | +```bash |
| 59 | +# 将指定目录压缩成zip文件 |
| 60 | +$ zip -r playground.zip playground |
| 61 | +``` |
| 62 | + |
| 63 | +`zip`与`tar`命令有一个相反之处。如果压缩文件已存在,其将被更新而不是被替代。这意味着会保留此文件包,但是会添加新文件,同时替换匹配的文件。 |
| 64 | + |
| 65 | +解压使用`unzip`命令。 |
| 66 | + |
| 67 | +```bash |
| 68 | +$ unzip ../playground.zip |
| 69 | +``` |
| 70 | + |
| 71 | +`unzip`命令的参数如下。 |
| 72 | + |
| 73 | +- `-l` 列出文件包中的内容而不解压 |
| 74 | +- `-v` 显示冗余信息 |
| 75 | +- `-p` 输出发送到标准输出 |
| 76 | + |
| 77 | +```bash |
| 78 | +$ unzip -p ls-etc.zip | less |
| 79 | +``` |
| 80 | + |
| 81 | +## tar |
| 82 | + |
| 83 | +`tar`是tape archive的简称,原来是一款制作磁带备份的工具,现在主要用于打包。一个 tar 包可以由一组独立的文件,一个或者多个目录,或者两者混合体组成。 |
| 84 | + |
| 85 | +`tar`程序的语法如下。 |
| 86 | + |
| 87 | +```bash |
| 88 | +$ tar mode[options] pathname... |
| 89 | +``` |
| 90 | + |
| 91 | +tar支持以下模式。 |
| 92 | + |
| 93 | +- c 表示create,为文件和/或目录列表创建归档文件。 |
| 94 | +- x 抽取归档文件。 |
| 95 | +- r 追加具体的路径到归档文件的末尾。 |
| 96 | +- t 列出归档文件的内容。 |
| 97 | + |
| 98 | +支持的参数如下。 |
| 99 | + |
| 100 | +- f 表示file,用来指定生成的文件。 |
| 101 | + |
| 102 | +模式和参数可以写在一起,而且不需要开头的短横线。注意,必须首先指定模式,然后才是其它的选项。 |
| 103 | + |
| 104 | +```bash |
| 105 | +# 创建子目录的tar包 |
| 106 | +$ tar cf playground.tar playground |
| 107 | + |
| 108 | +# 查看tar包内容 |
| 109 | +$ tar tf playground.tar |
| 110 | + |
| 111 | +# 查看更详细的列表信息 |
| 112 | +$ tar tvf playground.tar |
| 113 | + |
| 114 | +# 还原归档文件 |
| 115 | +$ tar xf playground.tar |
| 116 | + |
| 117 | +# 还原单个文件 |
| 118 | +$ tar xf archive.tar pathname |
| 119 | + |
| 120 | +# 还原文件到指定目录 |
| 121 | +$ tar xvf archive.tar -C /home/me/ |
| 122 | + |
| 123 | +# 追加文件 |
| 124 | +$ tar rf archive.tar file.txt |
| 125 | + |
| 126 | +# 验证归档文件内容是否正确 |
| 127 | +$ tar tvfW archive.tar |
| 128 | + |
| 129 | +# 支持通配符 |
| 130 | +$ tar xf ../playground2.tar --wildcards 'home/me/playground/\*.txt' |
| 131 | +``` |
| 132 | + |
| 133 | +注意,`tar`命令还原的时候,总是还原为相对路径。如果归档的时候,保存的是绝对路径,那么还原的时候,这个绝对路径会整个变成相对路径。 |
| 134 | + |
| 135 | +`find`命令可以与`tar`命令配合使用。 |
| 136 | + |
| 137 | +```bash |
| 138 | +$ find playground -name 'file.txt' -exec tar rf playground.tar '{}' '+' |
| 139 | +``` |
| 140 | + |
| 141 | +上面的命令先用`find`程序找到所有名为`file.txt`的文件,然后使用追加模式(`r`)的`tar`命令,把匹配的文件添加到归档文件`playground.tar`里面。 |
| 142 | + |
| 143 | +这种`tar`和`find`的配合使用,可以创建逐渐增加的目录树或者整个系统的备份。通过`find`命令匹配新于某个时间戳的文件,我们就能够创建一个归档文件,其只包含新于上一个 tar 包的文件。 |
| 144 | + |
| 145 | +tar支持压缩功能。 |
| 146 | + |
| 147 | +```bash |
| 148 | +# 打成gzip压缩包 |
| 149 | +$ tar czvf assets.tar.gz dist |
| 150 | + |
| 151 | +# 打成bz2压缩包 |
| 152 | +$ tar cvfj assets.tar.bz2 dist |
| 153 | + |
| 154 | +# 解压 tar.gz 文件 |
| 155 | +$ tar xzv archive.tar.gz |
| 156 | +$ tar xvf archive.tar.gz |
| 157 | + |
| 158 | +# 解压bz2压缩包 |
| 159 | +$ tar xvf archive.tar.bz2 |
| 160 | + |
| 161 | +# 显示gzip压缩包内容 |
| 162 | +$ tar tvf archive.tar.gz |
| 163 | + |
| 164 | +# 显示bz2压缩包内容 |
| 165 | +$ tar tvf archive.tar.bz2 |
| 166 | + |
| 167 | +# 从gzip压缩包取出单个文件 |
| 168 | +$ tar zxvf archive.tar.gz file.txt |
| 169 | + |
| 170 | +# 从bz2压缩包取出单个文件 |
| 171 | +$ tar jxvf archive.tar.bz2 file.txt |
| 172 | + |
| 173 | +# 按通配符取出文件 |
| 174 | +$ tar zxvf archive.tar.gz --wildcards '*.php' |
| 175 | +$ tar jxvf archive.tar.bz2 --wildcards '*.php' |
| 176 | + |
| 177 | +# 追加文件到压缩包 |
| 178 | +$ tar rvf archive.tar.gz xyz.txt |
| 179 | +$ tar rvf archive.tar.bz2 xyz.txt |
| 180 | +``` |
| 181 | + |
| 182 | +## rsync |
| 183 | + |
| 184 | +`rsync`命令用于在多个目录之间、或者本地与远程目录之间同步。字母`r`表示`remote`。 |
| 185 | + |
| 186 | +```bash |
| 187 | +$ rsync options source destination |
| 188 | +``` |
| 189 | + |
| 190 | +source 和 destination 是下列选项之一: |
| 191 | + |
| 192 | +- 一个本地文件或目录 |
| 193 | +- 一个远端文件或目录,以`[user@]host:path`的形式存在 |
| 194 | +- 一个远端 rsync 服务器,由`rsync://[user@]host[:port]/path`指定 |
| 195 | + |
| 196 | +注意 source 和 destination 两者之一必须是本地文件。rsync 不支持远端到远端的复制。 |
| 197 | + |
| 198 | +`rsync`命令的参数如下。 |
| 199 | + |
| 200 | +- `-a` 递归和保护文件属性 |
| 201 | +- `-v` 冗余输出 |
| 202 | +- `--delete` 删除可能在备份设备中已经存在但却不再存在于源设备中的文件 |
| 203 | +- `--rsh=ssh` 使用 ssh 程序作为远程 shell,目的地必须标注主机名。 |
| 204 | + |
| 205 | +```bash |
| 206 | +# 同步两个本地目录 |
| 207 | +$ rsync -av playground foo |
| 208 | + |
| 209 | +# 删除源设备不存在的文件 |
| 210 | +$ sudo rsync -av --delete /etc /home /usr/local /media/BigDisk/backup |
| 211 | + |
| 212 | +# 远程同步 |
| 213 | +$ sudo rsync -av --delete --rsh=ssh /etc /home /usr/local remote-sys:/backup |
| 214 | + |
| 215 | +# 与远程rsync主机同步 |
| 216 | +$ rsync -av -delete rsync://rsync.gtlib.gatech.edu/path/to/oss fedora-devel |
| 217 | +``` |
0 commit comments