Maneira simples de ver o conteúdo de diretórios em sistemas de arquivos Linux / UNIX

25
No passado, aprendi que nos sistemas de arquivos Linux / UNIX, diretórios são apenas arquivos, que contêm os nomes de arquivos e números de inodes dos arquivos dentro do diretório.

Existe uma maneira simples de ver o conteúdo de um diretório? Quero dizer, o modo como os nomes e inodes dos arquivos são armazenados / organizados.

Não estou procurando ls , find ou algo semelhante. Eu também não quero ver o conteúdo dos arquivos dentro de um diretório. Eu quero ver a implementação dos diretórios. Se todo diretório é apenas um arquivo de texto com algum conteúdo, talvez exista uma maneira simples de ver o conteúdo deste arquivo de texto.

No bash no Linux não é possível fazer um cat folder . A saída é apenas Is a directory .

Atualizar A questão Como alguém inspeciona as informações da estrutura de diretórios de um arquivo unix / linux? resolve o mesmo problema, mas não tem uma solução útil como a de mjturner .

    
por Neverland 17.07.2015 / 09:22

3 respostas

33

A ferramenta para exibir detalhes de inode para um sistema de arquivos será específica do sistema de arquivos. Para os ext2 , ext3 , ext4 filesystems (os sistemas de arquivos Linux mais comuns), você pode usar debugfs , para XFS xfs_db , para ZFS zdb . Para btrfs , algumas informações estão disponíveis usando o comando btrfs .

