Brauche Hilfe bei folgendem Skript..

Freie Themenwahl.

Moderator: Moderator

Brauche Hilfe bei folgendem Skript..

Beitragvon q00 » 02.11.2008, 17:02

Hi Leute

Ich arbeite gerade an einem Skript, welches meine verschlüsselten Partitionen:

erst einhängen...
Code: Alles auswählen
sudo cat key.txt | sudo cryptsetup luksOpen /dev/sd<Partition> <Name>
sudo mount /dev/mapper/<Name> /mnt


..und nach 15 min. ohne lese-/schreibzugriff wieder aushängen soll:
Code: Alles auswählen
sudo umount /mnt
sudo cryptsetup luksClose <Name>


Die beiden Skripte alleine funktionieren schonmal gut, nun fehlt mir noch der Zwischenteil mit den 15 min.

Hat jemand eine Idee wie ich das machen kann?

Gruß
q00
<void> "bei dem täter sichergestellte computer enthielten sogenannte freie software. laut experten handelt es sich dabei um kommunistisches propagandamaterial" (german-bash.org)
Benutzeravatar
q00
 
Beiträge: 96
Registriert: 07.07.2007, 12:52
Wohnort: Bremen

Beitragvon Mark » 02.11.2008, 20:14

Ich glaube mit dem Befehl "sleep" könntest du das machen
also nach dem sleep kommen Sekunden. So z.B.:
Code: Alles auswählen
sleep 25

nach 25 Sekunden würden die nachfolgenden Befehle ausgeführt werden.
http://www.traber-wintergarten.de/
Benutzeravatar
Mark
 
Beiträge: 746
Registriert: 30.09.2006, 01:23
Wohnort: Fulda
Lizenz: GPL
Distribution: Ubuntu

Beitragvon fiesling » 02.11.2008, 20:22

Sleep würde aber nach starten des Skriptes ausgeführt. Somit würde das Skript alles dicht machen nach Zeit X auch wenn Daten auf dei Platte geschrieben werden.

Einzigste Möglichkeit die ich sehe, du musst ein Skript immer aktiv laufen lassen welches ermittelt alle 1-2min ob Daten verändert worden sind. Aber dies funktioniert nur wenn du Daten auf die Platte schreibst aber nicht beim lesen....
i686 Intel(R) Core(TM)2 Duo CPU T5450 @ 1.66GHz GenuineIntel GNU/Linux; WINE- 1.1.33; OpenGL version string: 3.0.0 NVIDIA 190.42;
fiesling
 
Beiträge: 127
Registriert: 28.01.2008, 21:53
Wohnort: Gütersloh

Beitragvon Mark » 03.11.2008, 15:01

