Nhanh chóng tìm thấy tập tin nào thuộc về một số inode cụ thể


44

Tôi biết lệnh này:

find /path/to/mountpoint -inum <inode number>

nhưng nó là một tìm kiếm rất chậm, tôi cảm thấy như phải có một cách nhanh hơn để làm điều này. Có ai biết một phương pháp nhanh hơn?


Đây là lần đầu tiên tôi thấy một tìm kiếm sử dụng inode. Khi nào bạn cần tìm kiếm bằng inode?
Coren

@Coren - nó thường được sử dụng nếu bạn có một tệp có chữ "-" ở phía trước. Bạn có thể làm ls -li để tìm inode của nó, sau đó: find. -inum <inode> -exec rm -i {} \; Đây là một cách tiếp cận vành đai và vành đai để đảm bảo bạn có thể xóa tệp. Tất nhiên, bạn cũng có thể 'rm - -filename' hoặc rm ./-filename hoặc rm "-filename".
Thụy Điển

2
@Coren với selinux, thông điệp tường trình bao gồm inode, nhưng không phải là đường dẫn đầy đủ. Vì vậy, bạn phải tìm kiếm inode để tìm tệp đang được đề cập. (dù sao đó cũng là trường hợp sử dụng của tôi)
Patrick

1
@Coren Ví dụ: khi một tệp có nhiều liên kết cứng, bạn đã phát hiện ra rằng nội dung đã lỗi thời và muốn xóa tệp, nhưng bạn chỉ tìm thấy một trong các tên của tệp và muốn xóa các tên khác.
Gilles 'SO- ngừng trở nên xấu xa'

2
Chỉ cần sử dụng find / -inum <inode>. Nó dễ mang theo hơn nhiều debugfsvà cũng hoạt động đáng tin cậy hơn nhiều (ví dụ, nó có thể tìm thấy các đường dẫn không thuộc về các tệp trên ổ cứng, như các thiết bị).
7heo.tk

Câu trả lời:


33

Đối với hệ thống tệp ext4, bạn có thể sử dụng debugfsnhư trong ví dụ sau:

$ sudo debugfs -R 'ncheck 393094' /dev/sda2 2>/dev/null
Inode   Pathname
393094  /home/enzotib/examples.desktop

Câu trả lời không phải là ngay lập tức, nhưng dường như là tốt hơn find.
Đầu ra thu được có thể dễ dàng phân tích cú pháp để có được tên tệp.


Tôi có lẽ nên chỉ định loại hệ thống tập tin. Nó đã không xảy ra với tôi rằng phương pháp thực hiện những điều này sẽ khác nhau đối với các hệ thống tập tin khác nhau. Tôi đang sử dụng XFS, vì vậy trong khi tôi chắc chắn câu trả lời của bạn là chính xác, nó sẽ không giúp tôi cụ thể.
Alex

6

btrfs

man btrfs-inspect-internal nói:

   inode-resolve [-v] <ino> <path>
       (needs root privileges)

       resolve paths to all files with given inode number ino in a given
       subvolume at path, ie. all hardlinks

       Options

       -v
           verbose mode, print count of returned paths and ioctl()
           return value

Thí dụ:

  • sudo btrfs inspect-internal inode-resolve 15380 /home

0

Bạn có thể nhìn vào lệnh fsdb, được tìm thấy trên hầu hết các Unice và có sẵn ở đâu đó cho Linux. Đây là một lệnh mạnh mẽ cho phép bạn truy cập cấu trúc inode lõi của các tệp, vì vậy hãy cẩn thận. Cú pháp cũng rất ngắn gọn.

fsdb cho AIX

tập tin liên kết lại fsdb trên Solaris

Trong khi fsdb sẽ không thực sự cho phép bạn khám phá các tên tập tin của inode, nó không cho phép bạn truy cập trực tiếp các inode khi bạn xác định nó, trong bản chất "porting" bạn đến tập tin riêng của mình (hoặc ít nhất đó là con trỏ khối dữ liệu) do đó, nó nhanh hơn trong khía cạnh đó hơn là tìm thấy ;-).
Câu hỏi của bạn không chỉ định những gì bạn muốn làm với tệp. Bạn có đang giải mã các tập tin NFS không?

sc.


Chà, tôi không nghĩ những gì tôi sẽ làm với thông tin có liên quan đến câu hỏi của tôi, vì vậy tôi đã bỏ nó đi. Trong trường hợp của tôi, nó chỉ là một câu hỏi tò mò; phân mảnh xfs_fsr của tôi phát ra từ đó phân mảnh, và một phân mảnh cực kỳ phân mảnh (hơn 5000 phạm vi) và tôi chỉ tò mò đó là tệp nào. findhoạt động, nó rất chậm.
Alex

Tôi đang cố gắng khắc phục sự cố trong đó rrc vm của tôi thực hiện đầy đủ (20 phút!) Mỗi ​​lần khởi động và tất cả những gì tôi phải tiếp tục là số inode được báo cáo trong / var / opt / message là bị lỗi. (Đã nói rằng, find -inum không thực sự tìm thấy nó)
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.