umaskは値を適用したときに奇妙な結果を表示します:0666
umask値を1つでも適用すると期待どおりに機能しますが、0666を適用するとディレクトリは正しい権限値を取得しますが、ファイルは奇妙な値を取得します。
$ mkdir demo
$ cd demo
$ umask 0666 ../demo
$ mkdir d1 && touch f1
$ umask 0333 ../demo
$ mkdir d2 && touch f2
$ ls -l
drwxrwxr-x 4 riajul riajul 4096 Mar 27 17:33 ./
drwxr-xr-x 4 riajul riajul 4096 Mar 27 17:30 ../
d--x--x--x 2 riajul riajul 4096 Mar 27 17:32 d1/
dr--r--r-- 2 riajul riajul 4096 Mar 27 17:33 d2/
---------- 1 riajul riajul 0 Mar 27 17:32 f1
-r--r--r-- 1 riajul riajul 0 Mar 27 17:33 f2
f1がd1とは異なる権限を持っているのはなぜですか?
例: イメージ
答え1
umaskはマスクです、ファイル権限に適用されます。touch
デフォルトでは、権限が666のファイルが作成されます。;マスク0666を使用すると、これらすべての権限ビットがマスクされ、権限ビットが設定されていないファイルになります。
umask は特定のディレクトリに設定されず、プロセスごとに管理され、プロセスの開始時に親プロセスから継承されます。umask 0666
またはを実行すると、umask 0333
現在のシェルのumaskが指定された値に設定され、追加の引数は無視されます。
答え2
umask
若干の混乱が生じたため、一部の文書を読んだ後、明確なアイデアを得ました。
umask: [ u => ユーザー ]
- ファイルまたはディレクトリを作成すると、これらのファイルにはいくつかの基本的な権限が与えられます。
- マスクは写真編集ツールと同じように機能します。権限を設定するのではなく、与えられた権限を削除します。
デフォルト権限 = 事前定義された初期権限 - umask_permissions
事前定義された権限は固定されており、変更することはできません。
- ディレクトリ:777
- ファイル:666
ユーザーのデフォルトのumask権限:
- rootユーザー:0022
- 一般ユーザー:0002
したがって、デフォルトのumask権限を変更せずに、次のことを行います。
+---------------------------------------------------+
| User | Directory | File |
|---------------+-----------------------+-----------|
| |
| <user> | 777 - x => y | 666 - x => y |
| root | 777 - 022 => 755 | 666 - 022 => 644 |
| normal | 777 - 002 => 775 | 666 - 002 => 664 |
| |
| |
| NB: 1st bit (0) of umask values: not effect |
| permission so it ignored from calculation. |
| |
| |
+---------------------------------------------------+
Umask権限の変更は2種類あります。
- 一時:
umask
コマンドを使用してシェルを閉じ、デフォルト値にリセットします。 - 永久: UMASK 値を次の位置に設定:
- ユーザーレベル:
~/.profile
または.bashrc
- グローバル:
/etc/profile
、、、/etc/bashrc
または/etc/login.defs
- ユーザーレベル:
注:umask
特定のディレクトリではなく、ユーザーから権限を差し引いてください。
- umask: 作成前に権限を設定します。
- chmod:作成後に権限を変更します。
$ umask --help
-S : makes the output symbolic; otherwise an octal number is output
-p : if MODE is omitted, output in a form that may be reused as input
$ umask # Show umask of user
$ umask -S # Show umask of user as symbol instead of number
$ umask 0022 # Set Umask.