web-dev-qa-db-ja.com

UNIX許可モードビットの最後の3ビットは何ですか?

ユーザー、グループ、その他それぞれに3ビットの3つのグループがあり、それぞれRWXである12の許可ビットがあることを理解しています。 RWは読み取りと書き込みですが、Xの場合はディレクトリの場合はsearch、ファイルの場合はexecuteです。

ここに私が得ないものがあります:

  1. 残りの3つのモードビットとは何ですか?それらはすべてiノードに保存されていますか?

  2. UNIXのすべてのものはファイルであるため、ファイルディレクトリ自体もファイルと見なされます(これは本当ですか?)。ただし、UNIXシステムはACLを使用してファイルシステムを表すため、ファイルシステムはfilename-inode_numberのリストです。ペア。ファイルディレクトリは、それ自体のiノード番号とファイル名をどこに保存しますか?

5
winnie99

_stat /bin/su_は1つのシステムで表示されます。

_Access: (4755/-rwsr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
_

12モードビットすべての8進数表現_4755_があります。数はビットに対応します:

_octal    4   7   5   5
bits   100 111 101 101
       sst uuu ggg ooo
       ug  rwx rwx rwx
_

ここで、uuugggおよびoooは、ユーザー、グループ、およびその他の権限ビットです。残りのグループ(最初のグループ)には、setuid(su)、setgid(sg)、sticky(t)ビットが含まれています。

Setuidとstickyビットは、ほとんどのファイルでゼロであるため、言及されないことがよくあります。それらは、他のファイルと一緒に保存され、すべてのファイルに対して引き続き存在します。


実際にそれに取り掛かると、一部のファイルシステムとインターフェイスは、ファイルtypeをモードビットに沿ってさらに高いビットに格納します。上記は12ビットのみを占めるため、16ビットのフィールドでは、4が残ります。たとえば、 stat(2)の_st_mode_の説明 を参照してください。

5
ilkkachu
  1. 残りの3ビットは、setuid、setgid、stickyビットを表します。詳細は NIXの権限とファイルタイプについて を参照してください。これらはすべてiノードに格納されます。

  2. ディレクトリは確かに、名前と対応するiノードのリストを格納する一種のファイルです。ディレクトリ自体の名前とiノードはその親ディレクトリに格納されます。ルートディレクトリは特殊なケースであり、通常はファイルシステムの固定iノード( Ext4のiノード2 )であり、もちろん常に/(最終的にはマウントポイントに相対的になります...)。

3
Stephen Kitt