Unix ファイルシステムでは、ディレクトリは、サブファイル名、ファイル名サイズ、および inode 参照番号を含む特別なディレクトリ構造を持つ特殊ファイルです。
これに加えて、実際のファイルメタデータは通常inode自体に保存されます。
私の質問は。解釈された形式ではなく、生の形式で実際の特殊ディレクトリ構造を読み取る方法。
はい、lsを使用してそこにあるファイルを表示できることを知っています。それは私が探しているものではありません。
答え1
簡単に答えるか、または同じコマンドを使用してcat .
ディレクトリcat /etc
ファイルを読み取ることですcat mydir
。hexdump
もちろん、これは「生」データなので、非ASCIIデータを人間の方法で表示するのに適したプログラムを使用する必要がありますod
。
残念ながら議論したようにディレクトリはいつファイルに読み込まれませんか?、過去20年間にリリースされたほとんどのUnixバージョンではこれを許可しません。したがって、あなたの質問に対する答えは、おそらく「ディレクトリの読み込みを許可するUnixのバージョンを探してください」です。 AIX、ほとんどのBSDバージョン、および最新バージョンのSolarisを除くすべてのバージョンが適している可能性があります。これを可能にするLinuxを見つけるには、Time Machineを使用する必要があります。
答え2
この構造は、使用される特定のファイルシステムに完全に依存します。これを読み取る唯一の方法は、ディスク(/ dev / sda1など)から直接読み込み、ファイルシステムを直接解釈することです。
答え3
古い質問であることはわかりましたが、ディレクトリ構造に関する情報を見つけてこれを見つけました。
カタログファイルから生データを取得するには、次のdebugfs
ものを使用できます。
sudo debugfs /dev/sda1
ls
通常どおり、背面cd
またはディレクトリを使用できますcat
。読みにくいので、次のものを使用できます。
dump / dumproot
dumproot
これにより、というファイルが生成されますdebugfs
。元のコンテンツを取得するには、次のものを使用できますxxd
。
xxd dumproot | head -n2
00000000: 0200 0000 0c00 0102 2e00 0000 0200 0000 ................
00000010: 0c00 0202 2e2e 0000 0b00 0000 1400 0a02 ................
これは.
、02000000で始まるinode番号2を持つ私のディレクトリのエントリを示しています。より大きい inode 番号の場合は、リトルエンディアンエントリの先頭に表示されます。 16進数2eなのでそこでも見られます。 「0c00 0102」が何を意味するのか、項目の終わりをどのように指定するのかわかりません。私がこのスレッドを見つけたときに探していたのがこれでした。..
/
.
答え4
inodeのファイルシステムによって提供されるほとんどすべての情報は、次のように利用できます。統計資料注文する。これは、ファイルとディレクトリのinodeに関する生の情報と考えることができます。
stat FILE
Linuxでは、inodeに関する多くの情報を見つけることができます。ここ
ファイルシステムの一般的な生成プロセスを確認するには、以下を試してください。
- 約100kBの空のファイルを生成します。
- 目的のファイルシステムを使用したファイルフォーマット
- このソースファイルをバックアップしてください。
- ループデバイスとしてインストール
- いくつかのディレクトリとファイルの作成
- hexdiffまたはhexeditorを使用して、コイスの変更を分析します。
ルートとして、次のことを行います。
mkdir mountpoint
dd if=/dev/zero of=file_s.img bs=50k count=2
mkfs.ext2 file_s.img
cp file_s.img file_s_orig.img
mount -o loop file_s.img mountpoint
bless file_s.img