Springe zum Hauptinhalt

Archiv

Wie funktioniert Linux?


  Die Praxis: Tools


[Was ist ein Tool?] [Häufig gebrauchte Kommandos] [Das Pipeline-Konzept] [Suchen von Text] [Reguläre Ausdrücke] [Leistungsfähige Tools] ["Command not found"] [Shell-Programmierung]


Was ist ein Tool?

Die Kommunikation mit einem Rechner erfolgt üblicherweise mit einer grafischen Oberfläche, z.B. KDE!
Was aber, wenn für die Lösung eines Problems keine entsprechende Applikation gefunden wird? In Linux kein Problem.

Eine der grundlegenden Eigenschaften eines Linux-Systems ist das "Baukastensystem".

Unter einer Vielzahl von "Bausteinen" findet sich sehr wahrscheinlich auch eine Lösung für mein Problem. Falls nicht, kann eine Lösung "zusammengebaut" werden, die "Bausteine" werden Tools genannt.
 

  • Synonyme: Tool, Programm, Kommando, ausführbares File (=Baustein)

  • Tool ist also ein Programm, das  durch Aktivierung zum Prozeß wird, der sich um Hauptspeicher und CPU-Zeit bewirbt
  • das jeweils erste Wort einer über das Terminal eingegebenen Wortfolge wird als Kommando interpretiert (Worte sind durch ein oder mehrere Leerzeichen getrennt)
  • Kommando existiert als File, mit der Eigenschaft, ausführbar zu sein (siehe Beschreibung der Kommandos ls und chmod)
  • Kommandosyntax
  • kommando [ -option ... ] [ argument ... ]

    jede Kommando-Zeile kommuniziert mit der Shell

     

