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 Verzeichnissesmorgana% pwd
/usr/doc/HOWTO
morgana%# Kommando pwd eingeben
# aktuelles Verzeichnis
# Eingabeaufforderung der Shell (Prompt) - cd
-
(change directory)
Wechseln des Verzeichnisses - Einstellen des aktuellen VerzeichnisSyntax:
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),Filenamemorgana% 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 FilesSyntax:
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 sindmorgana% 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 /tmpmorgana% cd /var/log
morgana% cat messages.1 messages >/tmp/allmessages
morgana% cat messages >/tmp/nachricht
morgana% - less
-
Anzeigen von FileinhaltenSyntax:
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 Beendenmorgana% less /usr/doc/HOWTO/Tips-HOWTO
...
...
(END)q
morgana% - cp
-
(copy)
Kopieren von FilesSyntax:
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- cp source dest
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- cp source destdir
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- cp source1 [source2 ... ] destdir
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 FilesSyntax:
mv [ -option ... ] source dest(fast) analog cp
- mv source dest
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.- mv source destdir
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- mv source1 [source2 ... ] destdir
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 FilesSyntax:
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 VerzeichnissenSyntax:
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 Filesmorgana% 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 verzeichnissenSyntax:
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öschenmorgana% 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 FileattributenSyntax:
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 anzeigenmorgana% 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 Filtermorgana% 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)
# 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 BedingungSyntax:
find pfad [ ... ] bedingung ... [ aktion ]
# Suchen nach Filenamen, die "net" enthalten und in der Verzeichnishierarchie
# /etc stehenmorgana% 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 wurdenmorgana% 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"
# enthaltenmorgana% 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% - awk
-
(Filter zur) TextbearbeitungSyntax:
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 zeigenmorgana% 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 - tar
-
(tape archiver)
"Archivieren" von FilesSyntax:
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 Filenamemorgana% 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&
"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 gefundenmorgana% 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 abgelehntShell 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/useraddVertiefung (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 abgelehntVertiefung (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 Filemorgana% 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 Beispielmorgana% 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)
(Unterlagen des bisherigen kompletten Kurses "Shell-Programmierung")
Zur Homepage des URZ Thomas Müller, Christoph Ziegler, 26. September 2001