Por exemplo, para explorar um diretório em um sistema de arquivos ext4 (neste caso, / is 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  
# 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  %pre%  \f  %pre% 001 002   .  %pre%  %pre%  %pre% 204 030  \n  %pre%
0000020  \f  %pre% 002 002   .   .  %pre%  %pre% 251   #  \n  %pre% 024  %pre%  \f 001
0000040   A   n   i   m   a   t   i   o   n   .   j   s 252   #  \n  %pre%
0000060 030  %pre%  \r 001   D   i   r   e   c   t   i   o   n   s   .   j
0000100   s  %pre%  %pre%  %pre% 253   #  \n  %pre% 024  %pre%  \n 001   l   i   b   r
0000120   a   r   y   .   j   s  %pre%  %pre% 254   #  \n  %pre% 030  %pre% 016 001
0000140   l   o   a   d   S   c   r   i   p   t   s   .   j   s  %pre%  %pre%
0000160 255   #  \n  %pre% 020  %pre% 006 001   M   a   p   .   j   s  %pre%  %pre%
0000200 256   #  \n  %pre% 024  %pre%  \f 001   M   a   p   T   y   p   e   I
0000220   d   .   j   s 257   #  \n  %pre% 024  %pre%  \v 001   M   a   p   U
0000240   t   i   l   s   .   j   s  %pre% 260   #  \n  %pre% 024  %pre%  \t 001
0000260   M   a   r   k   e   r   .   j   s  %pre%  %pre%  %pre% 261   #  \n  %pre%
0000300 030  %pre% 020 001   M   a   r   k   e   r   C   l   u   s   t   e
0000320   r   .   j   s 262   #  \n  %pre% 034  %pre% 022 001   m   a   r   k
0000340   e   r   c   l   u   s   t   e   r   e   r   .   j   s  %pre%  %pre%
0000360 263   #  \n  %pre% 024  %pre%  \n 001   P   o   l   y   g   o   n   .
0000400   j   s  %pre%  %pre% 264   #  \n  %pre% 024  %pre%  \v 001   P   o   l   y
0000420   l   i   n   e   .   j   s  %pre% 265   #  \n  %pre% 030  %pre% 016 001
0000440   S   c   r   i   p   t   s   U   t   i   l   .   j   s  %pre%  %pre%
0000460 266   #  \n  %pre% 030  %pre%  \r 001   T   r   a   v   e   l   M   o
0000500   d   e   .   j   s  %pre%  %pre%  %pre% 267   #  \n  %pre% 030  %pre%  \r 001
0000520   U   n   i   t   S   y   s   t   e   m   .   j   s  %pre%  %pre%  %pre%
0000540 270   #  \n  %pre% 240 016  \v 001   W   a   y   p   o   i   n   t
0000560   .   j   s  %pre% 305 031  \n  %pre% 214 016 022 001   .   U   n   i
0000600   t   S   y   s   t   e   m   .   j   s   .   s   w   p  %pre%  %pre%
0000620 312 031  \n  %pre%   p 016 022 001   .   U   n   i   t   S   y   s
0000640   t   e   m   .   j   s   .   s   w   x  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%
0000660  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%
\f %pre% 001 002 . %pre% %pre% %pre% 204 030 \n %pre% 0000020 \f %pre% 002 002 . . %pre% %pre% 251 # \n %pre% 024 %pre% \f 001 0000040 A n i m a t i o n . j s 252 # \n %pre% 0000060 030 %pre% \r 001 D i r e c t i o n s . j 0000100 s %pre% %pre% %pre% 253 # \n %pre% 024 %pre% \n 001 l i b r 0000120 a r y . j s %pre% %pre% 254 # \n %pre% 030 %pre% 016 001 0000140 l o a d S c r i p t s . j s %pre% %pre% 0000160 255 # \n %pre% 020 %pre% 006 001 M a p . j s %pre% %pre% 0000200 256 # \n %pre% 024 %pre% \f 001 M a p T y p e I 0000220 d . j s 257 # \n %pre% 024 %pre% \v 001 M a p U 0000240 t i l s . j s %pre% 260 # \n %pre% 024 %pre% \t 001 0000260 M a r k e r . j s %pre% %pre% %pre% 261 # \n %pre% 0000300 030 %pre% 020 001 M a r k e r C l u s t e 0000320 r . j s 262 # \n %pre% 034 %pre% 022 001 m a r k 0000340 e r c l u s t e r e r . j s %pre% %pre% 0000360 263 # \n %pre% 024 %pre% \n 001 P o l y g o n . 0000400 j s %pre% %pre% 264 # \n %pre% 024 %pre% \v 001 P o l y 0000420 l i n e . j s %pre% 265 # \n %pre% 030 %pre% 016 001 0000440 S c r i p t s U t i l . j s %pre% %pre% 0000460 266 # \n %pre% 030 %pre% \r 001 T r a v e l M o 0000500 d e . j s %pre% %pre% %pre% 267 # \n %pre% 030 %pre% \r 001 0000520 U n i t S y s t e m . j s %pre% %pre% %pre% 0000540 270 # \n %pre% 240 016 \v 001 W a y p o i n t 0000560 . j s %pre% 305 031 \n %pre% 214 016 022 001 . U n i 0000600 t S y s t e m . j s . s w p %pre% %pre% 0000620 312 031 \n %pre% p 016 022 001 . U n i t S y s 0000640 t e m . j s . s w x %pre% %pre% %pre% %pre% %pre% %pre% 0000660 %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre%

Acima, começamos encontrando o inode do diretório src ( 664488 ) e, em seguida, despejamos seu conteúdo no arquivo src.out e exibimos isso usando od . Como você pode ver, o conteúdo de todos os arquivos nesse diretório ( Animation.js , etc.) é visível no dump.

Isso é só um começo - veja a página de manual debugfs ou digite help dentro de debugfs para mais informações.

Se você estiver usando ext4 , poderá encontrar mais informações sobre a estrutura e o layout das entradas de diretório no documentação do kernel .

    
por 17.07.2015 / 10:14
0

Você pode usar sua linguagem de programação preferida, abrir o diretório como se fosse um arquivo e ler bytes do manipulador de arquivo resultante. Isso não vai lhe dizer muito, já que será apenas lixo (com algumas cordas reconhecíveis), desde que você não saiba como está organizado. Como isso é organizado é praticamente um problema de implementação para o sistema de arquivos em questão. Se você quiser analisar essas coisas em profundidade, sugiro que comece lendo man dirent.h . Isso deve ser o suficiente para apontar mais em direção ao que impressiona você.

    
por 17.07.2015 / 09:36
0

Você pode tentar (a partição é um exemplo).

sudo debugfs /dev/xvda1                 

usa dump para gravar dados de inode em um arquivo.

sudo dumpe2fs /dev/xvda1

o homem é seu amigo, isso deve lhe dar algumas idéias.

    
por 17.07.2015 / 10:16