Bash-Kurztipp: Letzten Befehl als Root ausführen

All zu oft kommt es vor, dass ich einen Befehl in die Konsole tipper und nach dem Drücken der Enter Taste einen netten Hinweis bekomme, dass ich kein Root bin und demzufolge dieser Befehl nicht ausgeführt werden kann.

Also “su” eingeben, Passwort eingeben und den Befehl nochmal schreiben. Das ist relativ Mühselig wie ich finde und nervt total :)

Als ich das gestern auf der Arbeit mit einem Koollegen besprach, kam die Idee auf, dafür was kleines zu “basteln”. Es müsste doch möglich sein, den letzten Befehl nochmal als Root auszuführen, mit möglichst wenig Tipp Aufwand. Herausgekommen ist dabei folgendes Stückchen Bash-Script:

alias lr='su -c "$(history | tail -n 2 | head -n 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g")"'

Was macht es? Es liest den letzten Befehl aus den man eingegeben hat, und führt in als root aus. Eingetragen wird es als alias in die ~/.bashrc. Ich habe bei mir als Befehl “lr” genommen, für “last as root”. Dies kann natürlich individuell angepasst werden.

Hat man nun vergessen, dass ein Befehl root-Rechte benötigt, genügt ein einfaches “lr” und der Befehl wird nochmal ausgeführt, diesmal allerdings mit root-Rechten.

03. Dezember 2008 von Jan
Kategorien: Linux, Planet | 9 Kommentare

Änliche Artikel:

Kommentare (9)

  1. ein einfaches “!!” wird mit dem letzten Befehl ersetzt.

    Anwendungsbeispiel: sudo !!

    :)

  2. hmm…. verdammt…. wie kann ich meine Lösung nun rechtfertigen…

    1. Sie ist selbstgebaut, das ist per Definition cooler!

    2. Sie ist kürzer, “lr” (oder gar nur ein Buchstabe) gegen “sudo !!”

    hmm.. naja :)

  3. Das funktioniert allerdings nur, wenn man ein Root-Passwort gesetzt hat?

    Mit sudo funktioniert es leider gar nicht:

    sudo "$(history | tail -n 2 | head -n 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g")"
    sudo: apt-get update: command not found

  4. doch, funktioniert auch, allerdings müssen die Anführungszeichen um das $() weg, also:

    sudo $(history | tail -n 2 | head -n 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g")

  5. Wenn man sudo einsetzt, ist das Problem ja gar nicht groß existent. Tasten , , sudo tippen, abschicken. Die Problematik ist doch erst da, wenn sudo nicht konfiguriert ist, bzw man gleich in eine richtige root-Konsole will und DANN den Befehl nochmal braucht. Kommt bei mir allerdings selten genug vor, dass ich einfach dann per Maus das Ding markiere und einfüge.

  6. gebe ich dir Recht, allerdings kann man in der Root-Konsole dann nicht auf die History des Users zugreifen, da die “history” Funktion eine reine Bash-Funktion ist. Sie ist daher nicht systemweit aufzurufen.
    Auch in der ~/.bash_history steht der letzte Befehl nicht drin, da diese Datei erst beim Beenden der Konsole erneuert wird!

    Diesen Weg (erst die Rootkonsole öffnen und dann den Befehl wiederholen) wollte ich anfangs auch machen, aber ich finde es im Nachhinein so praktischer. Will man danach als root weiterarbeiten, kann man ja an das Script am Ende noch sowas wie “;/bin/bash” anfügen oder so…

  7. Erstmal ein Kompliment! Dieses Problem hatte ich bisher auch immer. Habe bisher immer danach su und dan mit Markieren und mittlere Maustaste den Befehl kopiert, das geht aber nur mit X.

    Danke für die anregung!

  8. Danke! Find ich sehr hilfreich. :)

  9. Ich schwanke immer zwischen ‘sudo !!’ oder ‘Pfeil rauf – Pos1 – sudo – Enter’. Mit ein wenig Übung geht das auch ziemlich schnell…

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert