以前、Linux/UNIXファイルシステムでは、ディレクトリは単なるファイルであり、ディレクトリ内のファイルのファイル名とiノード番号が含まれていることを知りました。
ディレクトリのコンテンツを見る簡単な方法はありますか?つまり、ファイル名とiノードが保存/整理される方法です。
私はではありませんls
、find
または類似したものを探しています。また、ディレクトリ内のファイルの内容を見たくありません。ディレクトリの実装を見たい。すべてのディレクトリがコンテンツを含む単なるテキストファイルである場合、このテキストファイルのコンテンツを表示する簡単な方法が存在する可能性があります。
Linuxのbashでは、cat folder
。出力はIs a directory
。
更新質問 nix/linuxファイルのディレクトリ構造情報をどのように検査しますか? は同じ問題に対処しますが、 mjturner のような便利な解決策はありません。
ファイルシステムのiノードの詳細を表示するツールは、ファイルシステム固有です。 ext2
、ext3
、ext4
ファイルシステム(最も一般的なLinuxファイルシステム)の場合、debugfs
、XFSの場合はxfs_db
、ZFSの場合はzdb
。 btrfs
の場合、btrfs
コマンドを使用していくつかの情報を入手できます。
たとえば、ext4
ファイルシステムのディレクトリを探索するには(この場合、/
はdev/sda1
です):
# ls src
Animation.js Map.js MarkerCluster.js ScriptsUtil.js
Directions.js MapTypeId.js markerclusterer.js TravelMode.js
library.js MapUtils.js Polygon.js UnitSystem.js
loadScripts.js Marker.js Polyline.js Waypoint.js
# ls -lid src
664488 drwxrwxrwx 2 vagrant vagrant 4096 Jul 15 13:24 src
# debugfs /dev/sda1
debugfs: imap <664488>
Inode 664488 is part of block group 81
located at block 2622042, offset 0x0700
debugfs: dump src src.out
debugfs: quit
# od -c src.out
0000000 250 # \n \0 \f \0 001 002 . \0 \0 \0 204 030 \n \0
0000020 \f \0 002 002 . . \0 \0 251 # \n \0 024 \0 \f 001
0000040 A n i m a t i o n . j s 252 # \n \0
0000060 030 \0 \r 001 D i r e c t i o n s . j
0000100 s \0 \0 \0 253 # \n \0 024 \0 \n 001 l i b r
0000120 a r y . j s \0 \0 254 # \n \0 030 \0 016 001
0000140 l o a d S c r i p t s . j s \0 \0
0000160 255 # \n \0 020 \0 006 001 M a p . j s \0 \0
0000200 256 # \n \0 024 \0 \f 001 M a p T y p e I
0000220 d . j s 257 # \n \0 024 \0 \v 001 M a p U
0000240 t i l s . j s \0 260 # \n \0 024 \0 \t 001
0000260 M a r k e r . j s \0 \0 \0 261 # \n \0
0000300 030 \0 020 001 M a r k e r C l u s t e
0000320 r . j s 262 # \n \0 034 \0 022 001 m a r k
0000340 e r c l u s t e r e r . j s \0 \0
0000360 263 # \n \0 024 \0 \n 001 P o l y g o n .
0000400 j s \0 \0 264 # \n \0 024 \0 \v 001 P o l y
0000420 l i n e . j s \0 265 # \n \0 030 \0 016 001
0000440 S c r i p t s U t i l . j s \0 \0
0000460 266 # \n \0 030 \0 \r 001 T r a v e l M o
0000500 d e . j s \0 \0 \0 267 # \n \0 030 \0 \r 001
0000520 U n i t S y s t e m . j s \0 \0 \0
0000540 270 # \n \0 240 016 \v 001 W a y p o i n t
0000560 . j s \0 305 031 \n \0 214 016 022 001 . U n i
0000600 t S y s t e m . j s . s w p \0 \0
0000620 312 031 \n \0 p 016 022 001 . U n i t S y s
0000640 t e m . j s . s w x \0 \0 \0 \0 \0 \0
0000660 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
上記では、最初にディレクトリsrc
(664488
)のiノードを見つけ、その内容をファイルsrc.out
にダンプし、od
を使用して表示します。ご覧のとおり、そのディレクトリ内のすべてのファイルの内容(Animation.js
など)がダンプに表示されます。
これはほんの始まりです。詳細については、debugfs
のマニュアルページを参照するか、help
内にdebugfs
と入力してください。
ext4
を使用している場合は、ディレクトリエントリの構造とレイアウトに関する詳細情報を kernel documentation で確認できます。
選択したプログラミング言語を使用して、ファイルであるかのようにディレクトリを開き、結果のファイルハンドルからバイトを読み取ることができます。ただし、それがどのように構成されているかわからない限り、それは(いくつかの認識可能な文字列が含まれている)単なるガベージであるため、それほど多くのことはわかりません。それがどのように構成されているかは、問題のファイルシステムの実装の問題です。これらのことを詳しく調べたい場合は、man dirent.h
を読むことから始めることをお勧めします。それはあなたの空想を打つものにさらにあなたを向けるのに十分でなければなりません。
試すことができます(パーティションは例です)。
Sudo debugfs /dev/xvda1
dumpを使用して、inodeデータをファイルに書き込みます。
Sudo dumpe2fs /dev/xvda1
男はあなたの友達です、これらはあなたにいくつかのアイデアを与えるはずです。