claim.gif
Linux Magazin Linux User Easy Linux Ubuntu User International Linux Community
Erschienen in EasyLinux 03/2005   »   Ausgabe bestellen

Know-how für die Kommandozeile

Shell-Tipps

von Andrea Müller


Herauszufinden, wer gerade am System angemeldet ist, und alle lesbaren Zeichen einer Binärdatei auszugeben, gelingt am schnellsten auf der Kommandozeile. Unsere Shell-Tipps verraten, welche Befehle Sie dafür brauchen und wie Sie sie kombinieren.

Länge der History anpassen

In der Linux-Shell blättern Sie mit [Pfeil hoch] und [Pfeil runter] durch zuvor eingegebene Kommandos. Doch gerade Aufrufparameter, die man selten benötigt, vergisst man leicht. Ein history | grep befehl verrät die gesuchte Befehlszeile ebenfalls nicht, da das Kommando schon von anderen Aufrufen überschrieben wurde. Speichert Ihnen die bash nicht genug Befehle, ändern Sie einfach die Vorgabe.

Wie viele Zeilen in der History Platz finden, steht in der bash-Umgebungsvariable HISTSIZE. Worauf sie gesetzt ist, erfahren Sie mit dem Kommando echo $HISTSIZE (Abbildung 1). Durch das Dollar-Zeichen weiß die Shell, dass Sie den Inhalt der Variable HISTSIZE erfahren wollen. Den zugehörigen Wert legen die Distributoren systemweit fest. Bei allen von uns unterstützten Distributionen steht in der Datei /etc/profile die Zeile

HISTSIZE=1000

Um die Größe der History für alle Benutzer anzupassen, müssen Sie die Datei /etc/profile mit Administratorrechten bearbeiten. Öffnen Sie sie über ein Schnellstartfenster [Alt-F2] mit dem Befehl

kdesu kwrite /etc/profile

Sobald Sie sich mit dem Root-Passwort authentifiziert haben, startet der KDE-Editor und öffnet die richtigen Datei. Ändern Sie dort den Wert in der mit HISTSIZE beginnenden Zeile beispielsweise auf 2000, um mehr Kommandos in der History zu speichern.

Möchten Sie die Variable nicht systemweit anpassen, ist stattdessen die Datei /home/ihr_benutzername/.bash_profile der richtige Ort, um die History-Länge für nur einen Benutzer zu ändern. Falls die Datei noch nicht existiert, legen Sie sie einfach mit einem Text-Editor wie KWrite an. Der Eintrag

HISTSIZE=2000

bewirkt, dass die bash die letzten 2000 Befehle in der History speichert.

Abb. 1: "echo $HISTSIZE" verrät, dass das System insgesamt 1000 Befehle in der History speichert.

Angemeldete Benutzer auflisten

Haben Sie ein Netzwerk und anderen Benutzern ein Konto auf dem Linux-Rechner gegeben, können diese sich per ssh [1] auf dem Computer anmelden und dort arbeiten. Wollen Sie wissen, wer gerade eingeloggt ist und mit welchem Programm er arbeitet, finden Sie es mit dem Befehl w heraus (Abbildung 2). Er zeigt in der ersten Zeile einige allgemeine Informationen, von links nach rechts: die Uhrzeit, wie lange das System schon läuft, wie viele Benutzer angemeldet sind, und die Systemlast der letzten einen Minute und der letzten fünf und 15 Minuten. Die Systemlast errechnet sich aus der Anzahl Prozesse, die in diesem Zeitraum auf die Zuteilung von CPU- und Festplatten-Ressourcen gewartet haben. Auf einem Arbeitsplatzrechner liegt der Wert gewöhnlich unter 1.

Darunter listet w alle Benutzer auf, die gerade angemeldet sind. In der Spalte @LOGIN steht, wann sie sich angemeldet haben. Die letzte Spalte mit der Überschrift WHAT zeigt, welches Programm gerade läuft. In Abbildung 2 hat sich der Benutzer joey über SSH angemeldet und arbeitet gerade mit dem Mail-Programm Sylpheed.

