特定のシェルのumaskによって設定されたファイル生成マスクは通常、オペレーティングシステム全体に固有のものですか、それともそのシェルに固有のものですか?

特定のシェルのumaskによって設定されたファイル生成マスクは通常、オペレーティングシステム全体に固有のものですか、それともそのシェルに固有のものですか?

ファイル生成マスク特定のシェルによって設定された値はumask通常、オペレーティングシステム全体に固有のものですか、それともそのシェルに固有のものですか?

たとえば、Bashでファイル作成マスク(umaskのマスク/ビットマスク)を変更すると、Bashに対してのみ変更されるか、OSに存在できる他のシェル(Dash、ksh、zshなど)も次のように変更されますか?変える? (「一つの砲弾が他の砲弾に影響を与える場合があります」)。

ベストアンサー1

umaskを理解するには、まずUnix / Linuxのプロセス構造を理解する必要があります。つまり、木のような構造を形成します。すべてのプロセスには、それを作成したプロセスである親プロセスが必要です。 (最初のプロセスを除くinit)。各プロセスは、子プロセスと呼ばれる追加のプロセスを作成することも、作成しないこともあります。

各プロセスにはマスク属性があります。これはumaskコマンドを使用してクエリまたは設定したものです。

プロセスは親プロセスのマスクを継承します。その後、マスクを変更できます。たとえば、シェルから呼び出さumask()ずに作成中のプログラムのマスクを変更するC関数があります。umask

子プロセスは親プロセスのマスクに影響を与えることはできません。したがって、プロセスのマスクを変更してもシステム全体には影響しません。将来のサブプロセスにのみ影響します。

シェルの目的は他のプロセスを作成して制御できることであるため、ほとんどumaskのシェルにはコマンドが組み込まれています。これはシェルには必要なく、umask機能なしでデフォルトのシェルを作成できます。しかし、そのようなシェルは、システムのログインと管理に役立つ汎用シェルとは見なされません。

他のBashシェル(または他の目的のシェル)を作成できるBashなどのシェルを使用して、私が何を言っているのかを直接テストできます。

  1. 端末を開く
  2. コマンドを実行してumask現在の値を照会します。
  3. (または他のもの)を実行してbashサブシェルを作成する
  4. umask子のマスク値を表示するには実行してください。
  5. ランニングなど、お子様のマスクを別のものに設定してください。umask 0000
  6. umask私は子供のマスクを再確認するために走った。
  7. サブシェルの終了(実行exitまたは押すCtrl-d
  8. 今度は親シェルに戻りました。umaskマスクを確認するために走ってください。

便利な参考資料:

おすすめ記事