答案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
在目录中设置了(限制删除)位并且您不拥有该目录,那么您可以删除该符号链接,除非您拥有它。