Aus Mageia wiki
Wechseln zu: Navigation, Suche

Diese Seite wurde von der entsprechenden Seite der MandrivaUser.de wiki kopiert.


Grundlagen Unix/Linux

1. Geschichte Unix/Linux

 - 1969 AT&Ts Bell Laboratories Multix-Projekt
 - Ken Thompson entwickelt Unics (später Unix) auf der Grundlage von Multics
 - Brian Kernigan & Dennis Richie entwickeln C
 - 1973 Unix wird in C portiert  
 - 1976 wurde der Quellcode an Universitäten freigegeben
 - Anfang der 80er - viele große Firmen kauften Lizenzen und schrieben ihr eigenes Linux
 - kommerzielle Unix-Varianten entstanden:

AIX von IBM HP-UX von HP Sinix von Siemens Nixdorf Solaris von Sun (jetzt Oracle) UnixWare von Novell SCO-Unix von SCO Xenix von Microsoft Unix System V von AT&T BSD-Unix von Berkeley University of California (BSD=Berkeley Software Distribution)

 - 1982 gründet Richard Stallman die FSF (Free Software Foundation) mit dem Ziel, Open Source
   Software zu entwickeln, zu fördern und zu verbreiten
 - GNU Projekt der FSF entwickelte GNU C-Compiler (GCC) und Unix-Systemprogramme unter
   der GPL-Lizenz (General Public License)
 - 1991 entwickelt der finnische Student Linus Torvalds Betriebssystem-Kern auf der Basis von
   Minix, veröffentlicht Quellcode im Internet, Linux-Kernel in Version 0.01
 - Dateisystem wurde Minix entnommen
 - In Kombination mit vielen GNU-Softwareprojekten und anderen OpenSource-Programmen
   entstanden Mitte der 90er viele Linux-Distributionen

Redhat / Fedora Core Novell Suse / OpenSuse Debian Slackware Mandriva ...

2. Leistungsmerkmale

 - Multitasking (echtes, preemptives) - mehrere Prozesse teilen sich den Prozessor, laufen quasi
   parallel (für kleine Zeitscheiben bekommt man Prozessorzeit)
 - Multiuserbetrieb (mehrere angemeldete Benutzer gleichzeitig)
 - Demand Paging - Auslagerung von Speicherseiten des Arbeitsspeichers auf swap-Partition
 - hierarchisches Dateisystem, über mehrere Datenträger möglich
 - einheitliche Geräteschnittstellen in Form von Gerätedateien
 - Redirection (Umleitung) von Ausgaben und Eingaben (bspw. in Dateien)
 - Piping (Pipelining) - umleiten der Ausgabe eines Befehle an die Eingabe des folgenden
 - Chaining - verketten von Befehlen
 - Hintergrundverarbeitung von Prozessen
 - hohe Portierbarkeit auf andere Plattformen


2.1 Aufbau von Linux

 Linux besteht im wesentlichen aus 3 Komponenten:
 - Kernel (Betriebssystemkern)
 - Befehlzeileninterpreter (Shell)
 - Dienstprogramme (Systemtools und Anwendungen)
 Im Kernel sind die Aufgaben des OS realisiert
 - Kommunikation mit der Hardware
 - Verwaltung der Ressourcen
 - Bereitstellung der Dateisysteme
 - Unterbrechungssteuerung
 Shell als Befehlzeileninterpreter
 - liest die eingegebenen Befehle, startet Programme, zeigt Ergebnisse an
 - verschiedene Shells (sh, bash, dash, ksh, csh, tcsh ...)
   Bourne Shell (sh)		usprüngliche Unix-Shell
   C-Shell (csh)		weitere Unix-Shell
   Korn-Shell (ksh)		Weiterentwicklung von Bourne- und C-Shell
   Bourne Again Shell (bash)	weitverbreitetste Shell
 - stellt eine umfangreiche Programmiersprache zur Verfügung
 - stellt einen konfigurierbaren Eingabeprompt dar
   Bsp: 	meier@lx-71-21:~>
   Benutzername@Hostname Pfadangabe Promptzeichen
   Pfadangabe: ~ für /home des angemeldeten Benutzers
   Promptzeichen: 	$ für Benutzerprompt

# für root-Prompt Opensuse benutzt > für Benutzerprompt

