Standard-Programme

Die folgenden Programme sind auf den meisten Debian-Systemen (und vielen anderen Linux-Distributionen) standardmäßig installiert. Die Liste beinhaltet eine Auswahl von Programmen, die einem mit großer Wahrscheinlichkeit früher oder später in Shell-Scripten begegnen und die ohne Superuser-Rechte genutzt werden können:

alias

Mit alias kurzname='langer befehl' lassen sich Abkürzungen für längere und/oder öfter gebrauchte Befehle definieren. Meist werden solche Aliase in der Konfigurationsdatei ~/.bashrc definiert. Steht dort in einer Zeile beispielsweise alias q='exit', so lässt sich das aktuelle Shellfenster wahlweise mit q oder mit exit schließen. Ist ein alias ll='ls -lh' definiert, so lässt sich eine ausführliche Liste des aktuellen Verzeichnisses mit ll aufrufen.

apt, aptitude

Mit apt-cache search suchbegriff bzw. aptitude search suchbegriff kann das System nach Paketen durchsucht werden, deren Name oder Beschreibung dem Suchbegriff entspricht. Die Ausgabe von aptitude gibt zusätzlich an, ob die entsprechenden Pakete installiert sind (i für “installed”) oder nicht (p für “purged”).

Zum (De-)Installieren von Paketen sind Superuser-Rechte erforderlich.

basename

Mit basename dateiname wird der Dateiname (ohne den Verzeichnispfad) angezeigt. Mit basename dateiname endung wird zusätzlich zum Verzeichnispfad auch die angegebene Endung der Datei “abgeschnitten” (nützlich für Konvertierungs-Skripte, automatische Umbenennungen, etc.).

Im umgekehrten Fall kann das Verzeichnis einer Datei mittels dirname dateiname bestimmt werden.

bc

Mit bc steht ein simpler Taschenrechner auf der Kommandozeile zur Verfügung. Zahlen und Rechenzeichen können nach dem Aufruf direkt eingegeben werden; bei Bedarf können auch Klammern gesetzt werden. Nach Bestätigung mit der Enter-Taste wird das Ergebnis berechnet und angezeigt. Frühere Berechnungen können mit der \uparrow-Taste wieder angezeigt bzw. bearbeitet werden.

Ruft man bc mit der Option -l auf, so wird automatisch eine Standard-Bibliothek mit einigen wichtigen mathematischen Funktionen geladen. Beispielsweise kann so mittels s(num) der Sinus der Zahl num ausgegeben werden, mittels c(num) der Cosinus und mit a(num) der Arcus-Tangens; die übergebenen Werte num müssen dabei in Radiant angegeben werden. Mit l(num) kann der natürliche Logarithmus der Zahl num berechnet werden, mit e(num) wird der Wert der natürlichen Exponentialfunktion von num ausgegeben.

Man kann bc auch innerhalb von Shell-Skripten verwenden, um numerische Berechnungen auszuführen und die Ergebnisse gegebenenfalls in Variablen zu speichern. Dazu wird der auszuwertende Ausdruck mittels echo und einem Pipe-Zeichen an bc übergeben:

echo '8/3' | bc
# Ergebnis: 2.66666666666666666666

pi=$( echo 'a(1)*4' | bc -l )
echo $pi
# Ergebnis: 3.14159265358979323844

Beim letzten Beispiel als Trick genutzt, dass der Arcus-Tangens von 1 den Wert \frac{\pi}{4} liefert. Die Auswertung von a(1)*4 mittels der bc-Mathe-Bibliothek liefert somit die Kreiszahl \pi als Ergebnis.

bzip2, bunzip2

Mit bzip2 dateiname kann eine Datei zu einer gleichnamigen Datei im bz2-Format im komprimiert werden. Mit bunzip2 dateiname.bz2 kann die Datei wieder dekomprimiert werden.

Gibt man mehrere Dateinamen an, so wird jede Datei in ein eigenes Archiv komprimiert. Um eine einzelne bz2-komprimierte Datei zu erhalten, die mehrere Dateien enthält, so werden diese zunächst mittels tar zu einem Archiv gepackt.[1]

cat

Mit cat file wird der Inhalt einer Datei auf dem Bildschirm ausgegeben. Bei der Ausgabe von langen Dateien kann mit Shift PageUp und Shift PageDown auf- und abgeblättert werden.