[quote=fiesling,index.php?page=Thread&postID=31860#post31860]Sleep würde aber nach starten des Skriptes ausgeführt. Somit würde das Skript alles dicht machen nach Zeit X auch wenn Daten auf dei Platte geschrieben werden.

Einzigste Möglichkeit die ich sehe, du musst ein Skript immer aktiv laufen lassen welches ermittelt alle 1-2min ob Daten verändert worden sind. Aber dies funktioniert nur wenn du Daten auf die Platte schreibst aber nicht beim lesen....[/quote]
ah ok, das hatte ich falsch verstanden.
http://www.traber-wintergarten.de/
Benutzeravatar
Mark
 
Beiträge: 746
Registriert: 30.09.2006, 01:23
Wohnort: Fulda
Lizenz: GPL
Distribution: Ubuntu

Beitragvon Zappo » 03.11.2008, 21:37

Ich hatte ja gestern schon im Channel etwas geschrieben, aber hab es mir nochmal durch den Kopf gehen lassen. Hier aber trotzdem erstmal alle Vorschläge dir mir so eingefallen sind (damit auch andere etwas davon haben).

  1. Idee ständiges aufrufen von lsof /mnt. Dies hat den Nachteil, dass es sehr CPU-lastig ist, weil man es ja recht häufig (sinnvollerweise alle 0.5 Sekunden oder häufiger) aufrufen muss, da die Dateioperationen verdammt schnell sind. Damit entfällt das.
  2. FAM (bzw. GAMIN) wäre da noch etwas, wobei GAMIN in der Hinsicht schöner ist, dass es Python bindings hat. Allerdings bin ich mir nicht ganz sicher, ob man damit auch Lesezugriffe mitgeteilt bekommt.
  3. Noch ein Stufe runter (also unter FAM) und inotify nutzen. Das läuft wunderbar und bekommt definitiv auch Lesezugriffe mit. Auch hierfür gibt es eine Python-API und sogar ein entsprechendes Testprogramm, dass man dann als Ausgangspunkt nutzen könnte. Ich hab das soeben auch mal getestet und es bekommt auch alle Zugriffe in Unterverzeichnissen mit, sodass dies die erfolgversprechendste Lösung sein wird.
(Falls sich jemand wundert, dass ich auf Python-API hinweise; der OP kann nicht programmieren [was aber für dieses Problem notwendig ist] und Python ist nunmal eine schöne Einsteigersprache.)
[img]http://www.boincstats.com/signature/user_6724.gif[/img]
Benutzeravatar
Zappo
 
Beiträge: 65
Registriert: 26.03.2008, 19:48
Lizenz: CC
Distribution: ArchLinux
Kernelversion: neueste

Beitragvon Whistle » 04.11.2008, 15:58

Mit inotify scheint das recht simpel zu sein.

Du lässt durch
Code: Alles auswählen
inotifywait -r  -m /mnt/plattenmountpoint/ > zugriffslog

die Zugriffe registrieren und in eine die Datei zugriffslog schreiben.

Mit deinem Skript, brauchst du dann nur noch die Dateigröße z.B jede Minute mit der davor ausgelesenen vergleichen. Sollte sich die Dateigröße für 15 Intervalle (Intervall = 1 Minute) nicht ändern, kann die Platte ausgehängt werden.

So würde ich das auf jede Fall versuchen.

Statt der Dateigröße, gibt es wahrscheinlich noch eine bessere Lösung (Prüfsumme etc.), allerdings kann ich dir nicht sagen wie es dann um die Perfomance des Skriptes steht.

Müsstest du einfach mal testen.
Benutzeravatar
Whistle
 
Beiträge: 801
Registriert: 02.11.2006, 22:34

Beitragvon Whistle » 08.11.2008, 14:06

Hier hab ich mal etwas für dich gebastelt. Allerdings musst du den mount und umount Teil ändern und den Config Teil an dein System anpassen.
http://nopaste.linuxgaming.de/9c4fdbf8f7.html

Im Test System ( Ubuntu 8.10 ) klappt es reibungslos.

PS: Du musst die "inotify-tools" installiert haben
Code: Alles auswählen
sudo apt-get install inotify-tools
Benutzeravatar
Whistle
 
Beiträge: 801
Registriert: 02.11.2006, 22:34

Beitragvon q00 » 08.11.2008, 15:52

[quote=Whistle,index.php?page=Thread&postID=31962#post31962]Hier hab ich mal etwas für dich gebastelt. Allerdings musst du den mount und umount Teil ändern und den Config Teil an dein System anpassen.
http://nopaste.linuxgaming.de/9c4fdbf8f7.html

Im Test System ( Ubuntu 8.10 ) klappt es reibungslos.

PS: Du musst die "inotify-tools" installiert haben
Code: Alles auswählen
sudo apt-get install inotify-tools
[/quote]
Wow, thx :thumbup:

Ich habe "time=3" gestellt um es erstmal mit 3 Minuten zu testen. Die Konsole gibt mir nun folgendes aus:
[: 43: ==: unexpected operator
[: 43: ==: unexpected operator
[: 43: Illegal number: $[3+1]


Ist es eigentlich möglich dass das Skript im Hintergrund läuft? Also das Terminal sich wieder schließt, nachdem sudo abgefragt wurde.
<void> "bei dem täter sichergestellte computer enthielten sogenannte freie software. laut experten handelt es sich dabei um kommunistisches propagandamaterial" (german-bash.org)
Benutzeravatar
q00
 
Beiträge: 96
Registriert: 07.07.2007, 12:52
Wohnort: Bremen

Beitragvon Whistle » 08.11.2008, 20:04

Ist es eigentlich möglich dass das Skript im Hintergrund läuft? Also das Terminal sich wieder schließt, nachdem sudo abgefragt wurde.

Klar. Du kannst entweder dein Skript mit angehängtem "&" aufrufen. Also

Code: Alles auswählen
./skript &

oder du schreibst dir ein zweites Skript, welches lediglich dein erstes Skript mit angehängtem "&" aufruft. So ersparst du dir das Tippen des "&" Zeichens :D



Das mit der Fehlermeldung kommt mir komisch vor, da ich das Skript hier getestet habe. Vllt ist beim kopieren was schief gelaufen oder so. Kannst du dein Skript hier einfach mal so wie du es auf der Platte hast hochladen??
Benutzeravatar
Whistle
 
Beiträge: 801
Registriert: 02.11.2006, 22:34

Beitragvon q00 » 09.11.2008, 00:04

[quote=Whistle,index.php?page=Thread&postID=31972#post31972]Das mit der Fehlermeldung kommt mir komisch vor, da ich das Skript hier getestet habe. Vllt ist beim kopieren was schief gelaufen oder so. Kannst du dein Skript hier einfach mal so wie du es auf der Platte hast hochladen??[/quote]

[url=http://nopaste.linuxgaming.de/d5977dfa08.html]http://nopaste.linuxgaming.de/d5977dfa08.html[/url]

Die "$HOME/logs/" musste ich auf "$HOME/logs" ändern, weil Ubuntu sonst gemeckert hat.
Ansonsten habe ich nur die wichtigen Stellen geändert. "##wait some time" und "#the end ;)" blieben unberührt.
<void> "bei dem täter sichergestellte computer enthielten sogenannte freie software. laut experten handelt es sich dabei um kommunistisches propagandamaterial" (german-bash.org)
Benutzeravatar
q00
 
Beiträge: 96
Registriert: 07.07.2007, 12:52
Wohnort: Bremen

Beitragvon Whistle » 09.11.2008, 04:03

Eigenartig. Ich kann da nichts ungewöhnliches erkennen. Ubuntu sollte auch gar nicht meckern bei den Pfaden. Du musst natürlich darauf achten, dass die gewählten Ordner auch existieren. Sprich "/home/deinUserName/logs/" muss existieren, sowie "/media/datenplatte/". In Reihe 43 ist auch nicht einmal ein Vergleich der Falsch sein könnte.

Bei mir lief das Skript auf jeden Fall fehlerfrei. :S
Benutzeravatar
Whistle
 
Beiträge: 801
Registriert: 02.11.2006, 22:34

Beitragvon wakeup » 09.11.2008, 15:16

also aus meiner sicht sind da einfach fehler im code...

Code: Alles auswählen
[ "$previous" == "$var" ]

man test, das == hat da einfach nix zu suchen! (siehe -eq)

Code: Alles auswählen
$[$i+1]

wenn ich das hier richtig verstehe ist das was du willst nach bash syntax entweder $($i+i) ODER `$1+1`
Benutzeravatar
wakeup
 
Beiträge: 566
Registriert: 28.04.2007, 22:56
Wohnort: bonn

Beitragvon Zappo » 09.11.2008, 16:07

Um es kurz zu machen. Beide Einwände sind falsch.

Sowohl der Test auf Gleichheit mittels == als auch $[$i+1] als Ersatz von $(($i+1)) -- was du wahrscheinlich mit $($i+1) bzw. `$i+1` meintest (und im übrigen auch sehr interessantes Verhalten in diesem Fall verursachen würde) -- sind in bash machbar und korrekt. Allerdings sollte man bei == auch [[ ]] als Klammern verwenden, um klar zu machen, dass man das builtin von bash verwendet und nicht das Programm "[" (naja, linkt ja auf test).
[img]http://www.boincstats.com/signature/user_6724.gif[/img]
Benutzeravatar
Zappo
 
Beiträge: 65
Registriert: 26.03.2008, 19:48
Lizenz: CC
Distribution: ArchLinux
Kernelversion: neueste

Beitragvon Whistle » 09.11.2008, 16:44

Das mit den Klammern wusste ich nicht. Danke für die Hinweise. Ich bin aber immer noch ein wenig verdutzt, dass das Skript bei mir ohne Fehler läuft und bei q00 nicht.

Und um auf das mit "-eq" einzugehen. Das gilt lediglich bei arithmetischen Vergleichen. Da ich aber Strings vergleiche (die Ausgabe von `ls`), würde ein "-eq" einen Fehler verursachen.
Benutzeravatar
Whistle
 
Beiträge: 801
Registriert: 02.11.2006, 22:34


Zurück zu Alles was euch den Tag über bewegt...

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste