Linux / UNIX dosya sistemlerinde dizin içeriğini görmenin basit yolu


27

Geçmişte, Linux / UNIX dosya sistemlerinde, dizinlerin sadece dosya adlarını ve dizin içindeki dosyaların inode numaralarını içeren dosyalar olduğunu öğrendim.

Bir dizinin içeriğini görmenin basit bir yolu var mı ? Dosya adlarının ve inode'ların depolanma / organize olma şeklini kastediyorum.

Ben değilim değil arayan ls, findya da bir şey benzer. Ayrıca bir dizinin içindeki dosyaların içeriğini görmek istemiyorum. Dizinlerin uygulanmasını görmek istiyorum. Her dizinde, yalnızca içeriği olan bir metin dosyası varsa, bu metin dosyasının içeriğini görmenin basit bir yolu olabilir.

Linux'ta bash'te bu mümkün değildir cat folder. Çıktı sadece Is a directory.

Güncelleme sorusu Bir unix / linux dosyasının dizin yapısı bilgilerini nasıl inceler? aynı sorunu giderir ancak mjturner'ınki gibi yararlı bir çözümü yoktur .


vi <folder>İhtiyaçlarına uygun olduğunu sanmıyorum ? Sadece söz
Lenniey

vim <DIR> İstediğin bu mu?
7171u

Yeni başlayanlar için statkomuta bir göz atın . stat folder.
slm


2
Tarihsel olarak catişe yarayacağına inanıyorum . Fakat bu yaklaşım onlarca yıl önce kullanılmıyordu. Asıl dosya sistemi deposunu görmenin doğrudan bir yolunu bilmiyorum. Bunun yerine, bilgiyi standartlaştırılmış bir biçimde geri döndürmek için kullanılan ve hangi dosya sisteminin kullanıldığına bakılmaksızın aynı kalan yeni sistem çağrıları vardır.
kasperd

Yanıtlar:


35

Bir dosya sistemi için inode detayını gösterme aracı dosya sistemine özgü olacaktır. İçin ext2, ext3, ext4dosya sistemleri (en yaygın Linux dosya sistemleri), kullanabilirsiniz debugfsXFS için, xfs_dbZFS için, zdb. İçin btrfsbazı bilgiler kullanılarak kullanılabilir btrfskomutu.

Örneğin, bir bir dizini keşfetmek için ext4(bu durumda dosya sistemi /olan 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

Yukarıda, inode src( 664488) inode komutunu bularak başlıyoruz, sonra içeriğini dosyaya döküp src.outkullanıyoruz od. Gördüğünüz gibi, bu dizindeki ( Animation.js, vb.) Tüm dosyaların içeriği dökümde görünür.

Bu sadece bir başlangıçtır - daha fazla bilgi için debugfskılavuz sayfasına veya helpiçine debugfsbakın.

Kullanıyorsanız ext4, çekirdek belgelerinde dizin girişlerinin yapısı ve düzeni hakkında daha fazla bilgi bulabilirsiniz .


Bu harika bir cevap. Çok teşekkürler! Şimdi bu çıktıdaki inode numaralarını ondalık gösterimde nasıl gösterebileceğimi araştırmaya çalışıyorum. Çıktıdaki dosya adlarının yanı sıra değerler inode sayılarıdır. Yoksa yanlış mıyım?
Neverland

@Neverland Evet, bunlar inode sayılarıdır. od -xDizin giriş dosyasını atmak için kullanırsanız muhtemelen daha açık .
mjturner

0

İstediğiniz programlama dilini kullanabilir, dizini bir dosyamış gibi açabilir ve çıkan dosya tanıtıcısından baytları okuyabilirsiniz. Ne kadar organize olduğunu bilmediğiniz sürece, bu size çok fazla bir şey söylemeyecektir, çünkü sadece çöp içinde olacaktır (birkaç tanınabilir dizeyle). Nasıl organize edildiği hemen hemen söz konusu dosya sistemi için bir uygulama sorunudur. Bunları derinlemesine incelemek istiyorsanız, okumaya başlamanızı öneririm man dirent.h. Sizi, fantazinize çarpan şeylere doğru yönlendirmeniz yeterli olacaktır.


3
Linux buna izin vermiyor ... ve bence, aslında dosya sistemindeki her şeye değil, verileri birleştirilmiş bir biçimde döndüren sistemler.
Random832

2
Bu eskiden (çok) eski günlerde mümkündü. Bunun kanıtını K&R 2nd Edn. Ancak, artık mümkün değil; bu binyılın çoğu için mümkün olmadı.
Jonathan Leffler

Bu mümkündür, ancak gereksizdir, Unix sistemleri altında - İsterseniz sadece içeriği görüntülemek için cat kullanabilirsiniz, ancak hd (xxd'nin Unix eşdeğeri) muhtemelen daha kullanışlıdır. Linux tabanlı sistemlerin okumak için bir dizin dosyası açarsanız bir hata verdiğini farkettim, bunun bir hata olduğu varsayımıyla. "Aptal insanları aptalca şeyler yaparak durdurarak, zeki insanları da akıllıca şeyler yapmalarını engellersiniz".
FJL

0

Deneyebilirsiniz (bölüm bir örnek).

sudo debugfs /dev/xvda1                 

inode verilerini bir dosyaya yazmak için dökümü kullanın.

sudo dumpe2fs /dev/xvda1

erkek arkadaşın, bunlar sana bazı fikirler vermeli.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.