如何在 Linux 中打包文件、设置文件权限和查找文件
最近,Linux基金会启动了LFCS(Linux Foundation Certified Sysadmin)认证,这是一个全新的计划,其目的是允许个人在Linux系统上执行基本到中级的系统管理任务。
这包括支持已经运行的系统和服务,以及一级故障排除和分析,以及决定何时将问题升级给工程团队的能力。
该系列的标题为 LFCS(Linux 基金会认证系统管理员)的准备第 1 至 33 部分,涵盖以下主题:
- Part 1
如何在 Linux 中使用“Sed”命令操作文件
- Part 2
如何在 Linux 中安装和使用 Vi/Vim
- Part 3
-
如何在 Linux 中归档文件、设置文件权限和查找文件
- Part 4
对存储设备进行分区、格式化文件系统和配置交换分区
- Part 5
在 Linux 中挂载/卸载本地和网络(Samba 和 NFS)文件系统
- Part 6
将分区组装为 RAID 设备 – 创建和管理系统备份
- Part 7
管理系统启动进程和服务(SysVinit、Systemd 和 Upstart)
- Part 8
如何管理用户和组、文件权限和 Sudo 访问
- Part 9
使用 Yum、RPM、Apt、Dpkg、Aptitude 和 Zypper 进行 Linux 包管理
- Part 10
学习基本的 Shell 脚本和文件系统故障排除
- Part 11
如何使用 vgcreate、lvcreate 和 lvextend 命令管理和创建 LVM
- Part 12
如何使用已安装的帮助文档和工具探索 Linux
- Part 13
-
如何配置 Grand Unified Bootloader (GRUB) 并对其进行故障排除
- Part 14
监控 Linux 进程资源使用情况并按用户设置进程限制
- Part 15
如何在 Linux 系统中设置或修改内核运行时参数
- Part 16
在 Linux 中使用 SELinux 或 AppArmor 实施强制访问控制
- Part 17
如何为用户和组设置访问控制列表 (ACL) 和磁盘配额
- Part 18
安装网络服务并配置开机自动启动
- Part 19
设置 FTP 服务器以允许匿名登录的终极指南
- Part 20
设置基本递归缓存 DNS 服务器并为域配置区域
- Part 21
如何安装、保护 MariaDB 数据库服务器并对其进行性能调优
- Part 22
如何安装和配置 NFS 服务器以进行文件系统共享
- Part 23
-
如何使用 SSL 证书通过基于名称的虚拟主机设置 Apache
- Part 24
如何设置 Iptables 防火墙以启用对 Linux 中服务的远程访问
- Part 25
如何将 Linux 变成路由器来静态和动态处理流量
- Part 26
如何使用 Cryptsetup 工具设置加密文件系统和交换
- Part 27
如何监控系统使用情况、中断以及对 Linux 服务器进行故障排除
- Part 28
如何设置网络存储库来安装或更新软件包
- Part 29
如何审核网络性能、安全性和故障排除
- Part 30
如何安装和管理虚拟机和容器
- Part 31
学习 Git 基础知识以高效管理项目
- Part 32
在 Linux 中配置 IPv4 和 IPv6 地址的初学者指南
- Part 33
在 Ubuntu 中创建网络绑定和桥接的初学者指南
这篇文章是 33 个教程系列的第 3 部分,在这一部分中,我们将介绍如何归档/压缩文件和目录、设置文件属性以及在文件系统上查找文件,这些都是 LFCS< 所需的。 认证考试。
适用于 Linux 的归档和压缩工具
文件归档工具将一组文件分组为一个独立文件,我们可以将其备份到多种类型的媒体、通过网络传输或通过电子邮件发送。
Linux 中最常用的归档实用程序是 tar 命令。当归档实用程序与压缩工具一起使用时,它可以减少存储相同文件和信息所需的磁盘大小。
Linux tar 实用程序
tar 将一组文件捆绑到一个存档中(通常称为tar 文件 或tarball)。该名称最初代表磁带归档器,但我们必须注意,我们可以使用此工具将数据归档到任何类型的可写介质(不仅仅是磁带)。
Tar 通常与 gzip、bzip2 或 xz 等压缩工具一起使用来生成压缩的 tarball。
tar命令的基本语法如下:
tar [options] [pathname ...]
其中 ...
表示用于指定应对哪些文件执行操作的表达式。
最常用的 Tar 命令
Long option | Abbreviation | Description |
–create | c | Creates a tar archive |
–concatenate | A | Appends tar files to an archive |
–append | r | Appends files to the end of an archive |
–update | u | Appends files newer than copy in archive |
–diff or –compare | d | Find differences between archive and file system |
–file archive | f | Use archive file or device ARCHIVE |
–list | t | Lists the contents of a tarball |
–extract or –get | x | Extracts files from an archive |
常用的 tar 操作修饰符
Long option | Abbreviation | Description |
–directory dir | C | Changes to directory dir before performing operations |
–same-permissions | p | Preserves original permissions |
–verbose | v | Lists all files read or extracted. When this flag is used along with –list, the file sizes, ownership, and time stamps are displayed. |
–verify | W | Verifies the archive after writing it |
–exclude file | — | Excludes files from the archive |
–exclude=pattern | X | Exclude files, given as a PATTERN |
–gzip or –gunzip | z | Processes an archive through Gzip |
–bzip2 | j | Processes an archive through bzip2 |
–xz | J | Processes an archive through xz |
Linux Gzip、Bzip2 和 Xz 实用程序
Gzip 是最古老的压缩工具,提供最少的压缩,而 bzip2 提供改进的压缩。此外,xz 是最新的,但(通常)提供最好的压缩。
最佳压缩的优点是有代价的:完成操作所需的时间以及在此过程中使用的系统资源。
通常,使用这些实用程序压缩的 tar 文件分别具有 .gz
、.bz2
或 .xz
扩展名。在以下示例中,我们将使用这些文件:file1、file2、file3、file4 和 文件5。
使用 gzip、bzip2 和 xz 压缩文件
将当前工作目录中的所有文件分组,并使用 gzip、bzip2 和 xz 压缩生成的包(请注意使用常规表达式来指定捆绑包中应包含哪些文件 - 这是为了防止归档工具对前面步骤中创建的 tarball 进行分组)。
tar czf myfiles.tar.gz file[0-9]
tar cjf myfiles.tar.bz2 file[0-9]
tar cJf myfile.tar.xz file[0-9]
列出内容并更新/附加文件 Tar 存档
列出 tarball 的内容并显示与长目录列表相同的信息。请注意,更新或追加操作不能直接应用于压缩文件。
解压缩 Tar 文件
如果您需要更新或附加文件到压缩的 tarball,则需要解压缩 tar 文件并更新/附加到它,然后再次压缩它。
tar tvf [tarball]
运行以下任一命令:
gzip -d myfiles.tar.gz [#1]
bzip2 -d myfiles.tar.bz2 [#2]
xz -d myfiles.tar.xz [#3]
删除文件或将文件添加到 Tar 存档
tar --delete --file myfiles.tar file4 (deletes the file inside the tarball)
tar --update --file myfiles.tar file4 (adds the updated file)
和
gzip myfiles.tar [ if you choose #1 above ]
bzip2 myfiles.tar [ if you choose #2 above ]
xz myfiles.tar [ if you choose #3 above ]
最后,
tar tvf [tarball] #again
并将file4的修改日期和时间与前面显示的相同信息进行比较。
从备份中排除文件
假设您要执行用户的主目录的备份。一个好的系统管理员实践是(也可能由公司政策指定)从备份中排除所有视频和音频文件。
也许您的第一种方法是从备份中排除所有具有 .mp3
或 .mp4
扩展名(或其他扩展名)的文件。如果您有一个聪明的用户可以将扩展名更改为 .txt
或 .bkp
,那么您的方法不会给您带来多大好处。
为了检测音频或视频文件,您需要使用文件检查其文件类型。下面的 shell 脚本将完成这项工作。
#!/bin/bash
Pass the directory to backup as first argument.
DIR=$1
Create the tarball and compress it. Exclude files with the MPEG string in its file type.
-If the file type contains the string mpeg, $? (the exit status of the most recently executed command) expands to 0, and the filename is redirected to the exclude option. Otherwise, it expands to 1.
-If $? equals 0, add the file to the list of files to be backed up.
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/*
使用 Tar 保留权限恢复备份
然后,您可以使用以下命令将备份恢复到原始用户的主目录(本例中为 user_restore),并保留权限。
tar xjf backupfile.tar.bz2 --directory user_restore --same-permissions
使用Find命令搜索文件
find 命令用于在目录树中递归搜索匹配某些特征的文件或目录,然后可以打印匹配的文件或目录或对匹配项执行其他操作。
通常,我们会按名称、所有者、组、类型、权限、日期和大小进行搜索。
find命令的基本语法如下:
find [directory_to_search] [expression]
根据大小递归查找文件
查找当前目录(.
)中的所有文件(-f
)和下面的2
子目录(-maxdepth 3
包括当前工作目录及其下 2 级),其大小 (-size
) 大于 2 MB。
find . -maxdepth 3 -type f -size +2M
查找并删除符合特定条件的文件
具有 777 权限的文件有时被视为对外部攻击者敞开大门。不管怎样,让任何人对文件进行任何操作都是不安全的。我们会采取比较激进的做法,将其删除! (‘{}
‘ +
用于“收集”搜索结果)。
find /home/user -perm 777 -exec rm '{}' +
根据时间戳查找文件
在 /etc 中搜索已访问 (-atime
) 或修改 (-mtime
) 更多 (+180)或少于(-180)6个月前或恰好6个月前(180) 。
按照下面的示例修改以下命令:
find /etc -iname "*.conf" -mtime -180 -print
设置文件权限和基本属性
ls -l 输出中的前 10 个字符是文件属性。这些字符中的第一个用于指示文件类型:
-
:常规文件-d
:目录-l
:符号链接-c
:字符设备(将数据视为字节流,即终端)-b
:块设备(处理块中的数据,即存储设备)
文件属性的接下来九个字符称为文件模式,分别代表读取 (r
)、写入 (w
) 和执行 (x
) >) 文件所有者、文件组所有者和其他用户(通常称为“世界”)的权限。
文件的读取权限允许打开和读取该文件,而如果还设置了执行权限,则目录的相同权限允许列出其内容。此外,文件中的执行权限允许将其作为程序处理并运行,而在目录中则允许将其 cd 到其中。
文件权限通过chmod命令更改,其基本语法如下:
chmod [new_mode] file
其中 new_mode 是八进制数或指定新权限的表达式。
八进制数可以从其二进制等效值转换而来,二进制等效值是根据所有者、组和世界所需的文件权限计算出来的,如下所示:
某些权限的存在等于 2 的幂(r=22、w=21、x=20 ),而它的缺失则等于 0。例如:
要以八进制形式设置上述文件的权限,请键入:
chmod 744 myfile
您还可以使用表达式设置文件模式,该表达式用字母 u
表示所有者权限,用字母 g
表示组所有者权限,用 表示其余权限Ø 。
所有这些“个体”都可以同时用字母a
来表示。分别使用 +
或 -
符号授予(或撤销)权限。
删除所有用户对脚本的执行权限
正如我们之前所解释的,我们可以通过在某个权限前面加上减号来撤销某个权限,并指示是否需要为所有者、组所有者或所有用户撤销该权限。下面一行可以解释如下:更改所有(a
)用户的模式,撤销(-
)执行权限(x
) 。
chmod a-x backup.sh
向所有者和组所有者授予文件的读取、写入和执行权限,以及向全局授予读取权限。
当我们使用3位八进制数来设置文件的权限时,第一个数字表示所有者的权限,第二个数字表示组所有者的权限,第三个数字表示其他人的权限:
- 所有者:(r=22 + w=21 + x=20=7)
- 群组所有者:(r=22 + w=21 + x=20=7)
- 世界:(r=22 + w=0 + x=0=4),
chmod 774 myfile
随着时间的推移和实践,您将能够决定在每种情况下哪种更改文件模式的方法最适合您。长目录列表还显示文件的所有者及其组所有者(作为对系统中文件的基本但有效的访问控制):
使用 chown 命令更改文件所有权。所有者和群组所有者可以同时或单独更改。其基本语法如下:
chown user:group file
至少需要有一个用户或组在场。
chown 命令示例
将文件的所有者更改为特定用户。
chown gacanepa sent
将文件的所有者和组更改为特定的用户:组对。
chown gacanepa:gacanepa TestFile
仅将文件的组所有者更改为特定组。请注意组名称前面的冒号。
chown :gacanepa email_body.txt
结论
作为系统管理员,您需要知道如何创建和恢复备份,如何查找系统中的文件并更改其属性,以及一些可以让您的生活更轻松并防止您遇到未来问题的技巧。
我希望本文中提供的提示能够帮助您实现该目标。为了社区的利益,请随意在评论部分添加您自己的信息和想法。提前致谢!
LFCS 电子书现已可供购买。立即订购您的副本,开始您成为认证 Linux 系统管理员的旅程!
Product Name | Price | Buy |
---|---|---|
The Linux Foundation’s LFCS Certification Preparation Guide | $19.99 | [Buy Now] |
最后但并非最不重要的一点是,请考虑使用以下链接购买考试券,以便为我们赚取小额佣金,这将有助于我们不断更新本书。