[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]
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.
kommando [ -option ... ] [ argument ... ]
jede Kommando-Zeile kommuniziert mit der Shell
| morgana% pwd
/usr/doc/HOWTO morgana% |
# Kommando pwd eingeben
# aktuelles Verzeichnis # Eingabeaufforderung der Shell (Prompt) |
Syntax:
cd [pfadname]
| morgana% cd
morgana% pwd /home/czi morgana% cd /usr/include morgana% pwd /usr/include morgana% cd morgana% pwd /home/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) |
| # 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:
| # 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% |
Syntax:
cat [ file ... ]
| # Ausgabe des Inhalts eines Files README im
Verzeichnis /usr/doc/HOWTO
# (besser mit less, siehe später) |
| 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% |
Syntax:
less [ -option ... ] [ file ... ]
| # 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% |
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 |
Syntax:
mv [ -option ... ] source dest
(fast) analog cp
| 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) |
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) |
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% |
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 |
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% |
| # 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% |
| morgana% cat /etc/passwd | wc
20 21 742 morgana% |
# zwei mittels pipe kommunizierende Kommandos
# Ausgabe von wc # (Prompt) |
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ä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:
| # 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% |
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% |
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 |
Syntax:
tar [-option ... ] [archivdevice] [ file
... ]
| # 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& |
| # Korrekturangebot
# Kommandonamens |
| 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
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 |
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)
| # 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 |
| 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 |
| Zur Homepage des URZ Thomas Müller, Christoph Ziegler, 11. März 2000 |