Linux / UNIXファイルシステムのディレクトリの内容を表示する簡単な方法


27

過去に、Linux / UNIXファイルシステムでは、ディレクトリは単なるファイルであり、ディレクトリ内のファイルのファイル名とiノード番号を含むことを学びました。

ディレクトリの内容を表示する簡単な方法はありますか?つまり、ファイル名とiノードの保存/整理方法です。

、または似たようなものを探していません。また、ディレクトリ内のファイルの内容を見たくありません。ディレクトリの実装を見たい。すべてのディレクトリがコンテンツを含むテキストファイルである場合、このテキストファイルのコンテンツを表示する簡単な方法が存在する可能性があります。lsfind

Linuxのbashでは、を実行することはできませんcat folder。出力はただIs a directoryです。

更新質問どのようにunix / linuxファイルのディレクトリ構造情報を検査しますか?同じ問題に対処しますが、mjturnerのような有用な解決策はありません。


vi <folder>ニーズに合わないと思いますか?ちょうどそれを言及
レニー

vim <DIR> これは、あなたの望むことですか?
7171u

まずはstatコマンドを見てください。stat folder
slm


2
歴史的catにはうまくいったと思います。しかし、そのアプローチは数十年前に廃止されました。実際のファイルシステムストレージを直接見る方法は知りません。代わりに、標準化された形式で情報を返す新しいシステムコールがあります。これは、使用されているファイルシステムに関係なく同じままです。
カスペルド

回答:


35

ファイルシステムのiノードの詳細を表示するツールは、ファイルシステム固有です。ファイルシステム(最も一般的なLinuxファイルシステム)は、使用することができますXFSのため、ZFSのために、。以下のためにいくつかの情報使用可能ですコマンドを。ext2ext3ext4debugfsxfs_dbzdbbtrfsbtrfs

たとえば、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

上記では、ディレクトリsrc664488)のiノードを見つけることから始めて、その内容をファイルにダンプし、src.outを使用して表示しodます。ご覧のとおり、そのディレクトリ内のすべてのファイルの内容(Animation.jsなど)がダンプに表示されています。

これはほんの始まりです-詳細については、debugfsマニュアルページを参照するか、そのhelp中に入力debugfsしてください。

を使用している場合ext4は、カーネルのドキュメントでディレクトリエントリの構造とレイアウトに関する詳細を参照できます。


これは素晴らしい答えです。どうもありがとう!次に、この出力でiノード番号を10進表記で表示する方法を調べてみます。出力のファイル名以外の値はiノード番号だと思います。それとも私は間違っていますか?
ネバーランド

@Neverlandはい、これらはiノード番号です。od -xディレクトリエントリファイルのダンプに使用すると、おそらくより明確になります。
mjturner

0

選択したプログラミング言語を使用して、ディレクトリをファイルであるかのように開き、結果のファイルハンドルからバイトを読み取ることができます。ただし、どのように構成されているかわからない限り、それはただのゴミ(認識可能な文字列をいくつか含む)になるため、あまりわかりません。それがどのように構成されているかは、問題のファイルシステムの実装の問題です。これらのことを詳しく調べたい場合は、を読むことから始めることをお勧めしますman dirent.h。それはあなたの空想を打つものに向かってさらにあなたを指すのに十分でなければなりません。


3
Linuxはこれを許可しません...そして、ファイルシステムに実際にあるものではなく、統一された形式でデータを返すほとんどのシステムを考えます。
Random832

2
これは(非常に)昔に可能だったものです。K&R 2nd Ednでこの証拠を見ることができます。ただし、それはもはや不可能です。この千年紀のほとんどは不可能でした。
ジョナサンレフラー

これは可能ですが、Unixシステムでは不要です。必要に応じてcatを使用してコンテンツを表示できますが、hd(Unixでxxdに相当)はおそらくより便利です。Linuxベースのシステムは、読み取りのためにディレクトリファイルを開くとエラーを返すことに気づきました。これは間違いだと仮定しています。「愚かな人々が愚かなことをするのを止めることによって、あなたは賢い人々が賢いことをするのも止めます」。
FJL

0

試すことができます(パーティションは例です)。

sudo debugfs /dev/xvda1                 

ダンプを使用して、iノードデータをファイルに書き込みます。

sudo dumpe2fs /dev/xvda1

男はあなたの友達です、これらはあなたにいくつかのアイデアを与えるはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.