Joh*_*nPc 8 permissions symlink
我有一个问题:我需要将符号链接的权限从 777 更改为 755,但我不知道该怎么做。我试过使用该chmod
命令,但它不起作用。我想要
lrwxrwxrwx 1 frosu 2016_cluj 5 Jul 4 13:53 test6 -> test0
Run Code Online (Sandbox Code Playgroud)
到
lrwxr-xr-x 1 frosu 2016_cluj 5 Jul 4 13:53 test6 -> test0
Run Code Online (Sandbox Code Playgroud)
Tho*_*key 16
有些系统支持更改符号链接的权限,有些则不支持。
-h
)
-h
如果文件是符号链接,请更改链接本身的模式,而不是链接指向的文件。
chmod
从不改变符号链接的权限;chmod 系统调用无法更改其权限。这不是问题,因为符号链接的权限从未使用过。但是,对于命令行上列出的每个符号链接,chmod 会更改指向文件的权限。相比之下,chmod 会忽略递归目录遍历过程中遇到的符号链接。
由于功能不同,POSIX没有提到这种可能性。
从评论中,有人建议最近对 GNU coreutils 的更改提供了该-h
选项。目前,它没有出现在chmod的源代码中:
而 ((c = getopt_long (argc, argv, ("Rcfvr::w::x::X::s::t::u::g::o::a::,::+::=::" "0::1::2::3::4::5::6::7::"), long_options, NULL))
并long_options
有这个:
static struct option const long_options[] =
{
{"changes", no_argument, NULL, 'c'},
{"recursive", no_argument, NULL, 'R'},
{"no-preserve-root", no_argument, NULL, NO_PRESERVE_ROOT},
{"preserve-root", no_argument, NULL, PRESERVE_ROOT},
{"quiet", no_argument, NULL, 'f'},
{"reference", required_argument, NULL, REFERENCE_FILE_OPTION},
{"silent", no_argument, NULL, 'f'},
{"verbose", no_argument, NULL, 'v'},
{GETOPT_HELP_OPTION_DECL},
{GETOPT_VERSION_OPTION_DECL},
{NULL, 0, NULL, 0}
};
Run Code Online (Sandbox Code Playgroud)
权限设置为chmod
. 所有权设置为chown
。GNU coreutils(如 BSD)支持改变符号链接所有权的能力。这是一项不同的功能,因为符号链接的所有权与是否可以修改链接的内容(并将其指向不同的目标)有关。同样,这是作为 BSD 功能(OSX、FreeBSD等)开始的,Linux(和Solaris等)也支持该功能。 POSIX 提到了这个特性:
-h
对于命名符号链接类型文件的每个文件操作数,chown 应尝试设置符号链接的用户 ID。如果指定了组 ID,对于命名符号链接类型文件的每个文件操作数,chown 应尝试设置符号链接的组 ID。
命令行工具(和 shell 脚本)到此为止。但是,您可以使用POSIX 的一个功能编写自己的实用程序,该功能在该chmod
实用程序的讨论中未提及:
int chmod(const char *path, mode_t mode);
int fchmodat(int fd, const char *path, mode_t mode, int flag);
后一个函数添加了一个标志参数,其描述如下:
flag 的值由以下列表中的标志的按位包含 OR 构造,在 中定义
<fcntl.h>
:
AT_SYMLINK_NOFOLLOW
如果路径命名一个符号链接,那么符号链接的模式就会改变。
也就是说,目的fchmodat
是提供您询问的功能。但是命令行chmod
实用程序(到目前为止)仅在chmod
(没有此功能)方面进行了记录。
fchmodat
顺便说一句,十年前,Red Hat 和 GNU 开发人员采用了 Solaris 的一个文档不足的功能,并且他们建议进行标准化:
根据The Linux Programming Interface,自 2.6.16 起,Linux 支持AT_SYMLINK_NOFOLLOW
以下调用:faccessat
, fchownat
, fstatat
, utimensat
, 并linkat
在 2.6.18 中实现(两者都相当“旧”:2006,据 OSNews 称)。
该功能是否对您有用,取决于您使用的系统。
归档时间: |
|
查看次数: |
13401 次 |
最近记录: |