Hallo Zusammen, (wie) kann man feststellen auf welchem gemounteten Filesystem/Partition eine Datei oder ein Verzeichnis liegt (ext2) ? Bei mc funktioniert die Angabe von Device, Filesystem mit "Listing mode: Info" bei/unterhalb symlinks auf Verzeichnisse eines anderen fs's nicht mehr. Ein Befehl (also: prog/script) für die konsole wäre mir eh lieber. Mir fehlt leider der Ansatz für ein script. apropos & rpm -ql e2fsprogs konnten mir leider nichts bieten - ihr vielleicht? Gerne auch RTFM - aber welche(s) ?-) cu Juergen
Hallo, On Fri, 15 Feb 2002, Juergen Descher wrote:
(wie) kann man feststellen auf welchem gemounteten Filesystem/Partition eine Datei oder ein Verzeichnis liegt (ext2) ?
==== on_which_fs.sh (spontan hingetippt, minimal getestet) ==== #!/bin/sh dir="$1" test -e "$dir" || { echo "No such file or directory" >&2; exit 2; } test -d "$dir" || dir=`dirname "$dir"` cd $dir || exit 1 dir=`pwd -P` mount=`mount` while ! echo "$mount" | grep " $dir "; do dir=`dirname "$dir"` done ==== beisskante ==== Fehlt ne noch die Behandlung von symlinks (ggfs. mit Option)... Sollte aber als Anregung reichen... -dnh -- "One of them went to the local Emergency Room with about 1/4 inch of a 3-inch nail protruding from his forehead. He was lucky: it hit him in the brain, and that was something he didn't use." -- Mike Andrews
Quoting David Haller
On Fri, 15 Feb 2002, Juergen Descher wrote:
(wie) kann man feststellen auf welchem gemounteten Filesystem/Partition eine Datei oder ein Verzeichnis liegt (ext2) ?
==== on_which_fs.sh (spontan hingetippt, minimal getestet) ==== [...]
ja es kann soo einfach sein wenn man sich mit den Befehlen wie z.B.: dirname, pwd -P auskennt :))
Fehlt ne noch die Behandlung von symlinks (ggfs. mit Option)... Sollte aber als Anregung reichen...
Danke! In der zwischenzeit habe ich ja doch noch eine Idee gehabt, stat von C ist mir eingefallen, gibts ja auch in perl. Auch schnell getippt und nicht so elegant aber ich poste es mal um noch einen der vielen Wege nach Rom zu zeigen. Ist Linux mit seinen vielen Werkzeugen nicht schön ?-) #!/usr/bin/perl -w # USAGE: lsfdev [FILE] [DIR] ... @am=split(/\n/, `mount`); # get mounted filesystems foreach(@am) { if( $_ =~ /^\/dev\// ) { # we are interested in devices only @tmp = split(/ /,$_); (($dev) = (stat($tmp[2]))[0]) # get the device (numeric) || die "$tmp[2]: stat error"; $h{$dev} = [$tmp[0],$tmp[2]]; # make a new hash-entry for # the numeric device # [0] -> alphanumeric device # [1] -> mountpoint } } while ($#ARGV >= 0) { my $file = shift(@ARGV); (($dev) = (stat($file))[0]) # get device of file (numeric) || die "$file: stat error"; print "$file:\n"; print "device: $h{$dev}[0]\n"; # use the hasharray for output print "mount point: $h{$dev}[1]\n"; } cu Juergen
Hallo, On Sat, 16 Feb 2002, Juergen Descher wrote:
Quoting David Haller
(Fri, 15 Feb 2002, 18:59:42): ==== on_which_fs.sh (spontan hingetippt, minimal getestet) ==== [...]
ja es kann soo einfach sein wenn man sich mit den Befehlen wie z.B.: dirname, pwd -P auskennt :))
*g* [..]
In der zwischenzeit habe ich ja doch noch eine Idee gehabt, stat von C ist mir eingefallen, gibts ja auch in perl. Auch schnell getippt und nicht so elegant
Wieso, sieht doch gut aus. Allerdings ist die Startzeit ein wenig hoch, aber da hilft perlcc... Mit ein wenig Nachhilfe beim linken klappt's hier, das binary ist dann ca. 50 KB und laeuft etwa genauso schnell wie mein (unvollstaendigeres) shell-script. Als perlscript braucht's etwa 5mal solang, bis eben das ganze perl geladen ist (bzw. das script "interpretiert" ist, dauert eben ein wenig (was in einem for ...; do ...; done oder bei einem find .... -exec weniger gut ist ;) Wollt's nur erwaehnen, den Loesungsansatz find ich gut :) -dnh PS: das script in .pl umbenennen vor dem kompilieren ;) perlcc -gen -sav -C lsfdev.c lsfdev.pl gcc -c $CFLAGS -I/usr[/local]/lib/perl5/<version>/[arch]-linux-.../CORE -o lsfdev.o lsfdev.c gcc $CFLAGS $LDFLAGS -lcrypt -ldl -lperl -lDynaLoader -o lsfdev lsfdev.o (und da hatte ich Probleme, ld fand libDynaLoader nicht, obwohl in /usr/local/lib, naja, mit -L/usr/local/lib/perl5/..../ gings ;) -- Das Schlimme am Pessimismus ist eigentlich, meistens Recht zu bekommen. -- Michael Olbricht in dasr
Hallo David,
Quoting David Haller
Allerdings ist die Startzeit ein wenig hoch, aber da hilft perlcc... Hab ich noch nie genutzt :)
perlcc konnte ich aber nur folgendermaßen aufrufen: $ perlcc -o c_lsfdev -S lsfdev.pl
Mit ein wenig Nachhilfe beim linken klappt's hier, ... Der Aufruf von gcc ging erstenmal daneben, da libDynaLoader nicht vorhanden. Zumindest kein *.so file.
$ perl --version This is perl, v5.6.1 built for i586-linux Hab's also in einem Rutsch erstellt.
... das binary ist dann ca. 50 KB 831 KB :(
und laeuft etwa genauso schnell wie mein (unvollstaendigeres) shell-script. Als perlscript braucht's etwa 5mal solang, bis eben das ganze perl geladen ist (bzw. das script "interpretiert" ist, dauert eben ein wenig (was in einem for ...; do ...; done oder bei einem find .... -exec weniger gut ist ;) Ich muß sagen daran habe ich gar nicht gedacht. Habe also mal mit time gemessen. Sieht bei mir dennoch anders aus:
$ pp="on_which_fs.sh c_lsfdev lsfdev.pl" $ export dir="/home/jhd-72/DOWNLOAD/src" $ (cd $dir; echo -n "files:"ls|wc -w; for i in $pp; do echo "$i:"; time for j in `ls $dir`;do $i $j >/dev/null 2>&1;done; echo; done ) [ eine Zeile ] files: 67 on_which_fs.sh: real 0m18.925s user 0m11.700s sys 0m5.200s c_lsfdev: real 0m6.728s user 0m4.340s sys 0m1.710s lsfdev.pl: real 0m6.931s user 0m4.510s sys 0m1.710s Für /bin gibts dies: files: 81 on_which_fs.sh: real 0m23.097s user 0m14.840s sys 0m5.790s c_lsfdev: real 0m7.963s user 0m5.370s sys 0m1.840s lsfdev.pl: real 0m8.341s user 0m5.590s sys 0m1.880s Wundert mich. Messe ich da falsch? Oder ist das die geniale Speicherverwaltung von linux? Rechner: AMD 400 K6, 192MB Ein binary erstellen bringt anscheinend nix - oder?
Wollt's nur erwaehnen, den Loesungsansatz find ich gut :) Streicheleinheiten tuen doch sooo gut :)
cu Juergen
-- Das Schlimme am Pessimismus ist eigentlich, meistens Recht zu bekommen. -- Michael Olbricht in dasr -- Sven Glückspilz: Hägar warum bist Du so ein Pessimist? Hägar: Wieso Pessimist? Ich bin doch Realist!
Hallo, On Sun, 17 Feb 2002, Juergen Descher wrote:
Quoting David Haller
(Sat, 16 Feb 2002, 21:52:44): [...] Allerdings ist die Startzeit ein wenig hoch, aber da hilft perlcc... Hab ich noch nie genutzt :)
perlcc konnte ich aber nur folgendermaßen aufrufen: $ perlcc -o c_lsfdev -S lsfdev.pl
Mit ein wenig Nachhilfe beim linken klappt's hier, ... Der Aufruf von gcc ging erstenmal daneben, da libDynaLoader nicht vorhanden. Zumindest kein *.so file.
$ perl --version This is perl, v5.6.1 built for i586-linux
Hab's also in einem Rutsch erstellt.
... das binary ist dann ca. 50 KB 831 KB :(
Ah, dann ist's wohl zumindest teilweise statisch gelinkt... braucht halt mehr Platz...
Ich muß sagen daran habe ich gar nicht gedacht. Habe also mal mit time gemessen. Sieht bei mir dennoch anders aus:
Ich hab's nur (zuerst) "einfach" gemacht, da war das perlscript wie erwaehnt ca. 5mal langsamer...
on_which_fs.sh: real 0m18.925s c_lsfdev: real 0m6.728s lsfdev.pl: real 0m6.931s
Wundert mich. Messe ich da falsch? Oder ist das die geniale Speicherverwaltung von linux?
Nein. Das ist das caching von perl ;) Das hab ich nicht beachtet. Es kommt halt drauf an, wie man's aufruft, das .pl braucht eben das erste Mal lange, das binary laeuft immer gleich schnell und das shell-script wird durch die Prozessaufrufe (grep) ausgebremst. War also von mir ein wenig zu kurz gedacht ;) -dnh -- Any site should be designed so that it's usable as a dead file tree with no server-side smarts. Any sort of active pages or search engines should be an add-on, not essential. -- Peter da Silva, in a.s.r.
Hallo Juergen,
From the keyboard of Juergen,
Hallo Zusammen,
(wie) kann man feststellen auf welchem gemounteten Filesystem/Partition eine Datei oder ein Verzeichnis liegt (ext2) ?
Bei mc funktioniert die Angabe von Device, Filesystem mit "Listing mode: Info" bei/unterhalb symlinks auf Verzeichnisse eines anderen fs's nicht mehr. Ein Befehl (also: prog/script) für die konsole wäre mir eh lieber.
Mir fehlt leider der Ansatz für ein script.
apropos & rpm -ql e2fsprogs konnten mir leider nichts bieten - ihr vielleicht? Gerne auch RTFM - aber welche(s) ?-)
man ls ls -i datei gibt die inode nummer aus. man mount mount zeigt dir alle gemounteten filesysteme. man tune2fs tune2fs -l device gibt dir einige nette Infos zu deinem ext2 filesystem. War es das? Oder meintest du was anderes? gruß Waldemar -- Are your questions smart enough? http://www.tuxedo.org/~esr/faqs/smart-questions.html If not: perl -e 'print $i=pack(c5,(41*2),sqrt(7056),(unpack(c,H)-2),oct(115),10);'
Hallo Waldemar,
Quoting Waldemar Brodkorb
War es das? Oder meintest du was anderes?
Mit ls -i etc habe ich meine Überlegungen auch begonnen. Leider ohne Erfolg. Hätte ich besser schreiben sollen - sorry! Siehe Mail von David und mein reply. cu Juergen
participants (3)
-
David Haller
-
Juergen Descher
-
Waldemar Brodkorb