cat kann ebenso verwendet werden, um zwei Textdateien zu einer einzelnen zu verbinden (“concatenate”). Um beispielsweise eine Textdatei an eine andere anzuhängen, lautet die Syntax cat datei1 >> datei2. Um aus zwei Dateien eine neue Datei zu erstellen, lautet die Syntax cat datei1 datei2 > datei-neu.txt.

Der Anfang oder das Ende einer Datei kann mit head file bzw. tail file angezeigt werden.

cd

Mit cd pfad wechselt man zu einem bestimmten Verzeichnis. Die pfad-Angabe kann dabei absolut (ausgehende vom Basis-Verzeichnis /) oder relativ (ausgehend vom aktuellen Verzeichnis) sein.

  • Mit cd .. gelangt man ins übergeordnete Verzeichnis, mit cd ../.. in das nächst höhere usw.
  • Mit cd gelangt man ebenso wie mit cd ~ ins Home-Verzeichnis. Mit cd ~benutzername gelangt man (als Superuser) in das Home-Verzeichnis des angegebenen Benutzers.

chmod

Mit chmod lassen sich die Zugriffsrechte einer Datei festlegen. Eine Datei kann lesbar (r für “read”), schreibbar (w für “write”) und/oder ausführbar (x für “executeable”) sein.

  • Mit chmod +x file wird eine Datei (z.B. ein Skript) im aktuellen Ordner ausführbar gemacht. Sie kann anschließend mit ./file aufgerufen werden.
  • Mit chmod -w file werden der Datei die Schreibrechte entzogen.

clear

Mit clear wird der Bildschirm “geleert” bzw. “aufgeräumt” – lediglich der aktuelle Eingabe-Prompt bleibt bestehen. Die Shell-History (mit \uparrow bzw. \downarrow abrufbar) bleibt unverändert.

cp

Mit cp datei neuer-pfad wird eine Datei (oder ein Verzeichnis) an eine andere Stelle kopiert. Es können mehrere Dateien auf einmal angeben werden; der zuletzt angegebene Pfad stellt dann den Zielpfad dar, in den alle zuvor angegebenen Dateien kopiert werden.

  • Mit cp -r werden auch Unterverzeichnisse rekursiv kopiert (andernfalls werden sie weggelassen). * Mit cp -s wird anstelle des Kopierens ein symbolischer Link am Zielpfad erstellt.

date

Mit date wird das aktuelle Datum und die aktuelle Uhrzeit angezeigt.

Die Ausgabe von date kann mittels verschiedener Aufrufparameter beliebig angepasst werden. Dies kann u.a. in Skripten hilfreich sein, um “Zeitstempel” in Dateinamen aufzunehmen. Der Aufruf von date +%Y%m%d_%H%M%S gibt beispielsweise eine Zeitangabe im Format YYYYMMDD_hhmmss aus. Beispielsweise entspricht dem Datum “30.08.2012, 9:21:03 Uhr” damit die Zeichenfolge “20120830_092103”.

df

Mit df wird angezeigt, wie viel Speicherplatz im Augenblick auf den eingehängten Laufwerken verfügbar ist (“disk free”).

  • Mit df -h wird die Ausgabe “human readable” gestaltet, d.h. die Größen werden in KB, MB oder GB anstelle von Bytes angegeben.

dirname

Mit dirname dateiname wird der Verzeichnisname einer Datei (ohne den eigentlichen Dateinamen) angezeigt.

du

Mit du wird angezeigt, wie viel Festplattenspeicher durch das aktuelle Verzeichnis und seiner Unterverzeichnisse belegt wird.

  • Mit du -h wird die Ausgabe “human readable” gestaltet, d.h. die Größen werden in KB, MB oder GB anstelle von Bytes angegeben. * Mit du -c wird die Gesamtgröße jedes Unterverzeichnisses sowie des aktuellen Verzeichnisses ausgegeben. du -S bewirkt im Prinzip das gleiche, allerdings wird hierbei die Größe der Unterverzeichnisse nicht zur Berechnung einer Verzeichnisgröße einbezogen. * Mit du -s wird nur die Gesamtsumme der Dateigrößen ausgegeben. * Mit du -L wird statt der Größe von Symlinks die Größe der verlinkten Dateien berücksichtigt.

echo

Mit echo variable kann der Inhalt einer Variablen angezeigt werden. Beispielsweise liefert echo $PATH die Namen aller Verzeichnisse, in denen nach ausführbaren Shell-Programmen gesucht wird.

