Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 结合chmod和chgrp的Shell命令_Linux_Unix_System Calls_Chmod_Chgrp - Fatal编程技术网

Linux 结合chmod和chgrp的Shell命令

Linux 结合chmod和chgrp的Shell命令,linux,unix,system-calls,chmod,chgrp,Linux,Unix,System Calls,Chmod,Chgrp,对于chmod和chgrp,是否有一个组合变量,可以在单个系统调用中为每个文件设置权限和组?AFAIK,否 此外,由于文件访问模式和所有者/组信息是使用不同的系统调用设置的(请参见man2 chmod和man2 chown),我认为不可能实现这样的命令。。。至少在一个主流的类Unix系统上 (显然,可以修改GNU/Linux内核以添加一个组合的系统调用,但是使用系统调用的假设命令将不可移植。)没有这样的变体,因为两个操作chmod(2)和chown(2)是通过不同的系统调用实现的 逃脱chmod

对于
chmod
chgrp
,是否有一个组合变量,可以在单个系统调用中为每个文件设置权限和组?

AFAIK,否

此外,由于文件访问模式和所有者/组信息是使用不同的系统调用设置的(请参见
man2 chmod
man2 chown
),我认为不可能实现这样的命令。。。至少在一个主流的类Unix系统上


(显然,可以修改GNU/Linux内核以添加一个组合的系统调用,但是使用系统调用的假设命令将不可移植。)

没有这样的变体,因为两个操作
chmod(2)
chown(2)
是通过不同的系统调用实现的

逃脱
chmod
chown
由于安全问题,您可能正在寻找
chmod
chown
的这种变体。如果是这种情况,您可以使用以下策略:

  • 在目标文件上将模式标志剥离为非常保守的集(可能为空)
  • 更改目标文件的所有者和组
  • 为目标文件指定所需的模式标志
  • 这样可以避免与连续调用
    chmod
    chown
    chown
    chmod
    相关的潜在安全问题

    安装
    /
    打开
    技巧 同时唯一的系统调用设置模式标志和所有权信息可能是
    open(2)
    。因此,您可以使用一个进程模拟目标所有者以适当的模式打开文件。这可能就是
    install
    所做的,因此如果这是一个选项:

  • 重命名旧文件
  • 使用
    install
    命令将旧文件复制到具有所需所有权和访问模式信息的新文件中
  • 删除旧文件
  • 然而,这样做将打破硬链接。基于
    chown
    chmod
    的解决方案不存在该问题