PUB:Part 3 - LFCS--How to Archive or Compress Files and Directories Setting File Attributes and Finding Files in Linux.md

@GHLandy
This commit is contained in:
wxy 2016-03-30 06:02:14 +08:00
parent da1e4e1140
commit 0f4e053413

View File

@ -1,165 +1,72 @@
GHLandy Translated
LFCS 系列第三讲:如何在 Linux 中归档/压缩文件及目录、设置文件属性和搜索文件
LFCS 系列第三讲:归档/压缩文件及目录、设置文件属性和搜索文件
================================================================================
最近Linux 基金会发起了 一个全新的 LFCSLinux Foundation Certified SysadminLinux 基金会认证系统管理员)认证,旨在让遍布全世界的人都有机会参加该认证的考试,并且通过考试的人将会得到关于他们有能力在 Linux 上执行基本的中间系统管理任务的认证证书。这项认证包括了对已运行的系统和服务的支持、一流水平的问题解决和分析以及决定何时将问题反映给工程师团队的能力。
最近Linux 基金会发起了一个全新的 LFCSLinux Foundation Certified SysadminLinux 基金会认证系统管理员)认证,旨在让遍布全世界的人都有机会参加该认证的考试,通过考试的人将表明他们有能力在 Linux 上执行基本的中级系统管理任务。这项认证包括了对已运行的系统和服务的支持、一流水平的问题解决和分析以及决定何时将问题反映给工程师团队的能力。
![Linux Foundation Certified Sysadmin Part 3](http://www.tecmint.com/wp-content/uploads/2014/10/lfcs-Part-3.png)
LFCS 系列第三讲
*LFCS 系列第三讲*
请看以下视频,这里边讲给出 Linux 基金会认证程序的一些想法。
youtube 视频
<iframe width="720" height="405" frameborder="0" allowfullscreen="allowfullscreen" src="//www.youtube.com/embed/Y29qZ71Kicg"></iframe>
本讲是《十套教程》系列中的第三讲,在这一讲中,我们会涵盖如何在文件系统中归档/压缩文件及目录、设置文件属性和搜索文件等内容,这些都是 LFCS 认证中必须掌握的知识。
本讲是系列教程中的第三讲,在这一讲中,我们会涵盖如何在文件系统中归档/压缩文件及目录、设置文件属性和搜索文件等内容,这些都是 LFCS 认证中必须掌握的知识。
### 归档和压缩的相关工具 ###
文件归档工具将一堆文件整合到一个单独的归档文件之后,我们可以将归档文件备份到不同类型的介或者通过网络传输和发送 Email 来备份。在 Linux 中使用频率最高的归档实用工具是 tar。当归档工具和压缩工具一起使用的时候可以减少同一文件和信息在硬盘中的存储空间。
文件归档工具将一堆文件整合到一个单独的归档文件之后,我们可以将归档文件备份到不同类型的介或者通过网络传输和发送 Email 来备份。在 Linux 中使用频率最高的归档实用工具是 tar。当归档工具和压缩工具一起使用的时候可以减少同一文件和信息在硬盘中的存储空间。
#### tar 使用工具 ####
tar 将一组文件打包到一个单独的归档文件(通常叫做 tar 文件或者 tarball。tar 这个名称最初代表磁带存档程序tape archiver但现在我们可以用它来归档任意类型的可读写介上边的数据而不是只能归档磁带数据。tar 通常与 gzip、bzip2 或者 xz 等压缩工具一起使用,生成一个压缩的 tarball。
tar 将一组文件打包到一个单独的归档文件(通常叫做 tar 文件或者 tarball。tar 这个名称最初代表磁带存档程序tape archiver但现在我们可以用它来归档任意类型的可读写介上边的数据而不是只能归档磁带数据。tar 通常与 gzip、bzip2 或者 xz 等压缩工具一起使用,生成一个压缩的 tarball。
**基本语法:**
# tar [选项] [路径名 ...]
其中 ... 代表指定些文件进行归档操作的表达式
其中 ... 代表指定些文件进行归档操作的表达式
#### tar 的常用命令 ####
注:表格
<table cellspacing="0" border="0">
<colgroup width="150">
</colgroup>
<colgroup width="109">
</colgroup>
<colgroup width="351">
</colgroup>
<tbody>
<tr>
<td bgcolor="#999999" height="18" align="CENTER" style="border: 1px solid #000001;"><b>长选项</b></td>
<td bgcolor="#999999" align="CENTER" style="border: 1px solid #000001;"><b>简写</b></td>
<td bgcolor="#999999" align="CENTER" style="border: 1px solid #000001;"><b>描述</b></td>
</tr>
<tr class="alt">
<td height="18" align="LEFT" style="border: 1px solid #000001;">&nbsp;&ndash;create</td>
<td align="LEFT" style="border: 1px solid #000001;">&nbsp;c</td>
<td align="LEFT" style="border: 1px solid #000001;">&nbsp;创建 tar 归档文件</td>
</tr>
<tr>
<td height="18" align="LEFT" style="border: 1px solid #000001;">&nbsp;&ndash;concatenate</td>
<td align="LEFT" style="border: 1px solid #000001;">&nbsp;A</td>
<td align="LEFT" style="border: 1px solid #000001;">&nbsp;将一存档与已有的存档合并</td>
</tr>
<tr class="alt">
<td height="18" align="LEFT" style="border: 1px solid #000001;">&nbsp;&ndash;append</td>
<td align="LEFT" style="border: 1px solid #000001;">&nbsp;r</td>
<td align="LEFT" style="border: 1px solid #000001;">&nbsp;把要存档的文件追加到归档文件的末尾</td>
</tr>
<tr>
<td height="18" align="LEFT" style="border: 1px solid #000001;">&nbsp;&ndash;update</td>
<td align="LEFT" style="border: 1px solid #000001;">&nbsp;u</td>
<td align="LEFT" style="border: 1px solid #000001;">&nbsp;更新新文件到归档文件中去</td>
</tr>
<tr class="alt">
<td height="20" align="LEFT" style="border: 1px solid #000001;">&nbsp;&ndash;diff 或 &ndash;compare</td>
<td align="LEFT" style="border: 1px solid #000001;">&nbsp;d</td>
<td align="LEFT" style="border: 1px solid #000001;">&nbsp;比较存档与当前文件的不同之处</td>
</tr>
<tr>
<td height="18" align="LEFT" style="border: 1px solid #000001;">&nbsp;&ndash;file archive</td>
<td align="LEFT" style="border: 1px solid #000001;">&nbsp;f</td>
<td align="LEFT" style="border: 1px solid #000001;">&nbsp;使用档案文件或设备</td>
</tr>
<tr class="alt">
<td height="20" align="LEFT" style="border: 1px solid #000001;">&nbsp;&ndash;list</td>
<td align="LEFT" style="border: 1px solid #000001;">&nbsp;t</td>
<td align="LEFT" style="border: 1px solid #000001;">&nbsp;列出 tarball 中的内容</td>
</tr>
<tr>
<td height="20" align="LEFT" style="border: 1px solid #000001;">&nbsp;&ndash;extract 或 &ndash;get</td>
<td align="LEFT" style="border: 1px solid #000001;">&nbsp;x</td>
<td align="LEFT" style="border: 1px solid #000001;">&nbsp;从归档文件中释放文件</td>
</tr>
</tbody>
</table>
|长选项|简写|描述|
|-----|:---:|:---|
| -create| c| 创建 tar 归档文件|
| -concatenate| A| 将一存档与已有的存档合并|
| -append| r| 把要存档的文件追加到归档文件的末尾|
| -update| u| 更新新文件到归档文件中去|
| -diff 或 -compare| d| 比较存档与当前文件的不同之处|
| -file archive| f| 使用档案文件或归档设备|
| -list| t| 列出 tarball 中的内容|
| -extract 或 -get| x| 从归档文件中释放文件|
#### 常用的操作修饰符 ####
注:表格
<table cellspacing="0" border="0">
<colgroup width="162">
</colgroup>
<colgroup width="109">
</colgroup>
<colgroup width="743">
</colgroup>
<tbody>
<tr class="alt">
<td bgcolor="#999999" height="18" align="CENTER" style="border: 1px solid #000001;"><b><span style="font-family: Droid Sans;">长选项</span></b></td>
<td bgcolor="#999999" align="CENTER" style="border: 1px solid #000001;"><b><span style="font-family: Droid Sans;">缩写</span></b></td>
<td bgcolor="#999999" align="CENTER" style="border: 1px solid #000001;"><b><span style="font-family: Droid Sans;">描述</span></b></td>
</tr>
<tr>
<td height="20" align="LEFT" style="border: 1px solid #000001;"><span style="font-family: Consolas;">&nbsp;&ndash;directory dir</span></td>
<td align="LEFT" style="border: 1px solid #000001;"><span style="font-family: Consolas;">&nbsp;C</span></td>
<td align="LEFT" style="border: 1px solid #000001;">&nbsp;执行归档操作前,先转到指定目录</td>
</tr>
<tr class="alt">
<td height="18" align="LEFT" style="border: 1px solid #000001;"><span style="font-family: Consolas;">&nbsp;&ndash;same-permissions</span></td>
<td align="LEFT" style="border: 1px solid #000001;"><span style="font-family: Consolas;">&nbsp;p</span></td>
<td align="LEFT" style="border: 1px solid #000001;"><span style="font-family: Droid Sans;">&nbsp;保持原始的文件权限</span></td>
</tr>
<tr>
<td height="38" align="LEFT" style="border: 1px solid #000001;"><span style="font-family: Consolas;">&nbsp;&ndash;verbose</span></td>
<td align="LEFT" style="border: 1px solid #000001;"><span style="font-family: Consolas;">&nbsp;v</span></td>
<td align="LEFT" style="border: 1px solid #000001;">&nbsp;列出所有的读取或提取文件。但这个标识符与 &ndash;list 一起使用的时候,还会显示出文件大小、属主和时间戳的信息</td>
</tr>
<tr class="alt">
<td height="18" align="LEFT" style="border: 1px solid #000001;"><span style="font-family: Consolas;">&nbsp;&ndash;verify</span></td>
<td align="LEFT" style="border: 1px solid #000001;"><span style="font-family: Consolas;">&nbsp;W</span></td>
<td align="LEFT" style="border: 1px solid #000001;"><span style="font-family: Droid Sans;">&nbsp;写入存档后进行校验</span></td>
</tr>
<tr>
<td height="20" align="LEFT" style="border: 1px solid #000001;"><span style="font-family: Consolas;">&nbsp;&ndash;exclude file</span></td>
<td align="LEFT" style="border: 1px solid #000001;"><span style="font-family: Consolas;">&nbsp;&mdash;</span></td>
<td align="LEFT" style="border: 1px solid #000001;">&nbsp;不把指定文件包含在内</td>
</tr>
<tr class="alt">
<td height="18" align="LEFT" style="border: 1px solid #000001;"><span style="font-family: Consolas;">&nbsp;&ndash;exclude=pattern</span></td>
<td align="LEFT" style="border: 1px solid #000001;"><span style="font-family: Consolas;">&nbsp;X</span></td>
<td align="LEFT" style="border: 1px solid #000001;"><span style="font-family: Droid Sans;">&nbsp;以PATTERN模式排除文件</span></td>
</tr>
<tr>
<td height="20" align="LEFT" style="border: 1px solid #000001;">&nbsp;&ndash;gzip 或 &ndash;gunzip</td>
<td align="LEFT" style="border: 1px solid #000001;"><span style="font-family: Consolas;">&nbsp;z</span></td>
<td align="LEFT" style="border: 1px solid #000001;">&nbsp;通过gzip压缩归档</td>
</tr>
<tr class="alt">
<td height="20" align="LEFT" style="border: 1px solid #000001;"><span style="font-family: Consolas;">&nbsp;&ndash;bzip2</span></td>
<td align="LEFT" style="border: 1px solid #000001;"><span style="font-family: Consolas;">&nbsp;j</span></td>
<td align="LEFT" style="border: 1px solid #000001;">&nbsp;通过bzip2压缩归档</td>
</tr>
<tr>
<td height="20" align="LEFT" style="border: 1px solid #000001;"><span style="font-family: Consolas;">&nbsp;&ndash;xz</span></td>
<td align="LEFT" style="border: 1px solid #000001;"><span style="font-family: Consolas;">&nbsp;J</span></td>
<td align="LEFT" style="border: 1px solid #000001;">&nbsp;通过xz压缩归档</td>
</tr>
</tbody>
</table>
Gzip 是最古老的压缩工具压缩率最小bzip2 的压缩率稍微高一点。另外xz是最新的压缩工具压缩率最好。xz 具有最佳压缩率的代价是:完成压缩操作花费最多时间,压缩过程中占有较多系统资源。
|长选项|缩写|描述|
|-----|:--:|:--|
| -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 压缩刚刚的归档文件(请注意,用正则表达式来指定那些文件应该归档——这是为了防止归档工具包前一步生成的文件打包进来)。
归档当前工作目录的所有文件,并以 gzip、bzip2 和 xz 压缩刚刚的归档文件(请注意,用正则表达式来指定哪些文件应该归档——这是为了防止将归档工具包前一步生成的文件打包进来)。
# tar czf myfiles.tar.gz file[0-9]
# tar cjf myfiles.tar.bz2 file[0-9]
@ -167,7 +74,7 @@ Gzip 是最古老的压缩工具压缩率最小bzip2 的压缩率稍微高
![Compress Multiple Files Using tar](http://www.tecmint.com/wp-content/uploads/2014/10/Compress-Multiple-Files.png)
压缩多个文件
*压缩多个文件*
**列举 tarball 中的内容和更新/追加文件到归档文件中**
@ -177,7 +84,7 @@ Gzip 是最古老的压缩工具压缩率最小bzip2 的压缩率稍微高
![Check Files in tar Archive](http://www.tecmint.com/wp-content/uploads/2014/10/List-Archive-Content.png)
列举归档文件中的内容
*列举归档文件中的内容*
运行一下任意一条命令:
@ -206,19 +113,19 @@ Gzip 是最古老的压缩工具压缩率最小bzip2 的压缩率稍微高
假设你现在需要备份用户的家目录。一个有经验的系统管理员会选择忽略所有视频和音频文件再备份(也可能是公司规定)。
可能你最先想到的方法是在备份时候,忽略扩展名为 .mp3 和 .mp4或者其他格式的文件。但如果你有些自作聪明的用户将扩展名改为 .txt 或者 .bkp那你的方法就不灵了。为了发现并排除音频或者视频文件你需要先检查文件类型。以下 shell 脚本可以代你完成类型检查:
可能你最先想到的方法是在备份时候,忽略扩展名为 .mp3 和 .mp4或者其他格式的文件。但如果你有些自作聪明的用户将扩展名改为 .txt 或者 .bkp那你的方法就不灵了。为了发现并排除音频或者视频文件你需要先检查文件类型。以下 shell 脚本可以代你完成类型检查:
#!/bin/bash
# 把需要进行备份的目录传递给 $1 参数.
DIR=$1
#排除文件类型中包含了 mpeg 字符串的文件,然后创建 tarball 并进行压缩。
# 排除文件类型中包含了 mpeg 字符串的文件,然后创建 tarball 并进行压缩。
# -若文件类型中包含 mpeg 字符串, $?(最后执行的命令的退出状态)返回 0然后文件名被定向到排除选项。否则返回 1。
# -若 $? 等于 0该文件从需要备份文件的列表排除。
tar X <(for i in $DIR/*; do file $i | grep -i mpeg; if [ $? -eq 0 ]; then echo $i; fi;done) -cjf backupfile.tar.bz2 $DIR/*
![Exclude Files in tar Archive](http://www.tecmint.com/wp-content/uploads/2014/10/Exclude-Files-in-Tar.png)
排除文件进行备份
*排除文件进行备份*
**使用 tar 保持文件的原有权限进行恢复**
@ -228,7 +135,7 @@ Gzip 是最古老的压缩工具压缩率最小bzip2 的压缩率稍微高
![Restore Files from tar Archive](http://www.tecmint.com/wp-content/uploads/2014/10/Restore-tar-Backup-Files.png)
从归档文件中恢复
*从归档文件中恢复*
**扩展阅读:**
@ -243,31 +150,31 @@ find 命令用于递归搜索目录树中包含指定字符的文件和目录,
#### 基本语法:####
# find [需搜索的目录] [表达式]
# find [需搜索的目录] [表达式]
**通过文件大小递归搜索文件**
以下命令会搜索当前目录(.)及其下两层子目录(-maxdepth 3包含当前目录及往下两层的子目录大于 2 MB-size +2M的所有文件-f
以下命令会搜索当前目录(.)及其下两层子目录(-maxdepth 3包含当前目录及往下两层的子目录大于 2 MB-size +2M的所有文件-f
# find . -maxdepth 3 -type f -size +2M
![Find Files by Size in Linux](http://www.tecmint.com/wp-content/uploads/2014/10/Find-Files-Based-on-Size.png)
通过文件大小搜索文件
*
通过文件大小搜索文件*
**搜索符合一定规则的文件并将其删除**
有时候777 权限的文件通常为外部攻击者打开便利之门。不管是以何种方式,让所有人都可以对文件进行任意操作都是不安全的。对此,我们采取一个相对激进的方法——删除这些文件({ }用来“聚集”搜索的结果)。
有时候777 权限的文件通常为外部攻击者打开便利之门。不管是以何种方式,让所有人都可以对文件进行任意操作都是不安全的。对此,我们采取一个相对激进的方法——删除这些文件('{}' + 用来“聚集”搜索的结果)。
# find /home/user -perm 777 -exec rm '{}' +
![Find all 777 Permission Files](http://www.tecmint.com/wp-content/uploads/2014/10/Find-Files-with-777-Permission.png)
搜索 777 权限的文件
*搜索 777 权限的文件*
**按访问时间和修改时间搜索文件**
搜索 /etc 目录下访问时间(-atime或修改时间-mtime大于或小于 6 个月或者刚好 6 个月的配置文件。
搜索 /etc 目录下访问时间(-atime或修改时间-mtime大于+180或小于-180 6 个月或者刚好180 6 个月的配置文件。
按照下面例子对命令进行修改:
@ -275,7 +182,7 @@ find 命令用于递归搜索目录树中包含指定字符的文件和目录,
![Find Files by Modification Time](http://www.tecmint.com/wp-content/uploads/2014/10/Find-Modified-Files.png)
按修改时间搜索文件
*按修改时间搜索文件*
- 扩展阅读: [35 Practical Examples of Linux find Command][3]
@ -301,11 +208,11 @@ new_mode 可以是 3 位八进制数值或者对应权限的表达式。
八进制数值可以从二进制数值进行等值转换,通过下列方法来计算文件属主、同组用户和其他用户权限对应的二进制数值:
一个确定权限的二进制数值表现为 2 的幂r=2^2w=2^1x=2^0当权限省缺时二进制数值为 0。如下
一个确定权限的二进制数值表现为 2 的幂r=2\^2w=2\^1x=2\^0当权限省缺时二进制数值为 0。如下
![Linux File Permissions](http://www.tecmint.com/wp-content/uploads/2014/10/File-Permissions.png)
文件权限
*文件权限*
使用八进制数值设置上图的文件权限,请输入:
@ -313,7 +220,6 @@ new_mode 可以是 3 位八进制数值或者对应权限的表达式。
通过 u、g 和 o 分别代表用户、同组用户和其他用户,然后你也可以使用权限表达式来单独对用户设置文件的权限模式。也可以通过 a 代表所有用户,然后设置文件权限。通过 + 号或者 - 号相应的赋予或移除文件权限。
**为所有用户撤销一个 shell 脚本的执行权限**
正如之前解释的那样,我们可以通过 - 号为需要移除权限的属主、同组用户、其他用户或者所有用户去掉指定的文件权限。下面命令中的短横线(-)可以理解为:移除(-所有用户a的 backup.sh 文件执行权限x
@ -324,11 +230,13 @@ new_mode 可以是 3 位八进制数值或者对应权限的表达式。
当我们使用 3 位八进制数值为文件设置权限的时候,第一位数字代表属主权限,第二位数字代表同组用户权限,第三位数字代表其他用户的权限:
- 属主:(r=2^2 + w=2^1 + x=2^0 = 7)
- 同组用户:(r=2^2 + w=2^1 + x=2^0 = 7)
- 其他用户:(r=2^2 + w=0 + x=0 = 4),
- 属主:(r=2\^2 + w=2\^1 + x=2\^0 = 7)
- 同组用户:(r=2\^2 + w=2\^1 + x=2\^0 = 7)
- 其他用户:(r=2\^2 + w=0 + x=0 = 4)
# chmod 774 myfile
命令如下:
# chmod 774 myfile
随着练习时间的推移,你会知道何种情况下使用哪种方式来更改文件的权限模式的效果最好。
@ -336,7 +244,7 @@ new_mode 可以是 3 位八进制数值或者对应权限的表达式。
![Linux File Listing](http://www.tecmint.com/wp-content/uploads/2014/10/Linux-File-Listing.png)
列举 Linux 文件
*列举 Linux 文件*
通过 chown 命令可以对文件的归属权进行更改,可以同时或者分开更改属主和属组。其基本语法为:
@ -367,9 +275,9 @@ new_mode 可以是 3 位八进制数值或者对应权限的表达式。
先行感谢!
参考链接
- [About the LFCS][4]
- [Why get a Linux Foundation Certification?][5]
- [Register for the LFCS exam][6]
- [关于 LFCS][4]
- [为什么需要 Linux 基金会认证?][5]
- [注册 LFCS 考试][6]
--------------------------------------------------------------------------------
@ -377,7 +285,7 @@ via: http://www.tecmint.com/compress-files-and-finding-files-in-linux/
作者:[Gabriel Cánepa][a]
译者:[GHLandy](https://github.com/GHLandy)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出