Chmod

將權限重置為預設值

  • May 25, 2021

如何根據遮罩將權限重置為預設值,以便在剛剛創建文件時設置權限

我想要實現的範例: umask設置為 0022 所以

touch file
mkdir directory

文件的權限現在是rw-r--r--

目錄的權限現在是rwxr-xr-x

chmod 777 file
chmod 777 directory

文件的權限現在是rwxrwxrwx

目錄的權限現在是rwxrwxrwx

有沒有辦法將 perms 重置為預設值,以便文件rw-r--r--和目錄rwxr-xr-x使用chmod

使用減法僅對某些 umask 值是正確的 - 最好使用,例如在 PSkocik 的答案中,或者(或對於目錄)應用標準指定的 umask,正如 ilkkachu 在評論中指出的那樣*mode* & ~*umask*``chmod =rw``chmod =rwx


在某些情況下,您只需umask0666文件和0777目錄中減去即可獲得預設權限:

$ printf "%04d\n" "$((0777 - $(umask)))"
0755
$ printf "%04d\n" "$((0666 - $(umask)))"
0644

因此,您可以申請chmod

chmod $((0666 - $(umask))) file
chmod $((0777 - $(umask))) directory

在 bash 中,您必須使用printf以八進制強制輸出:

$ printf "%04d\n" "$((0777 - $(umask)))"
0493
$ printf "%04o\n" "$((0777 - $(umask)))"
0755

另一種方法是創建一個新文件和目錄,並將它們用作參考:

touch file2
mkdir directory2 
chmod --reference=directory2 directory
chmod --reference=file2 file

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