Shell
可以使用在命令行上設置的權限來創建文件嗎?
創建目錄時,
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