web-dev-qa-db-ja.com

gitの6バイトのファイル許可。どういう意味ですか?

git commitコマンドを実行すると、次の応答が返されました。

7 files changed, 93 insertions(+), 15 deletions(-)
mode change 100644 => 100755 assets/internal/fonts/icomoon.svg
mode change 100644 => 100755 assets/internal/fonts/icomoon.ttf
mode change 100644 => 100755 assets/internal/fonts/icomoon.woff

私はファイルがユーザー/グループ/その他のrwx権限を持つことができることを知っており、それらは「644」や「755」のように3バイトで表すことができます。しかし、なぜgitはここで6バイトを表示しているのですか?

次の記事を読みましたが、答えが見つかりませんでした。

26

表示されている値は、16ビットファイルモード gitによって保存された状態 であり、 POSIXタイプおよびモード のレイアウトに従っています。

32-bit mode, split into (high to low bits)

4-bit object type
  valid values in binary are 1000 (regular file), 1010 (symbolic link)
  and 1110 (gitlink)

3-bit unused

9-bit unix permission. Only 0755 and 0644 are valid for regular files.
Symbolic links and gitlinks have value 0 in this field.

そのファイルはディレクトリについて言及していません。オブジェクトタイプ0100を使用して表されます。

6桁の値の各桁は8進数で、3ビットを表します。したがって、16ビットには6桁が必要で、最初の1桁は1ビットのみを表します。

Type|---|Perm bits

1000 000 111101101
1 0   0   7  5  5

1000 000 110100100
1 0   0   6  4  4

gitは任意のモードを格納せず、通常のPOSIXタイプおよびモード(8進数、12はシンボリックリンク、10は通常のファイル、04はディレクトリ)からのgitが16を追加した値のサブセットのみが許可されますgitリンク用。 4つの8進数を使用してモードが追加されます。ファイルの場合、100755または100644のみが表示されます(100664も技術的に可能です)。ディレクトリは040000(権限は無視されます)、シンボリックリンクは120000です。set-user-ID、set-group-ID、およびスティッキービットはまったくサポートされていません(未使用のビットに格納されます)。

この関連回答 も参照してください。

39
Stephen Kitt

従来、Unixファイルシステムでは、16ビットを使用してタイプを4ビットで保持していました(たとえば、通常のファイル、ディレクトリ、文字特殊デバイス...)9ビットのユーザー/グループ/その他の権限、スティッキービット、SUIDビット、およびSGIDビット。

これは8進数で表示されているため、右端の5桁の値は0〜7(合計15の3ビットを表す)で、左の桁は最後のビットが0または1です。

Linuxシステムではman -s 7 inode(つまり inode(7) )は、ファイルタイプとモードセクションでこれについて通知する必要があります。

8
icarus