Häufig gebrauchte Kommandos

  • pwd

  • (print working directory)
    Anzeigen des aktuellen Verzeichnisses
    morgana% pwd
    /usr/doc/HOWTO
    morgana%
    # Kommando pwd eingeben
    # aktuelles Verzeichnis
    # Eingabeaufforderung der Shell (Prompt)
  • cd

  • (change directory)
    Wechseln des Verzeichnisses - Einstellen des aktuellen Verzeichnis

    Syntax:
    cd [pfadname]
     

    morgana% cd
    morgana% pwd
    /afs/tu-chemnitz.de/home/urz/c/czi
    morgana% cd /usr/include
    morgana% pwd
    /usr/include
    morgana% cd
    morgana% pwd
    /afs/tu-chemnitz.de/home/urz/c/czi
    morgana% 
    # change directory
    # Kontrolle mit pwd
    # aktuelles Verzeichnis: HOME-Verzeichnis
    # change directory nach /usr/include
    # Kontrolle mit pwd
    # aktuelles Verzeichnis: /usr/include
    # change directory
    # Kontrolle mit pwd
    # HOME-Verzeichnis
    # Eingabeaufforderung der Shell (Prompt)
  • ls

  • (list)
    Anzeigen von Verzeichnisinhalten sowie Fileattributen
    # change directory nach /etc
    # Inhalt des akt. Verzeichnis ausgeben ( mehrspaltige Ausgabe  )
    morgana% cd /etc
    morgana% ls
    DIR_COLORS    hosts.allow      passwd.cfedited
    adjtime               hosts.equiv     passwd.nis
    autorpm.conf      issue               profile.d 
    morgana% 

    Filestatus:

    • Zugriffsrechte
    • Eigentümerangaben
    • Anzahl Verzeichniseinträge
    • Zeiten (letzte Modifikation, letzter Lesezugriff, letzte Modifikation Fileattribute)
    • Filename
    • ...
    # change directory nach /etc
    # ls mit Option -l für Langform zur Ausgabe der Fileattribute
    # je File: Zugriffsrechte, Eigentümer, Filegröße, Datum (Modifikation),Filename
    morgana% cd /etc
    morgana% ls -l
    total 3498
    -rw-r--r-- 1 root root 2045 Aug  6  1998 DIR_COLORS
    -rw-r--r-- 1 root root     39 Mär  2 09:29 adjtime
    -rw-r--r-- 1 root root 3482 Mär  2 09:19 auto.conf
    drwxr-xr-x 2   root root 1024 Mär  2 09:23 default
    morgana% 
  • cat

  • (concatenate)
    Verketten von Files, auch Ausgeben eines Fileinhalts oder Anlegen eines neuen Files

    Syntax:
    cat [ file ... ]
     

    # Ausgabe des Inhalts eines Files README im Verzeichnis /usr/doc/HOWTO
    # (besser mit less, siehe später)
    # funktioniert nur, wenn HOWTOs lokal installiert sind
    morgana% cat /usr/doc/HOWTO/README
    This directory contains the Linux HOWTO documents.
    The HOWTO-INDEX provides an overview and index of the HOWTOs.

    Plain text versions of the HOWTOs are located in this directory.
    Linux-HOWTOs.tar.gz is a tar file of all the HOWTOs in plain text.

    - The other-formats directory contains many other formats of the HOWTOs:
    - DVI versions of the HOWTOs are located in other-formats/dvi.
    - HTML versions of the HOWTOs are located in other-formats/html.
    - PostScript versions of the HOWTOs are located in other-formats/ps.
    - SGML sources to the HOWTOs are located in other-formats/sgml.

    The mini directory contains mini-HOWTOs - shorter free-form HOWTOs on specific subjects.
    morgana% 
    # change directory nach /var/log
    # Verketten zweier Files und Ausgabe in neues File /tmp/allmessages
    # Kopieren des Files nach Verzeichnis /tmp
    morgana% cd /var/log
    morgana% cat messages.1 messages >/tmp/allmessages
    morgana% cat messages >/tmp/nachricht
    morgana% 
  • less

  • Anzeigen von Fileinhalten

    Syntax:
    less [ -option ... ] [ file ... ]
     

    • seitenweises Anzeigen der Files file ... bzw. von stdin am Bildschirm.
    • sehr komfortabel
    • nach dem Aufruf zeigt less die ersten n Zeilen (n=Anzahl der Zeilen auf dem Bildschirm-1) an und schreibt auf die letzte Bildschirmzeile das Zeichen :
    • less erwartet dann die Eingabe von eigenen Kommandos (Liste ist unvollständig)
      • blättern:

      • vorwärts: Leertaste
        rückwärts: b
        letzte Seite: G
        erste Seite: g
        zeilenweise: <return>
      • Textsuche:

      • vorwärts: /text sucht nächstes Auftreten von text
        rückwärts: ?text (analog)
        erneutes Suchen von gleichem text: n
        erneutes Suchen ..., andere Suchrichtung: N
      • weitere Kommandos

      • nächstes File bearbeiten: :n
        vorheriges File bearbeiten: :p
        Hilfe anfordern: h
        Arbeit beenden: q oder Q
    # seitenweises Anzeigen des Files Tips-HOWTO aus dem Verzeichnis /usr/doc/HOWTO
    # Blättern mittels Leertaste
    # ENTER bewirkt zeilenweisen Vorschub
    # "q" eingeben, zum Beenden
    morgana% less /usr/doc/HOWTO/Tips-HOWTO
    ...
    ...
    (END)q
    morgana% 
  • cp

  • (copy)
    Kopieren von Files

    Syntax:
    cp [ -option ...] source dest
     

    morgana% cd /var/log
    morgana% cp boot.log /tmp/bootinfo
    morgana% cp wtmp cron /tmp
    # change directory nach /var/log
    # Kopieren boot.log nach /tmp/bootinfo
    # Kopieren wtmp und cron nach /tmp
    1. cp source dest

    2. source ist der (Pfad-)Name eines bereits existierenden Files und dest ist der (Pfad-)Name eines neuen Files
      Voraussetzungen sind Schreibrecht im Verzeichnis des neu anzulegenden Files dest und Suchrecht für alle Verzeichnisse, die in dest angegeben wurden, weiterhin Suchrecht für alle Verzeichnisse, die in source angegeben wurden sowie Leserecht für das zu kopierende File source
      Achtung: dest wird ggf. überschrieben, ausschlaggebend sind dafür nicht die Rechte für ein evtl. existierendes File dest sondern Schreibrecht im Verzeichnis von dest
    3. cp source destdir

    4. source ist der (Pfad-)Name eines bereits existierenden Files und destdir ist der (Pfad-)Name eines bereits existierenden Verzeichnisses. Das File source wird unter gleichem Namen in das Verzeichnis destdir kopiert.
      Voraussetzungen: vgl. oben
    5. cp source1 [source2 ... ] destdir

    6. sourcei sind die (Pfad-)Namen bereits existierender Files und destdir ist der (Pfad-)Name eines bereits existierenden Verzeichnisses. Die Files sourcei werden unter gleichem Namen in das Verzeichnis destdir kopiert.
      Voraussetzungen: vgl. oben
  • mv

  • (move)
    Umbenennen und Verschieben von Files

    Syntax:
    mv [ -option ... ] source dest

    (fast) analog cp

    1. mv  source dest

    2. source ist der (Pfad-)Name eines bereits existierenden Files und dest ist der neue (Pfad-)Name dieses Files
      Voraussetzungen sind Schreibrecht im Verzeichnis des neu anzulegenden Files dest und Suchrecht für alle Verzeichnisse, die in dest angegeben wurden, weiterhin Schreibrecht im Verzeichnis des umzubenennenden Files source, Suchrecht für alle Verzeichnisse, die in source angegeben wurden sowie Leserecht für das umzubennende File source (letzter Fakt gilt nur, wenn source und dest in unterschiedlichen Filesystemen existieren)
      Achtung: Existiert bereits ein File mit dem Namen dest, so wird es stillschweigend überschrieben, wenn Schreibrecht für dieses File besteht. Ist das Schreibrecht für dieses File nicht gewähr t, so gibt mv einen entsprechenden Hinweis und fragt, ob das File überschrieben werden soll. In diesem Fall bestätigt jede mit y beginnende Anwort das Überschreiben. Die Option -f (force) beeinflußt diese Arbeitsweise: Bei Angabe der Option unterbleibt der Hinweis und die entsprechende Frage und das File wird ungefragt überschrieben.
    3. mv  source destdir

    4. source ist der (Pfad-)Name eines bereits existierenden Files und destdir ist der (Pfad-)Name eines bereits existierenden Verzeichnisses. Das File source wird unter gleichem Namen in das Verzeichnis destdir gebracht.
      Voraussetzungen: vgl. oben
    5. mv  source1 [source2 ... ] destdir

    6. sourcei sind die (Pfad-)Namen bereits existierender Files und destdir ist der (Pfad-)Name eines bereits existierenden Verzeichnisses. Die Files sourcei werden unter gleichem Namen in das Verzeichnis destdir gebracht.
      Voraussetzungen: vgl. oben
    morgana% cd /tmp
    morgana% mv nachricht mess
    morgana% mv mess wtmp /var/tmp
    morgana% 
    # change directory nach /tmp
    # Umbenennen File: messages --> mess
    # Verschieben Files mess und wtmp nach 
    #  (Prompt)
  • rm

  • (remove)
    Lösche von Files

    Syntax:
    rm [ -option ...] file ...
     

    löscht die angegebenen File(s) mit den (Pfad-)Namen file ..., es gibt KEINE Möglichkeit, einmal gelöschte Files wieder herzustellen! (rm ist ein typisches UNIX-Kommando, es fragt nichts sondern handelt!)
    Achtung: rm erfordert Schreibrecht im Verzeichnis des zu löschenden Files file aber nicht für das File selbst! D.h. es ist auch völlig egal, wer Eigentümer des Files ist, Schreibrecht zum Verzeichnis reicht aus!
    Weiterhin ist Suchrecht für alle in file angegebenen Verzeichnisse erfolderlich.

    morgana% rm /var/tmp/mess
    morgana% 
    # Löschen des Files mess
    # (Prompt)
  • mkdir

  • (make directory)
    Einrichten von Verzeichnissen

    Syntax:
    mkdir [ -option .. ] dir ...
     

    dir ist der (Pfad-)Name eines anzulegenden Verzeichnisses. In jedem anzulegenden Verzeichnis richtet mkdir die Einträge . und . . ein.
    Voraussetzung: Schreibrecht im Verzeichnis des anzulegenden Verzeichnisses dir und Suchrecht in allen in dir angegebenen Verzeichnissen.
     

    # Kontrolle  verzeichnis --> existiert nicht
    # verzeichnis erzeugen --> 
    # Kontrolle --> verzeichnis existiert
    # Kommando ls ohne Option "-d" -->  in verzeichnis: 0 Files
    morgana% ls -ld verzeichnis
    ls: verzeichnis: Datei oder Verzeichnis nicht gefunden
    morgana% mkdir verzeichnis
    morgana% ls -ld verzeichnis
    drwxr-xr-x 2 czi urz  1024 Mär 4 14:13 verzeichnis
    morgana% ls -l verzeichnis
    total 0
    morgana% 
  • rmdir

  • (remove directory)
    Entfernen von verzeichnissen

    Syntax:
    rmdir [ -option ... ] dir ...

    siehe mkdir
    zu löschendes Verzeichnis muß leer sein ( Alternative: rm -r ... )
     


    # Löschen  von Verzeichnis verzeichnis
    # verzeichnis erneut erzeugen
    # Kopieren eines Files in das eben erzeugte verzeichnis
    # rmdir kann nicht wirken, da verzeichnis nichht leer 
    # rekursives rm (Option -r) kann verzeichnis löschen
    morgana% rmdir verzeichnis
    morgana% mkdir verzeichnis
    morgana% cp /var/log/messages verzeichnis
    morgana% rmdir verzeichnis
    rmdir: verzeichnis: Das Verzeichnis ist nicht leer
    morgana% rm -r verzeichnis
  • Vertiefung ( Kommandos zur Filearbeit)
  • chmod

  • (change modus)
    Ändern von Fileattributen

    Syntax:
    chmod modus file ...

    modus-Angabe absolut oder symbolisch, siehe hier

    Syntax modus:
    [who] op perm [ op perm] ..., ....

    # Fileattribute von mess anzeigen
    # read-Rechte entfernen
    # geänderte Fileattribute anzeigen
    morgana% ls -l mess
    -rw-r--r--  1 czi  urz   1705 Mär  4 14:24 mess
    morgana% chmod -r mess
    morgana% ls -l mess
    --w-------  1 czi  urz   1705 Mär  4 14:24 mess
    morgana% 
    who:
    wessen Rechte sollen modifiziert werden

    u - Eigentümer (user)
    g - Gruppe (group)
    o - Andere (other)
    a - alle (all) Abkürzumg für ugo
    fehlt die Angabe von who, wird a angenommen
    op:
    wie sollen die Rechte modifiziert werden

    + - hinzufügen
    - - entfernen
    = - setzen/überschreiben
    perm:
    welche Rechte sollen modifiziert werden

    r - Lesen
    w - Schreiben
    x - Ausführen/Durchsuchen
    s - set uid / set gid (u=s / g=s)
    u - neue Zugriffsrechte so wie die des Eigentümers (Bsp.: g=u)
    g - neue Zugriffsrechte so wie die der Gruppe (Bsp.: o=g)
    o - neue Zugriffsrechte so wie die der anderen Nutzer (Bsp.: u=o)
