Jens Nixdorf schrieb:
Am Dienstag, 28. Dezember 2004 15:13 schrieb Bernd Obermayr:
`nice -n 19 sudo dd if=$FILENAME of=/dev/hdc > /home/bla/dd.txt 2>&1 &`
Wozu die backticks?
Was sind backticks? Wenn Du nice meinst, das ist deshalb drin weil dd auf dem Zielrechner alles blockiert, da kann man kaum noch die Maus bewegen (ist ein Via Epia 533 MHz). Die da: ``` Die brauchst Du nur, wenn die Ausgabe eines Befehls in einer Variablen gespeichert werden soll oder als Argument eines anderen Befehls dient. Ist äquivalent zu $()
PID=$(echo `ps ax | grep '[o]f /dev/hdc' | awk '{print $1}'`)
*Grusel*
Ja ja, macht Euch ruhig lustig über einen Scripting-Noob...;)
*g*
FORTSCHRITT=$(echo `more /home/bla/dd.txt | grep 'transferred' | awk '{print $1}'`)
nochmal *Grusel* ;)
Warum echo? Da grep sowieso eine Ausgabe auf stdout erzeugt, ist das echo überflüssig.
Weil ich noch nicht dahinter gekommen bin, wann ich was brauche. Und da nehme ich immer das, was zuerst funktioniert, bis mir jemand sagt wie es besser geht ;)
;)
warum more? more ist ein Pager, also zum seitenweisen Lesen einer Datei gedacht.
Darauf zu kommen, daß grep direkt aus Dateien liest, ist mir wohl auch zu einfach gewesen.
2) Wo kommt $FILE_GROESSE her?
Wird vorher im Script aus dem Image gelesen.
Ok
rm -f /home/bla/dd.txt touch /home/bla/dd.txt sudo kill -USR1 $PID FORTSCHRITT=$(echo `more /home/bla/dd.txt | grep 'transferred' | awk '{print $1}'`)
1) /home/bla/dd.txt hast Du doch eben gelöscht, also ist die doch hier leer?
Nein, mit dem kill-Befehl wird ja wieder was reingeschrieben. Ja, das ist wieder so eine Noob-Krücke... ;)
Jaaaaa ist ja schon gut ;) siehe andere Mail
2) siehe oben, und wenn Du eine Befehlsfolge mehrmals brauchst, mach ne Function draus.
Das ist 'ne Idee.
Ich vermute, dass der sudo-Aufruf fehlerhaft ist und deswegen $PID nichts oder eine Fehlermeldung enthält.
Aber warum 'nur' in zwei Dritteln aller Durchläufe?
Das steht dann u.U in /home/bla/dd.txt Bau das Script mal wie vorgeschlagen um, dann sehen wir weiter.
Und wenn Du den Aufruf von dd in ein Script schreibst? --------8<-------- #!/bin/bash # script mydd # Syntax: mydd FILENAME dd if=$1 of=/dev/hdc > /home/bla/dd.txt 2>&1 & echo $! --------8<--------
Dann PID=$( nice -n 19 sudo mydd $FILENAME )
Was ändert der Aufruf durch ein zweites Script statt dem Direkt-Aufruf? (Ernsthafte Frage)
1) Nun, für mich sieht das so aus, als ob Du in /etc/sudoers dd generell freigegeben hast. Das ist ein Risiko, dd ist ein gefährlicher Befehl. 2) Es ist zwar unwahrscheinlich, dass das passiert, aber die Abfrage mittels ps liefert _alle_ Prozessezeilen die 'of /dev/hdc' enthalten. 3) Bei meinem Vorschlag erhältst Du genau die PID von dem aktuellen dd. Wie Du richtig schreibst, liefert $! die PID von sudo, beim Aufruf mittels eines eigenen Scripts kann ich die PID explicit rausfischen. Es ist nötig sudo von dd zu trennen. Ich weiss keine andere Möglichkeit das zu erreichen. -- Gruss Bernd