Donnerstag, 11. August 2016

103.2 Textströme mit Filtern verarbeiten

Wichtung: 3

Textdateien und Ausgabeströme durch Textfilter schicken, um die Ausgabe mit Standard-UNIX-Kommandos aus dem GNU-textutils-Paket zu verändern

Alles Befehle manipulieren nur die Ausgabe auf stdout, aber nicht die Datei selbst. Will man eine permanente Änderung herbeiführen, muss die Ausgabe in eine neue Datei umgeleitet werden! Verwendet man die ursprüngliche Datei, wird diese geleert!!

  • cat        
    Textdateien auf Bildschirm ausgeben oder in ein Programm umzuleiten.
    cat (concatenate/ verketten) war ursprünglich dazu gedacht, mehrere Dateien zu einer Datei zu verbinden. Es ist auch z.B. möglich nicht druckbare Zeichen mit auszugeben, was interessant sein kann, um zum Beispiel herauszufinden, ob Tabs oder Leerzeichen als Abstandshalter verwendet wurden. Siehe Beispiel unten.
  • cut        
    (schneiden) Spalten einer Datei "ausschneiden", wobei die Spalten innerhalb der Datei erhalten bleiben. Ausgabe nach stdout.
    cut muss bei Aufruf mitgeteilt werden, welches Zeichen als Trennungszeichen verwendet wird (Delimiter). Ausgabe kann ebenfalls in eine Datei erfolgen, es empfiehlt sich jedoch vorher eine Ausgabe über stdout vorzunehmen, um das Ergebnis zu kontrollieren. Siehe auch Beispiel unten.
  • expand     Umwandlung von Tabstopps in Leerzeichen. Konvertierung nach stdout, weshalb es sinnvoll ist, die Ausgabe in eine Datei umzuleiten (siehe auch 103.4). expand geht von 8 Zeichen für einen Tabstopp aus, dieser Wert kann jedoch über die Option -t geändert werden
    archangel:/textfiles # expand textfile1.txt > expandedtextfile1.txt
  • unexpand   Leerzeichen in Tabstopps umwandeln. Auch hier kann über die Option -t der Standartwert von 8 Leerzeichen für einen Tabstopp geändert werden
  • fmt        einfaches Textformatierungsprogramm. Es entfernt automatisch Zeilenumbrüche und kann mehrere Texte zu einem Text vereinigen. Die Breite des Text kann mit Hilfe der Option -w (width) angegeben werden
  • head       Zeigt die ersten 10 Zeilen (per Voreinstellung) einer oder mehrere Dateien an. Mit der Option -n kann die Anzahl der auszugebenden Zeilen definiert werden. Siehe Beispiel unten.
  • hexdump    Dateien im hexadezimalen, dezimalen, ASCII oder oktalen Format dargestellt werden. Dieses Programm kann ebenfalls ohne Probleme Dateien im Binärformat auslesen. Z.B. kann mit hexdump die Partitionstabelle des MBR ausgelesen werden.
  • od         octal dump; ähnlich wie hexdump, nur mit geringerem Funktionsumfang und verwendet per Voreinstellung das Oktalformat. Mit der Option -x kann die Ausgabe auch hexadezimal erfolgen
  • join       Verknüpfung zweier Dateien. join verknüpft dabei die Zeilen mit dem gleichen Indikator jeder Datei in einer neuen Zeile.  Für den Delimiter wird hier die Option -t verwendet. Mit der Option -j wird festgelegt, aus welcher Datei der Indikator mit ausgegeben wird. Alternativ zu -j kann auch direkt die Datei mit -1 oder -2 angegeben werden (laut manpage). Siehe auch Beispiel unten.
  • less       Pager. Es ist ein Programm, mit dem Textdateien angezeigt werden können. less bietet einige Vorteile gegenüber more, welches ebenfalls Textdateien ausgeben kann. less liest nicht erst die vollständige Datei ein (more schon) sondern immer nur so viele Daten, wie auch ausgegeben werden können. less bietet ebenfalls eine Suchfunktion und man kann hier auch wieder nach oben scrollen, nicht nur nach unten, was bei more nicht möglich ist. more muss erneut aufgerufen werden, wenn man Text weiter oben lesen möchte. Ausgabe erfolgt in "eigenem" Fester, nicht über die stdout.
  • nl         number lines; Dieses Programm nummeriert die Zeilen in einem Text (nicht verwechseln mit ln, was Links auf Dateien und Verzeichnisse erzeugt). Siehe Beispiel unten
  • paste      Zusammenführen von mehreren Dateien. Im Gegensatz zu cat werden die Dateien nicht untereinander, sondern nebeneinander zusammengefügt. Siehe Beispiel unten.
  • pr         Vorbereitung einer Datei für den Druck. Wird heute eher nicht mehr verwendet. Ausgabe sollte in eine neue Datei umgeleitet werden, da die Ausgabe über stdout erfolgt
  • sed           
    stream editor; Texteditor mit vielen Möglichkeiten. Es handelt sich jedoch nicht um einen Editor, wie z.B. nano, sondern um einen Editor, der den Datenstrom manipuliert. Er kann in pipe-Ketten verwendet werden, jedoch kann ihm ebenfalls die zu bearbeitende Datei direkt übergeben werden. Auch hier sind bei der Definition der Übergabe-Werte die Sonderzeichen speziell zu behandeln unter Beachtung, dass die Shell selbst, diese Sonderzeichen ebenfalls interpretiert. Daher empfiehlt es sich, diese Ausdrücke in einfache Anführungszeichen zu setzen. Siehe auch Ubuntuusers.de
    • sed s/X/Y/ textdatei               :In jeder Zeile wird das erste X durch ein Y ersetzt
    • sed s/X/Y/g textdatei             :Jedes X wird durch ein Y ersetzt
    • sed '/^#/d' textdatei             :Zeilen die mit "#" anfangen, werden gelöscht
    • sed '3iNeueZeile' textdatei   :Es wird eine neue Zeile vor der 3.Zeile eingefügt
  • sort       Zeilen von Textdateien sortieren. Es können aber auch andere Eingabequellen verwendet werden, die dann sortiert über z.B. die stdout ausgegeben werden. Mit Hilfe der folgenden Optionen kann die Sortierung nach gewissen Kriterien organisiert werden:
    • -n    numerische Kriterien
    • -o    Umleitung der Ausgabe in eine Datei (outfile)
    • -r    Ergebnis in umgekehrter Reihenfolge ausgeben (reverse)
  • split      Splittet große Dateien in mehrere kleine auf. split arbeitet zeilenorientiert und teilt eine Datei per Voreinstellung in kleinere Dateien je 1000 Zeilen auf. Mit der Option -b kann ein Datei in kleinere Dateien nach dem Kriterium der Größe (Angabe in Bytes) vorgenommen werden. Zusammensetzen der Datei mit Hilfe des Programms cat. Als Argument kann ebenfalls der Name der Teildateien angegeben, die dann von split mit Buchstabenkombinationen erweitert erzeugt werden.
  • tail       Gibt die letzten 10 Zeilen (per Voreinstellung) einer Datei aus. Nützliche Funktion, wenn man z.B. ein Log liest und wissen will, was als letztes passiert ist. Mit der Option -n kann die Anzahl der auszugeben Zeilen definiert werden. Mit der Option -f kann tail auch den laufenden Prozess anzeigen, sprich eine Log-Datei kann laufend angezeigt werden. (Beenden mit CTRL + C)
  • tr         (translate) Ersetzt oder löscht einzelne Zeichen in der Ausgabe einer Datei. Die Datei selbst wird nicht verändert. tr selbst kann kein Dateiname übergeben werden, daher behilft man sich hier mit der Ausgabe der Datei mittels cat und piped die Ausgabe dann durch tr. Wichtige Optionen für tr sind:
    • -d bzw. --delete           löscht das angegebene Zeichen
    • -c bzw. --complement       kehrt die Ausgabe ins Gegenteil
    • -s bzw. --squeeze-repeats    mehrere identische Zeichenfolgen durch ein Zeichen ersetzen
    • es ist auch möglich Kleinbuchstaben in Großbuchstaben umzuwandeln. ... | a-z A-Z oder ... | [:lower:] [:upper:]. Weiterhin sind auch noch andere Kombinationen möglich, die der Manpage entnommen werden können
    • Steuerzeichen können ebenfalls ersetzt werden. Dafür muss ein Backslash vorgestellt werden. Um den Backslash selbst zu ersetzten, muss ein doppelter \\ gesetzt werden. Genaue Angaben zu den verschiedenen Steuerzeichen siehe Manpage. Siehe auch Beispiel unten.
  • uniq       Kürzen einer Ausgabe einer Datei um sich wiederholende Zeilen (z.B. in Logdateien). Funktioniert aber nur, wenn die Zeilen direkt aufeinander folgen, was eine Sortierung (z.B. mit sort) vorher erforderlich macht 
  • wc         word count; zählt die Anzahl der Zeilen, Wörter und Bytes einer Datei (Standardeinstellung). Die Reihenfolge der ausgegebenen Werte entspricht der beschriebenen und kann nicht geändert werden. Es können auch mehrere Dateien oder Wildcards verwendet werden, dabei werden die Dateien einzeln aufgelistet, mit einer abschließenden Zusammenfassung der Gesamtbeträge. Mit den folgenden Optionen kann eine differenzierte Ausgabe erfolgen:
    • -c    zeigt nur die Anzahl der Bytes an
    • -l    zeigt nur die Anzahl der Zeilen (lines) an
    • -w    zeigt nur die Anzahl der Wörter an
    • -m    zeigt nur die Anzahl der Zeichen an
  • tac        umgedrehtes cat -> Es gibt die Dateien von hinten nach vorne aus. Siehe Beispiel unten
  • cut, paste und join werden gerne in Kombination verwendet.