# Leserechte für Eigentümer und  für Gruppe setzen
#  Kontrolle mittles ls -l
morgana% chmod u+r,g+r mess
morgana% ls -l mess
-rw-r-----  1 czi urz    1705 Mär  4 14:24 mess
morgana% 

Vertiefung (Ändern von Filestatusinformationen)

Das Pipeline-Konzept

Pipes und Filter
 
morgana% cat /etc/passwd | wc
20   21   742
morgana% 
# zwei mittels pipe kommunizierende Kommandos
# Ausgabe von wc
# (Prompt)
  • Prinzip

  • Ausgabe des ersten Kommandos wird zur Eingabe des folgenden Kommandos
    ist nicht auf zwei Kommandos beschränkt
    Prozesse werden synchronisiert (von Shell)
  • Definition Filter

  • Programme, die aus der Standardeingabe lesen sowie in die Standardausgabe schreiben, werden Filter genannt
  • Standardeingabe = Tastatur

  • Standardausgabe = Bildschirm
    sind mittels Pipe | (und > < ) zu ändern
  • UNIX-Prinzip

  • kleine Programme als Filter --> kombinierbar
    wird Eingabefile nicht angegeben, dann von Standardeingabe, analog Standardausgabe
    z.B. cat, ls, less, wc, u.v.a.
  • Vertiefung