Die Felder JCPU und PCPU zeigen, wie viel Prozessorzeit die Anwendungen des Benutzers verbraucht haben. Der Wert unter PCPU bezieht sich auf den Prozess in der letzten Spalte. JCPU rechnet auch die Zeit aller Prozesse mit ein, die der Benutzer gestartet hat, etwa ein im Hintergrund laufendes Shell-Skript.

Abb. 2: Das Kommando "w" verrät, welche Benutzer angemeldet sind und was sie gerade tun.

Wer ist eingeloggt?

Ein weiteres Kommando zum Anzeigen der angemeldeten Benutzer ist who (who=wer). Ohne Optionen aufgerufen zeigt who von links nach rechts den Namen des Benutzers, wo er sich angemeldet hat und seit wann er auf dem System eingeloggt ist.

sudo-Kommandos herausfinden

Wenn Sie an einem Rechner arbeiten, dessen Root-Passwort Sie nicht kennen, hat Ihnen der Administrator vielleicht das Recht eingeräumt, einige Kommandos per sudo [1] auszuführen. Welche Programme Sie mit Root-Rechten starten dürfen, steht in der Datei /etc/sudoers, die Sie als normaler Benutzer nicht lesen dürfen. Mit dem Befehl sudo -l (l für list) (Abbildung 2) erfahren Sie, welche Kommandos Sie unter einer anderen Nutzerkennung aufrufen dürfen. Wenn sudo nach einem Passwort fragt, geben Sie Ihr Benutzerkennwort ein.

Abb. 3: Der Benutzer "andi" darf den Rechner mit "sudo" herunterfahren und neu starten. "NOPASSWD" bedeutet, dass er dafür nicht erneut sein Benutzerpasswort eingeben muss.

Zeilennummern mit grep ausgeben

Das Kommando grep [2] durchsucht Dateien nach der auf der Kommandozeile übergebenen Zeichenkette. So listet

grep Linux datei.txt

alle Zeilen von datei.txt auf, in denen das Wort Linux vorkommt. Bei diesem Aufruf gibt grep jedoch nicht die Zeilennummer aus. Wollen Sie danach die Fundstelle im Kontext lesen, müssen Sie bei längeren Texten erneut die Suchfunktion des Editors oder Textbetrachters bemühen. Die doppelte Suche ersparen Sie sich mit dem grep-Aufrufparameter -n. Er gibt vor jeder Fundstelle die Zeilennummer in der Textdatei aus.

Neue Zeile mit vim einfügen

Um im Text-Editor vim eine Datei zu bearbeiten, wechseln Sie zunächst mit Druck auf [I] in den Einfügemodus. Danach können Sie an der aktuellen Cursor-Position Text eingeben. Möchten Sie eine weitere Zeile an eine Datei anhängen, drücken Sie stattdessen [O]. Dann fügt vim eine neue Zeile unter der, in der der Cursor steht, ein und wechselt in den Einfügemodus. Eine so bearbeitete Datei speichern Sie, indem Sie mit [Esc] in den Befehlsmodus wechseln. Die Eingabe von :wq speichert die Datei und schließt den Text-Editor.

Text in Binärdateien lesen

Wenn Sie Dateien, die binäre Zeichen enthalten, in einem Text-Editor oder dem Betrachter less öffnen, sehen Sie nur Zeichensalat. Beispiele für Dateien mit binärem Inhalt sind ausführbare Programme und Word-Dokumente. Die meisten dieser Dateien enthalten jedoch außer den binären Zeichen einige Zeilen Klartext. So finden Sie in Word-Dokumenten deren Inhalt. Das Programm strings gibt die lesbaren Zeichen binärer Dateien aus.

Der Befehl strings /bin/grep zeigt alle lesbaren Zeilen an, die in der Programmdatei von grep stehen. Die Datei /bin/grep verändert strings nicht, so dass Sie es gefahrlos ausprobieren können. Scrollen Sie in der Ausgabe des Befehls ein wenig nach oben -- dort steht derselbe Text, den grep ausgibt, wenn Sie es mit dem Parameter --help aufrufen. Die Kurzhilfe ist also fest im Programm verdrahtet.

Lassen Sie sich mit strings alle lesbaren Zeichen eines Microsoft-Office-Dokuments ausgeben, erfahren Sie oft interessante Sachen. Dort speichern die Programme auch Informationen wie den letzten Bearbeiter oder das Erstellungsdatum und den ursprünglichen Titel einer Datei.

