网站搜索

如何在 Linux 中打包文件、设置文件权限和查找文件


最近,Linux基金会启动了LFCS(Linux Foundation Certified Sysadmin)认证,这是一个全新的计划,其目的是允许个人在Linux系统上执行基本到中级的系统管理任务。

这包括支持已经运行的系统和服务,以及一级故障排除和分析,以及决定何时将问题升级给工程团队的能力。

该系列的标题为 LFCSLinux 基金会认证系统管理员)的准备第 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 通常与 gzipbzip2xz 等压缩工具一起使用来生成压缩的 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 扩展名。在以下示例中,我们将使用这些文件:file1file2file3file4文件5

使用 gzip、bzip2 和 xz 压缩文件

将当前工作目录中的所有文件分组,并使用 gzipbzip2xz 压缩生成的包(请注意使用常规表达式来指定捆绑包中应包含哪些文件 - 这是为了防止归档工具对前面步骤中创建的 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)或少于(-1806个月前或恰好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=22w=21x=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]

最后但并非最不重要的一点是,请考虑使用以下链接购买考试券,以便为我们赚取小额佣金,这将有助于我们不断更新本书。