Suchen von Text

Kommandos der grep-Familie (grep, egrep, agrep) für die Textsuche
( g/regular expression/p )
 
Syntax:
grep [ -option ...] [muster] [ file ... ]

Suchen nach muster in file ... und Ausgabe entsprechend option ...
 

# Suchen der Zeichenfolge "hda" in /etc/fstab
morgana% grep hda /etc/fstab
/dev/hda6 /res         ext  defaults   1 2
/dev/hda5 /usr/vice ext2 defaults   1 2
/dev/hda3 swap      swap defaults   0 0
morgana% 
# Zeilen suchen, die die Zeichenfolge  "hda" nicht enthalten (Option -v) 
morgana% grep -v hda /etc/fstab
/dev/fd0      /mnt/floppy   ext2       noauto     0 0
/dev/cdrom /mnt/cdrom  iso9660 noauto,ro 0 0
none          /proc            proc       defaults    0 0
morgana% 

Reguläre Ausdrücke

  • reguläre Ausdrücke werden von verschiedenen Kommandos verarbeitet, u.a. von:
    • grep
    • ed, sed, ex, vi, vim
    • expr
    • less
    • awk
  • dieses Prinzip wird u.a. auch bei Suchmaschinen im Internet verwendet
  • reguläre Ausdrücke sind ein wertvolles Werkzeug bei der Bearbeitung von Textfiles.
  • es können s.g. Textmuster gebildet werden
  • Prinzip: Zeichen mit Sonderbedeutung, die vom jeweiligen Kommando interpretiert werden
  • nicht verwechseln: regulärer Ausdruck <--> Shell
  • viele Sonderzeichen, die in regulären Ausdrücken benutzt werden können, besitzen eine Sonderbedeutung für die Shell (z.B. bei Filenamengenerierung, Zugriff auf Shell-Variable)
  • regulären Ausdruck in Hochkomma einschließen (um die Interpretation durch die Shell zu verhindern)
  • ein regulärer Ausdruck bestimmt eine Menge von Zeichenfolgen; umgangssprachlich: reg_ex paßt auf eine Menge von Zeichenfolgen
  • reguläre Ausdrücke bestehen aus einfachen Zeichen und Metazeichen
  • es wird zwischen einfachen und erweiterten regulären Ausdrücken unterschieden (nur einfache werden behandelt)
