Ich sehe zum ersten Mal eine Suche mit inode. Wann müssen Sie nach Inode suchen?
Coren
@Coren - wird häufig verwendet, wenn Sie eine Datei mit einem "-" voranstellen. Sie können ls -li verwenden, um die Inode zu finden, dann: find. -inum <inode> -exec rm -i {} \; Dies ist ein Ansatz, mit dem Sie sicherstellen können, dass Sie die Datei entfernen können. Natürlich können Sie auch 'rm - -Dateiname' oder rm ./-Dateiname oder rm "-Dateiname" eingeben.
Swisscheese
2
@ Coren mit Selinux, Protokollnachrichten enthalten den Inode, aber nicht den vollständigen Pfad. Sie müssen also nach dem Inode suchen, um die Datei zu finden, auf die verwiesen wird. (das ist sowieso mein Anwendungsfall)
Patrick
1
@Coren Wenn eine Datei beispielsweise mehrere feste Links enthält, haben Sie festgestellt, dass der Inhalt veraltet ist und die Datei löschen möchte, aber Sie haben nur einen der Dateinamen gefunden und möchten die anderen löschen.
Gilles 'SO- hör auf böse zu sein'
2
Verwenden Sie einfach find / -inum <inode>. Es ist viel portabler als debugfsund arbeitet auch viel zuverlässiger (es kann Pfade finden, die nicht zu Dateien auf der Festplatte gehören, wie zum Beispiel Geräte).
7heo.tk
Antworten:
33
Für ein ext4-Dateisystem können Sie debugfsFolgendes verwenden:
Die Antwort ist nicht unmittelbar, scheint aber besser zu sein als find.
Die erhaltene Ausgabe kann leicht analysiert werden, um den Dateinamen zu erhalten.
Ich hätte wahrscheinlich den Dateisystemtyp angeben sollen. Mir ist nicht in den Sinn gekommen, dass die Vorgehensweise für verschiedene Dateisysteme unterschiedlich ist. Ich verwende XFS. Obwohl ich sicher bin, dass Ihre Antwort korrekt ist, hilft es mir nicht weiter.
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
Sie können sich den Befehl fsdb ansehen, der auf den meisten Unices zu finden ist und der sicher irgendwo für Linux verfügbar ist. Dies ist ein leistungsfähiger Befehl, mit dem Sie auf die Inode-Struktur von Dateien im Kern zugreifen können. Seien Sie also vorsichtig. Die Syntax ist auch sehr knapp.
Mit fsdb können Sie den Dateinamen des Inodes zwar nicht ermitteln, Sie können jedoch direkt auf den Inode zugreifen, wenn Sie ihn angeben, und Sie im Wesentlichen auf die Datei selbst "portieren" (oder zumindest auf die Datenblockzeiger), sodass dies der Fall ist schneller in dieser Hinsicht als der Fund ;-).
Ihre Frage gibt nicht an, was Sie mit der Datei tun möchten. Dekodieren Sie möglicherweise NFS-Dateihandles?
Nun, ich dachte nicht, was ich mit den Informationen anfangen würde, die für meine Frage relevant sind, also habe ich sie weggelassen. In meinem Fall war es nur eine Frage der Neugier; Meine xfs_fsr-Defragmentierung spuckt aus, welche Inodes sie defragmentiert, und eine ist extrem fragmentiert (über 5000 Speicherbereiche), und ich war nur neugierig, welche Datei es ist. findfunktioniert, es ist nur so langsam.
Alex
Ich versuche ein Problem zu beheben, bei dem mein Rhel-VM jeden Startvorgang (20 Minuten!) Ausführt und ich nur die Inode-Nummer angeben muss, die in / var / opt / messages als fehlerhaft gemeldet wurde. (Allerdings hat find -inum es nicht wirklich gefunden)
find / -inum <inode>
. Es ist viel portabler alsdebugfs
und arbeitet auch viel zuverlässiger (es kann Pfade finden, die nicht zu Dateien auf der Festplatte gehören, wie zum Beispiel Geräte).Antworten:
Für ein ext4-Dateisystem können Sie
debugfs
Folgendes verwenden:Die Antwort ist nicht unmittelbar, scheint aber besser zu sein als
find
.Die erhaltene Ausgabe kann leicht analysiert werden, um den Dateinamen zu erhalten.
quelle
btrfs
man btrfs-inspect-internal
sagt:Beispiel:
sudo btrfs inspect-internal inode-resolve 15380 /home
quelle
Sie können sich den Befehl fsdb ansehen, der auf den meisten Unices zu finden ist und der sicher irgendwo für Linux verfügbar ist. Dies ist ein leistungsfähiger Befehl, mit dem Sie auf die Inode-Struktur von Dateien im Kern zugreifen können. Seien Sie also vorsichtig. Die Syntax ist auch sehr knapp.
fsdb für AIX
fsdb-Datei unter Solaris erneut verknüpfen
Mit fsdb können Sie den Dateinamen des Inodes zwar nicht ermitteln, Sie können jedoch direkt auf den Inode zugreifen, wenn Sie ihn angeben, und Sie im Wesentlichen auf die Datei selbst "portieren" (oder zumindest auf die Datenblockzeiger), sodass dies der Fall ist schneller in dieser Hinsicht als der Fund ;-).
Ihre Frage gibt nicht an, was Sie mit der Datei tun möchten. Dekodieren Sie möglicherweise NFS-Dateihandles?
sc.
quelle
find
funktioniert, es ist nur so langsam.