为什么 getfacl 从绝对路径名中删除前导 / ?

Sea*_*ans 12 linux acl filenames

我正在学习 CentOS/Red Hat 6 的 ACL;当我getfacl使用绝对路径运行时,我得到了输出:

getfacl:从绝对路径名中删除前导“/”

为什么需要这样做?在什么情况下需要使用-por--absolute-names开关?

我的 Wale Soyinka 和 Michael Jang 的书甚至没有提到这一点,我在手册页中没有看到任何线索,而且我似乎找不到任何直接解决此警告的网站。

Iva*_*hau 9

从手册页getfacl

-p, --absolute-names
       Do not strip leading slash characters (`/'). The  default  behavior
       is to strip leading slash characters.
Run Code Online (Sandbox Code Playgroud)

当您在不使用-pswitch 的情况下提供绝对路径时,会发出警告消息。

当给getfacl命令提供绝对路径时,输出是不同的。

不带-p开关:

$ getfacl /path/foo/bar
getfacl: Removing leading '/' from absolute path names
# file: path/foo/bar
[Output truncated...]
Run Code Online (Sandbox Code Playgroud)

请注意文件路径中的前导斜杠仅在使用-pswitch时显示。

$ getfacl -p /path/foo/bar
# file: /path/foo/bar
[Output truncated...]
Run Code Online (Sandbox Code Playgroud)

-p 当您通过管道传输输出以进行进一步处理时,保留前导斜杠很有用。

当给getfacl命令提供相对路径时,输出是相同的。

$ getfacl bar
# file: bar
[Output truncated...]
Run Code Online (Sandbox Code Playgroud)

没有变化:

$ getfacl -p bar
# file: bar
[Output truncated...]
Run Code Online (Sandbox Code Playgroud)

  • 这并没有回答为什么。为什么默认情况下会删除前导斜杠,这有什么帮助? (11认同)
  • 在其他发行版(例如 FreeBSD)中,此开关不存在。通过查看RHEL acl包的源码,似乎`--absolute-names`只处理输出字符串——“#file:”,而没有处理背后的逻辑。起初我猜这可能是一个安全功能。尽管如此,`setfacl` 中不存在该开关。我的最后一个假设是作者想模拟 `tar` 行为,尽管 `getfacl` 上的 `-p` 开关用法可能没用。 (2认同)