.. _Standard-Programme: Standard-Programme ================== Im folgenden werden einige Programme vorgestellt, die für eine Benutzung innerhalb eines Shell-Fensters vorgesehen sind und daher meist mittels der Tastatur gesteuert werden. Derartige Programme haben keine graphische Bedienoberfläche (GUI), sondern sind textbasiert. Die in der folgenden Auswahl aufgelisteten Programme sind unter Debian/Ubuntu/LinuxMint entweder bereits standardmäßig installiert, oder sie lassen sich einfach aus den Standard-Paketquellen nachinstallieren. Nach der Installation können die Programme von jedem Benutzer des Rechners (ohne SuperUser-Rechte) genutzt werden. .. _Datei-Verwaltung (Shell): Datei-Verwaltung ---------------- .. _Datei-Manager (Shell): Datei-Manager ^^^^^^^^^^^^^ .. {{{ .. index:: Datei-Manager; mc .. index:: Midnight Commander, mc .. _mc: .. _Midnight Commander: ``mc`` """""" .. {{{ Der "Midnight Commander" ``mc`` ist ein äußerst praktisches Werkzeug: Er bietet eine klar strukturierte Bedienoberfläche und ermöglicht es, Dateien mit nur wenigen Tastendrücken schnell und elegant zu verwalten. .. image:: ../pics/midnight-commander.png :align: center :width: 60% ``mc`` ist über die Paketverwaltung mittels des gleichnamigen Pakets installierbar: .. code-block:: sh sudo aptitude install mc .. https://www.midnight-commander.org/wiki/doc/filePanels/hotkeys In der Grundeinstellung sind im Midnight-Commander zwei Ordner-Panele nebeneinander angeordnet. Zwischen den beiden Panelen (und damit zwischen den beiden angezeigten Verzeichnissen) kann mittels der ``Tab``-Taste hin- und hergewechselt werden. In einem Panel lassen sich Dateien folgendermaßen auswählen: * Mit den Cursor-Tasten :math:`\uparrow` und :math:`\downarrow` kann in Einzelschritten zwischen den Dateien des Panel-Ordners navigiert werden. * Mit den ``PageUP``- beziehungsweise ``PageDown``-Tasten können umfangreiche Ordner seitenweise "durchblättert" werden. * Mit der ``Home``-Taste gelangt man zum ersten Eintrag eines Verzeichnisses. Dieser ist stets ``..`` und ermöglicht durch Bestätigung mit der ``Enter``-Taste einen Wechsel in das übergeordnete Verzeichnis. * Mit der ``End``-Taste gelangt man zum letzten Eintrag eines Verzeichnisses. * Mit der ``Insert``-Taste können mehrere Dateien ausgewählt oder wieder demarkiert werden. Durch einen Wechsel in ein anderes Verzeichnis wird die aktuelle Auswahl ebenfalls aufgehoben. Viele häufig auftretende Aktionen lassen sich mittels der folgenden Funktionstasten bewerkstelligen: .. list-table:: :name: tab-mc-funktionstasten :widths: 20 50 * - ``F3`` - Ausgewählte Datei(en) mit dem internen Betrachter ("Pager") öffnen. * - ``F4`` - Ausgewählte Datei(en) mit einem Editor öffnen. * - ``F5`` - Ausgewählte Datei(en) vom aktuellen Panel in das gegenüberliegende kopieren. * - ``F6`` - Ausgewählte Datei(en) vom aktuellen Panel in das gegenüberliegende verschieben. * - ``F7`` - Einen neuen Ordner im Verzeichnis des aktuellen Panels erstellen * - ``F8`` - Ausgewählte Datei(en) und/oder Ordner im aktuellen Panel löschen. * - ``F9`` - Menüzeile anwählen Über das Menü ``Optionens`` lässt sich der Midnight-Commander bezüglich Aussehen und Verhalten etwas anpassen. Persönlich halte ich folgende Anpassungen für sinnvoll beziehungsweise angenehm: * Im Bereich ``Konfiguration`` die Option "Sicheres Löschen" (mittels der Leertaste) aktivieren, um nicht eine Datei versehentlich durch Drücken der ``Del``-Taste, sondern nur mittels :math:`F8` löschen zu können. * Im Bereich ``Layout`` die Menüleiste, Tastenleiste und Informationsleiste (mittels der Leertaste) deaktivieren. * Im Bereich ``Paneloptionen`` (ebenfalls mittels der Leertaste) "Lynx-artige Bewegungen erlauben" aktivieren. Dies erlaubt es, mittels der rechten Cursortaste in das ausgewählte Verzeichnis zu wechseln beziehungsweise mit der linken Cursortaste das übergeordnete Verzeichnis anzuwählen. Dies funktioniert übrigens auch auch mit (komprimierten) Archiv-Dateien! * Im Bereich ``Aussehen`` kann ein anderes Farbschema gewählt werden. Persönlich nutze ich am liebsten das zum Standard-Umfang gehörende Theme ``modarcon16-efbg-thin``. Weitere nützliche Tastenkombinationen für die Bedienung des ``mc`` sind: .. list-table:: :name: tab-mc-tastenkombinationen :widths: 25 50 * - ``Ins`` - Datei unter Cursor markieren beziehungsweise demarkieren * - ``*`` - Alle Dateien des aktuellen Verzeichnisses markieren beziehungsweise demarkieren * - ``+`` - Dateien nach bestimmten Kriterien markieren * - ``\`` - Dateien nach bestimmten Kriterien demarkieren * - ``Ctrl Leertaste`` - Größe des ausgewählten Verzeichnisses anzeigen * - ``Ctrl s Text`` - Im Aktuellen Verzeichnis zu einer Datei springen, die mit ``Text`` beginnt. Funktioniert auch mit Verzeichnisnamen. Groß-/Kleinschreibung beachten! * - ``Esc ?`` - Im aktuellen Verzeichnis nach Dateien und/oder Inhalten suchen * - ``Esc Tab`` - Auto-Vervollständigung der Eingabezeile (wie ``Tab`` in einer Shell) * - ``Esc t`` - Zwischen verschiedenen Dateilisten-Layouts wechseln * - ``Esc ,`` - Zwischen horizontaler und vertikaler Fensterteilung wechseln * - ``Esc .`` - Mit ``.`` beginnende Konfigurationsdateien und -verzeichnisse ein- und ausblenden * - ``Esc Enter`` - Name der Datei unter dem Cursor in die Eingabezeile kopieren * - ``Ctrl x t`` - Die Namen aller markierten Dateien in die Eingabezeile kopieren * - ``Ctrl x Ctrl t`` - Die Namen aller markierten Dateien der anderen Fensterhälfte in die Eingabezeile kopieren * - ``Ctrl x p`` - Den aktuellen Pfadnamen in die Eingabezeile kopieren * - ``Ctrl x Ctrl p`` - Den Pfadnamen der anderen Fensterhälfte in die Eingabezeile kopieren * - ``Ctrl a Ctrl k`` - Die Eingabezeile säubern (an den Anfang gehen und alles bis zum Ende löschen). * - ``Ctrl O`` - Wechsel zwischen Mitnight-Commander und Shell (mit ``mc`` als Background-Job) * - ``Ctrl U`` - Beide Fensterhälften vertauschen * - ``Ctrl \`` - Verzeichnis-"Hotlist" anzeigen. Hier lassen sich neben lokalen Pfaden auch FTP- beziehungsweise SSH-Zugangsadressen speichern beziehungsweise aufrufen * - ``Ctrl x Ctrl s`` - Einen Symlink der ausgewählten Datei (beziehungsweise des ausgewählten Ordners) im Pfad der anderen Fensterhälfte erzeugen (anstelle die Datei dorthin zu kopieren) * - ``Ctrl H`` - Liste der zuletzt besuchten Verzeichnisse anzeigen. Auswahl mit Pfeiltasten, Bestätigen mit ``Enter`` * - ``Ctrl h`` - Liste der letzten Eingabezeilen-Befehle anzeigen. Auswahl mit Pfeiltasten, Bestätigen mit ``Enter`` Drückt man ``F9`` zum Aktivieren der Menüzeile, anschließend unmittelbar ``Enter`` zum Öffnen der Menüs für das linke beziehungsweise rechte Panel und anschließend ``l`` für ``Listenmodus``, so kann das Aussehen der Panels etwas optimieren, indem man eine benutzerdefinierte Ansicht wählt. Persönlich nutze ich dabei folgende Anzeige: .. code-block:: sh half type name | size:4 | mtime Die Fensterbreite wird damit vorwiegend für die Anzeige der Dateinamen und den jeweiligen Endungen genutzt; am rechten Rand des Panels wird das Datum der letzten Änderung angezeigt (``mtime``); dazwischen wird die Dateigröße eingeblendet, wobei dafür maximal vier Zeichen genutzt werden dürfen. Dadurch wird eine Dateigröße von ``3196000`` Bytes in Form von ``3.2M`` dargestellt; es die Dateigröße wird also gerundet und als Kilo- beziehungsweise Mega- oder Gigabyte ausgegeben. Bisweilen ist es auch nützlich, ``F9 Enter s`` einzugeben, um in das Menü für das jeweilige Panel zu gelangen und dabei die Sortierreihenfolge festzulegen. Meist mag man die Dateien alphabetisch sortiert aufgelistet haben, bisweilen ist allerdings auch eine Sortierung nach dem Datum der letzten Änderung, nach der Dateigröße oder den Datei-Endungen hilfreich. .. Editor .. editor_tab_spacing=4 .. editor_word_wrap_line_length=80 .. editor_fill_tabs_with_spaces=true .. editor_return_does_auto_indent=true .. editor_backspace_through_tabs=false .. editor_fake_half_tabs=true .. editor_option_save_mode=0 .. editor_option_save_position=true .. editor_option_auto_para_formatting=false .. editor_option_typewriter_wrap=false .. editor_edit_confirm_save=true .. editor_syntax_highlighting=true .. editor_persistent_selections=false .. editor_drop_selection_on_copy=true .. editor_cursor_beyond_eol=false .. editor_cursor_after_inserted_block=false .. editor_visible_tabs=true .. editor_visible_spaces=true .. editor_line_state=true .. editor_simple_statusbar=false .. editor_check_new_line=false .. editor_show_right_margin=false .. editor_group_undo=true .. editor_state_full_filename=true .. editor_ask_filename_before_edit=false .. ... .. skin=modarin256 .. Ctrl U macht Undo .. http://www.softpanorama.org/OFM/MC/Mcedit/mcedit_keymap.shtml .. https://midnight-commander.org/wiki/doc/editor/hotkeys .. }}} .. }}} Navigation ^^^^^^^^^^ .. {{{ .. index:: cd .. _cd: ``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. Als Ergänzung zur ``cd``-Anweisung können :ref:`alias `-Definitionen wie ``alias ..='cd ..'``, ``alias ...='cd ../..'``, ``alias cdd='cd ~/downloads'``, usw. genutzt werden. Persönlich habe ich viele derartige Definitionen in der Konfigurationsdatei ``~/.zshrc`` (früher ``~/.bashrc``) stehen. [#]_ .. }}} .. index:: ls .. _ls: ``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, also 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", also 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. .. * ls -lt: Sortiert nach Modifikationszeit .. * ls -lS: Sortiert nach Dateigröße .. - normale Datei .. d Verzeichnis ( d = directory) .. p Named Pipe; steht für eine Art Pufferungsdatei, eine Pipe-Datei. .. c ( c = character oriented) steht für eine zeichenorientierte Gerätedatei. .. b ( b = block oriented) steht für eine blockorientierte Gerätedatei. .. s ( s = socket) steht für ein Socket (genauer einen UNIX-Domain-Socket). .. l symbolische Links .. ( rwx ) von links nach rechts: Eigentümer, Gruppe und allen anderen. 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``). .. }}} .. index:: pwd .. _pwd: ``pwd`` """"""" .. {{{ Mit ``pwd`` ("print working directory") wird der volle Pfad des aktuellen Verzeichnisses ausgegeben. .. }}} .. }}} Suchprogramme ^^^^^^^^^^^^^ .. {{{ .. index:: find .. _find: ``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: .. code-block:: bash 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 :math:`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 :ref:`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: .. code-block:: bash 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 :ref:`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: .. code-block:: bash find ./ -name "*.rst" | xargs grep "Suchbegriff" Nutzt man diese Kombination häufiger, so kann dafür in der Konfigurationsdatei ``~/.bashrc`` ein :ref:`alias ` definiert werden: .. code-block:: bash 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. .. find / -user benutzername -print 2>/dev/null .. Findet alle Dateien eines Benutzers, gibt keine Fehlermeldungen aus, da .. Fehlerausgaben (Kanal 2) nach /dev/null umgeleitet werden und somit nicht .. auf dem Bildschirm erscheinen. .. Damit uns im Beispiel hier nicht die Standardausgabe (Kanal 1) auf dem .. Bildschirm stört, leiten wir diese auch beim Start des Scripts nach /dev/null um .. (``1>/dev/null``). Und damit uns die Shell für weitere Eingaben zur Verfügung .. steht, stellen wir die Ausführung des Scripts in den Hintergrund (``&``). .. }}} .. index:: grep .. _grep: ``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: .. code-block:: bash 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: .. code-block:: bash 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 :ref:`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). .. Todo: Links auf reguläre Ausdrücke .. TODO: AG und Ack .. }}} .. index:: locate .. _locate: ``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. .. Datenbank-Datei: /var/lib/mlocate/mlocate.db .. }}} .. }}} Dateien kopieren, verschieben, erstellen und löschen ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. {{{ .. index:: cp .. _cp: ``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. .. }}} .. index:: mkdir .. _mkdir: .. dd [option=wert] .. Vewendung: Kopieren von Dateien (auch Geräte) .. dd if=/dev/cdrom of=/tmp/cd.iso .. Es wird immer die ganze CD-ROM kopiert, egal wie voll die CD-ROM ist ``mkdir`` """"""""" .. {{{ Mit ``mkdir verzeichnisname`` wird ein neues Verzeichnis angelegt. ``verzeichnisname`` kann auch ein absoluter Pfad sein, dann wird das Verzeichnis an entsprechender Stelle angelegt. .. }}} .. index:: mv .. _mv: ``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. .. }}} .. index:: rm .. _rm: ``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! .. }}} .. index:: rmdir .. _rmdir: ``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). .. }}} .. index:: rsync .. _rsync: ``rsync`` """"""""" .. {{{ Mit ``rsync quelldatei backupdatei`` kann man eine Datei oder ein Verzeichnis gegenüber einer Backup-Kopie der Datei beziehungsweise des Verzeichnisses aktualisiert ("synchronisiert") halten. Der Backup findet dabei nur in eine Richtung statt, ``rsync`` prüft also 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``: .. code-block:: bash 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. .. use rsync with -l to preserve links! (copy symlinks as symlinks) .. and -L or --copy-links to copy what the symlink actually points to. .. }}} .. index:: shred .. _shred: ``shred`` """"""""" .. {{{ Mit ``shred dateiname`` kann eine Datei sicher gelöscht werden, so dass sie auch mit Recovery-Programmen nicht wiederhergestellt werden kann. Während beim "normalen" Löschen lediglich der "Einhängepunkt" der Datei entfernt wird, überschreibt ``shred`` den belegten Speicherplatz mit zufällig mit Nullen und Einsen. Man kann ``shred`` auch verwenden, um ganze Partitionen oder Festplatten zu "säubern" (beispielsweise, wenn diese weiterverkauft werden sollen); als Dateiname muss in diesem Fall der Device-Name der Ziel-Partition angegeben werden. .. }}} .. index:: touch .. _touch: ``touch`` """"""""" .. {{{ Mit ``touch dateiname`` lässt sich eine neue, leere Datei anlegen -- beispielsweise eine neue Log-Datei oder eine Datei zu Test-Zwecken. .. }}} .. }}} Datei-Eigenschaften ^^^^^^^^^^^^^^^^^^^ .. {{{ .. index:: chmod .. _chmod: ``chmod`` """"""""" .. {{{ Mit ``chmod`` lassen sich die Zugriffsrechte einer Datei oder eines Verzeichnisses festlegen. Eine Datei kann lesbar (``r`` für "read"), schreibbar (``w`` für "write") und/oder ausführbar (``x`` für "executeable") sein; Verzeichnisse sollten stets ausführbar sein. *Beispiele:* * Mit ``chmod +x file`` wird eine Datei (beispielsweise ein :ref:`Shell-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. .. todo ... .. http://askubuntu.com/questions/685730/change-owner-of-files-recursively-but-not-directories .. find . -type f -exec chmod 644 {} + .. u Eigentümer (user) .. g Gruppe (group) .. o alle anderen (others) .. a alle drei Benutzergruppen (all) .. + hinzufügen .. - wegnehmen .. = gleich nachfolgendem Muster setzen .. r Leserecht (read); Bit-Wert 4 .. w Schreibrecht (write); Bit-Wert 2 .. x Ausführrecht (execute); Bit-Wert 1 .. Ausführrecht für Eigentümer von Datei script hinzufügen: .. chmod u+x script .. Datei script: alle Rechte für Eigentümer; Lese- und Ausführrechte für .. Gruppe; für alle anderen nur Ausführrechte. Gleichgültige Varianten: .. chmod 751 script .. chmod u=rwx,g=rx,o=r script .. }}} .. index:: file .. _file: ``file`` """""""" .. {{{ Mit ``file dateiname`` werden ausführliche Datei-Informationen (Dateityp, Version, Kodierung) der angegebenen Datei angezeigt. .. }}} .. }}} Verlinkungen ^^^^^^^^^^^^ .. {{{ .. index:: ln .. _ln: ``ln`` """""" .. {{{ Mittels ``ln`` beziehungsweise ``ln -s`` lassen sich die zwei unter Linux möglichen Arten von Verknüpfungen erzeugen: .. index:: Hardlink * 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. .. index:: Symlink .. _Symlink: .. _Symlinks: * Mit ``ln -s datei1 datei2`` wird zu einer existierenden Datei ``datei1`` die Datei ``datai2`` als so genannter "Symbolischer Link" erzeugt (auch "Symlink" oder "Softlink" genannt). Dabei handelt es sich um eine neue Datei, deren einziger Inhalt ein Verweis auf die bestehende Datei ist (Symlinks sind daher stets nur wenige Bytes groß). Wird ein Symlink zu einer Textdatei mit einem Editor geöffnet, verändert und gespeichert, so wird auch die Originaldatei entsprechend verändert. Wird allerdings der Symlink einer Datei gelöscht, so bleibt die Originaldatei bestehen. Wird im umgekehrten Fall die Original-Datei gelöscht oder umbenannt, so bleibt der Symlink als Datei bestehen, zeigt aber ins Leere ("gebrochener Link"). Der Symlink muss in diesem Fall entfernt und neu erzeugt werden. [#]_ Wird ein Symlink zu einer ausführbaren Datei erzeugt, so kann diese auch über den Symlink aufgerufen werden. Wird ein Symlink zu einem Ordner erstellt, so lassen sich dessen Inhalte auch über den Symlink anzeigen und verändern. Da Symlinks auch anders benannt sein können als die Originaldateien, können sie beispielsweise dazu genutzt werden, um aus einer vorhandenen Musiksammlung individuelle Playlisten in separaten Ordnern anzulegen. Mit Symlinks verknüpfte Ordner beziehungsweise Dateien müssen nicht zwingend auf dem gleichen Datenträger beziehungsweise der gleichen Partition liegen. So ist es beispielsweise möglich auf einen (automatisch ins ``/media``-Verzeichnis eingebundene) USB-Stick oder eine verschlüsselte Festplattenpartition über einen entsprechenden Symlink im Home-Verzeichnis zuzugreifen. .. }}} .. }}} Archive ^^^^^^^ .. {{{ .. index:: bzip2 .. _bzip2 und bunzip2: ``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 :ref:`tar ` zu einem Archiv gepackt. [#]_ .. }}} .. index:: gzip .. _gzip: ``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). .. }}} .. index:: tar .. _tar: ``tar`` """"""" .. {{{ Mit ``tar`` können mehrere Dateien zu einem Archiv zusammengefasst werden. Beispiel: .. code-block:: bash 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). .. code-block:: bash 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: .. code-block:: bash 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. .. }}} .. index:: zip, unzip .. _zip: .. _unzip: .. _zip und unzip: ``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`` beziehungsweise ``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. .. }}} .. }}} Pager und Editoren ^^^^^^^^^^^^^^^^^^ .. {{{ .. index:: antiword .. _antiword: ``antiword`` """""""""""" .. {{{ Mit ``antiword`` lassen sich MS-Word-Dokumente (``.doc``) bequem in einem Shell-Fenster als Textform anzeigen. ``antiword`` kann mittels der Paketverwaltung ``aptitude`` einfach installiert werden: .. code-block:: sh sudo aptitude install antiword Die Ausgabe eines Word-Dokuments auf dem Bildschirm lässt sich dann folgendermaßen erreichen: .. code-block:: sh antiword file.doc Die Ausgabe kann selbstverständlich auch in eine Textdatei umgeleitet werden: .. code-block:: sh antiword file.doc > file.txt Das erspart oftmals ein Öffnen von :ref:`LibreOffice ` oder :ref:`Abiword `. Leider kann ``antiword`` keine neueren ``docx``-Dateien als Text ausgeben; hierzu kann allerdings das Paket ``docx2txt`` mittels :ref:`apt ` installiert werden, das ein gleichnamiges Programm zum Abbilden einer ``docx``-Datei in eine gleichnamige ``.txt``-Datei genutzt werden kann. .. }}} .. index:: cat, head, tail .. _cat: ``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. Der Anfang oder das Ende einer Datei kann optional auch mit ``head file`` beziehungsweise ``tail file`` angezeigt werden. ``cat`` kann auch 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``. .. }}} .. index:: less .. _less: ``less`` """""""" .. {{{ Mit ``less dateiname`` kann der Inhalt einer Textdatei angezeigt werden. Die Anzeige beginnt am Anfang der Datei, mit der :math:`\downarrow` beziehungsweise :math:`\uparrow` kann innerhalb der Datei nach unten beziehungsweise 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. .. }}} .. index:: man .. _man: ``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. .. }}} .. }}} Internet -------- Netzwerk-Programme ^^^^^^^^^^^^^^^^^^ .. {{{ .. index:: host .. _host: ``host`` """""""" .. {{{ Mit ``host URL`` kann die IP-Adresse einer Webseite angezeigt werden. Beispiel: .. code-block:: bash 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 :ref:`whois ` verwendet, um zusätzliche Informationen über den Server einer Domain zu erhalten. .. }}} .. index:: hostname .. _hostname: ``hostname`` """""""""""" .. {{{ Mit ``hostname`` kann der Netzwerk-Name des Rechners angezeigt werden, auf dem man aktuell eingelogt ist. Dies kann beispielsweise nützlich sein, wenn man via :ref:`ssh ` auch auf externen Rechnern arbeitet. Um den Netzwerk-Namen des Computers für die Dauer der aktuellen Sitzung zu ändern, kann man ``hostname neuer-name`` eingeben; um ihn permanent zu ändern, muss dieser in der Datei ``/etc/hostname`` mit SuperUser-Rechten geändert werden. .. }}} .. _ip r: ``ip`` """""" .. {{{ Mit ``ip r`` kann die lokale Netzwerkadresse (``192.168.xxx.xxx``) angezeigt werden. Weitere Nutzungsmöglichkeiten des (ziemlich umfangreichen) Programms ``ip`` sind im Abschnitt :ref:`Netzwerk-Verwaltung mittels iproute2 ` näher beschrieben. .. }}} .. index:: nmap .. _nmap: ``nmap`` """""""" .. {{{ Mit ``nmap`` können unter anderem anderem die Rechner innerhalb des lokalen Netzwerks mitsamt lokaler Netzwerkadresse aufgelistet werden. Die Syntax hierzu lautet: .. code-block:: sh nmap -sP 192.168.1.0/24 In diesem Fall wird davon ausgegangen, dass die zu durchsuchenden Netzwerkadressen die Form ``192.168.1.xxx`` haben, wobei ``xxx`` eine laufende Nummer zwischen ``1`` und ``255`` sein kann. Ebenfalls möglich sind andere Namensräume, beispielsweise ``192.168.2.xxx``. Welcher bei den lokalen Rechnern vorliegt, hängt von den Einstellungen des Routers ab; man kann den lokalen Namensraum mittels Eingabe ``ip r`` abfragen. .. Noch schneller lassen sich die lokalen Rechner samt Netzwerkadressen mittels .. Eingabe von ``arp-scan -l`` auflisten; dazu muss lediglich das Programm .. ``arp-scan`` mittels ``aptitude`` installiert werden. .. https://www.cyberciti.biz/networking/nmap-command-examples-tutorials/ .. ## Scan a host name with more info### .. nmap -v server1.cyberciti.biz .. You can scan a range of IP address using a wildcard: .. nmap 192.168.1.* .. Finally, you scan an entire subnet: .. nmap 192.168.1.0/24 .. Find out if a host/network is protected by a firewall .. nmap -sA 192.168.1.254 .. nmap -sA server1.cyberciti.biz .. Scan a host when protected by the firewall .. nmap -PN 192.168.1.1 .. nmap -PN server1.cyberciti.biz .. How do I perform a fast lokal network scan? .. nmap -F 192.168.1.1 .. Only show open (or possibly open) ports .. nmap --open 192.168.1.1 .. nmap --open server1.cyberciti.biz .. Show all packets sent and received .. nmap --packet-trace 192.168.1.1 .. nmap --packet-trace server1.cyberciti.biz .. Show host interfaces and routes .. This is useful for debugging (ip command or route command or netstat command like output using nmap) .. nmap --iflist .. The fastest way to scan all your devices/computers for open ports ever .. nmap -T5 192.168.1.0/24 .. Scan a firewall for security weakness .. The following scan types exploit a subtle loophole in the TCP and good for testing security of common attacks: .. ## TCP Null Scan to fool a firewall to generate a response ## .. ## Does not set any bits (TCP flag header is 0) ## .. nmap -sN 192.168.1.254 .. ## TCP Fin scan to check firewall ## .. ## Sets just the TCP FIN bit ## .. nmap -sF 192.168.1.254 .. ## TCP Xmas scan to check firewall ## .. ## Sets the FIN, PSH, and URG flags, lighting the packet up like a Christmas tree ## .. nmap -sX 192.168.1.254 .. See how to block Xmas packkets, syn-floods and other conman attacks with iptables. .. }}} .. index:: ssh .. _ssh: ``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: .. code-block:: bash sudo aptitude install openssh-client openssh-server Die Benutzung von ``ssh`` ist im Abschnitt :ref:`SSH -- Arbeiten auf entfernten Rechnern ` ausführlich beschrieben. .. }}} .. index:: whois .. _whois: ``whois`` """"""""" .. {{{ Mit ``whois`` können Informationen über den Betreiber, den Standort und das System des Servers angezeigt werden, der zu einer bestimmten IP-Adresse gehört; letztere kann zuvor mittels ``host`` ermittelt werden: .. code-block:: sh host grund-wissen.de # grund-wissen.de has address 188.40.57.88 # grund-wissen.de mail is handled by 10 mail.grund-wissen.de. whois 188.40.57.88 # ... viele Infos ... Üblicherweise befindet sich unter den angezeigten Informationen auch eine Email-Adresse des Server-Administrators. .. }}} .. }}} Download-Helfer ^^^^^^^^^^^^^^^ .. {{{ .. index:: wget .. _wget: ``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: .. code-block:: bash 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`` beziehungsweise ``--no-parent`` ist wichtig, um zu verhindern, dass auch übergeordnete 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 `__. .. https://www.gnu.org/software/wget/manual/wget.html .. http://www.delorie.com/gnu/docs/wget/wget.html .. }}} .. Webbrowser .. ^^^^^^^^^^ .. .. .. index:: lynx .. .. todo .. }}} Multimedia ---------- .. {{{ PDF-Werkzeuge und Texterkennung ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. {{{ .. index:: pdfimages .. _pdfimages: ``pdfimages`` """"""""""""" .. {{{ Das ``pdfimages``-Programm ermöglicht es, alle in einer PDF-Datei enthaltenen Graphiken beziehungsweise Bilder auf einmal zu "extrahieren", also als einzelne Bilddateien zu speichern. ``pdfimages`` ist Teil des ``poppler-utils``-Pakets, das sich folgendermaßen installieren lässt: .. code-block:: sh aptitude install poppler-utils Um alle Bilder zu extrahieren, gibt man im Ordner der PDF-Datei folgendes ein: .. code-block:: sh pdfimages dateiname.pdf dateiname Die Bilder werden dann als ``dateiname-001.ppm`` usw. gespeichert; mit ``pdfimages -f n`` beziehungsweise ``pdfimages -l n`` können jeweils die erste und/oder die letzte zu scannende Seitennummer (``n``) festgelegt werden. Die extrahierten Bilder lassen sich mittels folgendem Skript beispielsweise in PNG-Dateien umwandeln: .. code-block:: sh for i in *.ppm; do convert $i $(basename $i .ppm).png ; done .. }}} .. index:: pdftotext .. _pdftotext: ``pdftotext`` """"""""""""" .. {{{ Mit ``pdftotext pdf-datei`` lässt sich der gesamte Text einer PDF-Datei in eine Textdatei extrahieren. Der Text lässt sich dann oftmals einfach mittels ein paar :ref:`Vim ` -Tricks (Einfügen von Restructured-Text-Syntax) und gegebenenfalls :ref:`Sphinx ` in ein leicht durchsuchbares Wiki umwandeln. .. }}} .. index:: pdftk .. _pdftk: ``pdftk`` """"""""" .. {{{ Das ``pdftk``-Toolkit ermöglicht eine vielseitige Nachbearbeitung von ``pdf``-Dateien. In den ``man pdftk``-Hilfeseiten finden sich zahlreiche Beispiele, wie man mittels ``pdftk`` mehrere ``pdf``-Dokumente zusammenfügen, einzelne Seiten entfernen, rotieren, oder vertauschen kann. ``pdftk`` lässt sich wie üblich aus den Paketquellen installieren: .. code-block:: sh sudo aptitude install pdfk Der grundsätzliche Aufruf erfolgt dann in folgender Form: .. code-block:: sh pdftk inputdatei(en) cat [seitenzahlen] output outputdatei.pdf * Um mehrere ``pdf``-Dokumente zu einer Datei zusammenzufügen, genügt folgender Aufruf: .. code-block:: sh pdftk datei1.pdf datei2.pdf cat output neue-datei.pdf * Um einzelne Seiten aus einer ``pdf``-Datei heraus zu kopieren, kann ``pdftk`` folgendermaßen aufgerufen werden: .. code-block:: sh pdftk datei.pdf cat 5 7 9-13 output ausschnitt.pdf Mehr Infos zu ``pdftk`` gibt es unter `pdftk im Ubuntu-Wiki `_. .. }}} .. index:: tesseract, Texterkennung (OCR) .. _tesseract: ``tesseract`` """"""""""""" .. {{{ Mit ``tesseract`` als Texterkennungs-Software lassen sich im ``.tif``-Format eingescannte oder photographierte Texte zurück in Textdateien verwandeln. Im Gegensatz zu den eingescannten Bilddateien sind diese dann durchsuch- und wiederverwertbar. *Installation:* ``tesseract`` ist über die Paketverwaltung mittels der Pakete ``tesseract-ocr`` beziehungsweise ``tesseract-ocr-deu`` und ``tesseract-ocr-eng`` für deutsche und englische Sprachunterstützung installierbar. .. code-block:: sh sudo aptitude install tesseract-ocr tesseract-ocr-deu tesseract-ocr-eng Auch zahlreiche weitere Sprachen sind verfügbar, die entsprechenden Pakete können mit ``aptitude search tesseract`` angezeigt werden. *Benutzung:* ``tesseract`` benötigt als Eingabe-Format ``.tif``-Dateien mit maximal acht Graustufen. Der Aufruf von ``tesseract`` zur Text-Erkennung erfolgt dann für einen deutschsprachigen Text folgendermaßen: .. code-block:: sh tesseract input-file.tif output-file -l deu Für englischsprachige Dateien wird entsprechend ``-l eng`` angegeben. An die Ausgabe-Datei wird automatisch die Endung ``.txt`` angefügt. *Tip: Screenshots nutzen* Neben der Limitierung auf acht Graustufen hat ``tesseract`` den Nachteil, dass der Original-Text einspaltig sein sollte -- eine Trennlinie oder Tabulatur zwischen mehreren Spalten wird schlichtweg ignoriert. Wenn eine mehrspaltiger oder mehrfarbig gescannte beziehungsweise photographierte Original-Datei vorliegt -- womöglich noch dazu in einem anderen Dateiformat --, so kann man sich, falls man sich ohnehin nur für bestimmte Ausschnitte interessiert, mit einem entsprechenden Screenshot-Alias in der ``~/.bashrc`` helfen: .. code-block:: sh alias it='import -depth 8 txt_$(date +%Y%m%d_%H%M%S).tif' Persönlich verwende ich das obige Beispiel zur Aufnahme von Screenshots mittels des ``import``-Befehls aus dem Imagemagick-Paket. Die Angabe ``-depth 8`` legt die Anzahl der Graustufen des Screenshots auf acht fest. Die Namen der einzelnen Screenshots sollen dann einem einheitlichen Namensmuster und schließlich chronologisch sortiert vorliegen; dies wird durch die Nutzung des ``date``-Befehls erreicht. Wird die obige Code-Zeile in die Konfigurationsdatei ``~/.bashrc`` kopiert (und diese im gleichen Shell-Fenster gegebenenfalls mit ``source ~/.bashrc`` neu geladen), so kann mittels Eingabe von ``it`` stets ein neuer Screenshot im aktuellen Verzeichnis gespeichert werden -- es muss nur noch mit dem erscheinenden Fadenkreuz ein Bidschirm-Bereich für den Screenshot festgelegt und durch einen Mausklick bestätigt werden. *Tip: Stapelverarbeitung mehrerer .tif-Dateien:* Mag man mehrere ``.tif``-Dateien auf einmal der Texterkennung zuführen, so kann dies mit folgendem Einzeiler-Skript erreicht werden: .. code-block:: sh for i in *.tif; do tesseract $i $i -l deu; done; Die Ausgabedateien werden in diesem Fall nach den Eingabe-Dateien benannt, gefolgt von der automatischen Endung ``.txt``. Um auf diese Weise zusammengehörige Screenshots eines Buchs der Texterkennung zuzuführen und die erzeugten Dateien wieder zu vereinen, sollten die Screenshots zum einen in einem separaten Ordner aufgenommen beziehungsweise dorthin kopiert werden. Zum anderen sollten die Screenshots entlang eines Buches stets "von vorne nach hinten" aufgenommen werden, da auch die resultierenden Bild- beziehungsweise Textdateien chronologisch sortiert sind. Das Zusammenführen aller Textdateien eines Ordners zu einer neuen Zieldatei gelingt schließlich folgendermaßen: .. code-block:: sh for in in *.txt; do cat $i >> new-file.rst ; done Für die Zieldatei nutze ich gerne die Endung ``.rst``, einerseits, um bei möglichen späteren Erweiterungen Namenskonflikte zu vermeiden (hierbei würde eine Zieldatei ``new-file.txt`` bei einem erneuten Aufruf des obigen Befehls mit auf sich selbst abgebildet werden), andererseits, um den Text gleich für eine "Informationsverwaltung" oder spätere Publikationen mittels Sphinx bereit zu halten. Der letztliche "Workflow" sieht möglicherweise so aus: Farbig gescannte PDF-Datei mit ``atril``, ``evince`` oder einem anderen Dokumentenbetrachter öffnen; in einem Shell-Fenster (beispielsweise :ref:`guake `) zu einem gewünschten Zielordner wechseln; mittels Eingabe von ``it`` und Textauswahl mit der Maus wiederholt Screenshots (beliebig viele) erzeugen; die obigen beiden Einzeiler ausführen und fertig! Bei einigermaßen guten Scans und einer brauchbaren Auflösung des Bildschirms beim Erzeugen der Screenshots -- hierbei genügt eine Vollbild-Darstellung des Dokuments auf einem 17-Zoll-Monitoren in den allermeisten Fällen, bei kleinen Schriftgrößen oder kleineren Monitoren notfalls etwas "hineinzoomen" und lieber mehrere kleinere Bildausschnitte wählen -- sollte das Ergebnis von ``tesseract`` durchaus zufriedenstellend sein. *Tip: Tiff-Dateien nachbearbeiten* Möchte man mehrere ``.tif``-Dateien zu einer Multipage-Tiff-Datei zusammenfügen oder einzelne Seiten einer Multipage-Tiff-Datei entfernen, bieten sich die Hilfsprogramme ``tiffcp``, ``tiffsplit`` und ``tiffcrop`` an. Diese können mittels des ``libtiff-tools``-Paketes installiert werden: .. code-block:: sh sudo aptitude install libtiff-tools Das gleiche Paket stellt auch den Befehl ``tiff2pdf`` zur Umwandlung einer Multipage-Tiff-Datei in ein PDF-Dokument bereit. Schließlich kann auch das Programm ``unpaper`` zur Aufbesserung von Scans genutzt werden. Infos hierzu gibt es unter `unpaper im Ubuntuuser-Wiki `_. .. }}} .. }}} Bildbearbeitungs-Programme ^^^^^^^^^^^^^^^^^^^^^^^^^^ .. {{{ .. index:: feh .. _feh: ``feh`` """"""" .. {{{ Feh ist ein kleines, aber feines Bildbetrachtungs-Programm. Es kann über das gleichnamige Paket mittels der Paketverwaltung installiert werden: .. code-block:: sh sudo aptitude install feh ``feh`` setzt eine aktive graphische Oberfläche voraus, kann also nicht als "reines" Shell-Programm (ohne X-Server) verwendet werden. (Für derartige Anwendungen kann jedoch auf das Framebuffer-Image-Programm ``fbi`` zurückgegriffen werden.) Der grundlegende Aufruf von ``feh`` sieht folgendermaßen aus: .. code-block:: sh feh image-file Um alle Bilder des aktuellen Verzeichnisses anzusehen, genügt folgender Aufruf: .. code-block:: sh feh * ``feh`` kann auf einfache Weise über die Tastatur gesteuert werden: * Mittels der Pfeiltasten :math:`\leftarrow` und :math:`\rightarrow` kann, sofern mehrere Bilder geöffnet werden, zum vorherigen beziehungsweise nächsten Bild gewechselt werden. * Mittels der Pfeiltasten :math:`\uparrow` und :math:`\downarrow` wird in das Bild hinein- beziehungsweise herausgezoomt. * Mittels ``v`` kann zwischen einer Vollbild- und einer normalen Anzeige gewechselt werden. * Mittels ``<`` und ``>`` kann ein Bild gegen beziehungsweise mit dem Uhrzeigersinn um 90° gedreht werden. * Mittels ``q`` ("quit") wird ``feh`` beendet. ``feh`` kann mit einer Vielzahl an Parametern aufgerufen werden, um beispielsweise die geöffneten Bilder als Slideshow wiederzugeben. Hilfreich sind insbesondere die beiden Parameter ``-d`` und ``-F``, mittels derer ``feh`` automatisch im Vollbild-Modus startet (``feh -F``) und den aktuellen Datei-Namen anzeigt (``feh -d``). Um beide Optionen als Standard zu definieren, bietet sich in der Konfigurationsdatei ``~/.bashrc`` folgendes Alias an: .. code-block:: sh alias feh='feh -d -F' Nach einem neuen Laden der Konfigurationsdatei (``source ~/.bashrc``) beziehungsweise in jedem neu geöffneten Shell-Fenster wird ``feh`` anschließend automatisch mit den beiden obigen Parametern gestartet. Weitere Infos finden sich in den ``man``-Pages und unter `Feh im Ubuntu-Wiki `_. .. }}} .. index:: Imagemagick .. _imagemagick: ``imagemagick`` """"""""""""""" .. {{{ Bei Imagemagick handelt es sich um eine Sammlung von mehreren kleinen Bildbearbeitungs-Programmen, mit deren Hilfe einfache Anpassungen von Graphiken -- beispielsweise Formatumwandlungen, Erzeugung von kleinen Vorschaubildern, Fotomontagen u.ä. -- stapelweise als Shell-Skript auf eine Vielzahl von Dateien anwenden lassen. Sollte ``imagemagick`` nicht bereits installiert sein, lässt es sich einfach mittels ``aptitute`` nachinstallieren: .. code-block:: sh sudo aptitute install imagemagick .. index:: convert Die Imagemagick-Suite umfasst folgende Bildbearbeitungs-Programme: .. hlist:: :columns: 2 * ``import`` * ``convert`` * ``montage`` * ``display`` Diese kleinen Hilfsprogramme sind nützlich, um automatisiert bestimmte Bildbearbeitungen als Skript auszuführen. *Beispiele:* * Umwandeln eines transparenten in einen weißen Hintergrund: .. code-block:: sh convert image-old.png -background white -flatten -alpha off image-new.png .. http://stackoverflow.com/questions/5280118/convert-png-to-jpg-and-set-transparent-background-to-white-with-imagemagick-and * Zusammenfügen mehrere Bilder vertikal zu einem "Filmstreifen": .. code-block:: sh montage -mode concatenate -tile 1x in-*.jpg out.jpg .. http://superuser.com/questions/290656/combine-multiple-images-using-imagemagick * Verkleinern von Digitalkamera-Fotos auf kleine Formate, beispielsweise Fotos von Rezepten für's `Vegan-Kochbuch `_: .. code-block:: sh for i in *.jpg; \ do convert $i -resize '1200x800 -quality 80 $(basename $i .jpg).png; \ done Das obige Mini-Skript wandelt alle ``.jpg``-Dateien des aktuellen Verzeichnisses in ``1200 px`` breite PNG-Dateien gleichen Namens um (mittels der :ref:`basename `-Anweisung wird die Endung ``.jpg`` abgeschnitten). Die Dateien können anschließend mit :ref:`pngnq ` weiter komprimiert werden. Mehr Infos zu ``imagemagick`` gibt es unter `Imagemagick im Ubuntu-Wiki `_. .. Vegan-Rezept-Bilder komprimieren: .. for i in *.jpg ; do convert $i -resize 600 -quality 80 $i-small.png ; done ; .. Inkscape-Graphiken exportieren: .. for i in *.svg; do inkscape -z -d 150 -D $i -e $(basename $i .svg).png; done .. Alle Grund-Wissen-Bilder: .. for f in $(find ./ -name '*.png' | grep -v nq8); do pngnq -n 256 $f && rm $f ; done .. for f in $(find ./ -name '*.png'); do mv $f $(dirname $f)/$(basename $f | sed 's/-nq8//') ; done .. .. convert -flatten -background white file.png file.jpg .. To quantize and compress an image, for example image.png, with the compressed output as smallimage.png, I do this: .. pngnq -n 256 image.png && pngcrush image-nq8.png smallimage.png .. This usually results in a greater than 50% compression with a small loss of detail. .. split pdf in png-images: convert image.pdf +adjoin image.png .. }}} .. index:: pngnq .. _pngnq: ``pngnq`` """"""""" .. {{{ Das Programm ``pngnq`` kann verwendet werden, um die Dateigröße von Bildern im PNG-Format durch Komprimierung erheblich (teilweise > 50%) zu reduzieren. Dabei werden von ``pngnq`` Qualitätsverluste in Kauf genommen, die jedoch mit bloßem Auge (meist) nicht zu erkennen sind -- beispielsweise reicht in vielen Fällen zur Darstellung eines Bildes eine Farbtiefe von 256 Farben völlig aus. [#]_ Persönlich verwende ich ``pngnq`` beispielsweise, um mit Inkscape erstellte und als ``png`` exportierte Graphiken zu verkleinern, damit die Webseiten, in denen die Graphiken vorkommen, schneller und mit weniger Serverlast geladen werden können. Dazu nutze ich hintereinander folgende zwei Mini-Skripte: .. only:: html .. code-block:: sh for f in $(find ./ -name '*.png' | grep -v nq8); do pngnq -n 256 $f && rm $f ; done for f in $(find ./ -name '*.png'); do mv $f $(dirname $f)/$(basename $f | sed 's/-nq8//') ; done .. only:: latex .. code-block:: sh for f in $(find ./ -name '*.png' | grep -v nq8); \ do pngnq -n 256 $f && rm $f ; done for f in $(find ./ -name '*.png'); \ do mv $f $(dirname $f)/$(basename $f | sed 's/-nq8//') ; done .. for f in $(find ./ -name '*.png' | grep -v nq8); do pngnq -n 256 $f && rm $f ; done .. for f in $(find ./ -name '*.png'); do mv $f $(dirname $f)/$(basename $f | sed 's/-nq8//') ; done Mit der ersten Zeile wird ``pngnq`` auf alle ``png``-Dateien angewendet; die neuen Dateien erhalten automatisch die Endung ``-nq8`` angehängt, die Originale werden gelöscht. Im zweiten Schritt werden die neuen Dateien umbenannt, so dass sie wieder mit den ursprünglichen identisch sind (aber im Vergleich zu den Originalen oft nur noch halb so viel Speicherplatz benötigen). .. }}} .. }}} Audio- und Video-Programme ^^^^^^^^^^^^^^^^^^^^^^^^^^ .. {{{ .. index:: abcde .. _abcde: ``abcde`` """"""""" .. {{{ `abcde `__ steht für "A better CD encoder" und bietet in der Tat eine elegante Möglichkeit, eine Audio-CD automatisch als ``ogg`` oder ``mp3``-Dateien einzulesen. ``abcde`` ist über die Paketverwaltung mittels des gleichnamigen Pakets installierbar: .. code-block:: sh sudo aptitude install abcde Nach dem Einlegen einer Audio-CD und dem Aufruf von ``abcde`` wird eine CD-Datenbank durchsucht und gegebenenfalls passende Einträge angezeigt. Nach Wunsch können die Meta-Daten noch bearbeitet werden, ansonsten wird nach Bestätigung mit ``Enter`` automatisch der Einlese- und Kodierungsprozess gestartet. .. }}} .. index:: cmus .. _cmus: ``cmus`` """""""" .. {{{ Der Console-Music-Player ``cmus`` bietet eine schlichte und übersichtliche Bedienoberfläche, um alle gängigen Audio-Formate (``ogg``, ``mp3``, ``wav``, ``flac``, ``aac``) sowie Playlisten (``m3u`` und ``pls``) innerhalb eines Shell-Fensters abzuspielen. Der Player bietet nicht so viele Möglichkeiten wie beispielsweise :ref:`audacious `, benötigt dafür aber keine graphische Oberfläche. ``cmus`` ist über die Paketverwaltung mittels des gleichnamigen Pakets installierbar: .. code-block:: sh sudo aptitude install cmus Anschließend kann der Player durch den Aufruf von ``cmus`` gestartet werden. Mittels der Tasten ``1`` bis ``7`` kann zwischen verschiedenen Ansichten gewechselt werden: .. list-table:: :name: tab-cmus-ansichten :widths: 10 30 120 * - ``1`` - Bibliothek - Zweispaltige Ansicht: Links werden Künstler und Album aufgelistet, rechts die jeweiligen Lieder * - ``2`` - Sortierte Bibliothek - (Flache Listenansicht aller Lieder, mit der Möglichkeit, die Sortierreihenfolge selbst festzulegen) * - ``3`` - Wiedergabeliste - Anzeige der (editier- und speicherbaren) Wiedergabeliste * - ``4`` - Warteliste (Queue) - Anzeige der unmittelbar abzuspielenden Lieder * - ``5`` - Datei-Browser - Dateisystemansicht mit der Möglichkeit zum Hinzufügen von Liedern zur Sammlung, der Wiedergabeliste oder Warteliste * - ``6`` - Datei-Filter - Anzeige benutzerdefinierter Filter * - ``7`` - Einstellungen - Mit ``d`` kann man Einstellungen löschen, mit ``Enter`` modifizieren sowie mit ``Leertaste`` konkrete Variablen ändern. Beim erstmaligen Starten von ``cmus`` sollte zunächst ein Verzeichnis mit Audio-Dateien in die Bibliothek geladen werden. Hierfür wechselt man mittels ``:`` auf die Kommandozeile und gibt dort folgende Anweisung ein: [#]_ .. code-block:: sh :add ~/Musik Nachdem die Sammlung eingelesen wurde, werden die Lieder in den Bibliotheks-Ansichten ``1`` und ``2`` den Namen der Interpreten sortiert angezeigt. In den einzelnen Ansichten (``1`` bis ``5``) können mittels der jeweiligen Tasten folgende Funktionen aufgerufen werden: .. list-table:: :name: tab-cmus-tasten :widths: 10 50 * - ``Enter`` - Datei abspielen beziehungsweise Verzeichnis öffnen * - ``c`` - Pause-Modus an- und ausschalten ("continue") * - ``b`` - Nächsten Titel abspielen * - ``/`` - nach Suchmuster in Dateinamen oder ID-Tags suchen * - ``n`` - zur nächsten Datei gehen, auf die Suchmuster zutrifft * - ``N`` - zur vorherigen Datei gehen, auf die Suchmuster zutrifft * - ``y`` - Datei oder Verzeichnis unter Cursor zur Wiedergabeliste (``3``) hinzufügen * - ``e`` - Datei oder Verzeichnis unter Cursor an die Warteliste (``4``) anfügen * - ``E`` - Datei oder Verzeichnis unter Cursor an den Anfang der Warteliste (``4``) setzen * - ``a`` - Datei oder Verzeichnis unter Cursor in die Bibliothek (``1`` beziehungsweise ``2``) aufnehmen * - ``-`` - Lautstärke um 10% herabsetzen * - ``+`` - Lautstärke um 10% erhöhen * - ``,`` - Aktuell abgespielte Datei 1 Minute zurückspulen * - ``.`` - Aktuell abgespielte Datei 1 Minute vorspulen * - :math:`\leftarrow` - Aktuell abgespielte Datei 5 Sekunden zurückspulen * - :math:`\rightarrow` - Aktuell abgespielte Datei 5 Sekunden vorspulen In der Infozeile (vorletzte Zeile auf dem Bildschirm) werden auf der rechten Seite Infos über die aktuellen Wiedergabeoptionen (Zufallswiedergabe, Wiederholung usw.) eingeblendet. Diese können folgendermaßen verändert werden: [#]_ .. list-table:: :name: tab-cmus-wiedergabe :widths: 10 50 * - ``s`` - Zufallswiedergabe aktivieren oder deaktivieren * - ``r`` - Wiedergabe-Modus (der ganzen Playliste beziehungsweise des aktuellen Albums) aktivieren oder deaktivieren * - ``Ctrl r`` - Wiederholung des aktuellen Lieds aktivieren oder deaktivieren Um Dateien innerhalb der Wiedergabeliste oder Warteliste nach oben oder unten zu verschieben, können die Tasten ``p`` und ``P`` ("push") genutzt werden: .. list-table:: :name: tab-cmus-p-tasten :widths: 10 50 * - ``p`` - Datei unter Cursor in der Ansicht ``3`` oder ``4`` nach unten verschieben * - ``P`` - Datei unter Cursor in der Ansicht ``3`` oder ``4`` nach oben verschieben Markiert man hierbei zunächst mehrere Dateien mittels der ``Space``-Taste, so können diese anschließend mittels ``p`` oder ``P`` hinter beziehungsweise vor die Datei unter dem Cursor verschoben werden. Mit ``D`` oder ``Del`` können Dateien wieder aus der Wiedergabe- oder Warteliste entfernt werden. .. Titel von vorne abpsielen: ``v c``. .. Um die in der Bibliotheks-Ansicht ``1`` jeweiligen Alben angezeigt zu .. bekommen, muss man ``Leertaste`` drücken. Mehr Infos gibt es unter `CMUS im Ubuntuuser-Wiki `__. .. }}} .. index:: mencoder .. _mencoder: ``mencoder`` """""""""""" .. {{{ Das Programm ``mencoder`` kann für vielerlei Arten von Video-Format-Umwandlungen genutzt werden. Beispielsweise lassen sich damit mehrere Teil-Videos (beispielsweise ``.flv``- oder ``.mp4``-Dateien von Youtube) folgendermaßen zu einer einzigen Datei zusammenfügen: .. code-block:: sh mencoder -ovc copy -oac copy -o complete-movie.mp4 part1.mp4 part2.mp4 Mehr Infos gibt es unter `Mencoder im Ubuntuusers-Wiki `_. .. }}} .. .. index:: moc .. .. _moc: .. ``moc`` .. {{{ .. Der "Music on Console Player" ``moc`` bietet eine schlichte und übersichtliche .. Bedienoberfläche, um alle gängigen Audio-Formate (``ogg``, ``mp3``, ``wave``, .. ``flac``, ``aac``) sowie Playlisten (``m3u`` und ``pls``) innerhalb eines .. Shell-Fensters abzuspielen. .. ``moc`` ist über die Paketverwaltung mittels des Pakets ``moc`` installierbar: .. .. code-block:: sh .. sudo aptitude install moc .. Anschließend kann der Player durch den Aufruf von ``mocp`` (mit ``p``) gestartet .. werden. Mehr Infos gibt es unter `MOC im Ubuntuuser-Wiki .. `_. .. Inzwischen verwende ich zum Abspielen von Musik bevorzugt ``cmus``. .. `MOC-Kurzbeschreibung `_ .. }}} .. }}} .. }}} Systemverwaltung ---------------- Konfigurationen ^^^^^^^^^^^^^^^ .. {{{ .. index:: alias .. _alias: ``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. Persönlich verwende ich ``alias``-Definitionen in sehr großem Umfang; beispielsweise habe ich vielerlei Abkürzungen zum schnellen Anwählen von Verzeichnissen definiert, beispielsweise ``cdhg='cd ~/data/homepage/grund-wissen'``, ``cdhgp='cd ~/data/homepage/grund-wissen/physik'`` usw. .. }}} .. index:: passwd .. _passwd: ``passwd`` """""""""" .. {{{ Mit ``passwd`` kann man das zum eigenen Account gehörende Passwort ändern. Man wird nach einem neuen Passwort gefragt, wobei dieses sicherheitshalber zwei mal eingegeben werden muss. .. }}} .. }}} Monitoring, Prozess- und PaketVerwaltung ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. {{{ .. _aptitude: ``apt``, ``aptitude`` """"""""""""""""""""" .. {{{ Mit ``apt-cache search suchbegriff`` beziehungsweise ``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; auf die Paketverwaltung mittels ``apt`` wird daher erst im Abschnitt :ref:`Administrations-Programme ` ausführlich eingegangen. .. }}} .. index:: df, Device-Name, Einhängepunkt, Mount-Point .. _df: ``df`` """""" .. {{{ Mit ``df`` wird angezeigt, wie viel Speicherplatz im Augenblick auf den eingehängten Laufwerken verfügbar ist ("disk free"); ``df`` kann auch eine allgemeine Übersicht über eingehängte Laufwerke ausgeben * Mit ``df -h`` wird die Ausgabe "human readable" gestaltet, die Größen werden also in KB, MB oder GB anstelle von Bytes angegeben. * Mit ``df -aTh`` erhält man eine ausführliche, aber gut lesbare Übersicht über alle eingehängten Dateisysteme und ihre Partitionen inklusive ihrer Device-Namen und Einhänge-Punkte (eine ähnliche Ausgabe erhält man mittels ``mount | column -t``). .. }}} .. index:: du .. _du: ``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, die Größen werden in also 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. .. }}} .. index:: exit .. _exit: ``exit`` """""""" .. {{{ Mit ``exit`` wird der aktuelle Benutzer abgemeldet die aktuelle Sitzung (beispielsweise eine :ref:`SSH `-Verbindung) beendet. Ist nur eine Sitzung geöffnet, wird das Shell-Fenster geschlossen. .. }}} .. index:: fdupes .. _fdupes: ``fdupes`` """""""""" .. {{{ Mit ``fdupes`` kann man ein Verzeichnis nach doppelten Dateien durchsuchen und diese gegebenenfalls auflisten. Das Programm kann mittels ``apt`` über das gleichnamige Paket installiert werden: .. code-block:: sh sudo aptitude install fdupes Aufgerufen wird ``fdupes`` mit folgender Syntax: .. code-block:: sh fdupes verzeichnis Verglichen werden die Dateien des Verzeichnisses dabei zunächst anhand ihrer Größe, anschließend anhand eines Byte-für-Byte-Vergleichs; ``fdupes`` erkennt damit auch identische, aber unterschiedlich benannte Dateien (unabhängig vom Dateiformat). Mit ``fdupes -r verzeichnis`` werden auch die Unterverzeichnisse rekursiv mit durchsucht, mit der Option ``-s`` können zusätzlich auch Symlinks zu Verzeichnissen berücksichtigt werden. .. }}} .. index:: free .. _free: ``free`` """""""" .. {{{ Mit ``free -h`` bekommt man eine kurze Übersicht angezeigt, wieviel Arbeitsspeicher (RAM) aktuell belegt beziehungsweise noch frei ist. .. The command free displays the total amount of free and used physical and swap .. memory in the system, as well as the buffers used by the kernel. .. }}} .. index:: inxi .. _inxi: ``inxi`` """""""" .. {{{ Mit ``inxi`` kann man sich Informationen über das aktuell installierte Betriebsystem sowie einige Hardware-Informationen anzeigen lassen. Ruft man ``inxi -Fx`` auf, so erhält man eine detailierte, aber gut lesbare Liste. .. .. image:: ../pics/inxi.png .. :align: center .. :width: 60% Die wohl detailierteste Liste mit Hardware-Informationen liefert wohl ``dmidecode``; da die Ausgabe recht lang ist, empfiehlt es sich, diese mittels ``dmidecode | less`` im Pager :ref:`less ` zu betrachten. .. lsb_release -a liefert Infos über das aktuell installierte System .. }}} .. index:: lsblk, lsusb, lscpu, CPU .. _lsblk: .. _lsusb: .. _lscpu: .. _lsblk, lsusb und lscpu: ``lsblk``, ``lsusb`` und ``lscpu`` """""""""""""""""""""""""""""""""" .. {{{ 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. Mit ``lsusb`` werden Informationen über alle verfügbaren USB-Ports beziehungsweise dort angeschlossene Geräte ausgegeben. Mit ``lscpu`` werden Informationen über die CPU ausgegeben; unter anderem kann man daran ablesen, ob es sich beim aktuellen Rechner um einen 32bit- oder 64bit-System handelt. Das ähnliche Programm :ref:`lshw `, das allgemeine Hardware-Informationen anzeigt, sollte nur mit Root-Rechten aufgerufen werden. .. }}} .. index:: kill, killall .. _kill und killall: ``kill``, ``killall`` """"""""""""""""""""" .. {{{ Mit ``kill prozessID`` beziehungsweise mit ``killall programmname`` lässt sich ein (eventuell außer Kontrolle geratenes) Programm beenden. Die ID eines Prozesses lässt sich beispielsweise mit ``ps -aux programm``, ``pgrep programmname`` oder mittels des Systemmonitors :ref:`top ` anzeigen. Innerhalb von ``top`` lässt sich der ``kill``-Befehl mittels ``k`` starten. * Mit ``kill -9 prozessID`` beziehungsweise 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. .. }}} .. index:: ncdu .. _ncdu: ``ncdu`` """""""" .. {{{ Das Programm ``ncdu`` ("ncurses-disk-usage") ermöglicht es zu sehen, welche Ordner beziehungsweise Dateien am meisten Platz auf der Festplatte benötigen. Ausgehend von dem Pfad, aus dem heraus ``ncdu`` aufgerufen wird, analysiert es den Speicherbedarf und gibt eine sortierte, navigierbare Verzeichnisliste zurück. ``ncdu`` ist über die Paketverwaltung mittels des gleichnamigen Pakets installierbar: .. code-block:: sh sudo aptitude install ncdu Gibt man nach der Installation ``ncdu`` ein, so wird vom aktuellen Verzeichnis aus die Größe aller sich darin befindenden Dateien bestimmt; die Größe von Unterverzeichnissen wird schrittweise anhand der darin enthaltenen Dateien beziehungsweise Verzeichnisse bestimmt. Als Ergebnis wird der Inhalt des aktuellen Verzeichnisses nach absteigender Größe sortiert aufgelistet. Eine Navigation innerhalb dieser Übersicht ist mittels den Pfeiltasten oder, wie bei :ref:`Vim `, mittels ``hjkl`` möglich. Drückt man ``?``, so wird eine Kurzübersicht der möglichen Eingabetasten eingeblendet, mit ``d`` kann die Datei unter dem Cursor (nach einer manuellen Bestätigung) gelöscht werden. Mit ``q`` wird ``ncdu`` wieder beendet. .. }}} .. index:: top .. _top: ``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. .. https://www.cyberciti.biz/tips/top-linux-monitoring-tools.html .. t Displays summary information off and on. .. m Displays memory information off and on. .. A Sorts the display by top consumers of various system resources. Useful for quick identification of performance-hungry tasks on a system. .. f Enters an interactive configuration screen for top. Helpful for setting up top for a specific task. .. o Enables you to interactively select the ordering within top. .. r Issues renice command. .. k Issues kill command. .. z Turn on or off color/mono .. }}} .. index:: uname .. _uname: ``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 nicht via :ref:`aptitude ` installiert werden, sondern beispielsweise als fertige Debian-Pakete von einer Webseite heruntergeladen werden sollen. Mit ``uname -mrs`` bekommt man die aktuelle Version des Kernels angezeigt. .. }}} .. index:: which .. _which: ``which`` """"""""" .. {{{ Mit ``which programm`` wird angezeigt, unter welchem Systempfad die auszuführende Datei des angegebenen Programms zu finden ist. .. }}} .. }}} Hilfsprogramme ^^^^^^^^^^^^^^ .. {{{ .. index:: basename, dirname .. _basename: .. _dirname: .. _basename und dirname: ``basename`` und ``dirname`` """"""""""""""""""""""""""""" .. {{{ 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.). Mit ``dirname dateiname`` wird der Verzeichnisname einer Datei (ohne den eigentlichen Dateinamen) angezeigt. .. }}} .. index:: bc, Taschenrechner; bc .. _bc: ``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 :math:`\uparrow`-Taste wieder angezeigt beziehungsweise als Vorlage für eine neue Eingabe genutzt 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 :ref:`Sinus ` der Zahl ``num`` ausgegeben werden, mittels ``c(num)`` der Cosinus und mit ``a(num)`` der :ref:`Arcus-Tangens `; die übergebenen Werte ``num`` müssen dabei in :ref:`Radiant ` angegeben werden. Mit ``l(num)`` kann der :ref:`natürliche Logarithmus ` der Zahl ``num`` berechnet werden, mit ``e(num)`` wird der Wert der :ref:`natürlichen Exponentialfunktion ` von ``num`` ausgegeben. Man kann ``bc`` auch innerhalb von :ref:`Shell-Skripten ` verwenden, um numerische Berechnungen auszuführen und die Ergebnisse gegebenenfalls in :ref:`Variablen ` zu speichern. Dazu wird der auszuwertende Ausdruck mittels ``echo`` und einem :ref:`Pipe-Zeichen ` an ``bc`` übergeben: .. code-block:: bash echo '8/3' | bc # Ergebnis: 2.66666666666666666666 pi=$( echo 'a(1)*4' | bc -l ) echo $pi # Ergebnis: 3.14159265358979323844 .. _Benchmark: Beim letzten Beispiel als Trick genutzt, dass der Arcus-Tangens von :math:`1` exakt den Wert :math:`\frac{\pi}{4}` ergibt; das Vierfache davon entspricht somit der Kreiszahl :math:`\pi`. Dies kann auch genutzt werden, um (ohne Installation zusätzlicher Programme) einen einfachen CPU-Benchmark durchzuführen. Hierzu gibt man folgendes ein: .. Durch den Aufruf von ``bc -l`` wird beim Start .. von ``bc`` automatisch die Mathe-Funktions-Bibliothek geladen; in dieser ist .. beispielsweise die Arkus-Tangens-Funktion als ``a()`` definiert. .. code-block:: sh time echo "scale=5000; 4*a(1)" | bc -l Über die ``time``-Anweisung wird die Zeit ermittelt, die zum Ausführen eines Prozesses benötigt wird. Im konkreten Fall wird über ``scale=5000`` die Anzahl der zu ermittelnden Nachkomma-Stellen auf ``5000`` festgelegt und anschließend mittels ``4*a(1)`` der vierfache Wert der Arcus-Tangens-Funktion für den Wert ``1`` berechnet, was wiederum den Wert :math:`\pi` liefert. Bei modernen Rechnern kann die Rechenzeit bei unter zwanzig Sekunden liegen, bei schwächeren Geräten kann die Rechenzeit auch rund hundert Sekunden betragen. .. }}} .. index:: clear .. _clear: ``clear`` """"""""" .. {{{ Mit ``clear`` wird der Bildschirm "geleert" -- lediglich der aktuelle Eingabe-Prompt bleibt bestehen. Die Shell-History (mit :math:`\uparrow` beziehungsweise :math:`\downarrow` abrufbar) bleibt unverändert. Persönlich habe ich oftmals gerne ein "leeres" Shell-Fenster vor mir, bei dem die Ausgaben der einzelnen Anweisungen wieder von ganz oben beginnen (und keine womöglich nicht länger relevanten Informationen mehr "auf dem Schirm" sind); ich habe mir daher die Abkürzung ``alias c='clear'`` in meine Konfigurationsdatei ``~/.bashrc`` (beziehungsweise ``~/.zshrc``) aufgenommen. .. }}} .. index:: date .. _date: ``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". .. }}} .. index:: echo .. _echo: ``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 :ref:`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. .. }}} .. _gpg: ``gpg`` """"""" .. {{{ GPG (GNU Privacy Guard) ist ein freies Verschlüsselungssystem, welches beispielsweise für die Verschlüsselung von Emails oder für die Signierung von Paket-Quellen benutzt wird. GPG gehört zum Standard aller Linux-Distributionen und ist auch auf einer Vielzahl anderer Systeme lauffähig. Das Programm ``gpg`` ist im Abschnitt :ref:`gpg -- Signieren und Verschlüsseln von Dateien ` ausführlich beschrieben. .. }}} .. index:: screen .. _screen: ``screen`` """""""""" .. {{{ Das Programm ``screen`` ermöglicht es, parallel auf mehreren virtuellen Terminals zu arbeiten, obwohl man in Wirklichkeit nur eines verwendet. Dies kann hilfreich sein, um sich beispielsweise über ssh auf einem externen Rechner einzuloggen und innerhalb des gleichen Fensters mehrere Prozesse ablaufen zu lassen. ``screen`` lässt sich wie üblich aus den Paketquellen installieren: .. code-block:: sh sudo aptitude install screen Nach der Installation kann ``screen`` ohne weitere Der Aufruf von Screen-Funktionen werden allgemein durch Drücken von ``Ctrl a`` eingeleitet, wobei der Eingabe der darauffolgenden Taste bestimmt, welche screen-Funktion gewählt wird. Screen legt beim Start ein erstes virtuelles Terminal an. Drückt man hintereinander ``Ctrl a`` und ``c`` ("create"), so erzeugt screen ein weiteres virtuelles Fenster; die ersten 10 Fenster werden mit Nummer und Bezeichnung in einer Infoleiste am unteren Ende des Screen-Fensters aufgelistet. Die Fenster können über ``Ctrl a`` und eine Zahl zwischen ``0`` und ``9`` ausgewählt werden, weitere können mittels ``Ctrl a`` und ``'`` angewählt werden. Mit ``Ctrl a`` und ``"`` wird eine Übersicht aller Fenster eingeblendet, die auch zur gezielten Auswahl genutzt werden kann. Eine Änderung des Namens eines Fensters kann mit ``Ctrl a`` und ``a`` erreicht werden. Um ein Fenster zu schließen, kann man wie gewohnt ``exit`` eingeben oder ``Ctrl a`` und ``k`` ("kill") drücken. Anstelle von ``screen`` kann in den allermeisten Fällen das Nachfolge-Projekt :ref:`tmux ` genutzt werden, das insbesondere mehr Konfigurations-Möglichkeiten bietet. .. }}} .. index:: tee .. _tee: ``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 :ref:`Pipe-Operators ` ``|`` an ``tee`` weitergereicht, beispielsweise ``echo "Hallo!" | tee dateiname``. .. }}} .. index:: wc .. _wc: ``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. .. }}} .. index:: xargs .. _xargs: ``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 :ref:`find ` und :ref:`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: .. code-block:: bash find ./ -name "*.tex" | xargs grep Ohne die Verwendung von ``xargs`` würden hier nur die Namen der Dateien, jedoch nicht deren Inhalt durchsucht. .. }}} .. }}} .. cal: Kalender .. todo: Verwendung in Kombination mit tar .. crontab .. https://wiki.ubuntuusers.de/Cron/ .. https://www.stetic.com/developer/cronjob-linux-tutorial-und-crontab-syntax.html .. * * * * * auszuführender Befehl .. Ein Stern * bedeutet Ausführung wird immer erfolgen, also zu jeder Minute, jeder .. Stunde, jedem Tag, jedem Monat oder jedem Wochentag. Um die einzelnen Stellen .. auseinander zu halten, hilft folgendes Diagram: .. 1 2 3 4 5 Befehl .. 1 = Minute (0-59) .. 2 = Stunde (0-23) .. 3 = Tag (0-31) .. 4 = Monat (1-12) .. 5 = Wochentag (0-7, Sonntag ist 0 oder 7) .. Befehl = Der auszuführende Befehl. .. Für die ersten fünf Stellen, also die Zeiwerte sind folgende Optionen zusätzlich möglich: .. * = Ausführung immer (zu jeder...) .. */n = Ausführung alle n .. n,x,y = Ausführung um/am n, x und y .. Cronjob Beispiele .. Um zum Beispiel jede Nacht um 5 Uhr morgens das Backup auszuführen, würde man den Cronjob folgendermaßen anlegen: .. 0 5 * * * /usr/bin/backup.sh .. Einen Sound alle 10 Minuten Abzuspielen könnte wie folgt aussehen: .. */10 * * * * /usr/bin/play_sound.sh .. Eine Erinnerungsmail um 8 und um 17 Uhr zu verschicken geht beispielsweise so: .. 0 8,17 * * * /usr/bin/send_reminder_mail.sh .. An einem bestimmten Tag, beispielsweisse am 31.12. um 23:59 Uhr, eine Mail zu versenden, könnte so aussehen: .. 59 23 31 12 * (echo "Lass uns die Raketen holen" | mail -s "Gleich knallt es" user@domain.xy) .. Die Ausgabe der Cronjobs wird standardmässig per Mail an den jeweiligen .. System-User der den Cronjob eingerichtet hat gesendet. Um dies zu unterdrücken, .. könnte man die Ausgabe in eine Datei umleiten oder mit Umleitung zu /dev/null .. komplett verwerfen: .. Cronjob-Ausgabe in Logfile umleiten .. 0 8,17 * * * /usr/bin/script.sh >>/var/log/cron/send_reminder_mail 2>&1 .. Cronjob-Ausgabe verwerfen .. 0 8,17 * * * /usr/bin/script.sh >/dev/null 2>&1 .. 2>&1 bedeutet, das sowohl die normale Ausgabe als auch Fehler in die vorher .. angegebene Datei umgeleitet werden. .. https://www.cyberciti.biz/tips/top-linux-monitoring-tools.html .. vmstat – System Activity, Hardware and System Information .. The command vmstat reports information about processes, memory, paging, block IO, traps, and cpu activity. .. # vmstat 3 .. w – Find Out Who Is Logged on And What They Are Doing .. w command displays information about the users currently on the machine, and their processes. .. # w username .. # w vivek .. iostat – Average CPU Load, Disk Activity .. The command iostat report Central Processing Unit (CPU) statistics and .. input/output statistics for devices, partitions and network filesystems (NFS). .. # iostat .. TODO ps .. ps -f Prozessliste der aktuellen Shellsitzung. PID: Prozess-ID, PPID: Parent Prozess ID .. Dabei werden "uninteressante" Prozesse ausgeblendet. .. erste Nummer kann fuer kill verwendet werden. .. https://www.cyberciti.biz/tips/top-linux-monitoring-tools.html .. select all processes: ps -A .. To See Threads After Processes .. # ps -AlLm .. Print A Process Tree .. pstree .. Display Only The Process IDs of Lighttpd .. # pgrep lighttpd .. Find Out The Top 10 Memory Consuming Process .. # ps -auxf | sort -nr -k 4 | head -10 .. Find Out top 10 CPU Consuming Process .. # ps -auxf | sort -nr -k 3 | head -10 .. TODO: sort .. stat: Ausführliche Dateiinformationen.. relevant? -> Scripting.. ? .. stat -c "%y" file gibt MTIME der Datei aus .. tree Verzeichnis-Visualisierung .. unique .. todo screenfetch: Zeigt knappe Zusammenfassung über System an (Betriebsystem, CPU,) .. Screenshot von Raspberry! .. GPU, installierter und aktuell verwendeter Arbeitsspeicher u.a. .. Dateien finden mit NON-ASCII-Namen: .. perl -ne 'print "$ARGV:$.\n" if /[\x80-\xFF]/;' * .. todo ack-grep .. todo dtrx wählt automatisch das richtige entzip-programm aus. .. Do The Right Extraction .. https://www.cyberciti.biz/open-source/best-terminal-applications-for-linux-unix-macosx/ .. Liste der am häufigsten bentzten Shell-Programme: .. history | awk '{print $2};' | sort | uniq -c | sort -rn | head -20 .. transmission-cli (für Bittorrents) .. Coole Seite mit Übersicht über viele CLI-Apps: .. http://www.jaredandcoralee.com/CLIapps.html .. id3tool zeigt ID3-Tags von MP3-Dateien an, kann sie auch einzeln mittels .. entsprechender Option setzen .. hwinfo zeit Hardware-Informationen an; Paket gleichnamig .. hwinfo --short .. todo .. https://github.com/amiorin/vim-fasd .. https://github.com/amiorin/ctrlp-z .. https://github.com/padde/jump.vim .. https://github.com/trotter/autojump.vim .. https://github.com/wting/autojump .. https://github.com/clvv/fasd .. https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/fasd/fasd.plugin.zsh .. https://github.com/airblade/vim-gitgutter .. Paket lm_sensors für Linux Monitoring Sensors .. Dann sensors-detect aufrufen .. todo time .. raw:: html
.. only:: html .. rubric:: Anmerkungen: .. [#] Die :ref:`Z-Shell ` bietet darüber hinaus ein Plugins namens :ref:`wd ` an, mit dessen Hilfe man Bookmarks ("Warp Points") für einzelne Verzeichnisse setzen kann. .. [#] Beispielsweise bietet der Dateimanager :ref:`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. .. [#] Mittels ``tar -cjvf archivname datei1 datei2`` können zwei oder mehrere Dateien direkt zu einem komprimierten ``tar``-Archiv zusammgefasst werden. .. [#] Möchte man keinerlei Qualitätsverlust hinnehmen, so kann das Programm ``optipng`` genutzt werden, das via ``apt`` als gleichnamiges Paket installierbar ist. Um beispielsweise alle ``png``-Dateien eines Verzeichnisses mit ``optipng`` zu optimieren, kann folgender Aufruf genutzt werden: ``for file in *.png ; do optipng -o9 $file ; done`` Der Kompressionsgrad von ``optipng`` ist allerdings erheblich geringer als von ``pngnq``. Speziell für Webseiten sollte daher vergleichsweise auch ``pngnq`` getestet werden, wobei es ratsam ist, von den Originaldateien zunächst eine Backup-Kopie anzufertigen. .. [#] ``cmus`` speichert alle Angaben zu den eingelesenen Dateien in der Datei ``~/.cmus/cache``. Um das Programm schlank und schnell zu halten, wird diese Datei nicht kontinuierlich aktualisiert. Dies hat zur Folge, dass ``cmus`` nicht erkennt, wenn die Metadaten eines Stücks von einem anderen Programm (wie beispielsweise ``EasyTAG``) verändert wurden. Damit die Änderungen in ``cmus`` angezeigt werden, muss zunächst die Bibliothek mit ``:clear -l`` gelöscht und die Cache-Datei mit ``u`` aktualisiert werden. Anschließend kann man die Bibliothek neu einlesen. .. [#] Zudem kann mit ``M`` festgelegt werden, ob nach dem Abspielen aller Titel der Warteliste weitere Titel der Bibliothek wiedergegeben werden sollen. Persönlich habe ich diese Option grundsätzlich abgeschaltet, so dass in der Infozeile rechts nicht "album from library", sondern "playlist" steht.