bash - Tipps & Tricks

Das letzte Argument der Kommandozeile

Häufig braucht man das Argument aus der letzten Kommandozeile in der nächsten Kommandozeile wieder. Ein Beispiel:

konsolero@nitidelo ~ $ cp /etc/profile newFile
konsolero@nitidelo ~ $ more newFile

Hier wird der Inhalt der Datei /etc/profile in die Neue Datei newFile kopiert und dann mit more angezeigt. Nun muss aber newFile in der zweiten Zeile nicht von Hand eingegeben werden. Sie drücken einfach einmal Esc und dann . oder geben !$ ein und schon steht das letzte Argument der letzten Zeile (hier also newFile) in der Zeile. Bei längeren Argumenten spart man sich auf diese Weise viel Arbeit.

Suchen in der History

Manchmal hat man eine längere Kommandozeile eingegeben (vielleicht vor einigen Tagen) und möchte diese Zeile nochmals ausführen. Wenn diese Zeile noch in der History der Bash gespeichert ist muss man sie also nur suchen. Wenn man dazu aber die Pfeiltasten benutzt (damit kann man ja ältere Kommandozeilen wieder hervorzaubern), dauert dieser Vorgang häufig ziemlich lange. Damit hat man aber nichts gewonnen, und man könnte die Zeile gleich neu eingeben. Es gibt aber eine Lösung:

Wenn man die Tasten Strg-R drückt, kann man in der History suchen. Die Bash sucht einfach nach dem ersten befehl, in dem die eingegebenen Buchstaben vorkommen. Wenn Strg-R nochmals gedrückt wird, wird die nächste Fundstelle angezeigt.

Textdateien zeilenweise sortieren

Mit dem sort Befehl lassen sich die Zeilen einer Textdatei sortiert ausgeben:

konsolero@nitidelo ~ $ sort myfile.txt

oder speichern:

konsolero@nitidelo ~ $ sort myfile.txt -o myfile.txt

Systeminfos

konsolero@nitidelo ~ $ uname -a
Linux debian 2.6.3 #7 Mon Mar 1 18:25:58 CET 2004 i686 unknown

Der Befehl »uname -a« liefert Kernelname (Linux), Hostname (debian), Kernelversion (2.6.3), Erstellungsdatum des Kernels, Hardwarearchitektur (i686), und den Prozessornamen (unknown).

Arbeitsspeicher: cat /proc/meminfo
Prozessor: cat /proc/cpuinfo
PCI-Bus: lspci
Dateisysteme: mount
Freier Festplattenspeicher: df -h

Konsole (KDE)

Sitzung umbenennen: Strg-Alt-S

ImageMagick

ImageMagick ist eine Sammlung von Programmen zum Bearbeiten von Bildern:

Ein Bild lässt sich z.B. mit »display image.png« anzeigen. Ein Überblicksbild von allen jpg Bildern im aktuellen Verzeichnis erzeugt dieser Befehl:

konsolero@nitidelo ~ $ display "vid:*.jpg"

Bilder nacheinander anzeigen (Space-Taste/Vor, Backspace/Zurück):

konsolero@nitidelo ~ $ display *.jpg

Identify liefert Bild-Infos:

konsolero@nitidelo ~ $ Identify mozilla.png
mozilla.png PNG 100x100 DirectClass 8-bit 18173b 0.0u 0:01

Bildgröße ändern (convert):

konsolero@nitidelo ~ $ convert -geometry 300x200 image.png out.png

Mit mogrify ändert man Bilder direkt ohne neue Dateien zu erzeugen:

konsolero@nitidelo ~ $ mogrify -geometry 300x200 image.png

Screenshot (import):

konsolero@nitidelo ~ $ sleep 10; import -window root bildschirmfoto.png

Fensterfoto (Mit Kreuz ins Fenster klicken oder Bereich auswählen):

konsolero@nitidelo ~ $ import fensterfoto.png

Bilder zusammenfassen (montage):

konsolero@nitidelo ~ $ montage -background white -tile 2x2 -geometry +4+4 joe.jpg jack.jpg william.jpg avarell.jpg daltons.jpg

Text einfügen (convert):

konsolero@nitidelo ~ $ convert -font helvetica -fill white -pointsize 24 -draw 'text 10,50 "Wanted Dead or Alive"' daltons.jpg warrant.jpg

Prozessbaum ausgeben

konsolero@nitidelo ~ $ pstree -puG

update-rc.d (Debian)

Aktivieren/Deaktivieren eines Daemons:
»update-rc.d apache defaults« bzw. »update-rc.d -f apache remove«