Beispiele aus Verweisen:
ilonka@superhero:~/Dokumente/LPI_Zertifikat$ cat textfile1.txt 
2:Birnen
1:Aepfel
3:Bananen
4:Erdbeeren

ilonka@superhero:~/Dokumente/LPI_Zertifikat$ cat -A textfile1.txt 
2:^IBirnen$
1:^IAepfel$
3:      Bananen$
4:      Erdbeeren$

ilonka@superhero:~/Dokumente/LPI_Zertifikat$ head textfile1.txt textfile2.txt 
==> textfile1.txt <==
2: Birnen
1: Aepfel
3:      Bananen
4:      Erdbeeren

==> textfile2.txt <==
1:hellgruen
2:rot
3:gelb

4:dunkelgruen

ilonka@superhero:~/Dokumente/LPI_Zertifikat$ nl textfile2.txt      
1 hellgruen     
2 rot     
3 gelb     
4 dunkelgruen


ilonka@superhero:~/Dokumente/LPI_Zertifikat$ cut -d: -f2 textfile1.txt 
Birnen
Aepfel
Bananen
Erdbeeren

ilonka@superhero:~/Dokumente/LPI_Zertifikat$ paste textfile1.txt textfile2.txt 
1:Birnen 1:hellgruen
2:Aepfel 2:rot
3:Bananen 3:gelb
4:Erdbeeren 4:dunkelgruen

