Machs noch einmal mit sudo

Fr, 6. Mai 2022, Ralf Hersel

Kennt ihr das? Da tippt man einen Befehl im Terminal, um danach die Meldung zu sehen, dass dafür Root-Rechte erforderlich sind. Um ein einzelnes Kommando mit Root-Rechten ausführen zu können, gibt es bekanntlich den Befehl sudo. Nun könnte man mit 'Pfeil-nach-oben' den auszuführenden Befehl aus der History holen, den Cursor an den Anfang setzen, sudo davor schreiben und den Befehl erneut ausführen - es geht aber auch einfacher.

Das Kommando sudo !! macht genau das. Es führt den zuletzt eingegeben Befehl mit sudo aus. Im oben gezeigten Beispiel führt sudo !! den Befehl sudo mkdir delme aus, bzw. löscht das Verzeichnis anschliessend wieder. Wenn man sudo !! verwendet, sollte man sich absolut sicher sein, welches der zuletzt eingegebene Befehl war, um Unheil zu vermeiden.

Falls man die Root-Rechte für mehrere Befehle braucht, kann man mit sudo -i oder su eine Root-Shell öffnen und diese danach mit exit wieder verlassen. Vom Arbeiten in einer Root-Shell wird jedoch abgeraten, weil man schnell vergisst, dass man mit erweiterten Rechten unterwegs ist.

Nachtrag

Auf unserem Mastodon-Kanal hat Andre eine Frage gestellt, bzw. eine Anregung gegeben:

Gibt es das auch für andere Befehle? Zum Beispiel:

$ cat /some/very/long/file.txt
[thousands of lines]
$ grep "what i search for" !!

Ja, das geht. Grundsätzlich holt !! immer den letzten Befehl zurück. Für das von Andre genannte Beispiel (lange Datei durchsuchen), könnte man das so machen:

cat big_file
!! | grep suchtext

Wer so etwas öfters braucht, möchte evtl. einen Alias dafür anlegen. Mir ist das leider nicht gelungen. Der Alias:

alias catgrep="!! | grep !:1"

... funktioniert nicht, weil !! im Alias nicht als Kommando akzeptiert wird. Vielleicht hat die Community eine Idee, wie man das umsetzen könnte.

Tags

Terminal, Shell, sudo