
権限ビットは 12 個あり、そのうち 3 ビットのグループが 3 つあり、それぞれ RWX でユーザー、グループ、その他に割り当てられていると理解しています。RW は読み取りと書き込みですが、X はsearch
ディレクトリ用とexecute
ファイル用です。
私が理解できないのは次の点です:
残りの 3 つのモード ビットは何ですか。それらはすべて inode に格納されますか。
UNIX ではすべてがファイルなので、ファイル ディレクトリ自体もファイルと見なされることは知っています (これは本当ですか?)。しかし、UNIX システムは ACL を使用してファイル システムを表すため、ファイル システムはファイル名と inode_number のペアのリストになります。ファイル ディレクトリは、独自の inode 番号とファイル名をどこに保存するのでしょうか?
答え1
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
ここでuuu
、、ggg
およびはooo
、ユーザー、グループ、およびその他の権限ビットです。残りのグループ (順番が最初のグループ) には、setuid ( su
)、setgid ( sg
)、および sticky ( t
) ビットが含まれます。
setuid ビットと sticky ビットは、ほとんどのファイルではゼロなので、あまり言及されません。しかし、これらはすべてのファイルに存在し、他のファイルと一緒に保存されます。
実際に考えてみると、いくつかのファイルシステムとインターフェースはファイルを保存しているタイプモードビットに沿って、さらに上位のビットに。上記は12ビットのみを考慮しているため、16ビットフィールドでは4ビットが余ります。たとえば、st_mode
の説明stat(2)
。
答え2
残りの3ビットはsetuid、setgid、stickyビットを表します。UNIX の権限とファイルの種類を理解する詳細については、こちらをご覧ください。これらはすべて inode に保存されます。
ディレクトリは、名前とそれに対応する inode のリストを格納するファイルの一種です。ディレクトリ自身の名前と inode は親ディレクトリに格納されます。ルートディレクトリは特別なケースで、通常はファイルシステム内の固定の inode です (Ext4 の inode 2) であり、もちろん常に名前が付けられます
/
(マウント ポイントを基準とした相対的な名前になります)。