ilonka@superhero:~/Dokumente/LPI_Zertifikat$ join -t : -j 1 textfile1.txt textfile2.txt 
1:Birnen:hellgruen
2:Aepfel:rot
3:Bananen:gelb
4:Erdbeeren:dunkelgruen
Alternativ zur Option -j 1 kann auch -1 eingegeben werden, wobei dann das zu verwendende Feld aus der Datei noch definiert werden muss (-1 1)

ilonka@superhero:~/Dokumente/LPI_Zertifikat$ cat textfile1.txt | tr n x
1:Birxex
2:Aepfel
3:Baxaxex
4:Erdbeerex

ilonka@superhero:~/Dokumente/LPI_Zertifikat$ tac textfile1.txt 
4: Erdbeeren
3: Bananen
2: Aepfel
1: Birnen




Sonntag, 7. August 2016

103.1 Manpages

Komfortables Hilfesystem, welches für fast alle Linux-Befehle zur Verfügung steht
  • man <Kommando>           Aufruf der Manpage im Terminal
  • $MANPATH Variable, in der die Verzeichnisse enthalten sind, wo die Manpages abgelegt sind
  • /etc/manpath.config hier werden die Informationen für die Variable $MANPATH gesammelt und es können darüber hinaus weitere Informationen z.B. anderen Befehlen, die auf die Manpages zugreifen hier definiert werden
  • Die Manpages befinden sich in den in Sektionen unterteilten Verzeichnissen. Zumeist in komprimierter Form, die durch den Aufruf über man dekomprimiert werden und über einen Pager ausgegeben werden.
  • manpath            Aufruf der Verzeichnisse, wo die Manpages abgelegt sind
  • manpath -c         Aufruf der temporären Verzeichnisse, in die die Manpages entpackt werden. Diese Verzeichnisse werden zyklisch über den Daemon cron von catman bereinigt
  • catman             Funktion zum Erzeugen und Aktualisieren von Handbuchseiten

