Cách đơn giản để xem nội dung của các thư mục trong các hệ thống tệp Linux / UNIX


27

Trước đây, tôi đã học được rằng trong các hệ thống tệp Linux / UNIX, các thư mục chỉ là các tệp, chứa tên tệp và số inode của các tệp bên trong thư mục.

Có một cách đơn giản để xem nội dung của một thư mục? Tôi có nghĩa là cách các tên tập tin và inodes được lưu trữ / tổ chức.

Tôi không tìm kiếm ls, findhoặc một cái gì đó tương tự. Tôi cũng không muốn xem nội dung của các tập tin trong một thư mục. Tôi muốn xem việc thực hiện các thư mục. Nếu mỗi thư mục chỉ là một tệp văn bản với một số nội dung, có thể có một cách đơn giản để xem nội dung của tệp văn bản này.

Trong bash trong Linux, không thể làm được cat folder. Đầu ra chỉ là Is a directory.

Cập nhật Câu hỏi Làm thế nào để kiểm tra thông tin cấu trúc thư mục của tệp unix / linux? giải quyết vấn đề tương tự nhưng nó không có giải pháp hữu ích như giải pháp từ mjturner .


Tôi không nghĩ vi <folder>phù hợp với nhu cầu của bạn? Chỉ cần đề cập đến nó
Lenniey

vim <DIR> Đây có phải là những gì bạn muốn?
7171u

Để bắt đầu hãy xem statlệnh. stat folder.
slm


2
Tôi tin rằng trong lịch sử catsẽ có hiệu quả. Nhưng cách tiếp cận đó đã lỗi thời từ nhiều thập kỷ trước. Tôi không biết bất kỳ cách trực tiếp nào để xem lưu trữ hệ thống tệp thực tế. Thay vào đó, có các lệnh gọi hệ thống mới để trả về thông tin ở định dạng chuẩn vẫn giữ nguyên cho dù hệ thống tệp cơ bản nào đang được sử dụng.
kasperd

Câu trả lời:


35

Công cụ hiển thị chi tiết inode cho một hệ thống tập tin sẽ là hệ thống tập tin cụ thể. Đối với ext2, ext3, ext4hệ thống tập tin (phổ biến nhất hệ thống tập tin Linux), bạn có thể sử dụng debugfs, cho XFS xfs_db, cho ZFS zdb. Đối với btrfsmột số thông tin có sẵn bằng cách sử dụng btrfslệnh.

Ví dụ: để khám phá một thư mục trên một ext4hệ thống tập tin (trong trường hợp /này là 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

Trong phần trên, chúng ta bắt đầu bằng cách tìm inode của thư mục src( 664488) và sau đó kết xuất nội dung của nó vào tệp src.outvà sau đó hiển thị bằng cách sử dụng od. Như bạn có thể thấy, nội dung của tất cả các tệp trong thư mục đó ( Animation.js, v.v.) hiển thị trong kết xuất.

Đây chỉ là một sự khởi đầu - xem debugfstrang hướng dẫn hoặc nhập helptrong debugfsđể biết thêm thông tin.

Nếu bạn đang sử dụng ext4, bạn có thể tìm thêm thông tin về cấu trúc và bố cục của các mục trong thư mục trong tài liệu kernel .


Đây là câu trả lời tuyệt vời. Cảm ơn rất nhiều! Bây giờ tôi cố gắng điều tra làm thế nào tôi có thể hiển thị các số inode trong đầu ra này theo ký hiệu thập phân. Tôi nghĩ rằng các giá trị bên cạnh tên tệp trong đầu ra là số inode. Hoặc là tôi sai?
Neverland

@Neverland Vâng, đó là những số inode. Chúng có thể rõ ràng hơn nếu bạn sử dụng od -xđể kết xuất tệp mục nhập thư mục.
mjturner

0

Bạn có thể sử dụng ngôn ngữ lập trình bạn chọn, mở thư mục như thể đó là một tệp và đọc byte từ xử lý tệp kết quả. Tuy nhiên, điều đó sẽ không cho bạn biết nhiều, vì nó sẽ chỉ là rác (với một vài chuỗi có thể nhận ra trong đó) miễn là bạn không biết cách tổ chức. Làm thế nào nó được tổ chức là một vấn đề triển khai cho hệ thống tập tin được đề cập. Nếu bạn muốn tìm hiểu sâu về những điều này, tôi khuyên bạn nên bắt đầu bằng cách đọc man dirent.h. Điều đó là đủ để chỉ cho bạn thêm về những gì nổi bật ưa thích của bạn.


3
Linux không cho phép điều này ... và tôi nghĩ rằng hầu hết các hệ thống trả về dữ liệu ở định dạng hợp nhất thay vì bất cứ thứ gì thực sự có trong hệ thống tệp.
Random832

2
Điều này đã từng có thể trở lại trong (rất) ngày xưa. Bạn có thể thấy bằng chứng về điều này trong K & R 2nd Edn. Tuy nhiên, nó không còn có thể; điều đó đã không thể xảy ra trong hầu hết thiên niên kỷ này.
Jonathan Leffler

Điều này là có thể, nhưng không cần thiết, trong các hệ thống Unix - bạn chỉ có thể sử dụng cat để hiển thị nội dung nếu bạn thích nhưng hd (tương đương Unix của xxd) có thể hữu ích hơn. Tôi đã nhận thấy rằng các hệ thống dựa trên Linux sẽ trả về lỗi nếu bạn mở tệp thư mục để đọc, với giả định đó là một lỗi. "Bằng cách ngăn chặn những người ngu ngốc làm những điều ngu ngốc, bạn cũng ngăn chặn những người thông minh làm những điều thông minh".
FJL

0

Bạn có thể thử (phân vùng là một ví dụ).

sudo debugfs /dev/xvda1                 

sử dụng dump để ghi dữ liệu inode vào một tập tin.

sudo dumpe2fs /dev/xvda1

Người đàn ông là bạn của bạn, những điều này sẽ cho bạn một số ý tưởng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.