3. An- und Abmelden

 - Systeme mit grafischer Oberfläche bieten die grafische Anmeldung in einem
   Displaymanager, z.B. kdm für KDE
 - anschließend wird eine grafische Oberfläche geladen, z.B. KDE-Desktop
 - neben der grafischen Oberfläche stehen 6 Textkonsolen (tty's, Terminals) zur Verfügung
 - Wechsel von X-Server zu einer Textkonsole mit Strg+Alt+Fn (n = 1-6)
 - Wechsel von Textkonsole zum X-Server mit Strg + Alt + F7
 - nach Eingabe von Benutzername und Passwort wird eine Login-shell gestartet
 - Abmelden von der Shell / Beenden der Shell
   o $exit (beliebige Shell beenden)
   o $logout (abmelden und beenden nur für Login-Shell)
   o Strg + D (ASCII-Steuercode für EOF [End of File])

3.1 Das X-Window-System (kurz X)

 Fenstermanager:
 o TWM
 o IceWM
 o Metacity
 o Kwin4
 o Compiz / Emerald
 o ...
 Desktopsysteme
 o KDE
 o GNOME
 o XFCE
 o LXDE
 o E17
 o ...
 X-Window-System
 - ist Sammlung von Funktionen und Protokollen
 - Grundlage für grafische Ein- und Ausgaben
 - netzwerkfähig & netzwerktransparent, Client-Server-System
 X-Server
 - Schnittstelle zwischen X-Window-System und der Hardware
 X-Client
 - Programme die den X-Server für grafische Ein- und Ausgaben nutzen
 Display Manager
 - Programm, dass das grafische Login ermöglicht, Bspw: XDM, KDM, GDM
 Window Manager
 - Programm dass die Fenster für die X-Clients verwaltet, Bspw: kwin4, metacity
 - bestimmt Aussehen und Funktionalität
 Desktop-System (Desktop-Environment)
 - bringt eine große Sammlung von Anwendungsprogrammen mit
 - vereinheitlicht Aussehen (Menüs,Symbole) und Bedienung (Drag&Drop, Shortcuts)
 - Anwendungsprogramme basieren auf der gleiche Grafikbibliothek Bspw: QT, GTK
 Virtueller Bildschirm
 - die Auflösung des Desktops ist größer als die des Monitors
 - auf dem Monitor ist nur ein Ausschnitt des Desktops zu sehen,
   der automatisch scrollt, wenn die Maus den Bildschirmrand berührt
 Virtueller Desktop
 - eine Anwendung des Desktopsystems um zwischen mehreren Desktops zu wechseln

3.2 Starten des X-Servers

 Bei der Installation wird der Funktionsumfang beim Starten des Systems in sogenannten Runleveln festgelegt

Runlevel 3 – Konsolenanmeldung (Kein X-Server starten) Runlevel 5 – Grafische Anmeldung (X-Server + Displaymanager starten)

3.3 Manuelles Starten des X-Servers

 - Wechsel in den Runlevel 3 => Beenden von X-Server und Displaymanager
   <strg> + <alt> + <F1> => Textkonsole als Root anmelden #init 3
 - Starten der X-Session für benutzer
   <alt> + <F2> als benutzer anmelden $startx

4. Einfache Befehle und ihre Argumente

4.1 einfache Befehle - $ = Symbolik für Benutzer-Shellprompt

 $who 		= 	zeigt alle momentan angemeldeten Benutzer an
 $clear 	= 	löscht Bildschirm der Konsole
 $date 	= 	zeigt aktuelles Datum/uhrzeit
 $whoami 	= 	zeigt aktuellen Benutzer an
 $cal 		= 	zeigt Kalender
 $bc 		= 	interaktiver Taschenrechner
 $su 		= 	startet eine Subshell im Kontext eines anderen Benutzers

(ohne Argument: root-Shell mit Passwortabfrage)

4.2 Befehle und ihre Argumente

 - Argumente werden durch Leerzeichen getrennt hinter dem Befehl angegeben
 - normale Argumente sind i.d.R Daten, die dem Programm übergeben werden (Dateiname, Zeichenkette) 
 Bsp: 	$cal 2010		-	Jahreskalender 2010

$su user1 - Subshell als user1 $echo "Hallo Welt" - Ausgabe von Hallo Welt auf Konsole

 - Optionen sind eine Art Schalter, die die Funktionsweise eines Befehle erweitern oder spezialisieren
 - Unix-Optionen (AT&T) sind einzelne Zeichen, die mit einem "-" beginnen
 Bsp:	$bc -h			-	Help

$cal -m - Montag $cal -3 - 3 Monate $cal -m -3 = cal -3m

 - GNU-Optionen sind Optionswörter, die mit "--" beginnen
 Bsp:	$bc --help
 - BSD-Optionen sind einzelne Zeichen ohne "-"
 Bsp:	$ps a
- Kombination von Optionen und normalen Argumenten
 Bsp:	$cal --help

$cal [-13...] [[[day] month] year] 4.3 Unterscheidung zwischen Shell-Befehlen und Systemprogrammen

 $which Befehl		-bei Systemprogrammen Pfadangabe, bei Shell-Builtins keine Ausgabe
 $type Befehl		-bei Systemprogrammen Pfadangabe, bei Shell-Builtins shell builtin / shell keyword
 
 $whereis Befehl	-Pfad zu Programmen/Man-Pages ausgeben
 $whatis Befehl		-Kurzbeschreibung zu Befehlen angeben


5 Online-Hilfen

 - Unix-Manuals (Handbücher)
 zu sämtlichen Befehlen und Konfigurationsdateien werden Man-Pages mit installiert
 Aufruf: 	$man [Abschnitt] thema
 Bsp:		$man cal

$man 1 passwd - Handbuch zum befehl passwd $man 5 passwd - Handbuch zur Systemdatei /etc/passwd


 Das man-pages-System ist inhaltlich in Abschnitte gegliedert
 Die folgende Tabelle zeigt die Nummern der Abschnitte der Manualseiten
 gefolgt vom Typ der dort zu findenden Seiten.
      0   Dateiheader (gewöhnlich in /usr/include)
      1   Ausführbare Programme oder Shellbefehle
      2   Systemaufrufe (Kernelfunktionen)
      3   Bibliotheksaufrufe (Funktionen in System-Bibliotheken)
      4   Spezielle Dateien (gewöhnlich in /dev)
      5   Dateiformate und Konventionen, z. B. /etc/passwd
      6   Spiele
      7   Makropakete und Konventionen, z. B. man(7), groff(7)
      8   Systemadministrationsbefehle (in der Regel nur für root)
      9   Kernelroutinen [Nicht Standard]
      n   neu [veraltet]
      l   lokal [veraltet]
      p   öffentlich [veraltet]
      o   alt [veraltet]
 
 - zur Anzeige der man-Pages wird das Programm less [Pager] verwendet
   Navigation innerhalb von less:
   Leertaste	-	Seite vor
   Backspace	-	Seite zurück
   g		-	zum Anfang (erste Zeile) der Seite
   G		-	zum Ende (letzte Zeile) der Seite
   nG		-	zur n-ten Zeile
   /Suchbegriff-	Suchen nach Suchbegriff (erste Fundstelle)

n - nächste Fundstelle N - vorherige Fundstelle

   q		-	Quit
 - Hinweis: apropos thema liefert eine Liste verfügbarer Man-Pages zu einem Thema
 - GNU Infosystem
 - bietet Querverweise (Links) zu anderen Themen (Dokumenten)
   Aufruf: $info thema
   Bsp:    $info date
 - Querverweise sind mit * gekennzeichnet
   Navigation innerhalb von info
   Leertaste	-	Seite vor
   Backspace	-	Seite zurück
   Tab		-	springen zum nächsten Querverweis
   Enter	-	folgt dem Querverweis
   l		-	zurück zum letzten angewählten Querverweis
   h		-	Hilfe zur Bedienung
   u		-	eine Hierarchieebene nach oben
   n		-	nächste Infoeinheit
   p		-	vorherige Infoeinheit (der gleichen Hierarchie)
   q		-	Quit
 - Hilfe anzeigen im Dolphin/Konqueror:
   man: in Adresszeile eintragen
 - Hilfe im KDE-Hilfecenter anzeigen:
   Alt+F2 -> khelpcenter oder K-Menü -> System -> Hilfe starten
   Unix-Hilfeseiten anwählen

6 Grundlagen der Dateiverwaltung

 - Aufbau des Dateisystems
   als Dateisystem werden eingesetzt:
   - ext2 (lange Zeit Standard, kein Journaling)
   - ext3 (momentan Standard, Journaling, abwärtskompatibel)
   - ext4 (relativ neu, zusätzliche Funktionen wie extents, Online-Defragmentierung, abwärtskompatibel)
   - ReiserFS (Entwicklung eingestellt, Journaling, inkompatibel zu ext)
   alle Dateien werden in einer Inode-Tabelle verwaltet
   Die Journalingfunktion protokolliert Schreibzugriffe auf geöffnete Dateien
   Nach einem Systemabsturz kann somit eine schnellere Überprüfung und Wiederherstellung
   eines konsistenten Dateisystem erfolgen
 - logischer Aufbau
   - hierarchisches System, das mit der wurzel (root) "/" beginnt
   - Pfadangaben werden mit "/" getrennt
   - Groß- und Kleinschreibung werden unterschieden
   - Dateinamen können max. 255 Zeichen lang sein
   - Sämtliche Zeichen außer “/“ sind erlaubt
   - Dateinamenserweiterungen haben keine funktionale Bedeutung
 Dateitypen 
 Typ					Symbol
 normale Datei				-
 Verzeichnis				d
 Gerätedatei blockorientiert		b
 Gerätedatei zeichenorientiert		c
 Symbolische Links			l
 named pipes				p	zur Interprozesskommunikation
 sockets				s	zur Interprozesskommunikation
 - Linux Standardverzeichnisstruktur (siehe auch FHS - Filesystem Hierarchy Standard)
 / root		Verzeichniswurzel
 |-bin			elementare Befehle für alle Benutzer (binaries)
 |-boot		Linux-Kernel (vmlinuz) und Bootmanager
 |-dev			Gerätedateien (devices)
 |-etc			Konfigurations- und Administrationsdateien
 |-home		Homeverzeichnis der Benutzer
 |-lib(64)		Systembibliotheken und Kernelmodule (libraries)
 |-lost+found		Dateifragmente nach Dateisystemprüfung, wenn beschädigt
 |-media		zum Einhängen entfernbarer Datenträger (Floppy,CDROM,USB-Sticks usw.)
 |-mnt			zum temporären Einhängen v. Datenträgern (mount)
 |-opt			optionale Anwendungsprogramme (Adobe Reader, TeamViewer, KDE3 unter OpenSuse usw.) (optional)
 |-proc		virtuelles Dateisystem, Informationen über laufende Prozesse (process)
 |-root		Homeverzeichnis des Benutzers root
 |-sbin		elementare Systembefehle und Dienste für root (system binaries)
 |-srv			Daten für Serverdiensten (WWW, FTP usw.) (server)
 |-sys			virtuelles Dateisystem, Informationen zur aktiven Hardware
 |-tmp			temporäre Dateien (temporary)
 |-usr			Unix System Ressources - Programme, Programmdaten, Bibliotheken, Handbücher, Sounds, Bilder
 |-var			veränderliche Dateien z.B. Logdateien, Cache usw. (variabel)
 Hinweis: mehrere dieser Verzeichnisse können auf externe Dateisysteme (Partitionen) verweisen
 z.B. /boot, /home, /usr, /var
 Warnung: nicht ausgelagert werden dürfen
 /bin, /sbin, /root, /lib, /etc

7 Wichtige Befehle zur Dateiverwaltung

 - spezielle Verzeichnissymbole
   ~ 	-> 	verweist auf Homeverzeichnis des aktuellen Benutzers
   / 	-> 	verweist auf Wurzelverzeichnis
   . 	->	verweist auf aktuelles Verzeichnis
   .. 	->	verweist auf Elternverzeichnis des aktuellen Verzeichnisses
 - Befehle für Verzeichnisse
   $pwd				-	print working directory, zeigt aktuellen Verzeichnispfad an
   $ls [optionen] [dateiname]		-	zeigt Inhalt eines Verzeichnisses an

-a - zeigt alle Dateien, auch versteckte (beginnen mit einem "." im Namen) -A - dito, ohne "." und ".."-Verwaltungseinträge

   $cd	[verzeichnis]			-	change directory, Verzeichnis wechseln

- - in zuletzt besuchtes Verzeichnis wechseln

   $mkdir [optionen] verzeichnisname	-	erstellt verzeichnisse

-p - Elternverzeichnisse erstellen, falls nicht vorhanden

   $rmdir verzeichnisname		-	löscht Verzeichnisse, falls leer

-p - löscht Elternverzeichnisse mit, falls auch leer

   $cat dateiname			- 	zeigt Dateiinhalt an, fügt Dateien aneinander (concatenate)
   $more dateiname			-	zeigt Dateiinhalt seitenweise (Abbruch mit Strg+C)
   $less dateiname			-	zeigt Dateiinhalt mit Navigationsmöglichkeit (Abbruch mit Strg+C oder q, siehe man)
   $touch dateiname			-	erzeugt leere Dateien bzw. ändert Zeitstempel bestehender Dateien
   $cp [optionen] quelle ziel		-	kopiert Quelle nach Ziel
   Bsp: cp /etc/services tmp		-	wenn Zielname nicht existiert, wird er der neue Dateiname

cp -R - rekursiv (mit Unterverzeichnissen und Dateien) kopieren Hinweis: als Quelle können mehrere Dateien/Verzeichnisse angegeben werden, das Ziel muss dann ein Verzeichnis sein

   $mv quelle ziel			-	verschiebt/benennt Quelle nach Ziel um
   $rm [optionen] datei		- 	löscht Dateien und komplette Verzeichnisse

-r - löscht Verzeichnisse -i - interaktiv: fragt vor dem Löschen nach

 - Verwendung von Links (Verküpfungen)
   Für existierende Dateien wird ein zusätzlicher Name vergeben, über den alternativ sämtlichen Dateioperationen ausgeführt werden können
   Man unterscheidet Zwei Arten von Links: Hardlinks und Softlinks
   - Hardlinks
     - können nur für Dateien (keine Verzeichnisse) angewendet werden
     - in einem Verzeichnis wird ein weiterer Namenseintrag für einen bestehenden Inode (Datei)
       erstellt, wobei der Linkzähler um 1 erhöht wird
     - beim Löschen eines Dateinamens wird der Linkzähler um 1 verringert,
       ist der Zähler 0, wird die Datei (Inode) physisch gelöscht
     - Hardlinks können nur innerhalb des gleichen Dateisystems verwendet werden
     - verbrauchen keinen Platz
     - man kann nicht unterscheiden zwischen Hardlink und originaler Datei
   $ln zielname zusätzlicher_name
   - Symbolische Links
     - entsprechend weitesgehend Verknüpfungen unter Windows
     - für einen Symlink wird eine neue Datei (Inode) erstellt,

deren Inhalt enthält den Pfad zur referenzierten Datei/Verzeichnis

     - können auf Dateien/Verzeichnisse verweisen, auch auf anderen Dateisystemen
     - werden häufig aus Kompatibilitätsgründen für Systemverzeichnisse / Dateien verwendet
     - verbrauchen Speicherplatz
    $ln -s zielname link_name

8 Erweiterte Möglichkeiten der Shell

 - Expandierung von Dateinamen / Verwenden von Metazeichen (Wildcards)
   um mehrere Dateien/Verzeichnisse in Befehle zu verwenden, können Metazeichen verwendet werden
   * - steht für beliebige Anzahl beliebiger Zeichen
   Bsp: $ls -ld /etc/i*			alle Namen die mit "i" beginnen
   
   ? -	steht für genau ein beliebiges Zeichen
   Bsp: $ls -ld /etc/???.*			3 Zeichen.belibige Erweiterung
   
   [...] - genau ein Zeichen aus der Auflistung
   Bsp: $ls -ld /etc/[iIgG]*			Namen die mit einem i oder I oder G beginnen

$ls -ld /etc/???[0-9]* alle Namen mit einer Ziffer an 4. Stelle $ls -ld /etc/???[0-49]* an 4. Stelle die Ziffer 0,1,2,3,4,9 (0 bis 4 oder 9)

   [!...] - genau ein beliebiges Zeichen, außer denen in der Auflistung
   [^...] - genau ein beliebiges Zeichen, außer denen in der Auflistung
   Bsp: $ls -ld /etc/[!a-dhi]*			alle Namen die nicht mit a,b,c,d,h,i beginnen
 
 - Maskieren von Metazeichen
   \ - hebt die Bedeutung des nachfolgenden Metazeichens auf (auch Leerzeichen)
   Bsp: $touch file\?
   "..." - hebt die Bedeutung sämtlicher Metazeichen im String auf
   Bsp: $touch "fil* 1.?"
 - Ein- und Ausgabeumleitung
   Die Shell ermöglicht es Eingaben der Tastatur u. Ausgaben auf den Bildschim aus/in Dateien umzuleiten
   - Spezialgeräte (Streams)
     
     Bezeichnung		Name	Gerät		Deskriptor	Zeichen zur Umleitung
     Standardeingabe   	stdin	Tastatur	    0		<	(0<)
     Standardausgabe		stdout	Bildschirm	    1		>	(1>)	>> (1>>)

erstellt neue Datei erstellt neue Datei löscht wenn vorhanden anhängen wenn vorhanden

     Standardfehlerausgabe	stderr	Bildschirm	    2			2>	2>>
     Bsp: Umleitung stdin:
     Der Befehl cat liest von der Standardeingabe bis EOF (Strg+D) eingegeben wird
     $cat
     ...
     Strg+D
     $cat < /etc/group		Eingabe kommt aus Datei
     
     Bsp: Umleitung stdout:
     $who > userlist.log			Ausgabe von who wird in Datei umgeleitet
     $date +"%d.%m.%Y %H:%M" >> userlist.log	Ausgabe des aktuellen Datums an userlist.log anhängen
     $who >> userlist.log			Ausgabe von who wird an Datei angehängt
     $cat userlist.log				Ausgabe der Datei auf Bildschirm
     Bsp: Umleitung stderr
     Das Kommado find gibt Fehlermeldungen aus, wenn Berechtigungen fehlen, diese können umgeleitet werden
     $find /etc -name passwd 2> fehler.log
     Bsp: Spezialfall stdout und stderr in die gleiche Datei umleiten
     $find /etc -name passwd > ausgabe.log 2>&1
     Bsp: Ausgaben, die nicht benötigt werden, können zu dem Spezialgerät /dev/null
     umgeleitet werden (ein imaginäres schwarzes Loch)
     $find /etc -name 2> /dev/null
     Bsp: Erstellen einer Partition automatisieren mit fdisk
     input.txt erstellen mit folgendem Inhalt:
     fdisk
     n
     
     t
     w
     EOF
     Dateiinhalt als Eingaben an fdisk umleiten
     fdisk < input.txt
 - Pipes und Filterprogramme
   Mit Pipes ist es möglich, auf einen Datenstrom nacheinander die Funktionalität
   mehrerer Systemprogramme (Filter) anzuwenden
   Die ausgabe eines Programms wird nicht auf stdout ausgegeben, sondern nach stdin
   des auf die Pipe folgenden Programmes umgeleitet
   Bsp: $ls -l /etc | more
   Filterprogramme: 	sind Programme, die von stdin (Tastatur) lesen und nach stdout (Monitor) schreiben

Nur Filterprogramme können hinter dem Pipe-Symbol verwendet werden

   Beispiele für Filter:
     - $cat		liest von stdin und gibt Daten unverändert zeilenweise nach stdout aus
     - $more
     - $less
     - $tee		T-Stück, leitet stdin nach stdout und in Datei um
     - $sort		sortiert den Datenstrom

Optionen: -b führende Leerzeichen werden ignoriert -r reverse, umgekehrte Reihenfolge (absteigend) -f ignoriert Groß- und Kleinschreibung -n numerische Sortierung (Zahlen statt Ziffernfolgen) -u unique, unterdrückt mehrfache Zeilen +n sortiert nach n+1ter Spalte (n=Platzhalter für Zahl) Bsp: $who | sort +1 sortiert nach der 2. Spalte -t legt Trennzeichen zwischen Spalten fest (für Spaltensortierung) Bsp: $cat /etc/group | sort -t: +2 -n | more

     - $wc		word count, zählt Wörter (Standardmäßig) Zeichen oder Wörter im Datenstrom

Optionen: -l lines, nur Zeilen zählen

     - $cut		schneidet Spalten aus dem Datenstrom aus

Optionen: -f Liste der Spaltennummern (Standard-Trennzeichen ist Leerzeichen) Elemente der Liste werden mit Kommata getrennt -d delimiter, bestimmt das Spaltentrennzeichen Bsp: $who | cut -d " " -f1 $cat /etc/group | cut -d: -f1,3 | sort -t: +1 -n | more -c char, Zeichenbereich, Zeichenposition von links beginnend Bsp: $who | cut -c 1-3 $who | cut -f 1 -d " " | sort -u | wc -l Ausgabe der Anzahl momentan angemeldeter Benutzer:

     - $grep suchbegriff	filtert Zeilen nach Suchbegriff

^suchbegriff Suchbegriff muss am Anfang der Zeile stehen suchbegriff$ Suchbegriff muss am Ende der Zeile stehen Optionen: -v invertiert die Ausgabe - alle Zeilen, die NICHT den Suchbegriff enthalten Bsp: $who | grep tty1 zeigt alle Benutzer, die auf tty1 angemeldet sind $ls -l /etc | grep ^l zeigt alle Symlinks in /etc an -i ignoriert Groß- und Kleinschreibung -R rekursiv, Durchsuchen von Verzeichnissen Bsp: $cat /etc/passwd | cut -d : -f 1 | grep system Gibt es einen Benutzer "system" in der passwd $grep ^system /etc/passwd dito $cat /etc/passwd | grep bash | cut -d : -f 1 Namen alles Benutzerkonten, die die bash als Shell verw. $grep bash$ /etc/passwd | cut -d : -f1 dito

     - $tr set1 [set2]		translate, kann Zeichen aus Datenstrom ersetzen oder entfernen

set1 zu ersetzende Zeichen set2 die ersetzenden Zeichen, optional, standardmäßig werden Zeichen entfernt -s set1 squeeze, mehrere aufeinanderfolgende gleiche Zeichen werden auf 1 reduziert Bsp: $who | tr -s " " $who | tr -s " " | cut -d " " -f1,2 $who | tr -s " " | cut -d " " -f1,2 | tr " " "\t" tr ersetzt Leerzeichen durch Tabulator -d delete, entfernt alle Zeichen innerhalb set1 komplett aus dem Datenstrom Bsp: $who | tr -d "()" $who | tr " ()" "*[]" $who | tr "a-z" "A-Z" $who | tr [:digit:] "X"

     - $tail			die letzen 10 Zeilen des Datenstroms

-n die letzten n Zeilen -c n die letzten n Zeichen Bsp: $cat /etc/passwd | tail $tail /etc/passwd $who | tail -1

     - $head			die ersten 10 Zeichen

-n die ersten n Zeilen -c n die ersten n Zeichen Bsp: $cat /etc/passwd | head $head /etc/passwd $who | head -2 $cat /etc/passwd | head -28 | tail -1 die 28. Zeile aus der passwd Datei ausgeben $cat -n /etc/passwd | grep 28 | cut -f 2 dito

     - $tee dateiname		T-Stück, Umleitung in Standardausgabe UND in eine Datei

-a append, anhängen statt überschreiben

9. Zugriffsrechte auf Dateien und Verzeichnisse

 - Linuxdateisysteme unterstützten die Vergabe von Berechtigungen für den Zugriff auf Dateien/Verzeichnisse
 - hierbei werden drei verschiedene Abstufungen unterschieden:
   1. was darf Ersteller/Besitzer einer Datei/eines Verzeichnisses
   2. was dürfen die Mitglieder der Gruppe, der die Datei zugeordnet ist
   3. was dürfen alle anderen Benutzer
 
 - Das Rechteprinzip
 - $ls -l
 - d   rwxr-xr-x       2        lxuser		users  	4096  	16. Aug 12:39 	Desktop
   Typ Rechtemaske Linkzähler Besitzer		Gruppe 	Größe 	Datum/Uhrzeit	Name
 - für Berechtigungen relevant: 	Rechtemaske	Besitzer	Gruppe
 Interpretation der Rechtemaske
 

|user |group |others

 --------------------|-------------------------|-----------------------|-----------------------
 Wertigkeit der Bits |	2^2	2^1	2^0	|2^2	2^1	2^0	|2^2	2^1	2^0	
 --------------------|-------------------------|-----------------------|-----------------------
 Volle Rechtemaske   |	r      	w	x	|r	w	x	|r	w	x
 --------------------|-------------------------|-----------------------|-----------------------
 Standard f. neu     |	r	w	x	|r	-	x	|r	-	x
 zu erstellende Verz.|				|			|
 --------------------|-------------------------|-----------------------|-----------------------
 Oktal		      |		7		|	5		|	5
 --------------------|-------------------------|-----------------------|-----------------------
 Standard f. neu     |	r	w	-	|r	-	-	|r	-	-
 zu erstellende Dat. |				|			|
 --------------------|-------------------------|-----------------------|-----------------------
 Oktal		      |		6		|	4		|	4
 
 
 zusätzlich existiert noch eine Dreiergruppe sogenannter Spezialbits
   
 4  |  2  |  1  |	Wertigkeit
 ---|-----|-----|----------------------------------------------------------------
 s  |     |     | SUID-Bit (set user id),  ersetzt das x des Users durch ein s
 ---|-----|-----|----------------------------------------------------------------
    |  s  |     | SGID-Bit (set group id), ersetzt das x von Group durch ein s
 ---|-----|-----|----------------------------------------------------------------
    |     |  t  | Sticky-Bit		    ersetzt das x von Others durch ein t
 --------------------------------------------------------------------------------
 SUID-Bit:	wird für Programmdateien gesetzt, um das Ausführen dieser durch normale Benutzer

mit den Rechten des Besitzers zu ermöglichen (meist root)

 SGID-Bit:	wird für Programmdateien gesetzt, um das Ausführen dieser durch normale Benutzer

mit den Rechten der Gruppe zu ermöglichen wird für Verzeichnisse gesetzt, um alle neu erstellten Dateien und Verzeichnisse der gleichen Gruppe zuzuordnen, wie dem übergeordneten Verzeichnis

 Sticky-Bit:	wird für Verzeichnisse gesetzt, in denen unterschiedliche Benutzer Schreibrechte besitzen

Es bewirkt, dass jeder nur seine eigenen Dateien löschen darf

 Beispiele:	$ls -l /usr/bin/passwd

-rwsr-xr-x 1 root shadow 80268 3. Dez 2008 /usr/bin/passwd ---- - root=Besitzer - SUID - ermöglicht normalen Benutzern Schreibzugriff auf die Passwort-Datei (/etc/shadow) mit den Rechten von root

ls -l /usr/bin/write -rwxr-sr-x 1 root tty 9892 3. Dez 2008 /usr/bin/write --- - tty=Gruppe - SGID - ermöglicht normalen Benutzern den Zugriff auf Terminals (tty's) mit den Rechten der Gruppe tty

$ls -ld /tmp drwxrwxrwt 38 root root 4096 16. Aug 14:30 /tmp - Sticky - verhindert das Löschen fremder Dateien

 Interpretation der Rechte auf Dateien und Verzeichnisse
   r	-	read, Inhalt von Dateien lesen

Inhalt von Verzeichnissen lesen

   x	-	eXecute, Datei darf ausgeführt werden (wird z.B. vom C-Compiler automatisch gesetzt) für Binärdateien und Skripte

In Verzeichnis darf gewechselt werden

   w	-	write, Inhalt von Dateien darf geändert werden

Inhalt von Verzeichnissen darf geändert werden


 -es gibt zusätzlich noch die Möglichkeit ACLs (Access Control List) zu vergeben,
  je nach Distribution unterschiedlich und zu speziell & verwirrend (siehe Windows)
 Setzen der Dateikreierungsmaske (umask)
 - die volle Rechtemaske für Verzeichnisse ist 777, für Dateien hingegen 666
 - aus Sicherheitsgründen werden bei neuen Dateien/Verzeichnissen die Schreibrechte für group und others abgezogen
   die wird durch den umask-Wert festgelegt (0022)

Verzeichnis Dateien ----------- ------- 0777 0666 -0022 -0022 ----- ----- 755 644

 - $umask		zeigt aktuelle Einstellung
   $umask oktalwert	ändert den umask-Wert
 - Hinweis: Änderungen mit umask wirken sich nur auf neue Dateien/Verzeichnisse aus,
   und gelten nur für die aktuelle Sitzung
 Ändern von Besitzer und Gruppe für Dateien/Verzeichnissen
   - Der Ersteller einer Datei ist automatisch der Besitzer der Datei
     und dessen Standartgruppe (primäre Gruppe) die zugeordnete Gruppe
   - zusätzlich zur Standardgruppe kann ein Benutzer Mitglied in weiteren Gruppen sein
 - $id [username]		zeigt Benutzer- und Gruppenzugehörigkeit an
 - $newgrp gruppenname	wechselt für die aktuelle Sitzung die Standardgruppe
 Ändern von Besitzer und Gruppe für Dateien/Verzeichnissen  
 - $chown :gruppe dateiname		Gruppe ändern
 - $chown benutzer dateiname		Benutzer ändern
 - $chown benutzer:gruppe dateiname	Benutzer und Gruppe ändern
     Optionen:	-R			für Verzeichnisse: ändert rekursiv Besitzer/Gruppe

für alle darin enthaltenen Dateien/Unterverzeichnisse

 - $chgrp gruppenname dateiname	Gruppe ändern für Dateien/Verzeichnisse
 - nur root darf Besitzer ändern
 - normale Benutzer dürfen Gruppe ändern, wenn sie Schreibrecht an der Datei haben
     und Mitglied der neuen Gruppe sind oder dass Passwort für eine Gruppe kennen (falls Gruppe Kennwort besitzt [selten])
 Ändern der Zugriffsrechte für vorhandene Dateien und Verzeichnisse
 - $chmod [-R] rechtemaske dateiname	change modus, 
   - oktale Notation der Rechtemaske
     $chmod 700 dir1			rwx --- ---
     $chmod 2770 dir2			rwx rws --- (SGID-But gesetzt ersetzt x-Bit der Gruppe)
     $chmod 5 dir3			--- --- r-x (führende Nullen muss man nicht angeben)
 
 Symbolische Notation der Rechtemaske
 
 wem sollen Rechte	      | hinzugefügt / entzogen / gesetzt werden	| Welche Rechte
 ----------------------------|-----------------------------------------|-----------------------
   u = User (Besitzer)	      |	     +           -             =	| r w x  s(SUID)
   g = Group (Gruppe)	      |	     +           -             =	| r w x  s(SGID)
   o = others		      |	     +           -             =	| r w x  t(Sticky)
   a = all (ugo)	      |	     +           -             =	| r w x
 ---------------------------------------------------------------------------------------------
 Bsp:	$chmod -R g+w /daten	für /daten und alle darin enthaltenen Dateien/Verzeichnisse

bekommt die Gruppe zusätzlich Schreibrecht vorher: nachher: 755 rwx r-x r-x rwx rwx r-x 775 644 rw- r-- r-- rw- rw- r-- 664

 Suchen von Dateien nach verschiedenen Kriterien
 -$find [verzeichnis] [kriterien]
   - neben dem Namen kann nach Informationen aus der Inode-Tabelle gesucht werden
     - Inode-Nr
     - Linkzähler
     -	Typ
     - Größe
     - Besitzer & Gruppe
     - Rechtemaske
     - 3 Zeitstempel

o letzter Zugriff lesend/schreibend (access time = atime) ls -lu o letzte Änderung des Inhalts (modification time = mtime) ls -l o letzte Änderung des Status (Inode) (inode change time = ctime) ls -lc

     siehe man-Page zu find

10 Benutzer- und Gruppenverwaltung

 - Dateien und ihre Formate
   Benutzerkonten werden in der Datei /etc/passwd gespeichert (Datei gehört root und hat Standard-Rechte)
     lxuser	 :x:   1000  :     100    :          Max Muetze             :   /home/lxuser   : /bin/bash
     Login-Name :*: User-ID : Gruppen-ID : ausführlicher Name (GECOS-Feld) : home-Verzeichnis : login-Shell (falls keine dann /bin/false)
     * = Platzhalter,früher wurde hier der Passwort-Hash gespeichert, heute steht dieser getrennt in /etc/shadow
   
   Gruppenkonten werden in der Datei /etc/group gespeichert
     video	  :x:     33     : lxuser,user1,user2
     Gruppen-Name:*: Gruppen-ID : Liste der enthaltenen Benutzer
   Kennwörter und Kennwortrichtlinien werden in der Datei /etc/shadow gespeichert

lxuser  : $2a$10$iRGXb3GWhliAusm46D4K2uus.z/XevmNSdLaYIqpgu7T7QQNYGePO: 14831 : 0 : 99999:7 ::: Login-Name : Passwort-Hash  : Änderungsdatum des PW : min. Passwort- : max. Kennwort- : Warntage vor  : Kulanztage nach : Ablaufdatum (Tage seit 1.1.1970) alter in Tagen alter in Tagen Passwortablauf Ablauf des PWs (Tage seit 1.1.1970) danach kommt noch ein reserviertes Feld ^

   Hinweis: Die Voreinstellungen für die Kennwortrichtlinien werden in der Datei /etc/login.defs gespeichert
   - Benutzerverwaltung
     Erstellen eines Benutzerkontos
     - $useradd benutzername		Erstellen des Benutzers "benutzername"

Optionen: -d homeverzeichnis legt Homeverzeichnis in /etc/passwd fest, Standard ist /home/benutzername -s shell Login-Shell, Standard ist /bin/bash -m erstellt automatisch das Homeverzeichnis, kopiert Inhalt von /etc/skel hinein -g gruppenname bestimmt die Hauptgruppe (Standard ist users) -G gruppenliste bestimmt Zugehörigkeit zu weiteren Gruppen (Standard ist video und dialout) -e mm/dd/yy expires, bestimmt Ablaufdatum des Kontos -c kommentar comment, für Kommentare im GECOS-Feld der passwd -f tage bestimmt Kulanztage für Anmeldung nach Ablauf des Kennwortes -p passworthash ein Passwort (bereits verschlüsselt als Hash) für das Konto -D defaults, zeigt Standardeinstellungen an bzw. ändert diese

     Hinweis: Nach dem Erstellen des Benutzerkontos muss mit dem Befehl "passwd benutzer" ein Passwort vergeben werden (aktiviert)

useradd erzeugt Einträge in den Dateien /etc,passwd, /etc/group, /etc/shadow

     Beispiele: $useradd -m hugo	erstellt Homeverzeichnis /home/hugo, kopiert Inhalt von /etc/skel hinein

$passwd hugo

$useradd -d /srv/www/htdocs webdesigner verwendet existierendes Webverzeichnis, keine grafische Anmeldung mgl. $passwd webdesigner

$useradd -s /bin/false -d /var/lib/empty mailuser Konto ohne Homeverzeichnis und ohne Shell (/dev/null wird nicht mehr von useradd akzeptiert, deshalb /var/lib/empty) $passwd mailuser

     Ändern eines Benutzerkontos
     - $usermod benutzername		Änderungen am Benutzerkonto vornehmen

Optionen: -l benutzername legt einen neuen Benutzernamen fest weitere Optionen wie bei useradd

     Löschen eines Benutzerkontos
     - $userdel benutzername		Löschen eines Benutzerkontos

Optionen -r löschen des Homeverzeichnisses

   - Gruppenverwaltung
     Erstellen von Gruppenkonten
     - $groupadd gruppenname		Erstellen einer Gruppe "gruppenname"

Optionen: -r Erstellen einer Systemgruppe (GID zwischen 100 und 499)

     Ändern von Gruppenkonten
     - $groupmod gruppenname

Optionen: -n gruppenname legt einen neuen Gruppennamen fest -A benutzerliste fügt Benutzerkonten der Gruppe hinzu -R benutzerliste entfernt Benutzerkonten aus der Gruppe

     - $groupdel gruppenname		Löschen eines Gruppenkontos
   - Verwalten des Status von Benutzerkonten
     Der Status eines Benutzerkontos hängt vom Passwort und Einträgen in der /etc/shadow ab
     - $passwd benutzername

Optionen: -S zeigt den Status an: PS -> password set (gültiges passwort gesetzt) NP -> no password (kein passwort vergeben) LK -> locked (konto gesperrt) -l lock, sperrt das Konto -u unlock, entsperrt das Konto -n tage minimales Kennwortalter -x tage maximales Kennwortalter -w tage Warntage vor Ablauf des Kontos -i tage Kulanztage vor Anmeldung nach Ablauf des Kennworts -e tage erzwingt Kennwortänderung beim nächsten Login

11 Erstellen und Einbinden von Dateisystemen

 - Gerätedateien für Datenträger
   IDE-Geräte unter /dev
     hda -> 1. Gerät am 1. Controller
     hdb -> 2. Gerät am 1. Controller
     hdc -> 1. Gerät am 2. Controller
     hdd -> 2. Gerät am 2. Controller
   IDE-Partitionen auf HDs
     hda1 -> 1. Partition auf hda
     [...]
     hda4 -> 4. Partition auf hda
     ----------------------------
     hda5 -> 1. logische Partition innerhalb einer erweiterten
     hda6 -> 2. logische Partition innerhalb einer erweiterten
     [...]
   SCSI-Geräte unter /dev
     sda -> 1. Gerät
     sdb -> 2. Gerät
     sdc -> 3. Gerät
     [...]
   SCSI-Partitionen analog zu IDE
   SATA-/USB-Geräte werden wie SCSI-Geräte bezeichnet
   
   CDROM-/DVD-Lauwerke (IDE)
     sr0 -> 1. Laufwerk
     sr1 -> 2. Laufwerk
   
   Diskettenlaufwerke
     fd0 -> 1. Laufwerk
     fd1 -> 2. Laufwerk
   
   Hinweis: in neueren Distributionen werden IDE-Laufwerke ebenfalls wie SCSI-Laufwerke bezeichnet
 
 - Partitionieren von Festplatten
     - $fdisk gerätename	wird interaktiv über Befehle bedient (Buchstaben)

Optionen: -l Partitionstabelle auflisten Befehle: m Hilfe zu den Befehlen p zeigt Partitionstabelle an n neue Partition erstellen t Typ des Dateisystem festlegen l Anzeige verfügbarer Dateisystem-/Partitionstypen d löscht Partition w Änderungen in Partitionstabelle schreiben und beenden t Änderungen verwerfen und Beenden

 - Erstellen von Dateisystemen
   Ein swap-System einrichten
     - $mkswap gerätedatei	swap-System auf !Partition! einrichten

Bsp: $mkswap /dev/sda5

     - $swapon gerätedatei	stellt System swap-Partition zur Verfügung (aktivieren)
     - $swapoff gerätedatei	deaktiviert swap-Partition
     - $free			zeigt Informationen zur Auslastung von RAM und swap an
   
   Ein Linux-Dateisystem erstellen
     - $mkfs gerätedatei	erstellt Dateisystem auf !Partition!

-t Typ des Dateisystems, z.B. ext2, ext3 oder reiserfs Bsp: mkfs -t ext3 /dev/sda6

 - Einhängen/Mounten von Dateisystemen
   Um auf ein Dateisystem zugreifen zu können, muss es im Linux-Verzeichnisbaum eingehängt (gemountet) werden
   Hierzu wird ein Mountpunkt benötigt (ein i.d.R. leeres Verzeichnis)
     - $mount gerätedatei

Optionen: -a mounte alle Dateisysteme, die in der /etc/fstab stehen -t typ Typ des Dateisystems, wenn -t nicht angegeben, versucht mount selbstständig zu erkennen -r readonly, im Nur-Lesezugriff einhängen -w readwrite, im Schreib-/Lesezugriff einhängen -o optionen Optionsliste angeben (users, defaults, umask= etc.) Optionen: ro readonly rw readwrite (no)exec dürfen ausführbare Dateien auf Dateisystem ausgeführt werden (no)suid darf SUID-Bit ausgewertet werden (no)auto wird Dateisystem beim Systemstart automatisch eingebunden (no)user darf normaler Benutzer das Dateisystem mounten (a)sync Dateisystemzugriff synchron (gepuffert) oder asynchron

 - Aushängen/Unmounten von Dateisystemen
     - $umount gerätedatei (oder mountpunkt)
   Hinweis: Bevor Datenträger entfernt werden, müssen sie ausgehängt werden!
 - Die Datei /etc/fstab (file system table)
   Hier werden Dateisysteme aufgeführt, die beim Booten des Systems automatische gemountet werden
   sollen oder durch normale User bei Bedarf gemountet werden dürfen
     Aufbau:
     Gerätedatei	Mountpunkt	Dateisystem	Mountoptionen	Dumpwert	Checkwert
     /dev/sda6		/daten		ext3		defaults, users	   0		    0
     Spalte 5 Dumpwert hat nur Bedeutung für das Programm dump zur Datensicherung
     Spalte 6 Checkwert legt fest, ob eine Dateisystemüberprüfung stattfindet und in welcher Reihenfolge
     (0 = kein Check, 1 = zuerst, 2 = danach usw ...)
   Hinweis: Partitionieren, Dateisystem erstellen, Mounten usw. kann auch bequem über YaST erledigt werden.
 - Überprüfen und Reparieren von Dateisystemen
    Zuprüfende Dateisysteme sollten nicht oder nur readonly gemountet sein

- $fsck gerätedatei Optionen: -t type Typ des Dateisystems -A alle aus /etc/fstab überprüfen -a automatische Reparatur ohne Rückfrage -c physische Überprüfung auf fehlerhafte Blöcke

 - Anzeigen der Speicherauslastung von Dateisystemen

- $df [gerätedatei] disk free, zeigt freien Speicherplatz an Optionen: -h human readable, in einfach lesbaren Größen anzeigen (KB,MB,GB) - $du [verzeichnis] disk used, zeigt Speicherbelegung für Verzeichnis an Optionen: -h human readable, in einfach lesbaren Größen anzeigen (KB,MB,GB) -s summary, summiert anzeigen

   Hinweis: Der mount-Befehl wertet die Datei /etc/fstab aus. Beim manuellen Mounten von Dateisystemen,
   die in der fstab aufgeführt sind, braucht nur ein Argument, entweder die Gerätebezeichnung oder
   Mountpunkt angegeben zu werden.


   Verwendung des Texteditor "vi"
   - der vi steht auf sämtlichen Unix- und Linux-Systemen zur Verfügung
   - die Linux-Version heißt aus urheberrechtlichen Gründen "vim" - vi improved
   - es existiert jedoch ein Symlink vi -> vim

- $vi [dateiname] - am besten direkt dateiname öffnen, damit man sich nicht mit noch mehr kryptischen Befehlen rumärgern muss :) Optionen: -R - readonly, Datei schreibgeschützt öffnen -r - restauriert Dateien nach Systemabsturz -w zeilen - die größe eines Fensters

   Es werden 3 Zustände innerhalb des vi unterschieden:
   - allgemeiner Befehlmodus
   - Texteingabemodus (Einfügemodus)
   - ZeilenBefehlmodus (ex-Modus)

_________ __________ i,I,a,A,o,O / \

   Start vi -> |Befehl|	----------------------------->	       (  Einfüge- )

| modus | Esc \ modus / __________ <----------------------------- \_______/ | ^ Esc  : | | oder | | Befehl v | ____________ | ex-Modus | ____________

   Befehle im allgemeinen Befehlmodus
   allgemeine Form: <Wiederholungsfaktor> <Befehl> <Texteinheit>
     -Wechsel in den Einfügemodus

i einfügen vor dem Cursor I einfügen am Zeilenanfang a einfügen hinter dem Cursor A einfügen am Zeilenende o einfügen von neuer Zeile hinter der aktuellen O einfügen von neuer Zeile vor der aktuellen

     -wichtige Befehle

dw löscht Wort ab Cursorposition 3dw löscht 3 Wörter dd löscht aktuelle Zeile 5dd löscht 5 Zeilen x löscht Zeichen ab Cursorposition 3x löscht 3 Zeichen u undo, macht letzte Befehle rückgängig (kann mehrfach betätigt werden) . Befehlwiederholung r zeichen ersetzt Zeichen an Cursorposition durch angegebenes zeichen y objekt kopiert eine texteinheit in den allgemeinen puffer yw kopiert Wort 2yw kopiert 2 Wörter yy kopiert aktuelle Zeile p fügt Pufferinhalt hinter dem Cursor ein P fügt Pufferinhalt vor dem Cursor ein

     - NavigationsBefehle

h links k hoch j runter l rechts w wortweise vorwärts b wortweise rückwärts 0 zum Zeilenanfang $ zum Zeilenende G zum Textende nG zur n. Zeile /suchbegriff zur 1. Fundstelle n vorwärts suchen N rückwärts suchen

     - wichtige Befehle im ex-Modus

- suchen&ersetzen :bereich s/suchtext/ersetzungstext/g Bsp: :1,$s/foo/bar/g von erster bis letzter zeile alle vorkommen von "foo" durch "bar" ersetzen

- wichtige Dateibefehle  :w speichert Text in aktueller Datei  :w dateiname speichern unter Dateiname  :3,10w dateiname speichert Zeile 3-10 in dateiname  :r dateiname fügt Inhalt von dateiname an Cursorposition ein  :wq speichern & beenden  :!q verwerfen & beenden


Unix/Linux für Fortgeschrittene






12 Prozessverwaltung unter Linux

 - Das Linux-Prozesskonzept
   Ein Prozess ist ein Programm zum Zeitpunkt der Ausführung
   Jeder Prozess bekommt seinen eigenen Speicherbereich zugewiesen, dieser besteht aus:
     - Codesegment	->	Programmcode
     - Datensegment	->	globale Variablen, geöffnete Dateien z.B.
     - Stacksegment	->	lokale Variablen und Rücksprungadressen bei Funktionsaufrufen
     - Systemsegment	->	Environment (Prozessumgebung)
   Prozesszustände
     - aktiv		->	Prozess wird von CPU verarbeitet
     - bereit		->	könnte die CPU nutzen, wartet auf Zuteilung
     - blockiert	->	wartet auf das Eintreten eines Ereignisses, ohne das der Prozess nicht fortgesetzt werden kann
   Im System wird für jeden Prozess ein PCB (Process Control Block) verwaltet. Dieser enthält folgende Informationen:
     - PID	(Prozess-ID)
     - PPID	(Parent Process ID) Elternprozess
     - UID \ _ Benutzer- und Gruppen-ID des Benutzers
     - GID /	der den Prozess gestartet hat
     - Status	Prozesszustand
   Das Prozesssystem ist hierarchisch aufgebaut:
     - init ist der Ursprungsprozess mit der PID 1, er startet weitere Prozesse
     - jeder Prozess hat genau einen Elternprozess, kann aber mehrere Kindprozesse haben
   Befehle zur Prozessverwaltung
     - $ps			listet aktuelle Prozesse auf

ohne Optionen Prozesse des aktuellen Benutzers, die einem Terminal zugeordnet sind -l Langformat, zusätzliche Informationen Spalte S zeigt den Status: D: nichtunterbrechbarer Schlaf (meist duch I/O) R: running oder runnable S: sleep (blockiert) T: trace (Prozess wurde angehalten) Z: zombie (defunct), beendet aber noch in Prozessliste -a alle Prozesse, die einem Terminal zugeordnet sind außer "session leaders" -e | -A alle Prozesse -u benutzername die Prozesse eines Benutzers -t terminal die Prozesse eines Terminals BSD-Optionen a alle Prozesse, die einem Terminal zugeordnet sind außer "session leaders" x alle Prozesse ohne Terminal

   - in KDE kann mit Strg+Esc die Systemüberwachung aufgerufen werden, die auch alle Prozesse anzeigt
     - $pstree			zeigt hierarchischen Prozessbaum auf

-p z

     - $top			interaktives Programm, listet Prozesse nach CPU-Nutzung sortiert auf

interaktive Befehle h Hilfe k kill, beendet Prozess nach angabe der PID r renice, ändern des Nice-wertes (Priorität) q beendet top

   Befehle zum Senden von Signalen
     - $kill pid		sendet ein Signal an einen Prozess

-SIGTERM | -15 Standardsignal, wenn kein Signal angegeben wird, zum Beenden (terminieren) eines Prozesses -SIGKILL | -9 kill-Signal zum sofortigen Beenden eines Prozesses (harte Methode)

     - $killall prozessname	sendet ein Signal an alle Prozesse mit dem Namen
   
   Hinweis: Übersicht über signale liefert man 7 signal

Beenden von Prozessen auch mit top möglich Sämtliche Prozesse werden im virtuellen Dateisystem /proc abgebildet Pro Prozess existiert ein Unterverzeichnis mit der PID als Name viele Systemdienste hinterlegen ihre PID in einer Datei mit der Dateinamenserweiterung .pid im Verzeichnis /var/run

   Befehle zum ändern der Prozesspiorität
     Zusätzlich zur Standardpriorität wird ein sogenannter Nice-Wert verwaltet Dieser dient in erster Linie
     zum vermindern der Priorität von Benutzerprogrammen, kann aber durch root auch zum erhöhen verwendet werden
     Prioritätswerte:	1 (niedrigste) bis 20 (höchste)
     Nice-Werte: positive Werte vermindern die Priorität, negative Werte (nur root) erhöhen die Priorität

-20 höchste Priorität ... 0 ... 19 niedrigste Priorität

     - $nice programm		startet ein Programm mit verminderter Priorität
     - $renice nicewert pid	ändert den nice-Wert für einen laufenden Prozess
   Vorder- und Hintergrundverarbeitung auf der Shell
     Um nach dem Start eines Programms auf der Shell weiterzuarbeiten, ohne auf die Beendigung warten zu müssen,
     kann man das Programm im Hintergrund ausführen lassen.
   Programm im Hintergrund starten:
     - $programm &

Bsp: $sleep 60 & sleep als Hintergrund-job starten [1] 8448 Job-ID PID

   Vordergrundprogramme in den Hintergrund bringen

Strg + z stoppt das Programm, der Shellprompt erscheint, das Programm bekommt eine Hintergrund-Job-ID

     - $bg (job-id)		background, setzt Programm im Hintergrund fort
   Hintergrundprogramme in den Vordergrund bringen
     - $fg (job-id)		foreground, setzt Programm aus dem Hintergrund im Vordergrund fort
   Alle Hintergrund-Jobs anzeigen
     - $jobs			zeigt alle Jobs an
   Zeitgesteuerte Ausführung von Programmen
     Einmalige Ausführung mittels AT-Dienst
     - Prüfen bzw. Starten des Dienstes atd (nur root)
     - $rcatd status		ob Dienst läuft

$rcatd start Dienst starten $insserv atd Dienst wird beim nächsten Booten automatisch gestartet

   AT-Jobs verwalten
     - $at datum/uhrzeit	erstellt einen AT-Job, erwartet eingaben von stdin

at> befehl1 [Enter] at> befehl2 [Enter] at> Strg+D mit EOF abschließen

   Bsp:$at 14:30		14:30 halt

$at 17:00 08/25/10 um 17:00 am 25.08.2010 $at now + 10 minutes in 10 Minuten

$atq AT-Queue, zeigt Warteschlange an Job-Nr Datum/Zeit Benutzer $atrm job-nummer löscht einen AT-Job

   Hinweis: Die AT-Jobs werden bis zu ihrer Ausführung als Dateien im Verzeichnis /var/spool/atjobs gespeichert
   Es ist möglich bestimmten Benutzern die Verwendung von at zu erlauben oder zu verbieten, standardmäßig
   ist es für jeden erlaubt. Konfiguriert wird dies in den Dateien /etc/at.allow bzw. /etc/at.deny
   Da dem AT-Dienst kein Terminal zugeordnet ist, werden Ausgaben nach stdout u. stderr dem Benutzer
   des AT-Jobs per Mail zugestellt /var/spool/mail/benutzername
   Periodisch zeitgesteuerte Jobs mit cron
     Voraussetzung: Der cron-Dienst muss laufen
     - $rccron status
     Die Verwaltung der Jobs erfolgt mittels der Datei crontab
     - es exisitiert eine crontab für das System (/etc/crontab)
     - jeder Benutzer hat die Möglichkeit eine eigene crontab zu verwalten
     
     -$crontab

-l zeigt die crontab an -e startet den "vi" zum Editieren der crontab -u benutzername die crontab eines anderen Benutzers verwalten

     Aufbau einer Benutzer-crontab:	
     -$man 5 crontab
     
     # minuten		stunden		monatstag	monat	wochentag	befehl
     

0 8,15 * * 1-5 myscript Mo - Fr um 8:00 und 15:00 0,30 * * * * myscript2 zu jeder vollen und halben stunde * * * * * myscript3 im Minutentakt (kleinste Einheit) */5 * * * * myscript4 aller 5 Minuten 0 1-23/2 * * * myscript5 jede zweite stunde von 1-23uhr 0 16 24 12 * myscript6 immer am 24.12. um 16:00

     Hinweis: Die ersten 4 Spalten sind UND-verknüpft
     die Argumente in den Spalten, falls mehrere vorhanden sind, sind ODER-verknüpft
     die crontab des Systems /etc/crontab enthält eine zusätzliche Spalte für ein Benutzerkonto vor der Befehlespalte
     Für Wartungsarbeiten im System, die zu keinem bestimmten Zeitpunkt aber in regelmäßigen Intervallen ausgeführt werden
     sollen, gibt es vorgefertigte Verzeichnisse für stündliche, tägliche, wöchentliche und monatliche Abarbeitung
     (/etc/cron.hourly,/etc/cron.daily,/etc/cron.weekly,/etc/cron.monthly) in die root ein entspr. Skript legen kann
     Wochentage:	0	sonntag

1 montag 2 dienstag 3 mittwoch 4 donnerstag 5 freitag 6 samstag 7 sonntag


13 Installation eines OpenSuse Linux 11.1

   Vorüberlegungen
     -welche Distribution
     -eventuell Live-System zum testen Hardwareerkennung/-anforderungen
     -ist Linux einziges System od. soll Dualboot eingerichtet werden
     -welchen Bootmanager wo installieren (MBR oder Bootsektor)
     -welche Partitionierung benötigt wird
     -in welchem Umfang soll Linux installiert werden (mit grafischer Oberfläche oder nur Konsolen)
     -in welchem Umfang sind zuvor Daten zu sichern z.B. MBR sichern
   Sichern des Master Boot Record und Bootsektor vor der Partitionierung (wenn bereits anderes Betriebssystem vorhanden)
     -während der Installation mit Strg+Alt+F2 auf 2.Konsole wechseln
     -Sicherungsmedium mounten mittels		mount /dev/sdb1 /mnt
     -Sicherung der Sektoren mit dem Befehle dd (MBR)
      dd if=/dev/sda 	of=/mnt/windows.mbr 	bs=512 		count=1

Input File Output File Blockgröße Anzahl

   Sicherung der Sektoren mit dem Befehle dd (Bootsektor)
      dd if=/dev/sda1 	of=/mnt/windows.bs 	bs=512 		count=1
   Zum zurücksichern von MBR und BS erfolgt analog, wobei if und of getauscht werden.
   Konfiguration des X-Server mit sax2
   Das Programm sax2 ermöglicht die Konfiguration der Hardware des X-Servers
   (I/O-Schnittstellen: Grafikkarte, Monitor, Tastatur, Maus)
     -Wechsel in runlevel 3 (ohne grafisches System)
     -#init 3
     -#sax2		(Hinweis: sax2 kann NICHT den verwendeten Grafiktreiber ändern, nur Auflösung und Monitorgröße)
     -Zurück wechseln in runlevel 5
     -#init5
   Hinweis: Die Konfigurationsdatei des X-Server ist /etx/X11/xorg.conf
   Sax2 erstellt beim Laden dieser Datei immer eine Sicherungskopie /etc/X11/xorg.conf.saxsave

14 Softwareinstallation und Paketverwaltung

   Software kann in folgenden Formen bereitgestellt werden
   - als Tarball (komprimierte Archive, enthalten meist Quellcode, Endung *.tar.gz, *.tgz, *.tar.bz2)
   - als RPM-Pakete (Redhat Package Manager)
     Aufbau einer RPM-Datei:		abc-2.0.7-1.i586.rpm

Paketname: abc Version: 2.0.7 RPM-Version: 1 (Release) Architektur: i586 (Intel-kompatible 32bit-Systeme) x86_64 (Intel-kompatible 64bit-Systeme)

     Enthält:		Informationen zu Paketabhängigkeiten

Kurzbeschreibung der Software Sämtliche Dateien mit Installationspfad u.a. (md5sum, PGP-Signatur usw.)

     Installierte Pakete werden in einer Datenbank verwaltet unter /var/lib/rpm
     Paketverwaltung mit yast

Kategorie Software -> Repositories (Software-Quellen/Paket-Quellen): DVD, Online-Quellen, Netzwerkfreigaben -> Software installieren/löschen (Softwaremanagement) -> Filter (Suchen, Paketgruppen u.a.) -> Abhängigkeiten werden automatisch aufgelöst -> eventuelle Konflikte müssen manuell gelöst werden (Vorschlag auswählen)

     Paketverwaltung mit rpm auf der Konsole

-$rpm [dateiname] [dateiname2] ... -i | --install installieren -U | --update Update/Installation -e | --erase Deinstallation --oldpackage Downgrade eines installierten Paketes auf eine ältere Version

     Bsp: Finden eines Paketes und Installation in einem Befehl

-$find /pfad -name "dateiname*" -exec rpm -i {} \; ^ Platzhalter für gefundene Datei(en) ^ Ende der Argumente (eigtl. nur ; da ; Metazeichen muss escaped werden mit \)

     Abfragen von Paketinformationen

-$rpm -q paketname fragt Informationen zu installierten Paketen ab -qa listet alle installierten Pakete auf, sinnvollerweise mit | grep zu kombinieren -qi paketname listet Kurzinformationen (RPM-Header) zu einem Paket auf -ql paketname listet alle Dateien des Paketes auf -qlv ^ zusätzlich noch Informationen wie ls -l -qc zeigt Konfigurationsdateien an -qf dateiname zeigt an, zu welchem Paket die Datei gehört -$rpm -qp rpm-datei fragt Informationen über RPM-Datei ab

     Verwenden von Tarballs

Obwohl RPM-Pakete die bevorzugte Installationsmethode sind, kann es vorkommen, dass bestimmte Programme oder Treiber nicht als RPM-Pakete, sondern nur als Tarballs vorliegen. Hierbei wurden 2 Funktionen hintereinander auf die Software angewandt: - alle Dateien wurden in ein Archiv zusammengefasst (unkomprimiert von tar = tape archiver) - Komprimierung der Archivdatei (.tgz/.gz = GNU Zip | .bz2 = BZip2)

     Entpacken von Tarballs

-$tar Tape Archiver -x extract, extrahieren -c create, Archiv erzeugen -t test, listet Inhalt des Archivs auf -f dateiname filename, Dateiname -j | --bzip2 Archiv durch bzip2 filtern (nur beim komprimieren benötigt) -z | --gzip Archiv durch bzip2 filtern (nur beim komprimieren benötigt)

Hinweis: tar kann selbst nicht komrimieren/dekomprimieren durch Angabe der entsprechenden Option ruft tar implizit ein Komprimier-Programm auf (s.o.) um die abschließende Installation der Software durchzuführen muss die im Archiv enthaltene Readme-Datei gelesen werden (Installations-Anleitung)

     Erstellen von Tarballs

-$tar -cjf archivname.tar.bz2 datei-/verzeichnisname

     Komprimierprogramme

-$gzip dateiname GNU Zip-Programm, erstellt komprimierte Versionen der Dateien mit der Erweiterung .gz -c belässt Dateien unverändert, gibt die komprimierten Daten auf stdout aus -r rekursiv für Verzeichnisse -d dekomprimieren -> gunzip -wert Komprimierungsfaktor 1 -> niedrig ... 6 -> Standard ... 9 -> max. Komprimierung -$bzip2 erstellt komprimierte Versionen der Dateien mit der Erweiterung .bz2 -k keep, erhält ursprüngliche Datei restliche Optionen analog zu gzip


     Tastenkombination zum Midnight Commander
     Tab	wechselt zwischen Fenstern
     Enter	führt Programme/Skripte aus, wechselt Verzeichnisse oder betrachtet Dateien
     Strg+s	Datei suchen (Anfangsbuchstaben) im aktuellen Verzeichnis
     Strg+o	Hauptfenster ausblenden, Shell anzeigen
     Einfg	zum Markieren oder Demarkieren einzelner Dateien

F5 kopiert markiertes F6 verschiebt markiertes / benennt um F8 löscht markiertes

     F3	Datei anzeigen
     F4	Datei editieren
     F7	Verzeichnis anlegen
     Alt+Enter	übernimmt Dateinamen der markierten Datei in die Befehlezeile


15 Der Linux-Systemstart

   Der Bootloader GRUB
   - ein Teil von GRUB wird im MBR oder einem Bootsektor installiert (stage1)
   - die übrigen Teile von GRUB befinden sich im Dateisystem /boot/grub (stage1.5, stage2)
     und werden von stage1 nachgeladen
   - das Bootmenü befindet sich in der Datei /boot/grub/menu.lst
   
   Aufbau der /boot/grub/menu.lst
   -globaler Bereich:

default 0 -> wenn keine Auswahl, wird erster Menüeintrag gestartet timeout 8 -> Zeitdauer der Menüanzeige in Sekunden

   -Abschnitte werden mit title "anzuzeigender Menüeintrag" eingeleitet

root (hd0,2) -> bestimmt die Partition, auf die sich nachfolgende Anweisungen beziehen (hd0,0) -> 1.HD, 1.Partition (hd0,2) -> 1.HD, 3.Partition kernel /boot/vmlinux kerneloptionen - der zu startende Kernel mit Kerneloptionen initrd /boot/initrd - die zu ladende initial ramdisk (minimales Dateisystem, wird in RAM geladen enthält die wichtigsten Treibermodule und Systemtools, die der Kernel benötigt, um das /-Dateisystem einzuhängen)

   -interaktiver Befehlsmodus von GRUB
     wenn Bootmenü erscheint
     Esc	grafisches Menü verlassen
     e		ausgewählten Eintrag editieren
     c		wechselt in Befehlsmodus	(Prompt: grub> )

Bsp: manuelles Booten im Befehlsmodus (falls menu.lst defekt o.ä.) grub> root (hd0,4) Dateisystemtyp sollte angezeigt werden, bspw: grub> kernel /boot/vmlinuz root=/dev/sda6 grub> initrd /boot/initrd grub> boot

     Hinweis: im grafischen Bootmenü können zusätzliche Optionen eingetragen werden, die an den Kernel übergeben werden

im textbasierten Menü mittels e die Menüzeile u. Kerneloptionen ergänzen

Bsp: 1 | init=1 -> Runlevel 1 (Anmeldung nur für root, kein Multiuser [sog. FailSafe-Modus]) init=/bin/sh -> startet anstelle des Init-Programms eine root-Shell ohne Anmeldung (zum Passwort ändern o.ä.)

     Schutz vor Änderungen im Bootmenü von GRUB bietet die Vergabe eines Passwortes in der Datei /boot/grub/menu.lst als MD5-Hash

Bsp: #grub > /grubmd5.txt grub> md5crypt erzeugen eines Password-Hashs password: Montag,13 eingeben des Passwortes encrypted: $hash... angezeigten Hash notieren/kopieren #vi /grubmd5.txt alles bis auf encrypted: $hash... löschen #vi /boot/grub/menu.lst default 0 timeout 8  :r /grubmd5.txt verschlüsselten Hash einfügen, wie in nächster Zeile anpassen password --md5 $hash...

     Zum Sichern des Bootens eines Menüeintrages durch Passworteingabe muss am Ende der title-Zeile
     lock  angehängt werden
     SysV-Init / Der Init-V-Prozess	(ursprüngliches Unix hieß System V)

typische Prozesse beim Systemstart - der Bootloader lädt den Kernel (Prozess 0) - der Kernel startet das Programm /sbin/init (Prozess 1) ° init wertet die Datei /etc/inittab aus ° initialisiert das System durch Aufruf der Skripte /etc/init.d/boot* ° ruft das Skript /etc/init.d/rc mit der Nummer des Standardrunlevels als Argument auf - das Skript /etc/init.d/rc startet weitere Skripte in dem Verzeichnis /etc/init.d/rc?.d/ (? = Nummer des Runlevel-Arguments) - Erreichen des Standardrunlevels -> Anmeldung ist möglich

Runlevel - Zustände, in denen das System mit unterschiedlicher Funktionalität betrieben werden kann (0-6 bzw. S) 0 -> Shutdown mit Halt/PowerOff 1 (S)-> SingleUser Mode, nur root-Login, auch FailSafe (abgesichert) genannt von neuen Distributionen 2 -> MultiUser Mode, mehrere (lokale) Benutzer aber ohne Netzwerk 3 -> MultiUser Mode, mehrere Benutzer mit Netzwerk 4 -> ungenutzt/reserviert 5 -> MultiUser Mode, mehrere Benutzer mit Netzwerk und X (grafischer Server) 6 -> Shutdown mit Reboot Der Standard-Runlevel wird in der /etc/inittab festgelegt (meist 5)

Aufbau der /etc/inittab id:runlevel:action:befehl -id -> eindeutige Zeichenkette -runlevel -> Nummer(n) der Runlevel -action -> wichtige Schlüsselwörter: initdefault -> Standardrunlevel bootwait -> nachfolgendes Befehle während des Bootvorgangs ausführen, auf Beendigung warten wait -> nachfolgendes Befehle ausführen, auf Beendigung warten respawn -> nachfolgendes Befehle ausführen, nach Beendigung sofort nochmal ausführen ctrlaltdel -> nachfolgendes Befehle ausführen, wenn Strg+Alt+Entf gedrückt wird sysinit -> Befehle wird nur einmal beim Booten ausgeführt once -> Befehle wird einmal bei jedem Runlevelwechsel ausgeführt

Wechsel der Runlevel $init runlevelnummer oder $telinit runlevelnummer

$runlevel zeigt vorherigen u. aktuellen Runlevel

Die Runlevel-Scripte (rc-Skripte bzw. Start-/Stop-Skripte) - abhängig von der Nummer des Runlevels (n) werden die Skripte im Verzeichnis /etc/init.d/rc(n).d (symbolische Links auf das eigentliche rc-Skript im übergeordneten Verzeichnis /etc/init.d) - die Skripte, die mit Sxy... beginnen, werden beim Eintritt in den Runlevel mit dem Argument 'start' aufgerufen - Symlinks mit niedrigeren Zahlen werden vor Skripten mit höheren Zahlen ausgeführt - hierdurch werden die im Runlevel benötigten Dienste gestartet - die Symlinks, die mit Kxy... beginnen, werden beim Verlassen des Runlevels mit dem Argument 'stop' aufgerufen - Symlinks mit niedrigeren Zahlen werden vor Skripten mit höheren Zahlen ausgeführt - hierdurch werden die im Runlevel benötigten Dienste gestoppt - die Symlinks in den Runlevelverzeichnissen werden für das automatische Starten/Beenden von Diensten verwendet - mit dem Befehl $insserv skriptname werden die Symlinks in den Runlevelverzeichnissen erzeugt (Suse-spezifisch) - $insserv -r skriptname entfernt die Symlinks für das automatische Starten

Manuelles Starten/Beenden von Diensten - Aufruf der rc-Skripte mit entsprechendem Argument (start|stop|restart|status|...) Variante 1: #/etc/init.d/skript (start|stop|restart|status|...) Bsp: #/etc/init.d/atd start Variante 2: #/etc/rc.d/skript (start|stop|restart|status|...) Bsp: #/etc/rc.d/atd start Um die Skripte ohne Pfadangabe nutzen zu können, wird i.d.R. ein weiterer Symlink mit dem Präfix rc im Verzeichnis /usr/sbin erstellt (Suse-spezifisch) Variante 3: #rcskript (start|stop|restart|status|...) Bsp: #rcatd start Variante 4: #service skript (start|stop|restart|status|...) Bsp: #service atd start

Hinweis: Für das Erstellen eigener Start-/Stop-Skripte dient die Vorlage /etc/init.d/skeleton Im Yast (Kategorie System) steht der Runlevel-Editor zur Verfügung. Er legt fest welche Dienste automatischt gestartet werden

16 Drucken unter Linux Druck- oder Spooling-Systeme - Drucker werden über Druckwarteschlangen angesprochen (print-queues) - Druckaufträge werden in der Queue gespoolt (in Warteschlange eingereiht) und nacheinander an den Drucker gesendet - Oft liegen die Daten nicht in der Sprache des Druckers vor und werden beim Verlassen der Queue über einen Filter (=Druckertreiber) zum Drucker gesendet. Der Filter wandelt die Daten in die Druckersprache um (PostScript, PCL [Printer Common Language] u.a.) - folgende Spooling-Systeme können unter Linux eingesetzt werden - (BSD)-LPD (Line Printer Daemon) Urvater vieler Spoolssysteme, der in BSD-Unix verwendet wurde Drucker werden in Datei /etc/printcap verwaltet für jeden Drucker wird unter /var/spool eine (oder mehrere) Queue (Warteschlange) als Verzeichnis erstellt für unterschiedliche Druckformate unterschiedliche Warteschlangen, z.B. raw, ascii, color usw. der Dienst heißt lpd und wird über /etc/init.d/lpd start|stop|restart ... verwaltet - LPRng (Line PrinteR next generation Weiterentwicklung des BSD LPD - CUPS (Common Unix Printing System) ist ein völlig neu entwickeltes Spooling-System pro Drucker wird nur eine Warteschlange benötigt komplexe Filtersysteme ermöglichen die Umwandlungder Daten in die Druckersprache unterstützt eine Vielzahl von Druckern der Dienst heißt cupsd und wird über das Start-/Stop-Skript /etc/init.d/cups verwaltet - Drucker unter cups mittels yast installieren prüfen ob folgende Softwarepakete installiert sind: -cups -cups-client -cups-drivers -cups-libs -manufacturer-PPDs Yast -> Hardware -> Drucker - Verbindung auswählen (Anschluss des Druckers) - Filter/Treiber (PPD) auswählen - sinnvollen Namen für Druckerwarteschlange vergeben Verwaltung der Druckaufträge unter KDE K-Menü -> Dienstprogramme -> Drucken -> Drucken / Druckerverwaltung (system-config-printer) / kjobviewer Verwalten der Drucker auf der Konsole $lpr -P queuename datei druckt Datei in die Warteschlange queuename $lpq -P queuename zeigt Druckaufträge in der Warteschlange $lprm -P queuenane jobnr löscht Druckauftrag mit jobnr aus Warteschlange - löscht alle Druckaufträge in Warteschlange $lpc line printer control, interaktive Befehle lpc> status status der Warteschlangen anzeigen Hinweis: die oben aufgeführten Befehle stammen vom BSD-LPD-Drucksystem

Spezielle CUPS-Tools #cupsenable queuename Drucker aktivieren, Warteschlange bleibt erhalten #cupsdisable queuename Drucker deaktivieren, Warteschlange bleibt erhalten #accept queuename aktiviert Warteschlange #reject queuename deaktiviert Warteschlange Verwendung des Tools lpadmin zum Instalieren und Löschen von Druckern PPD-Datei muss vorhanden und bekannt sein, CUPS sucht diese unter /usr/share/cups/model $lpadmin -p queuename -E -v parallel:/dev/lp0 -m DEC/LJ250-lj250.ppd.gz ^ aktiviert Drucker ^ Geräteschnittstelle (device-uri) socket://IP:9100 (TCP Standardport LPD) ^ PPD-Name $lpadmin -x lj250 löscht den Drucker

Hinweis: Die Drucker werden in der Datei /etc/cups/printers.conf Die Druckjobs werden unter /var/spool/cups abgelegt/verwaltet

Verwaltung von Druckern über das CUPS-Web-Frontend CUPS bringt einen eigenen Webserver mit, der auf localhost TCP-Port 631 läuft http://localhost:631 | http://127.0.0.1:631 die Konfiguration des Webservers erfolgt über die Datei /etc/cups/cupsd.conf

17 Kernel und Kernelmodule kompilieren

Ein zusätzliches Kernelmodul kompilieren - der monolithische Kernel vmlinuz wird zur Laufzeit durch Kernelmodule ergänzt (Module werden i.d.R. automatisch geladen) - die Kernelmodule müssen zur Kernelversion passen, sie befinden sich unterhalb von /lib/modules/$(uname -r) $uname -r zeigt Version des aktuell gestarteten Kernels an - Linux-Distributionen haben oft angepasste Kernel, die vom Original (Vanilla-Kernel, Plain-Jane-Kernel) abweichen - Vanilla-Kernel: www.kernel.org - OpenSuse: download.opensuse.org - Hersteller von Hardware-Komponenten stellen oftmals die Gerätetreiber als Quellcode für ein Kernelmodul als Tarball zur Verfügung - Voraussetzung zum Kompilieren sind folgende Pakete: kernel-sources (passend zur Version des aktuellen Kernels) gcc (GNU C-Compiler) gcc-c++ (GNU C++-Compiler) make (verarbeiten von Makefiles, Teil der autotools [automake])

Befehles zur Modulverwaltung $lsmod zeigt eine Liste der geladenen Module Bsp.: $lsmod |grep e1000 $modinfo modulname zeigt Informationen zu einem Modul an Bsp.: $modinfo e1000 | more $modprobe modulname lädt das Modul u. evtl. benötigte Module Bsp.: $modprobe e1000 $rmmod modulname entfernt das Modul aus dem Speicher Bsp.: $rmmod e1000 $lsmod | grep e1000 Hinweis: Normalerweise werden Module vom Kernel automatisch geladen, zusätzlich werden die Dateien /lib/modules/versionsnr/modules.dep -> Modulabhängigkeiten /etc/modprobe.conf -> Zuordnung von Gerätenname zu Modulen

Kernel Konfigurieren und Kompilieren - Kernelquellen und Kompiler müssen installiert sein - Das Konfigurieren der Kernelfunktionen erfolgt in der Datei /usr/src/linux/.config mit mehr als 1000 Funktionen, für die man wählt: yes - in den Kernel kompilieren module - als Kernelmodul kompilieren no - nicht kompilieren - als Ausgangsbasis soll die .config des aktuellen Kernel dienen $cd /usr/src/linux $make cloneconfig erzeugt .config (oder aus /proc/config.gz entpacken oder aus /boot/config-$(uname -r) kopieren)

Bearbeiten der Kernel-Konfiguration mittels Konfigurationstool $make xconfig KDE-Version, QT-Bibliothek (braucht qt3-devel-Bibliotheken) $make gconfig GNOME-Version, GTK-Bibliothek (braucht gtk2-devel-Bibliotheken u.a.) $make menuconfig Textbasiert, NCURSES-Bibliothek (braucht ncurses-devel-Bibliothek)

Kompilieren des Kernels und der Module $make clean löscht alte Objektdateien $make bzImage kompiliert nur den Kernel (vmlinuz) -> /usr/src/linuxarch/x86/boot/bzImage $make modules erzeugt die Kernelmodule (wenn etwa nur an Modulauswahl etwas geändert wurde) oder $make all alles oben aufgeführte

Installieren des Kernels und der Module

$mv /usr/src/linuxarch/x86/boot/bzImage /boot/vmlinuz-neu - im Bootmenü von GRUB neuen Eintrag zum booten des neuen Kernels hinzufügen - evtl. initrd erzeugen und installieren nach /boot/initrd-neu - oder automatisch (je nach Distribution) $make modules_install installiert Module nach /lib/modules/$(uname -r) $make install installiert Kernel nach /boot, erzeugt evtl. initrd, Bootloader-Einträge u.a.

Manuelles Installieren /usr/src/linux/arch/x86/boot/bzImage kopieren nach /boot/vmlinuz-version /usr/src/linux/System.map kopieren nach /boot/System.map-version $make modules_install oder manuell alle Module (.ko*) kopieren nach /lib/modules/version evtl. /boot/grub/Device.map anpassen $mkinitrd -k vmlinuz-version -i initrd-version -M /boot/System.map-version Bootloader-Einträge hinzufügen in /boot/grub/menu.lst nach Schema: title Angezeigter_Name_im_Bootloader root (hd0,1) kernel /boot/vmlinuz-version root=/dev/sda2 evtl. noch weitere Optionen wie resume=, vga=, splash=, initrd /boot/initrd-version

18 Grundlagen der Shellprogrammierung -Login-Skripte Systemweite Skripte Folgende Dateien werden von der Shell bei der Anmeldung jedes Benutzers ausgeführt: /etc/profile wird einmalig beim Login ausgeführt, enthält z.B. die Einstellun der umask 022 /etc/profile.local ist anzulegen für eigene Einstellungen, ergänzt /etc/profile /etc/bash.bashrc wird beim Starten einer Bash-Shell abgearbeitet (auch bei Subshells) enthält shellspezifische Einstellungen, z.B. Aliase /etc/bash.bashrc.local ist anzulegen für eigene Einstellungen, ergänzt /etc/bash.bashrc

-Benutzerspezifische Skripte befinden sich im /home-Verzeichnis jedes Benutzers und werden nach den systemweiten abgearbeitet ~/.profile wird einmalig nach dem Login dieses Benutzers abgearbeitet ~/.bashrc wird beim Starten jeder Bash-Shell durch diesen Benutzer abgearbeitet

Hinweis: Die Datei /etc/issue legt die Beschriftung der Login-Textkonsolen (tty) fest Nach der Anmeldung mit einer Login-Shell wird der Text aus der Datei /etc/motd angezeigt (Message of the Day)

Aliase Ein Alias ist ein alternativer Name für einen Befehleaufruf. Er ermöglicht einen komplexen Befehleaufruf zu vereinfachen. $alias name='komplexer Befehl' erstellt einen Alias für die aktuelle Shell $alias zeigt alle gesetzten Aliase an $unalias löschen eines Alias Um Aliase für sämtliche Shells zu definieren, können die Befehle in die Datei /etc/bash.bashrc.local (für alle User) oder in die ~/.bashrc oder ~./alias eingetragen werden

Metazeichen

 ; trennt Befehle auf einer Zeile, werden hintereinander abgearbeitet befehl & startet befehl im Hintergrund befehl1 && befehl2 befehl2 wird nur ausgeführt, wenn befehl1 erfolgreich war (ohne Fehler -> exit-status 0) befehl1 || befehl2 befehl2 wird nur ausgeführt, wenn befehl1 nicht erfolgreich war (exit-status !=0) $[...] arithmetische Berechnung Bsp: echo $[5+2] $(befehl) oder `befehl` Kommandosubstitution, Ergebnis des Befehls wird in die Befehlszeile übernommen Bsp: es sind $(who | wc -l) benutzersitzungen aktiv (befehl1 ; befehl2) beide Befehle werden in der gleichen Subshell ausgeführt Bsp: (ls -la ; date) > inhalt.dir {...} bildet Zeichnekettenkombinationen mit den Ausdrücken innerhalb der Klammern .. zwischen Argumenten in Klammern heißt bis {1..9} = von 1 bis 9 , zwischen Argumenten in Klammern kennzeichnet Auflistungen Bsp: echo file.{conf,log} echo file{1..5}.{conf,log}

Shellvariablen Die Shell ermöglicht Werte in Variablen zu speichern, um später auf diese Werte zurückzugreifen Es existieren eine Reihe vordefinierte (Umgebungsvariablen), es können auch eigene Varaiblen definiert werden

Lokale Variablen - gelten nur in der aktuellen Shell var1=wert1 Legt Variable var1 an mit wert1 als Wert declare var2=wert2 Legt Variable var2 an mit wert2 als Wert let var3=wert3 Legt Variable var3 an mit wert3 als Wert Hinweis: let wird zum zuweisen eines arithmetischen Wertes zu einer Variable benutzt, Bsp: let var4=5+4

Globale Variablen - gelten auch in später gestarteten Subshells Sie werden durch Exportieren von lokalen Variablen erzeugt var1=wert1 export var1 export var2=wert2 declare -x var3=wert3 $export || $env zeigt alle globalen Variablen $env -i mit leerer Umgebung (keine Umgebungsvariablen) starten $set zeigt alle lokalen und globalen Variablen sowie Funktionen an $unset variablenname löscht eine Variable Hinweis: Änderungen an globalen Variablen haben keinen Einfluss auf Eltern-Shells (die Subshell erhält eine Kopie der Variablen der Eltern-Shell) Systemweite Varaiblendefinitionen erfolgen in der Datei /etc/profile bzw. /etc/profile.local bzw. ~/.profile auf Benutzername

Wichtige globale Systemvariablen

BASH Pfad der Bash-Shell BASH_VERSION Version der Bash HOME Homeverzeichnis des Benutzers LOGNAME Anmeldename des aktuellen Benutzers MAIL Pfad zur Mailboxdatei des aktuellen Benutzers OLDPWD vorheriges Arbeitsverzeichnis PWD aktuelles Verzeichnis PATH Suchpfade für Programmdateien PS1 Primärer Prompt der Shell PS2 Sekundärer Prompt der Shell

Steuerzeichen für PS1 \t Zeit \d Datum \s Name der Shell \w aktuelles Verzeichnis mit Pfad \W aktuelles Verzeichnis ohne Pfad \u Benutzername \h Hostname \\$ # für root sonst $ \\ Backslash

Standard OpenSuse: PS1="\u:\W \\$ "

Automatische Variablen ihr Einsatz ist oft nur in skripten sinnvoll

$0 ..... $9 enthalten die Parameter des Skriptaufrufes Bsp: $./myscript arg1 arg2 $0 $1 $2 $# enthält die Anzahl der Argumente $? enthält den exit-Status des letzten Befehlaufrufs (0 = erfolgreich, kein Fehler) $$ enthält die PId der aktuellen shell $@ enthält alle Argumente des Skriptaufrufes als einzelne Strings $* enthält alle Argumente des Skriptaufrufes als ein String

Erstellen von shellscripten Eine textdatei, die mit der Zeile

#! /bin/bash

beginnt, auch genannt "shebang". Sie legt den zur Abarbeitung des Skriptes erforderlichen Interpreter fest (die Shell /bin/bash im Beispiel) Kommentare im Skript beginnen mit # Zur Ausführung eines Skripts ist das Recht x (ausführen) für die Datei erforderlich

Bsp: $mkdir scripts; cd scripts $mcedit myscript #! /bin/bash echo Name des Scripts: $0 echo Argument1: $1 echo Argument2: $2 echo anzahl der Argumente: $# #Ende des Scripts $chmod a+x myscript $./myscript hallo welt

In interaktiven Skripten können Benutzereingaben mit dem Kommando: read variable in einer Variablen gespeichert werden

Bsp: ein script userid soll nach einem Benutzernamen fragen und dazu die entsprechende User-ID ausgeben cd scripts $mcedit myscript #! /bin/bash echo -n "Alta sag mir deinen Namen und ich sag dir wer du bist: " read user_name userid=$(grep $user_name /etc/passwd | cut -d: -f3) echo $user_name hat die UID $userid. $chmod a+x userid $./userid

Anweisungen für Verzweigungen

Die if - Anweisung

if ifbefehl1 then thenbefehlsliste1 [elif ifbefehl2 then thenbefehlsliste2] ... [else elsebefehlsliste] fi Hinweis: Wenn der exit-Code des ifbefehls 0 ist (Befehl erfolgreich, keine Fehler), wird der then-Zweig durchlaufen der Befehl test [optionen] wird häufig als ifbefehl zum Prüfen

Bsp: $cd scripts $mcedit fileexist #! /bin/bash if test -e $1 then echo Datei existiert else echo Datei nicht gefunden fi $chmod a+x fileexist $./fileexist /etc/services $./fileexist hallo

Hinweis: Eine Alternative für test [optionen] ist [ optionen ] statt "if test -e $1" alternativ "if [ -e $1 ]

Bsp: Lese- und Schreibrecht auf Datei prüfen if test -r datei1 -a -w datei1 then echo Vollzugriff fi

Bsp: Prüfen ob root das Skript ausführt (nur Bsp. für Zeichenkettenvergleich, keine gute Methode um auf root zu prüfen) if test $LOGNAME = root then echo Achtung, ihr Anmeldename ist root fi

Bsp: (im skript) Prüfen ob beim Aufruf eines Skripts genau 1 Argument übergeben wurde if test $# -ne 1 then echo Falsche Anzahl der Argumente fi ./skript arg1 -> $# = 1

Die case-Anweisung vergleicht einen Wert mit mehreren Suchmustern

case wert in muster1) befehlsliste1 ......  ;; muster2) befehlsliste2 ......  ;; ...... [ *) befehlsliste3] esac

Schleifen

Die for - Schleife

for laufvariable in werteliste do befehl1 ... ... done

Bsp: ein Skript soll 5 Zahlenwerte aufsummieren #! /bin/bash for x in 10 20 30 40 50 do summe=$[$summe + $x] echo $x done echo ------ echo $summe

Hinweis: Ohne Werteliste verwendet for die Argumente des Skriptaufrufs als Werteliste Bsp: Ein Skript newuser soll mehrere Benutzernamen als Argument übergeben bekommen und so Benutzer erstellen Aufruf: ./newuser max egon heidi #! /bin/bash for user do useradd -m $user passwd $user echo $user wurde angelegt, Passwort für $user wurde gesetzt echo ------------------------------------------------------ done