Regulärer
Ausdruck
Bedeutung Bemerkung
zu Shells
x Zeichen x selbst, x ist kein Metazeichen dto.
\x Zeichen x selbst, x kann Metazeichen sein dto.
^r regulärer Ausdruck r am Anfang der Zeile
z.B.: ^Am
-
r$ regulärer Ausdruck r am Ende der Zeile
z.B.: Ende$
-
. ein beliebiges Zeichen ?
[s] ein Zeichen aus der nichtleeren Zeichenfolge s
s ist eine Folge einzelner Zeichen
z.B.: [abc], [123456789]
Zeichenbereiche werden in der Form [x1-x2] angegeben
z.B.: [a-z], [A-Z], [0-9]
Besonderheit: wenn ] oder - als erstes Zeichen in s stehen, werden sie als Element von s betrachtet
wenn ^ nicht als erstes Zeichen von s auftritt, wird es als Element von s betrachtet
dto.
[^s] jedes beliebige Zeichen, daß nicht in s enthalten ist
s wie oben
z.B.: [^a] - jedes Zeichen außer a
[^abc] - jedes Zeichen außer a, b oder c
[^a-z] - jedes Zeichen, nur kein kleiner Buchstabe
[!s]
r* 0, 1 oder mehrmaliges Auftreten des regulären Ausdrucks r
z.B.: a* - 0, 1 oder beliebig viele a
.* - 0, 1 oder beliebig viele Zeichen
-

*

rt regulärer Ausdruck r gefolgt von regulärem Ausdruck t
z.B.: [a-z][A-Z] - ein kleiner Buchstabe gefolgt von einem großen Buchstaben
[a-zA-z] - ein Buchstabe (klein oder groß)
[^a-zA-Z0-9] - ein Sonderzeichen
dto.
r\{m,n\} m bis n maliges Auftreten des regulären Ausdruck r -
r\{m\} genau m maliges Auftreten von r -
r\{m,\} mindestens m maliges Auftreten von r
z.B.: a\ {1,2\ } - a oder aa
[^a-zA-Z0-9]\ {3\ } - Folge von 3 Sonderzeichen
-
\(r\) der reguläre Ausdruck r selbst
z.B.: \ ([a-z][0-9]\ )\ {4\ } - viermal die Folge Kleinbuchstabe Ziffer
-
\n n - ganze Zahl von 1-9
\ n in einem regulären Ausdruck steht für den r.A. t, der vorher im verketteten r.A. als n-ter in \ ( und \ ) eingeschlossene r.A. angegeben ist
Diese Form wird besonders für Substitutions-Kommandos von Editoren benutzt.
-

