値0666を適用すると、Umaskがファイルに奇妙な結果を設定する

値0666を適用すると、Umaskがファイルに奇妙な結果を設定する

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.

関連情報