如何在 Linux 上列出和管理文件属性如何在 Linux 上列出和管理文件属性如何在 Linux 上列出和管理文件属性如何在 Linux 上列出和管理文件属性
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Linux 上列出和管理文件属性

使用 Linux 时,我们有多种方法来管理对资源的访问:最基本的一种是对文件和目录设置适当的 UGO/RWX 权限。在某些情况下,我们可能还想使用 setuid、setgid 和粘性位。此外,我们可以使用 ACL(访问控制列表)来实现更高级别的粒度或实现强制访问控制安全性,例如基于 SELinux 或 AppArmor 的安全性。

除了上面提到的策略之外,在大多数文件系统上,我们还可以操作一组“属性”,例如使文件不可变。

在本文中,我们讨论 Linux 上的文件属性,并学习如何检查分配给文件的属性以及如何管理它们。

在本教程中您将学习:

  • 文件属性可用于哪些用途

  • 如何列出文件属性

  • 如何分配/删除文件属性

介绍

Linux (DAC) 和其他基于 Unix 的操作系统上的自主访问控制,其基本形式是通过对文件应用一组特定的权限,并将其所有权设置为特定的用户和组来实现:这就是我们所要实现的。调用UGO/RWX权限。在之前的教程中,我们还讨论了一组在某些情况下有用的“特殊”标志或位:setuid、setgid 和粘性位,并且我们学习了如何通过使用 ACL 来分配更高粒度的权限(访问控制列表)。

我们还讨论了 SELinux,它可能是 Linux 上主要的强制访问控制实现。在本教程中,我们将了解如何根据我们使用的文件系统,使用一系列属性来启用/禁用文件和目录的特定功能。

列出文件属性

为了列出 Linux 上的文件属性,我们可以使用 lsattr 实用程序,该实用程序包含在最常用的 Linux 发行版上的 e2fsprogs 包中(尽管名称如此,但它可以也可用于 ext2/3/4 以外的文件系统,例如 xfs)。

该实用程序接受一个或多个文件作为参数,并支持一系列选项来修改其行为。让我们看一个它的用法示例。当不带任何参数或选项调用 lsattr 时,它会返回与工作目录中包含的文件和目录关联的属性列表,就像 ls 命令一样:

$ lsattr
--------------e------- ./Templates
--------------e------- ./Downloads
--------------e------- ./Projects
--------------e------- ./Documents
--------------e------- ./Desktop
--------------e------- ./Music
--------------e------- ./Public
--------------e------- ./Videos
--------------e------- ./Pictures

在上面的示例中,您可以看到我在主目录中调用了该命令。从命令的输出中,我们可以看到可见目录只分配了e属性:这意味着它们正在使用“extents”来映射磁盘上的块(这与ext4文件系统的方式有关)作品)。如您所见,默认情况下,隐藏文件不包含在输出中;要包含它们,我们可以将 -a 选项传递给命令。我们还可以使用 -R 选项递归列出目录的属性,或者使用 - 列出目录的属性而不是其内容的属性。 d。

另一个有用的选项是 -l,它用于显示与文件关联的属性的全名,而不是标识它们的单个字母:

$ lsattr -l
./Templates                  Extents
./Downloads                  Extents
./Projects                   Extents
./Documents                  Extents
./Desktop                    Extents
./Music                      Extents
./Public                     Extents
./Videos                     Extents
./Pictures                   Extents

各种属性的含义可以在 chattr 实用程序手册中检索,正如我们稍后将看到的,它用于设置或删除属性。这里我们只报告其中的一些(某些属性只能在某些文件系统上设置 - “j”,例如不能在没有日志记录的 ext2 文件系统上设置):

设置和删除属性

我们用来分配属性的实用程序是chattr;它的语法非常简单:要将属性分配给文件,我们使用 + 符号,后跟属性字母,然后将属性应分配到的文件的路径作为参数传递到命令。让我们看一个例子。

假设我们有一个文件(假设它名为 example.txt),并且我们想为其分配 a 属性,以避免其内容被覆盖。这是我们要运行的命令:

$ sudo chattr +a example.txt

您可能会注意到,我们在命令前加上了 sudo 前缀,因为大多数属性只能由 root 用户分配或删除。我们可以使用 lsattr 来验证该属性是否已分配给文件:

$ lsattr -l example.txt
example.it                   Append_Only, Extents

现在,如果我们尝试使用 > shell 重定向运算符进行写入以覆盖该文件,我们会收到错误:

$ echo "line" > example.txt
bash: example.txt: Operation not permitted

如果我们改用 >> 重定向运算符,将内容附加到文件中,则不会生成错误:

$ echo "line" >> example.txt

这是另一个例子。 i 属性可用于使文件不可变并且无法删除或移动,即使是 root 用户(但是可以完全删除该属性):

$ sudo chattr +i example.txt
$ sudo rm example.txt
rm: cannot remove 'example.txt': Operation not permitted

删除属性

要从文件中删除一个或多个属性,我们所要做的就是更改 chattr 使用的“运算符”。我们使用 - 代替 +。要从“example.txt”文件中删除我们在上一个示例中设置的 i 和 a 属性,我们将运行:

$ sudo chattr -ai example.txt

在某些情况下,我们想要应用“反向”逻辑,基本上是说:“删除指定属性之外的所有属性”:为了应用此策略,我们可以使用 = 运算符。

结论

在本教程中,我们学习了如何使用“lsattr”和“chattr”实用程序在 Linux 上列出和管理文件属性,并且我们看到了一些属性的含义,如“i”(不可变)或“a”(仅附加) 。某些文件系统仅接受一组特定的属性:请查阅相应的手册以检查支持的属性。要了解有关属性的更多信息,通常您可以查看上述实用程序的文档。

©2015-2025 艾丽卡 support@alaica.com