PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Killerscript?


Rhönpaulus
2004-01-26, 13:20:58
BITTE NICHT AUFÜHREN !
-------------------------------------
#!/bin/bash

if [ -d $1 ]; then
for i in $1/*; do
./$0 $i
done
else
mv $1 tmp
cat tmp | tr -d \\r > $1
rm tmp
fi
--------------------------------------
kann mir bitte jemand sagen was diese wenigen zeilen bewirken?

ich habe sie in verbindung mit der installation von faac ausgeführt so wie in der readme beschrieben.
danach funktionierte die konsole nicht mehr und nun kann ich linux nicht mehr booten (/etc/rc.d nicht gefunden).
die rescueconsole von der installations-cd kann ich nicht chmoden,-> permission denied.

was ist nur passiert?

Nagilum
2004-01-26, 13:32:01
Blödsinn

Wenn du ein Verzeichnis übergibst, dann entfernt es rekursiv aus allen Dateien die Carriage Returns (\\r). Übergibst du nur eine Datei, dann wird nur diese Datei gesäubert.

So in etwa... Glaub ich... Ohne Gewähr. :)

BananaJoe
2004-01-26, 13:40:47
Kann ich damit mein Linux ernsthaft verletzen? :D

Harleckin
2004-01-26, 13:47:25
Ich versuch es mal..

#!/bin/bash

# ist das übergebene Argument eine Verzeichnis?
if [ -d $1 ]; then
# an dieser Stelle geht die Rekursion(?) los
for i in $1/*; do
# jetzt wird es haarig, rekursiv wird das Script selbstaufgerufen.. als Argument eine Datei/Verzeichnis
./$0 $i
done
# an höchster Ebene im Verzeichnisbaum angekommen..
else
mv $1 tmp
# diese Zeile ergibt einfach keinen Sinn! was versucht man hier zu entfernen?
cat tmp | tr -d \\r > $1
rm tmp
fi

Kann ich damit mein Linux ernsthaft verletzen? :D
Mit UID != 0 ausgeführt, ist es normalerweise keine Gefahr für das System an sich.

Lokadamus
2004-01-26, 14:09:36
mmm...

Ich versuch es mal ;D:
#!/bin/bash

# Hier steht eine Bedingung drinne, siehe Harleckin
if [ -d $1 ]; then
for i in $1/*; do
./$0 $i
done

# wurde die Bedingung oben nicht erfüllt, wird dieser Teil abgearbeitet:
else
# das übergebene in eine Datei mit dem Namen tmp verschieben ($1 ist ein Platzhalter/ Variable):
mv $1 tmp
# mit cat zeigt man sich Dateiinhalte an, die Parameter dahinter kenne ich nicht :
cat tmp | tr -d \\r > $1
# mit rm wird etwas gelöscht, in diesem Fall soll wohl die erzeugte tmp-Datei gelöscht werden :
rm tmp
# Ende
fi

Nagilum
2004-01-26, 14:16:53
Hmm, was spricht gegen meinen Vorschlag?

Harleckin
2004-01-26, 14:21:58
Original geschrieben von Nagilum
Hmm, was spricht gegen meinen Vorschlag?
Klingt logisch, hast du es mal getestet?
Das Manual von "tr" gäbe dir ja recht.

Lokadamus
2004-01-26, 16:29:20
mmm...

Nagilum
Jup, kommt hin, was du sagst:
cat tmp | tr -d \\r > $1
Cat würde die Datei auflisten, sendet die Ausgabe aber gleich an $1, womit das ursprüngliche File ohne die Carrige Return übrig bleibt. Damit soll wohl ein Übertragungsfehler korrigiert werden (wenn Daten im ASCII-Modus zwischen Unix und Windows ausgetauscht werden, gibs so ein Problem mit den Carrige Returns, wenn ich mich richtig erinnere), so verstehe ich das Teil zumindest ... da danach das TMP- File überflüssig ist, wird es gelöscht ... ich gut deutsch heute wieder ...

Rhönpaulus
2004-01-26, 19:31:58
danke für eure beiträge.
ich versuche nur herauszufinden ob ich den schaden irgendwie wieder beheben kann oder neu installieren muß.
mein system fährt ja nicht mehr hoch.
hier nochmal was mir passiert ist:
http://sourceforge.net/projects/faac/
-> paket faad_src_20020104.tar.gz
ich habe es entpackt nach /usr/local/src.
-----README------------------------------------
~
COMPILING

Compiling under Unix:
Taken from a message by ed at the audiocoding.com forum. Thanks!

the linux tools are munted by the CR/LFs all over the place ... to make
then happy once again, all lines need to be terminated by LF alone

how to sort this problem ?, well stick the following script into a file,
unzip faad, run the script on the faad directory (it'll recursively fix
all files), then continue with sh bootstrap ....


#!/bin/bash

if [ -d $1 ]; then
for i in $1/*; do
./$0 $i
done
else
mv $1 tmp
cat tmp | tr -d \\r > $1
rm tmp
fi

----------------------------------------------

im quellcode gibt es kein configure-script und kein makefile.
also habe ich eine datei im faad-verz. erstellt,die paar zeilen script eingefügt und die datei ausführbar gemacht.
zum schluß habe ich das script als root gestartet.

seit dem startet mein linux nicht mehr.
nachdem der kernel hochgefahren ist kommen folgende fehlermeldungen:
.....
INIT: Version 2.8.4 booting
INIT: cannot execute "/etc/rc.d/rc.sysinit"
INIT: Entering runlevel:5
INIT:cannot execute "/etc/rc.d/rc"
INIT ....
.............
letzte meldung:
INIT:no more processes left in this runlevel

danach gehts nicht mehr weiter,es kommt auch kein promt.

was würdet ihr an meiner stelle versuchen?
ich da noch was geradezubiegen?

ethrandil
2004-01-26, 22:25:33
Ich würd z.b. mal ein anderes system booten (knoppix), und gucken was so auf den Festplatten passiert ist, was noch da ist, indem ich die mal mounte.

Rhönpaulus
2004-01-27, 12:31:59
es gab keinen datenverlust,die sysinitscripts waren vorhanden.
ich habe nun RH9 drüberinstalliert ohne das alte system zu löschen.
vorher habe ich noch die wichtigsten configdateien gesichert.
nun läuft alles wieder,glück gehabt.
ich vermute das es irgendwie an veränderten dateiattributen gelegen haben muß so das die sysinitscripts nicht mehr ausführbar waren.
mich würde trotzdem interessieren was dieses kleine"killerscript" auf meinem rechner angestellt hat.
in zukunft werde ich nicht mehr leichtsinnig als root solche dubiosen scripte ausführen.