ค้นหาไฟล์ที่เป็นของหมายเลข inode ที่ระบุอย่างรวดเร็ว


44

ฉันรู้ของคำสั่งนี้:

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

แต่มันเป็นการค้นหาที่ช้ามากฉันรู้สึกว่าต้องมีวิธีที่เร็วกว่าในการทำสิ่งนี้ ไม่มีใครรู้วิธีการที่เร็วขึ้น?


นี่เป็นครั้งแรกที่ฉันเห็นการค้นหาโดยใช้ไอโหนด คุณต้องการค้นหา inode เมื่อใด
Coren

@Coren - มันถูกใช้โดยทั่วไปถ้าคุณมีไฟล์ด้วย, พูด, "-" อยู่ข้างหน้า คุณสามารถทำ ls -li เพื่อค้นหา inode ของมันแล้ว: find -inum <inode> -exec rm -i {} \; นี่เป็นวิธีใช้แถบและเบรเซอร์เพื่อให้แน่ใจว่าคุณสามารถลบไฟล์ได้ แน่นอนคุณสามารถ 'rm - -filename' หรือ rm ./-filename หรือ rm "-filename"
ชาวสวิส

2
@Coren ที่มี selinux ข้อความบันทึกจะมี inode แต่ไม่ใช่พา ธ เต็ม ดังนั้นคุณต้องค้นหา inode เพื่อค้นหาไฟล์ที่ถูกอ้างถึง (นั่นคือกรณีการใช้งานของฉันต่อไป)
Patrick

1
@Coren ตัวอย่างเช่นเมื่อไฟล์มีลิงก์จำนวนมากคุณเห็นว่าเนื้อหาล้าสมัยและต้องการลบไฟล์ แต่คุณพบชื่อไฟล์เพียงชื่อเดียวและต้องการลบไฟล์อื่น
Gilles 'หยุดความชั่วร้าย'

2
find / -inum <inode>ใช้เพียงแค่ มันพกพาได้มากกว่าdebugfsและทำงานได้อย่างน่าเชื่อถือมากขึ้น (สามารถค้นหาพา ธ ที่ไม่ได้เป็นของไฟล์ในฮาร์ดไดรฟ์เช่นอุปกรณ์เป็นต้น)
7heo.tk

คำตอบ:


33

สำหรับระบบไฟล์ ext4 คุณสามารถใช้งานได้debugfsในตัวอย่างต่อไปนี้:

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

คำตอบคือไม่ได้ทันที findแต่ดูเหมือนจะดีกว่า
เอาต์พุตที่ได้สามารถแยกวิเคราะห์ได้ง่ายเพื่อให้ได้ชื่อไฟล์


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

6

btrfs

man btrfs-inspect-internal พูดว่า:

   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

ตัวอย่าง:

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

0

คุณสามารถดูคำสั่ง fsdb ซึ่งพบได้ใน Unices ส่วนใหญ่และมีอยู่ใน Linux บางแห่งฉันแน่ใจ นี่เป็นคำสั่งที่ทรงพลังที่ช่วยให้คุณสามารถเข้าถึงโครงสร้าง inode ของ in-core ของไฟล์ได้ดังนั้นควรระมัดระวัง ไวยากรณ์ยังสั้นมาก

fsdb สำหรับ AIX

fsdb เชื่อมโยงไฟล์ใหม่บน Solaris

แม้ว่า fsdb จะไม่อนุญาตให้คุณค้นพบชื่อไฟล์ของ inode แต่จะอนุญาตให้คุณเข้าถึง inode ได้โดยตรงเมื่อคุณระบุในสาระสำคัญ "porting" คุณไปยังไฟล์ของตัวเอง (หรืออย่างน้อยมันเป็นตัวชี้บล็อกข้อมูล) เร็วกว่าในส่วนนั้นกว่าการค้นหา ;-)
คำถามของคุณไม่ได้ระบุสิ่งที่คุณต้องการจะทำกับไฟล์ คุณกำลังจะถอดรหัส filehandles NFS หรือไม่

SC


ฉันไม่คิดว่าฉันจะทำอะไรกับข้อมูลที่เกี่ยวข้องกับคำถามของฉันดังนั้นฉันจึงทิ้งมันไว้ ในกรณีของฉันมันเป็นเพียงคำถามที่อยากรู้อยากเห็น; การจัดเรียงข้อมูล xfs_fsr ของฉันแยกออกว่าการจัดเรียงข้อมูลแบบ inodes ใดและอันหนึ่งมีการแยกส่วนอย่างมาก (มากกว่า 5,000 รายการ) และฉันแค่อยากรู้ว่าไฟล์นี้เป็นอะไร findทำงานได้ช้ามาก
Alex

ฉันพยายามที่จะแก้ไขปัญหาที่ rhel vm ของฉันทำเต็ม (20 นาที!) fsck ทุกการบู๊ตและสิ่งที่ฉันต้องทำคือหมายเลข inode ที่รายงานใน / var / opt / ข้อความผิดพลาด (ต้องบอกว่าหา -inum ไม่ได้หามันจริงๆ)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.