Leider betrachtet strings deutsche Sonderzeichen als binär und zerstückelt viele deutsche Wörter.

Ziele von Windows-Verknüpfungen

Mit dem Tool strings finden Sie heraus, auf welche Datei eine Verknüpfung unter Windows zeigt. Windows-Verknüpfungen sind binäre Dateien mit der Endung .lnk. Selbst wenn Sie unter Windows alle Dateiendungen anzeigen lassen, blendet der Explorer die Endung .lnk nicht ein. Das hat hauptsächlich kosmetische Gründe, da sonst fast alle Einträge im Startmenü diese Endung tragen würden. Haben Sie unter Windows eine Desktop-Verknüpfung zu einem Dokument angelegt, erfahren Sie mit strings, wo das Ziel dieser Verknüpfung liegt.

  1. Die Dateien, die auf dem Windows-Desktop liegen, finden Sie unterhalb des Windows-Mount-Punkts. Suse Linux mountet die Windows-Partition in Unterverzeichnisse von /windows, wer Mandrake Linux oder Fedora Core 2 benutzt, findet sie im Verzeichnis /mnt/windows. Dort liegen die Desktop-Verknüpfungen im Ordner Dokumente und Einstellungen/windows-benutzername/Desktop.
  1. Der richtige Befehl, um das Ziel der Verknüpfung dokument.lnk anzuzeigen, lautet:
    strings /mnt/windows/Dokument\
    e\ und\ Einstellungen/andi/De\
    sktop/dokument.lnk | tail -1
    Suse-Linux-Nutzer ersetzen /mnt/windows durch /windows/c.

  1. Die umgekehrten Schrägstriche (\) maskieren die Leerzeichen im Pfadnamen. Sie müssen sie nicht selbst eingeben: Tippen Sie den Anfang des Pfades (/mnt/windows/Doku) und drücken Sie [Tab]. Beim Vervollständigen setzt die Bash automatisch das \-Zeichen, um die Leerstellen zu maskieren. Da in einer .lnk-Datei mehr lesbare Zeichen stehen, als nur das Ziel der Verknüpfung, bietet es sich an, die Ausgabe von strings mit dem Pipe-Zeichen (|) an tail -1 weiterzuleiten. tail zeigt mit dem Parameter -1 aufgerufen nur die letzte Zeile der Ausgabe von strings an.
  1. In unserem Beispiel verweist die Desktop-Verknüpfung auf die Datei \Briefe\privat\merkzettel.doc unterhalb des Ordners Eigene Dateien. Von der Linux-Partition aus greifen Sie über den Pfad /mnt/windows/Dokumente und Einstellungen/andi/Eigene Dateien/Briefe/privat auf die Datei merkzettel.doc zu. Unter Suse Linux ersetzen Sie wieder /mnt/windows durch /windows/c.

Wenn Sie auf diese Weise den Speicherort einer Datei ermittelt haben, können Sie sie auf die Linux-Partition kopieren und dort beispielsweise mit OpenOffice bearbeiten. Eine kleine Stolperfalle gibt es dabei: Liegt eine Datei nicht auf dem Laufwerk, das Windows als C: bezeichnet, ist der Einhängepunkt unter Linux ein anderer. Mandrake Linux mountet die zweite Windows-Partition standardmäßig in das Verzeichnis /mnt/win_d. So verfährt die Distribution sogar dann, wenn Sie unter Windows über einen anderen Laufwerksbuchstaben, etwa E:, auf die Partition zugreifen. (amü)

Infos
[1] sudo-Artikel: Heike Jurzik, "Doppelgänger", EasyLinux 11/2004, S. 77 ff.
[2] grep-Artikel: Elisabeth Bauer, "Text fischen", EasyLinux 10/2003, S.74 f., http://www.easylinux.de/Artikel/ausgabe/2003/10/074-grep/index.html

Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links" nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedruckten Fassung entsprechen.

Druckerfreundliche Version | Feedback zu dieser Seite | Datenschutz | © 2020 COMPUTEC MEDIA GmbH | Last modified: 2007-04-05 11:10

[Linux-Magazin] [LinuxUser] [Linux-Community]