更改符号链接的权限(学校练习)

更改符号链接的权限(学校练习)

我的学校要求我创建文件和目录,使 ls -l 输出看起来像这样(不考虑 XX):

在此输入图像描述

除了最后的符号链接之外,我已经做对了一切。我认为您无法更改符号链接的权限,该权限始终必须为 777,但正如您所看到的,我的学校明确要求配置为 755。

“chmod go-w test6”显然不起作用,那么我该怎么办?

我的操作系统是 Ubuntu 20.04。

答案1

听起来像是一个棘手的问题。在多个系统上,您可以使用fchmodat(2)带有标志的系统调用AT_SYMLINK_NOFOLLOW或使用lchmod(2)系统调用和带有选项chmod的命令来更改符号链接的权限-h,但不能在基于 Linux 的操作系统(例如 Ubuntu)上更改。

在许多允许更改这些权限的系统上,它们无论如何都会被忽略(macos 是一个例外 IIRC),因此更改它们没有什么意义。无论如何,我不希望有任何系统的权限w会很重要,因为无法修改符号链接(要更改符号链接的目标,您需要使用需要 write+ 的新目标重新创建它父目录的搜索权限 1)。

在这里,您可以作弊并重新定义ls为:

ls() (
  set -o pipefail
  command ls "$@" | sed 's/^lrwxrwxrwx/lrwxr-xr-x/'
)

(请记住, asls的 stdout 是一个管道,它可能会影响格式,因为大多数ls实现在到达终端设备时通常会给出不同的(更人性化的)输出)。


¹ 这是自己的情况,其中所有权符号链接可能很重要,因为如果t在目录中设置了(限制删除)位并且您不拥有该目录,那么您可以删除该符号链接,除非您拥有它。

相关内容