Sektionen des Mansystems

  • Das Mansystem wird in verschiedene Sektionen unterteilt, so dass es für unterschiedliche Kommandos, eine unterschiedliche Anzahl an Manpages existieren
  1. ausführbare Programme für Benutzer
  2. Systemaufrufe (Funktionen, die durch den Kernel unterstützt werden)
  3. Bibĺiotheksaufrufe (Libaries)
  4. besondere Dateien (normalerweise in /dev)
  5. Dateiformate und Konventionen
  6. Spiele
  7. Sonstige (Makro-Pakete und Konventionen)
  8. administrative Programme (nur für den Root)
  9. Kernel-Routinen (nicht standardisiert)
      A mehrteilige Manpages
  • Viele Manpages haben meistens nur eine Manpage. Sollte es noch weitere geben, werden diese bei Aufruf der Manpage unter Angabe der Sektionsnummer angegeben
  • man <Nummer> <Kommando>      Aufruf einer speziellen Manpage

Aufbau einer Manpage

  • Name               Bezeichnung des Elements mit kurzer Beschreibung
  • Synopsis          vollständige Kurzbeschreibung der Syntax
  • Description       ausführliche Beschreibung des Elements
  • Defaults            voreingestellte Parameter
  • Overview          Überblick über komplexe Zusammenhänge
  • Options             Optionen und deren Beschreibungen
  • Return Values   Informationen über Rückgabewerte, teilweise als Exitstatus bezeichnet
  • See also            Verweise auf artverwandte Themen
  • Bugs                  bekannte Fehler
  • Files                   Konfigurationsdateien u.Ä.
  • es sind noch weitere Elemente denkbar, dies sind die gängigsten

Verwandte Befehle

  • whatis          durchsucht nur das Feld Name in den Manpages. Vorteil, dass wenn es mehrere Sektionen einer Manpage gibt, werden diese dann aufgelistet. Vergisst man whatis das Argument zu übergeben, fragt whatis nach:
    archangel:/ # whatis
    whatis what
  • apropos           durchsucht das Feld Name und das Feld Description. Suche nach Programmen, die eine spezielle Funktion erfüllen möglich
    archangel:/ # apropos tape
    mt (1)            - control magnetic tape drive operation
    st (4)            - SCSI tape device
    smbtar (1)        - shell script for backing uo SMB/CIFS
  • whereis            zeigt an, wo sich ein Programm, die Konfigurationsdateien und die Manpages befinden
    ilonka@superhero:~$ whereis cron
    cron: /usr/sbin/cron /etc/cron.hourly /etc/cron.daily /etc/cron.d /etc/cron.monthly /etc/cron.weekly /usr/share/man/man8/cron.8.gz
  • which               zeigt den vollständigen Pfad eines Kommandos an. Existieren mehrere Versionen eines Programms, kann mit which geklärt werden, welche ohne Pfadangabe ausgeführt wird. which gibt dabei den Pfad des aufgerufenen Programms an 
    ilonka@superhero:~$ which less
    /usr/bin/less



103.1 Auf der Kommandozeile: Bash

Bash

