Skip to content

Commit 3410d09

Browse files
committed
docs: first commit
0 parents  commit 3410d09

64 files changed

Lines changed: 5454 additions & 0 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs/archiving.md

Lines changed: 217 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,217 @@
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

Comments
 (0)