-
Notifications
You must be signed in to change notification settings - Fork 15
/
08、文件与文件系统的压缩、打包和备份
388 lines (294 loc) · 14.9 KB
/
08、文件与文件系统的压缩、打包和备份
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
Linux 中 打包 和 压缩 是两个概念
1、压缩:只能减少单个文件的大小,并提供解压缩方案
2、打包:将多个文件变成一个文件,并提供解包方案
打包文件常见后缀 .tar
压缩文件常见后缀 .Z .zip .gz .bz2 .xz
注意,在 Linux 中后缀名并不影响文件本身,只是作为人类可读的方式而存在
.gz 的压缩工具
gzip [-cdtv#] [文件]
-c, --stdout, --to-stdout 将压缩后的数据重导向至 standard out
-d, --decompress, --uncompress 无视后缀名,强制解压缩
-t, --test 测试压缩包完整性
-v, --verbose 输出各类参数
-<number>, --fast, --best 压缩级别(取值 1-9,默认 6), <number> 越大,压缩率越大,压缩解压资源消耗越多
#! 注意! gzip 在压缩/解压的时候,默认会删除原有文件
zcat/zless/zmore/zgrep 查看压缩文件的内容
.bz2 的压缩工具
bzip2 [-cdkzv#] [文件]
-c, --stdout 将压缩后的数据重导向至 standard out
-d, --decompress 无视后缀名,强制解压缩
-z, --compress 无视后缀名,强制压缩
-k, --keep 压缩/解压后保留原文件
-v, --verbose 输出各类参数
-<number> 压缩级别(取值 1-9 )
bzcat/bzless/bzmore/bzgrep 查看压缩文件的内容
.xz 的压缩工具
xz [-cdkzv#] [文件]
参数同 bzip2
文件打包
tar [-z|j|J] <-c> [-v] [--exclude=<要排除文件>] <-f 新建的tar文件> <待处理的文件名1> [待处理的文件名2] ...
tar [-z|j|J] <-t> [-v] <-f 已有的tar文件>
tar [-z|j|J] <-x> [-v] [-C 目标目录] <-f 已有的tar文件> [需要单独解包的文件]
--{z|gzip}/{j|bzip2}/{J|xz} 调用 gzip/bzip2/xz 对文件压缩/解压
--{c|create}/{t|list}/{x|extract|get} 打包/罗列包内容/解包
-v, --verbose 显示详细信息
-f, --file=<ARCHIVE> tar文件名
-C, --directory=<DIR> 解包的位置
-p, --presver-premissions, --same-permissions 保留文件原有的属性
-P, --absolute-names 保留文件原有的绝对路径(解包将直接覆盖原文件)
--exclude=<filename> 不处理的文件名
#! 注意,不要将 tar -jcvf [filename] ,写成 tar -jcfv [filename] 后者的意思是将文件打包为名为 v 的文件
# 建议使用 tar -jcv -f [filename] 来明确打包的内容
# tar 不会删除原文件
# tar 中文件的路径头会直接使用 tar 命令中输入的位置
eg.
tar -cv -f newTar.tar ./soucedir/
tar -tv -f newTar.tar
#文件路径就会返回 ./sourcedir/<Blah...Blah...>
从 tar 包中解压指定的文件
tar [-jtv] [-f tar文件] | grep "<文件字段>"
# 预览 tar 包中指定字段的文件的完整路径
tar [-jxv] [-C 解压路径] [-f tar文件] [tar包内文件完整路径]
排除部分文件进行压缩
tar -jcv <-f tar文件名> --exclude=<要排除的文件名1> --exclude=<要排除的文件名2> ... [待处理文件]
--exclude=<FILE> 直接指定排除的 Pattern
-X, --exclude-from=<FILE> 从指定文件读取排除 Pattern
仅打包比某个时间要新的文件
--newer 测试所有时间类型
--newer-mtime 仅测试 mtime
tar 与 tarball
如果打包文件没有被压缩,习惯称为 tar 包
如果打包文件被压缩,习惯称为 tarball 包
XFS 文件系统的备份与还原
xfsdump xfsrestore
XFS 文件系统的备份
xfsdump [-L S_label] [-M M_label] [-l <number>] <-f 输出文件1> [-f 输出文件2] ... [原文件]
xfsdump -I
-L 写入 session 标签,与备份等级对应,一个备份等级对应一个 session
-M 写入 media 标签,与备份设备对应,一个备份文件对应一个 media
-l 指定备份等级,取值 0-9,0级为完全备份,1-9为补丁形式的备份
-f 生成的文件名
-I 从 /var/lib/xfsdump/inventory 列出备份的信息
#1 xfsdump 使用补丁式的方式添加备份,备份等级为 0 时,为完全备份
备份等级为 1-9 时,每个级别都只备份与上个等级的文件差异
#2 xfsdump 的备份信息记录在 /var/lib/xfsdump/inventory
XFS 文件系统的还原
xfsrestore -I
xfsrestore [-f 备份文件] [-L S_label] [-s 需要单独恢复的文件] <恢复至的文件夹>
xfsrestore [-f 备份文件] -i <恢复至的文件夹>
-I 查看 /var/lib/xfsdump/inventory 下记录的备份信息
-f 备份文件位置
-L 要恢复的备份级别所对应的 session 标签
-s 只恢复指定的文件
-i 交互模式操作恢复
光盘镜像的创建、烧录
mkisofs、wodim
#注1:默认情况下,光盘镜像使用 ISO9660 文件系统,只支持 8字符文件名+3字符后缀名 的格式
无开机引导的数据光盘镜像的创建
mkisofs [-o ISO文件名] [-Jrv] [-V vol] [-m filenamePattern1] [-m filenamePattern2]... [-exclude-list file]\
[-graft-points <ISODir1=SourceDir1> [ISODir2=SourceDir2] ...] <待加入镜像的文件1> [待加入镜像的文件2] ...
-o 输出的 ISO 文件名(未指定时输出为 stdout)
-J 使用 Joliet 来扩展文件名的支持,这项技术仅与 Windows 及 Linux 兼容,可支持长达 64 字符的 Unicode 字符作为文件名
-R, -rock 使用 Rock Ridge 来扩展文件名的支持
-r, -rational-rock 使用 Rock Ridge 来扩展文件名的支持,并自动修改文件部分属性与权限,以使其能在不同机器上正常使用
-v, -verbose 输出详细参数
-v -v, -verbose -verbose 输出更加详细的参数
-V volid 设定光盘镜像的卷标签
-m 按照设定的样式排除文件
-exclude-list 从指定的文件中读取排除文件的样式
-graft-points 修改文件路径,(测试失败,这个指令会导致文件被复制到新的路径下,而非修改至新的路径下)
可用作开机引导的镜像的制作-----测试失败,略过
光盘烧录------没有测试工具,略过
wodim
其他压缩备份资料的方法
dd 以数据块(block)作为单位 读取 转换 写入 数据 (data definition)
dd [OPERAND]...
dd <OPTION>
! dd 将以数据块或 newline 作为每一笔 记录(record) 的终止
bs=<BYTES>
单个数据块读取和写入 <BYTES> 的字节
cbs=<BYTES>
单个数据块转换 <BYTES> 的字节
conv=<CONVS>
将字节在不同编码下转换(具体列表见下文 CONV 部分)
无空格逗号作为多个参数的分隔
count=<N>
仅操作 <N> 个输入的数据块
ibs=<BYTES>
单个数据块读取 <BYTES> 的字节(默认 512)
if=<FILE>
从文件 <FILE> 而非 StdIn 读取数据
iflage=<FLAGS>
读入文件使用的标记(具体列表见下文 FLAG 部分)
无空格逗号作为多参数的分隔
obs=<BYTES>
单个数据块写入 <BYTES> 的字节
of=<FILE>
写入文件 <FILE> 而非 StdIn
oflag=<FLAGES>
写入文件使用的标记(具体列表见下文 FLAG 部分)
无空格逗号作为多参数的分隔
seek=<N>
输出时,略过 <N> 个 obs 参数中定义的数据块
skip=<N>
读取时,略过 <N> 个 ibs 参数中定义的数据块
status=<LEVEL>
输出至 StdErr 的信息级别
“none” 除了 错误信息,其他都不输出
“noxfer” 不显示 最后传输统计信息
“progress” 显示每轮的传输统计
<N> 和 <BYTES> 可以使用以下单位:c=1, w=2, b=512,
kB=1000, K=1024,
MB=1000^2, M=1024^2,
GB=1000^3, G=1024^3,
同理: T P E Z Y
<CONV> 可用
ascii EBCDIC -> ASCII
ebcdic ASCII -> EBCDIC
ibm ASCII -> alternate EBCDIC
block 将用 newline 结尾的数据块,用 NUL 填充至 cbs 规定的大小
unblock 将 cbs 最后用 NUL 填充的数据块,用 newline 来替换
lcase 大写转小写
ucase 小写转大写
sparse 输出时,跳过全 NUL 的数据块
swab 传入每一个输入的字节(即便它没有成组)
sync 用 NUL 将每个 读入的记录 填充至 ibs 定义的数据块大小
若使用了 block 或 unblock 参数,则使用 空格 填充
[下面是针对文件的 flag,和内部处理无关]
excl 若输出文件已存在,则返回 操作失败
nocreat 不要 新建 输出文件,输出文件必须已经存在
notrunc 不要 截短 输出文件
noerror 读取到错误也继续读取
fdatasync 结束操作前,将数据 sync 至硬盘中
fsync 结束操作前,不仅将数据 sync 写入硬盘中,也将 元数据(metadata)写入硬盘中
<FLAG> 可用
append 附加模式,数据将会附加至文件尾部
direct 不使用 缓存数据,而直接执行 I/O
directory 除了 文件夹,对其他文件的操作都返回 失败
dsync 使用 sync 过的数据
对于 输出文件,这将强制让文件 sync 入硬盘
对于 输入文件,这将处理不断被 sync 至本地的数据
fullblock 对于输入的数据,
若数据量不足以填充一个 block,就接着读取,直到填充满 block
nonblock 使用 非阻断式 IO
noatime 不要更新文件的 access time
nocache 不对文件使用缓存
nofollow 不要解析 符号链接
count_bytes 将 count 部分解释为 字节数,而非 数据块数
skip_bytes 将 skip 部分解释为 字节数,而非 数据块数
seek_bytes 将 seek 部分解释为 字节数,而非 数据块数
将 SIGUSR1 送入 dd,可让 dd 将当前的 I/O 统计 输出至 StdErr,并继续剩下的操作
cpio 从存档(archive)内拷入或拷出文件
在 copy-out 模式中,cpio 将文件拷入 存档 中。它将从 StdIn 中读取文件名列表,每个一行。然后将压缩包输出至 StdOut。
在 copy-in 模式中,cpio 将文件从 指定存档 或 一系列存档 中拷贝出来。它从 StdIn 读取 存档文件。
任何 非选项的命令行 都会作为 文件路径通配符,在 存档 中,仅有匹配上 至少一个 通配符 的文件才会被拷贝出来。
文件名起始处的 “.” 可以作为一个 通配符,文件名中的 “/” 可以匹配多个 通配符。
在 copy-pass 模式中, cpio 将 文件 从一个目录拷贝至另一个目录中,它连续使用 copy-out 和 copy-in,而不实际产生一个 存档包。
它从 StdIn 处读取一些列需要拷贝的文件,而拷贝至的目录作为 非选项的 参数出现。
cpio 接受以下的 存档格式 : binary, old ASCII, new ASCII, crc, HPUX binary, HPUX old ASCII, old tar, POSIX.1 tar
copy-out 模式下,使用 binary 格式作为 存档格式,作为和老版 cpio 的兼容措施
copy-in 模式下,会自动识别 存档的格式
!以下内容,在定义何种模式可以使用时, copy-in copy-out copy-pass 简称 in out pass
-0, --null 【in/out】
使用 null 而非 newline 作为路径的终止符号,这样可以将路径包含 newline 的文件也 打包进来
find 命令就可以产生以 null 作为结尾的文件列表
-a, --reset-access-time
在读取文件之后重置它们的 access time,这样可以让它们看起来不是刚刚被存取过
--append 【out】
将输出 附加 在 旧有存档 之后,旧有存档 必须是磁盘上的文件,且必须用 -O 或 -F 参数指定
-b, --swap 【in】
反转 字节/字符 的高低位。等价于 -sS 命令。
用于在 big-endian 和 little-endian 的机器上做转换
-B
将 I/O 块 的大小变为 5120 bytes。默认使用的是 512 bytes
--block-size=<count>
将 I/O 块 的大小变为 <count> * 512 bytes
-c
等价于 “-H newc”,使用新的(SVR4)格式,若要使旧的(ASCII)格式,则使用 “-H odc”
-C <IO-SIZE>, --io-size=<IO-SIZE>
将 I/O 块 的大小设置为 <IO-SIZE> bytes
-d, --make-directories
当需要时,创建前序 目录
-E <FILE>, ppattern-file=<FILE> 【in】
从文件 <FILE> 中读取附加的 文件路径匹配样式。附加的匹配样式将作为 非选项参数 传入
-f, --nomatching
仅拷贝不和任何样式匹配的文件
-F, --file=<archive>
使用指定的 存档文件 来代替 StdIn 和 StdOut。
在路径前增加“<HOSTNAME>:” 来指定输出至远程主机的磁带上
<HOSTNAME> 部分,使用 “<用户名>@<主机名>” 来指定使用的远程用户
--force-local
在使用 -F, -I, -O 时,即便出现了分号 : 也识别为本地文件
-H <FORMAT>, --format=<FORMAT>
使用指定的 存档文件 格式。可用的列表见下文,接受 全部大写 和 全部小写 的参数
bin 旧的二进制格式
odc 旧的(POSIX.1)可移植格式
newc 新的(SVR4)可移植格式,支持单一文件系统超过 2^16 个 inode
crc 新的(SVR4)可移植格式,同时添加了 Sum32 校验
tar 旧的 tar 格式
ustar POSIX.1 tar 格式。也可用于 GUN tar 存档
hpbin HPUX 上的 cpio 命令使用的旧的二进制格式
hpodc HPUX 上的 cpio 使用的可移植格式
-i, --extract 【in】
指定 cpio 在 copy-in 模式下运行
-I <archive>
使用指定的 存档文件 来替代 StdIn。
其他解释同 -F <archive>
-l, --link
当可用时,仅产生文件之间的链接,而非拷贝它们
-L, --dereference
拷贝符号链接指向的原文件,而非符号链接本身
-m, --preserve-modification-time
在创建文件时,保持原文件原有的修改时间
-M <MESSAGE>, --message=<MESSAGE>
当备份的媒体空间使用完毕时,输出 <MESSAGE> 提示用户插入一个新的媒体
可使用 %d 来代指当前的卷编号(从 1 开始)
-n, --numeric-uid-gid
当使用 --verbose 选项的时候,用 UID 和 GID 代替 用户名和群组名
--no-absolute-filenames
在 copy-in 模式下,即便文件以绝对路径书写,也放置在相对于当前路径的位置下
--absolute-filenames
【默认选项】不从 文件路劲中移除 以 “..” 或 “/” 开头的路径
也即使用文件定义的绝对路径
--no-preserve-owner 【in/pass】
不要修改文件的所有者,让解开文件的使用者成为文件的拥有者。
者对于非 root 用户而言是默认值
-o, --create
指定 cpio 在 copy-out 模式下运行
-O <archive>
使用指定的 存档文件 来替代 StdOut。
其他解释同 -F <archive>
--only-verify-crc
仅校验 crc 存档 中的每个文件,而不实际解压它们
-p, --pass-through
指定 cpio 在 copy-pass 模式下运行
--quiet
不要输出 已拷贝的 块数量
-r, --rename
交互式重命名文件
-R [user][:.][group], --owner [user][:.][group] 【out/pass】
修改文件的 所有者 和 群组
若 群组 未指定,而又有 : 或 . ,则使用给定的 用户 的 登录群组 作为 群组
--rsh-command=<COMMAND>
提示 cpio 使用 <COMMAND> 命令与 远程设备沟通
-s, --swap-bytes 【in】
交换字符的高低位
--sparse 【in/pass】
使用大量的 以 0 填充的 块,来创建出离散文件
-t, --list
打印一个输入内容的列表
--to-stdout 【in】
将文件输出至 StdOut
-u, --unconditional
直接覆盖文件,而不提示是否用旧文件覆盖新文件
-v, --verbose
罗列每个被处理的文件
与 -t 选项连用时,给出类似 ls -l 样式的文件列表
当处理 ustar 格式的 存档文件时,不存在于该系统的 用户和群组
将依据文件记录的 UID 和 GID 映射至本系统的 用户 与 群组
-V, --dot
每处理一个文件,就输出一个 “.”
-W, --warning
控制警告显示。当前的 FLAG 是下述的一个 “none”“truncate”“all”
--usage
给出一个简短的用量信息