Einige Kommandos, die hilfreich sind: (nicht zwingend LPIC relevant)
  • CTRL + L                   clear screen
  • CTRL + W                  Das Wort hinter dem Cursor löschen
  • CTRL + U                   Die gesamte Zeile löschen, Cursor muss dabei am Ende stehen
  • CTRL + R                   Suchen in den vorhergehenden Kommandos
  • CTRL + C                   Canceln des aktuellen Kommandos, welches ausgeführt wird
  • CTRL + T                   Tauschen der letzten zwei Zeichen vor dem Cursor
  • ESC + T                     Tauschen der letzten beiden Wörter vor dem Cursor
  • CTRL + H                    Löschen des Zeichens an der Cursorposition
  • CTRL + Z                    Unterbrechung des aktuellen Prozess
  • Up + Down Taste         Aufruf der vorherigen Kommandos, keine automatische Ausführung!!
  • Tab              Autovervollständigung von Befehlen, Pfadnamen und/ oder Dateinamen. Gibt es mehrere Möglichkeiten der Vervollständigung, wird bis zu dem eindeutigen Punkt vervollständigt. Nach mehrfachen Betätigen der Tab-Taste werden dann die vorhandenen Erweiterungen angezeigt

 Bash-History:


  • Alle eingegebenen Befehle werden in der /.bash_history gespeichert
  • Die Variable $HISTSIZE legt fest, wie viele Befehle gespeichert werden. Standard sind 500 (unter Ubuntu 1000). Diese Variable ist normalerweise in /etc/profile abgelegt
  • Die Kommandos werden mit Nummern in der /.bash_history gespeichert
  • history    Aufruf der Liste im Terminal
  • Verwendungsmöglichkeiten der History:
    • !!                (Bang-Bang) führt den letzten Befehl der History erneut aus 
    • !n                Der n-te Befehl der History wird ausgeführt (z.B. !5 führt den 5. Befehl in der History aus)
    • !-n               Führt den n-ten Befehl der History rückwärts gezählt aus (z.B. !-6 führt den 6. letzten Befehl der in der /.bash_history gespeichert ist)
    • !<Zeichenkette>   führt den letzten Befehl aus, indem die Zeichenkette vorkommt
  • PATH Variable: Enthält die Pfadangaben, wo das Betriebssystem nach den Programmen sucht. Ist ein Programm dort nicht abgelegt, muss es unter Angabe des vollständigen Pfads aufgerufen werden. Klassische Beispiele sind die Startskripte unter /etc/init.d 
  • archangel:~# /etc/init.d/apache2 start
  • which <Programm>      Um zu ermitteln, welches Programm genau von der Shell aufgerufen wird, wichtig wenn es mehrere Varianten eines Programms gibt 
  • Ein Programm wird auch dann nicht ohne Pfadangabe ausgeführt, wenn man sich im entsprechenden Verzeichnis befindet. Um es von dort starten zu können, werden die Zeichen ./ vorangestellt, die das aktuelle Verzeichnis repräsentieren 
  • pwd                   (Path of working) Ermittlung, in welchem Verzeichnis man sich gerade befindet 
  • --u -R                verschiedene Programme können rekursiv ausgeführt werden, d.h. das Kommando wird ebenfalls auf alle untergeordneten Ordner und Dateien angewendet. Beispiele hierfür sind: 
    • rm      remove, löschen 
    • cp      copy, kopieren 
    • chmod   change mode file, Berechtigungen für Ordner und Dateien ändern für verschiedene Berechtigungsgruppen. Die Änderungen können im symbolischen (u, g, o, a) oder oktal-Modus vorgenommen werden. Siehe auch Post 
    • chown   change file owner and group: Eigentümer und Gruppe von Dateien oder Ordner ändern 
    • chgrp   change group ownership: ändert die Gruppenzugehörigkeit jeder Datei
  • uname                Informationen des laufenden Systems abfragen. Diese Informationen können dazu verwendet werden, um Informationen über einzelne Module zu erfragen, oder z.B. heraus zu finden, welche passenden Module geladen, oder entladen werden können 
    • -r    Kernelversion auslsen 
    • -a    Kernelversion mit Details auslesen