Schlagwort-Archive: Shell

Ubuntu: PC bei Knopfdruck ausschalten

Gerade wenn man einen „headless“ linux PC laufen hat, möchte man ihn ohne große Umstände herunterfahren können.
Am besten einfach den Powerknopf einmal drücken und die Kiste schaltet sich ab.

So gehts:

sudo vi /etc/acpi/events/powerbtn

dort sucht man die folgende Zeile und kommentier sie mit einem # aus:

action=/etc/acpi/powerbtn.sh

dann sieht sie so aus

#action=/etc/acpi/powerbtn.sh

stattdessen fügt man jetzt folgende Zeile ein:

action=/sbin/poweroff

Jetzt noch einen Dienst neu starten und fertig:

sudo acpid restart

Jetzt fährt der PC auf Knopfdruck herunter.

Bei ssh Verbindungen werden die Kennworte lesbar dargestellt

Problem:
Wenn man beim Kunden sitzt und sich per ssh auf einen Server verbindet, möchte man in der Regel nicht, dass die eingegebenen Kennworte lesbar dargestellt werden.

Bei folgenden Beispielen ist dies aber der Fall:

Beipiel1:
ssh benutzer@server ‚mysql -u benutzer -p‘

Beispiel2:
ssh benutzer@server „sudo ls“

In der jetzt kommenden Kennwortabfrage  wird in beiden Fällen das Kennwort gut lesbar angezeigt.

Lösung:
Um die Passworteingabe wieder zu verstecken, muss man lediglich die Option ‚-t‘ mitgeben.  Also:
ssh -t benutzer@server ‚mysql -u benutzer -p‘
bzw.
ssh -t benutzer@server „sudo ls“

Dadurch wird die Kennworteingabe wieder „unsichtbar“ gemacht.

In dem Manpages zu ssh findet man folgende Beschreibung:
-t      Force pseudo-terminal allocation.  This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when
             implementing menu services.  Multiple -t options force tty allocation, even if ssh has no local tty.

Normalerweise wird bei einer ssh-Verbindung kein Pseudoterminal geöffnet, welche die Ein- und Ausgabe mit einem Prozess verbindet.
Daher werden die Kennworteingaben auch nicht maskiert.

Wenn man das dauerhaft haben möchte, ohne jedes Mal das ‚-t‘ eingeben zu müssen, kann man die ‚~/.ssh/config‘ entsprechend bearbeiten. Mehr dazu ist in den Manpages zu lesen:
man 5 ssh_config im Bereich RequestTTY

brace expansion: Verzeichnisse erstellen und löschen

Wenn man ein Verzeichnis mit mehreren Unterordnern erstellen will, kann man natürlich per mkdir jeden Ordner einzeln anlegen.
Das Ganze kann man allerdings auch einfacher haben.

Konkretes Beispiel: Beim Anlegen von Projektverzeichnissen kann es hilfreich sein, wenn man die benötigten Unterordner gleich mit erstellen kann:

sudo mkdir -p /Projekte/Nummer220/{Hardware,Software,Dokumentation}

Das ‚-p‘ muss mitgenommen werden, da dadurch die benötigten übergeordneten Verzeichnisse (in diesem Fall die ‚Nummer220‘) erstellt werden.
Im Verzeichnis ‚/Projekte‘ wird nun ein Ordner ‚Nummer 220‘ mit den Unterordnern ‚Hardware‘, ‚Software‘ und ‚Dokumentation‘ angelegt.

Was für das Erstellen von Verzeichnissen gilt, geht auch beim Löschen.
Will man das Projektverzeichnis behalten, aber die Unterordner löschen, kann man das mit folgendem Einzeiler tun:

 sudo rm -r /Projekte/Nummer220/{Hardware,Software,Dokumentation}

Wichtig ist dabei, dass man das ‚-r‘ für rekursiv setzt, da man ansonsten einige Fehlermeldungen bekommt, da ‚rm‘ ansonsten von Dateien ausgeht und den Dienst verweigert.

Backupdatei mit brace expansion schnell erstellen

Hat man einen längeren Dateipfad, dann kann es manchmal nervig sein, wenn man diese sichern will. Oft sieht man folgenden Ansatz:

cp /etc/meinprogramm/programmd/meineconfig.conf /etc/meinprogramm/programmd/meineconfig.conf.bak

Ist natürlich auch mit TAB-Ergänzung oder Copy&Paste recht mühselig.
In diesem Fall kann einem die ‚brace expansion‘ weiterhelfen.
Man erledigt die Kopie durch das Anfügen einer Spitzen Klammer mit Komma und der gewünschten Erweiterung:

cp /etc/meinprogramm/programmd/meineconfig.conf{,.bak}

Dadurch wird dann folgende Kopie erzeugt:

/etc/meinprogramm/programmd/meineconfig.conf.bak

Mehr Informationen dazu findet ihr z.B. im Bash Reference Manual oder bei wiki.bash-hackers.org

Demnächst gibt es einen weiteren Artikel, in dem ich beschreibe, wie man diese Funktion zum Anlegen von Dateien verwenden kann.

Linux: Ein bestimmtes Wort in Dateien finden

Das Problem:
Jemand suicht auf seinem Linux-System einige Dateien, die ein bestimmtes Wort enthalten. Es geht also um die Suche nach einem Wort in verschiedenen Dateien auf dem System – nicht um Dateinamen.

Die Lösung:
Da kann mit Bordmitteln gearbeitet werden. Mit grep kommt man da ziemlich schnell ans Ziel:

grep -nrw ‚/Dateipfad/‘ -e „Suchbegriff“

Zur Erklärung:
Was macht „grep“? Hier die Erklärung aus der Ubuntu Manpage:

BESCHREIBUNG

grep sucht in den angegebenen DATEIen (oder der  Standardeingabe, wenn keine  Dateien oder ein einzelner Trenn-/Bindestrich (-) als Dateiname  angegeben  wurde) nach Zeilen, die auf das MUSTER passen. Per Voreinstellung gibt grep die passenden Zeilen aus.

Zu den Parametern:
Ich verwende ’nrw‘, weil ich mir als Eselsbrücke das Bundesland merke 🙂
-n   gibt die Zeilennummer an
-r   (oder auch -R) rekursive Sucht (alle Unterordner werden mit durchsucht)
-w   es muss das ganze Wort gefunden werden

-s   suppress – unterdrückt alle Fehlermeldungen für gescheiterte Dateizugriffe, z:B. wegen fehlender Berechtigungen
Das kann die Ausgabe eventuell sehr viel übersichtlicher machen.

Mit den Optionen ‚-include‘ und ‚-exclude‘ kann man die Suche dann noch verfeinern.

Beispiel:
Ich suche nur *.txt und *.sh Dateien, in denen sich der Autor ‚Bikerpete‘ in den Kommentaren verewigt hat:
grep -include=\*.{txt,sh} -nrw /scripts/ -e „Bikerpete“

Jetzt finde ich im Verzeichnis /scripts alle .txt und .sh files mit dem gesuchten Muster. Sind dann z.B. .h oder .doc Dateien vorhanden, werden diese bei der Ausgabe ignoriert.

Weitere Optionen findet man, wenn man sich die Manpages mit ‚man grep‘ anzeigen läßt.

 

Quelle: Stack Overflow