------------------------------------------------------------
-
- Beiträge: 174
- Registriert: 29.04.2012 22:55:06
------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------
Zuletzt geändert von schorschruffneck am 06.06.2014 10:05:26, insgesamt 2-mal geändert.
Re: Umleitung von ls -i in zweiten Befehl
Leider verstehe ich das Problem nicht. Eigentlich erwartet "stat" einen Dateinamen und keine Inode. Somit sollte
korrekt sein.
Oder kennst du vielleicht gar nicht mehr den Dateinamen, da du die Datei versehentlich gelöscht hast? Oder hast du die Datei nicht gelöscht aber kennst den Namen nicht. Aber in der jetzigen Beschreibung macht es eher weniger Sinn.
Dateinamen suchen mit deiner Inode (falls Dateien noch vorhanden):
Code: Alles auswählen
debugfs -R 'stat /Pfad/datei.txt' /dev/sda5
Oder kennst du vielleicht gar nicht mehr den Dateinamen, da du die Datei versehentlich gelöscht hast? Oder hast du die Datei nicht gelöscht aber kennst den Namen nicht. Aber in der jetzigen Beschreibung macht es eher weniger Sinn.
Dateinamen suchen mit deiner Inode (falls Dateien noch vorhanden):
Code: Alles auswählen
find /Pfad -inum 527332
- habakug
- Moderator
- Beiträge: 4314
- Registriert: 23.10.2004 13:08:41
- Lizenz eigener Beiträge: MIT Lizenz
Re: Umleitung von ls -i in zweiten Befehl
Hallo!
Debugfs gibt nimmt sehr wohl eine Inode als <filespec>:
Code: Alles auswählen
# ino=`ls -i /path/ | awk -F\ '{ print $1 }'`; debugfs -R 'stat <$ino>' /dev/sda5
Gruss, habakugman debugfs hat geschrieben:[...]The filespec argument may be specified in two
forms. The first form is an inode number surrounded by angle brackets,
e.g., <2>. The second form is a pathname;[...]
stat filespec
Display the contents of the inode structure of the inode file-
spec.[...]
Re: Umleitung von ls -i in zweiten Befehl
Bitte never ever versuchen, ls zu parsen, das Ding ist fuer interaktive Bedienung gedacht und nicht fuer maschinelle Auswertung. Das explodiert einem sonst irgendwann, wenn wegen locale oder warumauchimmer die Spalte eben nicht da ist, wo man sie erwartet.
Stattdessen gibt es stat(1), was oben bereits angesprochen, aber verwechselt wurde. Zur Verdeutlichung: Der Parameter debugfs frisst u.a. auch den internen Befehl "stat <{inode}>", wobei {inode} eine numerische Inode ist.
Gesucht ist also etwas wie-- wobei {file} fuer eine Datei im Dateisystem {dev} steht. Konkretes Beispiel:(der hintere Teil bestimmt, wo das root-Dateisystem liegt.)
Es fragt sich allerdings, ob der TE nicht einfach stat(1) sucht, insbesondere die unterschiedlichen Zugriffs-/sonstewas-Zeiten bekommt man damit schon heraus.
Gruss Cae
Stattdessen gibt es stat(1), was oben bereits angesprochen, aber verwechselt wurde. Zur Verdeutlichung: Der Parameter debugfs frisst u.a. auch den internen Befehl "stat <{inode}>", wobei {inode} eine numerische Inode ist.
Gesucht ist also etwas wie
Code: Alles auswählen
# debugfs -R "stat <$(stat -c %i {file})>" {dev}
Code: Alles auswählen
# debugfs -R "stat <$(stat -c %i /etc/passwd)>" "$(mount | awk '"/"==$3{print$1}')"
Es fragt sich allerdings, ob der TE nicht einfach stat(1) sucht, insbesondere die unterschiedlichen Zugriffs-/sonstewas-Zeiten bekommt man damit schon heraus.
Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier
- habakug
- Moderator
- Beiträge: 4314
- Registriert: 23.10.2004 13:08:41
- Lizenz eigener Beiträge: MIT Lizenz
Re: Umleitung von ls -i in zweiten Befehl
Hallo!
Ja, "ls" ist wohl nicht so schön. Ich weiss aber ja gar nicht, was hier gewollt ist. Aber das
funktioniert nicht, wenn die Datei z.B. in einem extra gemounteten Homeverzeichnis liegt. Das
vielleicht schon.
Gruss, habakug
Ja, "ls" ist wohl nicht so schön. Ich weiss aber ja gar nicht, was hier gewollt ist. Aber das
Code: Alles auswählen
mount | awk '"/"==$3{print$1}'
Code: Alles auswählen
df /home/user/myfile.txt | awk '{getline; print $1}'
Gruss, habakug
-
- Beiträge: 174
- Registriert: 29.04.2012 22:55:06
---------------------------------------------------------------------------------------------------------------------------------
Zuletzt geändert von schorschruffneck am 06.06.2014 10:05:59, insgesamt 1-mal geändert.
Re: Umleitung von ls -i in zweiten Befehl
Und ich muss nochmal draufkloppen auch hier ist stat(1) besser als das eher auf interaktive Benutzung ausgelegte df(1):Das muss man allerdings noch per awk oder so nachbearbeiten, um das eigentliche Device rauszubekommen (bisher hat man nur den Mountpunkt):Eine komplette Shellfunktion saehe also so aus:(natuerlich ungetestet...)
Gruss Cae
Code: Alles auswählen
$ stat -c %m /etc/passwd
/
$ stat -c %m /boot/grub/
/boot
$
Code: Alles auswählen
$ awk -vmount="$(stat -c %m /boot/grub/)" 'mount==$2&&/^\//{print$1}' /etc/mtab
/dev/sda1
$
Code: Alles auswählen
debugfs_path() {
[ 1 -ne $# ] && return 1 # exactly one argument
file="$1"
mount="$(stat -c %m $file)"
inode="$(stat -c %i $file)"
dev="$(awk -vmount=$mount 'mount==$2&&/^\//{print$1}' /etc/mtab)"
debugfs -R "stat <$inode>" "$dev"
}
Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier