piapia123
ja

Linux ファイル権限の変換

Web

処理はすべてブラウザ内で完結します。データは送信されません

入力
ファイルをここにドロップすると読み込めます
出力

権限の変更は日常作業ですが、3 つの表記はそれぞれ用途があり、互いに読めません:`755` は設定ファイルや Dockerfile に書くもの、`u+x,g-w,o=r` は `chmod` のコマンドラインで打つもの、`drwxr-xr-x` は `ls -l` が出力し、人がスクリーンショットで送ってくるものです。ここでは 3 つを相互に翻訳し、各ビットの意味を説明します。 3 つの特殊ビット(8 進数の先頭桁)は個別に解説し、立っているときだけ表示します:`4` setuid、`2` setgid、`1` sticky。`ls -l` では実行ビットの位置を借用して表示されるため `s` と `S` の 2 通りがあり、`S` は「特殊ビットは立っているが実行できない」を意味します —— 実機ではほぼ確実に設定ミスで、本ツールはそれを指摘します。

機能

  • 3 つの表記を相互変換:8 進数(755 / 0755 / 0o755)、シンボル表記(u+x,g-w,o=r)、ls -l の文字列(-rwxr-xr-x / drwxr-xr-x)
  • ビットごとの解説:所有者・グループ・その他がそれぞれ読み・書き・実行できるか
  • 3 つの特殊ビットの解説:setuid、setgid(ディレクトリではグループ継承)、sticky(ディレクトリでは所有者のみ削除可)
  • ⚠️ 大文字の S / T は単独で警告 —— 特殊ビットが立っているのに実行できない状態で、ほぼ確実に設定ミスです
  • umask から新規ファイル(666 & ~umask)とディレクトリ(777 & ~umask)の既定権限を算出
  • そのまま貼れる chmod コマンドも出力。入力がコマンド全体なら、パスと -R などのオプションをそのまま引き継ぎます
  • シンボル表記で who を省略した場合(+x など)は、umask を推測せず設定した基準権限から計算します
  • `g=u` のような「別のクラスをコピー元にする」指定に対応:`=` は設定前にいったんクリアし、同一コマンド内では左から右へ順に適用します(`u=x,g=u` と `g=u,u=x` は結果が異なります)
  • ⚠️ 判別できないときはどの文字か(何文字目・その文字・付近の文字列)まで示します。曖昧な「書式が違います」ではありません

使い方

  1. 変換したい権限を貼り付けます:8 進数・シンボル表記・ls -l の文字列のいずれでも可
  2. 必要なら「基準権限」(who を省略したシンボル表記で使用)と umask を変更します
  3. 結果に他の 2 つの表記、ビットごとの解説、chmod コマンドが表示されます

よくある質問

755 と 0755 は違うのですか?
同じです。先頭の `0` は 8 進数リテラルであることを示すだけで(C やシェルで 10 進数・16 進数と誤解されないようにするため)、意味に違いはありません。本ツールが常に 4 桁で出力するのは、2 つの書き方が違って見えないようにするためです。ただし 2 桁の `77` は拒否します:`077` の書き漏らしなのか `0077` なのか判別できず、両者は所有者とグループの 2 分類分も違うためです。
rwxr-xr-x と -rwxr-xr-x は何が違いますか?
前者は権限の 9 文字そのもので、後者は先頭に種類の文字が付きます:`-` は通常ファイル、`d` はディレクトリ、`l` はシンボリックリンクです。種類は権限の計算には関与しませんが、sticky ビットの読み方に影響します —— そのため両方を受け付け、出力では `d` を保持します。
setgid は実行ファイル用ではないのですか?
ファイルでは所有グループとして動作しますが、⚠️ ディレクトリでは意味が異なります:setgid を付けたディレクトリ内で新規作成されたものは、作成者の主グループではなくそのディレクトリのグループを継承します。共有ディレクトリはこの後者の動作に依存しており、忘れられがちなのはそちらです。
新規ファイルの権限が 644 にならないのはなぜですか?
新規ファイルは `666 & ~umask`、新規ディレクトリは `777 & ~umask` が既定です。ファイルが 666 から始まるのは、新規の通常ファイルが既定で実行可能であるべきではないためです。ディレクトリが 777 から始まるのは、実行ビットがないと中に入れないためです。umask 022 なら 644 と 755、umask 077 なら 600 と 700 になります。
u+x の u とは何ですか?省略するとどうなりますか?
`u` はファイルの所有者、`g` はグループ、`o` はその他、`a` は 3 つすべてです。who を省略した場合(`+x` のみ)、実際の `chmod` は umask に従って適用先を決めます —— しかし umask はプロセスの状態であって固定値ではありません。そこで本ツールは推測せず、上で設定した基準権限から計算し、その旨を明記します。
大文字の X と小文字の x は何が違いますか?
`x` は無条件に実行ビットを立て、`X` は「ディレクトリである」か「すでに誰かに実行ビットがある」場合にのみ立てます。`chmod -R a+X` が典型的な使い方で、ディレクトリには入れるようにしつつ、中のデータファイルを実行可能にしない、という意味になります。本ツールはディレクトリかどうかを知り得ないため、後者の条件で判定します。
`g=u` とは何ですか?
演算子の右側には「クラス」(`u`/`g`/`o`)を置くことができ、別のクラスの権限をコピーする意味になります:`g=u` は所有者の rwx 3 ビットをグループへコピーし、`u=g,o=g` のような組み合わせも可能です。⚠️ 間違えやすい点が 2 つあります:① `=` は設定前にいったんクリアするため、所有者に無いグループのビットは「OR」ではなく削除されます。② 同一コマンド内では左から右へ順に適用され、コピー元はその時点の値です —— したがって `u=x,g=u`(g は新しい u=1 を得る)と `g=u,u=x`(g は古い u を得る)は結果が異なります。特殊ビットはコピーされません。

関連ツール