Möchte man echo verwenden, um einen Text mittels einer Pipe an ein anderes Programm zu übergeben, so muss beachtet werden, dass dabei beispielsweise das Newline-Zeichen \n nicht ausgewertet wird. Um dies zu erreichen, muss echo mit der Option -e aufgerufen werden.

exit

Mit exit wird der aktuelle Benutzer abgemeldet die aktuelle Sitzung (z.B. ssh) beendet. Ist nur eine Sitzung geöffnet, wird das Shell-Fenster geschlossen.

file

Mit file dateiname werden ausführliche Datei-Informationen (Dateityp, Version, Kodierung) der angegebenen Datei angezeigt.

find

Mit find können Verzeichnisse nach Dateien durchsucht werden. Angezeigt werden jeweils (nur) die Dateien, die dem vorgegebenen Suchmuster entsprechen. Die allgemeine Syntax lautet:

find basisordner kriterium [weitere kriterien]

Häufig genutzte Kriterien sind beispielsweise:

  • -name suchmuster: Zeigt alle Dateien an, die dem Suchmuster entsprechen – einem “normalen” Namen, oder einem regulären Ausdruck.
  • -iname suchmuster: Zeigt alle Daten an, die dem Suchmuster entsprechen – Groß- und Kleinschreibung wird dabei ignoriert.
  • -mtime -n: Zeigt alle Dateien an, die im Laufe der letzten n Tage (n * 24h) modifiziert wurden. Um Dateien anzuzeigen, deren letzte Änderung mindestens n * 24h zurückliegt, wird das --Zeichen weggelassen.
  • -executeable: Zeigt nur ausführbare Dateien an.
  • -size n [kMG]: Zeigt nur Dateien an, deren Dateigröße über n Kilo-/Mega-/Giga-Bytes liegt.
  • -user name: Zeigt nur Dateien an, die dem angegebenen Benutzer gehören.
  • -type [fdl]: Zeigt Dateien an, die dem angegebenen Dateityp entsprechen (f: Normale Datei (“file”), d: Verzeichnis (“directory”), l: Symbolischer Link).

Mit !-kriterium können die obigen und weitere Kriterien (siehe man find) “umgekehrt” werden, so dass sie die genau gegenteiligen Ergebnisse liefern.

find kann auch in Verbindung mit grep genutzt werden, um zunächst bestimmte Dateien zu finden, und diese dann nach bestimmten Inhalten zu durchsuchen. Um beispielsweise die Namen aller Python-Dateien (Endung .py) eines Verzeichnisses und aller Unterverzeichnisse auszugeben, welche die Zeichenkette import sympy beinhalten, kann man folgendes eingeben:

find ./ -name "*.py" -exec grep -l "import sympy" {} \;

Hierbei werden von find, ausgehend vom aktuellen Verzeichnis ./, alle Dateien mit der Endung .py gesucht. Mit der Option -exec werden diese Dateien an das darauf folgende Programm übergeben, wobei die einzelnen Dateien an der Stelle eingefügt werden, wo die geschweiften Klammern {} stehen. Die exec-Anweisung muss am Ende mit \; abgeschlossen werden.

Noch einfacher ist die Verwendung von xargs, um die von find gefundenen Dateinamen an grep zu übergeben. Sollen beispielsweise alle Dateien mit der Endung .rst nach einem angegebenen Text durchsucht werden, kann folgendes eingegeben werden:

find ./ -name "*.rst" | xargs grep "Suchbegriff"

Nutzt man diese Kombination häufiger, so kann dafür in der Konfigurationsdatei ~/.bashrc ein alias definiert werden:

alias rstgrep='find ./ -name "*.rst" | xargs grep'

Damit kann künftig rstgrep ebenso wie grep mit allen dort zur Verfügung stehenden Optionen aufgerufen werden.

grep

Mit grep (“get regular expression”) können Eingabedaten, Textdateien oder Verzeichnisse nach beliebigen Suchbegriffen und regulären Ausdrücken durchsucht werden. Der allgemeine grep-Befehl hat folgende Syntax:

grep [optionen] suchmuster suchpfad

Möchte man beispielsweise das aktuelle Verzeichnis und alle Unterverzeichnisse rekursiv nach einem Suchbegriff durchsuchen, wobei die Groß- und Kleinschreibung ignoriert werden soll, so gibt man folgendes ein:

grep -lir "suchbegriff" ./

Mittels der Option -l werden nur die Dateinamen anstelle der zutreffenden Textzeilen ausgegeben, mit -i (“ignore-case”) die Groß-und Kleinschreibung ignoriert, und mit -r (“recursive”) die Durchsuchung der Unterverzeichnisse aktiviert. Mittels der Option -c wird die Anzahl an Treffern angezeigt, mit der Option -v werden diejenigen Zeilen als Ergebnis ausgegeben, auf die das Suchmuster nicht zutrifft.

Möchte man alle Ergebnisse anzeigen, die auf (mindestens) eines von mehreren angegebenen Suchmustern zutreffen, so können die einzelnen Suchmuster jeweils mit der Option -e angegeben werden.

Als Exit-Status liefert grep den Wert 0, wenn die Suche erfolgreich war, 1, wenn das Suchmuster nicht gefunden wurde, und 2, wenn bei der Suche ein Fehler aufgetreten ist (beispielsweise eine Datei nicht lesbar war).

gzip, gunzip

Mit gzip dateiname kann eine Datei komprimiert, mit gunzip dateiname.gz wieder dekomprimiert werden. Mittels zcat dateiname.gz kann eine komprimierte Datei auf dem Bildschirm ausgegeben werden, ohne dass sie dazu auf der Festplatte entpackt wird (dies wird beispielsweise für Hilfeseiten genutzt, die in komprimierter Form auf der Festplatte abgelegt sind).

host

Mit host URL kann die IP-Adresse einer Webseite angezeigt werden. Beispiel:

host www.grund-wissen.de
# www.grund-wissen.de has address 188.40.57.88

Häufig wird host in Kombination mit dem Zusatz-Programm whois verwendet, um zusätzliche Informationen über den Server einer Domain zu erhalten.

ip

Mit ip r kann die lokale Netzwerkadresse (192.168.xxx.xxx) angezeigt werden.

kill, killall

Mit kill prozessID bzw. mit killall programmname lässt sich ein (evtl. außer Kontrolle geratenes) Programm beenden. Die ID eines Prozesses lässt sich beispielsweise mit ps -aux programm, pgrep programmname oder mittels des Systemmonitors top anzeigen. Innerhalb von top lässt sich der kill-Befehl mittels k starten.

  • Mit kill -9 prozessID bzw. mit killall -9 programmname wird ein Prozess unterbrochen, egal welchen Signalwert er gerade ausgibt. Dies ist die stärkste Form, einen unerwünschten Prozess zum erliegen zu bringen.

less

Mit less dateiname kann der Inhalt einer Textdatei angezeigt werden. Die Anzeige beginnt am Anfang der Datei, mit der \downarrow bzw. \uparrow kann innerhalb der Datei nach unten bzw. oben gescrollt werden. Mit / kann die Datei nach einem Begriff durchsucht werden, mit n kann man zum nächsten Suchergebnis springen. Mit q wird less wieder beendet.

ln

Mittels ln bzw. ln -s lassen sich die zwei unter Linux möglichen Arten von Verknüpfungen erzeugen:

  • Mit ln datei1 datei2 wird zu einer existierenden Datei datei1 die Datei datai2 als so genannter “Hardlink” erzeugt. Dabei handelt es sich im Grunde um eine zusätzliche Bezeichnung für die selbe Speicherstelle auf der Festplatte. Um beispielsweise eine mit Hardlinks versehene Datei zu löschen, müssen ebenfalls sämtliche Hardlink entfernt werden, um die Speicherstelle freizugeben.

    Da sich Hardlinks stets auf der gleichen Partition befinden müssen wie die Original-Dateien und sich nur auf “normale” Dateien, jedoch nicht auf Verzeichnisse anwenden lassen, werden sie unter Linux nur selten verwendet.

locate

Mit locate suchbegriff werden alle Dateinamen des Systems nach einem Suchbegriff durchsucht und die Ergebnisse angezeigt. Mit locate -i suchbegriff wird dabei die Groß- und Kleinschreibung ignoriert.

Um auch neueste Änderungen, die sich seit dem letzten Systemstart ergeben haben, anzuzeigen, kann die Datei-Datenbank mittels updatedb aktualisiert werden.

ls

