Sie sind auf Seite 1von 41

WS15/16

UNIX/Linux- Befehlshandbuch

Benutzerverwaltung

Anmelden/Login (für privaten Rechner, nicht im HSMW-Netz)

- login:_____________  Eingabe des Login-Names vom Nutzer/Besitzer


- password:_________  Eingabe ihres Linux-Passwortes (keine Anzeige zur
Überprüfung)

Anzeige der Anmeldung zu Login-Informationen, Benutzer- und Gruppenkennung

- whoami (logname)  Anzeige ihres Login-Namens (Nutzer/Besitzer)


- who  andere UNIX-Benutzer, die sonst noch an UNIX/Linux -System
eingeloggt ACHTUNG: unter Linux aus Sicherheitsgründen
gesperrt
- finger  Anzeige von Login-Namen, Real-Namen, Terminalnamen,
Schreibstatus, Idle Zeit, Login Zeit, Bürostandort und Büro-
Telefonnummer
- users  Anzeige der akt. Angemeldeten Benutzer des Systems
- useradd (adduser)  Hinzufügen eines Benutzers
- usermod (modify user) Bearbeitung/Änderung der Benutzereigenschaften
- userdel  Benutzer löschen
- id  Anzeige des UID + GID (Nutzer- und Gruppenidentifikator)
- tty  Anzeige des Arbeitsterminals
- stty –a  Anzeige der akt. Terminaleinstellungen
- passwd  Änderung des Passworts eines Benutzers
- clear (reset)  Löschung des Konsolen/Terminalinhalts
- reset  Terminal zurücksetzen bzw. neu initzieren
- history  Auflistung/Anzeige der zuletzt eingegeben Kommandos
- sudo  Admin: Ausführung des Kommandos als Root oder anderen
user
 sudo apt-get install kommando Kommando installieren via Konsole

Passwort/Gültigkeitsdauer

- chage  Gültigkeitsdauer des Passwortes festlegen


 chage benutzer  Anzeige der Gültigkeitsdauer des Passwortes
 chage -l benutzer  Anzeige der Gültigkeitsdauer des Passwortes

Passwort ändern:
- passwd
- changing password for ........
- Old password:________  Eingabe „altes“ Passwort
- New password:_______  Eingabe „neues“ Passwort
- Re-enter new password:______ Wdh. des neuen Passworts zur Kontrolle
- Passwd –d benutzer  Löschung des Passwort

Anzeige Kalender, Datum, Uhrzeit

- cal  Kalender des laufenden Monats

1
WS15/16

 cal 2004  Kalender des angegebenen Jahres


 cal 9 2004  Kalender für betreffenden Monat des angegebenen Jahres
- date  Ausgabe des akt. Datum/Uhrzeit (Standartformat)

Terminal-Einstellungen

- CTRL-H/Backspace-Taste  Zeichen in der Kommandozeile löschen


- CTRL-U  gesamte Kommandozeile löschen
- CTRL-S/CTRL-Q  längere Bildschirmausgabe anhalten/fortsetzen
- stty –a  Anzeige der aktuellen Einstellungen für das Terminal
- exit  Schleißen/Beenden der Shell bzw. des
Terminal/Konsolenfensters

Befehlszeilen-Editor der Shell


- Rückruf der Befehls-History  über Pfeiltasten nach oben/unten (um ein Kommando
nach hinten oder vor)

Online-Hilfe anzeigen

- man  Anzeige Handbuchseiten für Kurzinformation zu allen


Kommandos (Beenden [q,Q], Abbruch [Ctrl-C])
 man ls  Informationen zum Kommando ls

- info  Info-Seiten zum Kommando (ganze Kurzinfoseiten),


(Beenden [q,Q], Abbruch [Ctrl-C]), Navigation mittels
Cursortasten, TAB, Leertaste, Tastenkürzel
 info ls  Info-Seiten zum Kommando ls

weitere Hilfsoptionen (deutsch):


--help/-?:  Informationen zu einem Kommando
 kommando --help  Informationen zum Kommando
 kommando -? (funktioniert nicht bei jedem Kommando)
ls --help  Informationen zum Kommando ls

apropos kommando(wort)  Auflistung aller Kommandos mit Kommando(wort)


whatis kommando(wort)  Anzeige zur Kurzinfo zu Kommando(wort)

Allg. Kommandosyntax in Linux/UNIX

$ Kommando [Optionen] [Parameter] Dateiname(n)

Regeln für Kommandosyntax:


 Trennzeichen mit Leerzeichen!
 Optionen, Parameter (Argumente), Dateinamen sind optional
 GROSS/Kleinschreibung beachten!!!

2
WS15/16

