( ) オプションを持つ多数の *nix コマンド( mkdir
, mkfifo
, )mknod
に技術的な利点/必要性がありますか?-m
--mode
私がこの質問をする理由は、私が知っている限りumask
(シェルコマンドとシステムコール)がシステム権限を制御するために必要なすべてを提供するからです。
たとえば、次のようにできます。
mkdir -m 700 "$my_dir"
..しかし簡単にすることができます:
old_umask=`umask` \
&& umask 0077 \
&& mkdir "$my_dir"
umask "$old_umask"
明らかに、電子はよりユーザーフレンドリーで便利であることがわかりますが(特にコマンドラインを使用する場合)、実際にはそうではありません。人為的な後者に比べて前者の利点。
また、基本的なsyscallレベルでこれらの柔軟性の利点を理解しています。呼び出しが必要open
なsem_open
場合、または最大600の権限がある場合は、公開syscallに転送してそこにあるS_IRUSR | S_IWUSR
syscallを忘れることができます。 、1つのシステムコールの往復を保存します(または呼び出しが現在のumaskを変更するumask
ため、umaskをリセットしたい場合は2つ)。私のコードはもっとシンプルでクリーンです。これらのコマンドの/オプションは次のようになるumask
ため、コマンドラインの例では機能しません。-m
--mode
持つそれにもかかわらず、呼び出しはumask
コマンドプロセスのumaskをクリアし、新しいファイルなどに設定する必要があるモード/権限ビットを保証します。 (たとえば、私のシェルのumaskがある場合、シェルから継承したumaskを0にするために内部的に最初に呼び出す場合にのみ期待どおりに動作します022
。)mkdir -m 777 /tmp/foo
umask
だから私が問題を考えたときに見逃していないことを確認したかったのは、umask
mk *コマンドの/オプションに依存せず、コマンドだけではできないことがありますか-m
?--mode
答え1
一人ではできないことがありますumask
:
上記の権限で一般ファイルを作成します
0666
。上記の権限を持つディレクトリを作成します
0777
。
だからあなたも必要chmod
です--mode
。セキュリティ上の理由からいいえ意図したよりも高い権限を持つオブジェクトを作成するには、chmod
何もumask
不十分です。極端な場合は、両方を使用する必要があり、結果としてumask
// mkdir
/ が多少見苦しい順序になりますchmod
。umask
(例:グループ一時ディレクトリ(01770
)を作成します。)
soは--mode
andに置き換えることができますが、そのうちの1つだけではありません。chmod
umask