วิธีง่ายๆในการดูเนื้อหาของไดเรกทอรีในระบบไฟล์ Linux / UNIX


27

ในอดีตฉันเรียนรู้ว่าในระบบไฟล์ Linux / UNIX ไดเรกทอรีเป็นเพียงไฟล์ซึ่งมีชื่อไฟล์และหมายเลข inode ของไฟล์ภายในไดเรกทอรี

มีวิธีง่ายๆในการดูเนื้อหาของไดเรกทอรีหรือไม่? ฉันหมายถึงวิธีการจัดเก็บ / จัดการไฟล์ชื่อและ inodes

ผมไม่ได้มองหาls, findหรือสิ่งที่คล้ายกัน ฉันไม่ต้องการเห็นเนื้อหาของไฟล์ในไดเรกทอรี ฉันต้องการที่จะเห็นการใช้งานของไดเรกทอรี หากทุกไดเรกทอรีเป็นเพียงไฟล์ข้อความที่มีเนื้อหาบางอย่างอาจมีวิธีง่ายๆในการดูเนื้อหาของไฟล์ข้อความนี้

ในทุบตีใน Linux cat folderมันเป็นไปไม่ได้ที่จะทำ Is a directoryเอาท์พุทเป็นเพียง

อัปเดตคำถามผู้ตรวจสอบข้อมูลโครงสร้างไดเรกทอรีของไฟล์ unix / linux อย่างไร ที่อยู่ที่ปัญหาเดียวกัน แต่ก็มีไม่มีการแก้ปัญหาที่เป็นประโยชน์เช่นเดียวจากmjturner


ฉันไม่คิดว่าvi <folder>เหมาะสมกับความต้องการของคุณ? เพียงแค่พูดถึงมัน
Lenniey

vim <DIR> นี่คือสิ่งที่คุณต้องการ?
7171u

สำหรับการเริ่มดูที่statคำสั่ง stat folder.
slm


2
ฉันเชื่อว่าในอดีตcatจะได้ผล แต่วิธีการนั้นล้าสมัยไปหลายสิบปีแล้ว ฉันไม่รู้วิธีการโดยตรงเพื่อดูที่เก็บข้อมูลระบบไฟล์จริง แต่มีการเรียกระบบใหม่เพื่อส่งคืนข้อมูลในรูปแบบมาตรฐานซึ่งยังคงเหมือนเดิมโดยไม่คำนึงถึงระบบไฟล์ที่กำลังใช้งานอยู่
kasperd

คำตอบ:


35

เครื่องมือในการแสดงรายละเอียด inode สำหรับระบบไฟล์จะเป็นระบบไฟล์เฉพาะ สำหรับext2, ext3, ext4ระบบไฟล์ (ที่พบมากที่สุดระบบไฟล์ลินุกซ์), คุณสามารถใช้debugfsสำหรับ XFS xfs_dbสำหรับ zdbZFS สำหรับ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

ในข้างต้นเราจะเริ่มต้นด้วยการหา inode ของไดเรกทอรีsrc( 664488) แล้วถ่ายโอนข้อมูลเนื้อหาของมันลงในไฟล์แล้วแสดงว่าการใช้src.out odอย่างที่คุณเห็นเนื้อหาของไฟล์ทั้งหมดในไดเรกทอรีนั้น ( Animation.jsฯลฯ ) จะปรากฏในดัมพ์

นี่เป็นเพียงการเริ่มต้น - ดูdebugfsหน้าคู่มือหรือพิมพ์helpภายในdebugfsสำหรับข้อมูลเพิ่มเติม

หากคุณกำลังใช้ext4คุณสามารถค้นหาข้อมูลเพิ่มเติมเกี่ยวกับโครงสร้างและรูปแบบของรายการไดเรกทอรีในเอกสาร kernel


นี่คือคำตอบที่ดี ขอบคุณมาก! ตอนนี้ฉันพยายามตรวจสอบวิธีที่ฉันสามารถแสดงหมายเลขไอโหนดในเอาต์พุตนี้ในรูปแบบเลขฐานสิบ ฉันคิดว่าค่านอกเหนือจากชื่อไฟล์ในผลลัพธ์เป็นหมายเลขไอโหนด หรือฉันผิด
เนเวอร์แลนด์

@Neverland ใช่แล้วตัวเลขเหล่านี้เป็นไอโหนด มันอาจจะชัดเจนกว่าถ้าคุณใช้od -xเพื่อถ่ายโอนไฟล์รายการไดเรกทอรี
mjturner

0

คุณสามารถใช้ภาษาการเขียนโปรแกรมที่คุณเลือกเปิดไดเรกทอรีราวกับว่ามันเป็นไฟล์และอ่านไบต์จากการจัดการไฟล์ผลลัพธ์ นั่นจะไม่บอกคุณมากนักเนื่องจากมันจะเป็นเพียงขยะ (โดยมีสตริงที่รู้จักสองสามตัว) ตราบใดที่คุณไม่ทราบว่ามันถูกจัดระเบียบอย่างไร วิธีการจัดระเบียบเป็นปัญหาการใช้งานสำหรับระบบไฟล์ที่เป็นปัญหา man dirent.hถ้าคุณต้องการที่จะมองเข้าไปในสิ่งเหล่านี้ในเชิงลึกผมแนะนำให้คุณเริ่มต้นด้วยการอ่าน นั่นน่าจะเพียงพอแล้วที่จะชี้ให้คุณเห็นถึงสิ่งที่คุณต้องการ


3
Linux ไม่อนุญาตสิ่งนี้ ... และฉันคิดว่าระบบส่วนใหญ่ที่ส่งคืนข้อมูลในรูปแบบที่เป็นหนึ่งเดียวมากกว่าที่จะเป็นระบบไฟล์
Random832

2
สิ่งนี้เคยเป็นไปได้ในอดีต (มาก) วัน คุณสามารถเห็นหลักฐานของสิ่งนี้ได้ใน K&R 2nd Edn อย่างไรก็ตามมันเป็นไปไม่ได้อีกต่อไป; มันเป็นไปไม่ได้สำหรับเกือบพันปีนี้
Jonathan Leffler

สิ่งนี้เป็นไปได้ แต่ไม่จำเป็นภายใต้ระบบ Unix - คุณสามารถใช้ cat เพื่อแสดงเนื้อหาหากคุณต้องการ แต่ hd (Unix เทียบเท่า xxd) น่าจะมีประโยชน์มากกว่า ฉันสังเกตว่าระบบที่ใช้ระบบปฏิบัติการ Linux ส่งคืนข้อผิดพลาดหากคุณเปิดไฟล์ไดเรกทอรีสำหรับการอ่านโดยถือว่าเป็นความผิดพลาด "ด้วยการหยุดคนโง่ที่ทำสิ่งที่โง่คุณก็หยุดคนฉลาดที่ทำสิ่งที่ฉลาด"
FJL

0

คุณสามารถลอง (พาร์ทิชันเป็นตัวอย่าง)

sudo debugfs /dev/xvda1                 

ใช้ dump เพื่อเขียนข้อมูล inode ไปยังไฟล์

sudo dumpe2fs /dev/xvda1

ผู้ชายคือเพื่อนของคุณสิ่งเหล่านี้ควรให้ความคิดกับคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.