quo*_*ian 42 shell permissions files
创建目录时,mkdir -m <mode> <dir>提供使用给定模式/权限集(原子地)创建一个或多个目录。
在命令行上是否有创建文件的等价物?
类似于:
open("file", O_WRONLY | O_APPEND | O_CREAT, 0777);
Run Code Online (Sandbox Code Playgroud)
使用touch后面是chmod我唯一的选择吗?
编辑:在尝试了 teppic 的使用建议后install,我运行了它strace以查看它与原子的接近程度。答案是,不是很:
$ strace install -m 777 /dev/null newfile
...
open("newfile", O_WRONLY|O_CREAT|O_EXCL, 0666) = 4
fstat(4, {st_mode=S_IFREG|0666, st_size=0, ...}) = 0
...
fchmod(4, 0600) = 0
close(4) = 0
...
chmod("newfile", 0777) = 0
...
Run Code Online (Sandbox Code Playgroud)
尽管如此,这是一个单一的 shell 命令,我以前不知道。
tep*_*pic 54
您可以将install命令(GNU coreutils 的一部分)与虚拟文件一起使用,例如
install -b -m 755 /dev/null newfile
Run Code Online (Sandbox Code Playgroud)
如果该-b选项newfile已存在,则会备份该选项。您也可以使用此命令来设置所有者。
Gil*_*il' 24
touch如果文件不存在,则始终创建该文件,始终遵循符号链接,并始终使文件不可执行。您可以通过umask决定读取和写入位。
(umask 077; touch file) # creates a 600 (rw-------) file
(umask 002; touch file) # creates a 664 (rw-rw-r--) file
Run Code Online (Sandbox Code Playgroud)
“安全”的原子文件创建(尤其是使用O_NOFOLLOW)是传统的 shell 工具无法实现的。您可以sysopen在 perl 中使用。如果您有 BSD 启发的mktemp实用程序,它会自动创建一个文件O_NOFOLLOW;chmod如果 600 的默认模式不是正确的模式,则必须在事后调用。