前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【译】如何使用文件标志修改 macOS 中的文件行为

【译】如何使用文件标志修改 macOS 中的文件行为

作者头像
AlphaHinex
发布2024-09-06 18:06:29
1170
发布2024-09-06 18:06:29
举报
文章被收录于专栏:周拱壹卒
  • 原文地址:https://www.maketecheasier.com/use-file-flags-modify-file-behavior-macos/
  • 原文作者:Alexander Fox[1]

在 macOS 中,可以使用文件标志(flags)来限制文件被修改的方式。它们与文件权限不同,并且与 chownchmod 等命令并行运行。您将使用 chflags 来更改标志,以及使用 ls 来查看标志。Unix 运行一个类似的系统,但是选项更多,称为“属性”,而不是标志。

在 macOS 上查看已设置的标志

在终端中,您可以使用 ls 命令来查看任何已设置的标志。

代码语言:javascript
复制
$ ls -lO 
drwx------@ 88  alexander staff hidden 2992 Jan 25 14:01 Library

如果文件或文件夹没有设置标志,则会显示一个短横线。

代码语言:javascript
复制
$ ls -lO ~/Library/Caches
drwx------+ 234 alexander staff   -    7956 Jan 25 13:03 Caches

已设置的标志可以使用它们的相反形式来删除,就如下面描述的那样。

在 macOS 上设置和清除标志

set flag

文件标志通常以问题形式出现。因为它们会设置额外的权限,且很容易被忽略。您是否发现自己有一个无法删除的文件,无论您的用户权限有多高?您可能需要清除一个或两个标志。

可以在 macOS 上设置的标志如下所示。这是可用选项的完整列表,以及它们的功能说明。大多数标志只能由文件的所有者或超级用户设置;sappndschg 只能由超级用户设置,因为它们是系统级标志。只有隐藏标志可以在不升级权限的情况下设置。

在 macOS 上设置标志

在 macOS 上设置标志时,请使用以下命令。递归标志 -R 可用于目录级操作:

代码语言:javascript
复制
$ sudo chflags -R [标志] /usr/bin/local
$ sudo chflags [标志] /usr/bin/local/mnt.sh
$ chflags -R hidden ~/Desktop

将设置适当的标志。例如,以下命令将设置 nodump 标志:

代码语言:javascript
复制
sudo chflags nodump /usr/bin/local/tty.sh

每个 chflags 命令只能设置或删除一个标志。

  • opaque 将文件夹设置为在通过联合挂载[2]查看时呈现为不透明的方式,这是一种同时查看多个目录的老式方法。
  • nodump 防止在使用 dump 命令备份系统时转储文件或文件夹。
  • sappnd, sappend 设置系统追加标志,允许向文件添加内容,但不允许修改或删除。要删除此标志,需要进入单用户模式。
  • schg, schange, simmutable 设置系统不可变标志,阻止任何权限级别的用户对文件进行更改。要删除此标志,需要进入单用户模式。
  • uappnd, uappend 设置用户追加标志。文件所有者可以设置此标志,并且可以在不升级权限的情况下取消设置。由于它锁定文件,在较低的安全级别下使用 sappndschg,它被更频繁地使用。
  • uchg, uchange, uimmutable 设置用户不可变标志,它与系统不可变标志的关系,跟 uappnd 标志与 sappnd 的关系相同。
  • hidden 设置隐藏标志。这将在 Finder GUI 和 ls 命令中隐藏该项。

译注:除上述选项外,还有 arch, archived 用于设置存档标志(仅超级用户)。完整选项列表可见 man chflags

在 macOS 上清除标志

要清除给定的标志,请设置其相反标志。在大多数情况下,这意味着在命令前加上“no”。对于 nodump,使用 dump 标志来清除,如下所示:

代码语言:javascript
复制
sudo chflags dump /usr/bin/local/oty.sh

更多标准选项可以使用“no”前缀进行反转,如下所示:

代码语言:javascript
复制
sudo chflags nosappnd /usr/bin/local/oty.sh

与 chmod 一样,递归标志也可用:

代码语言:javascript
复制
chflags -R nohidden ~/Desktop

清除标志后,您将可以按预期更改文件的所有权和权限。

在 Unix 上使用属性

attributes

Unix 在后台运行类似的系统,但是使用不同的命令处理。在最流行的 Linux 平台上,您将使用 chattrlsattr 来更改和查看“属性”,这也是文件标志在大多数其他 Unix 系统中的体现。

可以使用 lsattr 查看属性:

代码语言:javascript
复制
lsattr /path/to/file.txt

更改属性依赖于一组首字母缩写,并在 chattr man 页面[3] 中列出:

“The letters ‘acdeijstuADST’ select the new attributes for the files: append only (a), compressed (c), no dump (d), extent format (e), immutable (i), data journalling (j), secure deletion (s), no tail-merging (t), undeletable (u), no atime updates (A), synchronous directory updates (D), synchronous updates (S), and top of directory hierarchy (T).”

“字母 ‘acdeijstuADST’ 选择文件的新属性:追加(a),压缩(c),不转储(d),扩展格式(e),不可变(i),数据日志(j),安全删除(s),不合并尾部(t),不可删除(u),不更新访问时间(A),同步目录更新(D),同步更新(S)和目录层次结构顶部(T)。”

命令如下所示:

代码语言:javascript
复制
chattr +s /file/name.txt

这将为指定路径设置安全删除属性。

总结

在限制谁可以更改文件时,标志非常有用。通过锁定文件,您可以在文件系统级别防止篡改或意外编辑。除非升级为 root 或文件所有者,否则无法更改这些权限,因此它们具有适度的安全性。

参考资料

[1]Alexander Fox: https://www.maketecheasier.com/author/alexfox/

[2]联合挂载: https://en.wikipedia.org/wiki/Union_mount

[3]chattr man 页面: https://linux.die.net/man/1/chattr

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-08-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 周拱壹卒 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在 macOS 上查看已设置的标志
  • 在 macOS 上设置和清除标志
    • 在 macOS 上设置标志
      • 在 macOS 上清除标志
      • 在 Unix 上使用属性
      • 总结
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档