Mit ls wird der Inhalt des aktuellen Verzeichnisses ausgegeben. Mit weiteren Parametern lässt sich die Ausgabe den eigenen Wünschen anpassen:

  • ls -a zeigt auch Konfigurationsdateien und -verzeichnisse an, d.h. Dateien, deren Name mit einem . beginnt (“list all”).
  • ls -lh liefert eine ausführliche Liste, die auch Informationen über Dateityp, Dateirechte, Modifikationszeit und Dateigröße beinhaltet (“long list”). Der Zusatz h bewirkt, dass die Dateigröße “human readable”, d.h. in KB, MB oder GB anstelle von Bytes angeben wird.
  • ls -r listet rekursiv die Inhalte des aktuellen Verzeichnisses und der darin enthaltenen Unterverzeichnisse auf.

Mit ls pfad kann ebenfalls der Inhalt eines anderen Verzeichnisses ausgegeben werden, ohne dass das aktuelle Verzeichnis verlassen wird.

Eine vollständige Beschreibung aller Optionen findet sich in den Manpages (man ls).

lsblk

Mit lsblk werden alle “Block-Devices”, also Datenträger aufgelistet, die vom System erkannt werden. Zu jedem Device (beispielsweise sda, sdb usw.) werden zudem die einzelnen Partitionsnamen, die Größe der Partitionen sowie gegebenenfalls die Einhänge-Punkte (“Mountpoints”) ausgegeben.

man

Mit man programm werden die Hilfeseiten (“Manual-Pages”, “Manpages”) eines Programms angezeigt. Hier werden sämtliche Programm-Aufruf-Optionen sowie meist einige nützliche Beispielfälle beschrieben.

Beispiel: Mit man less werden die Hilfe-Seiten zum Pager-Programm “less” angezeigt.

Um alle Hilfeseiten nach einem bestimmten Begriff zu durchsuchen, kann man mit der Option -k (“keyword”) aufgerufen werden:

Beispiel: Mit man -k find werden alle Programmnamen und Funktionen aufgelistet, die den Suchbegriff “find” in ihrer Hilfeseite enthalten.

mkdir

Mit mkdir verzeichnisname wird ein neues Verzeichnis angelegt. verzeichnisname kann auch ein absoluter Pfad sein, dann wird das Verzeichnis an entsprechender Stelle angelegt.

mv

Mit mv datei neuer-pfad wird eine Datei (oder ein Verzeichnis) an eine andere Stelle verschoben. Es können mehrere Dateien auf einmal angeben werden; der zuletzt angegebene Pfad stellt dann den Zielpfad dar, in den alle zuvor angegebenen Dateien verschoben werden.

Mit mv alter-dateiname neuer-dateiname lässt sich eine Datei umbenennen.

pdftotext

Mit pdftotext pdf-datei lässt sich der gesamte Text einer PDF-Datei in eine Textdatei extrahieren. Der Text lässt sich dann meist recht einfach mittels ein paar Vim-Tricks und Einfügen von Restructured-Text-Syntax via Sphinx in ein druckbares Latex-Dokument oder eine leicht durchsuchbare HTML-Seite umwandeln. Sehr nützlich!

pwd

Mit pwd (“print working directory”) wird der volle Pfad des aktuellen Verzeichnisses ausgegeben.

rm

