- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想创建一个带有权限位的文件:125 => --x-w-r-x。
所以umask值应该是=> 666-125 = 541
所以当我在下面写命令时;
umask 541
touch /tmp/newfile
ls -l /tmp/newfile
the result is : --w--w-rw-
为什么结果不是 --x-w-r-x ?
提前致谢...
最佳答案
普通文件(与目录或符号链接(symbolic link)相对)的默认起始位是 0666
。让我们将其分解为组件权限:
0
表示没有特殊权限(如setuid
(4), setgid
(2), or sticky
(1)) 已设置6
(或二进制的110
)意味着用户
得到r
(第一个1
) 和 w
(第二个 1
)但不是 x
(0
)默认6
与第一个 6
的含义相同,但对于 group
而不是 user
>6
与第一个 6
的含义相同,但对于 others
而不是 user
现在您想更改此默认值到 0125
:
0
表示同上1
(或二进制的001
)意味着用户
只得到x
但没有 r
或 w
2
(或二进制的010
)意味着组
只得到w
但没有 r
或 x
5
(或二进制的101
)表示others
得到r
和x
但没有 w
不幸的是,umask
允许的唯一操作是binary AND NOT
。它不允许整数减法。因此,由于您是从 0666 (000 110 110 110)
开始的,所以根本没有办法使用 AND NOT
来获得其中任何一个 0
s 变成 1
s.
使用 umask
最接近的是 --- -w- r--
或 0024
通过屏蔽掉 110 (6)
来自 user
默认值,100 (4)
来自 group
默认值,010 (2)
来自 others
默认值。然后你创建的每个新文件都将是
umask 642
touch file.txt
000 110 110 110 &~
000 110 100 010
--- --- --- ---
000 000 010 100
0 0 2 4 --- -w- r-- file.txt
如果您希望新文件也具有 x
权限,则必须在第二步中添加它们(或使用 touch
以外的其他方式),例如: chmod u+x,o+x file.txt
.
::编辑::您经常看到奇数 umask
的原因是因为默认的 directory 权限是 0777
,所以用户可能想要指定发生了什么x
权限。但无论您在 umask
中指定什么 x
位,它都不会影响文件权限:
umask 0027
touch file.txt
000 110 110 110 &~
000 000 010 111
--- --- --- ---
000 110 100 000
0 6 4 0 rw- r-- --- file.txt
mkdir directory
000 111 111 111 &~
000 000 010 111
--- --- --- ---
000 111 101 000
0 7 5 0 rwx r-x --- directory/
因此您可以在创建新目录时在umask
中指定x
掩码,但它们不会影响文件创建。
关于linux - 为什么 umask 结果与权限位不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20711439/
在大多数地方,权限被定义为格式为0777 的八进制数。但是 UNIX 的 umask 命令(因此 os.umask())需要 0o000 来生成 0o777 的权限位,并且0o022 在我的理解中等于
经过一些挖掘和帮助后 from other people ,我发现我在 git 中的 umask 设置有问题。我想要实现的是在我的服务器上 check out 的任何 git repo,umask 设
如何通过 ssh 引导在远程机器上启动的进程使用某个 umask 运行?我希望这也适用于作为标准 Capistrano 配方的一部分运行的命令,所以我不能只对命令的“umask”部分进行显式调用。 似
我正在编写一个函数来将 D 应用程序转换为守护程序。我打算分享它(虽然我不知道在哪里。有什么地方吗,所以也许它会进入火卫一。无论如何) 一切都很好。我正在使用 core.sys.posix.unist
在处理可执行文件或目录的权限时,我了解 umask 的工作原理,至少是基本的工作原理。但是,当谈到 umask 如何将其规则应用于文本文件时,我感到很纠结。 例如,考虑 umask 037。在新创建的
我是 ionic 框架的新手。今天我尝试使用 ionic 创建一个新项目。当我尝试使用此命令 ionic platform add android 将 android 平台添加到我的应用程序时,出现以
在 Ubuntu Linux 中,更改系统的 umask(例如通过在程序中调用 umask())是否会影响系统上消息队列等 IPC 设施的创建和使用? 最佳答案 来自 the man page The
我正在阅读一些源代码,我在主例程的最开始发现了这条语句: umask(077); 这可能是什么原因? 手册页 (man 2 umask) 指出: umask -- set file creation
umask(0); fd = open("/dev/null", O_RDWR); 这是man 2 umask: umask() sets the calling process’s file mod
我有一项服务是 Python REST API。此服务在内部使用执行一些脚本, subprocess.Popen(cmd, shell=False, preexec_fn=os.setpgrp, en
我对 Git 有疑问。我在 Google 和 StackOverflow 中搜索了解决方案,但没有任何帮助。 问题是每次 git 更新工作目录中的某些文件时(当我 checkout 分支或 merge
如何检查当前正在运行的程序的 umask? [更新:另一个进程,不是当前进程。] 最佳答案 您可以将 gdb 附加到正在运行的进程,然后在调试器中调用 umask: (gdb) attach ...
我在 Centos 6 上有一个由 jsvc 托管的应用程序。随之创建了许多日志。我的问题是 jsvc 正在创建具有 077 权限的日志,除了 root 之外任何人都无法访问这些日志。任何人都应该可以
我有一个 umask 0002 使用 umask -S 它返回 u=rwx,g=rwx,o=rx. 我如何找到现在根据掩码设置权限的所有文件和目录? 目录为 777 - mask 和文件为 666 -
我有一个名为 MAIN_OUTPUT 的目录。我有一个 JAVA 应用程序,它将在 MAIN_OUTPUT 下创建一些文件和目录。提交 java 应用程序的用户始终不同。现在的要求是将这个特定目录(M
我有一个写入日志文件的程序。当然必须创建这个日志文件和文件夹,我的程序必须以 root 身份运行,所以它总是创建具有 rw-------- 权限的文件夹,并且不能以普通用户身份读取和写入。我不希望这样
我注意到,如果您中断 rsync,一些新目录仍然具有权限 drwx------,尽管当前的 umask 是 0022. 我启动了 gdb 并试图在调用 mkdir() 之前显式调用 umask(0),
具体来说,我需要给文件 rw----r--和目录 rwx--xr-x 最佳答案 使用 umask 062。 这是有效的,因为 umask 仅取消设置位,并且通常不会在创建文件时首先设置可执行位: $
umask 似乎在各种文件(centos)中设置为: /etc/profile /etc/profile.d/umask.sh /etc/login.defs ... 这个的优先顺序是什么? 此外,当
在 Django 应用程序中,我创建了一个临时文件。此临时文件是使用“0700”权限创建的。但是,我需要在不保留临时文件(0700)权限的情况下重命名该临时文件,但希望该文件获得用户(umask)的权
我是一名优秀的程序员,十分优秀!