1980449

Drei Tricks für die Linux-Shell

03.04.2015 | 10:15 Uhr |

Es gibt ein Leben nach dem Terminal: Screen hält Prozesse geöffnet, auch wenn sich der Benutzer abmeldet. Und Reptyr ist die ideale Ergänzung, um Prozesse auch nachträglich in eine Screen-Instanz zu schleusen.

Prozessverwaltung (1) - Hintergrund-Arbeiten mit Screen

Ein Problem bei Programmen und Befehlen, die über eine SSH-Verbindung auf einem anderen Linux- PC gestartet wurden, ist die Bindung des Prozesses an diese Shell. Wenn die SSH-Verbindung abbricht, etwa wenn das Netzwerk/ WLAN nicht ganz stabil ist oder das Terminal-Fenster versehentlich geschlossen wird, dann beenden sich auch die im Terminal gestarteten Prozesse. Dies ist besonders ärgerlich bei länger laufenden Befehlen, die empfindlich auf Unterbrechungen reagieren. Beispielsweise während umfangreicher Downloads mit wget sowie beim Packen oder Kopieren von großen Datenmengen.

Eine der ersten Lösungen aus Unix-Tagen für dieses alte Dilemma ist der Befehl nohup . Damit lassen sich Prozesse starten, die sich nicht mehr beenden, wenn die Shell geschlossen wird:

nohup [Befehl/Programmname] &

Der so gestartete Prozess läuft ab jetzt im Hintergrund, schreibt aber auch seine Ausgaben nicht mehr in die Shell, sondern bleibt stumm. Die Ausgabe müsste manuell in eine Logdatei umgeleitet werden.

Für viele Aufgaben ist nohup somit nicht gut geeignet, und ein anderes Programm hat deshalb heute eine größere Bedeutung bei der Arbeit in der Shell gewonnen. Screen ist Taskmanager für die Befehlszeile, der gestartete Kommandozeilenprogramme in den Hintergrund verschiebt, wo sie auch nach der Abmeldung des Benutzers weiterlaufen, bis man sie wieder in den Vordergrund holt. Das Tool selbst ist ein echter Klassiker, da es das umständliche nohup ersetzt und außerdem noch praktische Tastenkombinationen bietet.

In den meisten Distributionen ist Screen noch nicht vorinstalliert, aber über den Paketmanager schnell nachgerüstet, zumal Screen Teil der GNU-Tools ist und deshalb bei allen Linux-Systemen in den Paketquellen liegt. Bei Debian/Ubuntu ist das Programm mit

sudo  apt-get install screen

installiert und wird mit

screen [Befehl/Programmname]

aufgerufen, um einen angegebenen Befehl oder das Programm in einer neuen Instanz von Screen zu starten. Wenn nun die Verbindung abbricht, läuft Screen im Hintergrund weiter, und nach einer erneuten Anmeldung kann man Screen mit dem Befehl

screen -x

wieder in den Vordergrund der neuen Shell holen. Die darin laufenden Prozesse bekommen davon nichts mit und laufen einfach weiter. Falls mehrere Instanzen von Screen laufen, dann zeigt der Befehl eine Liste mit IDs an, und der Befehl

screen -r [ID]

holt die gewünschte Instanz ins Terminal. Um eine Screen-Instanz auf Kommando in den Hintergrund zu verschieben, gibt es die Tastenkombination Strg-A, gefolgt von D.

Konsolen-Tricks, die den Alltag erleichtern

Von einem Terminal ins andere: Reptyr verschiebt Prozesse zwischen Terminal-Fenstern und kann auch dazu dienen, bereits laufende Programme als Screen-Instanz zu definieren.
Vergrößern Von einem Terminal ins andere: Reptyr verschiebt Prozesse zwischen Terminal-Fenstern und kann auch dazu dienen, bereits laufende Programme als Screen-Instanz zu definieren.

Prozessverwaltung (2) - Screen für laufende Programme mit Reptyr

Screen ist sehr nützlich, um gestartete Prozesse in der Kommandozeile gegen eine unterbrochene SSH-Verbindung oder versehentlich geschlossene Terminal-Fenster abzusichern. Es ist aber nicht möglich, ein bereits laufendes Programm in eine Screen-Instanz zu sperren.

Mit einem zusätzlichen Trick gelingt auch diese Aufgabe: Das Tool Reptyr verschiebt laufende Prozesse von einem Terminal in ein anderes, vorausgesetzt, es handelt sich dabei um den gleichen Benutzer. Und diese Fähigkeit lässt sich auch dazu nutzen, bereits gestartete Programme in eine Screen-Instanz zu verschieben. Das Tool wartet mit dem Paketnamen „reptyr“ in den Paketquellen von Debian, Ubuntu, Fedora und Open Suse auf die Installation.

Um ein Programm in ein anderes Terminal zu verschieben, öffnen Sie zunächst ein neues Terminal-Fenster mit einer Shell-Verbindung zum Zielsystem und machen dann die Prozess-ID (PID) des gewünschten Programms ausfindig. Dazu dient der Befehl ps ax , der in einer tabellarischen Liste ganz links die PID anzeigt, ganz rechts den Programmnamen. Im zweiten Terminal gibt man nun den Befehl

reptyr [PID]

ein, und das Programm mit der angegebenen PID wird im einen Terminal beendet und im anderen weiter ausgeführt. Und so funktioniert das Ganze mit Screen: Nachdem Sie die PID des gewünschten Programms herausgefunden haben, starten Sie mit

screen reptyr [PID]

eine neue Instanz von Screen, in welche Reptyr dann den angegebenen Prozess holt.

Mit der Option „dotglob“ berücksichtigt die Bash versteckte Dateien und Verzeichnisse bei globalen Platzhaltern (*).
Vergrößern Mit der Option „dotglob“ berücksichtigt die Bash versteckte Dateien und Verzeichnisse bei globalen Platzhaltern (*).

Dateiverwaltung - Versteckte Dateien mitberücksichtigen

Platzhalter wie der Asterisk (*) werden von der Shell interpretiert und nicht vom ausgeführten Befehl. Es hängt also von der Shell- Konfiguration ab, ob ein Kommando mit Platzhalter „*“ versteckte Dateien und Verzeichnisse verarbeitet. Bei den meisten Distributionen ist die Bourne Again Shell (Bash) so vorkonfiguriert, dass sie versteckte Dateien und Verzeichnisse bei einem „*“ ignoriert.

Wie unter Unix zeichnen sich versteckte Dateien und Verzeichnisse in Linux lediglich dadurch aus, dass deren Name mit einem Punkt beginnt. Bei normalen Dateioperationen ignoriert die Bash diese Dateisystemobjekte einfach, sofern sie nicht gezielt mit Namen angesprochen werden. Wenn Sie etwa den Befehl

tar -cvzf archiv.tar.gz *

eingeben, um das aktuelle Verzeichnis in ein tar.gz-Archiv zu komprimieren, so bleibt unberücksichtigt, was versteckt ist. Das lässt sich aber ändern: Wird die Option „dotglob“ gesetzt, dann umfasst der globale Platzhalter „*“ auch versteckte Dateiobjekte. Es gibt zwei Möglichkeiten, diese Option zu setzen: Temporär für die aktuell geöffnete Shell schalten Sie die Option mit dem Befehl

shopt -s dotglob

ein. Um das Verhalten der Bash permanent zu ändern, tragen Sie diesen Befehl in einer Zeile in der Konfigurationsdatei „.bashrc“ ein, die Sie in Ihrem Home-Verzeichnis finden.

0 Kommentare zu diesem Artikel
1980449