Mit rm datei(en) lässt sich eine oder mehrere Datei(en) unwiderruflich löschen.

  • Mit rm -r verzeichnis/* werden rekursiv alle Inhalte, ausgehend von verzeichnis gelöscht.

Achtung: Die Shell kennt keinen “Papierkorb”, Löschvorgänge sind somit endgültig. Vor dem Löschen sollte man sich daher stets vergewissern, ob man die entsprechenden Dateien auch wirklich löschen möchte.

Mit regulären Suchmustern wie * ist beim Löschen stets besondere Vorsicht geboten: Während rm -r *~ ausgehend vom aktuellen Verzeichnis alle (von manchen Editoren angelegten) temporären Dateien löscht, würde rm -r ~* sämtliche Inhalte des Home-Verzeichnisses unwiderruflich löschen!

rmdir

Mit rmdir verzeichnisname wird ein Verzeichnis gelöscht, sofern es leer ist. Möchte man ein nicht-leeres Verzeichnis löschen, so empfiehlt sich das einfach zu tippende rm -r  verzeichnisname* (es werden rekursiv alle Dateien, deren Pfadname mit verzeichnisname beginnt, gelöscht).

rsync

Mit rsync quelldatei backupdatei kann man eine Datei oder ein Verzeichnis gegenüber einer Backup-Kopie der Datei bzw. des Verzeichnisses aktualisiert (“synchronisiert”) halten. Der Backup findet dabei nur in eine Richtung statt, d.h. rsync prüft anhand der letzten Bearbeitungszeit (MTIME) einer Datei, ob sich in der Quelle gegenüber dem Backup eine Veränderung ergeben hat. Falls ja, werden diese Änderungen übernommen.

Möchte man einen Backup von einem ganzen Verzeichnispfad mitsamt allen Unterverzeichnissen anlegen oder aktuell halten, so empfiehlt sich folgender Aufruf von rsync:

rsync -vahz quellverzeichnis/* zielverzeichnis

Das Zielverzeichnis muss dabei ein bestehender Ordner sein, kann sich allerdings auch auf einer anderen Partition, einem externen Datenträger, oder – bei Verwendung von ssh – sogar auf einem anderen Rechner befinden.

Unison

Möchte man eine Synchronisierung zweier Verzeichnisse nicht nur in eine Richtung (ist der Backup “neuer” als die Quelle, so nimmt rsync keine Veränderungen vor), so ist das Tool Unison bzw. das gleiche Programm mit graphischer Oberfläche unison-gtk zu empfehlen. Es lässt sich über die gleichnamigen Pakete via apt installieren:

sudo apt-get install unison unison-gtk

Nach der Installation kann Unison mittels unison-gtk aufgerufen werden. Es verwendet intern ebenfalls rsync. Um es zu benutzen, erstellt man ein “Profil”, in welchem man zwei zu synchronisierende Verzeichnisse auswählt. Öffnet man dieses im Auswahlmenü, so scannt Unison die Verzeichnisse automatisch nach Veränderungen und zeigt diese mitsamt der Richtung und der Art der Veränderung graphisch an. Mit einem Klick auf “Go” (Hotkey g) werden die Änderungen übernommen.

rsync und unison eignen sich sehr gut zur Verwaltung von Sicherheitskopien oder zum “Mitnehmen” eines Projektes von einem stationären PC auf einen USB-Stick. Veränderungen sind dabei erlaubt, denn sie können wiederum in umgekehrter Richtung synchronisiert werden.

Persönlich verwende ich zur Synchronisierung von Dateien zwischen meinem Rechner und einem (mit LUKS verschlüsselten) USB-Stick folgende Methode: In einem eigenen Verzeichnis namens shared lege ich für jede zu synchronisierende Datei oder jeden zu synchronisierenden Ordner einen gleichnamigen Symlink ab, der allerdings am Namen die (zusätzliche) Endung .sync erhält. Dieses Verzeichnis mit den entsprechenden Symlinks muss sowohl auf der Festplatte wie auch auf dem USB-Stick vorhanden sein, die Ziele der Symlinks sind allerdings logischerweise unterschiedlich, beispielsweise:

/home/user/shared
    code.sync       # ---> /home/user/data/code
    configs.sync    # ---> /home/user/data/configs
    homepage.sync   # ---> /home/user/data/homepage

/media/user/usb0/shared
    code.sync       # ---> /media/user/usb0/code
    configs.sync    # ---> /media/user/usb0/configs
    homepage.sync   # ---> /media/user/usb0/homepage

Falls noch nicht vorhanden, so wird anschließend das Verzeichnis ~/.unison angelegt. In diesem Verzeichnis lassen sich beliebig viele Synchronisations-Profile als Textdateien mit der Endung .prf anlegen. Für die Synchronisation mit dem USB-Stick sieht ein solches Profil bei mir folgendermaßen aus:

# Datei: ~/.unison/usb-sync.prf

# Quell- und Zielverzeichnis:
root = /home/user/shared
root = /media/user/usb0/shared

# Angabe der zu synchronisierenden Dateien:
follow = Name *.sync

# Folgende Dateien dennoch ignorieren:
ignore = Regex .*/.backupdir/*
ignore = Regex .*/.git/*
ignore = Regex .*/.hg/*

# Bei Unterschieden zwischen Dateien nur das Nötigste ausgeben:
diff = diff -y -W 79 --suppress-common-lines

Diese Variante setzt voraus, dass der USB-Stick immer an der gleichen Stelle eingebunden wird (im obigen Beispiel /media/user/usb0). Anschließend muss nur noch unison usb-sync aufgerufen werden, um eine Synchronisation der angegebenen Inhalte zu erreichen.

Im Shell-Modus wird die von Unison vorgeschlagene Synchronisationsrichtung mit <---- oder ----> angezeigt. Drückt man f (“follow”), so wird diese Empfehlung übernommen. Wurden sowohl im Quell- wie auch im Zielverzeichnis Änderungen vorgenommen, so zeigt Unison <-?-> an. Der Benutzer muss in diesem Fall die Unterschiede zwischen den Dateiversionen gegebenenfalls selbst überprüfen (beispielsweise mittels vimdiff) und kann anschließend entweder mittels > oder < eine Synchronisationsrichtung manuell angeben.

Synchronisierungen mit rsync bzw. unison lassen sich nicht rückgängig machen. Zu solch einem Zweck oder für Mehrbenutzer-Systeme, wenn es zu konkurrierenden Entwicklungen kommen kann (wenn beispielsweise die gleiche Datei in zwei Verzeichnissen auf unterschiedliche Weise verändert wird), sollte eine Versionskontroll-Programm wie git oder mercurial genutzt werden.

ssh

Mit ssh benutzername@rechneradresse kann man sich auf einem anderen Linux-Rechner im lokalen Netzwerk oder im Internet anmelden. Ist die Rechneradresse erreichbar, erscheint ein Dialogfeld zur Passworteingabe. Alle auf dem Fremdrechner verfügbaren Shell-Befehle und -Programme lassen sich somit “ferngesteuert” ausführen.

Zu einer Verwendung von ssh im lokalen Netzwerk sollten die folgenden beiden Pakete installiert werden:

sudo aptitude install openssh-client openssh-server

Ein Kopieren von Dateien zwischen Rechnern im Netzwerk ist (kompliziert) mit scp oder (einfach) mit Hilfe des Midnight-Commanders mc möglich.

tar

Mit tar können mehrere Dateien zu einem Archiv zusammengefasst werden. Beispiel:

tar -cf archiv.tar datei1 datei2 ...

Mit der Option z wird das Archiv zusätzlich mit gzip komprimiert. Mit der Option v wird der Fortschritt der Archivierung angezeigt (“verbose” = redselig).

tar -czvf archiv.tar.gz datei1 datei2 ...

Der Inhalt eines tar-Archivs kann mittels tar tf archiv.tar angezeigt werden. Mittels der Option x (extract) kann der Inhalt des Archivs wieder entpackt werden:

tar -xvf archiv.tar          # für  "normale"   Archive
tar -xvzf archiv.tar.gz      # für komprimierte Archive

Anstelle der Option -z kann auch -j eingegeben werden, um anstelle der gz-Komprimierung das stärker komprimierende bz2-Format zu nutzen.

tee

Das Programm tee liest Text von der Standardeingabe ein und schreibt diesen sowohl auf die Standardausgabe als auch in eine Datei. Dies kann beispielsweise genutzt werden, um eine Fehlermeldung einerseits auf dem Bildschirm auszugeben, andererseits gleichzeitig aber auch einen Eintrag in einer Logdatei zu erstellen. Meistens wird dazu ein Text mittels echo ausgegeben und mittels des Pipe-Operators | an tee weitergereicht, beispielsweise echo "Hallo!" | tee dateiname.

top

Mit top werden aktuell laufende Prozesse, geordnet nach CPU-Auslastung, angezeigt. Auf diese Weise kann die Prozess-ID (PID) eines außer Kontrolle geratenen Programms oder “Speicherfressers” schnell ausfindig gemacht und der entsprechende Prozess abgebrochen werden.

  • Mit P werden die Prozesse nach CPU-Auslastung sortiert, mit M nach Memory-Auslastung, mit N nach Prozess-ID.
  • Mit k wird nach Eingabe einer PID-Nummer der entsprechende Prozess abgebrochen. Die Nachfrage, mit welchem Signal der Prozess unterbrochen werden soll (Vorgabewert: 15), kann meist mit Enter bestätigt werden. Bei hartnäckigen Prozessen kann 9 angegeben werden, um den Prozess unabhängig von dessen Signalwert abzubrechen.
  • Mit q wird top wieder beendet.

touch

Mit touch dateiname lässt sich eine neue, leere Datei (beispielsweise eine neue Log-Datei) anlegen.

uname

Mit uname -a kann angezeigt werden, ob es sich bei dem laufenden System um ein 32- oder ein 64-bit System handelt. Dies muss bisweilen berücksichtigt werden, wenn Zusatzpakete nich via aptitude installiert werden, sondern beispielsweise als fertige Debian-Pakete von einer Webseite heruntergeladen werden sollen.

wc

Mit wc dateiname wird die Anzahl der Zeilen, Worte und Zeichen ausgegeben, die in der angegebenen Datei vorkommen (“word count”).

Oftmals wird wc in Kombination mit find oder grep verwendet, um die Anzahl von Treffern bei einer bestimmten Suche anzuzeigen; um beispielsweise die Anzahl aller regulären Dateien des aktuellen Verzeichnisses mitsamt aller Unterverzeichnisse (ohne die Verzeichnisnamen selbst) anzuzeigen, kann man find ./ -type f | wc eingeben.

wget

Mit wget lassen sich mit wenig Aufwand Downloads von der Shell aus starten. Dabei können ganze Verzeichnisse (falls gewünscht auch mitsamt Unterverzeichnissen), bestimmte Dateitypen, Dateigrößen usw. als Auswahlkriterien festgelegt werden.

Um beispielsweise alle Beispiel-Dateien (1000 Stück!) des Computer-Algebra-Systems Maxima von der Seite http://www.lungau-academy.at/wx1/ herunterzuladen, genügt folgender Befehl:

wget -r -l1 -np -A wxmx http://www.lungau-academy.at/wxmax1001/

Hierbei steht -r für ein rekursives Herunterladen, -l1 beschränkt die Anzahl der durchsuchten Unterverzeichnisse auf 1. Die Option -np bzw. --no-parent ist wichtig, um zu verhindern, dass auch übergeordente Verzeichnisse durchsucht werden – dies könnte im Zweifelsfall die Downloadmenge erheblich vergrößern. Die Option -A filetype legt anhand der angegebenen Dateiendung(en) fest, welche Datentypen akzeptiert werden (im umgekehrten Fall können mit -R filetype bestimmte Datentypen zurückgewiesen werden).

Ein gutes Tutorial (en.) findet sich hier.

which

Mit which programm wird angezeigt, unter welchem Systempfad die auszuführende Datei des angegebenen Programms zu finden ist.

xargs

Mit xargs können die Ergebnisse eines Shell-Programms als Argumente eines anderen Shell-Programms verwendet werden. Dies ist beispielsweise bei der Kombination von find und grep nützlich, um die von find gefundenen Dateinamen nicht unmittelbar als (Eingabe-)Text, sondern als Zieldateien nach bestimmten Mustern zu durchsuchen.

Sollen beispielsweise alle .tex-Dateien nach einem bestimmten Begriff durchsucht werden, kann man folgendes eingeben:

find ./ -name "*.tex" | xargs grep

Ohne die Verwendung von xargs würden hier nur die Namen der Dateien, jedoch nicht deren Inhalt durchsucht.

zip, unzip

Mit zip können mehrere Dateien zu einem Datei-Archiv gebündelt, mit unzip wieder entpackt werden. Die grundlegenden Befehle sehen etwa so aus (weitere Informationen erhält man mittels man zip bzw. man unzip):

  • Mit zip archivname.zip datei1 datei2 ... werden mehrere Dateien zu einem (komprimierten) zip-Archiv gebündelt. Mit zip -r können Dateien und/oder Verzeichnisse rekursiv (samt Unterverzeichnissen) gepackt, mit zip -g zu einem bestehenden Archiv hinzugefügt werden.
  • Mit unzip archivname wird ein zip-Archiv wieder entpackt.

Anmerkungen:

[1]Mittels tar -cjvf archivname datei1 datei2 können zwei oder mehrere Dateien direkt zu einem komprimierten tar-Archiv zusammgefasst werden.
[2]

Beispielsweise bietet der Dateimanager Midnight Commander die Tastenkombination Ctrl x Ctrl s zur schnellen Erzeugung von Symlinks an. Mit dem Midnight Commander oder mittels cp -L kann man darüber hinaus beim Kopieren von Symlinks optional wieder auf die Originaldateien zurückgreifen und deren Inhalte kopieren.

Wird ein Symlink kopiert, so zeigt auch die Kopie auf den gleichen (absoluten) Pfad wie der ursprüngliche Symlink.