はファイル生成マスク特定のシェルによって設定された値はumask
通常、オペレーティングシステム全体に固有のものですか、それともそのシェルに固有のものですか?
たとえば、Bashでファイル作成マスク(umaskのマスク/ビットマスク)を変更すると、Bashに対してのみ変更されるか、OSに存在できる他のシェル(Dash、ksh、zshなど)も次のように変更されますか?変える? (「一つの砲弾が他の砲弾に影響を与える場合があります」)。
答え1
umaskを理解するには、まずUnix / Linuxのプロセス構造を理解する必要があります。つまり、木のような構造を形成します。すべてのプロセスには、それを作成したプロセスである親プロセスが必要です。 (最初のプロセスを除くinit
)。各プロセスは、子プロセスと呼ばれる追加のプロセスを作成することも、作成しないこともあります。
各プロセスにはマスク属性があります。これはumaskコマンドを使用してクエリまたは設定したものです。
プロセスは親プロセスのマスクを継承します。その後、マスクを変更できます。たとえば、シェルから呼び出さumask()
ずに作成中のプログラムのマスクを変更するC関数があります。umask
子プロセスは親プロセスのマスクに影響を与えることはできません。したがって、プロセスのマスクを変更してもシステム全体には影響しません。将来のサブプロセスにのみ影響します。
シェルの目的は他のプロセスを作成して制御できることであるため、ほとんどumask
のシェルにはコマンドが組み込まれています。これはシェルには必要なく、umask
機能なしでデフォルトのシェルを作成できます。しかし、そのようなシェルは、システムのログインと管理に役立つ汎用シェルとは見なされません。
他のBashシェル(または他の目的のシェル)を作成できるBashなどのシェルを使用して、私が何を言っているのかを直接テストできます。
- 端末を開く
- コマンドを実行して
umask
現在の値を照会します。 - (または他のもの)を実行して
bash
サブシェルを作成する umask
子のマスク値を表示するには実行してください。- ランニングなど、お子様のマスクを別のものに設定してください。
umask 0000
umask
私は子供のマスクを再確認するために走った。- サブシェルの終了(実行
exit
または押すCtrl-d
) - 今度は親シェルに戻りました。
umask
マスクを確認するために走ってください。
便利な参考資料:
man 1 umask
man 2 umask
(これはC関数への参照を提供しますumask()
)man bash
(そして検索umask
)- https://en.wikipedia.org/wiki/Umask