Shell

可以使用在命令行上設置的權限來創建文件嗎?

  • March 17, 2020

創建目錄時,mkdir -m <mode> <dir>提供使用給定模式/權限集(原子地)創建一個或多個目錄。

在命令行上創建文件是否有等價物?

類似於:

open("file", O_WRONLY | O_APPEND | O_CREAT, 0777);

是使用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
...

儘管如此,它還是一個單一的 shell 命令,而且我以前不知道。

您可以將install命令(GNU coreutils 的一部分)與虛擬文件一起使用,例如

install -b -m 755 /dev/null newfile

如果該選項已存在,則會-b備份該選項。newfile您也可以使用此命令設置所有者。

touch如果文件不存在,則始終創建文件,始終遵循符號連結,並始終使文件不可執行。您可以通過umask決定讀取和寫入位。

(umask 077; touch file)  # creates a 600 (rw-------) file
(umask 002; touch file)  # creates a 664 (rw-rw-r--) file

“安全”的原子文件創建(特別是使用O_NOFOLLOW)無法使用傳統的 shell 工具。你可以sysopen在 perl 中使用。如果你有受 BSD 啟發的實用程序,它會使用;mktemp原子地創建一個文件。如果預設模式 600 不正確,O_NOFOLLOW您將不得不在之後呼叫。chmod

引用自:https://unix.stackexchange.com/questions/47178