AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 790437
Accepted
Enlico
Enlico
Asked: 2025-02-01 21:15:57 +0800 CST2025-02-01 21:15:57 +0800 CST 2025-02-01 21:15:57 +0800 CST

执行 cp /path/to/a /p/t/b 后,根据 /path/to/a 和所有目录的文件权限,确定 b 的文件权限的规则是什么?

  • 772

在O'Reilly 编写的《Classic Shell Scripting》中,Arnold Robbins 和 Nelson HF Beebe 编写了以下示例:

$ umask
023
$ rm -f foo
$ cp /bin/pwd foo
$ ls -l /bin/pwd foo
-rwxr-xr-x   1 root    root     10428 2001-07-23 10:23 /bin/pwd
-rwxr-xr--   1 jones   devel    10428 2002-09-21 16:37 foo

生成的权限字符串rwxr-xr--反映了权限的丢失:组丢失了写访问权限,其他丢失了写和执行访问权限。

现在,023开头的输出告诉我,在当前 shell 中,新创建的文件的访问权限将被w删除g,并且wx已被删除o,因此,虽然我理解“其他文件丢失执行访问权限”,但我没有得到“组丢失写访问权限”或“其他文件丢失写访问权限”,因为它们一开始都没有。

您认为这只是该评论措辞不准确,还是我遗漏了什么?

此外,我在我的系统上尝试过,但结果让我更加困惑:

$ umask 
0023
$ cp /bin/pwd ~/foo
$ ls -l /bin/pwd ~/foo 
-rwxr-xr-x 1 root   root   35072 Jan 18 19:17 /bin/pwd*
-rw-r--r-- 1 myself myself 35072 Feb  1 12:54 /home/myself/foo

现在, 的输出应该意味着0023删除和(其中实际上只有存在,因此在这种情况下它是唯一被删除的),但相反,看起来和的权限也已被删除。wgwxoxoxug

这是为什么?

在哪里可以找到所有规则来决定当我创建和复制文件时会发生什么情况(就权限而言)?

linux
  • 1 1 个回答
  • 40 Views

1 个回答

  • Voted
  1. Best Answer
    ilkkachu
    2025-02-02T00:52:06+08:002025-02-02T00:52:06+08:00

    我尝试过(源文件权限为-rwxr-xr-x,umask 设置为023)cp在 macOS 上以及在 Ubuntu 上同时使用 GNU coreutilscp和 Busybox cp。它们都创建了一个具有权限的副本-rwxr-xr--,即复制原始文件的权限,但使用 umask 进行了修改。

    这似乎就是 POSIX 文本所要求的,它说:

    对于每个source_file,应采取以下步骤:

    3. 如果source_file是常规文件类型,则应采取以下步骤:

    b. 如果dest_file不存在,则应通过执行与open()POSIX.1-2024 系统接口卷中定义的函数等效的操作来获取文件描述符,该函数使用dest_file作为路径参数,并使用 O_WRONLY 和 O_CREAT 的按位或作为oflag参数来调用。source_file的文件权限位应为模式参数。

    最后一部分读起来有点别扭,但它基本上是说将open()使用源文件的文件权限位作为“模式”参数(或通过某些等效方法)来创建新文件。

    “mode” 参数中给出的位由 umask 修改以获取最终权限。


    所以是的,在你的第一种情况下,确实似乎没有丢失组写入位,除非他们考虑从0777那里开始并从中删除 umask。书籍有错误。

    在第二种情况下,嗯,看起来你的cp不符合 POSIX。不过,这有点令人惊讶,所以也许还有其他事情发生?例如,如果目标文件foo在复制之前就存在,则其权限位将保持原样。(它只会用 打开O_TRUNC。这是文本中的 3. a. ii。)

    无论如何,包含目录的权限都不会影响它。

    • 3

相关问题

  • 有没有办法让 ls 只显示某些目录的隐藏文件?

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve