最近,Linux 基金会发起了一个全新的 LFCS( Linux 基金会认证系统管理员 ( Linux Foundation Certified Sysadmin ) )认证,旨在让遍布全世界的人都有机会参加该认证的考试,通过考试的人将表明他们有能力在 Linux 上执行基本的中级系统管理任务。这项认证包括了对已运行的系统和服务的支持、一流水平的问题解决和分析以及决定何时将问题反映给工程师团队的能力。
LFCS 系列第三讲
请看以下视频,这里边讲给出 Linux 基金会认证程序的一些想法。
本讲是系列教程中的第三讲,在这一讲中,我们会涵盖如何在文件系统中归档/压缩文件及目录、设置文件属性和搜索文件等内容,这些都是 LFCS 认证中必须掌握的知识。
归档和压缩的相关工具
文件归档工具将一堆文件整合到一个单独的归档文件之后,我们可以将归档文件备份到不同类型的介质或者通过网络传输和发送 Email 来备份。在 Linux 中使用频率最高的归档实用工具是 tar。当归档工具和压缩工具一起使用的时候,可以减少同一文件和信息在硬盘中的存储空间。
tar 使用工具
tar 将一组文件打包到一个单独的归档文件(通常叫做 tar 文件或者 tarball)。tar 这个名称最初代表 磁带存档程序 ( tape archiver ) ,但现在我们可以用它来归档任意类型的可读写介质上边的数据,而不是只能归档磁带数据。tar 通常与 gzip、bzip2 或者 xz 等压缩工具一起使用,生成一个压缩的 tarball。
基本语法:
# tar [选项] [路径名 ...]
其中 … 代表指定哪些文件进行归档操作的表达式
tar 的常用命令
长选项 | 简写 | 描述 |
---|---|---|
-create | c | 创建 tar 归档文件 |
-concatenate | A | 将一存档与已有的存档合并 |
-append | r | 把要存档的文件追加到归档文件的末尾 |
-update | u | 更新新文件到归档文件中去 |
-diff 或 -compare | d | 比较存档与当前文件的不同之处 |
-file archive | f | 使用档案文件或归档设备 |
-list | t | 列出 tarball 中的内容 |
-extract 或 -get | x | 从归档文件中释放文件 |
常用的操作修饰符
长选项 | 缩写 | 描述 |
---|---|---|
-directory dir | C | 执行归档操作前,先转到指定目录 |
-same-permissions | p | 保持原始的文件权限 |
-verbose | v | 列出所有的读取或提取的文件。但这个标识符与 -list 一起使用的时候,还会显示出文件大小、属主和时间戳的信息 |
-verify | W | 写入存档后进行校验 |
-exclude file | 不把指定文件包含在内 | |
-exclude=pattern | X | 以PATTERN模式排除文件 |
-gzip 或 -gunzip | z | 通过gzip压缩归档 |
-bzip2 | j | 通过bzip2压缩归档 |
-xz | J | 通过xz压缩归档 |
Gzip 是最古老的压缩工具,压缩率最小,bzip2 的压缩率稍微高一点。另外,xz 是最新的压缩工具,压缩率最好。xz 具有最佳压缩率的代价是:完成压缩操作花费最多时间,压缩过程中占有较多系统资源。
通常,通过这些工具压缩的 tar 文件相应的具有 .gz、.bz2 或 .xz的扩展名。在下列的例子中,我们使用 file1、file2、file3、file4 和 file5 进行演示。
通过 gzip、bzip2 和 xz 压缩归档
归档当前工作目录的所有文件,并以 gzip、bzip2 和 xz 压缩刚刚的归档文件(请注意,用正则表达式来指定哪些文件应该归档——这是为了防止将归档工具包前一步生成的文件打包进来)。
# tar czf myfiles.tar.gz file[0-9]
# tar cjf myfiles.tar.bz2 file[0-9]
# tar cJf myfile.tar.xz file[0-9]
压缩多个文件
列举 tarball 中的内容和更新/追加文件到归档文件中
列举 tarball 中的内容,并显示相同信息为一个详细目录清单。注意,不能直接向压缩的归档文件更新/追加文件(若你需要向压缩的 tarball 中更新/追加文件,需要先解压 tar 文件后再进行操作,然后重新压缩)。
# tar tvf [tarball]
列举归档文件中的内容
运行一下任意一条命令:
# gzip -d myfiles.tar.gz [#1]
# bzip2 -d myfiles.tar.bz2 [#2]
# xz -d myfiles.tar.xz [#3]
然后:
# tar --delete --file myfiles.tar file4 (删除tarball中的file4)
# tar --update --file myfiles.tar file4 (更新tarball中的file4)
和
# gzip myfiles.tar [ 如果你运行 #1 命令 ]
# bzip2 myfiles.tar [ 如果你运行 #2 命令 ]
# xz myfiles.tar [ 如果你运行 #3 命令 ]
最后
# tar tvf [tarball] #再次
将 file4 修改后的日期和时间与之前显示的对应信息进行比较
排除文件类型
假设你现在需要备份用户的家目录。一个有经验的系统管理员会选择忽略所有视频和音频文件再备份(也可能是公司规定)。
可能你最先想到的方法是在备份的时候,忽略扩展名为 .mp3 和 .mp4(或者其他格式)的文件。但如果你有些自作聪明的用户将扩展名改为 .txt 或者 .bkp,那你的方法就不灵了。为了发现并排除音频或者视频文件,你需要先检查文件类型。以下 shell 脚本可以代你完成类型检查:
#!/bin/bash
# 把需要进行备份的目录传递给 $1 参数.
DIR=$1
# 排除文件类型中包含了 mpeg 字符串的文件,然后创建 tarball 并进行压缩。
# -若文件类型中包含 mpeg 字符串, $?(最后执行的命令的退出状态)返回 0,然后文件名被定向到排除选项。否则返回 1。
# -若 $? 等于 0,该文件从需要备份文件的列表排除。
tar X