Anmerkungen:

  • folgende in einem regulären Ausdruck enthaltene Zeichen besitzen eine Sonderbedeutung:

  • . * [  ] \  { } ( ) ^ $ -
  • . * [ \ haben innerhalb [ ] keine Sonderbedeutung
  • ^ $ haben nur Sonderbedeutung am Zeilenanfang bzw. am Zeilenende
  • ^ nach [ bedeutet "nicht enthalten" (Negierung)
  • - in [ ] definiert eine Zeichenklasse (zwischen zwei Zeichen)

  •  
Beispiel:
# Verzeichniswechsel nach /var/log
# nach Zeilen mit Muster 07:00 bis 09:59 suchen
morgana% cd /var/log
morgana% grep '0[7-9]:[0-5][0-9]:' messages
Mar  2 07:14:34 morgana PAM_pwdb[10913]: ...
Mar  2 08:08:32 morgana PAM_pwdb[10463]: session ...
Mar  2 08:13:36 morgana init: Switching to runlevel: 6
morgana% 

Leistungsfähige Tools

  • find

  • Finden von Files - in Abhängigkeit von einer Bedingung

    Syntax:
    find pfad [ ... ] bedingung ... [ aktion ]
     

    # Suchen nach Filenamen, die "net" enthalten  und in der Verzeichnishierarchie 
    # /etc stehen
    morgana% find /etc -name "*net*" -print
    /etc/rc.d/init.d/inet
    /etc/rc.d/rc1.d/K90network
    /etc/rc.d/rc6.d/K90network
    /etc/inetd.conf
    morgana% 
    # nach HOME-Verzeichnis wechseln
    # Suchen aller Files, die seit einem Jahr  nicht mehr gelesen wurden
    morgana% cd
    morgana% find . -atime +365 -type f exec ls -ldu {} \;
    -rwxr-xr-x  1 czi urz 6144 Jun  3 1992 ./textfile
    -rw-------  1 czi urz 3116 Okt 17 1997 ./Mail/samfs
    morgana% 
    # Suchen nach Files im Verzeichnis /usr/doc, die  "security"  oder "Security" 
    # enthalten 
    morgana% find /usr/doc -type f -exec grep -l '[sS]ecurity' {} \;
    /usr/doc/fileutils-3.16/README
    /usr/doc/FAQ/txt/FAQ
    /usr/doc/FAQ/html/Linux-FAQ.html
    /usr/doc/HOWTO/Tips-HOWTO
    /usr/doc/HOWTO/other-formats/html/Security-HOWTO-1.html
    morgana% 

    Vertiefung

  • awk

  • (Filter zur) Textbearbeitung

    Syntax:
    awk [ -option ... ] '[muster]{aktion}' [ file ... ]
     

    # Inhalt von /etc/inetd.conf nach awk  "pipen"
    # awk bearbeitet alle Zeilen mit "tcp" und  gibt das erste sowie 7. Feld aus 
    # (getrennt mittels Tabulator)
    # ( "\" am Ende des ersten Kommandos  bedeutet: Fortsetzung auf nächster Zeile)
    # less ...: Inhalt von /etc/inetd.conf  zeigen
    morgana% cat /etc/inetd.conf | \
    ? awk '/tcp/{printf "%s\t%s\n",$1,$7}'
    telnet  in.telnetd
    ftp     in.ftpd
    talk    /usr/local/sbin/to-otalkd
    morgana% less /etc/inetd.conf
    telnet stream tcp nowait root  /usr/sbin/tcpd in.telnetd
    ftp  stream tcp nowait root /usr/sbin/tcpd  in.ftpd
    tftp dgram  udp wait   root /usr/sbin/tcpd  in.tftpd

    Vertiefung

  • tar

  • (tape archiver)
    "Archivieren" von Files

    Syntax:
    tar [-option ... ] [archivdevice] [ file ... ]
     

    • Zusammenfassen von Files, Verzeichnishierarchien zur Datensicherung oder Softwareübergabe
    • archivdevice kann (lt. UNIX) sowohl File als auch Gerät sein
    # 1. Suchen eines tar-Files
    # 2. Inhalt des tar-Files ausgeben 
    # Optionen: t - Inhalt, v - Langform, f - es folgt der Filename
    morgana% find /usr /etc -name "*.tar" -print
    /usr/doc/xbanner-1.31/samples/_other_ideas/My_Home_Setup.tar
    morgana% tar -tvf \
    /usr/doc/xbanner-1.31/samples/_other_ideas/My_Home_Setup.tar
    -rw-r--r-- root/root       727 1996-08-24 23:57 Cyc_FgPlasma
    -rw-r--r-- root/root       240 1996-08-24 23:57 xb_supp
    -rwxr-xr-x root/root       426 1996-08-24 23:57 Xsetup_0
    morgana&

    Vertiefung

"Command not found" und ...

Kommandoeingabe und die Shell (bash)
 
  • Fehler bei der Kommandoeingabe
  • # Korrekturangebot 
    # Kommandonamens
    # Voraussetzung: Variable correct gesetzt (tcsh: set correct=cmd)
    morgana% grepp -l DOS /usr/doc/FAQ/txt/*
    CORRECT>grep -l DOS /usr/doc/FAQ/txt/* (y|n|e|a)?y
    /usr/doc/FAQ/txt/ATAPI-FAQ
    /usr/doc/FAQ/txt/BLFAQ
    /usr/doc/FAQ/txt/FAQ
    /usr/doc/FAQ/txt/Ftape-FAQ
    /usr/doc/FAQ/txt/GCC-SIG11-FAQ
    /usr/doc/FAQ/txt/Linux-FAQ
    /usr/doc/FAQ/txt/PPP-FAQ
    morgana% 
    morgana% sysinformation
    sysinformation: Command not found.
    morgana% locate sysinf | grep bin
    /usr/X11R6/bin/xsysinfo
    /usr/local/bin/sysinfo
    morgana% /usr/local/bin/sysinfo | less
    # Kommando nicht gefunden
    # Suchen mit locate nach
    # Zeichenfolge "sysinf" 
    # nur "bin" enthaltende Zeichenfolgen
    # mehrmals gefunden
    morgana% apropos user | grep new
    useradd (8) - Create a new user
    morgana% useradd
    useradd: Command not found.
    morgana% locate useradd
    morgana% /usr/man/man8/useradd.8
    morgana% /usr/sbin/useradd
    morgana% 
    # Kommando useradd nicht gefunden, 
    # obwohl es laut locate
    # existiert
    # Alternativangebot abgelehnt

    Shell sucht nur in bestimmten Verzeichnissen nach einem File mit diesem Kommandonamen.
    Variable PATH enthält die nach einem Kommandonamen zu durchsuchenden Verzeichnisse.
    Entweder Variable PATH erweitern oder vollständigen Pfadnamen verwenden: /usr/sbin/useradd

    Vertiefung (Shells)

  • Startup-Files
  • bash-Shell erhält bei Aktivierung Standardwerte, wie auch die Variable PATH
    Standardwerte werden aus dem File .profile (im HOME-Verzeichnis) gelesen
    (diese Startup-Files gibt es auch bei zahlreichen anderen Kommandos/Programmen)
     

    morgana% grep PATH /etc/profile
    PATH="$PATH:/usr/X11R6/bin"
    export PATH
    morgana% # aehnliche Zeilen nach .profile
    morgana% echo $PATH
    /usr/bin:/bin:/usr/X11R6/bin
    morgana% PATH=${PATH}:/usr/sbin
    morgana% useradd
    morgana% usage: useradd [-u uid [-o]] [-g group] ...
    morgana% echo $PATH
    /usr/bin:/bin:/usr/X11R6/bin:/usr/sbin
    # Kommando useradd nicht gefunden, 
    # obwohl es laut locate
    # existiert
    # Alternativangebot abgelehnt

    Vertiefung (Konfiguration der Nutzerumgebung)

  • Shell und Sonderzeichen
  • jede Eingabe über die Tastatur wird von der Shell bearbeitet (siehe obige Beispiele)
    einige Sonderzeichen werden durch die Shell interpretiert (und die interpretierte Zeile als Kommando zur Ausführung gebracht)
     

    • Zeichen mit Sonderbedeutung für die Shell :
      • Leerzeichen, Tabulator --> Argumenttrennung
      • Zeilenende --> Abschluß Kommandozeile
      • * --> Filenamengenerierung
      • ? --> Filenamengenerierung
      • [ -->  Filenamengenerierung
      • ] --> Filenamengenerierung
      • > --> Fileumlenkung
      • < -->Fileumlenkung
      • |  --> Pipe
      • & --> Hintergrundkommando
      • ! --> Historie (C-Shell)
      • ...
    • Die Sonderbedeutung eines einzelnen Zeichens für die Shell kann durch Voranstellen des Zeichens \ aufgehoben werden.
    • Eine Zeichenfolge, die in Apostrophe ( ' ) eingeschlossen ist, wird unverändert dem Kommando übergeben (ein Argument).
    • In einer Zeichenfolge, die in Doppel-Apostrophe ( " ) eingeschlossen ist, behalten die Zeichen $ und ! (history) ihre Sonderbedeutung für die Shell
      # Filenamengenerierung
      # trifft auf alle existierenden Files zu, die eine Zeichenfolge "sys" enthalten
      # (sysinfo ist ausführbar --> ..x..x..x)
      # interaktives Löschen (rm -i) --> Abfrage für jedes File
      morgana% ls -l /sbin/*sys*
      -rwxr-xr-x 1 root root   331 Okt 16 02:11 /sbin/setsysfont
      -rwxr-xr-x 1 root root 53464 Dez 22 07:16 /sbin/sysinfo
      morgana%rm -i /var/tmp/*
      rm: `/tmp/wtmp' entfernen?y
      rm: `/tmp/a' entfernen?n
      # Ausgabe von "ps axl" mit Fileumlenkung (">") in das File /tmp/ps_axl schreiben
      # Fileinhalt mit dem Editor "view" anschauen
      # "wc -l" zählt die Zeilen im File (Eingabefileumlenkung - "<")
      morgana% ps axl > /tmp/ps_axl
      morgana% view /tmp/ps_axl
      morgana% wc -l </tmp/ps_axl
    • job-control

    Shell-Programmierung

    Einfaches Beispiel
    morgana% cat /tmp/programm
    #!/bin/sh
    #
    # Analyse des Verzeichnisses /var/log:
    #
    echo "3 groesste Files:"

    du -sk /var/log/* | sort -n | tail -3l

    echo "Files, die seit mehr als 31 Tagen nicht mehr gelesen wurden:"

    echo ""


    find /var/log -type f -atime +31 -exec ls -lud {} \;

    morgana%/tmp/programm
    morgana%bash: /tmp/programm: Keine Berechtigung
    morgana%ls -l /tmp/programm
    morgana%-rw-r--r-- 1 czi urz 252 Mar 9 16:29 /tmp/programm
    morgana%chmod a+x /tmp/programm
    3 groesste Files/Verzeichnisse:
    181 /var/log/bb.local.2
    423 /var/log/wtmp
    715 /var/log/lastlog

    Files, die seit mehr als 31 Tagen nicht mehr gelesen wurden:
    -rw-r--r-- 1 root root     0 Jan 25 00:54 /var/log/pacct
    -rw-r--r-- 1 root root     0 Apr 5 1999 /var/log/savacct
    -rw-r--r-- 1 root root     0 Apr 5 1999 /var/log/usracct
    -rw-r--r-- 1 root root     0 Apr 19 1999 /var/log/sendmail.st
    -rw-r--r-- 1 root root  2650 Oct 15 10:32 /var/log/dmesg
    -rw-r--r-- 1 root root 12169 Jan 24 23:48 /var/log/boot.log
    -rw-r--r-- 1 root root     0 Jan 24 23:49 /var/log/netconf.log.1
    -rw-r--r-- 1 root root     0 Jan 24 23:49 /var/log/netconf.log.2
    -rw-r--r-- 1 root root     0 Nov 1 01:05 /var/log/netconf.log.3
    -rw-r--r-- 1 root root     0 Oct 15 12:21 /var/log/netconf.log.4

    Shell-scripte (Erstellung, Aufruf, Kommentare, Argumente)

    Shell-Variablen

    Shell-Ablaufsteuerung

    (Unterlagen des bisherigen kompletten Kurses "Shell-Programmierung")

    Zur Homepage des URZ
    Thomas Müller, Christoph Ziegler, 26. September 2001 
  • Logo

    #wirsinddivers

    TU Chemnitz lädt am 20. Mai 2025 alle Interessierten aus der Universität und der Stadt Chemnitz zum 3. Diversity Day ein …

  • Mehrere junge Menschen stehen um einen Tisch herum, auf dem Miniroboter fahren.

    RoboDay 2025: Robotik-Talente zeigen ihr Können

    Am 17. Mai 2025 wird der regionale Vorausscheid zur „World Robot Olympiad“ und der Wettbewerb „RoboSAX“ vereint mit einem Begleitprogramm für Kinder und Jugendliche, die spielerisch den Umgang mit Robotertechnologie, KI und autonomem Fahren erleben und die TU Chemnitz kennenlernen können …

  • Ein Mann mit Helm steht vor einem Förderturm im Sonnenuntergang.

    „Rummelplatz“ – eine ganz besondere Zeitreise

    TU Chemnitz ist Kooperationspartnerin der Konferenz zur Uraufführung der Oper „Rummelplatz“ ­– Für den Science Slam „Von Atommacht bis Zonen-Pop“ können bis zum 6. Juni 2025 Kurzbewerbungen eingereicht werden …

  • Ein Mann und eine Frau stehen neben einer technischen Anlage.

    Vom Reststoff zur Ressource

    Projekt „Reformed Wool“ bringt textile Abfälle zurück in den Kreislauf – EXIST-Förderung für Gründungsteam an der TU Chemnitz …