Hallo,
On Tue, 17 Jun 2003, Dennis Heinz wrote:
Das System ist aufgesetzt/ausgetestet und wird nicht mehr verändert. Es dient
ausschliesslich dem Systemstart bis zum Prompt. Alle weiteren Vorgänge finden
auf anderen (austauschbaren) Partitionen statt. Lediglich root soll durch den
ro Zugriff geschützt werden.
Oder gibt es dafür andere Wege ? Ziel ist es, das System abschalten zu können,
ohne Schäden an root.
Ausprobieren! *g*
Erste Hinweise, woran es scheitern koennte liefert z.B. ein
lsof / | awk '$4 ~ /[0-9][w-]w?/{print $8;}'
Will man gleich die Dateinamen, wird's "etwas" komplizierter... *g*
Motto: "wir basteln uns die find-Argumente"
Denn fuer jeden Inode ein find aufzurufen ist, aehm, "etwas"
arg ineffektiv... *g*
==== [jup, das sollte C&P faehig sein] ====
{ \
echo -n "'(' -false"; \
lsof / \
| awk '$4 ~ /[0-9][wu-][wu]?/ { print $8; }' \
| while read i; \
do \
echo -n " -o -inum $i "; \
done; \
echo " ')' -print"; \
} | xargs find / -xdev
====
Wer wissen will, wie find dann eigentlich aufgerufen wird, der ersetze
"xargs find" durch "xargs echo find".
Das zu einem script zu erweitern ist im Prinzip trivial, die
Hauptarbeit ist, wie fast immer, die Argumente zu pruefen bzw. die
Fehlerbehandlung...
==== ~/bin/lsofnamesw [ACHTUNG: nur minimal getestet!!!] ====
#! /bin/sh
# lsofnamesw -- finds files open for write access, as reported by lsof
# and prints their names
#
# Copyleft (c)2003 David Haller
## ich hoffe mal, das script ist POSIX-sh konform -- falls ich einen
## "bashism" uebersehen habe, bitte ich um eine Rueckmeldung. Die
## 'ash' schluckt's jedenfalls...
usage() {
echo "Usage: `basename \"$0\"` MOUNTPOINT"
exit $1
}
error() {
echo "Error: $1"
echo
usage 1
}
if test $# -gt 1; then error "Too many arguments"; fi
if test $# -eq 0 || test "x$1" = "x-h" || test "x$1" = "x--help"
then
usage 0
fi
MNTPT="$1"
test "x$MNTPT" != "x/" && MNTPT="`echo \"$MNTPT\" | sed 's/\/$//'`"
test -d "$MNTPT" || error "'$1' is not a directory"
if cat /proc/mounts | awk '$2 == MNTPT { m=1; } \
END { if (m==1) exit 0; else exit 1; }' \
MNTPT="$MNTPT";
then
{
echo -n "'(' -false";
lsof "$MNTPT" \
| awk '$4 ~ /[0-9][wu-][wu]?/ { print $8;}' \
| while read i;
do
echo -n " -o -inum $i ";
done;
echo " ')' -print";
} | {
xargs find "$MNTPT" -xdev
} #2>/dev/null
else
error "$MNTPT is not a mountpoint or not mounted";
fi
====
Achso, ja, ich hab's mit Absicht so gemacht, dass jew. der echte
Mountpoint angegeben werden muss (egal ob in der fstab oder nicht).
Witzigerweise funktioniert das sogar mit ner FAT32-Partition, ob das
auch mit reiserfs funktioniert weiss ich nicht -- mangels reisswolffs
kann ich auch nicht testen, ob ein 'find <PATH> -inum INODENUM'
funktioniert ;)
HTH,
-dnh
PS: Ob /proc/mounts POSIX konform ist juckt mich erstmal nicht ;)
Naja, die Ausgabe von lsof ist vermutlich sowieso GNU/Linux
spezifisch...
--
Microsoft Vaccine 2000 is configuring your immune system. This may take a
few minutes. If your body stops responding for a long time and there is no
brain activity please die. Setup will continue after you are reborn.
-- Buzh, keeper of the moose.