Hangi dosyaların belirli bir inode numarasına ait olduğunu hızla bulun


44

Bu komutu biliyorum:

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

ama çok yavaş bir arama, bunu yapmanın daha hızlı bir yolu olması gerektiğini düşünüyorum. Daha hızlı bir yöntem bilen var mı?


Bu benim ilk kez inode kullanarak bir arama görüyorum. İnode ile ne zaman aramanız gerekir?
Coren

@Coren - önünde bir "-" diyen bir dosyanız varsa, yaygın olarak kullanılır. Bunun için ins bulmak için ls -li komutunu kullanabilirsiniz. -inum <inode> -exec rm -i {} \; Bu, dosyayı kaldırabilmenizi sağlamaya yönelik kayış ve destek yaklaşımıdır. Tabii ki, 'rm - -filename' veya rm ./-filename veya rm "-filename" de olabilir.
swisscheese

2
Selinux ile @Coren, günlük mesajları, inode, ancak tam yolu içerir. Bu yüzden referansta bulunulan dosyayı bulmak için inode'u aramalısınız. (bu benim kullanım davam zaten)
Patrick

1
@Coren Örneğin, bir dosyada birden fazla sabit bağlantı varsa, içeriğin eski olduğunu ve dosyayı silmek istediğini, ancak dosyanın adlarından yalnızca birini bulduğunuzu ve diğerlerini silmek istediğinizi fark ettiniz.
Gilles 'SO- kötülükten vazgeçmeyi'

2
Sadece kullan find / -inum <inode>. Daha taşınabilir debugfsve aynı zamanda çok daha güvenilir bir şekilde çalışıyor (örneğin, aygıtlar gibi sabit sürücüdeki dosyalara ait olmayan yollar bulabilir).
7heo.tk

Yanıtlar:


33

Bir ext4 dosya sistemi debugfsiçin aşağıdaki örnekteki gibi kullanabilirsiniz :

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

Cevap hemen değil, ama daha iyi gibi görünüyor find.
Elde edilen çıktı, dosya adını elde etmek için kolayca ayrıştırılabilir.


Muhtemelen dosya sistemi tipini belirtmeliydim. Bunları yapma yönteminin farklı dosya sistemleri için farklı olacağı bana gelmedi. XFS kullanıyorum, bu yüzden cevabın doğru olduğundan emin olmama rağmen, özellikle bana yardımcı olmayacak.
Alex,

6

btrfs

man btrfs-inspect-internal diyor:

   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

Örnek:

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

0

Pek çok Unice'de bulunan ve eminim ki Linux için uygun olan fsdb komutuna bakabilirsiniz. Bu, dosyaların çekirdek inode yapısına erişmenizi sağlayan güçlü bir komuttur, bu yüzden dikkatli olun. Sözdizimi de çok kısa.

AIX için fsdb

Solaris'teki fsdb yeniden bağlantı dosyası

FSDB aslında inode'un dosya adı keşfetmek izin vermez olsa da, does o yüzden dosyanın kendisi (ya da en azından 's veri bloğu işaretçileri) sizi "taşıma" Bunu belirtirken doğrudan özünde, düğüm erişmelerine izin Bulmaktan daha hızlı bu konuda ;-).
Sorunuz dosya ile ne yapmak istediğinizi belirtmiyor. NFS dosyalarının kodunu çözme şansınız var mı?

demek ki


Bilgiyle ne yapacağımı sorumun sorumu ile ilgili düşünmedim, bu yüzden bıraktım. Benim durumumda bu sadece bir merak sorusuydu; benim xfs_fsr birleştirme hangi birleştirir inode dışarı tükürür ve biri son derece parçalanmış (5000'den fazla genişletme) ve ben sadece hangi dosyayı olduğunu merak ediyordum. findçalışır, sadece çok yavaş.
Alex,

Rhel vm'imin her açılışta tam (20 dakika!) Fsck yaptığı ve devam etmem gereken tek şeyin / var / opt / messages'de hatalı olarak bildirilen inode numarası olduğu bir sorunu çözmeye çalışıyorum. (Yani, -inum aslında bulamadık bulmak söyledikten sonra)
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.