Jowie
Anmeldungsdatum: 30. April 2019
Beiträge: Zähle...
|
Hallo Zusammen Ich habe einen Auftrag bekommen, SSD's automatisch mit einem Klick mit einem USB zu löschen via hdparm und blkdiscard in einem Script. Dabei soll beim einstecken des USB Sticks eine Abfrage kommen ob man die SSD wirklich löschen möchte. Dies sind die Befehle die das Löschen der SSD durchführen:
| sudo -i
hdparm -I /dev/sda
echo -n mem > /sys/power/state
hdparm --user-master u --security-set-pass Medium /dev/sda
hdparm time --user-master u --security-erase Medium /dev/sda
blkdiscard -o 0 /dev/sda
hdparm -I /dev/sda
|
So sieht bisher mein Script aus:
| #!/bin/sh
gnome-terminal -e 'sh -c "sudo -i | sudo hdparm -I /dev/sda | sudo echo -n mem > /sys/power/state;"'
|
Die anderen Befehle müssten auch noch irgendwie dazu ^^ Das Problem:
Irgendwie führt er dabei nur den sudo -i Befehl aus.
Dabei kommt diese Fehlermeldung: sh: 1: cannot create /sys/power/state: permission denied Hat jemand schon Erfahrungen damit gemacht? Entschuldigung für die schlechte Darstellung ^^ Bis jetzt habe ich es mit zwei USB Sticks gemacht, geht es auch mit einem? Danke im Voraus für eure Rückmeldungen ☺ Freundliche Grüsse
Jowie Bearbeitet von sebix: Bitte verwende in Zukunft Codeblöcke, um die Übersicht im Forum zu verbessern! Bearbeitet von rklm: Noch zwei Codeblöcke und Formatierung für Befehle inline.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12527
|
Herzlich willkommen hier im Forum! Jowie schrieb:
Irgendwie führt er dabei nur den sudo -i Befehl aus.
Das ist auch genau das, was Du dem Skript aufgetragen hast: es führt eine interaktive Shell als root aus (Zeile 1). Schau mal in die Manpage von sudo ! Wenn Du die interaktive Shell mit exit beendest, dann läuft das Skript weiter - allerdings mit den Berechtigungen des Nutzers, der es aufgerufen hat. Statt Zeile 1 müsstest Du das so machen: | test $(id -u) -eq 0 || exec sudo "$0" "$@"
|
Dabei kommt diese Fehlermeldung: sh: 1: cannot create /sys/power/state: permission denied
Wegen fehlender Berechtigungen, s.o. Als Variante zu oben mache ich gerne folgendes | # execute as root
test $(id -u) -eq 0 || exec sudo "DEBUG=$DEBUG" "$0" "$@"
# enable script debugging
test -z "$DEBUG" || set -x
|
Dann kann man Trace-Ausgabe der Shell über eine Umgebungsvariable einschalten über eine der beiden Möglichkeiten: | $ export DEBUG=y
$ dein-script
$ DEBUG=y dein-script
|
|
Jowie
(Themenstarter)
Anmeldungsdatum: 30. April 2019
Beiträge: 16
|
Danke für deine Antwort rklm Also ich habe jetzt mein Script so abgeändert. Hast du es so gemeint mit der ersten Zeile?
| #!/bin/sh
gnome-terminal -e 'sh -c "test $(id -u) -eq 0 || exec sudo "$0" "$@" | hdparm -I /dev/sda | echo -n mem > /sys/power/state;"'
|
Die Fehlermeldung war wieder genau gleich mit Permission denied. Die Berechtigungen sind richtig eingestellt. Die andere Variante mit dem Debugging verstehe ich nicht Ich glaube so ist das Falsch... Entschuldigung dass ich so schwer von Begriff bin 😬 . Bin eher etwas neu in Linux.
| #!/bin/sh
test $(id -u) -eq 0 || exec sudo "DEBUG=$DEBUG" "$0" "$@"
test -z "$DEBUG" || set -x
export DEBUG=y
autorun.sh
gnome-terminal -e 'sh -c "hdparm -I /dev/sda | echo -n mem > /sys/power/state;"'
|
Brauche ich hier zwei Scripts oder? Im autorun.sh ist das mit dem Debugging, die das andere Script mit meinen Befehlen ausführt? Hier hat er nichts gemacht
Danke im voraus für die Bemühungen
Gruss Jowie Bearbeitet von rklm: Korrektes Syntaxhighlighting. Bitte beachte Forum/Syntax! Du brauchst auch nicht die ganzen erzwungenen Zeilenumbrüche. Nutz einfach sinnvolle Absätze (zwei mal "Enter").
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12527
|
Jowie schrieb:
Die andere Variante mit dem Debugging verstehe ich nicht
Ist erst mal egal. Lass Dich dadurch nicht ablenken.
| #!/bin/sh
test $(id -u) -eq 0 || exec sudo "DEBUG=$DEBUG" "$0" "$@"
test -z "$DEBUG" || set -x
export DEBUG=y
autorun.sh
gnome-terminal -e 'sh -c "hdparm -I /dev/sda | echo -n mem > /sys/power/state;"'
|
Zeile 4 gehört da nicht hin. Die Variable musst Du vor dem Start des Skriptes setzen, wenn Du es debuggen willst.
Brauche ich hier zwei Scripts oder? Im autorun.sh ist das mit dem Debugging, die das andere Script mit meinen Befehlen ausführt?
Ich verstehe die Frage nicht. Ich weiß auch nicht, was in autorun.sh steht.
|
Jowie
(Themenstarter)
Anmeldungsdatum: 30. April 2019
Beiträge: 16
|
Entschuldigung für die verspätete Antwort... Ich hoffe nun, dass ich das Formatieren richtig mache ☺ Ich möchte, dass diese Befehle: 1
2
3
4
5
6
7
8
9
10
11
12
13 | sudo -i
hdparm -I /dev/sda
echo -n mem > /sys/power/state
hdparm --user-master u --security-set-pass Medium /dev/sda
hdparm --user-master u --security-erase Medium /dev/sda
blkdiscard -o 0 /dev/sda
hdparm -I /dev/sda
|
automatisch mit dem einstecken vom USB Stick ausgeführt werden. Ob das jetzt mit debuggen funktioniert oder nicht, ist mir egal^^ | #!/bin/sh
test $(id -u) -eq 0 || exec sudo "DEBUG=$DEBUG" "$0" "$@"
test -z "$DEBUG" || set -x
export DEBUG=y
autorun.sh
gnome-terminal -e 'sh -c "hdparm -I /dev/sda | echo -n mem > /sys/power/state;"'
|
Im autorun.sh steht das Script von oben. Mir ist aufgefallen, dass das keinen Sinn ergibt. Ich glaube, ich brauche zwei Scripts. Da dieser Befehl: echo -n mem > /sys/power/state;" den PC in den Hibernate Modus versetzt. Ich weiss halt nicht wohin mit den Befehlen die du geschrieben hast. | #!/bin/sh
gnome-terminal -e 'sh -c "test $(id -u) -eq 0 || exec sudo "$0" "$@" | hdparm -I /dev/sda | echo -n mem > /sys/power/state;"'
|
Müsste es nicht so funktionieren? Du meintest doch ich soll diesen Befehl: test $(id -u) -eq 0 || exec sudo "$0" "$@"
In die erste Zeile meines Scripts hinzufügen. Danke für deine Antwort Freundliche Grüsse Jowie
|
Jowie
(Themenstarter)
Anmeldungsdatum: 30. April 2019
Beiträge: 16
|
Hallo Users Ich wäre sehr dankbar wenn mir jemand helfen könnte. Danke und einen schönen Abend Jowie
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12527
|
Jowie schrieb:
Ich wäre sehr dankbar wenn mir jemand helfen könnte.
Wie ich schon geschrieben habe: um das ursprüngliche Problem zu lösen, ersetze Zeile 1 durch die eine Zeile, die ich vorgeschlagen habe. Ich verstehe allerdings nicht, warum Du den Rechner schlafen legen willst, wenn noch weitere Befehle ausgeführt werden sollen.
|
Jowie
(Themenstarter)
Anmeldungsdatum: 30. April 2019
Beiträge: 16
|
Hallo rklm Ich muss den PC in den Hibernate Modus setzen, damit er im "not frozen" zustand ist um diese Befehle ausführen zu können:
| hdparm --user-master u --security-set-pass Medium /dev/sda
hdparm --user-master u --security-erase Medium /dev/sda
|
Dein Befehl funktioniert nicht wenn ich ihn im Script durch sudo -i ersetzte:
| #!/bin/sh
gnome-terminal -e 'sh -c "test $(id -u) -eq 0 || exec sudo "$0" "$@" | hdparm -I /dev/sda | echo -n mem > /sys/power/state;"'
|
Ausser da ist etwas falsch... Gruss Jowie
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12527
|
Jowie schrieb:
Ich muss den PC in den Hibernate Modus setzen, damit er im "not frozen" zustand ist um diese Befehle ausführen zu können:
Wenn er hiberniert (heißt das so?), wie soll er dann überhaupt Befehle ausführen?
Dein Befehl funktioniert nicht wenn ich ihn im Script durch sudo -i ersetzte:
| #!/bin/sh
gnome-terminal -e 'sh -c "test $(id -u) -eq 0 || exec sudo "$0" "$@" | hdparm -I /dev/sda | echo -n mem > /sys/power/state;"'
|
Ausser da ist etwas falsch...
Das ist nicht das, was ich Dir geraten habe.
|
Jowie
(Themenstarter)
Anmeldungsdatum: 30. April 2019
Beiträge: 16
|
Ja dass weiss ich auch nicht wie das geht, darum bin ich ja hier. Wie meintest du es dann, mit deiner Befehlszeile? Das ist mein Ursprungs Script: Wo soll ich hier jetzt deine Befehlszeile hinzufügen? Ich weiss sudo -i ist falsch.
| #!/bin/sh
gnome-terminal -e 'sh -c "sudo -i | hdparm -I /dev/sda | echo -n mem > /sys/power/state;"'
|
Gruss Jowie
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12527
|
Jowie schrieb:
Das ist mein Ursprungs Script: Wo soll ich hier jetzt deine Befehlszeile hinzufügen? Ich weiss sudo -i ist falsch.
| #!/bin/sh
gnome-terminal -e 'sh -c "sudo -i | hdparm -I /dev/sda | echo -n mem > /sys/power/state;"'
|
Nee, das ursprüngliche Script steht hier.
|
Jowie
(Themenstarter)
Anmeldungsdatum: 30. April 2019
Beiträge: 16
|
Ouh man, dann hast du das anscheinend falsch verstanden... Diese Befehle Hier:
1
2
3
4
5
6
7
8
9
10
11
12
13 | sudo -i
hdparm -I /dev/sda
echo -n mem > /sys/power/state
hdparm --user-master u --security-set-pass Medium /dev/sda
hdparm --user-master u --security-erase Medium /dev/sda
blkdiscard -o 0 /dev/sda
hdparm -I /dev/sda
|
Muss ich in ein funktionierbares Script hineinfügen. Das Hier: ist bisher mein Script mit den Fehlenden Befehlen, da ich noch nicht mal die ersten zwei Befehle ausführen kann... | #!/bin/sh
gnome-terminal -e 'sh -c "sudo -i | hdparm -I /dev/sda | echo -n mem > /sys/power/state;"'
|
Gruss Jowie
|
Rechnungstore
Anmeldungsdatum: 18. Februar 2011
Beiträge: 157
|
Hi Jowie, eventuell habe ich dein Script und deinen Ansatz komplett missverstanden. Aber was bezweckst Du den mit den ganzen Pipes? Du möchtest den Output von sudo an hdparm pipen und dessen output an echo? Das erscheint mir alles nicht schlüssig.
|
Jowie
(Themenstarter)
Anmeldungsdatum: 30. April 2019
Beiträge: 16
|
Hallo ☺ Ich muss die Befehle automatisch irgendwie nacheinander ausführen^^. Mit dem Befehl & oder ; geht es nicht darum habe ich pipe versucht. 1
2
3
4
5
6
7
8
9
10
11
12
13 | sudo -i
hdparm -I /dev/sda
echo -n mem > /sys/power/state
hdparm --user-master u --security-set-pass Medium /dev/sda
hdparm --user-master u --security-erase Medium /dev/sda
blkdiscard -o 0 /dev/sda
hdparm -I /dev/sda
|
|
Rechnungstore
Anmeldungsdatum: 18. Februar 2011
Beiträge: 157
|
ok, das mit der pipe scheint aber auf jeden Fall nicht richtig zu sein. Kann dir auf die schnelle aber auch nicht sagen wie es richtig geht. Hätte gedacht mit ; würde es gehen. Versuch es doch mal mit ; und mit bash -c anstatt mit sh -c.
|