Prüfungsvorbereitung für die LPI 201-Prüfung
Auf dieser Seite habe ich meine prüfungsvorbereitenden Notizen für die LPI 201-Prüfung niedergeschrieben. Dieses soll natürlich keinen Online-Lern-Kurs repräsentieren, sondern nur den Überblick verschaffen, welche Themen in der LPI 201 Prüfung vorkommen können. Natürlich kann diese Notizen hervorragend dazu nutzen, um das angelernte Wissen zu überprüfen oder die Programme und Parameter noch mal ins Gedächtnis zu rufen
Prüfungsvorbereitende Notizen
Inhaltsverzeichnis
LPI 201 1
LPI 2.201.1 Kernel-Komponenten 1
LPI 2.201.3 Patchen eines Kernels 1
LPI 2.202.1 Systemstart 1
LPI 2.203.1 Dateisystem 1
LPI 2.203.2 Linux-Dateisysteme verwalten [4] 1
LPI 2.203.3 Erstellen und Konfiguration von Dateisystemoptionen [3] 1
LPI 2.204.1 RAID-Konfiguration [2] 1
LPI 2.204.2 Neue Hardware hinzufügen [3] 1
LPI 2.204.3 Software- und Kernelkonfiguration [2] 1
LPI 2.204.4 Konfiguration von PCMCIA-Karten [1] 1
LPI 2.209.1 Konfiguration eines Samba-Server 1
LPI 2.211.1 Systemausgaben protokollieren 1
LPI 2.211.2 Softwarepakete erstellen 1
LPI 2.211.3 Datensicherung 1
LPI 2.213.1 Tätigkeiten durch Skripte automatisieren 1
LPI 2.214.2 Rettungsmedien erzeugen 1
LPI 2.214.5 Allgemeine Probleme lösen 1
LPI 2.214.8 Probleme bei Umgebungskonfigurationen lösen 1
LPI 201
LPI 2.201.1 Kernel-Komponenten
Kernel-Images werden mit gzip als zImage und bzImage (big zImage) nach /boot komprimiert. Es enthält den komprimierten Betriebssystemkern. Beide Versionen unterscheiden sich in der Art und Weise, wie sie geladen werden.
insmod ne io=0x300 irq=5 //
lädt das Modul mit Optionen
insmod
-f oder --force modul //
Erzwingen des Ladens
insmod
-k oder --autoclean modul
// Modul wird mit autoclean-Flag gestartet
modprobe
ppa // lädt
zuerst parport (abhängig) und dann ppa
modprobe
-r ppa // entfernt
das Modul aus dem Kernel
rmmod
-r printer //
entfernt erst die abhängigen Module, dann das
printer-Modul
rmmod
-a // Entlädt
alle nicht gebrauchten Module. 2x ausführen!
lsmod
// zeigt geladene Module an. Liest im Prinzip die Datei /proc/modules
aus
autoclean
// zeigt lsmod ein Modul als autoclean an, so wird es bei “unused”
automatisch entladen
uname – Anzeigen der Kernelinformationen
-s / --kernelname
= Kernelname anzeigen
-n
/ --nodename =
Hostname anzeigen
-r
/ --kernel-release
= vollständige Versionsnummer anzeigen
-v
/ --kernel-version
= Kernelversion anzeigen
-m
/ --machine =
Hardwareplattform anzeigen (Bsp. I386)
-p
/ --processor =
Prozessorname anzeigen
-i
/ --hardware-platform
= Prozessorfamilie anzeigen
-o
/ --operating-system =
Betriebssystem anzeigen
kerneld bzw.
kmod
Automatisches
(Ent)Laden von Modulen: Die Arbeitsweise von kerneld
und kmod
sind identisch; beide werden, wenn der Kernel ein Modul benötigt,
von diesem geweckt und versuchen ihrerseits das angeforderte Modul
mit Hilfe von modprobe
zu laden. Dieser kerneld
wurde ab Kernel 2.2 durch den nun direkt im Kernel integrierten kmod
ersetzt.
/lib/modules/KERNELVERSION/modules.dep
enthält die Abhängigkeitsinformationen. Diese Datei wird
mittels depmod
erstellt.
depmod
-a / --all
durchsucht alle in modules.conf angegebenen Verzeichnisse.
depmod
-A // --quick
aktualisiert nur, wenn sich der Zeitstempel geändert hat.
depmod
-n // --show zeigt
an, was in die Datei modules.dep geschrieben wird.
depmod
-s // --syslog schreibt
Meldungen in das Syslog
/etc/modules.conf
In
der Datei /etc/modules.conf
werden
hauptsächlich die Parameter für die einzelnen Module
festgelegt, welche dann von modprobe
vor dem Laden abgearbeitet werden:
options
acx io=0x320 irq=7
Dieser
Eintrag sorgt dafür, dass das Modul acx automatisch mit diesen
Parametern geladen wird.
alias eth0 acx //
lädt tatsächlich das Modul acx
alias
eth1 off // kann
nicht geladen werden, da OFF
Des Weiteren können Befehle vor/nach dem Laden und vor/nach und nach dem Entladen ausgeführt werden:
pre-install
Modul Kommando
// Vor dem Laden
post-install
Modul Kommando
// Nach dem Laden
pre-remove
Modul Kommando //
Vor dem Entfernen
post-remove
Modul Kommando //
Nach dem Entfernen
Übersetzung des Kernels
Konfiguration des Kernels
make config = Textbasiertes
Abfragen der Kerneloptionen
make menuconfig = Textmenü
zum Konfigurieren des Kernels
make xconfig = Grafisches
Menü, benötigt Xserver und QT-Bibliothek
make
oldconfig = versucht aus alter Config eine Config für neuen
bzw. gepatchten Kernel zu erstellen.
make cloneconfig =
Konfiguration des aktuell geladenen Kernel wird nach .config kopiert
(/proc/config.gz)
1. Schritt - Vorbereiten der Kernelübersetzung
make dep =
Erstellt die Abhängigkeitsinformationen. Wird nur bei der 1.
Übersetzung verwendet
make
clean = Entfernt
die Objektdateien (.o), ansonsten werden nur Module kompiliert, die
geändert wurden
make
mrproper = Wie
clean, zusätzlich werden die Konfigurationsdateien (u.a.
.config) gelöscht
make
distclean =
Entsorgt neben »make mrproper« die Rückstände
von Patchvorgängen
2. Schritt - Übersetzung
des Kernels
make
zImage = (Alt)
komprimiert den Kernel nach /usr/src/linux/arch/i386/boot/zImage
make
zdisk = (Alt)
Compiliert den Kernel und kopiert ihn auf eine Diskette -->
Bootdisk
make
bzImage = Erstellt
und komprimiert Kernel nach
/usr/src/linux/arch/i386/boot/bzImage
make
bzdisk = Die neue
Methode, eine Bootdisk mit großem (big) Kernel zu erstellen.
3. Schritt - Übersetzung
der Module
make
modules = Übersetzt
die ladbaren Module. Die Module liegen noch
in /usr/src/linux
4. Schritt - Installieren des
Kernels und der Module
a)
Kernel installieren
/usr/src/linux/arch/i386/boot/bzImage
nach /boot
kopieren
/usr/src/linux/System.map
nach /boot/System.map.Kernelversion
kopieren
b) Module installieren
make
modules_install =
kopiert (installiert) die Module in die Verzeichnisse in
/lib/modules/Kernelversion.
Dieser Befehl startet gleichzeitig depmod,
um die Module in /lib/modules/Kernelversion/modules.dep
einzutragen.
Initial
RAMDISK
Ist ein
komprimiertes Dateisystem-Image, welche dazu benötigt wird, um
vorm Booten bestimmte Module zu laden, die benötigt werden.
linuxrc
= ausführbare Datei (Shellskript), welches mittels insmod die
Module lädt
mkinitrd-Skripte
= werden benötigt, um eine initrd zu erstellen. Von Distri zu
Distri unterschiedlich
/etc/mkinitrd/exe =
/etc/mkinitrd/files = enthält vollständigen Pfad der
Dateien, die eingebunden werden sollen
/etc/mkinitrd/mkinitrd.conf
= Standard-Einstellungen der RAMDISK
/etc/mkinitrd/modules =
definiert die Module, die durch linuxrc geladen werden
sollen
/etc/initrd/scripts/ = enthält beliebige Shellskripte,
die vorm Image-Laden durchgeführt werden
Bootloader LILO
Globale Einstellungen
timout= 80 // Nach 8 Sekunden
wird automatisch gebootet
lba32 // Booten von über 1024
Zylinder ist möglich
read-only // Root-System wird nur
lesend gebootet (und durch Skript neu gemountet)
prompt // kein
automatisches Laden, Anwender muss “drücken”
default=name //
Standard Default-Boot-Image
boot=/dev/hda // Device, was den
Bootsektor enthält
Einstellungen für die einzelnen Images
image=/boot/bzImage //
Pfad zum Kernel-Image
label=Linux Gentoo // Bootname
vga=0x318 //
VGA-Modus beim Booten, Modi durch vga=ask
ansehbar
initrd=/boot/initrd // Pfad zum Initial
RAMDISK
root=/dev/hda2 // Angabe der
Root-Partition
bitmap=DATEI // Hintergrundbild (640x480, 16
Bit)
delay=tsecs //
Zeit zum automatischem Laden des Kernelimages
lock //
map=/PFAD/zur Datei // Wird von lilo auto. Erzeugt. Enthält
Taballe mit HDD-Sektoren
menu-title=Meiks Lilo // Ändern des
Titels für das Boot-Menü
menu-scheme // Farb-Schema des
Bootloaders
message=/boot/message // Inhalt der Datei wird im
Bootmenü angezeigt (bitmap darf nicht gesetzt
sein)
password=geheim // Passwort im Klartext
restricted //
Mit password wird PW-Abfrage erreicht, wenn Kerneloptionen angegeben
wurd.
Bypass // Einzelnes Kernelimage wird ohne PW-Abfrage
gestartet
other=/dev/hda3 // Booten eines anderen
Betriebssystems (Windows)
table=/dev/hda3 // Partition, welches
die Partitionstabelle enthält
Bootloader
GRUB
(hd0,0)
= hda1
(hd0,2)
= hda2
(hd1,0) = hdb1
hd
=
Harddisk
fd
=
FloppyDisk
nd
= network disk
tux-laptop chef # ls /boot/grub/
default fs_stage1_5 stage1
device.map menu.lst stage2
e2fs_stage1_5 stage2_eltorito
fat_stage1_5 minix_stage1_5 xfs_stage1_5
grub.conf reiserfs_stage1_5 splash.xpm.gz
grub.conf
chainloader
+1
= Hierdurch kann der Windows-Kernel gebootet werden
rootnoverify
= Die Root-Partition wird nicht gemountet (Für Windows
notwendig)
password
–md5 xxxyyyzzz
= Passwortabfrage, Passwort mittels grub-md5-crypt
erstellt
device.map
Eine Beispieldatei device.map für ein Beispielsystem – angenommen wird eine im BIOS eingestellte Bootreihenfolge von IDE vor SCSI – sieht so aus:
(fd0)
/dev/fd0
(hd0)
/dev/hda
(hd1)
/dev/hdb
(hd2)
/dev/sda
(hd3)
/dev/sdb
Da die Reihenfolge von IDE, SCSI und anderen Festplatten abhängig von verschiedenen Faktoren ist und Linux die Zuordnung nicht erkennen kann, besteht die Möglichkeit, die Reihenfolge in der device.map manuell festzulegen.
/proc/sys/kernel/
tux-laptop chef # cat /proc/sys/kernel/
acpi_video_flags msgmax printk_ratelimit_burst
bootloader_type msgmnb pty/
cad_pid msgmni random/
cap-bound ngroups_max randomize_va_space
core_pattern osrelease real-root-dev
core_uses_pid ostype sem
ctrl-alt-del overflowgid sg-big-buff
domainname overflowuid shmall
fbsplash panic shmmax
hostname panic_on_oops shmmni
hotplug panic_on_unrecovered_nmi
tainted
kstack_depth_to_print pid_max threads-max
max_lock_depth printk version
modprobe printk_ratelimit
LPI 2.201.3 Patchen eines Kernels
Kernel-Patches einspielen
diff
DATEI_01 DATEI_02 = Zeigt die Unterschiede zwischen beiden
Dateien an
patch-2.6.16.gz = Patch von Kernel 2.6.15 auf
2.6.16
cd /usr/src/ && patch -p0 < patch-2.6.16
= -pZAHL legt Pfadtiefe
fest.
cd
/usr/src/linux && patch -p1 < patch-2.6.16
*.rej
= Dateien die angelegt werden, wenn Fehler beim Patchen
auftreten
Optimale
Vorgehensweise
cd
/usr/src; tar czvf old-linux.tgz linux //alten
Kernel sichern
make
clean //
Generierte Kernelquellen entfernen ==> Reinigung
gunzip
patch-2.6.16.gz //
Patch entpacken
patch
-p0 < patch-2.6.16
oder
zcat
patch-2.6.16 | patch -p0
patch
--reverse / -R = Patch rückgängig machen
patch
--dry-run = Patchen simulieren
patch -b / --backup =
Backupdateien (.orig) werden erstellt
patch -f / --force =
Patchen erzwingen
gzip und bzip2
gzip bzw. gunzip akzeptiert nur .gz bzw .tgz
gzip
-9 / --best = Höchster Kompressionsgrad
gzip -1 /
--fast = Schnellste Kompression (Standard ist 6)
gzip -c
datei > datei.gz = Mithilfe der Pipe bleibt die Originaldatei
erhalten. gzip datei löscht das Original
cat datei
| gzip > datei.gz = Mithilfe
der Pipe bleibt die Originaldatei erhalten. gzip
datei
löscht das Original
gunzip
datei.gz =
Entpackt das Archiv
gzip
-d datei.gz
= Entpackt das Archiv
bzip2 verwendet einen anderen, besseren Algorithmus als gzip
bzip2
datei =
Komprimiert datei zum Archiv datei.bz2
bzip2
-c datei > datei.bz2 =
Komprimiert datei zum Archiv datei.bz2 ohne Originaldatei zu
löschen
bunzip2
datei.bz2 =
bzip2-Archiv entpacken
bzip2
-d datei.bz2 =
bzip2-Archiv entpacken
LPI 2.202.1 Systemstart
Runlevel
Symbolischer Name:Liste der Runlevels:Art der Aktion:Befehl
Symbolischer
Name
= ID
Liste
der Runlevels
= Eine einfache Liste der Runlevels, in denen diese Zeile ausgeführt
werden soll. Der Eintrag 234 bedeutet also, dass diese Zeile im
Runlevel 2, 3 und 4 gültig ist.
Art
der Aktion
= Dieser Eintrag beschreibt, auf welche Art der folgende Befehl
gestartet werden soll.
Befehl
= Der Befehl (bzw. das Shellscript), der abgearbeitet werden soll.
Art der Aktion
respawn Der Prozess wird jedesmal neu gestartet, sobald er beendet ist. (Typisches Beispiel ist Getty)
wait Der Prozess wird einmal gestartet, wenn in den spezifizierten Runlevel gewechselt wird. Init wartet auf seine Abarbeitung und setzt erst dann seine Arbeit fort.
Once Der Prozess wird genau einmal gestartet, wenn in den spezifizierten Runlevel gewechselt wird.
boot Der Befehl wird beim Booten des Systems abgearbeitet. Das Feld mit den Runleveln wird ignoriert.
bootwait Wie boot, jedoch wartet init auf die Abarbeitung des Befehls, bevor die Arbeit fortgesetzt wird.
initdefault Standard-Runlevel. Das Runlevel-Feld darf nur einen Runlevel enthalten. Fehlt dieser Eintrag, so fragt der Init-Prozess beim Start, welcher Runlevel aktiviert werden soll.
powerwait Der genannte Befehl wird ausgeführt, wenn die Spannungsversorgung abfällt. Init wird darüber von einem Prozeß informiert, der mit der USV verbunden ist. Init wartet, bis der Prozess abgearbeitet ist.
powerfail Wie Powerwait, nur wartet init nicht auf die Abarbeitung, sondern fährt gleich fort.
powerokwait Der Prozess, der abgearbeitet wird, sobald init darüber informiert ist, dass die Spannung wieder da ist.
powerfailnow Dieser Prozess wird abgearbeitet, wenn init gemeldet bekommt, dass die Batterie der USV so gut wie leer ist und die Spannung trotzdem noch nicht wieder da ist. (Funktioniert natürlich nur, wenn die USV das mitteilen kann.)
ctrlaltdel Legt fest, was passieren soll, wenn Strg-Alt-Entf gedrückt wurde.
Beispiel /etc/inittab
# Voreingestellter Runlevel ist 3 id:3:initdefault: # Systemcheck beim Starten # Für einen speziellen Notfall-Runlevel (I) wird das Programm # /sbin/init.d/boot gestartet und init wartet auf seine Abarbeitung # (bootwait) si:I:bootwait:/sbin/init.d/boot # Die grundlegenden Scripts, die im jeweiligen Runlevel gestartet werden # sollen. Das heißt in diesem Fall, dass jeweils das Programm /etc/init.d/rc # gestartet wird. Als Parameter bekommt es den aktuellen Runlevel mit. # Das ist Linux spezifisch. In anderen Unix-Systemen werden einfach # verschiedene Scripts gestartet. l0:0:wait:/etc/init.d/rc 0 l1:1:wait:/etc/init.d/rc 1 l2:2:wait:/etc/init.d/rc 2 l3:3:wait:/etc/init.d/rc 3 #l4:4:wait:/etc/init.d/rc 4 #l5:5:wait:/etc/init.d/rc 5 l6:6:wait:/etc/init.d/rc 6 # Was soll im Single-User-Modus passieren # Zunächst wird wieder das Programm /etc/init.d/rc mit dem Parameter S # gestartet und auf seine Abarbeitung gewartet. ls:S:wait:/etc/init.d/rc S # Dann wird das Programm /sbin/sulogin aufgerufen und jedesmal wieder # gestartet, sobald es beendet ist. (respawn) ~~:S:respawn:/sbin/sulogin # Was passiert wenn Strg-Alt-Entf gedrückt wird ca::ctrlaltdel:/sbin/shutdown -r -t 4 now # Die Einstellungen für die Zusammenarbeit mit USVs pf::powerwait:/etc/init.d/powerfail start pn::powerfailnow:/etc/init.d/powerfail now pn::powerfail:/etc/init.d/powerfail now po::powerokwait:/etc/init.d/powerfail stop # für ARGO USV sh:12345:powerfail:/sbin/shutdown -h now THE POWER IS FAILING # Die Getty-Programme für die normalen Runlevel 1:123:respawn:/sbin/mingetty --noclear tty1 2:123:respawn:/sbin/mingetty tty2 3:123:respawn:/sbin/mingetty tty3 4:123:respawn:/sbin/mingetty tty4 5:123:respawn:/sbin/mingetty tty5 6:123:respawn:/sbin/mingetty tty6
ls -l /etc/init.d/rc1.d/
Im
init.d Verzeichnis befinden sich die Skripte. In den
Unterverzeichnissen befinden sich die Runlevels, welche symbolische
Links auf Skripte beinhalten.
S
= Startskript
K
= Bei Wechsel des Runlevels
.../init.d/WHATEVERd Symlinks: .../init.d/rc0.d/KxxWHATEVER .../init.d/rc1.d/K02sambad --> ../samba .../init.d/rc2.d/K10network -> ../network .../init.d/rc3.d/SxxWHATEVER --> ../WHATEVERd .../init.d/rc4.d/KxxWHATEVER --> ../WHATEVERd .../init.d/rc5.d/KxxWHATEVER --> ../WHATEVERd .../init.d/rc6.d/KxxWHATEVER --> ../WHATEVERd
Unter Suse Runlevel editieren
insserv
= Setzt Runlevel.Links
insserv apache2 = Setzt
symbolischen Link auf /etc/init.d/apache2
insserv -r apache2 =
Entfernt apache2 aus Runlevel
chkconfig
= zeigt alle vorhandenen Startskripte an und ob diese in
Runlevel-Vrz. gesetzt sind.
chkonfig
--add apache2 =
Hinzufügen zum Runlevel.
chkonfig
apache2 5 = Fügt Apache2 zum Runlevel 5 hinzu
chkonfig
-l / --list apache2 = Infos zum Runlevel-Eintrag von
Apache2
chkonfig -d / --del / off = Aus Runlevel entfernen
Unter Debian Runlevel editieren
update-rc.d
-n apache2 defaults = Apache2 zum Default-Runlevel
hinzufügen
update-rc.d apache2 remove = Apache2 aus
dem Runlevel entfernen
Init-Skripte
startproc
= Wird dazu genutzt, um Dienste zu starten. Sucht vorher nach PID des
Dienstes und startet erst dann, wenn der Dienst noch nicht gestartet
ist.
killproc = wird dazu genutzt, um Dienste zu
beenden
chckproc = Such nach laufenden Prozessen, die das
Programm verwendet
LILO
LILO boot: linuxneu root=/dev/hda7
In diesem Fall wäre also die Angabe root=/dev/hda7 ein Kernelparameter. Diese Methode ist natürlich nur geeignet, um bestimmte Dinge auszuprobieren oder Parameter einzugeben.
/etc/lilo.conf
append = Kernelparameter image = /boot/bzImage_2 label = linuxneu root = /dev/hdc1 append = "ne=0x320,5 mem=96M"
password=
Entweder in der globalen Sektion von /etc/lilo.conf stehen (dann
gilt es für alle Images) oder es wird für jedes Image extra
angegeben, dann gilt es für das Image, in dessen Kontext die
Anweisung steht. mandatory
Steht dieser Schlüsselbegriff in einer Image-Sektion der Datei
/etc/lilo.conf, so muß zum Booten dieses Images ein Passwort
eingegeben werden.
restricted
Ein
Passwort wird nur dann gefordert, wenn das Image mit zusätzlichen
Kernelparametern aufgerufen werden soll. Normales Booten funktioniert
ohne Passwort. Diese Angabe wird am häufigsten verwendet.
bypass
Kein
Passwort wird verlangt. Diese Angabe kann notwendig sein, wenn wir
ein globales Passwort setzen, aber ein bestimmtes Image (etwa
Windows) ohne Passwort bootbar machen wollen.
boot=/dev/hda lba32 prompt timeout = 80 message = /boot/message password = wrdlbrnft image = /boot/bzImage_2 label = linuxneu root = /dev/hdc1 restricted image = /boot/bzImage label = linuxorg root = /dev/hdc1 restricted other = /dev/hda1 label = windows bypass
LILO
Fehlercodes
(nichts)
Kein Teil von LILO wurde geladen. Entweder LILO ist gar nicht
installiert, oder es wurde nicht die Partition mit dem
LILO-Bootsektor gestartet.
`L'
FirstStageLoader wurde geladen, aber sie konnte die zweite Stufe
(/boot/boot.b) nicht laden. Wahrscheonlich physikalischer Fehler des
Boot-Datenträagers oder eine fehlerhafte Platten-Geometrie.
'LI'
SecondStageLoader konnte aber nicht gestartet werden
`LIL'
Die
zweite Stufe von LILO wurde gestartet, konnte aber die nötigen
Daten (Zeiger usw.) nicht aus der Map-Datei laden. Dies wird
typischerweise verursacht durch einen physikalischen Fehler des
Boot-Datenträgers oder eine fehlerhafte
Platten-Geometrie.
`LIL?'
Die zweite Stufe von LILO wurde an eine falsche Speicheradresse
geladen.
`LIL-'
Die
Daten in der Map-Datei sind ungültig.
`LILO'
Alle
Teile von LILO wurden erfolgreich geladen.
00
= no error, alles OK
01
= invalid disk command
0A
= bad sector flag
0B
= bad track flag
20
=
controller failure
40
= seek failure (BIOS), fehlerhafte Festplattenadressierung
99
= invalid second stage index sector, nicht lesbare map-Datei
9A
= no second stage loader signature, nicht lesbare map-Datei
AA
= Drive Not Ready
FF
= sense operation failed, Lese-/Schreiboperation schlägt fehl
aufgrund defekter Hardware
Manuell Booten
#
Grub manuell booten
grub>
kernel (hd0,0)/kernel-2.6.2 root=/dev/hda3
grub>
initrd (hd0,0) /initrd
grub>
boot
linux
3 =
Bootet den Eintrag Linux in den Runlevel 3
linux
root=/dev/hda3
= bindet hda3 als Root ein.
Kernel-Parameter
Mögliche
Parameter können unter
/usr/src/linux/Documentation/kernel-parameters.txt
angesehen werden.
cat
/proc/cmdline
= Auslesen der aktuell gesetzten Kernel-Parameter
acpi=on/off
=
ACPI aktivieren/deaktivieren
apci=on/off
= Advanced Programmable Interrupt Controler aktivieren
apm=on/off
= Advanced Power Management aktivieren
maxcpus=zahl
= Festlegen der maximalen CPUs, die durch SMP-Kernel genutzt werden
können
mem=128K/256M/1G
= Speichermenge festlegen
noapic
= deaktiviert apci
nosmp
= deaktiviert smp
vga=VIDEO-MODUS
= Videomodus setzen
vga=ask
= Mögliche
Video-Modi beim Booten zur auswahl geben
Dateisystem checken mit FSCK
fsck
= wertet alle Dateisysteme, die in /etc/fstab angegeben sind
fsck
-A =
wertet alle Dateisysteme in einem “Rutsch”. Wird von
Bootskripten genutzten.
fsck
-P =
When the -A
flag is set, check the root filesystem in parallel with the other
filesystems.
fsck
-b
= Erstellt neuen Superblock
LPI 2.203.1 Dateisystem
/etc/fstab
#
Device Mountpoint Fstype Options Dump Pass
/dev/hda1 /
ext2 rw,users 0 0
Mountoptionen
atime
Immer wenn auf eine Datei zugegriffen wird, die atime auf die
aktuelle Zeit setzen (Standard)
auto
Partition automatisch mounten
async Schreibvorgänge
werden gepuffert udn nicht direkt geschrieben
defaults
Benutzt
automatisch die Optionen dev,suid,rw,exec,auto,nouser
dev
Gerätedateien
werden interpretiert (d.h. sind echte Geräte)
exec
Starten von Programmen erlauben
noatime
Die Zugriffszeit nicht updaten (Geschwindigkeitsgewinn)
noauto
Die
Partition wird nicht automatisch gemountet (das Gegenteil zu
auto)
nodev
Gegenteil zu dev
noexec
Gegenteil
zu exec
suid
erlaubt
das Setzen von suid-Bits
nosuid
Das Gegenteil zu suid
nouser
Die Partition darf nur von root gemountet werden
user
Die
Partition darf von jedem gemountet werden
users Alle
User können wieder umounten, nicht nur von dem User
selbst
owner Nur
Besitzer der Gerätedatei darf mounten
remount
gemountetes
Dateisystem u- und wieder mounten, für Ändern von
Optionen
ro
Die
Partition wird nur lesbar gemountet
rw
Die Partition kann auch beschrieben werden
Dateisysteme
ext3 Ext3-Dateisystem
ext2
Second
Extended Filesystem
minix
Wird
selten noch auf Disketten verwendet.
romfs
Read-Only-Dateisystem,
welches auf Rettungsdisks eingesetzt werden kann
umsdos
Ist
das UMSDOS-Dateisystem
fat
Normale
Dateizuordnungstabelle, in der steht, welche Datei sich an welcher
Adresse befindet
msdos
Ist
die FAT (Dateizuordnungstabelle), die von Microsoft DOS verwendet
wird
vfat
Weiterentwicklung
von FAT hinsichtlich der Dateinamenslänge. Zu VFAT zählt
auch FAT32
proc
Status
des Systems, Kernel-Parameter ändern. Keine realen Dateien
nfs
NFS
(network file system) Dateisystem
smbfs
Samba-Dateisystem
iso9660
Das
Dateisystem vom CD-ROMs
hpfs
Das
"High Performance File System" von OS/2
ntfs
Ist
das Dateisystem vom Windows NT
/etc/mtab – welche Dateisysteme sind gemountet?
Jedes
Mounten zieht einen Eintrag in /etc/mtab
und /proc/mounts
mit sich.
user@sonne>
cat
/etc/mtab
/dev/hda5
/ ext2 rw,noexec,user=tux 0 0
mount
mount
-n =
Kein Eintrag in /etc/mtab
mount
-a =
Alle Einträge in fstab mounten
mount
-w =
read/write mounten
mount
-o option1,option2
= Optionen angeben
mount
-t
= Dateisysten angeben
mount -o loop datei.iso /mnt/cdrom = ISO-Image mounten
fuser & lsof – Zugriffe auf gemountete Laufwerke anzeigen
fuser
/media/cdrom
= Zugriffe auf das Laufwerk anzeigen
fuser
-k
/media/cdrom = beendet alle Zugriffe auf das Laufwerk
lsof
/media/cdrom = List Open Files
Swap-Datei / -Partition erstellen
1.)
Swap-Partition erstellen
mkswap /dev/hda2
swapon
/dev/hda2
2.) Swap-Datei
erstellen
dd if=/dev/zero of=swapfile bs=1024
count=1000000
mkswap swapfile
swapon
swapdatei
tune2fs wird benutzt, um einstellbare Parameter eines Linux Second Extended Dateisystems zu verändern.
Superblock
Jedes Dateisystem enthält einen Superblock. Er enthält folgende Verwaltungsinformationen des Dateisystems:
*
Größe des Dateisystems
* Anzahl freier Blöcke
* Liste der freien Blöcke
* Zeiger auf den ersten
freien Block in der Liste der freien Blöcke
* Größe
der Inode-Liste
* Anzahl freier Inodes
* Liste der
freien Inodes
* Zeiger auf den nächsten freien Inode in
der Liste der freien Inodes
* „Sperr-Felder“ für
Liste der freien Blöcke / Inodes (z.B. für defekte Blöcke)
* Anzeigefeld, ob Superblock verändert wurde
Blockgröße
1 Kbyte
= Lage des 1. Superblocks in Block 8193
Blockgröße
2 Kbyte
= Lage des 1. Superblocks in Block 16384
Blockgröße
4 Kbyte
= Lage des 1. Superblocks in Block 32768
dumpe2fs
/dev/hda2 = Liest u.A. die Lage der Superblöcke aus.
e2fsck
-b 32768 /dev/hda2 = Aktualisiert den Superblock.
LPI 2.203.2 Linux-Dateisysteme verwalten [4]
mknod
mknod erzeugt ein FIFO, Gerätedatei für ein zeichenorientiertes Gerät (character device) oder für ein blockorientiertes Gerät (block-device).
Major
Device Number =
Hauptgerätenummer,
verbindet Gerätedatei Treiber im Kernel.
Minor
Device Number
= Unterscheidet Geräte der gleichen
Art
../src/linux/Documentation/devices.txt
= vollständige Liste aller Gerätenummern
linux/major.h
=
verbindliche Liste aller registrierten Hauptgerätenummern
mknod NAME typ major minor
p
(pipe) erzeugt
eine FIFO Spezialdatei (wie mkfifo,)
b
(block) erzeugt
eine Gerätedatei für ein (gepuffertes) blockorientiertes
Gerät
c
(character) erzeugt
eine ungepufferte Gerätedatei für ein zeichenorientiertes
Gerät
u
(unbuffered) das
Gleiche wie c
m=755
Berechtigungen setzen
mknod dev/hda5 b 3 7
badblocks – Festplatte physikalisch prüfen
fsck
= filesystem check, Dateisystem prüfen
badblocks =
physikalische Fehler der Festplatte finden/reparieren
-b
Blockgröße =
Spezifiziert die Größe der Blöcke in Bytes.
-c
ANZAHL =
Gibt an, wieviel Blöcke auf einmal überprüft werden
sollen.
-f
=
force, Test erzwingen
-i
DATEI =
Ließt Liste von bereits existierenden badblocks aus Datei.
badblocks überspringt diese Blöcke
-o
Ausgabedatei =
Liste aller gefundenen
fehlerhaften Blöcke erstellen
-p
Anzahl =
Anzahl der Durchgänge
-n
=
Der nicht zerstörerische Read-Write Test wird durchgeführt.
-s
=
Statusbalken
-w
=
Der Read-Write Test wird durchgeführt.
reiserfsck
--badblocks/-B badblocks.log
= Liste der fehlerhaften Blöcke reiserfsck übergeben.
e2fsck
-l badblocks.log
= Liste der fehlerhaften Blöcke e2fsck übergeben.
Ext2-Dateistruktur
Das Dateisystem besteht aus so genannten Blöcken, welche bsp. 1 Kbyte, 2 Kbyte oder 4 Kbyte groß sein können. Sie legt die kleinste Dateigröße fest. Block besteht aus folgenden Komponenten:
Superblock – Gruppenbeschreibung – Blockbitmap – Inode-Bitmap – Inode-Tabelle – Datenblöcke
Inode
=
wird identifiziert über eine eindeutige Nummer für genau
die Datei, die er verwaltet.
Inode-Bitmap
= zeigt freie freie Inodes an
Inode-Tabelle
(128 Byte) = Verweise
auf Datenblöcke und Metadaten:
- Datei-Typ
-
Dateigröße
- Besitzer und Gruppe
- link-counter (wie
viele Namen hat eine Datei)
- access time (atime, letzter
Dateizugriff)
- modification time (mtime, letzte Änderung)
-
change time (ctime, letzte Änderung an den Metadateien der
inode)
Gruppenbeschreibung
= verrät für jeden Block, wo die weiteren Bestandteile
(Inode-Tabelle, etc) sind
superblock = Zeigt freie Blöcke
und Inodes im Dateisystem an, wann es gemountet und überprüft
wurde.
Valid Bit = 1 => Dateisystem gemountet
Valid
Bit = 0 => Dateisystem ausgehangen
stat DATEI = Metadaten der inode dieser DATEI anzeigen
dumpe2fs – Infos zum Ext2-Dateisystem
dumpe2fs -h
/dev/hda2 = Infos zum Dateisystem
dumpe2fs
-b
= Listet alle Blöcke auf, die als “Bad” markiert
sind
debugfs – Interaktiver Zugriff auf das Dateisystem
debugfs
-w
/dev/hda2 # -w um schreibbar zu verwenden, ansonsten nur Read-Only
>
stat
# Infos aus Inode auslesen
> freeb #
Blöcke freigeben
> undel #
Löschen rückgängig machen
Ext3-Dateisystem
Ist ein Journaling Filesystem, d.h. Alle Änderungen, etc werden in einem Journal (index) geschrieben, so dass Dateisystemüberprüfungen deutlich schneller sind.
mk2fs -j bzw. mkfs.ext3 – Ext3-Dateisystem anlegen
-b
1024/2048/4096 = Blockgröße definieren
-i
1024/2048/4096
= Bytes-Pro-Inode, sollte nicht kleiner als Blockgröße
sein, da sonst zu viele Inodes
-j
=
Ext3-Dateisystem erstellen
-L
LABEL
= dem Dateisystem Namen (Label) zuweisen
-m
% = Standardmäßig sind 5% der Datenblöcke für
root reserviert
-N
ZAHL= Legt die Zahl der Inodes fest.
-l
DATEI = Badblocks b. Anlegen d. Dateisystems übergehen
(Blockgröße muss bei badblocks gleich sein)
-S
= Letzter Rettungsversuch, nur superblock und Gruppenbeschreibung neu
schreiben, Inodes, Inode-Tabelle und Inodebitmap unverändert
lassen.
-T
news =
Voreingestelltes Profil: 1 Inode pro 4-KByte, newssystems
-T
largefile
= Voreingestelltes Profil: 1 Inode pro Mbyte
-T
largefile4 =
Voreingestelltes Profil: 1 Inode pro 4 Mbytes
ReiserFS, mkfs.reiserfs, mkreiserfs
- Journaling
Filesystem
- Baumstruktur (B*-Trees), nicht liniear aufgebaut.
Ähnlich von Datenbanken
- Keine festen Bereiche für
Datenblöcke und Inodes (Wird Inode gebraucht, wird sie
erstellt)
- Feste Blockgröße von 4096 Byte für die
Datenblöcke
- Jeder Datenblock lässt sich mehrfach
addressieren (anders als bei Ext2)
mkreiserfs
-b
512/1024/2048/4096/8192
= Blockgröße festlegen
-h
r5/rupasov/tea
= Hashfunktion definieren
-l
“label” = Label des Dateisystems bestimmen
-j
device-datei
= Das Journal von ReiserFS kann auf einer anderen Partition liegen
-s
8139 = Größe des Journals in Blöcken, max. 32749,
mind. 513
-B
datei
= Badblocks-Datei einlesen
debugreiserfs
debugreiserfs
= Infos zum ReiserFS-Dateisystem anzeigen
debugreiserfs
-j
/dev/hda1 =
Ausgabe des Journals
debugreiserfs
-b
badblocks =
Badblocks werden in Datei geschrieben
debugreiserfs
-1
BLOCKNUMMER
=
Gibt Inhalt des Blocks aus
debugreiserfs
-p
/dev/hda1 | gzip -c > bla.gz =
Metadaten extrahieren und speichern
tunefs – Ändern von Dateisystenparametern
-c
10 = Dateisystem wird nach dem 10. Mounten überprüft
-C
5 = Ändern der Anzahl der bereits durchgeführten
Mount-Vorgänge
-i
5d
/ 3w / 1m
= Läuft Syste durch, wird Check nach 5 Tagen / 3 Wochen / 1
Monat durchgeführt
-j
=
wandelt ein Ext2 in ein Ext3 Dateisystem durch Hinzufügen eines
Journals um
-T
DATUM = Ändern des letzten Checks
-e
continue
/ remount-ro / panic
= Nach Finden von Fehlern wird fortgefahren / Read-Only neu gemountet
/ ein Kernel-Panic ausgeführt
-m
% = Ändern reservierten Blöcke für Root (in
Prozent)
-r
ZAHL = Ändern reservierten Blöcke für Root (in
Blöcken)
-u
BENUTZER
= Dieser Benutzer darf die reservierten Blöcke nutzen
-g
GRUPPE = Diese Gruppe darf die reservierten Blöcke nutzen
-L
“Label” = Label ändern
-M
= Last-Mounted-Verzeichnis ändern
reisertunefs – Parameter des Reiser-Dateisystems ändern
-j
| --journal-device
= Das Journal von ReiserFS kann auf einer anderen Partition
liegen
--no-journal-available
= allows reiserfstune to continue when the current journal's block
device is no longer available. This might happen if a disk goes bad
and you remove it (and run fsck).
--journal-new-device
FILE =
FILE is the file name of the block device which will contain the new
journal for the file system. If you don't specify this, reiserfstune
supposes that journal device remains the same.
-s
| --journal-new-size N
Größe des neuen Journals in Blöcken
-b
= Angabe der Badblocks-Datei
-l
LABEL
= Label ändern
LPI 2.203.3 Erstellen und Konfiguration von Dateisystemoptionen [3]
Automounter
Dienst:
autofs
Konfig-Datei:
/etc/auto.master
Konfig-Datei
für Zugriff:
/etc/auto.[VRZ]
Auszug /etc/auto.master
Überwachtes
VRZ Was soll wie gemountet werden Nach 120 Sek auto.
umount
/media /etc/auto.media --time-out
120
Auszug /etc/auto.media
#
Wenn Zugriff auf /media/cdrom, dann mount /dev/cdrom mit den
entsprechenden
Optionen
cdrom -fstype=iso9660,ro,nodev,nosuid :/dev/cdrom
#
Wenn Zugriff auf usb-pladde, dann Gerät /dev/sda1
mounten
usb-pladde -fstype=auto,defaults :/dev/sda1
Erstellen eines ISO9660-Dateisystems
ISO9660-Level 1:
- Nicht
Case-Sensitiv
- 8.3-Regel (max 8+3 Zeichen)
- Nur 1 Punkt im
Dateinamen erlaubt
- Es gibt keine Dateiattribute
RockRidge-Format
- Unix-ähnliche Rechte möglich.
Joliet-Erweiterung
- von M$
entwickelt worden
- Dateinamen bis 64 Zeichen
- Pfadnamen bis
120 Zeichen
- Groß-/Kleinschreibung möglich
ISO9660-Level 2
- 31 ISO-Zeichen im Dateinamen
Erstellen eines Images mit mkisofs
mkisofs
-o image vrz_mit_zu_brennenden_dateien
mkisofs
-R = Image mit
RockRidge-Erweiterung anlegen
mkisofs
-T
= Rückwärtskompatibiltät gewähren (TRANS.TBL wird
in jedem Vrz angelegt)
Images von Datenträgern erstellen
cat /dev/fd0 >
datei
dd if=/dev/fd0 of=datei
dd if=input of=output conv=KODIERUNG
ascii =
Umkodierung von ebcdic
nach ascii
ebcdic =
Umkodierung
von ascii nach ebcdic
lcase
= Umkodierung in Kleinbuchstaben
upcase = Umkodierung
in Großbuchstaben
Image-Dateien mounten
mount -o
loop datei /mnt
losetup /dev/loop0 datei #
Image-Datei mit loop-back-device verknüpfen
mount
/dev/loop0 /mnt # Mounten
losetup -d /dev/loop0 # Am
Ende Datei vom Loop-Device trennen
UDF-Dateisystem – Universal Disk Format
- Dateinamen
können bis 255 Zeichen lang sein
- keine Beschränkung
der Verzeichnistiefe auf 8 Ebenen
- 8- und 16 Bit Zeichensätze
werden unterstützt
- Case-Sensitiv
- Speicherattribute
werden gespeichert
- Maximale Größe des Dateisystems im
Terybyte-Bereich
- Packet-Writing = optisches Medium als
wiederbeschreibbares Medium a la Wechselfestplatte nutzen
mkisofs
-dvd-video = DVD-Video-kompatibles UDF-Dateisystem
erstellen
mkisofs
-udf
= UDF-Dateisystem erstellen
Packet-Writing
Hierfür muss man die udftools installieren, welches die Tools pktsetup, mkudffs und cdrwtools enthält.
1.)
CD-RW
für Packet-Writing benutzen
cdrwtool
-d /dev/hdc -q # CD-RW
formatieren
pktsetup
dev_name /dev/hdc #
Datei mit CD-RW verknüpfen
mount
/dev/pktcdvd/dev_name
/mnt/CD-RW -t
udf -o rw,noatime
2.)
DVD-RW
für Packet-Writing benutzen
dvd+rw
/dev/hdc #
DVD formatieren
mkudffs
/dev/hdc #
UDF-Dateisystem erzeugen
mount
/dev/hdc /cdrom -t udf -o rw,noatime
LPI 2.204.1 RAID-Konfiguration [2]
Raid-0
= Striping, Steigerung der Performance
Raid-1 =
Spiegelung
Raid-3 = Striping mit Paritätsinformationen
auf separater Festplatte
Raid-4 = Wie Raid-3, nur größere
Datenblöcke
Raid-5 = Striping mit
Paritätsinformationen auf allen Festplatten verteilt
mkraid (veraltet)
Konfigurationsdatei = /etc/raidtab
Die Raidtools bzw. mkraid greifen auf einen persistenten Superblock zu, der sich auf allen Devices befinden. So kann das Raid initialisiert werden, wenn der Zugriff auf /etc/raidtab nicht möglich ist.
mkraid
/dev/md0 = Raid initialisieren
mkraid -C datei = Andere
Konfigdatei nutzen
mkraid -o / --upgrade = älteres
Array ohne Datenverlust auf die aktuelle Version des Kernels upgraden
raidstart
= Raid manuell aktivieren
raidstop = Raid manuell
deaktivieren
/proc/mdstat = Raid-Status auslesen
Voraussetzung, das Kernel Raid erkennt:
-
Kernel muss Raid-Autodetection aktiviert haben
- Raid-Devices
müssen persistenten Superblock haben
- Der Partitionstyp muss
0xFD bzw. fd sein
mke2fs -b 4096 -R stride=8 /dev/md0 = Spezielles Ext2 für Raid benutzen
Beispiel Raid-0
raiddev /dev/md0 raid-level 0 # Raid-Level definieren nr-raid-disks 2 # Anzahl der eingesetzten Devices chunk-size 4 persistent-superblock 1 device /dev/sdb6 raid-disk 0 # sdb6 ist 1. Device im Array device /dev/sdc5 raid-disk 1 # sdc5 ist 2. Device im Array
Beispiel Raid-1
raiddev /dev/md0 raid-level linear nr-raid-disks 2 nr-spare-disks 1 # Anzahl Ersatz-Festplatten chunk-size 32 # Blockgröße der Datenblöcke persistent-superblock 1 device /dev/sdb6 raid-disk 0 device /dev/sdc5 raid-disk 1 device /dev/sdd5 spare-disk 0
Beispiel Raid-5
raiddev /dev/md0 raid-level 5 nr-raid-disks 3 nr-spare-disks 1 persistent-superblock 1 parity-algorithm left-symmetric # Speicherung der Paritätsinformationen chunk-size 32 device /dev/sda3 raid-disk 0 device /dev/sdb1 raid-disk 1 device /dev/sdc1 raid-disk 2 device /dev/sdd1 spare-disk 0
mdadm
Konfigurationsdatei:
/etc/mdadm/mdadm.conf
Modi:
assemble
= bereits initialisiertes RAID zu einem neuen RAID
zusammenfügen
build = Legacy RAID ohne superblock
erstellen
create = neues Array mit superblock
erstellen
misc = diverse Aktionen auf einzelnen Devices
durchführen (Bsp. Auslesen superblock)
follow / monitor =
Überwachen der RAID-Devices
mdadm
--create --verbose /dev/md1 --level=1
--raid-devices=2 /dev/sda1 /dev/sdb1
mdadm -c
/dev/md1 -l 1 -n 2 /dev/sda1 /dev/sdb1
mdadm
-S /dev/md0 ==> Raid stoppen
mdadm -R
/dev/md0 ==> Raid starten
Wichtige Optionen in Verbindung mit mdadm –create
-c
| --chunk=GRÖßE
= Angabe der Chunk-Größe
-l | --level=RAIDLEVEL
= Raidlevel definieren
-p |
--parity=Left-Symmetric|Left-Asymmetric|Right-Symmetric
-n |
--raid-devices=ANZAHL =
Festlegen der eingesetzten Raid-Devices im Array
-x |
--spare-devices=ZAHL =
Festlegen der eingesetzten Ersatz-Devices
LPI 2.204.2 Neue Hardware hinzufügen [3]
Xfree86 / Xorg
xf86config
= Einfaches, textbasiertes Tool zum Erstellen der xorg.conf
XF86Setup
= Grafisches Werkzeug
xf86cfg = Grafisches Werkzeug, stellt
Komponenten Blockweise dar
xvidtune = verändert im
Nachinhein den Video-Modus
lsdev
Liefert Informationen über die I/O-Adressen, IRQ's und DMA-Kanälen der eingesetzten Hardware.
lspci – PCI-Bus auslesen
#
lspci
bus:slot.func
01:00.0
VGA compatible controller: ATI Technologies Inc RV350 [Mobility
Radeon 9600 M10]
02:05.0
Ethernet controller: Broadcom Corporation BCM4401 100Base-T (rev 01)
02:06.0 Network controller: Intel Corporation PRO/Wireless 2200BG
Network Connection (rev 05)
02:09.0 CardBus bridge: Ricoh Co Ltd
RL5c476 II (rev ac)
02:09.1 CardBus bridge: Ricoh Co Ltd RL5c476
II (rev ac)
02:09.2 FireWire (IEEE 1394): Ricoh Co Ltd R5C552
IEEE 1394 Controller (rev 04)
# lspci -n
00:00.0 0600:
8086:3340 (rev 21)
00:01.0 0604: 8086:3341 (rev 21)
00:1d.0
0c03: 8086:24c2 (rev 03)
-v,
-vv = mehr Infos ausgeben
-t = als Baumstruktur
anzeigen
-n = gibt die
ermittelten Werte (Hersteller, Devices, etc) als Zahlen aus
-b
= liefert Bus-abhängige
Darstellung durch direkte Abfrage des PCI-Busses
-i
DATEI = andere Datei anstelle von /usr/share/pci.ids
auslesen
-p
VERZEICHNIS = wertet anderes Vrz anstelle von /proc/bus/pci
aus
-m = Daten
ist maschinen-lesbarer Form ausgeben
-M
= Bus-Mapping-Modus (für Debugging-Zwecke)
lspci -s bus:slot.func
lspci
-s 0: = Alle Devices an Bus 0
anzeigen
lspci
-s 0 =
Alle Funktionen von Device 0 an jedem Bus anzeigen
lspci
-s 0.3 =
Die dritte Funktion von Device 0 an jedem Bus anzeigen
lspci
-s .4 =
Die dritte Funktion von Device 0 an jedem Bus anzeigen
lspci -d vendor:device = Auslesen von Infos mittels Angabe von Vendor- und Device-ID
setserial – Serielle Schnittstelle manipulieren
uart = Universal Asynchronous Receiver Transmitter
setserial
/dev/ttyS0 uart 16550A port 0x2F8 irq3
setserial
/dev/ttyS0 uart 16550A port 0x3F8 irq4
setserial GERÄTEDATEI
auto.irq autoconfig
stty – Terminaleinstellungen manipulieren
Ändert und zeigt Zeileneinstellungen des Terminals an
stty -a
= Terminaleinstellungen anzeigen
stty -F /dev/ttyS1 -a =
Einstellungen eines bestimmten Terminals anzeigen
stty -g |
--save = Einstellungen speichern
Konfiguration von USB-Geräten
usb-ohci.o
= USB 1.1-Modul
usb-uhci.o = USB 1.1-Modul
usb-ehci.o
= USB 2.0-Modul
usbmodules --device DEVICE = Listet alle verfügbaren Treiber für das USB-Gerät auf
/proc/bus/usb
= Existiert ab dem Zeitpunkt, ab dem das usbcore Modul geladen
wurde.
usbdevfs = Das usbfs-Dateisystem hilft bei der
Verwaltung von USB-Geräten (Verzeichnis /proc/bus/usb).
lsusb -v |
--verbose = ausführliche Infos über USB-Geräte
lsusb
-d bus:devnum = Infos über bestimmte USB-Geräte am
Bus
lsusb -D device = nur Infos zum USB-Gerät
anzeigen
lsusb -t = Infos in einer Baustruktur
anzeigen
lsusb -S 001 = Infos zu allen Devices mit der
Nummer 001
# cat
/proc/bus/usb/devices
T:
Bus=04 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2
B:
Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0
D: Ver= 1.10
Cls=09(hub ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0000
ProdID=0000 Rev= 2.06
S: Manufacturer=Linux 2.6.20-gentoo-r7
uhci_hcd
S: Product=UHCI Host Controller
S:
SerialNumber=0000:00:1d.2
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=255ms
LPI 2.204.3 Software- und Kernelkonfiguration [2]
tune2fs wird benutzt, um einstellbare Parameter eines Linux Second Extended Dateisystems zu verändern.
ATAPI & SATA
ATAPI
=
Parallele Schnittstelle (P-ATA) für Festplatte und CD-Laufwerke.
Übertragung in 16 Bit Worten (“Blöcken”). Den
ATA-Standard bezeichnet man auch als IDE.
SATA
= Serielle Schnittstelle, direkten Datenaustausch zwischen Prozessor
und Festplatte, Bit-für-Bit-Übertragung. Vorteile: höhere
Datenübertragung, Hot-Plug wird unterstützt.
hdparm – Lesen und Ändern von Festplatteneinstellungen
Wichtige Optionen
hdparm
-i /dev/hda
= Festplatteninformationen aus dem Kernel auslesen
hdparm
-I /dev/hda
= Informationen direkt vom Gerät lesen
hdparm
-d /dev/hda
= DMA-Informationen auslesen
hdparm
-d1 / -d0 /dev/hda
= DMA aktivieren (d1) und deaktivieren (d0)
hdparm
-c1 /dev/hda
= 32 Bit Modus aktivieren
Usage: hdparm [options] [device] .. Options: -a get/set fs readahead -A set drive read-lookahead flag (0/1) -b get/set bus state (0 == off, 1 == on, 2 == tristate) -B set Advanced Power Management setting (1-255) -c get/set IDE 32-bit IO setting -C check IDE power mode status -d get/set using_dma flag -D enable/disable drive defect-mgmt -E set cd-rom drive speed -f flush buffer cache for device on exit -g display drive geometry -h display terse usage information -i display drive identification -I detailed/current information directly from drive -Istdin similar to -I, but wants /proc/ide/*/hd?/identify as input -k get/set keep_settings_over_reset flag (0/1) -K set drive keep_features_over_reset flag (0/1) -L set drive doorlock (0/1) (removable harddisks only) -M get/set acoustic management (0-254, 128: quiet, 254: fast) (EXPERIMENTAL) -m get/set multiple sector count -n get/set ignore-write-errors flag (0/1) -p set PIO mode on IDE interface chipset (0,1,2,3,4,...) -P set drive prefetch count -q change next setting quietly -Q get/set DMA tagged-queuing depth (if supported) -r get/set readonly flag (DANGEROUS to set) -R register an IDE interface (DANGEROUS) -S set standby (spindown) timeout -t perform device read timings -T perform cache read timings -u get/set unmaskirq flag (0/1) -U un-register an IDE interface (DANGEROUS) -v defaults; same as -mcudkrag for IDE drives -V display program version and exit immediately -w perform device reset (DANGEROUS) -W set drive write-caching flag (0/1) (DANGEROUS) -x tristate device for hotswap (0/1) (DANGEROUS) -X set IDE xfer mode (DANGEROUS) -y put IDE drive in standby mode -Y put IDE drive to sleep -Z disable Seagate auto-powersaving mode -z re-read partition table
PIO-Mode
(0-4)
= Übertragungsrate 3,33 bis 16,66 MB/s
MDMA-Mode
(0-2)
= MultiWord DMA, ermöglicht es, mehr als nur einen Sektor pro
Interrupt zu lesen und zu schreiben
UDMA-Mode
(0-5) = Direkter Zugriff auf
Festplatte (DMA), benötigt keine CPU-Last, benötigt
DMA-Controller
Modus Wert Übertragungsrate
PIO
0 8 (8+0) 3,33 Mbyte/s
PIO
1 9 (8+1) 5,22 Mbyte/s
PIO 2 10 (8+2) 8,33 Mbyte/s
PIO 3
11 (8+3) 11,11 Mbyte/s
PIO 4 12 (8+4) 16,66 Mbyte/s
MDMA-0 32
(32+0) 4,2 Mbyte/s
MDMA-1 33 (32+1) 8,3 Mbyte/s
MDMA-2 34
(32+2) 16,67 Mbyte/s
UDMA-0
64 (64+0) 16,7 Mbyte/s UDMA16
UDMA-1 65 (64+1) 25,0
Mbyte/s UDMA25
UDMA-2 66 (64+2) 33,3 Mbyte/s UDMA33
UDMA-3
67 (64+3) 44,4 Mbyte/s UDMA44
UDMA-4 68 (64+4) 66,7
Mbyte/s UDMA66
UDMA-5 69 (64+5) 100,0 Mbyte/s UDMA100
UDMA-6
70 (64+6) 133,3 Mbyte/s UDMA133
hdparm -d1 -X34 /dev/hda = MDMA-2-Modus für hda festlegen
Einbinden eines IDE-CD-Brenners
Bis einschließlich Kernel 2.2 muss SCSI-Emulation aktiviert sein.
-
Kernel-Modul ide-scsi laden
- Bootparameter setzen. Lilo:
append=”hdX=ide-scsi”, Grub: hdc=ide-scsi
sysctl – Kernelparameter zur Laufzeit ändern
Bei Benutzung von sysctl wird relativer Pfad ausgehend von /proc/sys benutzt.
sysctl
kernel/domainname =
Ausgabe des Inhalts von /proc/sys/kernel/domainname
sysctl
kernel.domainname =
Wie oben, der . entspricht /
sysctl
-w net.ipv4.ip_forward=1
= Wert ip_forward in /proc/sys/net/ipv4 in 1 ändern
sysctl
-a | -A
= Auflistung aller möglichen Paramtereinstellungen
sysctl
-p KONFIG-FILE
= Konfigurationsdatei für sysctl angeben/nutzen
Da das Proc-Filesystem nach jedem Neustart neu generiert wird, muss man eine Konfig-Datei einrichten:
/etc/sysctl.conf
net.ipv4.ip_forward
= 1
Logical Volume Manager (LVM)
Partitionierung in
Logical Volumes |
Logical Volume 1 (lv1) |
lv2 |
||
Zusammenfassung
aller Pvs |
Volume Group 1 (vg1) |
|||
“Echte Partitionen” (PV) |
Physical Volume 1 |
Physical Volume 2 |
||
Raid-Arrays |
md0 |
md1 |
||
Einzelne Partitionen |
sda1 |
sdb1 |
sda2 |
sdb2 |
-
LVM's bieten keine Datensicherheit, sondern lediglich Flexibilität.
Daher setzen sie auf Raid-Arrays auf.
- Die Größe von
LVM's können während des Betriebs angepasst werden
1.)
Der LVM nutzt Partitionen, ganze Festplatten oder Raid-Arrays als
Physical Volumes
2.) Die Physcal Volumes werden zu einer Volume
Group zusammengefasst
3.) In der Volume-Group werden Partitionen,
die Logical Volumes, eingerichtet und formatiert.
Physical
Extent (PE) =
Datenblöcke von Logical Volumes, Standard 4 MB, max. 65.000 PEs
= 256 GB
- Ext2 als Dateisystem für LVM ist gut geeignet, da
die Größe immer geändert werden kann
8e,
Linux LVM
= Logical Volumes müssen mittels fdisk
als Linux LVM (8e) definiert werden
- Bei ganzen Festplatten muss
mittels dd der MBR gelöscht werden.
Befehle zur LVM-Konfiguration
LVM
durchsuchen
pvscan
=
durchsucht alle Festplatten nach Physical Volumes
vgscan
= durchsucht alle Festplatten nach Volume Groups, erzeugt
/etc/lvmtab
lvscan
= durchsucht alle Festplatten nach Logical Volumes
LVM
erstellen
pvcreate
= erzeugt Physical Volumes aus Partitionen des Typs 8e Linux LVM
(pvcreate
/dev/hda)
pvcreate
/dev/md0 /dev/md1
= Physical Volume aus md0 und md1 erstellen
vgcreate
=
erzeugt Volume Groups aus Physical Volumes (vgcreate
vg-name /dev/hda)
lvcreate
= erzeugt Logical Volumens, die bei fehlender Namensangabe lvol1,
lvol2, etc heißen:
lvcreate
-L
größe_in_MByte -n
lv-name -i
stripes-anzahl
vg-name
lvcreate
-l anz_logical_extents
-n
lv-name
vg-name
LVM
bearbeiten
pvchange
= verändert die Attribute eine Physical Volumes
vgchange
= verändert die Attribute einer Volume Group
lvchange
= verändert Attribute eines Logical Volumes
LVM-Attribute
anzeigen
pvdisplay
=
zeigt Attribute von Physical Volumes (Größe, PE-Größe,
etc) an
vgdisplay
=
zeigt Attribute von VolumeGroups (Physical/Logical Volumes mit Größe,
etc) an
lvdisplay
= zeigt Attribute von Logical Volumes (Größe,
Read/Write-Status, Snapshot, etc)
an
LVM
ändern / erweitern / verkleinern
pvmove
= verschiebt Physical Extents von einem Physical Volume zum
anderen
vgextend
= fügt PEs zu einer exisitierenden VolumeGroup hinzu (vgextend
vg-name /dev/hda)
lvextend
=
vergrößert Logical Volumes.
lvextend
-L größe
lvname = Größe des Logical Volumes auf neue Größe
setzen
lvextend
-L +ZAHL
lvname = Größe um den Wert ZAHL erweitern
vgreduce
= entfernt ungenutzte Physical Volumes aus VolumeGroup (vgreduce
vg-name /dev/hda)
lvreduce
= verkleinert Logical Volumes
lvreduce
-L größe
lv-name = Größe des LV auf gewünschte Größe
reduzieren
lvreduce
-L -größe
lv-name = Größe des LV um angegebene Größe
verkleinern
LVM
löschen
pvremove
= löscht ein Physical Volume. Dieses darf keiner VolumeGroup
mehr angehören
vgremove
= löscht eine Volume Group, welche keine Logical Volumes
enthalten dürfen
lvremove
=
entfernt Logical Volumes
LVM
umbenennen
vgrename
= benennt Volume Groups um
lvrename
= nennt Logical Volumes um
LVM
Sonstiges
vgexport
=
exportiert eine Volume Group, so dass vgscan sie nicht mehr
findet.
vgimport
=
importiert eine zuvor exportierte Volume Group
vgmerge
= fasst mehrere Volume Groups zu einer einzigen zusammen.
vgsplit
=
verschiebt Physical Volumes aus einer Volume Group in eine andere.
vgconvert -M2 vg1 = LVM1 in aktuelle LVM2-Version umwandeln.
Vorgehensweise
1.)
Physical Volume erstellen
pvcreate
/dev/md0 /dev/md1
2.)
Zusammenfassen der Physical Volumes zu einer Volume Group
vgcreate
vg1 /dev/hda1 /dev/sdb /dev/md0
3.)
Die virtuelle Festplatte (Volume Group) in Logical Volumes
einteilen
lvcreate
-L 40G -n lv1 /dev/vg1 oder
lvcreate
-l 1000 -n lv1 /dev/vga1
Beispiel
Volume verkleinern
1.)
Partition auf 500 MB verkleinern
resize2fs
/dev/vg1/vl1 500M
2.)
Volume verkleinern
lvreduce
-L 500 /dev/vg1/lv1
e2fsadm = Vergrößert und verkleinert Logical Volumes mitsamt Ext2-Dateisystem
LPI 2.204.4 Konfiguration von PCMCIA-Karten [1]
-
PCMCIA steht für Personal Computer Memory Card International
Association
- stromsparend
- Hot-Plug
- PPCard 16 (8-/16-Bit
Datenbus), PCCard 32 (32-Bit), Cardbay (integriert USB und FireWire)
cardmgr
= Dämon-Prozess, der die PCMCIA-Sockets
überwacht
/etc/pcmcia/config =
Konfigurationsdatenbank, Zuordnung von Modulen und Konfigdateien
(*.opts)
Auszug
/etc/pcmcia/config
device “3c589_cs”
class
“network” module “3c589_cs” # Geräte
gehärt zur Klasse Network und nutzt Modul 3c589_cs
-
Für jede Geräteklasse (network, scsi, etc) exisitiert eine
ausführbare und *.opts-Datei
- In networks.opts werden bsp.
Das Setzen von IP-Adressen definiert
- Außerdem können
Schemata eingerichtet werden
cardctl scheme ZuHause = Wechseln des Schemas der PCMCIA-Karte
cardctl
Parameter
cardctl status = gibt den Status der
PCMCIA-Karte aus
cardctl
config
= gibt die Socketkonfiguration inkl. Interrupts, I/O-Adressen, etc
aus
cardctl
ident
= gibt Karten-Infos aus
cardctl
suspend
= deaktiviert den Socket
cardctl
resume =
aktiviert den Socket
cardctl
reset
= Socket zurücksetzen
cardctl
eject =
signalisiert dem System, dass die Karte eingesteckt wurde
cardctl
insert =
signalisiert dem System, dass die Karte entfernt wurde
LPI 2.209.1 Konfiguration eines Samba-Server [5]
nmbd
=
Verwaltung der Namensauflösung, Umsetzung NetBIOS-Namen in
IP-Adressen
smbd
=
Verwaltung der Drucker- und Verzeichnisfreigabe
name
resolve order = lmhosts hosts wins bcast
// Suchreihenfolge für Namensauflösung
password
server = TUX-PDC
// Anderen Server für Authentifizierung nutzen
local
master = Yes
= Samba-Server ist Master Browser für Arbeitsgruppe
preferred
master = Yes
= Erzwingt beim Starten von nmbd eine Neuwahl -> Besser Chance
Mastert zu werden
domain
master = Yes
= Samba soll Domain Master Browser sein
map
to guest - Einstellungen
Diese
Option wird immer ausgeführt, wenn der Login fehlschlägt
map
to guest = Never
= Alle fehlgeschlagenen Logins abweisen
map
to guest = Bad User =
Wenn Benutzer NICHT exisistiert, wird der Fehlversuch als Gastzugriff
gewertet.
map
to guest = Bad Password =
Alle falschen Passworteingaben werden als Gastzugriff gewertet
map
to guest = Bad UiD =
User, die keinen Unix-Login haben, werden als Gastzugriff gewertet
(nur bei ads)
security-Einstellungen
des Samba-Servers
security
= share =
Geringste Sicherheitsstufe (wie Windows)
security
= user =
Mittlerweile Standard, User Level Security, User muss sich
authentifizieren
security
= server =
Authentifizierung an anderem Server, wo security = user gesetzt
ist
security
= domain =
Samba versucht über PDC bzw. BDC Authentifizierung
durchzuführen
security
= ads =
Kerberos ähnliche Authentifizierung
#
smb.conf
realm
= kerberos-REALM
security = ADS
password server =
kerberos-server
smbpasswd
– Samba-Benutzer anlegen
Da
Windows andere Passwort-Hashes benutzt, muss man mittels smbpasswd
die Samba-Benutzer anlegen.
1.)
Unix-Benutzer anlegen: useradd
tux
2.)
Samba-Benutzer anlegen: smbpasswd
-a tux
Optionen
von smbpasswd
smbpasswd
-x USER = User wird
aus Samba-Benutzerdatenbank gelöscht
smbpasswd
-d USER
= Benutzer wird deaktiviert
smbpasswd
-e USER
= Benutzer wird aktiviert
smbpasswd
-m NAME
=
Maschinenaccount hinzufügen
smbpasswd
-j DOMAIN
= Samba-Server wird in Domäne aufgenommen
cat
/var/lib/samba/private/smbpasswd
user:uid:Passwort-Hash:Windows-Hash:[Parameter]:LastChangeTime
nobody:65534:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:[DU
]:LCT-00000000:
chef:1000:4CA3BC6D0F2088E3AAD3B435B51404EE:9D31C5A780215DD7F0B91AAC42B9624C:[U
]:LCT-46B6FAA4:
winxppro$:1001:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:56C7C96B83607AFB871F38AD1511A2F9:[W
]:LCT-46B71082:
ballack:1002:5038C87BEF4EC2EAAAD3B435B51404EE:9BAB97657A8C905566F4E119D6F5A9BE:[U
]:LCT-46B70FA5:
Optionen
smbpasswd-Datei
U
= User, Benutzeraccount
W
= Workstation, Maschinenaccount
N
= Benutzer kann sich ohne Passwort anmelden
D
= Account ist deaktiviert
SAMBA
als WINS-SERVER
wins
server = 192.168.0.88 //
SAMBA nutzt 192.168.0.88 als WINS-SERVER
wins
support = Yes //
SAMBA ist selbst WINS-SERVER
max
ttl = Sekunden
Gibt die maximale Gültigkeit eines NetBIOS Namens an (SAMBA ist
kein WINS)
max
wins ttl = Sekunden
Gibt
die maximale Gültigkeit eines NetBIOS Namens an (SAMBA ist
WINS)
min
wins ttl = Sekunden
Gibt die minimale Gültigkeit eines NetBIOS Namens an, (SAMBA ist
WINS)
os level – Wahl zum Master-Browser
Die
Server im Netzwerk bieten sich in der Regel für die Wahl zum
Master Browser der Arbeitsgruppe an.
Hierfür gibt es eine
interne Nummer, den os level, welche eine Zahl zwischen 0 und 255
ist.
Die höchste Zahl gewinnt.
1
=
Windows für Workgroups / Windows 95/98
16
=
NT Workstation 3.51
17
=
NT Workstation 4.0
17
=
Windows 2000 Workstation
32
=
NT Server 3.51, NT Server 4.0, Windows 2000 Server
SAMBA
als Primary Domain Controller
1.)
Maschinen-Account
anlegen
groupadd
computers
#
Um Rechner in Domäne aufnehmen zu können
# muss ein
Maschinenaccount angelegt sein.
# Dieser wird durch $ am Ende
definiert.
useradd
-g computers -s /bin/false NAME$
#
Maschinenaccount in Samba-Benutzerdatenbank
# einrichten. Wichtig
die Option -m
smbpasswd
-a -m NAME$
2.)
Benutzeraccount
anlegen
#
Unix Account anlegen
useradd
-g users -s /bin/false -d /home/USER USER
#
Samba-Account anlegen
linux:/#smpasswd
-a USER
New SMB password: PASSWORT
retype new SMB password:
PASSWORT
Added user USER
#
Samba-Account aktvieren
linux:/#smbpasswd
-e USER
Enabled user USER
3.)
Samba
als Primary Domain Controller aktivieren
/etc/samba/smb.conf
#
Die Definition des PDC's
domain master = yes
prefered domain =
yes
domain logons = yes
os level = 65
security = user
#
LogON Einstellungen für Windows 9x/NT/2000/ME
logon
drive = Z:
logon path = \\SAMBA_PDC\profiles\%U.pds
logon home
= \\SAMBA_PDC\profiles\%U
logon script = %U.bat
Wichtige
Optionen
domain
logons = Yes|No =
Domain-Anmeldungen sind möglich Ja / Nein
domain
groups = root, samba =
Unix-Benutzergruppen, die sich an Domain anmelden dürfen
domain
admin group = root =
Unix-Benutzergruppe, deren Mitglieder Administrator-Rechte
haben
domain
admin users = root =
Angabe der Unix-User, die Administrator-Rechte haben
logon
home = \\%L\Profiles\%U
= Home-Verzeichnis, %L=Servername, %U=Session-Benutzername
logon
path = \\server\profile-vrz
= Vrz., in dem die Profile und benutzerbezogene Registry liegen
logon
drive = Z: =
Laufwerksbuchstaben für Win-Clients für das logon home
Verzeichnis
logon
script = %U.bat =
Login-Skript, welches bei der Anmeldung abgearbeitet wird.
Beispiel:
login.bat
NET
USE D: \\server\DATA
NET USE I: \\server\Install
/etc/samba/smb.conf
[global]
netbios
name = TUX-LAPTOP-PDC
server string = Samba %v
comment =
Laptop Schmidt, Samba %v
workgroup
= TUX-NET
browsable = yes
#
Lof-File festlegen
log
file = /mnt/samba/samba_%L.log
guest
account = nobody
keepalive = 60
kernel oplocks = false
#
Die Definition des PDC's
security
= user
domain master = yes
prefered domain = yes
domain
logons = yes
os level = 65
#
Die Administratoren des PDC
domain
admin users = root
logon drive = Z:
logon path =
\\TUX-LAPTOP-PDC\profiles\%U.pds
logon home =
\\TUX-LAPTOP-PDC\profiles\%U
logon script = %U.bat
hosts
allow = 192.168.
socket options = TCP_NODELAY
map to guest =
Bad User
wins support = no
load
printers = Yes
printing = cups
printcap name = cups
#
Home-Laufwerke freigeben
[homes]
comment
= Home-Laufwerke
browseable = Yes
read only = No
create
mask = 0750
[incoming]
comment
= Upload Verzeichnis
path = /mnt/samba/incoming/
#
writable = yes ist invertiertes Synonym fuer Read Only
# Yes =
Nur Leserechte, No = Read/Write/Delete
read
only = No
#
Anzeigen im Explorer Ja/Nein
browsable
= Yes
#
Yes = Ermoeglicht Gastzugriff, No = Passwortabfrage
guest
ok = Yes
#
Synonym fuer guest ok
public
= Yes
[Music]
comment
= Meiks Incoming Vrz
path =
/mnt/usb_pladde/musik/incoming/
public = yes
writable =
yes
browsable = yes
guest ok = Yes
#
Standard-Druckerfreigabe
# Drucker müssen in /etc/printcap
eingerichtet sein
[printers]
comment
= All Printers
browseable = no
printable = yes
public =
yes
read only = yes
create mode = 0700
directory = /tmp
#
Diese Freigabe muss vorhanden sein, da
# sich Win-Clients stand.
damit verbinden
[netlogon]
path
= /mnt/samba/netlogon/
writeable = no
public = Yes
[profiles]
path
= /mnt/samba/profiles/
browseable = no
writeable =
yes
comment =
Benutzerprofile
LMHOST-DATEI
ip-adresse netbios-name#netbios-typ
192.168.200.1 TESTPC
192.168.200.20 NTSERVER#20
192.168.200.21 SAMBASERVER
00
= Standard Workstation
03 = Win-Popup-Dienst
06 = RAS-Server
1B
= Domain Master Browser
1D = Lokaler Master Browser
1C = Domain
Logon Server
1F = NetDDE-Dienst
20 = Datei-/Druckerdienst
21
= RAS-Client
nmblookup
linux = nslookup, NetBIOS-Namensauflösung
nmblookup
-B 192.168.2.255 linux
= Angabe der Broadcast-Adresse
nmblookup
-S linux
= Detaillierte Anzeige
nmblookup
-M =
ermittelt den lokalen Master Browser
nmblookup
linux#20
smbstatus
=
Status des SAMBA-Servers anzeigen lassen
smbclient
smbmount
//Servername/Freigabename
Mounverzeichnis
[ -o Optionen]
testparm
= Samba-Konfiguration auf Syntax-Fehler überprüfen
testparm
-s smb.conf =
Samba-Konfiguration auf Syntax-Fehler überprüfen
NFS
– Network File System
-
läuft über die sogenannten Remote-Procedure-Calls (RPC),
also Prozeduraufrufe auf anderen Rechnern.
- Jeder Aufruf erfolgt
über Ports
- Der Portmapper ist zentrale Verwaltung der
Portnummern des RPC
Dienste, die laufen müssen (werden
mittels /etc/init.d/nfs gestartet):
rpc.nfsd
rpc.mountd
tux-laptop
chef # rpcinfo
-p
program vers proto port
100000 2 tcp 111 portmapper
100003 2 udp 2049 nfs
100021 1 udp 32863
nlockmgr
100005 2 tcp 608 mountd
100005 3 udp
605 mountd
100005 3 tcp 608 mountd
nfsstat
= zeigt Statistiken zum NFS-Server an ==>
/proc/net/rpc/nfsd
exportfs
= macht die NFS-Freigaben bekannt
/etc/exports
Freizugebendes_Verzeichnis
Client(Optionen)
Client2(Optionen2)
...
/usr einstein.bar.com(rw) // Lese-/Schreibrechte für
PC einstein.bar.com
/usr *.bar.com(rw) //
Lese-/Schreibrechte für alle PCs von bar.com
/usr
192.168.100.0/24(rw) *(ro) // READ für Others
/usr
192.168.100.0/255.255.255.0(rw) // RW für PC von
192.168.100.xxx
/public (ro) // READ für alle
/usr
@gruppe1(rw) // Netzgruppennamen
Wichtige
Optionen
rw
=
Lese-/Schreibrechte
ro
=
Read Only
sync
=
Änderungen werden sofort geschrieben (langsamer, dafür
sicherer). Gegenteil: async
root_squash
=
die Root ID wird auf Nobody umgestellt. Gegenteil:
no_root_squash
anonuid=512
=
Benutzerzugriff erfolgt unter UID 512
anonguid=512
=
Benutzerzugriff erfolgt unter GID 512
subtree_check
=
Zugriff nur auf Dateien, die sich im Vrz befinden (Stichwort
Symlinks). no_subtree_check
nohide
=
Auch Unterverzeichnisse werden angezeigt
tux-laptop chef #
showmount
tux-laptop
// Zeigt an, welche Hosts Freigaben gemountet haben
Hosts on
tux-laptop:
192.168.1.1
showmount
-a =
zeigt Rechner und Verzeichnisse an
showmount
-d =
zeigt Verzeichnisse an
showmount
-e =
zeigt die verfügbaren exports des Servers an
TCP-Wrapper
- tcpd
cat
/etc/hosts.allow
#
Mail ist jedem gestattet
in.smtpd:
ALL
#
Telnet und FTP wird nur Hosts derselben Domain und dem Rechner
tuxhausen erlaubt.
telnetd,
ftpd: LOCAL, tuxhausen.outside.all
#
Finger ist jedem erlaubt, aber root wird per Mail darüber
informiert
fingerd:
ALL: (finger @%h | mail -s "finger from %h" root)
#
Die Nutzer "user" und "newbie" haben von Rechner
"erde" aus Zugang
erde.galaxis.de
user
erde.galaxis.de newbie
#
Alle verbieten, außer lokalen Zugriff
in.telnetd
: ALL DENY LOCAL : ACCEPT
LPI 2.211.1 Systemausgaben protokollieren
Sysklogd
Bestehend aus syslogd (Systemmeldungen) und klogd (Kernelmeldungen).
syslogd
-a socket
= Angabe zusätzlicher Sockets auf denen gelaucht wird
syslogd
-f datei
=
Angabe einer anderen Konfig-Datei
syslogd
-h
= Meldungen von Remote-PCs werden an einen Log-Host übergeben
syslogd
-m
intervall
= Stand. schreibt Syslog alle 20 Min ein Lebenszeichen ins Log.
Ändern des Intervalls
syslogd
-r
= Meldungen von Remote-Rechnern akzeptieren
/etc/syslog.conf
kategorie.priorität aktion (facility = Kategorie)
mail,news.warn /var/log/newslog
//
Mehrere Kateg, gleiche Priorität =>
Komma-Separiert
kern.warn;*err -/var/log/fehlerlog
//
Mehrere Paare => Semikolon (
-
HDD-Sync aus)
*.*;mail.none /var/log/messages
// Alles loggen außer Mail
*.*
@Logserver
// Alle Meldungen an Remote-Server weiterleiten
*.emerge
* //Alle
angemeldeten User informieren
*.alert chef,root,tux
//Infos an diese User
Syslogd-Kategorien
auth
= Meldungen von Sicherheitsdiensten wie login
authpriv
= vertrauliche Meldungen interner Sicherheitsdienste
cron
= Meldungen von at und cron
daemon
= Meldungen anderer System-Daemons
kern
= Kernel-Meldungen
lpr
=
Meldungen des Drucksystems
mail
=
Meldungen des Mailsystems
news
= Meldungen des Newssystems
syslog
=
interne Meldungen des Syslog-Daemons
user
= Meldungen aus Benutzerprogrammen
uucp
= Meldungen des UUCP-Systems
*
= Alle Kategorien
Prioritätsstufen
emerge
=
alert
=
crit
=
err
=
warning
=
notice
=
info
=
debug
=
none = Meldungen dieser Kategorie weren nicht geloggt
Syslog-NG (Syslog Next Generation)
1.) SOURCEDRIVER – Über welchen Weg kommen die Meldungen?
Internal ()
= interne Meldungen des Syslog-NG
file
(/var/log/messages)
= Auslesen der Nachrichten aus Datei
unix-stream(“/dev/log”)
= Unix-Socket öffnen und daraus lesen
udp
(ip(“0.0.0.0”) port(514))
= Empfangen der Meld. über Netzwerk. 0.0.0.0 = Alle Lan-Devices
lauschen
tcp
(ip(“0.0.0.0”)
port(514))
= Wie udp, nur über tcp-Protokoll
pipe
(Dateiname)/fifo (Dateiname)
= Lesen aus einer Pipe
Beispieleintrag
für SOURCE/Quelle
source
Bekannte_Meldungen
{
internal();
unix-stream
(“/dev/log”);
file (“/var/log/messages”);
};
2.) Filterregeln – Unnötiges herausfiltern
facility(kategorie)
= Komma-separierte Liste der Log-Kategorien
level(priority)
=
Komma-separierte
Liste der Prioritätsstufen
priority(priority)
=
wie level()
program(regex)
=
wird auf das Feld der Meldung des Programms angewendet
host
(regex) =
Wird auf des Feld mit dem Hostnamen angewendet
match
(regex)
= Wird auf beliebigen Bestandteil der Meldung
angewendet
filter(filtername)
= Einbinden einer anderen Filterregel
netmask
(ip/netmask)
= Prüfen des Herkunftsnetz des PCs, von dem die Meldung stammt
and
=
Und-Verknüpfung
or
=
Oder-Verknüpfung
not
=
Verneinung
Beispieleinträge für Filter
filter
f_news {
facility(news); };
filter f_newserror
{ level(err) and facility(news); };
filter f_messages
{ not filter (f_newserror) or level(warn); };
3.) Destination – Wohin wird geloggt?
file(/var/log/messages)
=
Meldungen werden in Datei geloggt
fifo(DATEI)
oder
pipe(DATEI)
= Meldungen landen in der Datei
unix-stream(DATEINAME)
= Nachrichten über den Socket senden
udp(192.168.0.1
port(514))
= Meldungen per UDP über Port 514 an 192.168.0.1
senden
tcp(192.168.0.1
port(514))
= Meldungen per TCP über Port 514 an 192.168.0.1
senden
usertty(root)
=
Meldungen an das Terminal des User schicken
program(programm)
= Meldung an Programm übergeben
Beispieleinträge für Destination
destination
message
{ file(“/var/log/messages”); };
destination
root
{usertty(“root”); };
destination
console
{
file(“/dev/tty10” group(tty) perm(0620)); };
4.) Log – Source, Filter, Destination miteinander verbinden
Beispieleinträge für Log
destination
message
{ file(“/var/log/messages”); };
log { source
(Bekannte_Meldungen);
filter (f_messages);
destination
(message);
};
5.) Options – Allgemeine Optionen
Beispieleinträge für Options
options {
#
Zeit nach der eine Verbindung wiederaufgebaut wird
time_reopen(10);
# Zeit in Sek, bis eine nicht benutzte Datei geschlossen wird
time_reap(360);
# Anzahl Zeilen, die gepuffert werden. Je höher, desto bessere
Performance, desto weniger Zugriffe
sync(50);
# Erstellen von Verzeichnissen erlauben
create_dirs(yes);
# Einstellungen für Besitzer, Gruppe und Berechtigungen der
Log-Dateien
owner(root);
group(adm);
perm(0640);
# Einstellungen für Besitzer, Gruppe und Berechtigungen der
Verzeichnisse
dir_owner(root);
dir_group(root);
dir_perm(0755);
};
logger – Meldungen an Syslogger übergeben
logger -p user.notice Hilfeeeee // Systemmeldung Kat. = user, Priorität = notice, meldung = Hilffeee
LPI 2.211.2 Softwarepakete erstellen
Aufbau eines RPM-Pakets
1.) Alle notwendigen Dateien (hallo.c, MAKEFILE, README) in das Vrz. hallo-1.0.0 kopieren
2.) tar -czvf hallo-1.0.0.tar.gz hallo-1.0.0
3.) Tar-Archiv nach /usr/src/packages/SOURCES kopieren
4.) SPEC-Datei erstellen (hallo.spec) und nach /usr/src/packages/SPECS kopieren
5.) cd /usr/src/packages/SPECS && rpm -ba hallo.spec usr/src/packages/ SOURCES = Enthält die Original-Sources (*.tar.gz)
SPECS = Enthält die SPEC-Dateien
BUILD = Hier werden die Sources entpackt, um sie dann zu kompilieren
RPMS = Hier werden die fertigen Binaries abgelegt. Jede Architektur hat ein Unterverzeichnis (i386)
SRPMS = Vrz. für erzeugte Source-RPMs rpm bzw. rpmbuild -bp datei.spec = Nur der %prep-Abschnitt wird ausgeführt (Auspacken der Sources)
-bl datei.spec = Überprüft, ob die Dateien von %files exisitieren (List check)
-bc datei.spec = %build Sektion ausführen
-bi datei.spec = Auswertung der %install Sektion
-bb datei.spec = Binary-Paket bauen (vorher werden prep, build, install werden vorher ausgeführt)
-bs datei.spec = nur das Source-RPM erzeugen
-ba datei.spec = alle bauen, RPM und SRPM rpmbuild –rebuild source-rpm = Erstellt ein Binary aus einem SRPMS
/usr/lib/rpm/rpmrc =
/usr/lib/rpm/redhat/rpmrc = Einstellungen für RPM festlegen Die SPEC-Datei ist die Bauanleitung des Programms. Beispiel SPEC-Datei # Präambel Vendor: W.Eihnachtsmann Distribution: None Name: hallo Release: 13 Packager: W.Eihnachtsmann <weihnachtsmann@nordpol.com> Copyright: GPL Group: unsorted Provides: hallo Autoreqprov: on Version: 1.0.0 Summary: Eine einfache Hallo Welt Anwendung Source: hallo-1.0.0.tar.gz %description Diese Anwendung zeigt die grundlegende Funktionalitaet eines C-Compilers. # Die %prep Sektion entpackt das tar Archiv. (Statt der beiden Anweisungen # haetten wir auch einfach %setup schreiben koennen. %prep rm -rf $RPM_BUILD_DIR/hallo-1.0.0 zcat $RPM_SOURCE_DIR/hallo-1.0.0.tar.gz | tar -xvf - # Die %build Sektion kompiliert das Programm %build make # Die %install Sektion installiert es %install make install # Die %files Sektion enthält eine Liste der Dateien, die in das RPM-Paket # integriert werden sollen. Diese Liste muß von Hand erstellt werden und alle
# Dateien, die übernommen werden sollen müssen hier mit vollem Pfad angegeben %files /usr/local/bin/hallo %doc README
Beispiel MAKEFILE
CC = gcc TARGET = hallo BINDIR = /usr/local/bin DOCDIR = /usr/share/doc/packages/hallo all: hallo.c $(CC) -o $(TARGET) hallo.c install: cp hallo $(BINDIR) mkdir $(DOCDIR) cp README $(DOCDIR) clean: rm hallo
Erstellen eines DEB-Pakets
Bei DEB-Dateien handelt es sich um ar-Archive. Mittels ar tx syslog-ng_1.6.5_i386.deb kann man sich den Inhalt anzeigen lassen. Aufbau einer DEB-Datei debian-binary = kennzeichnet das Archiv als Debian-Paket, enthält die Versionsnummer des DEB-Formats
data.tar.gz = Enthält Programmdateien (vollständiger Pfad, Binaries, Dokus, Konfigs)
control.tar.gz = Kontrollinformationen für dpkg, vor allem die Datei control, welche ähnlich d. SPEC-Files ist Inhalt der control.tar.gz control = wichtige Infos wie Versionsnr., Beschreibung, Infos zum Paket. Ähnlich dem SPEC-File
preinst, postinst, prerm, postrm = Skripte die vor-/nach der (De-)Installation ausgeführt werden
conffiles = spezielle Konfig-Datei, welche bei Upgrade nicht auto. Überschrieben werden
config = Skript, das vom User die notwendigen Konfigurationsparameter erfragt
templates = enthält die Texte zu den von debconf gestellten Fragen
md5sum = MD5-Summe Beispiel der control-Datei Package: rc-local
Version: 0.1-1
Section: martin // Eine der Debian-eigenen Sektionen, wie z. B. admin, base, utils, misc, net..
Priority: extra
Architecture: all
Installed-Size: 56
Maintainer: Martin Bock <mbock@bigfoot.de>
Description: Initscript for local stuff
Adds a rc.local in Red Hat-Style to your systems System V-Init.... dpkg-deb dpkg-deb --build, -b VRZ paket.deb = Erstellt ein Debian-Paket aus Vrz, welches die Debian-Struktur hat
dpkg-deb --info, -I = Gibt Infos über ein Debian-Paket aus
dpkg-deb --extract, -x, --vextract, -X = Extrahiert die Dateien aus dem Deb-Paket
LPI 2.211.3 Datensicherung
Inkrementelles
Backup: Nur Änderungen zur vorherigen Sicherung werden
gesichert.
Differentielles Backup: Änderungen zum
letzten Vollbackup werden gesichert.
Backup-Level bei inkrementeller Sicherung
Montag: Vollbackup, Level 0, [20,9 GB]
Dienstag: inkrementelles Backup 1, Level 1, geänderte Daten [60,2 MB]
Mittwoch: inkrementelles Backup 2, Level 1, geänderte Daten [98,2 MB]
Donnerstag: inkrementelles Backup 3, Level 1, geänderte Daten [125,0 MB]
Freitag: inkrementelles Backup 4, Level 1, geänderte Daten [153,2 MB]
dump/restore - Backup erstellen
dump [-Level] [-u] [-f Backupdatei] Dateisystem/Verzeichnis
-f = Speicherort, kann Platte, Bandlaufwerk oder eine Datei sein
-u = Aktualisiert die Datei /etc/dumpdates
dump -0ua -f /dev/tape /dev/hda1 = Erstes Vollbackup erstellen (Level 0)
dump -1ua -f /dev/tape /dev/hda1 = Erstes inkrementelles Backup erstellen (Level 1)
restore = Sicherung von dump wiederherstellen
-f = Angabe zur Datei, die das Backup enthält
-C = Backup überprüfen
-r = Backup wiederherstellen
-i = Interaktiv, Eingabeaufforderung bei der Wiederherstellung
// Backup wiederherstellen
# mke2fs /dev/hda4
# mount /dev/hda4 /mnt/recovery
# cd /mnt/recovery
# restore -r -f /home/backup
cpio
cpio
-p = Copy-Pass-Modus, einlesen
von der Standardeingabe
cpio -o
= Copy-Out-Modus, Erstellen von Archiven
cpio -i =
Copy-In-Modus zum Auslesen/Auspacken eines Archivs
Optionen
-o
/ --create = Erstellen
eines Archivs
-A /
--append = Dateien ans
Archiv anhängen
-i
/ --extract = Copy-In
Modus zum entpacken von Archiven
-t
/ --list = gibt den
Archivinhalt aus
-d
/ --make-directories =
Legt nicht vorhandene Vrz. an.
-m
/ --preserve-modification-time
= Zeitstempel der letzten Dateiänderung bleibt erhalten
Beispiele
find
. |cpio -pvd /backup
// Inhalt des aktuellen Vrz nach /backup kopieren
find
~ -name *.tex | cpio -ov > tex.cpio
// Alle tex-Dateien im H-Laufwerk in Archivdatei tex-cpio
speichern
cpio
-it < /tmp/tex.cpio
// Inhalt des Archivs auflisten
cpio
-idv < /tmp/tex.cpio
// Archiv extrahieren
ls
*.jpg | cpio -o > /dev/fd0
find /etc -mtime -5 -maxdepth 2 -depth | cpio -o > /dev/fd0
tar
-f
datei = Angabe der Datei
-c = Erzeugen eines Archivs
-x =
Extrahieren eines Archivs
-C Vrz = Ins Verzeichnis wechseln
-t
= Inhalt auflisten
-A = (append) Dateien zu Archiv
anhängen/hinzufügen
--delete = Dateien aus einem Archiv
löschen
-j = Bzip2 Archiv
-z = gzip (tar.gz) Archiv
Images mit dd (Device to Device Copy)
- dd liest und schreibt zuverlässig blockweise
- intepretiert die Blöcke nicht, daher ist das Dateisystem unwichtig
dd if=/dev/hda1 of=/dev/hdb1 1:1-Kopie von hda1 nach hdb1
dd if=/dev/hdc of=image.iso CD-Image erstellen
dd if=/dev/hda1 of=/dev/hdb1 bs=2k Blockgröße ändern, 2048 Bytes Blöcke
dd if=/dev/hda of=/dev/fd0 bs=512 count=1 MBR-Bootrecord sichern
dd if=/dev/fd0 of=/dev/hda1 bs=512 count=1 MBR-Bootrecord zurückschreiben
LPI 2.213.1 Tätigkeiten durch Skripte automatisieren
Reguläre Ausdrücke
\ =
Ausdruck maskieren, so dass die Bash diesen als Zeichen intepretiert
Wildcards
. = genau ein Zeichen
[xyz] = Ein Zeichen aus der Menge
[a-f]] = Ein Zeichen aus der Menge a bis f
[^qwertz] = Alle Zeichen aus den angegebenen
Modifier (Wie oft kommen Zeichen vor?)
* = beliebig häufige Vorkommen, auch nullmal
+ = wie *, nur das es mind. einmal vorkommen muss
? = Zeichen kommt null- oder einmal vor.
\{n\} = Zeichen/Muster kommt n-mal vor
\{n,\} =
Zeichen/Muster kommt mindestens n-mal vor
\{n,m\} =
Zeichen/Muster kommt n- bis m-mal vor
Anchors (Wo kommt das Zeichen vor?)
^ = Zeilenanfang
$ = Zeilenende
\< = Wortanfang
\> = Wortende
Gruppierung
\(ausdruck\) = Gruppierung von Suchbegriffen
od|er = od ODER der
& =
UND
\i =
greift auf das i-te in der runden Klammer eingeschlossene Muster zu
\1 = referenziert den Suchbegriff
Extended Regular Expressions
egrep, grep -E awk kennen erweiterte Expressions
\{n,m\} ==> {n,m}
\(ausdruck\) ==> (ausdruck)
Beispiele:
^\(From|Subject|Date\)
=>
Am Zeilenanfang entweder From, Subject oder Date.
sed
's/<<(.*)>>/\1/g'
=> Entfernt die << und >> Zeichen aus einem Text
Perl
#!/usr/bin/perl print "Nennen Sie Ihren Namen "; $name = <STDIN>; chop($name); print "Hallo $name, nett Sie zu sehen\n";
# If-Bedingung if ($zahl1 >= $zahl2) { $zahl3 = $zahl1 - $zahl2; } else { $zahl3 = $zahl2 - $zahl1; }
# WHILE-Schleifen while (Bedingung) { Anweisung1; Anweisung2; } until (Bedingung) { Anweisung1; Anweisung2; } # FOR-Schleife for ($i=1;$i<=10;++$i) { print "$i\n"; } # Array @liste=("Hans","Otto","Gabi","Peter"); foreach $name (@liste){ print "Das ist $name\n"; }
Module in Perl einbinden
Perl-Module sind *.pm-Dateien. Perl-Module werden folgendermaßen importiert
import Modul [Liste] = Importiert Routinen/Variablen aus der angegebenen Moduldatei i. d. aktuelle Projekt.
unimport Modul [Liste] = Hebt die Wirkung eines vorher aufgerufenen import oder use Befehls wieder auf. require Moduldatei = Bindet die angegebene Datei einmal in den Quellcode ein.
use Modul [Version] [Liste] = Während des Kompil. wird das angegebene Modul mittels require geladen.
CPAN (Comprehensive Perl Archive Network )
weltweites
Netz von Perl-Programmierern, die ihre Module allen anderen
Perl-Nutzern zur Verfügung stellen
perl
-MCPAN -e shell =
Startet interaktive Shell, wo man u.a. Nach Modulen suchen kann.
PERL-Taint-Modus
Der
Taint-Modus von Perl versetzt den Perl-Interpreter in einen
"paranoiden Zustand", in dem alle Eingaben der User solange
als bösartig gelten, bis der Programmierer explizit sein OK
gibt. alle Kommandozeilenargumente, Umgebungsvariablen und
Usereingaben werden abgelehnt, wenn 1.)
Befehle, die eine
Subshell öffnen 2.) Kommandos, welche Dateien, Verzeichnisse und
Prozesse manipulieren und 3.) eval-Statements sind.
Grundlagen Bash-Programmierung
Bash-Skripte
#!Programm = startet jede Shell das Progamm und gibt ihm als Parameter den Namen des Scripts mit.
#!/bin/bash = für die Abarbeitung des Scriptswird grundsätzlich die bash benutzt
source =
externen Quellcode einbinden
read =
Benutzereingaben einlesen
Beispiel:
addiere 10 20
# auszug Skript addiere
#!/bin/bash
let ergebnis=$1+$2
echo $1 plus $2 ergibt $ergebnis
Shift
Der Befehl shift verschiebt die ganze Kette der Kommandozeilenparameter um eines nach links. Das bedeutet, der Parameter 2 wird zum Parameter1, der Parameter3 zum Parameter2 usw. Der erste Parameter fällt weg. Damit kann eine unbestimmte Anzahl von Parametern bearbeitet werden, indem in einer Schleife immer nur der erste Parameter verarbeitet wird und anschließend der Befehl shift aufgerufen wird. Die Schleife wird solange wiederholt, bis keine Parameter mehr übrig sind.
#!/bin/bash
while [ $# -gt 0 ] # Solange die Anzahl der Parameter ($#) größer 0
do
echo $1 # Ausgabe des ersten Parameters
shift # Parameter verschieben $2->$1, $3->$2, $4->$3,...
done
set
Mit set können Parameter geändert werden. Wird selten benutzt.
test
-r Dateiname Die Datei Dateiname existiert und ist lesbar
-w Dateiname Die Datei Dateiname existiert und ist beschreibbar
-x Dateiname Die Datei Dateiname existiert und ist ausführbar
-d Dateiname Die Datei Dateiname existiert und ist ein Verzeichnis
-s Dateiname Die Datei Dateiname existiert und ist nicht leer
-b Dateiname Die Datei Dateiname existiert und ist ein blockorientiertes Gerät
-c Dateiname Die Datei Dateiname existiert und ist ein zeichenorientiertes Gerät
-g Dateiname Die Datei Dateiname existiert und das SGID-Bit ist gesetzt
-k Dateiname Die Datei Dateiname existiert und das Sticky-Bit ist gesetzt
-u Dateiname Die Datei Dateiname existiert und das SUID-Bit ist gesetzt
-p Dateiname Die Datei Dateiname existiert und ist ein Named Pipe
-e Dateiname Die Datei Dateiame existiert
-f Dateiname Die Datei Dateiname existiert und ist eine reguläre Datei
-L Dateiname Die Datei Dateiname existiert und ist ein symbolischer Link
-S Dateiname Die Datei Dateiname existiert und ist ein Socket
-O Dateiname Die Datei Dateiname existiert und ist Eigentum des Anwenders, unter dessen UID das test-Programm gerade läuft
-G Dateiname Die Datei Dateiname existiert und gehört zu der Gruppe, zu der der User gehört, unter dessen UID das test-Programm gerade läuft
Datei1 -nt Datei2 Datei1 ist neuer als Datei2 (newer than)
Datei1 -ot Datei2 Datei1 ist älter als Datei2 (older than)
Datei1 -ef Datei2 Datei1 und Datei2 benutzen die gleiche I-Node (equal file)
-z Zeichenkette Wahr wenn Zeichenkette eine Länge von Null hat.
-n Zeichenkette Wahr wenn Zeichenkette eine Länge von größer als Null hat.
Zeichenkette1 = Zeichenkette2 Wahr wenn Zeichenkette1 gleich Zeichenkette2
Zeichenkette1 != Zeichenkette2 Wahr wenn Zeichenkette1 ungleich Zeichenkette2
Wert1 -eq Wert2 Wahr, wenn Wert1 gleich Wert2 (equal)
Wert1 -ne Wert2 Wahr, wenn Wert1 ungleich Wert2 (not equal)
Wert1 -gt Wert2 Wahr, wenn Wert1 größer Wert2 (greater than)
Wert1 -ge Wert2 Wahr, wenn Wert1 größer oder gleich Wert2 (greater or equal)
Wert1 -lt Wert2 Wahr, wenn Wert1 kleiner Wert2 (less than)
Wert1 -le Wert2 Wahr, wenn Wert1 kleiner oder gleich Wert2 (less or equal)
!Ausdruck Logische Verneinung von Ausdruck
Ausdruck -a Ausdruck Logisches UND. Wahr, wenn beide Ausdrücke wahr sind
Ausdruck -o Ausdruck Logisches ODER. Wahr wenn mindestens einer der beiden Ausdrücke wahr ist
if-Anweisung
if [-x /home/chef/skript1]
then
/home/chef/skript1
else
echo Datei existiert nicht!
fi
while-Schleife
while [ $zahl -gt 1 ];
do
fakultaet=$fakultaet*$zahl
zahl=$zahl-1
done
For-Schleife
for name in $@ # Arbeitet jeden Parameter ab
do
...
done
for i in `cut -d: -f1 /etc/passwd` # Zeigt alle Benutzer an
do
echo $i
done
case-Bedingung
case $m in
Jan*|jan*) m=1 ;;
Feb*|feb*) m=2 ;;
Mar*|mar*) m=3 ;;
Apr*|apr*) m=4 ;;
Mai*|mai*) m=5 ;;
Jun*|jun*) m=6 ;;
Jul*|jul*) m=7 ;;
Aug*|aug*) m=8 ;;
Sep*|sep*) m=9 ;;
Okt*|okt*) m=10 ;;
Nov*|nov*) m=11 ;;
Dez*|dez*) m=12 ;;
esac
Speicherort von Skripten
Nur ROOT:
/usr/local/sbin oder /root/bin
Zugriffsmodus: rwx------ 700
Für Benutzer:
/usr/local/bin
Zugriffsmodus: rwxr-xr-x 755
Beispiel-Skript:
#!/bin/bash
function zaehle_von_bis()
{
i=$1 # i bekommt den Wert des ersten Parameters
while [ $i -le $2 ] # Solange i kleiner/gleich Parameter2
do
echo $i # Ausgabe der Zahl i
let i=$i+1 # i wird um 1 erhöht
done
}
read -p "Startwert: " zahl1 # Startwert einlesen
read -p "Endwert: " zahl2 # Endwert einlesen
zaehle_von_bis $zahl1 $zahl2 # Aufruf der Funktion mit den gelesenen Werten
Beispiel-Skript
Auslastung=`df /dev/hda1| grep ^/ |cut -c52-54`
if [ $Auslastung -gt 90 ]
then
mail -s "Alarm: Platte bald voll" root <<EOM
Hallo Systemverwalter. Die Platte /dev/hda1 ist bald voll.
Sie ist zu $Auslastung belegt.
Mach was!!!
EOM
fi
Parameter
$0 = Name des Skripts
$1 = 1. übergebene Parameter
$2 = 2. übergebene Parameter
...
$99 = 99. übergebene Parameter
$@ = Steht für alle angegebenen Parameter (Unterschied wenn in " ")
$* = Steht für alle angegebenen Parameter
$# = Steht für die Anzahl aller angegebenen Parameter
Datenkanäle umlenken
> datei = Standardausgabe in Datei schreiben
< datei = liest aus Datei anstatt von Tastatur
>> datei = wie >, nur wird Ausgabe angehängt
2> datei = Fehlerausgabe in Datei schreiben
2>> datei = wie 2>, nur Fehlerausgabe wird angehängt
2>&1 = Umleitung von Fehlerausgabe auf Standardausgabe
1>&2 =
Umleitung von
Standardausgabe auf Fehlerausgabe
&>
datei = Standard- und Fehlerausgabe in Datei schreiben
com1 | com2 = com2 empfängt Standardausgabe von com1 als Eingabe
com1 | com2 > datei = Standardausgabe von com1 und com2 werden in Datei geschrieben
Befehle verknüpfen
com1 ; com2 = com2 wird nach com1 ausgeführt
com1 && com2 = com2 wird ausgeführt, wenn com1 erfolgreich war
com1 || com2 = com2 wird ausgeführt, wenn com1 fehlerhaft war
grep
grep -i = unterscheidet nicht mehr zwischen Groß-/Kleinschreibung
grep -l = gibt nur Namen der Dateien an, die das Suchmuster enthalten
grep -n = Zeigt die Zeile an, in der das Suchmuster gefunden wurde
grep -r = rekursive Suche in allen Verzeichnissen
grep -v = gibt nur die Dateien an, in der das Suchmuster nicht gefunden wurde
sed
sed BEFEHL datei
Befehle
a = Einfügen nach aktueller Zeile
i = Einfgen vor aktueller Zeile
d = Löschen
p = Ausgeben
c = Zeilen ersetzen
s = Suchen / Ersetzen
y = Zeichen durch andere Zeichen ersetzen
Optionen
-n, --quiet, --silent = gibt nur Zeilen aus, auf die der Befehl p zutrifft
-e = Mehrere Befehle anwenden. Bsp.: sed -e ´befehl1´-e ´befehl2´datei
-f = Sed-Befehle aus Datei lesen
Beispiele
sed ´12,$d´ datei # Löschen der Zeilen 12 bis Ende ($)
sed ´5c text´ datei # Zeile 5 Ersetzen durch “text”
sed -n ´/Muster.*/p´datei # Gibt nur Zeilen aus, auf die der Regexp zutrifft. Regexp werden
# mit / eingeleitet.
sed -n ´/^#/!p´ /etc/smb.conf # Nur Zeilen ausgeben, die NICHT mit # beginnen
sed `1,10{befehl1;befehl2}´datei # 2 Befehle anwenden, durch Semikolon getrennt
sed ´s/Suse/SUSE´ datei # Ersetzt den nur den ersten Suchtreffer einer Zeile
sed ´s/Suse/SUSE/g´ datei # Ersetzt alle Suchtreffer, g steht für Global
sed ´s/Suse/SUSE/gI´ datei # Ersetzt Suchtreffer, keine Unterscheidung in Groß-/Kleinschreibung
sed ´s/:/-/2´datei # Jeder 2. Doppelpunkt wird zu einem Bindestrich
echo “Audo” | sed -e ´y/d/t/´ # Aus Audo wird Auto
awk
awk ´muster {aktion}´ # Wenn muster fehlt = Anwendung auf alle Zeilen
# Wenn {aktion} fehlt = Print
awk ´/homes/ {print}´ date # Zeilen, die das Muster homes enthalten
awk ´{print $1, $6}´ datei # Spalte 1 und 6 jeder Zeiler ausgeben
awk ´$3==1000 {print}´ datei # Zeile ausgeben, in der die 3 Spalte 1000 enthält
awk ´$3>=1000 {print}´ datei # Zeile ausgeben, in der die 3 Spalte größer/gleich 1000 ist
awk -F: ´{print $1, $6}´ datei # -F: ändert den Feldtrenner vom Leerzeichen in den Doppelpunkt
awk '{printf("Herr %s ist %d Jahre alt und verdient %.2f Euro\n",$2,$3,$4)}'
mail -s “Status” abc@gmx.de < /var/log/messages # Datei als Mailinhalt verschicken
df -h | mail -s “HDD-Speicherplatz” abc@gmx.de # Ausgabe von df verschicken
mail -s “passwd” -a /etc/passwd abc@gmx.de root # Datei als Anhang verschicken
cron
Benutzer-Crontabs
Damit auch einfache Benutzer Cron-Jobs definieren können, gibt es das Tool crontab. Hier die wichtigsten Befehle:
crontab Dateiname
= Anlegen einer
User-Crontab-Datei
crontab
-l = Anzeigen der
eigenen Crontab-Datei
crontab
-r = Löschen
der eigenen Crontab-Datei
crontab
-e = Bearbeiten der
eigenen Crontab-Datei
Minute Stunde Tag Monat Wochentag Username Kommando
M S T M W Befehl
5 20 * * * /usr/bin/message.sh (täglich um 20.05)
*/5 * * * * /usr/bin/message.sh (alle 5 Minuten)
0 6-23/2 * * * Befehl (alle zwei Stunden zw. 6-23 Uhr)
0 0 * * * Befehl (Täglich um 0.00 Uhr)
20,30 1 * * 1-5 Befehl (Mo-Fr um 1.20 und 1.30 Uhr)
/etc/cron.allow und /etc/cron.deny
In diesen Dateien werden die User eingetragen, die entweder Cron-Jobs ausführen dürfen oder nicht. Es darf nur eine der beiden Dateien existieren.
at
at = Jobs zu bestimmter Zeit starten
# at 12.30 tomorrow
at> /home/backup.sh
at> [Ctrl]-[D] <eot>
warning: commands will be executed using /bin/sh
job 3 at 2007-06-07 12.30</eot>
12:30 = Heute um 12.30 Uhr
midnight = 0.00 Uhr
noon = 12.00 Uhr
teatime = 16.00 Uhr
8:30pm = 20.30 Uhr
8:30am = 8.30 Uhr
30.05 = 30.05 dieses Jahres
12/12/07 = Am 12.12.2007
tomorrow, today = »Morgen« und »heute«.
atq (at -l) = Jobliste anzeigen lassen
atrm (at -d oder at -r) 5 6 12 15 = Jobs löschen
rsync
rsync OPTIONEN quelle ziel
Optionen
-v / --verbose = “gesprächig”
-q / --quiet = Keine Ausgabe
-a / --archive = Archivmodus, entspricht -rlptgoD
-r kopiert Unterverzeichnisse, lässt rsync rekursiv arbeiten
-l kopiert symbolische Links
-p behält Rechte bei
-t behält Zeiten bei,
-g behält Gruppenrechte bei
-D behält Gerätedateien bei; nur root
-A ACLs erhalten
-H Hardlinks erhalten
-S Dateien "mit Löchern" effizient handhaben
-X Xattrs erhalten
-v zeigt beim Kopieren alle Schritte, die gerade ausgeführt werden, an
-n simuliert den Kopierauftrag, trocken - ein Testlauf, der nichts wirklich kopiert
-z komprimiert den Datentransfer
-e hiermit lässt sich die Remote-Shell wählen, welche per Default SSH ist;
-b Backups werden erstellt
-u update - Dateien, die im Backup schon vorhanden und sind sind, werden ausgelassen
-v verbose - Gibt einen genauen Verlauf, insbesondere wenn Fehler auftauchen
--backup-dir=Verzeichnis ;kann ein Verzeichnis angeben werden
--progress Hier wird der Fortschritt während der Übertragung angezeigt
--delete Dateien, die auf der Quelle nicht mehr existieren, werden auch auf dem Ziel gelöscht.
--exclude=Verzeichnis Damit werden Verzeichnisse von dem Kopiervorgang ausgeschlossen
Beispiele:
rsync
-a /quelle /vrz/ziel # Inhalt von quelle nach ziel kopieren.
/quelle/ würde komplettes Vrz bedeuten
rsync -av -e ssh /home/ root@rechner1:/ziel/home/ # Per SSH Dateien synchronisieren
rsyncd ist der Rsync-Dämon. Wird in /etc/rsyncd.conf konfiguriert.
rsyncd.conf
uid = nobody gid = nobody use chroot = no max connections = 4 syslog facility = local5 pid file = /var/run/rsyncd.pid [ftp] path = /var/ftp/pub comment = whole ftp area (approx 6.1 GB) [sambaftp] path = /var/ftp/pub/samba comment = Samba ftp area (approx 300 MB)
LPI 2.214.2 Rettungsmedien erzeugen
Bootprozess
1.) Laden des Kernels direkt bzw. über Bootloader
- BIOS liest Sektor 0 des Zylinders 0 und führt dort gefundenes Programm aus
- Das Programm kann Bootloader oder Betriebssystem sein.
- Wenn Kernel direkt auf Bootmedium geschrieben wurde, dann wird der Kernel direkt geladen
- Wenn Bootloader auf das Bootmedium geschrieben wurde, wird dieser ausgeführt
2.) Ramdisk-Word
Nach Laden des Kernels wird eine bestimmte Speicheradresse, das so genannte Ramdisk Word, gelesen. Dieses enthält Angabe des Root-Devices, welches man mit rdev bearbeiten kann.
rdev /boot/vmlinuz
= Zeigt Root-Verzeichnis des Kernels an
rdev /boot/vmlinuz /dev/hda5 = Ändert das Root-Device des Kernels in /dev/hda5
rdev -v /boot/vmlinuz =
vidmode = Auslesen des Videomodus
rdev -v /boot/vmlinuz 1 = Videomodus in 80x25 Zeichen ändern
rdev -v /boot/vmlinuz 2 = Videomodus in 80x50 Zeichen ändern
rdev -v /boot/vmlinuz 3 = Mögliche Videomodi werden beim Booten zur Auswahl angeboten
rdev -r = Gibt die Größe der Ramdisk an
Eine RAM-Disk ist ein virtueller und temporärer Datenträger im Arbeitsspeicher eines Computers. Sie wird hauptsächlich eingesetzt, wenn andere physikalische Speichermedien zu langsam oder, während der Rechner neu aufgesetzt wird, nicht verfügbar sind.
Rettungsdisketten bestehen in der Regel aus zwei Disketten, nämlich aus einer Bootdiskette (enthält Minimal-Kernel mit notwendigen Modulen, um auf das Dateisystem zuzugreifen, etc) und aus einer Rootdiskette (Wurzeldateisystem mit notwendigen Werkzeugen) in Form einer komprimierten Ramdisk. Somit wird das Wurzeldateisystem in den RAM des Rechners geladen ==> Schneller als von Diskette direkt.
3.) Image für Root-Diskette erstellen
Benötigt alle essentiellen Bestandteile eines Linux-Systems. Die wären:
- Dateisystemstrukur: /dev, /proc, /bin, /etc, /lib, /usr, /tmp
- Basisprogramme: ls, cp, mv, init, getty, login, mount inklusive Shared Libraries
- Konfigurationsdateien: /etc/inittab, /etc/fstab, /etc/passwd
- Gerätedateien: /dev/hd*, /dev/tty*, /dev/fd0, /dev/console, /dev/kmem, /dev/mem, /dev/null, /dev/ram0
dd if=/dev/zero of=root-fs bs=4M count=1 # 4 MB große Ramdisk erstellen, welche mit Nullen gefüllt ist
mk2fs -m 0 -N 2000 root-fs # Ausreichend Inodes anlegen, 0 Blöcke für Root.
mount -o loop /tmp/root-fs /mnt # Ramdisk mounten
==> ALLE wichtigen Dateien nach /mnt kopieren
chroot /mnt # Ramdisk-Umgebung betreten / testen
cat /tmp/root-fs | gzip -9 > root-fs.gz # Image komprimieren
4.) Bootdisk erstellen
dd if=kernel-2.6.16 of=/dev/fd0 bs=1k # Kernel direkt auf Diskette kopieren
rdev /dev/fd0 /dev/fd0 # Root-Device definieren
rdev -R /dev/fd0 0 # Root-Device (-R) soll schreibbar (0) gemountet werden
LILO-Fehlermeldungen
nichts Kein Teil von Lilo wurde geladen.
LFehlernummer Der 1. Teil des Bootloaders wurde geladen, aber er kann den zweiten Teil nicht laden.
LI Der erste Teil des Bootloaders hat den zweiten Teil geladen, kann ihn aber nicht ausführen.
LIL Der 2. Teil des Bootloaders wurde gestartet, kann aber die Beschreibungstabelle des map-files nicht laden. Typischerweise ein Medien-Fehler (Oberflächenbeschädigung) oder unpassende Plattengeometrie.
LIL? Der zweite Teil des Bootloaders wurde an eine falsche Adresse geladen. Auch hier ist die wahrscheinlichste Ursache, dass die Datei /boot/boot.b verändert oder bewegt wurde.
LIL- Die Beschreibngstabelle ist beschädigt. Entweder ein Oberflächenfehler, oder die Datei /boot/map wurde verändert oder bewegt.
LILO Alle Teile von lilo wurden ordnungsgemäß geladen.
LPI 2.214.5 Allgemeine Probleme lösen
Strace / ltrace– Fehlerdiagnose nach Programmabsturz
strace mozilla-firefox # Liest Standardfehlerausgabe über das Programm firefox aus.
strace -p 7594 # Ausgabe über laufenden Prozess
strings – Text aus Binärdateien lesen
strings /boot/kernel-2.6.16
lsof – List Open Files, geöffnete Dateien anzeigen
lsof /mnt/usb-hdd
LPI 2.214.8 Probleme bei Umgebungskonfigurationen lösen
/etc/passwd
Username:x:UserID:GruppenID:Beschreibung:Homeverzeichnis:Startshell
/etc/shadow
Username:Passwort:Alter:min_Alter:max_Alter:Warnzeit:Pufferzeit:Ungültigkeit:Reserviert
/etc/group
Gruppenname:x:GruppenID:Liste
der Mitglieder
/etc/gshadow
Gruppenname:Passwort:Gruppenverwalter:Liste der Mitglieder
chfn & finger
Benutzerinformationen aus /etc/passwd anzeigen
chsh
Shell wechseln/ändern
chage = ändert
die Anzahl der Tage zwischen Passwort-Wechseln und dem Datum der
letzten Passwort-Änderung.
-m = Minimale Zeit, in der
der User das PW ändern muss
-M = Maximale Zeit, in der der User das PW ändern muss
-d = Wann wurde das PW zuletzt geändert (JJJJ-MM-TT, in Tagen seit dem 01.01.1970)
-E = (expires) Datum, wann das PW abläuft (JJJJ-MM-TT, in Tagen seit dem 01.01.1970)
-I = Pufferzeit, nachdem das PW abgelaufen ist
-W = (warndays) Tage vor dem Auslaufen des PW