umask コマンドの目的は何ですか?

umask コマンドの目的は何ですか?

umask*nix OSのコマンドは実際何のためにあるのでしょうか?
その動作メカニズムと有用性はどうなっているのでしょうか?例:

$ umask 022

ありがとうございます

答え1

umaskは、ほとんどのシェルの組み込みコマンドであり、umask()システム コールへのインターフェイスに過ぎません。その説明は、シェルのドキュメントに記載されています (ただし、システム コールのドキュメントや、使用しているシェル以外の組み込みコマンドのman umaskドキュメントを参照するように指示される場合があることに注意してください)。umask()umask

ユーザー マスクは、プロセス属性 (親から子に継承され、コマンド実行時に保持されます) であり、作成時にファイルにデフォルトで自動的に付与される権限を決定します。

このumaskユーティリティを使用すると、シェル プロセスのユーザー マスクを設定して、シェル セッション内で実行されるコマンドによって作成されるファイルのアクセス許可を制御できます。

すべてのシェルのはumaskマスクを 8 進数として受け取りますが、すべての POSIX シェルを含む一部のシェルでは、 のように記号形式で指定することもできますchmod

マスクは、権限のどのビットを有効にするかを決定します。クリアファイルが作成されるときに、例えば、0777が511または0b111_111_111の場合、Unixファイル権限の9¹ビットすべて(3(読み取り、書き込み、および実行)の場合)umask 777が権限なしでファイルが作成されます。rwxユーザー、3つグループ、3つ他の)がクリアされます。

記号形式はどのビットがないクリアされます。 もumask 777同様ですumask u=,g=,o=

一般的に、作成するファイルを誰でも書き込み可能 (または)にしたくないので、umask に少なくともthersw用のビットを含める必要があります。oumask 002umask u=rwx,g=rwx,o=rx

少なくとも、ユーザーのプライマリ グループが個人のグループではない (他のユーザーと共有されている) システムでは、 roupwのビットも設定する必要があります。または。gumask 022umask u=rwx,g=rx,o=rx

またははumask 077umask u=rwx,g=,o=作成したすべてのファイルが自分専用であることを保証します (他のユーザーはアクセスできません)。これは、一時ファイルを作成するスクリプトでよく見られ、サブシェルで次のように表示されることもあります。

(umask 077; echo test > "$tmpfile")

umaskサーバーにビットを設定するとu、自分でも開けないファイルが作成されてしまう可能性があるため、問題が発生する可能性があります。

ユーザーマスクが適用されていることに注意してください上にopen()アプリケーションがまたはcreat()ファイルをアクセスするときに要求する権限。 が( )のcreat("file", 0666)間にアクセスすると、権限は( )になります。アプリケーションは、その後もまたは を呼び出して、必要に応じて権限を変更できます (umask はここでは影響しません)。umask022u=rwx,g=rx,o=rx0644u=rw,g=r,o=rfchmod()chmod()

umask引数なしの場合、現在のユーザー マスクを 8 進形式で報告します。umask -S一部のシェルでは、シンボル形式で報告します。またはumask -pでは、一度解釈されると、同じユーザー マスクを設定するシェル コードを出力します。bashfish

これを使用して、変更後に以前の umask を復元できます。

previous_umask=$(umask)
umask 077
# create some private files
umask "$previous_umask"

¹ 技術的には、パーミッションには 12 ビットあり、そのうち 3 ビットは特別なビットで、ファイルの種類に応じてさまざまな目的に使用され、他のパーミッション ビット (実行可能ファイルの setuid ビット、setgid ビット、tディレクトリのビットなど) と組み合わされることもあります。一部のシステムでは、これらのビットはopen()/で要求されたときに無視されcreat()、いずれにせよアプリケーションによって (通常は後からではなく) 設定される場合はchmod()、それには正当な理由があるため、これらを に含めることは一般的に有用ではなくumaskumask()システム コールはいずれにしてもこれらを無視します。

関連情報