umask
*nix オペレーティング・システムでのコマンドの実際の用途は何ですか?
どのように機能し、どの用途に使用されますか?例えば
$ umask 022
以前は本当にありがとうございました。
答え1
umask
ほとんどのシェルに組み込まれたコマンドであり、システムコールへのインターフェースにすぎません。これについてのumask()
説明は、シェル文書にあります(システムコール文書またはシェル組み込みコマンド文書をman umask
指すことがあることに注意してください)。umask()
umask
ユーザーマスクは、ファイルが作成されたときにファイルに自動的に付与される権限を決定するプロセス(親プロセスから子プロセスに継承され、コマンド実行全体にわたって保持される)の属性です。
このumask
ユーティリティを使用すると、シェルプロセスのユーザーマスクを設定して、シェルセッションで実行されるコマンドで生成されたファイルの権限を制御できます。
すべてのシェルはumask
マスクを8進数で処理しますが、一部のシェル(すべてのPOSIXシェルを含む)ではforなどの記号で指定することもできますchmod
。
マスクは、権限のどのビットになるべきかを決定します。明らかファイルが生成されるとき。たとえば、0777が511または0b111_111_111の場合、すべての91ビットUnixファイル権限(3(読み取り、書き込み、実行))umask 777
のため、権限なしでファイルが生成されます。r
w
x
ユーザー、3はグループ、3はその他) が削除されます。
シンボル形式はどのビットいいえ削除されました。そうなるでしょumask 777
うumask u=,g=,o=
。
一般的に言えば、生成されたファイルがグローバルに書き込み可能(または)になることを望まないので、umaskに少なくともw
他のビットを含めたいと思います。o
umask 002
umask u=rwx,g=rwx,o=rx
少なくともユーザーのプライマリグループがプライベートグループ(他のユーザーと共有)でないシステムでは、グループビットも設定できますw
。g
umask 022
umask u=rwx,g=rx,o=rx
Aumask 077
またはumask u=rwx,g=,o=
あなたが作成したすべてのファイルがあなたのプライベートであることを確認してください(他の人がそのファイルにアクセスできない)。一時ファイルを生成するスクリプトでは、次のようにサブシェルでこれを見ることができます。
(umask 077; echo test > "$tmpfile")
umask
サーバービットを設定すると、u
最終的に開くことができないファイルが生成される可能性があるため、問題が発生する可能性があります。
ユーザーマスクが適用されていることに注意してください。上open()
アプリケーションまたはファイルcreat()
から要求された権限。 ()のときにこれを行うと、creat("file", 0666)
権限は最終的に()になります。アプリケーションは必要に応じて権限を呼び出すか、後で変更できます(そしてumaskはそれに影響を与えません)。umask
022
u=rwx,g=rx,o=rx
0644
u=rw,g=r,o=r
fchmod()
chmod()
umask
引数なしで8進形式で現在のユーザーマスクを報告します。umask -S
一部のシェルではシンボルとして報告されます。umask -p
あるいは、解釈された出力シェルコードはbash
同じfish
ユーザーマスクを設定します。
変更後、古いumaskを復元するために使用できます。
previous_umask=$(umask)
umask 077
# create some private files
umask "$previous_umask"
1 技術的に権限には 12 ビットがあり、そのうちの 3 つの追加権限ビットはファイル形式によって様々な目的で使用される特殊ビットであり、時には他の権限ビット (例: 実行ファイル用 setuid、setgid ビット、実行ファイル用t
ビット)と組み合わせて使用されます。ディレクトリ.. .).一部のシステムでは、open()
これらのビットが/で要求されたときに無視されます。creat()
アプリケーションで設定するとき(通常を渡した後)に含まれるのに十分な理由があります。システムコールはこれを無視します。chmod()
umask
umask()