Ich suche ein Programm, dass mir alle Dateieinträge anzeigt, auf die eine inode verweist.
stat zeigt leider nur an, wie viele Verknüpfungen also Dateieinträge es für einen bestimmten inode oder alternativ Dateinamen gibt, nicht aber welche das sind und wo die liegen.
Ein Skript mit find, ls, grep, awk würde zwar sicher das gewünschte Ergebnis liefern, wäre dafür aber auch langsam.
Jetzt habe ich aber gleich noch eine zweite Frage um zu wissen, ob es überhaupt deutlich schneller gehen kann.
Wo genau im Dateisystem werden die Verknüpfungen gespeichert? Werden die an den Block mit der inode anhängt, so dass man sie einfach anzeigen könnte, sobald man die Inode hat, oder stehen die irgendwo anders und verweisen dann nur auf die Inode. Wenn nämlich letzteres der Fall ist, dann kann es so ein Tool, wie ich es suche, logischerweise nicht geben, zumindest keines, das effizient wäre.
Ein Binärprogramm, dass die Schritte von find, ls usw. in einem vereint ist natürlich schon möglich und schneller als das ständige starten von neuen find, ls usw. Prozessen, aber das meine ich damit jetzt nicht. Die Frage zielt ja auch eher darauf ab, ob der Datenbestand der inode die Information überhaupt schnell liefern könnte. Wenn die Liste mit den Einträgen oder Zeiger davon nämlich in einer Liste angehängt an der inode stehen würde, dann wäre so ein auslesen sehr effizient und schnell zu machen. Nur dann, wenn die Zeiger woanders stehen und auf den Block mit der inode verweisen, wäre das nicht so. Es sei denn natürlich, es sind doppelte Zeiger in beide Richtungen, also einmal ein Zeiger beim Dateinamenseintrag, der auf die Inode verweist und dann nochmal ein Zeiger bei der Inode, der wiederum auf diesen Dateinamenseintrag verweist.
Alle Dateieinträge bzw. Verknüpfungen anzeigen, auf die eine inode verweist
Re: Alle Dateieinträge bzw. Verknüpfungen anzeigen, auf die eine inode verweist
Ja.Cordess hat geschrieben:29.03.2023 13:30:24oder stehen die irgendwo anders und verweisen dann nur auf die Inode.
Richtig. Man muß praktisch alle Dateinamen und Verzeichnisnamen einsammeln und dann deren Verweise auf die inodes vergleichen und bei Gleichheit ausgeben.Wenn nämlich letzteres der Fall ist, dann kann es so ein Tool, wie ich es suche, logischerweise nicht geben, zumindest keines, das effizient wäre.
Effizient geht es also nicht
https://unix.stackexchange.com/question ... ode-number.
- heisenberg
- Beiträge: 4123
- Registriert: 04.06.2015 01:17:27
- Lizenz eigener Beiträge: MIT Lizenz
Alle Dateieinträge anzeigen, auf die eine inode verweist
Mit stat kannst Du Dir die Inode-Nummer einer Datei heraussuchen. mit debugfs(subcommand ncheck) kannst Du Dir alle Dateien, die per Hardlink auf den gleichen Inode gehen ausgeben lassen.
Wenn man das vom Dateinamen ausgehend machen möchte:
Nur vom Inode ausgehen ist lediglich der letzte Befehl.
Wenn man das vom Dateinamen ausgehend machen möchte:
Code: Alles auswählen
#!/bin/bash
LC_ALL=C
file="/usr/lib/python3.4/idlelib/__pycache__/macosxSupport.cpython-34.pyc"
inode="$(stat -c "%i" $file)"
mountpoint="$(stat -c %m -- $file)"
device="$(mount | awk -vmp="$mountpoint" '$3 == mp {print $1}')"
debugfs -R "ncheck $inode" $device
Re: Alle Dateieinträge bzw. Verknüpfungen anzeigen, auf die eine inode verweist
Danke euch beiden, das hat funktioniert.
Ich musste noch den /dev/mapper/ namen als Devicenamen anhängen, weil es eine verschlüsselte Partition ist und ohne dies ansonsten debugfs meldet "ncheck: Filesystem not open".
Aber so:
funktioniert es.
Ich musste noch den /dev/mapper/ namen als Devicenamen anhängen, weil es eine verschlüsselte Partition ist und ohne dies ansonsten debugfs meldet "ncheck: Filesystem not open".
Aber so:
Code: Alles auswählen
debugfs -R 'ncheck inodeNR' /dev/mapper/[NAME]