staging.inyokaproject.org

Script führt nachdem ich Root rechte habe nichts mehr aus.

Status: Ungelöst | Ubuntu-Version: Ubuntu 18.10 (Cosmic Cuttlefish)
Antworten |

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:

1
2
3
4
5
6
7
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:

1
2
#!/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 Team-Icon

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:

1
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

1
2
3
4
5
# 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:

1
2
3
$ 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?

1
2
#!/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.

1
2
3
4
5
6
#!/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 Team-Icon

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.

1
2
3
4
5
6
#!/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^^

1
2
3
4
5
6
#!/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.

1
2
#!/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 Team-Icon

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:

1
2
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:

1
2
#!/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 Team-Icon

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:

1
2
#!/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.

1
2
#!/bin/sh
gnome-terminal -e 'sh -c "sudo -i | hdparm -I /dev/sda | echo -n mem > /sys/power/state;"'

Gruss

Jowie

rklm Team-Icon

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.

1
2
#!/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...

1
2
#!/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.

Antworten |