I. Dateisysteme in LINUX
Eigenschaften von Dateinamen und Verzeichnissen
 unterschiedliche Groß- und Kleinschreibung (ist erlaubt muss nur beachtet werden)
 max. 255 Zeichen lang
 .Dateiname.txt -> dot files = versteckte Datei
 !!! Verboten: Leerzeichen, Tabulator, Zeilenende, *,?,“,’,`, /, Umlaute, Sonderzeichen !!!

Anordnung der Dateisysteme als Verzeichnisbaum


-
Baumförmige Verzeichnisse (Verzeichnisbaum) mit untergeordneten Kind- bzw.
übergeordneten Elternverzeichnis
- Es gibt keine Laufwerke
Aufbau:
- /  Wurzel des Verzeichnisbaumes (Rootverzeichnis) absoluter Pfad
- .  Abk. für akt. (Arbeits-)Verzeichnis
- ..  Abk. für übergeordnetes (Eltern-)Verzeichnis relativer Pfad

Benennung für Dateinamen

Reguläre Ausdrücke durch Platzhalter (Wildcards, Jokerzeichen)


- *  Joker (Platzhalter) steht für eine
 dat.* beliebige Zeichenfolge (Folge)
- ?  Joker steht für genau ein beliebiges
 bild?.gif Zeichen bzw. Stelle (Stelle)

- [...]  Joker steht für genau eines der in den


 [aAbB], [a-z],prog[123].txt Klammern eingeschlossenen Zeichen
-> Auswahl eines der (Auswahl)
eingeschlossenen Zeichen

- !  Joker steht für genau ein Zeichen,


 [!aA] welches nicht in der Klammer enthalten
-> alle anderen Zeichen, außer a
oder A (Negation)

3
WS15/16

Benennung/Kennzeichnung einer Datei mit Pfadnamen

- pwd  Anzeige des akt. Pfadverzeichnisses


- /  absoluter Pfad: Pfadbeginn mit Wurzelzeichen (root directory)
 /usr/bin/opera
- ../  relativer Pfad: Pfadangabe ins übergeordnete Unterverzeichnis
(eine Ebene nach oben und eine nach unten)

Wechsel in das aktuelle (Arbeits)verzeichnis (working directory)


- pwd  Anzeige des akt. Pfadverzeichnisses (Kontrolle)
- cd (oder cd ~)  Wechsel von akt. Verzeichnis ins login-/Home-Verzeichnis
(change directory)
- cd verzeichnis  Wechsel mit relative Verzeichnisangabe ins aktuelle
(Unter)-Verzeichnis
 cd sub1  Wechsel ins Unterverzeichnis sub1
 pwd  Kontrolle des akt. Pfadverzeichnisses
 ls
 cd sub1a  Wechsel zu sub1a
- cd /verzeichnis  Wechsel mit absolute Verzeichnisangabe ins Wurzelverzeichnis
(root directory)
 cd /etc  Wechsel mit absolute Pfadangabe ins Unterverzeichnis /etc
 cd ../../sub2  Wechsel über relative Pfadangabe ins übergeordnete
Unterverzeichnis sub2
- cd ..  Wechsel ins übergeordnete Verzeichnis

Kontrolle:
- pwd  Anzeige des akt. Pfadverzeichnisses

Kopieren von Dateien (dupliziert Quelldatei (von = 1.Datei) -> Zieldatei (nach = 2.Datei)

1. Möglichkeit:
- cp (copy)  Kopieren von Dateien und Verz. (von Quelle nach Ziel)

- cp [option] quelle ziel  Kopieren von Dateien und Verzeichnisse (Quelle


cp quelldatei zieldatei ins Ziel) Vorr: gültige Pfadnamen !
cp quelldatei zieverzeichnis Sollte die Zieldatei bereits existieren, so wird sie i.allg.
cp quelle N zielverzeichnis (ohne Rückfrage!) beim Kopieren ohne Rückfrage
überschrieben!
 cp ../obst .  Kopiere Datei obst aus übergeordnetem Verzeichnis ins
aktuelle Verzeichnis (.)
 cp ../obst frucht  Kopiere Datei obst ins aktuelle Verzeichnis und gib der
Kopie den Namen frucht
 cp frucht fruechte  Kopiere die Datei frucht innerhalb des aktuellen
Verzeichnisses, die Kopie erhält den Namen fruechte
 cp obst sub1  Datei obst ins Unterverzeichnis sub1 kopieren

Mit Rückfrage vor Überschreibung:


- cp –i quelle ziel  !Fragt bevor die Datei überschrieben werden soll!
 cp –a  Archiv, Quelle darf auch Verzeichnis sein, behält Attribute
 cp –R  Kopiert Verzeichnis rekursiv
 cp –u  update, überschreibt nur mit neueren Dateien

- Kontrolle: ls –a, more quell/zieldatei

4
WS15/16

Verschieben/Umbenennen von Dateien (Quelldatei =1.Datei nach Kopieren gelöscht)

2. Möglichkeit:
- mv (move)  Verschieben/Umbenennen von Dateien

- mv [option] quelle ziel  ähnlich wie cp, allerdings wird die Quelldatei nach dem
- mv [option] quelleN zielverz. Kopieren gelöscht, handelt sich also eigentlich um ein
Verschieben mit der Möglichkeit der Umbenennung
der Datei
Sollte die Zieldatei bereits existieren, so wird sie i.allg.
(ohne Rückfrage!) beim Kopieren überschrieben!
 mv frucht garten  Kopiere die Datei frucht innerhalb des aktuellen
Verzeichnisses, die Kopie heißt garten und das Original
frucht wird gelöscht
 mv fruechte garten ../sub1  2 Dateien nach ../sub1 verschieben
 mv ../obst .  Datei obst vom übergeordneten Verzeichnis ins aktuelle
Verzeichnis verschieben
 ls –aF  Kontrolle: Datei obst im akt. Verz.
 mv sub2 sub3  Unterverzeichnis sub2 k omplett nach sub3 verschieben

Mit Rückfrage vor Überschreiben:


- mv –i quelle ziel  interactive, vor Überschreiben nachfragen
j führt zum Löschen, n führt zum Kommando-Abbruch
 mv –v  verbose, Aktionen anzeigen
 mv –u  update, überschreibt nur neuere Dateien
 mv –f  force, Überschreiben, nie fragen

- Kontrolle: ls –a, ls –aF, more quell/zieldatei

Löschen von Dateien

- rm (remove)  Löschen von Dateien (keine Rückfrage!!!)


- rm dateiname:  Löschen der Datei
 rm fruechte  Löschen der Datei fruechte (standardmäßig ohne
Rückfrage), da keine weiteren Links zu dieser Datei
existieren, wird sie echt gelöscht

Mit Rückfrage vor Löschen (sichere Variante):


- rm [-option] datei
 rm -i garten  Löschen der Datei garten mit Rückfrage (Option –i)
(Vorsicht: bei Joker * in Dateinamen bei
Löschkommandos)
 rm: garten entfernen?_  j führt zum Löschen, n führt zum Kommando-Abbruch
 ls –a  Anzeige/Kontrolle aller Dateien (inkl. dot-files)
 rm -r sub3  Löschen des Verzeichnisses sub3 inklusive aller
enthaltenen Dateien (ohne Rückfrage)
 rm –rf sub3  Löschen eines kompletten Verzeichnisses inkl. sämtlicher
Dateien und Unterverzeichnisse

Ein leeres Verzeichnis kann auch mittels „rmdir“-Kommando gelöscht werden.

- rmdir verzeichnis(leeres)  Löschen eines leeren Verzeichnisses (siehe oben)

- Kontrolle: ls –a, ls -aF

5
WS15/16

Anlegen/Erstellung und Löschen von (leeren) (Unter)-Verzeichnissennamen


- mkdir (make directory)
- mkdir verzeichnisname  Anlegen im akt.Verz. ein (Unter)-Verzeichnisses (make directory)
 mkdir sub1  Anlegen im akt. Verz. ein (Unter)-Verzeichnisses sub1
 mkdir sub2 sub3  Anlegen im akt. Verz. 2 weitere (Unter)-Verzeichnisse sub2 sub3
 mkdir /home/user/Documents -> Anlegen im gesamten Verzeichnis /home/user das
Verzeichnis Documents (unabh. in welchem Verzeichnis man sich gerade befindet.)
- rmdir (remove directory)
- rmdir verzeichnisname  Löschen eines leeren (Unter)-Verzeichnisses (remove directory)
 rmdir sub3  Löschen eines leeren (Unter)-Verzeichnisses sub3

Schnelles Erzeugen kleiner Textdateien (ohne Editor!)

- cat >dateiname  Anlegen einer kleinen Textdatei mittels Ein/Ausgabe-


Umlenkung der Standardausgabe in die Datei
dateiname, falls die Datei farben schon existiert, wird
sie überschrieben!
beliebiger Text
CTRL-D
- ls –l (ls –al) Kontrolle: Existenz der Datei dateinamen
- cat dateiname Kontrolle: Anzeige des Dateiinhalts dateiname

Kontrolle:
- ls  Kontrolle auf Existenz der Protokolldatei
- cat protokoll  Anzeige des Inhalts der Protokolldatei

Anlegen einer Protokoll-Datei (Speicherung aller Kommando/Anzeigeein-und


ausgaben in Linux)

- script protokoll  Anlegen einer Protokolldatei mit dem Namen


beliebiger Text „protokoll“, alle nun folgenden Ein- und Ausgaben
CTRL-D werden in dieser Datei gespeichert, Beendigung der
Protokollierung mittels exit bzw. CTRL-D
Kontrolle:
- ls  Kontrolle auf Existenz der Protok olldatei
- cat protok oll  Anzeige des Inhalts der Protok olldatei
- rm protok oll  Löschen der Protok olldatei

6
WS15/16

Ein-/Ausgabe-Umleitung (I/O redirection)


Achtung: Mehrere E/A Umleitungen können kombiniert werden

Jedes Programm (Kommando, Prozess) besitzt 3 Standardkanäle zur Ein-/Ausgabe.


- Ein/Ausgabe-Umleitung: Diese Standardkanäle können in ihrer Zuordnung zu E/A Geräten
verändert bzw. umgelenkt werden.

- Umleitung der 3 Standardkanäle zur:


 Standardeingabe stdin
 Standardausgabe stdout
 Fehlerausgabe stderr

1. Fall Eingabeumleitung (stdin)


- Kommando(kdo)< Datei(file)  die Standardeingabe des Kommandos wird aus
AUS einer Datei file gelesen (auch kdo < file)
 sort < wortliste  die Standardeingabe des Kommandos sort wird
aus der Datei wortliste gelesen

2. Fall Ausgabeumleitung (stdout)


a) Kommando(kdo) >Datei(file)  die Standardausgabe des Kommandos wird in
IN eine Datei file umgeleitet (file wird dabei immer
neu angelegt!) (auch kdo > datei)
 ls –l >list.txt  die Standardausgabe des Kommandos ls –l wird in
eine Datei list.txt umgeleitet
 ls -i >inhaltsverz  Umlenkung der Ausgabe des Kommandos ls -i in
die Datei inhaltsverz

- cat >dateiname  Umlenkung der Standartausgabe in die Datei


beliebiger Text
CTRL-D
 cat >farben  Umlenkung der Standardausgabe des Kommandos
rot cat in die Datei farben
blau (falls die Datei farben schon existiert, wird
sie hierbei überschrieben)
CTRL-D  alle Eingaben werden in die Datei farben
übertragen

- sort dateiname >sortierte datei  Umlenkung der Standartausgabe des


Kommandos sort in die neue sortierte Datei
 sort farben >farben.sortiert  Umlenkung der Standardausgabe des Kommandos
sort in die Datei farben.sortiert

b) Kommando(kdo) >>Dateien(file)  die Standardausgabe des Kommandos wird in


IN eine Datei file umgeleitet und dort angefügt
(Kommando der Datei file angefügt) (auch >>
Datei)
 ls –l >>list.txt  die Standardausgabe des Kommandos ls –l wird in
eine Datei list.txt umgeleitet und dort angefügt
 ls -C >>inhaltsverz  weitere Ausgabe anfügen

- cat >>dateiname  Umlenkung der Standartausgabe in die Datei,


beliebiger Text dabei werden die Eingaben an die existierende
CTRL-D Datei angefügt

 cat >>farben  Umlenkung der folgenden Eingaben in die Datei farben,


gelb alle Eingaben werden hierbei an die existierende Datei
weiß angefügt
CTRL-D

7
WS15/16

Weitere Umleitungsbeispiele:

- ls –option >/>>dateiname  Umlenkung der Standartausgabe des ls-Kommandos in die


Datei/weitere Ausgabe anfügen
- ls –al >liste.txt 2>errorlist  mehrere E/A-Umleitungen können miteinander kombiniert
werden
- kommando(kdo) &>datei(file)
= kdo >file 2>&1  Umlenkung des Standardausgabe- und
Fehlerausgabekanals in dieselbe Datei

- sort <<ENDE  HERE-Skript mit dem Ende-Wort „ENDE“, alle nun


>bbbb folgenden Zeilen n werden von stdin gelesen, bis eine
>aaaa Zeile gefunden wird, die exakt mit dem Ende -Wort
>cccc übereinstimmt, diese Daten werden dem Kommando
>ENDE (hier: sort) als Eingabe zugeführt und von ihm
verarbeitet (hier: sortiert anzeigen)

3. Fall Fehlerausgabekanalumleitung (stderr)


- Kommando 2>Datei(errorfile)  die Fehlerausgabe des Kommandos wird in
IN eine Datei errorfile umgeleitet

 ls –l 2> fehler.txt  die Fehlerausgabe des Kommandos ls –l


wird in eine Datei fehler.txt (errorfile) umgeleitet

 ls -J 2>fehlermeld  Umlenkung der Standard-Fehlerausgabe in die Datei


fehlermeld, diesmal erscheint keine Fehlermeldung auf dem
Bildschirm ( Fehlermeldung wegen falscher Option J)

- Kontrolle: pwd, cat datei

8
WS15/16

Anzeige (Auflistung) von Inhalt der Dateiverzeichnisse

- ls  Anzeige/Auflistung des Verzeichnisinhalts ohne


versteckte Dateien, Optionen, Parameter
Standard: alphabetisch sortiert, ohne versteckte
Dateien („dot-files“, deren Name mit einem Punkt
beginnt) und ohne Optionen/Parameter (Argumente)
 ls / #mit LZ!  Anzeige des Inhalts des „Wurzel-Verzeichnisses“ („root“-
Verzeichnis)
 ls dateiname  Anzeige des Inhalts des Verzeichnisses „Dateiname“
 ls Desktop  Anzeige des Inhalts des Verzeichnissen „Desktop“

- ls [-option]
 ls –a (oder ls --all)  Anzeige aller Dateien (all), inklusive der „dot-files“
 ls –l  wie ls, aber Langform mit einigen zusätzlichen Infos
(z.B. Zugriffsrechte, Besitzer, Zeichen, Änderungsdatum)
 ls –long  Anzeige aller Dateiverzeichnisse in Langform ohne
Besitzerangabe
 ls –a –l  Anzeige aller Dateienverzeichnisse und in Langform mit
zusätzl.Infos (z.B. Zugriffsrechte und versteckte Dateien)
 ls –al  wie siehe Kommando: ls –a –l
 ls –a  Anzeige aller Dateiverzeichnisse inkl. .versteckter Dateien
 ls –F  wie ls, aber Verzeichnisse und ausführbare Dateien hinter
dem Namen markiert (ohne versteckte Dateienanzeige)
 ls –aF  Anzeige aller Dateiverzeichnisse inkl. Markierung von
Unterverzeichnisverweise /
 ls –t  wie ls, aber nach Datum der letzten Modifikation(Änderung)
geordnet

- ls [option] [parameter]
 ls –al mydir  Anzeige aller Dateiverzeichnisse mit zusätzl. Infos und
dem Argument des Verzeichnisses „mydir“

Anzeige (Ausgabe) von Dateiinhalt (reiner Textdateien im ASCII-Format)

 Dateieninhalt nacheinander ausgeben: cat


 Dateieninhalt seitenweise ausgeben: more, less
 Bestimmte Anfangszeilen einer Datei ausgeben: head
 Bestimmte Endzeilen einer Datei ausgeben: tail

a) Seitenweise Ausgabe (Anzeige) des Dateiinhalts:

- more dateiname (z.B. /etc/profile)  seitenweise Anzeige des Dateiinhalts


/etc/profile (diese Datei ist eine Startdatei der
Bourne Shell)
 Fortsetzungsmöglichkeiten:
Leertaste -> nächste Seite anzeigen
Enter -> nächste Zeile
h –> Hilfe
q, CTRL-C –> Abbruch

9
WS15/16

 more /etc/passwd  seitenweise Anzeige des Dateiinhalts


/etc/passwd
- less dateiname (z.B. /etc/profile)  entspricht unter Linux dem Kommando more ,
allerdings Ansicht in einem extra Fenster, [q]
Beenden

- pg /etc/passwd (evtl. nicht in Linux)  seitenweise Anzeige des Dateiinhalts, nach


jeder Seitenausgabe besteht die Möglichkeit
am unteren Bildschirmrand (hinter :)
"Zwischenbefehle" einzugeben, z.B.
Enter eine Seite weiter l eine Zeile weiter
+n n Seiten weiter +nl n Zeilen weiter
-n n Seiten zurück -nl n Zeilen zurück
h Anzeige der Liste der "Zwischenbefehle"

b) Nacheinander Ausgabe (Anzeige) des Dateiinhalts:

- cat  Anzeige/Ausgabe von Dateiinhalt

- cat dateiname (z.B. /etc/profile):  fortlaufende (verkettete) Anzeige des


Dateiinhalts von /etc/profile
Anzeige unterbrechen CTRL-S (evtl. nicht in Linux)
Anzeige fortsetzen CTRL-Q (evtl. nicht in Linux)
 cat /etc/passwd /etc/profile  Anzeige von 2 verschiedenen Dateien
nacheinander

 cat datei1  Anzeige des Dateiinhalts von datei1


 cat datei4 datei5 > datei7  fortlaufende Anzeige des Dateinhalts von datei4
datei5 und die Ausgabe(Ergebnis) umgeleitet in
datei7
 cat >> datei7  Fügt einzugebenden Text an das Ende von datei7
hinzu

c) Bestimmte Zeilenausgabe der Anzeige des Dateiinhalts:


- head dateiname (z.B /etc/profile)  Ausgabe der ersten 10 Anfangszeilen
(Standard) der Datei
- head -3 /etc/profile  Ausgabe der ersten 3 Anfangszeilen der Datei
- tail dateiname (z.B /etc/profile)  Ausgabe der letzten 10 Endzeilen (Standard)
der Datei

Anzeige von Inhalt zu Dateiverzeichnissen

Wichtigste Infos für Datei (Langform):


- Dateiart (1.Zeichen jeder Zeile vor Infos)
- Zugriffsrechte (-,r,w,x)
- Anzahl Hardlinks
- Besitzer/Nutzer
- Nutzergruppe (staff, user, group, all, others)
- Größe (Anzahl der Zeichen)
- Datum mit Zeitstempel
- Dateiname

10
WS15/16

Kennzeichnung der Dateiarten (Linux)


Anzeige/Kontrolle mittels: ls –l, ls –al

- rw- r-- r--

- [-] gewöhnliche Datei (regulary files): Anwendungsdaten, Archiv, ausführbare Programme


- [d] (Unter-)Verzeichnis (directory): Ordnerstruktur mit Ober- und Unterverzeichnisdateien
- [b,c] Geräte(beschreibungs-)datei (special files)
 [b] direkter Zugriff auf Gerätedatei, blockorientiert
 [c] direkter Zugriff auf Gerätedatei, zeichenorientiert
- [l] symbolischer (Soft)-Link: Verweis auf andere Datei (Bem.: Hardlink s (k eine eigene
Dateien, sondern nur weitere Synonyme Namen für bestehende Datei mittels Verweis)
- [p] named Pipe: Datenröhre zw. 2 Anwendungen/Kommandos nach dem FIFO Prinzip (First
In First Out)
- [s] (lokaler) Socket: Kommunikationsschnittstelle zum bidirektionalen Datenaustausch (via
Netzwerkverbindung etc.)

Zugriffsrechte zu Dateien bzw. Verzeichnissen


Anzeige/Kontrolle mittels: id  Anzeige des UID (Nutzeridentifikator) + GID(Gruppenidentifikator)

- Zugriffsrechte für Benutzerklassen:


 u,g,o,a können als Benutzerklassen kombiniert werden: go, ugo, au..

 user = Dateibesitzer (ich)


 group = Benutzergruppe (alle Mitglieder außer mich)
 others = alle restlich anderen Benutzer (Sonstige), außer ich und meine Mitglieder
 all = alle Benutzerklassen

- Typen der Zugriffsrechte: (Eigenschaften)


 read = Lesen
 write = Schreiben
 execute = Ausführen/Starten
 + 3mal Spezial Attribute: Ausführungsrechte s,g,t für Besitzer (suid = s), Gruppe
(sgid = g), Sonstige (sticky = t)

- Erweiterung der Ausführungsrechte (höheren Berechtigung der


Ausführungsrechte für Dateien bzw. Verzeichnisse:

- suid/SUID = „set UID on execution“


  Besitzer hat Ausführungsrecht: Programm läuft effektiv mit Besitzerrechten dieser
Programmdatei, d.h. in der Laufzeit des Prog. bekommt Besitzer eine höhere
Berechtigung des Ausführungsrechts
- sgid/SGID = „set GID on execution“
  Gruppe hat Ausführungsrecht: Programm läuft effektiv mit den Gruppenrechten
 dieser Programmdatei
- sticky/Sticky = „save text image“
  für Datei: das Prog. verbleibt nach Beendigung im Speicher (veraltet)
  für Verzeichnis: Umbenennung/Entfernung der Dateien im Verzeichnis nur vom
 Besitzer der Datei, vom Besitzer des Verzeichnisses (nicht durch Gruppe, Sonstige)
oder Admin (Superuser)

11
WS15/16

Eigenschaften der Zugriffsrechte für Dateien (Lese-;Schreib-;Ausführungsrecht)

- r: Lesen des Dateiinhalts (weiter erlaubt: anzeigen, kopieren...)


- w: Schreiben/Änderung des Dateiinhalts (weiter erlaubt: überschreiben, erw., verkürzen auf
Länge null)
- x: Ausführung/Starten als Programm/Anwendung, aber keine Objekte, Bild, Datei....

Eigenschaften der Zugriffsrechte für Verzeichnisse

- r: Lesen des Verzeichnisinhalts, d.h. Anzeige der Namen/Eigenschaften der enthaltenen


Dateien
- w: Schreiben/Änderung des Verzeichnisinhalts, d.h. Neuanlegung, Umbenennung oder
Löschung der Dateien (Achtung: Löschen bedeutet nicht vollkommen weg (entfernen))
- x: Betreten (nicht ausführen/starten) des Verzeichnisinhalts, d.h. es darf nur in einem
Pfadnamen verwendet, die enthaltenen Dateien benutzt werden

chmod – Änderung/Hinzufügen der Zugriffsrechte für Datei und Verzeichnis

- chmod Zugriffsrechteänderung für Datei/Verz.


Kontrolle für Datei: ls –l dateiname durch symbolische oder nummerische
für Verz.: ls –ld . Angabe (Notation)
Achtung: chmod wirkt nur auf bereits vorhandene Dateien, d.h. bereits vorhandene
Dateien können nur durch chmod geändert werden! Hierbei wird von keinen Rechten
ausgegangen, durch chmod Rechte gegeben!

a) numerische Angabe der neu zusetzende Rechte


Bem.: 3/4 Ok talstellen sgt rwx rwx rwx

- chmod numerischer wert dateiname  Rechte für Dateiname ändern (absolut


numerische Angabe)
 chmod 666 susi  Rechte für susi ändern, nun: rw- rw- rw-
 ls –l susi  Anzeige der Rechte der neue Datei susi
 chmod 755 xyz.sh abc.sh  Rechte für xyz.sh, abc.sh ändern nun: rwx
r-x r-x
 chmod 4711 passwd  Rechte für passwd nun: s-- rwx --x --x , mit
erw. gesonderten Ausführungsrechten

- chmod numerischer wert verzeichnis  Rechte für Verzeichnis ändern


 chmod 711 .  Rechte für aktuelles Verzeichnis (.) ändern
nun: rwx --x –x
 ls –ld .  Anzeige der Rechte für akt. Verzeichnis
 chmod 700 ..  Rechte für übergeordnetes Verz. (..)
ändern (relativ numerische Pfadangabe)
nun: rwx --- ---
 chmod 722 ./a/a1/dat.x  Rechte für aktuelle Verz., nun: rwx -w- -w-

12
WS15/16

b) symbolische Angabe der neu zusetzende Rechte


Bem.: Benutzerk lassen u=user, g=group, o=others,a=all, sgt
Zugriffsrechtetypen: -,r,w,x, X= x nur für Verz.
Operationen: + hinzufügen, - entziehen, = setzen (neue Rechte anlegen)

- chmod symbolische angabe dateiname  Rechte ändern (symbolische Angabe)


 ls –l yxz.sh  Anzeige der akt. Rechte für Datei yxz.sh:
rw- r-- r--
 chmod a+x yxz.sh  Ausführungsrecht x wird für yxz.sh für
alle Benutzerklassen hinzugefügt
 ls –l yxz.sh  Anzeige der akt. Rechte für Datei yxz.sh,
nun: rwx r-x r-x
 chmod o-rw susi  Lese-/Schreibrecht für „others“
entziehen, nun: rw- rw- ---
 ls –l susi  Anzeige der Rechte für susi: nun: rw- r-- r--

- chmod symbolische angabe verzeichnis


 chmod ugo+r .  im akt.Verzeichnis für u=Besitzer,
g=Gruppe und o=Sonstige, Leserecht +r
hinzufügen
- Kontrolle/Orientierung: cd, pwd, ls –l

- Überschreibung (Neusetzung) der vorhandenen Zugriffsrechte durch Zuweisung =:

 chmod u=rwx,g=rw,o= dat.txt  Rechte werden für dat.txt u=rwx, g=rw, o=


Kombination: chmod u=rwx,go= dat.txt neu gesetzt, nun: rwx rw- --- (o=keine
Rechte)
 ls –l dat.txt  Anzeige der akt. Rechte für Datei dat.txt:
rwx rw- ---

umask – Änderung/Entziehen der Anfangsrechte mittels benutzereigene


Dateierzeugungsmaske (eingeschränkte Rechte)

- Problem: Eine neu angelegte Datei erhält automatisch ihre Anfangsrechte


(Standardrechte): rw- r-- r-- (alle Freigaben der Rechte nicht sicher! -> umask
eingeschränkte Standardrechte ) Hierbei wird von allen Rechten ausgegangen und
durch umask Rechte entzogen)
- umask (user file creation mask)  Maske bestimmt den Zugriffsmodus, d.h
welche Anfangsrechte der Datei nicht
gewährt werden (eingeschränkte
Standardrechte) noch bevor sie
existiert/öffentlich zugänglich
 z.B. Standardrechte einer Datei: rwx rwx rwx -> Maske setzen: umask 023 (keine
Rechte für 2=w, für 3=w,x für diese Stellen) -> rwx r-x r-- (Standardrechte sind
nun mehr eingeschränkte Rechte, mit umask werden Rechte entzogen)

13
WS15/16

- umask ohne Parameter  Anzeige/Abfrage der akt.


Dateierzeugungsmaske (z.B. 0022 oder 0027
Werte merken!!)

- umask wert  neue Maske setzen mit neuen


eingeschränkten Anfangsrechten
 ls –l susi  Anzeige der akt. Rechte der Datei: rwx -w- -w-
(022)
 umask 066  neue Maske (066) setzen
 umask 022  Dateierzeugungsmaske auf alten Wert rücksetzen:
(Anfangsrechte rückgesetzt)
 umask 0032  Rechteentzug für Schreiben und Ausführen der
Gruppe, den anderen das Schreibrecht.
Kontrolle: ls-l datei

- Merke: niedrige Oktalzahl = weniger Anfangs(Standard)rechte, hohe Oktalzahl = viele


Anfangsrechte, umask 0 = alle Zugriffsrechte vorhanden (bei chmod 0= keine
Zugriffsrechte)

- Achtung: chmod wirkt nur auf bereits vorhandene Dateien! umask wirkt nur unmittelbar
auf neu erzeugte Dateien aus, d.h. nicht auf bereits schon vorhandene Dateien/Verz. ,
ansonsten nur mit chmod
- umask prüfen oder ändern 2.umask ändern 3. Neuanlegung von Datei/verz. 4. Anzeige
der Rechte der neuen Datei/Verz.

Änderung des Eigentümer/Besitzers einer Datei (nur durch Systemverwalter!)

- chown benutzer datei  Änderung des Besitzers einer Datei


 chown owner[.group] datei(en)

Änderung der Zeitmarkierung (Zugriffs-u.Änderungszeit) einer Datei

14
WS15/16

- touch datei  Änderungsdatum aktualisieren oder setzen


bzw. eine neue (leere) Datei anlegen (ändert
Zeitstempel: Zugriffs-u. Änderungszeit einer
Datei)
 touch dat.txt  Zeitstempel wird aktualisiert oder neu gesetzt von
der Datei dat.txt

Anlegen von Verweislinks (Hardlink) auf bestehende Datei


(nur für Dateien, innerhalb eines Dateisystems)

- Hardlinks [ln]: Erstellung von Verweislinks (Verknüpfung) mittels weiterer synonymer (Alias)-
Dateinamen für die bereits bestehende Datei, d.h. es gibt nun also ein direkten Link und
weitere Alias-Link(s) zu dieser bestehenden Datei

- ln  Erstellung/Vergebung von weiteren Alias-Namen für


Datei als Verweislinks (Verknüpfung) nur innerhalb
eines Dateisystems

a) (Hard-)Links innerhalb des Dateisystems auf Datei:

- ln dateiname linkname  Hard-Link als Aliasname „linkname“ auf die


bestehende Datei „dateiname“ anlegen
- aus Vorlesung (mit Dateityp): ln lebenslauf.odt texte/lebenslauf.odt

 ls –al  Anzeige aller Dateiverzeichnisse inkl. zusätzl. Infos


 ln susi susi2  Hard-Link als Aliasname „susi2“ auf bestehende
Dateiname „susi“ anlegen
 ls –al  Kontrolle: Vergleich mit vorheriger Anzeige (siehe oben)
 cat linkname  Anzeige von Dateiinhalt von bestehende Datei (Linkname
nur ein „Alias“Link auf Dateiname, der Inhalt der Datei bleibt
unverändert )

b) (Hard-)Links innerhalb von Verzeichnissen auf Datei: (nur für Dateien)

 ln -f ../susi .  im aktuellen relativen Verzeichnispfad wird ein Link auf


Datei susi im übergeordneten Verzeichnis angelegt
(Option –f oder –force: vorhandene Ziele entfernen,
damit wird die Warnung, dass susi schon existiert
ignoriert)

Anlegen von Verweislinks (Softlink) auf bestehende Datei oder Verzeichnis


(für Datei und Verzeichnisse, auch über das Dateisystemgrenze hinaus)

Symbolische Verknüpfung (Softlink): (für Dateien und Verzeichnisse)

- ln –s  Link (Verweis) auf bestehende Datei anlegen, d.h.


Softlink setzen

- ln –s dateiname linkname  Soft-Link (Verweis) als Aliasname „linkname“ auf die


bestehende Datei „dateiname“ anlegen

- Kontrolle der Anzeige: ls -l, ls –al (Hardlinkanzahl werte anzeigen)


ls –aF, ls –a,

15
WS15/16

Inodes

- Inode: interne Beschreibung einer Datei (Metainformationen) in Linux/UNIX; jede Inode


ist durch eine Nummer identifiziert. Durch die Inoden-Datenstruktur wird nicht mehr zwischen
Geräten und regulären Dateien unterschieden hier gilt nun alles als Datei.

- ls -ai  Anzeige mit Inode-Nummer für alle Dateien


- ls -di  Anzeige der Inode-Nummer für das akt. Verzeichnis

- Kontrolle/Anzeige: cd, ls –l, ls -al

Dateisystem von Speichergerät (Dateisystem-Image)

Verwendung von special files (Gerätedateien, im Verz. /dev)


Direkter Zugriff auf Speichergerät über Gerätedateien (Umgehung des Dateisystems) , block - oder
zeichenorientiert

- Anwendung: Abbild des Dateisystems von Speichergerät „Dateisystem-Image“, Montieren


eines Dateisystems (mount)

Kopieren von Daten aus der Gerätedatei (special files) in Datei


 cp /dev/tty farben  Kopiere Daten aus Gerätedatei /dev/tty
(=Terminal) in die Datei farben
Dateneingabe via Tastatur:
rot
lila
CTRL-D [Beenden]
 ls –a  Kontrolle: Anzeige aller Dateiverzeichnisse
 cat farben  Kontrolle: Anzeige des Dateiinhalts von Datei
farben
 cp farben /dev/tty  Kopiere Daten der Datei farben in die
Gerätedatei /dev/tty (=Bildschirm)

- Kontrolle: ls –a, cat datei

Einfügen von Dateisystemen (Montieren) - mount

- mount  Montierung (eingebunden) von Datenträger, Laufwerke,


Partitionen ins Dateisystem (nur durch den Admin), das
eingefügte Dateisystem ist durch Wurzelverzeichnis / aufrufbar ->
Anzeige akt. gemounteter Dateisysteme

- mount Laufwerk Verzeichnis  bindet Laufwerk (Datenträger, Partition..)


ins Verzeichnis ein
 mount /dev/sda1 /media/dir  bindet Laufwerk /dev/sda1 ins Verzeichnis
/media/dir ein

16
WS15/16

Lösen von Dateisystemen (Demontieren) –umount

- umount  Lösen der montierten (eingebundenen) Datenträger,


Laufwerke,Partitionen aus Dateisystem (nur durch Admin)
 umount /dev/sda1
 umount /media/dir
 in das Verzeichnis /media/dir eingebundenes Laufwerk /dev/sda1 kann sowohl
durch Angabe des Laufwerknamens als auch durch Angabe des
Verzeichnisnamens ausgehängt werden

Dateien lokalisieren/identifizieren

find – Dateien lokalisieren


- find verzeichnis bedingung –print  durchsucht das angegebene Verzeichnis
inklusive aller seiner Unterverzeichnisse nach
Dateien, die bestimmten Bedingungen genügen
-> unter Linux kann man ggf. –print weglassen
 find . -type f -print  Suche im aktuellen Verzeichnis nach Dateien Typ f
(=reguläre Dateien)
 find . -type d -print  Suche im aktuellen Verzeichnis nach Dateien vom
Typ d (=Verzeichnis)
 find . -name susi -print  Suche im aktuellen Verzeichnis nach Dateien mit
dem Namen susi
 find .. -name susi –print  Suche im übergeordneten Verzeichnis nach
Dateien mit Name susi
file – Dateien identifizieren
 file dateiname  ermittelt die Art bzw. den Typ einer Datei
 file farben  Typ der Datei farben wird ermittelt

17
WS15/16

Pipes und Filter

Kleines Toolgeflecht mit einfachen Funktionen (Werkzeug-Kasten), lassen sich zu komplexeren


Tools kombinieren.

- Filter: Programme lesen aus Standardeingabe stdin und schreiben nach Standardausgabe
stdout z.B.: more, less, most, grep, find, tee, sort
- Arbeitsweise für Filter-Programme: Wird eine Datei als Parameter angegeben, so wird diese
Datei anstelle der Standardeingabe benutzt!

Filtertypen:
more, less, most  Pager zur zeilen-/seitenweise Anzeige
von Texten
cat  Leitet Eingabe nach Ausgabe
grep  Sucht nach Zeichen(folgen), Mustern
find  Sucht Dateien
sort  Sortiert Zeilen in einer Textdatei

 Leitet Eingabe nach Ausgabe und in


tee
Datei weiter (T-Stück)
head  Leitet nur erste Zeile(n) weiter
tail  Leitet nur letzte Zeile(n) weiter
tr  Setzt zeichenweise entsprechend
einer Tabelle um(translate)
uniq  Leitet mehrfach auftretende Zeilen nur
einfach weiter

wc  Zählt Zeichen,Wörter,Zeilen
sed  Stream-Editor,sucht und ersetzt z.B.
awk Wörter
 Programmiersprache zur Verarbeitung
von Zeichenketten

- Pipes (=Datenröhre zwischen 2 Filter/Programmen): Methode zum Verknüpfen der Filter.


Pipes verbinden Standardausgabe stdout von filter1 mit Standardeingabe stdin von filter2:
filter1 I filter2

Tools zur Bearbeitung von Textdateien

Pipes mit Filterverknüpfung

- 1. Kommando | 2. Kommando [-option] datei | .. Pipe aus zwei oder mehreren
Kommandos und Optionen/Parameter
 ls | sort –r  Pipe aus ls und sort mit Ausgabe auf dem
Bildschirm
 ls | sort -r >inhaltsverz  Pipe aus ls und sort mit EA-Umlenkung der
Standardausgabe in die Datei inhaltsverz
 ls | wc –w  liefert Anzahl der Dateien im aktuellen Verzeichnis
 ls | tee inhaltsverz | wc –w  wie eben, aber Ausgabe von ls wird zusätzlich in
die Datei inhaltsverz kopiert (tee als „T-Stück“ in
der Pipe)
- Kontrolle: cat datei

18
WS15/16

Anzahl des Datei/Verzeichnisinhalts (Zeilen, Wörter und Zeichen)


einer (ASCII-)Textdatei

- wc  Anzahl des Inhalts (Zeilen, Wörter, Zeichen) im


beliebige Texteingabe (ENTER) nachfolgend eingegebenen Text
CTRL-D [Beenden CTRL-D]
- wc [-option] dateiname  Anzahl des Inhalts ((1.Zeilen, 2.Wörter,
3.Zeichen) der Datei /etc/profile (Pfadangabe)
 wc lager  Anzahl des Inhalts (Zeilen Worte und Zeichen)
in der Datei lager
 wc –w lager  Option –w: nur Worte in Datei lager zählen
 /etc/profile  Anzahl des Inhalts (Zeilen, Wörter, Bytes, Zeichen)
der Datei /etc/profile (Pfadangabe)
 wc –l /etc/profile  –l = nur Zeilenanzahl (-w = nur Wörter, -c = nur
Zeichen oder Kombination)
- ls I wc –w  Anzahl der Dateien im akt. Verzeichnis mit Anzahl
der Wörter der Dateinamen
 ls –a | wc –w  Pipe aus ls und wc: ls -a liefert Verzeichnisinhalt
aller Dateien im akt.Verzeichnis und wc zählt die
Wörter, damit liefert die Pipe die Anzahl der
Dateien im aktuellen Verzeichnis inklusive der
beiden Dateien . und ..

sort – Sortierung zeilenweise (formatierten) Text

Wichtige Optionen für den Sortierverlauf:

-f  „ignore case“ vor dem Sortieren temporär alle Klein- in Großbuchstaben


umwandeln (temporär noch vor dem eigentlichen Sortieren,d.h. am
Schluss Buchstaben entsprechen wieder dem Ursprungsinhalt, sodass
Umwandlung von Klein- und Großschreibung garnich stattfand.
-r  „reverse“: Standard-Sortierreihenfolge umkehren (absteigend)
-u  „unique“: mehrfache Zeilen mit gleichem Eintrag im Sortierbereich
eliminieren
-i  „ignore non-printing“ ignoriert nicht druckbare Zeichen
-n  Sortierung numerischer(!) Felder („Spalten“) nach arithmetischem Wert
-t TZ  es wird das angegebene Trennzeichen TZ (z.B. : ) anstelle der üblichen
Standard-Trennzeichen (Leerzeichen, Tabulator) verwendet
-k z1,z2  Eingrenzung des Sortierbereichs: vom Anfang des Feldes mit Nr. z1 bis
zum Ende des Feldes mit Nr. z2
+z1 –z1  alternativ: für Sortierung z1 Felder überspringen, bis zum Feld Nr. z2

Merke: Beachte ob numerische (-n) oder nur alphabetische Sortierung, entsprechend


kennzeichnen sonst erfolgt ggf. falsche Sortierung.

- sort [–option] dateiname  sortiert den Text der Datei zeilenweise und
alphabetisch ab dem 1. Feld
 sort lager  sortiert den Text aus Datei lager zeilenweise und
alphabetisch ab dem 1. Feld(1.Spalte)
 sort –k 2,2 lager  Sortierung erfolgt alphabetisch nur bzgl. dem 2. Feld
 sort –k 2 lager  Sortierung erfolgt alphabetisch ab dem 2. Feld
 sort +1 –2 lager  entspricht sort –k 2,2 lager
 sort –k 3,3 -n lager  „numerische“ Sortierung bzgl. dem 3. Feld
 sort –k 3,3 –n –u lager  mehrfache Zeilen mit gleichem Eintrag im Sortierbereich
eliminieren
 sort –k 3 -n -r lager  Sortierung (absteigend) ab dem 3. Feld
 ls -al | sort –k 5  Pipe zur Sortierung der ls-Ausgabe bzgl. dem 5. Feld
(„Dateigröße“)  klappt nicht
 ls -al | sort –k 5 -n  Pipe zur numerischen Sortierung der ls-Ausgabe bzgl. dem
5. Feld („Dateigröße“)  klappt

19
WS15/16

tr – Löschung oder Ersetzung einzelner Zeichen in einem Text

Die zu löschenden bzw. ersetzenden Zeichen oder Zeichenfolgen können beschrieben werden
durch:

- ein einzelnes Zeichen oder einfache Aufzählung mehrerer Zeichen, z.B. abx oder ()
- [Zei1-Zei2]  alle Zeichen zwischen Zei1 und Zei2 (inklusive Zei1 und Zei2), z.B. [3-7]
- [:Zeichenklasse:]  für Zeichenklasse kann z.B. stehen:
- [:alnum:]  alle Buchstaben und Ziffern
- [:alpha:]  alle Buchstaben
- [:blank:]  alle horizontalen LZ/TAB
- [:cntrl:]  alle Kontrollzeichen
- [:digit:]  alle Ziffern
- [:graph:]  alle druckbaren Zeichen, einschl. LZ
- [:lower:] – alle Kleinbuchstaben
- [:upper:] – alle Großbuchstaben
- [:print:]  alle druckbaren Zeichen, einschließlich LZ
- [:space:]  alle horizontalen od vertikalen LZ/TAB
- \Steuerzeichen  für spezielle Steuerzeichen zB. \012 (ENTER) = \n für Zeilenvorschub, \t
für horizontaler TAB, \v für vertikaler TAB,
- einfache Hochkomma (‘):  Umschließung in ’ ’ entwertet alle dazwischen stehenden
Sonderzeichen
- Optionen:
- -c: erstes Komplement MENGE1
- -d: Löschen Zeichen der MENGE1, nicht umwandeln
- -s: jede Eingabefolge eines wdh Zeichens, das in MENGE1 enthalten und es ersetzt

- tr '[:upper:]' '[:lower:]' <lager  Eingabetext aus Datei lager, Ersetzung aller Groß-
durch Kleinbuchstaben
- tr '[A-Z]' '[a-z]' <lager  hat die gleiche Wirkung wie oben
- tr -d '\t' <lager  Option -d für Löschen aller horizontaler Tabulatoren
aus der Datei lager
- cat lager | tr -d '\t'  gleiche Wirkung, hier als Pipe

cut - Zeichen aus einem Text herauskopieren


(Auch wenn das Kommando cut heißt, bleibt im Regelfall die Quelldatei unverändert, d.h. die
spezifizierten Zeichen werden eigentlich nicht herausgeschnitten, sondern herauskopiert)

Folgende wichtige Optionen stehen im Kommando cut zur Verfügung:

-c SN  SN steht für Spalten-Nummer innerhalb einer Zeile (1 Spalte = 1


Zeichen,1-5 5 Spalten = 5 Zeichen)  -c: nur diese Zeichen ausgeben
-f FN  FN steht für Feld-Nummer innerhalb einer Zeile (1 Feld = 1Tabellenspalte,
links und rechts begrenzt durch ein Trennzeichen z.B. LZ, TAB)  -f: nur
diese Felder ausgeben und Zeilen die keine Trennzeichen enthalten
-d TZ  TZ steht für ein anderes als das Standard-Trennzeichen (=TAB)  -d:
TRENN als Trenner statt TAB

Hinweis: Beachten Sie die "etwas andere Art" von cut bei der Interpretation der Begriffe Spalte
bzw. Feld im Vergleich zum sort-Kommando!

- cut –option dateiname  kopiert Zeichen aus der Datei heraus


 cut -c1-5 lager  kopiert die ersten 5 Zeichen(Spalten) jeder Zeile der Datei
lager
heraus
 cut -f2 lager  kopiert nur das 2. Feld jeder Zeile der Datei lager heraus
 cut -f2,3 lager >lager1  aus Datei lager das 2. und 3. Feld in lager1 kopieren

20
WS15/16

Filter als Textsuchmuster

Wichtige Optionen für Suchmuster in Textdateien:

-E  erweiterte Syntax
-c  gibt nur Anzahl der passenden Zeilen aus
-f datei  liest Muster aus Datei
-i  ignoriert Groß-/Kleinschreibung
-q  keine Ausgaben, Ende nach erstem Treffer
-F  Zeichenfolge wird als normaler Suchtext, statt regulärer Ausdruck
gewertet

(Such-)Muster können durch reguläre Ausdrücke beschrieben werden:

- alle Zeichen sind Muster für sich selbst


- Zeichen mit Sonderbedeutung müssen mit \ [Backslash] entwertet werden
- Der Punkt . passt auf ein beliebiges Zeichen
- Eine in [ ] eingeschlossene Liste von Zeichen passt auf eines der eingeschlossenen
Zeichen
- Bereiche sind möglich, Sonderformen z.B. [:alnum:] [:alpha:] [:digit:]
- Eine in [^ ] eingeschlossene Liste passt auf jedes andere Zeichen
- ^passt auf Zeilenanfang, $ passt auf Zeilenende
- \< passt auf den Wortanfang, \> passt auf das Wortende

Wichtige reguläre Ausdrücke (dahinter Wiederholungszeichen) bei grep:


- ?  höchstens einmal.
- +  ein- oder mehrfach
- *  keinmal, einmal oder mehrfach
- {n}  genau n-mal
- {n,}  mind. n-mal
- {n,m}  mind. n-mal und höchstens m-mal
- I  Alternative zw. zwei Ausdrücken

Achtung: (Such-)Muster in ’ ’ setzen, damit diese nicht durch Shell ausgewertet werden!

Bsp. für Suchmuster durch reguläre Ausdrücke


 ^[Jj] alle Zeilen, die mit J oder j beginnen
 ^B.*n\.$ alle Zeilen, die mit B beginnen und mit n. enden
 \<Liebe\> alle Zeilen, die das Wort Liebe enthalten
 \<[a-z0-9]+@[a-z0-9.]+\> Zeilen mit E-Mail-Adresse
 ^[0-9]*\.?[0-9]+$ Zeilen, die nur Zahlen oder Gleitkommazahlen enthalten
 ^RA Treffer nur wenn reg. Ausdruck RA an Zeilenanfang
 RA$ Treffer nur wenn reg. Ausdruck RA an Zeilenende steht

grep - Textmuster (in Textdateien) suchen

konstante Suchausdrücke:
- grep  Textmuster in Textdateien suchen -> sucht Treffer
- option:
- -L  nur die Namen von Dateien ausgeben, die keinen
passenden Inhalt haben
- -l  nur die Namen von Dateien mit passendem Inhalt
- -c  nur die Anzahl der passenden Zeilen pro Datei
ausgeben
Achtung: (Such-)Muster in ’ ’ setzen, damit diese nicht durch Shell ausgewertet werden!

21
WS15/16

- grep [-option] Suchausdruck dateiname  Suche alle Zeilen in der Datei, die das
Suchausdruck enthalten
 grep Block lager  Suche alle Zeilen in der Datei lager, die die
Zeichenfolge „Block“ enthalten
 grep -i block lager  Suche nach „block“, aber ohne Unterscheidung
von Groß- und Kleinbuchstaben (Option -i)
 grep -ci block lager  wie eben, aber nur Anzahl der gefundenen Zeilen
anzeigen (Option -c)
 grep 2. Lager  Versuch, alle Zeilen zu erhalten, die die Angabe
"2." enthalten  scheitert, da der Punkt hier als
regulärer Ausdruck interpretiert wird (beliebiges
Zeichen)
 grep -F 2. Lager  Option -F bewirkt, dass die Zeichenfolge "2." Nicht
als regulärer Ausdruck, sondern nur als "normaler"
Suchtext gewertet wird
 grep Meier /etc/passwd  Suche in der lokalen Passwortdatei des Systems
nach der Zeichenfolge Meier (gibt Auskunft über
alle Meiers unter den Nutzern)

Spezifizierung der Suchmuster durch regulärer Ausdrücke (Sonderzeichen), d.h. die zu einem
„Treffer“ beim Kommando grep führen:

- Punkt (.)  steht für ein beliebiges Zeichen, „trifft“ also jedes beliebige Zeichen
- Stern (*)  keine, eine oder mehrmalige Wiederholung des vor dem Stern
stehenden regulären Ausdrucks
z.B. der Ausdruck .* ersetzt eine beliebige Zeichenfolge, a* bedeutet
beliebig viele „a“ hintereinander
- \{1,\}  eine oder mehrmalige Wiederholung
- \{0,1\}  keine oder eine Wiederholung
- \{n,\}  mindestens n-malige Wiederholung
- \{n\}  n-malige Wiederholung
- \{n,m\}  n- bis m-malige Wiederholung
- []  die innerhalb der Klammern aufgeführten Zeichen
- [^ ]  nicht die in Klammern aufgeführten Zeichen
- ^RA  Treffer nur dann, wenn der reguläre Ausdruck RA am Zeilenanfang
- RA$  Treffer nur dann, wenn der reguläre Ausdruck RA am Zeilenende

- grep '^U..' datei1  Treffer, wenn reg. Ausdruck U am Zeilenanfang gefolgt von
2 beliebigen Zeichen in der Datei datei1
- grep '^[A-Z]' datei2 Treffer, wenn aufgeführte Zeichen A-Z am Zeilenanfang von
datei2
- grep '^[A-Z].*' datei3  Treffer, wenn wie oben und mit keiner, ein-mehrmaliger
wdh. beliebiger Zeichen in datei3
- grep '^[A-Z].*\.c$' datei4 wie oben , nur mit reg. Ausdruck c am Zeilenende in datei4
- grep '^[0-9A-Fa-f][0-9A-Fa-f]*$' datei5 Treffer, sucht beliebig viele Hexadezimalzahlen am
Zeilenanfang, wobei keine, eine oder mehrmalige
Wiederholung am Zeilenende erlaubt in datei5

22
WS15/16

variable Suchmuster (reguläre Ausdrücke):

- grep 'M[ae][iy]er' /etc/passwd  gesucht werden nun Einträge zu Maier, Meier,


Mayer und Meyer
- ps -efl | grep ameier  Pipe zur Anzeige von Informationen über
alle Prozesse des Benutzers mit dem
Loginnamen ameier
- ls -al | grep '^d........x'  Im von ls gelieferten Text wird jeweils am
Zeilenanfang das Zeichen d, gefolgt von 8
beliebigen Zeichen und dahinter das Zeichen x
gesucht. Dieses Muster entspricht der Suche
nach Verzeichnissen, für die der Rest der Welt
ein x-Recht hat, die anderen Rechte werden
nicht geprüft.
- ls -al | grep '^d.\{8\}x'  hat die gleiche Wirkung mit einem anderen
regulären Ausdruck

cmp, diff, comm - (Text-) Dateien vergleichen

- cmp (compare)  Vergleich zweier Textdateien Byte für Byte


- cmp dateiname 1 dateiname 2  stellt zeichenweise Unterschiede in zwei
beliebigen Dateien (nicht nur Textdateien) fest
und gibt Position (Nummer des Bytes und
Zeilennummer) an, bei der ein Unterschied
festgestellt wurde
 cmp lager lager.neu  byteweiser Vergleich

- diff  Unterschiede zw. zwei Textdateien herausstellen


- diff (-option) dateiname 1 dateiname 2  diff gibt im Ergebnis des Vergleichs
Änderungen aus, die vorgenommen
werden müssten, um mit Hilfe des Editors
ed die zweite Datei aus der ersten zu
erzeugen
 diff lager lager.neu  zeilenweiser Vergleich beider Dateien und
Ausgabe der nötigen Änderungen für ed,
um lager.neu aus lager erstellen zu können

 diff -e lager lager.neu >lager.diff  zeilenweiser Vergleich beider Dateien, die


Unterschiede werden in die Datei lager.diff
umgeleitet, die später als ed-Script verwendet
werden könnte

- comm Sortierte Dateien zweilenweise miteinander vergleichen


- comm [–option] dateiname 1 dateiname 2  Vergleicht auch Dateien, welche aber in
gleicher Weise zuvor sortiert worden sein
müssen. Im Ergebnis werden in einer
3-spaltigen Anzeige die Nummern
derjenigen Zeilen ausgegeben, die nur in
der ersten Datei, in der zweiten oder in
beiden Dateien enthalten sind. Über die
Optionen -1, -2 bzw. -3 können einzelne
Spalten unterdrückt werden.
 comm -12 lager lager.neu  zeilenweiser Vergleich beider Dateien, Ausblenden
der Spalten 1 und 2, daher nur Anzeige aller
Zeilen, die in beiden Dateien enthalten sind

23
WS15/16

 comm -23 lager lager.neu  wie eben, aber Ausblenden der Spalten 2 und 3,
daher Anzeige aller Zeilen, die in der ersten, aber
nicht in der zweiten Datei enthalten sind

paste - Zeilen aus mehreren Dateien zeilenweise zusammenfügen

Dateierstellung:
1. dat1.txt mit den Zeilen:
maier
mueller
2. dat2.txt mit den Zeilen:
1234
5678

- paste dat1.txt dat2.txt  liefert den zeilenweise zusammengefügten Text

Anzeige: maier 1234


mueller 5678

II. Prozessverwaltung in LINUX/UNIX

Prozessverwaltung

- Prozesse existieren in einer Hierarchie (Eltern-Kind): Kind-Prozesse werden durch


Clonen des Eltern Prozesses erzeugt.
- Implementierung im Programm durch System(API-)funktionen:
 fork () Clonen des Erzeuger-Prozesses
 exec () Ausführung eines neuen Programms als Kind-Prozess

Merkmale von Prozessen in UNIX/LINUX:


- Name (numerischer Identifikator, PID, typ. Wertebereich z.B. 1....32767)
- Name seines Erzeugers/Elternprozesse s (Parent-PID = PPID)
- Bearbeitungszustand (aktiv, wartend/schlafend, laufbereit,...)
- Login-Name u. Gruppe des Besitzers/Auftraggebers (UID,GID)
- Scheduling-Parameter, Prioritätswert
- Startadresse im Hauptspeicher
- Größe
- Startzeit
- Zugehöriges Programm bzw. Kommando

ps - Anzeige von Prozess-Informationen:

- ps  Anzeige von Informationen von akt. Prozessen


- ps [-option]  Momentaufnahme über laufende Prozesse
(Prozessmanager : Information der vor-
handenen Prozesse und deren Abstammung)
 ps –e  wählt alle Prozesse aus (sonst nur die mit
Terminal/Konsole verbundenen)
 ps –f  erzeugt eine detailliertere vollständige Ausgabe
(Abstammung)
 ps –l  langes Format, Anzeige mehrerer Eigenschaften
 ps –efl  wählt alle Prozesse aus, erzeugt eine detailliertere

24
WS15/16

Ausgabe und zeigt das lange Format an


 ps –ef | grep <IhrLoginname>  filtert meine eigenen Prozesse heraus

top - Prozess-Übersicht + statist. Zusatzinformationen

- top  Zeigt auch Prozesse an, aber ständig aktualisiert


und zusätzliche Informationen (Uhrzeit, Anzahl
angemeldeter Benutzer, Prozessanzahl, CPU und
akt. Speicherauslastung....):
1. zu den Tasks (total, running, sleeping, stopped,
zombie)
2. zur CPU
3. zum Speicherverbrauch (total, used, free,
buffers)
4. zum Swapbereich (total, used, free, cached)
(h  Hilfe, q  Verlassen)

pstree - Anzeige der Verwandtschaftsbeziehungen von Prozessen


- pstree Anzeige der Prozesshierarchie
- pstree –h Hervorhebung akt. Prozess
- pstree –H pid Hervorhebung des Prozesses pid

Überlagern/Ersetzen von Prozessen durch andere Prozesse:

- bash  eine neue Sub-Shell (bash) wird als


Kindprozess erzeugt und gestartet
- ps  Anzeige Information vom akt. Prozess
- bash  eine neue Sub-Shell (bash) als Kindprozess
erzeugen und starten
- ps  Kontrolle der Prozesse
- bash  eine weitere Sub-Shell als Kindprozess
erzeugen und starten
- ps  Kontrolle der Prozesse

exec- Ersetzung des Programmcode der Shell mittels Kommando durch den neuen
Programmcode des Kommandos

- exec Prozess (z.B. date)  Programm-Code eines Prozesses wird durch


einen anderen Programm-Code ersetzt
(Shell Prozess wird durch anderen
Programmcode ersetzt)
 exec date  ein Subshell-Prozess wird durch einen date
Prozess ersetzt
 ps  Kontrolle der bisherigen Shell und neuer
Prozess

25
WS15/16

Prozesse mit Signal (ausgelöst durch Benutzer)

- Signale: unterrichten Prozesse über Ereignisse, führen meist zum Abbruch des
Prozesses

Benutzer kann folgende Signale auslösen, durch:


- CTRL-C  sendet Signal SIGINT an in Konsole gestartetes
Programm (->Abbruch)
- CTRL-\  sendet Signal SIGOUT (->Abbruch + Coredump)
- Kommando kill [-signal] pid  sendet Signal signal an Prozess pid
kill 1534 sendet Standardsignal (SIGTERM) an Prozess mit PID
1534
kill -9 1534  sendet Signal 9 (SIGKILL) an Prozess mit PID 1534
kill –KILL 1534  sendet Signal SIGKILL (9) an Prozess mit PID 1534
Kommando killall [-signal] progname  sendet Signal signal an alle Prozesse, die das
Programm progname ausführen
killall httpd  sendet Standardsignal (SIGTERM) an alle Prozesse ,
die
den Web-Server-Dienst http ausführen

Prozesse mit Signal 9 (SIGKILL) beenden

- Signal 9 (SIGKILL): Mit Signal 9 kann mittels Kommando kill an einen Prozess mit PID
gesendet und zum sofortigen Abbruch (vorzeitiges Beenden) gebracht werden. Der Abbruch
kann weder abgefangen noch ignoriert werden (schweres Geschütz).
- ps  Prozessanzeige, merke PID der Shell
- bash  Erzeugung und Start einer Subshell als
Sohnprozess der Shell
- ps  PID der Subshell merken

- kill -9 <PIDvonSubshell>  Subshell wird beendet, indem an diesen


Prozess das Signal 9 zur unbedingten
Beendigung gesendet wird (Abbruch des
Sohnprozesses)

Prozesse im Hintergrund (asynchron) laufen lassen (Sonderzeichen &)

- find / -name datei55 –print  Suche im angegebenen Verzeichnis nach der


(nicht vorhandenen) Datei datei55
 hier synchrone Ausführung, dauert
wahrscheinlich lange (CTRL-C  Abbruch)
- find / -name datei55
-print >datei55.wo 2>datei55.err &  hier asynchrone Ausführung des gleichen
Befehls als Hintergrundprozess (& !)
mit Umlenkung der Standardausgabe und
Standardfehlerausgabe in jeweils eine Datei
(Anzeige der PID des Hintergrundprozesses,
merken!)
- ps
- kill -9 <PIDvonfind>  Hintergrundprozess abbrechen (PIDvonfind =
gemerkter PID des Hintergrundprozesses)

26
WS15/16

Prozesspriorität

PS1 = Systemvariable ($,?...), primärer Shell-Prompt


 Syntax: Variable=Wert  Variablezuweisung des Inhalts (ohne LZ)
 PS1=Befehl?  Befehl?_

Mit Leerzeichen:

 PS1=“Befehl?“  Befehl? _
=“Gebe bitte einen Befehl ein:..“
 PS1=“===>“  Wertveränderung der Variable PS1
 ===>set Kontrolle, evt. Besser mit set I more
===>PS1=......  Zurücksetzen PS1 auf alten Wert

- bash eine Subshell als Kindprozess starten


- PS1=“xxx „ Setzen eines neuen Prompt-Strings auf der variablen PS1
- set Anzeige aller lokalen Argumentvariablen (Systemvariablen), PS1
kontrollieren! Evtl. erw. mit set I more (Prozessabstammung am
Promptzeichen Zeilenanfang beachten!)

nice - Prozesspriorität festlegen:

- nice  Prozesse mit einer zu definierenden Priorität


starten
- nice wert dateiname  kann die Prozesspriorität verändern
(Nice-Wert ist minimale -20 bis maximale 19)
 nice -19 date  Priorität für date-Prozess wurde herabgesetzt

III. Shell

Shell = Kommando-Interpreter (Kommandoprozessor)


Ziel der Shell: Kommando Inferface für Nutzer (Benutzerschnittstelle = user interface)

Shelltypen: (sh,csh,ksh,ba sh..)


 sh Bourne Shell (UNIX Standardshell)
 bash Bourne Again Shell (Linux Standardshell)
 csh C-Shell
 ksh Korn-Shell

Shell Prompt: $ bash, sh, ksh


% csh, tcsh
# Login als root: bash, sh, ksh, csh, tcsh

bash-Kommandozeilen (Editor)
- Zeileneditor Pfeiltasten (rechts/links): Einfügen- und Überschreibmodus bevor ENTER
- Befehlseditor Pfeiltasten (oben/unten): Abruf/Rückruf der letzten bereits eingegeben
Kommandos (Rückholtaste für Kommandos)
- Kommando-Vorschläge: CTRL+TAB Taste (VT: lange Kommandos schneller finden, nur
bis zur Eindeutigkeit eintippen)

Kommentarzeilen im Skript:
- # oder : Kommentarzeilen einleiten
(Vorsicht: 1.Zeile Leerzeile, beginnend ab 2.Zeile, da die Shell diese sonst in der 1.Zeile als
Befehle auswertet) Achtung: Kommandozeile keine Umlaute erlaubt!!!

Anzeige von Shell-Startdateien (Initialisierung):

- Login-Shell: [-bash]  Erkennung Minus Zeichen am Zeilenanfang


- =die Shell, die beim Login im Textmodus gestartet wird

27
WS15/16

- bash unter Linux (Standardshell):


[~] Tildezeichen (Mac: alt + n drücken)

 /etc/profile
 ~.bashrc
 ~/.bash_profile
 ~/.bash_login
 ~.profile

Analyse der Kommandozeilen Auswertung von Shell


Shell führt schrittweise Kommandozeilen Auswertung aus , die Ausführung des Kommandos ganz am
Schluss!
Schritte vor der Kommandoausführung:
1.Zerlegung der Kommandozeile anhand von Trennzeichen (\Newline, Newline, TAB und
Leerzeichen)
2.Ersetzung von Kommando-Parametern und Auswertung der Shell Variablen
3.Kommandoersetzung
4.weitere Trennzeichen Zerlegung
5.Auswertung vorhandener Ein/Aus-Umlenkungen
6.Dateinamen-Expandierung
7.Erst jetzt Schritt: Ausführung des Kommandos!!!!!!!!!!!!!!

Befehlsalias („Gleichsetzung“)
Zusätzliche Vergabe von Aliasnamen für Kommando- oder Pfadangaben setzen (nur in bash,ksh,csh
außer sh)

- alias  Anzeige bereits definierter Aliase


- alias neuer_bezeichner=‘kommando/ Definition eines Alias für ein bestimmte s
pfadname‘ Kommando oder einen Pfadnamen
 alias showdir='ls -a'  Definition eines Alias („showdir“) für das
Kommando „ls –a”  showdir wirkt nun wie „ls –a“
 unalias showdir  Aufheben dieser Alias-Definition
 alias changedir='cd /usr/local/bin'  Definition einen Alias („changedir“) für das
Kommando „cd/ /usr/local/bin“
 changedir
 unalias changedir  Aufheben dieser Alias-Definition

Fortsetzungsprompt

- unvollständiges_Kommando \ Enter  Ausführen des Kommandos


> restlicher_Kommandotext auf nachfolgender Zeile
 ls - \ Enter  Ausführen des Kommandos „ls –a“
>a

28
WS15/16

Shell Variablen

Regeln für Shell Variablennamen:


 Buchstaben von (a-z, A-Z)
 Nummern von (0-9)
 Unterstrich: _
 Müssen mit Buchstaben anfangen
 Erlaubt sind Groß/Kleinbuchstaben, Ziffern und Unterstrich
 Variablennamen Länge bis zu 255 Zeichen erlaubt

Shell verwaltet Variablen (=Speicher für Zeichenketten und Zahlen)

Gültigkeit von Shell-Variablen:


- set Anzeige aller lokale gesetzten Umgebungsvariablen (latente
Variablen/Argumentvariablen), internes Kommando gelten nur in
dieser Shell
- set I more  Anzeige wie set, danach seiten/zeilenweise Durchblättern
- env (oder export)  Anzeige aller globalen exportierten Umgebungsvariablen, diese
gelten in Shell und auch in allen Kindprozessen dieser Shell
- env I more  Anzeige wie env, danach seiten/zeilenweise Durchblättern

Arten von Shell-Variablen

Standardvariablen: (Verweise)
- für wichtige Einstellungen ; sie werden
GROSS geschrieben und von der Shell in
vielen Kommandos verwendet
 Home-Verzeichnis des Nutzers
- HOME
 Suchpfad für Programme und Kommandos
- PATH
 Absoluter Pfad zum ausführbaren Code der
- SHELL
 Shell akt. Login-Kennung, Anmeldename
- LOGNAME
des Nutzers
- USER
 Akt. Benutzername (Login-Shell)
- TERM
 Typ-Erkennung des Terminals
- EDITOR
 Standardeditor des Nutzers (jedit, vi,
gedit,...)
- PAGER
 Standard-Pager(Anzeigeprog.) des Nutzers
- HOSTNAME
(z.B.more)
- PS1, PS2
 Name des Rechners
 Anzeige mit dem Kommando echo $ bzw. env
 Primärer und sekundärer Prompt der Shell
(z.B $)
 PS1=“===>“  Wertveränderung der Variable PS1
 ===>set  Kontrolle, evt. Besser m it set I m ore
 ===>PS1=......  Zurücksetzen PS1 auf alten Wert

Systemvariablen (vordefiniert):
- werden von der Shell selbst angelegt und
mit einem Wert versehen, nur vom Benutzer
lesbar

z.B. ?, -, !, $, @, ...

29
WS15/16

 Anzeige mit dem Kommando echo $

Benutzervariablen
- für individuelle Einstellungen, sie werden
von Nutzer nach Bedarf angelegt und
verändert und im allg. klein geschrieben

z.B. anzahl, i, groesse, ichbin...

Latente Variablen/ Argumentvariablen


Dienen der Übergabe von Argumenten an
die Kommando/Shellskript

z.B. 0,1-9,#,*,$,?,!......

Benutzervariablen:

- variable=inhalt  Belegung einer Benutzervariable


 ichbin=otto  Erstellung einer lokalen, eigenen Benutzervariable
ichbin
 echo ichbin  ich bin
 echo $ichbin  Inhalt der Variable ichbin ( otto)
 set | more  Belegung von ichbin kontrollieren (auch mit set)
 unset ichbin  ichbin löschen
 aktverz=`pwd`  Zuweisung eines Wertes, der durch
Befehlsersetzung entsteht
 echo aktverz  aktverz
 echo $aktverz  Inhalt der Variable aktverz ( /home/lrichte2)
 unset aktverz  aktverz löschen

Latente Variablen / Argumentvariablen:

- set werte  Belegung von latenten/Argumentvariablen


- set $#/$1/$*  Anzeige von latenten/Argumentvariablen
 set aa bb cc  Belegung einer Argumentvariable
 echo $#  Anzeige der Anzahl der Parameter ( 3)
 echo $2  Anzeige des 2. Parameter ( bb)
 echo $*  Anzeige der kompletten Parameterliste
( aa bb cc)
 set | more  Anzeige aller aktuell gesetzten Variablen
(auch mit set)
 set $TERM $LOGNAME  Belegung einer Argumentvariable
 echo $#  Anzeige der Anzahl der Parameter ( 2)
 echo $1 $2  Anzeige des 1. und 2. Parameter ( xterm lrichte2)
 set `date`  Wertzuweisung mittels Befehlsersetzung des
date-Kommandos (die erzeugte Ausgabe wird
wortweise den Argumentvariablen 1, 2,...
zugewiesen)
 echo $#  Anzeige der Anzahl der Parameter ( 6)
 echo '$1: ' $1 '$2: ' $2  Anzeige des Inhalts des 1. und 2. Parameters
( $1: Do $2: 19.)
 echo $*  Anzeige der kompletten Parameterliste
 echo $2 $3 $5  Anzeige in anderer Folge
- shift zahl  Werteliste der Parameter wird um n Stellen

30
WS15/16

nach links verschoben, wobei die


entsprechende Anzahl von Werten am
Listenanfang herausfällt
 set aa bb cc  Belegung einer Argumentvariable
 shift 2  Werteliste der Parameter wird um 2 Stellen nach
links verschoben
 echo $#  2
 echo $*  bb cc

Anzeige/Abfrage von Shell Variablen

- set  Anzeigen der lokalen Argumentvariablen mit Wert


- export  Bekanntmachen der Variable,
- export <variablenname>  Anzeige aller globalen Umgebungsvariablen
- unset  Löschen der Variablen (unset variable)
- env  Anzeige aller globalen exportierten
Umgebungsvariablen (siehe export)
- echo  Anzeige einer bestimmten Umgebungsvariable
 echo $ <variablenname>

Anlegen eigner Benutzervariablen (global/exportieren)

- varname=Wert
 alter=20

Anlegen der Shellvariable global bzw. exportieren

- varname=Wert
 alter=20
- export varname  Bekanntmachen der Variable varname

 export alter
oder
- varname=wert
 alter=20
- declare –x varname
 declare –x alter
bzw
- typeset –x varname
 typeset –x alter

oder
- export varname=Wert
 export alter=20 (nicht bei Bourne-Shell!!)

- declare/typeset Zuweisung eines Wertes


 declare a=3  weist der lokalen Variablen a einen Wert zu
 declare –x a=3 weist der globalen Variable a einen Wert zu

Variablen als unveränderlich deklaraieren (keine Namens/Wertänderung möglich)

- variable=wert  alter=20
- readonly variable  readonly alter

31
WS15/16

Variable mit Ausgabe eines Kommandos initialisieren


Kommandosubstitution (Befehlsersetzung)

Befehlsersetzung erlaubt es, die Ausgabe eines Kommandos direkt an eine Variable zu
übergaben (direkte Wertausgabe)

- variable=`kommando`  liste=`ls –a`


- oder variable=$ (kommando)  liste=$(ls –a) nur in bash!

Shell Ersetzung

Kommandoersetzung:
Die Shell wertet Jokerzeichen schon vorher aus, bevor das Kommando ausgeführt.
Joker/Metazeichen in Dateinamen:*,?, [a-z], [!a-z]

Bsp. im Verz. sind die Dateien a1.txt, a2.txt und a3.TXT


a) Kommando: ls –l *.txt
Shell führt aus: ls –l a1.txt a2.txt
b) Kommando: ls –l a?.*
 Shell führt aus: ls –l a1.txt a2.txt a3.txt

z.B. echo `date`: Mi 16 Dez 2015 11:33:35


datum=`date`: lokale Benutzervariable Datum erhält als Wert die Ausgabe des date
Kommandos
echo $datum: Benutzung der Variable datum

Tilde [~]-Ersetzung:
- Die Shell ersetzt ~durch das Home-Verzeichnis des Nutzers.
- Bsp.:
- Kommando: cat ~/Texte/witze.txt (cat= Anzeige der Dateien)
 entspricht: cat $HOME/Texte/witze.txt

- Kommando: ls ~/docs
Shell führt aus: ls /home/ameier/docs (für den Nutzer ameier)

Variablen-Ersetzung:
- Die Shell ersetzt $varname durch den akt. Inhalt(Wert) der Variablen.
- Bsp: echo Hallo $USER! (echo gibt Textinhalt von $USER aus!)
- Anzeige: Hallo ameier! -> wenn die Variable USER den Wert ameier hat

Backquote- (Backstick-) Ersetzung, Kommando-Ersetzung:


- Die Shell ersetzt `kommando` durch die Standardausgabe dieses Kommandos.
- Bsp: echo Das heutige Datum ist: `date`
- Files=`ls –a` oder files=$(ls –a) (bei bash!!!)

Brace-(Klammern-)Ersetzung:
- Muster der Form: pre{m1, m2, m3}post
- werden expandiert zu: prem1post, prem2post, prem3post
- Bsp: ls *.{txt, TXT, doc}
- Entspricht: ls *.txt *.TXT *.doc

32
WS15/16

Schutz-/Entwertungszeichen der Shell („Quoting“)

Problem: Mitunter sind Ersetzungen durch die Shell vor der Kommandoausführung
unerwünscht! -> Entwertung durch „Schutz-Zeichen“!

 Quotierung: Behält seine Bedeutung bei Zeichen wie \$,\’,\“,\ ...wird entwertet

- Backslash (Fluchtsymbol) (\):  entwertet nur das ihm unmittelbar folgende Zeichen nach
Backslash (ist dies kein Sonderzeichen bleibt Backslash
wirkungslos)
- einfache Hochkomma (‘):  Umschließung in ’ ’ entwertet alle dazwischen
stehenden Sonderzeichen

- doppelte Hochkomma (“):  Umschließung “ “ fasst zusammen und entwerten alle


dazwischen stehenden Sonderzeichen außer \ $ und ` `

Bsp.: Entwertungszeichen

- echo „\“Überschrift:\“ $headline“ (alles entwertet außer $headline...


- echo *
- echo '*'
- echo "*"
- echo $HOME
- echo '$HOME'
- echo "$HOME“
- grep $name liste.dat
- grep "$name" liste.dat

weitere Beispiele:
 echo Das kostet $10.00  Das kostet 0.00
 echo "Das kostet $10.00"  Das kostet 0.00
 echo 'Das kostet $10.00'  Das kostet $10.00
 echo Das kostet \$10.00  Das kostet $10.00
 echo 'Das ist der Backslash: \'  Das ist der Backslash: \
 echo "Das ist der Backslash: \"  Das ist der Backslash: “
>“
 echo "Das ist der Backslash: \\"  Das ist der Backslash: \

Befehlsersetzung/Kommandosubstitution mit Backquotes ``

- echo `Pfadname/Kommando`  Ausführung des Kommandos/Anzeige des


Pfadnamen
 echo pwd  pwd
 echo "pwd"  pwd
 echo `pwd`  /vol/vol_home_student ... entspricht pwd
 echo date  date
 echo "date"  date
 echo `date`  Fr 13. Nov 12:22:11 CET 2015

33
WS15/16

Berechnungen mit Shell-Variablen

Arithmetische Ausdrücke:
Shellvariablen enthalten i.allg. Zeichenketten das können auch ganze Zahlen sein

- expr  Rechnen mit ganzen Zahlen (Operationen: + - * / %) ->


Leerzeichen vor/hinter dem Operanden!
Bsp. var1=10 keine Leerzeichen!
 var2=20 keine Leerzeichen!
 var3=`expr $var1 + $var2` mit Leerzeichen und Backquotes
 var4=`expr \( $var1 + $var2 \) \* $var3` beachte: Entwertung
 wurf=`expr $RANDOM % 6 + 1` RANDOM enthält eine Zufallszahl

- declare –i  Anlegung von Variablen und als ganzzahlige Variablen


(integer Typ) deklariert warden
Bsp.: declare –I v1 v2 v3 #v1,v2, v3 als integer
v1=5 #Zuweisung ok
v2=otto #setzt v2 auf 0, weil “otto” keine ganze Zahl ist

- bash (und ksh) haben eingebaute Ganzzahl-Arithmetik:


Operatoren: + - * / % += -= *= /= %= >> << & I ~!
- let  einfacher als „expr“ Kommando für Berechnung mit ganzen
Zahlen (da keine Leerzeichen notwendig!)

Bsp.: let v2=v1+1 keine Leerzeichen!


let v3=100*v1+ v2 keine Leerzeichen!
let „v4 = 100 + v2“ Leerzeichen erlaubt!

Aufrufen von einem Shell-Skript

- bash skriptname parameter  Start in einer Sub-Shell, die danach


automatisch wieder verlassen wird
 bash skript1 aa bb cc  Start des Skripts skript1 mit den übergebenen
Parametern aa bb cc
- bash –x skriptname parameter  die Option –x bewirkt, dass in der Anzeige
2>fehlerdatei sowohl das jeweils ausgeführte Kommando
des Shell-Skripts als auch dessen Ergebnis
zusehen ist; eventuelle Fehlermeldungen
werden in der angegebenen Umlenkungsdatei
aufgefangen
 bash –x skript1 aa bb cc  Fehlermeldungen werden in Datei skr1dat
2>skr1dat gespeichert
- skriptname parameter  Start in einer Sub-Shell, die danach
automatisch wieder verlassen wird
(Voraussetzung: PATH-Variable enthält
aktuelles Verzeichnis)
 skript1 aa bb cc dd ee
- ./skriptname parameter  Start in einer Sub-Shell, die danach
automatisch wieder verlassen wird
 ./skript1 aa bb cc dd ee
- . skriptname parameter  Start innerhalb der aktuellen Shell
 . skript1  Start innerhalb der aktuellen Shell, hier ohne
Parameter

34
WS15/16

Ausführung in der Bourne Against Shell

- #!/bin/bash  erste Zeile in einem Skript, um zu erzwingen


dass ein Skript immer in der Bourne Against
Shell (bash) abläuft
- /etc/profile  Startdatei der Bourne Shell sh
- /etc/passwd  lokale Passwortdatei des Systems

35
WS15/16

36
WS15/16

37
WS15/16

38
WS15/16

39
WS15/16

40
WS15/16

41

Das könnte Ihnen auch gefallen