lsof (list open files)

Mit der Option -i zeigt lsof alle Internetverbindungen an (Kommando als root ausführen).

source

Mit dem Kommando »source .bashrc« lassen sich Änderungen in der bash-Konfigurationsdatei in die aktuelle Shell einlesen.

Zeichenkette in Dateien suchen

konsolero@nitidelo ~ $ grep -rsniH string *

r: Rekursiv (auch Unterverzeichnisse durchsuchen)
s: Keine Fehlermeldungen wenn die Datei ein Verzeichnis ist
n: Zeilennummern anzeigen
i: Groß- und Kleinschreibung ignorieren
H: Dateiname anzeigen

Beim Öffnen der Datei kann man mit »vi +Zeilennummer« direkt zum gefundenen Begriff springen.

Shell ohne Scrollbalken

Shift+PageUp (Bild auf) bzw. Shift+PageDown (Bild runter)

Patch mit Diff erstellen

konsolero@nitidelo ~ $ diff -u AltesFile NeuesFile >> patch.txt
konsolero@nitidelo ~ $ patch < patch.txt

Partitionen auflisten

konsolero@nitidelo ~ $ fdisk -l /dev/hda

Leerzeichen in Dateinamen ersetzen

Das Perl-Tool rename ersetzt durch diesen regulären Ausdruck beliebig viele Leerzeichen durch einen Unterstrich:

konsolero@nitidelo ~ $ rename 's/\s+/_/g' *

Inhalt einer Datei löschen

konsolero@nitidelo ~ $ cat /dev/null > datei.log

Kurzform:

konsolero@nitidelo ~ $ > datei.log

Addieren von Zahlen in Textspalten

Dieses awk Script addiert Zahlen die ihm als Argumente übergeben werden:

#!/usr/bin/awk -f
{ total = total + $1 } END { print total }

Abgespeichert als summe.awk lassen sich im Zusammenspiel mit dem cut Kommando Zahlenspalten addieren.

Beispieldatei stunden.txt:

Fre 25 Feb 2005 - 4 Stdn
Mon 28 Feb 2005 - 2 Stdn
Die 01 Mär 2005 - 3 Stdn

So liefert dieser Einzeiler ...

konsolero@nitidelo ~ $ cut -d " " -f6 stunden.txt | summe.awk

... das Ergebnis 9.

Stunden im Februar:

konsolero@nitidelo ~ $ grep "Feb" stunden.txt | cut -d " " -f6 | summe.awk

Rechnen

konsolero@nitidelo ~ $ bc -l

Datei/Verzeichnisgröße

Erzeugt eine Gesamtsumme. Ausgabe der Größen in menschenlesbarem Format.
(z.B.: 1K 234M 2G):

konsolero@nitidelo ~ $ du -sch dich

Nach Größe sortiert:

konsolero@nitidelo ~ $ du -sh dich | sort -nr

Suchen

konsolero@nitidelo ~ $ find dokumente -iname "joglog*"

Lässt man den Verzeichnisnamen weg wird im aktuellen Verzeichnis gesucht.

Zeilen und Spalten filtern

lsmbox listet die Anzahl der Nachrichten in einer Mail-Inbox auf. Die Tools grep, tr und cut helfen beim Verarbeiten der mehrzeiligen Ausgabe:

konsolero@nitidelo ~ $ lsmbox ~/mail/inbox | grep ^Summary | tr -s [:blank:] " " | cut -d " " -f2,3,4

grep filtert die Zeile an deren Anfang »Summary« steht. tr tauscht mehrere Leerzeichen oder Tabs hintereinander durch ein einfaches Leerzeichen aus um cut ein filtern der Spalten ( 2,3 und 4) zu ermöglichen.

#!/bin/bash
for i in $(ls *.bz2)
  do
    echo `tput rev`$i`tput sgr0`
    echo `tar -tjf $i | grep -e "$1"`
  done

Nach oben

Übersicht

Das letzte Argument der Kommandozeile

Suche in der History

Textdateien zeilenweise sortieren

Systeminfos

Konsole (KDE) - Sitzung umbennen

ImageMagick

Prozessbaum ausgeben

update-rc.d (Debian)

lsof (list open files)

source

Zeichenkette in Dateien suchen

Shell ohne Scrollbalken

Patch mit Diff erstellen

Partitionen auflisten

Leerzeichen in Dateinamen ersetzen

Inhalt einer Datei löschen

Addieren von Zahlen in Textspalten

Rechnen

Datei/Verzeichnisgröße

Suchen

Zeilen und Spalten filtern

Mehrere tar-Archive durchsuchen