Skript/LPIC101
101.1 Hardwareeinstellungen ermitteln und konfigurieren
LPIC101/101.1 - Hardwareeinstellungen ermitteln und konfigurieren
Beschreibung
Hauptsoftwarekomponente ist der Kernel
- Schnittstelle zwischen Soft- und Hardware
- Linux Kernel ist Modular
Identifizieren der Kernel-Version
$ uname -r 5.9.0-1-amd64
- Erste Ziffer: Major Release (wird bei gravierenden Änderungen verändert)
- Zweite Ziffer: Version des Major Release
- Dritte Ziffer: Patch Level (kleine Änderungen)
- Zahlen danach sind frei wählbar und können beim Erstellen des Kernels selber (Makefile) oder durch die Distributoren festgelegt werden
Kernel-Module
- Kommandos zur Verwaltung von Kernel-Modulen
lsmod
Zeigt Status der Kernelmodule durch Zugriff auf Datei /proc/modules
$ cat /proc/modules usbcore 196608 5 usbhid,usb_storage,xhci_pci,xhci_hcd, Live r8169 77824 0 - Live 0xffffffffa046f000 psmouse 114688 0 - Live 0xffffffffa0404000 mii 16384 1 r8169, Live 0xffffffffa03ff000 processor 3276 80-Live 0xffffffffa03f1000 thermal 20480 0 - Live 0xffffffffa03eb000 pcspkr 16384 0 - Live 0xffffffffa0320000 soundcore 16384 1 snd, Live 0xffffffffa03c8000 usb_common 16384 1 usbcore, Live 0xffffffffa0309000 fan 16384 0 - Live 0xffffffffa01cb000 lp204800-Live 0xffffffffa0189000 parport 40960 3 parport_pc,ppdev,lp, Live 0xffffffffa0112000 ext4 503808 1 - Live 0xffffffffa032f000 i915 1175552 3 - Live 0xffffffffa01d2000 ahci 36864 3 - Live 0xffffffffa01c1000 cryptd 20480 1 ghash_clmulni_intel, Live 0xffffffffa0047000 drm 286720 4 i915,drm_kms_helper, Live 0xffffffffa0070000 video 36864 1 i915, Live 0xffffffffa0019000
$ lsmod Module Size Used by usbcore 196608 5 usb_storage,usbhid,xhci_hcd,xhci_pci r8169 77824 0 psmouse 114688 0 mii 16384 1 r8169 processor 32768 0 thermal 20480 0 pcspkr 16384 0 soundcore 16384 1 snd usb_common 16384 1 usbcore fan 16384 0 lp 20480 0 parport 40960 3 lp,ppdev,parport_pc ext4 503808 1 i915 1175552 3 ahci 36864 3 cryptd 20480 1 ghash_clmulni_intel drm 286720 4 i915,drm_kms_helper video 36864 1 i915
insmod
Module können in den laufenden Kernel geladen werden durch komplette Pfadangabe und eventuell Optionen falls es diese benötigt
- Abhängigkeiten werden automatisch geprüft und im Falle einer Abhängigkeit mit Fehlermeldungen beantwortet
- insmod gibt im Erfolgsfall keine Bestätigungsmeldung aus. Das Modul wird kommentarlos in den Arbeitsspeicher geladen
# insmod /lib/modules/4.6.3/kernel/drivers/usb/storage/usb-storage.ko
rmmod
Dient zum entfernen von nicht mehr benötigten Modulen. Dabei ist kein Pfad nötig sondern der Modulname
# rmmod usb-storage
Gibt bei Modulen die benutzt werden Fehlermeldung aus
# rmmod usbcore rmmod: ERROR: Module usbcore is in use by: usb_storage usbserial usbhid xhci_hcd xhci_pci
- Optionen
-v verbose-Mode -f erzwingt das entladen eines Modules wärend Abhängigkeit
modprobe
Vereint und optimiert die Befehle insmod und rmmod
- Keine Pfadangabe mehr nötig
- Erkennt Abhängigkeit zwischen Modulen und behebt diese Probleme durch Installation der fehlenden Module bei Bedarf
- Module eines Typs können auf ein mal geladen werden
- Entfernen und Auflisten von Modulen (Bei Auflistung werden aber nur Module gezeigt die in den laufenden Kernel intrigiert werden können)
# modprobe -at
Die Option -a steht für all und -t für Type des Moduls. Optionen sind bei neueren Versionen nicht mehr möglich
Hardwarekomponenten
- Ressourcen für Hardwarekomponenten
Zur Abfrage der Konfigurationen der Hardwareressourcen sind die Dateien unterhalb des Verzeichnisses /proc nötig
*/proc/interrupts enthält Informationen über die vom System verwendeten Interrupts */proc/ioports enthält Informationen über die von Hardwarekomponenten verwendeten I/O-Adressen */proc/dma ist eine Liste der von Geräten verwendeten DMA-Kanäle */proc/pci ist ein veraltetes Verzeichnis, das bei älteren Kernel-Versionen Informationen über den PCI-Bus enthielt. Heutige Kernel-Versionen verwenden eine eigene Verzeichnishierarchie unterhalb von /proc/bus/pci
/proc/sys/kernel
- Das Verzeichnis /proc/sys/kernel
Zur Laufzeit legt der Kernel seine Konfigurationsinformationen im /proc-Dateisystem ab.Mit dem Befehl cat
können Änderungen vorgenommen werden. Wenn Sie Änderungen an diesen Dateien vornehmen, gehen diese bei einem Neustart des Systems verloren, weil das /proc-Dateisystemsich Informationen abbildet, die sich im Arbeitsspeicher befinden
sysfs
- Das virtuelle Dateisystem sysfs
sysfs exportiert, ähnlich wie das /proc-System, Informationen über Treibermodule des Kernels
root@user:/sys# ls -l insgesamt 0 drwxr-xr-x 2 root root 0 Feb 10 05:55 block drwxr-xr-x 28 root root 0 Feb 10 05:55 bus drwxr-xr-x 47 root root 0 Feb 10 05:55 class drwxr-xr-x 4 root root 0 Feb 10 05:55 dev drwxr-xr-x 16 root root 0 Feb 10 05:55 devices drwxr-xr-x 5 root root 0 Feb 10 05:55 firmware drwxr-xr-x 6 root root 0 Feb 10 05:55 fs drwxr-xr-x 2 root root 0 Feb 10 05:55 hypervisor drwxr-xr-x 9 root root 0 Feb 10 05:55 kernel drwxr-xr-x 128 root root 0 Feb 10 05:55 module drwxr-xr-x 2 root root 0 Feb 10 15:24 power
Jedes dieser Unterverzeichnisse repräsentiert ein Treibermodell des laufenden Kernels. Das Verzeichnis /sys ist dynamisch generiert und enthält deshalb nur benötgte Informationene zu den vorhandenen Geräten, dabei wird der Ressourcenverbrauch reduziert
hald und dbus
hald repräsentiert den Hardware Abstraction Layer. Im zusammenhang mit Hotplug-Geräten hat er die Aufgabe dem dbus zu informieren wenn ein Wechsellaufwerk angeschlossen wird
udev
- udev ist ein in das System intregierter Gerätemanger der die Ein- und Ausgabe dieser Gerärer verwaltet
- Er erstellt dynamische Gerätedatein im Verzeichnis /dev
Gerätedateien unter /dev
Bekannte Dateien unter /dev sind z. B. /dev/null /dev/zero /dev/stdin /dev/stdout /dev/stderr
Gerätedateien für die Terminals (tty)
Auch Datenträger und logische Laufwerke werden unter Linux als Gerätedateien unterhalb des Pfades /dev dargestellt
Die Gerätedateien für Datenträger beginnen in der regel mit /dev/sd. Das gilt für SATA, USB und SCSI-Geräte /dev/sda - erstens Gerät /dev/sdb - zweites Gerät
Auf einer Festplatte können nicht mehr als vier Partitionen erstellt werden
- Primäre Partitionen sind Direkt ansprechbar und können problemlos formatiert und benutzt werden
- Es können bis zu vier primär Partitionen gleichzeitig existieren
- Erweiterte Partitionen dienen als Behälter für logische Partitionen
- Man kann nur eine einzige erweiterte Partition auf einer Festplatte anlegen in der nach Festplattentyp 60 (IDE) oder 12 (SCSi/SATA) logische Partitionen erstellt werden können
- Primär und erweiterte Partitionen werden von 1-4 gelistet und logische ab 5 auch wenn nur eine erweiterte und eine primäre vorliegen
/dev/sda1 – erste primäre Partition /dev/sda2 – zweite primäre Partition /dev/sda3 – erweiterte Partition /dev/sda5 – erste logische Partition /dev/sda6 – zweite logische Partition /dev/sda7 – dritte logische Partition
Der PCI-Bus
- PCI-Steckplätze können genutzt werden, um Erweiterungskarten auf die Hauptplatine eines Computers zu stecken (Sound-, Netzwerk-und Grafikkarten usw.)
- Zum Überblick über den PCI-Bus benutzt man das Kommando lspci
- Das Kommando unterscheidet drei verbose Stufen
- lspci -vvvgibt sehr detaillierte Informationen
- lspci -v
00:02.0 VGA compatible controller: Intel Corporation Atom Processor Z36xxx/ Z37xxx Series Graphics & Display (rev 0e) (prog-if 00 [VGA controller]) Subsystem: Lenovo Device 368d Flags: bus master, fast devsel, latency 0, IRQ 88 Memory at b0000000 (32-bit, non-prefetchable) [size=4M] Memory at a0000000 (32-bit, prefetchable) [size=256M] I/O ports at f080 [size=8] [virtual] Expansion ROM at 000c0000 [disabled] [size=128K] Capabilities: [d0] Power Management version 2 Capabilities: [90] MSI: Enable+ Count=1/1 Maskable- 64bit- Capabilities: [b0] Vendor Specific Information: Len=07 <?> Kernel driver in use: i915
- lspci bezieht seine Informationen aus dem Verzeichnis /proc/bus/pci
- Es wertet die Dateien aus und stellt sie übersichtlich dar
- Mit -t stellt es die PCI-Geräte in einem Baumdiagramm dar
USB – Universal Serial Bus
USB (Universal Serial Bus) ist ein Bus-System zum Anschluss von Peripheriegeräten
USB-Host-Controller-Typen
- UHCI (Universal Host Controller Interface) unterstützt USB 1.1
- OHCI (Open Host Controller Interface) unterstützt USB 1.0
- EHCI (Enhanced Host Controller Interface) unterstützt USB 2.0
- xHCI (Extensible Host Controller Interface) unterstützt USB 3.1
Linux muss zu den jeweiligen Typen das Passende Kernel Modul geladen werden
- usb-ohci.o
- usb-uhci.o
- usb-ehci.o
- xhci_hci.o
USB-Klassen
Nach dem Laden des richtigen Host-Controllers können die Klassentreiber eingebunden werden
- hio.o (Human Interface Devices) Eingabegeräte: Tastatur, Maus etc
- usb-sorage.o zur Ansteuerung von USB-Massenspeicher Geräten
Wenn ein USB-Gerät initialisiert wurde, wird unterhalb von /dev/bus/usb ein Verzeichnis angelegt
Die Dateien in diesem System liegen in binärer Form vor und sind nicht mit einem Editor einsehbar
Mit lsusb
können informationen zu USB-Geräten trotzdem ausgelesen werden
# lsusb -t Bus# 5 `-Dev# 1 Vendor 0x0000 Product 0x0000 `-Dev# 29 Vendor 0x1058 Product 0x0702 Bus# 4 `-Dev# 1 Vendor 0x0000 Product 0x0000 Bus# 3 `-Dev# 1 Vendor 0x0000 Product 0x0000 Bus# 2 `-Dev# 1 Vendor 0x0000 Product 0x0000 `-Dev# 52 Vendor 0x050f Product 0x0003 |-Dev# 53 Vendor 0x1131 Product 0x1001 `-Dev# 54 Vendor 0x04e8 Product 0x1623 Bus# 1 `-Dev# 1 Vendor 0x0000 Product 0x0000
Möchten Sie genauere Informationen über ein einzelnes Gerät erhalten, können Sie dieses über die Vendor- und Produktnummer angeben und einen ausführlichen Bericht erstellen lassen
# lsusb -d 0x1058:0x0702 -v Bus 005 Device 029: ID 1058:0702 Western Digital Technologies, Inc Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 64
101.2 Das System starten
Allgemeines
- Grundsätzliche Funktionstüchtigkeit des Systems durch Power-on-Self-Test:
- Test des Arbeitsspeichers auf seine Grösse und prinzipielle Funktionstüchtigkeit
- Nach der Initialisierung aller Hardwarekomponenten, sucht das BIOS nach einem Betriebssystem oder einem Programm, das ein Betriebssystem laden kann
- Im BIOS ist eine genaue Suchreihenfolge hinterlegt und diese beinhaltet meist Diskettenlaufwerke, Festplatten, CD-ROMS, SCSI-Adapter, USB-Geräte und zudem bootfähige Netzwerkkarten
Startvorgang auf Festplatten
- Man kann drei primäre und eine erweiterte Partition konfigurieren, diese erweiterte Partition kann ihrerseits logische Partitionen enthalten, die ebenfalls nicht von der Partitionstabelle verwaltet werden
- Diese Patitionstabelle befindet sich im sogenannten MBR (Master Boot Record)
- MBR gehört selbst keiner Partition an sondern ist eigenständig und ist genau 512 Byte gross und befindet sich am Anfang einer Festplatte im Sektor 0, Spur 0
- Das BIOS liest dort ein Ladeprogramm, nämlich GRUB 2 und im unteren Bereich die Partitionstabelle
- Da ein Sektor auf PC-Systemen nur eine Größe von 512 Bytes aufweist, müssen sich Bootcode und Partitionstabelle diesen Platz teilen: In den ersten 446 Bytes wird der Programmcode des Bootloaders ausgelagert, und in den nächsten 64 Bytes wird die Partitionstabelle untergebracht.
- Die letzten zwei Bytes enthalten den Wert 0xaa55, der zur Identifizierung des MBRs selbst dient.
- Die verfügbaren 446 Bytes reichen definitiv nicht aus, um einen vernünftigen Bootloader darin unterzubringen. Daher dient dieser Code in der Regel nur dazu, einen zweiten Code zu laden, der sich auf einer der Partitionen befindet.
- Diesen zweiten Bootloader bezeichnet man als Secondary Bootloader. Typische Secondary Bootloader für Linux-Systeme sind LILO und GRUB (bzw. das neuere GRUB2). Ebenfalls sehr bekannt ist GAG.
- wenn ein Bootloader vorgefunden wurde gibt, gibt das BIOS die Kontrolle an diesen ab und beendet sich
- wenn kein Bootloader vorhanden ist, konsultiert das BIOS die Partitionstabelle: hier sucht das BIOS nach einer startfähigen Partition (diese Partitionstabelle beginnt in der 5. Zeile von unten mit 8020 und endet mit 55aa; 55aa ist die Abschlussmarkierung)
- Die Partition die mit 80 beginnt ist die Startpartition
- Wenn kein Ladeprogramm im MBR vorliegt, folgt das BIOS nun diesem Verweis und und liest den Bootsektor der Partition aus
- Spätestens hier sollten sich Bootloader oder das Betriebssystem selbst befinden-> jetzt beginnt der Vorgang, den man als das eigentliche Booten bezeichnet
- Wenn Sie Ihren MBR auf dem Bildschirm ausgeben wollen, können Sie z. B. dieses Kommando verwenden:
dd if=/dev/sda bs=512 count=1|od -h --endian=big
UEFI (Unified Extensible Firmware Interface)
- Bei modernen Hauptplatinen kommt nicht mehr BIOS sondern UEFI zu Einsatz
- Grundsätzlicher Verwendungszweck kommt aber dem des BIOS gleich
- UEFI weist neue Funktionen auf:
- Hohe Grafikauflösungen im Setup-Programm
- Unterstüzung von GUID-Partitionstabellen für Festplatten mit einer Grösse von bis 8 Zebibytes
- Netzwerkanbindung zur Fernwartung
- Integrationsmöglichkeit von Treibern auf Firmware-Ebene
- Integrierter Bootloader
- Digital Rights Managment
- UEFI benötigt eine eigene Partition, diese wird als EFI System Partition(ESP) bezeichnet
- Diese Partition wird von Betriebssystemen, die UEFI unterstützen während der Installation automatisch angelegt
- Benötigt FAT-Dateisystem
- Die EFI System Partition wird unter Linux im Verzeichnis /boot/efi bereitgestellt, enthält zumindest den Bootloader oder andere zum Start benötigte Dateien
- GRUB zum Beispiel kann den Kernel auch laden, wenn er sich nicht in der ESP befindet
- Systemd-boot kann das nicht, dort muss der Kernel innerhalb der ESP liegen
Boot-Strap-Loader
- Dieser Ausdruck kommt von der Geschichte von Baron von Münchhausen, der in einen Sumpf gefallen sein soll und sich selber an den eigenen Haaren aus diesem Sumpf herausgezogen haben soll
- Beim Übersetzen der Münchhausen-Geschichte ins Englische wurde es so abgewandelt, dass sich der Baron am Stiefelgurt(Boot-Strap) aus dem Sumpf gezogen haben soll
- So kann man sich das Hochziehen des Betriebssystem sinnbildlich vorstellen: ein Betriebssystem dient einerseits als Plattform um Software auszuführen, andererseits ist ein Betriebssystem selber Software
- Deshalb nennen wir den Begriff Boot-Strap-Loader, oder kurz Bootloader
Kernel Parameter
- Es gibt zwei Möglichkeiten dem Kernel beim Starten durch den Bootloader Parameter übergeben zu lassen:
- Eintragen der Kernel-Parameter bei jedem Systemstart durch Eintragen dieser in die Konfigurationsdatei grub.cfg(z. B. in/boot/grub/grub.cfg)
- Eintragen der Kernel-Parameter bei jedem Systemstart durch Eintragen dieser in die Konfigurationsdatei grub.cfg(z. B. in/boot/grub/grub.cfg)
linux /boot/vmlinuz-4.6.3 root=/dev/sda1 apm=off
- Oder übergeben der Parameter per "Hand" während des Systemstarts im Bootmenü durch Auswählen des gewünschten Eintrages bei GRUP2(diese sind nicht dauerhaft und werden beim nächsten Systemstart nicht mehr angewandt); zum Beispiel:
init=/bin/bash
- Wobei nicht der init-Prozess gestartet wird, sondern nur die Shell /bin/bash ohne eine Passwortabfrage, das Root-Dateisystem ist dann allerdings nur im Nur-lesen-Modus gemountet und muss durch den Befehl
mount -o remount,rw / passwd root
- Erweitert werden; jetzt kann man sein Kennwort ändern und den Computer wieder im normalen Modus neu starten
Initramfs
- Initramfs steht für initial ram filesystem (sinngemäß übersetzt Ausgangsdateisystem im Arbeitsspeicher) und ist der Nachfolger von initrd.
- Das initramfs ist ein komprimiertes Archiv, das für den Systemstart benötigte Dateien enthält. Es kann vom Linux-Kernel beim Booten als Stammverzeichnis eingehängt werden.
- Die Imagedatei findet man in der Datei /boot/initrd
- Zur Erzeugung einer initialen Ramdisk kann man folgende Befehle verwenden
- Unter RedHat:
mkinitrd
- Unter Debian:
mkinitramfs
Startprotokollierung
- Ausgaben die der Kernel während des Systemstarts ausgibt werden im Kernel-Ring-Puffer gespeichert
- Programmbefehl diesen auszulesen: dmesg
- Weil der Befehl mehrere hundert Zeilen ausgeben kann, sollte man die Ausgabe an less übergeben
dmesg |less
- Wenn man Informationen über den Systemstartvorgang benötigt, die schon länger zurückliegen, kann man bei älteren Systemen die Log-Dateien durchsuchen (zu finden in /var/log/syslog)
- Um Kernel-bezogene Meldungen schneller zu finden, sollte man man mittels grep filtern und an less übergeben:
grep kernel /var/log/messages | less
- Heutige Linux-Systeme verwenden systemd
- Unter systemd um Protokollierung des Systems auszulesen mit der Option -k
journalctl -k
Kontrollfragen
Was ist ein Bootloader?
Wie kann man sich den MBR ausgeben lassen?
Wie kann man sich die Ausgaben, die der Kernel während des Sysemstarts produziert, ausgeben lassen?
Was ist ein UEFI?
Wie kann man sich die Startprotokollierung des Systems noch anzeigen lassen?
101.3 Runlevel wechseln und das System anhalten oder neu starten
LPIC101/101.3 - Runlevel wechseln und das System anhalten oder neu starten
Beschreibung
Die Bezeichnung „Runlevel“ kann mit dem Begriff „Betriebszustand“ übersetzt werden, wird jedoch als feststehender Begriff auch im Deutschen als „Runlevel“ bezeichnet, und zwar in der Form „Runlevel N“, wobei N durch den betreffenden Runlevel ersetzt wird.
Jeder Runlevel definiert einen anderen Zustand, in dem sich ein System befindet.
Es gibt unter Linux insgesamt acht Runlevels, von denen unter Arch zwei Runlevel allerdings nicht benutzt werden.
Bei einem Systemstart durchläuft das System alle Runlevel außer Runlevel 0. Der Start wird vom System als beendet angesehen, wenn der als Standard-Runlevel definierte Runlevel erreicht ist.
Run Levels
- Runlevel 0 ist System Halt - Runlevel 1 ist Single user mode (genau so runlevel S) - Runlevel 2 ist Local multiuser ohne remote netzwerk - Runlevel 3 ist Full multiuser mit Netzwerk. - Runlevel 4 ist nicht benutzt. - Runlevel 5 ist voll multiuser mit Netzwerk und xdm - Runlevel 6 ist System neustart. - Runlevel S ist Single user mode (genauso wie Runlevel 1)
Runlevel 0
In diesem Runlevel befindet sich der Computer nur sehr kurz, und zwar dann, wenn er heruntergefahren wird.
Daher wird Runlevel 0 auch als „Shutdown“ bezeichnet.
Es werden alle Netzwerk-Verbindungen getrennt, dann werden die Dateipuffer geschrieben, die Dateisysteme ausgehängt und das System ausgeschaltet.
Runlevel 1 (S)
Dies ist ein Wartungsmodus. Im Runlevel S stehen nur lokale Ressourcen zur Verfügung.
Und zwar sehr eingeschränkt.
Es werden nur für den Betrieb absolut notwendige Dienste gestartet, und es stehen neben Ein- und Ausgabegeräten und Festplatten keine weiteren Geräte zur Verfügung.
Dieser Runlevel wird für gewöhnlich nur dazu verwendet, Dateisystem-Tests durchzuführen, wenn das System nicht mehr normal starten kann.
Runlevel 1 und Runlevel S sind für gewöhnlich identisch.
Runlevel 2 Dieser Runlevel definiert als erster Runlevel in der Reihenfolge einen Mehrbenutzer-Betrieb. Dieser ist allerdings nur auf den Rechner beschränkt. Die Netzwerkunterstützung ist nicht verfügbar. Unter Arch wird dieser Runlevel nicht verwendet.
Runlevel 3 Im Runlevel 3 sind alle lokalen Ressourcen verfügbar, und es bestehen Mehrbenutzer- sowie Netzwerkunterstützung. Dies ist der übliche Runlevel für Systeme ohne grafische Benutzerschnittstelle und nach einer Arch-Grundinstallation der Standard-Runlevel.
Runlevel 4 Dieser Runlevel ist nicht weiter definiert, kann aber dennoch verwendet werden.
Runlevel 5 Dieser Runlevel entspricht weitestgehend Runlevel 3, allerdings wird unter Runlevel 5 zusätzlich noch eine grafische Benutzerschnittstelle bereitgestellt.
Runlevel 6 Im Runlevel 6 befindet der Computer sich, wenn er neu gestartet wird. Auch hier werden alle Daemons beendet, die Dateisysteme ausgehängt und alle Netzwerkverbindungen getrennt. Danach wird das System neu gestartet. Dieser Runlevel wird auch als „Reboot“ bezeichnet.
Dateien, Verzeichnisse, Anwendungen
- /etc/inittab (in neueren Distributionen mit systemd gibt es diese Datei nicht mehr)
- shutdown
- init
- /etc/init.d
- telinit
- systemd (Systemd ist abwärtskompatibel und kann auch weiterhin die alten Init-Skripte ausführen.)
- systemctl
- /etc/systemd/
- /usr/lib/systemd/
- wall
Wichtigste Befehle
Aktuellen Runlevel ausgeben:
who -r
Aktuellen Runlevel wechseln (n: ist die Nummber des Runlevels):
# telinit n
oder:
# init n
Konfiguration
Was das System in einem bestimmten Runlevel machen soll, wird in der Datei „/etc/inittab“ definiert. Die Definitionen folgen dabei immer einem bestimmten Schema.
id:runlevels:action:process
- Die ID direkt am Anfang einer jeden Definitionszeile ist eine bis zu vier stellen lange, eindeutige Zeichenfolge, die diese Zeile eindeutig vom System erkennbar macht.
- Das zweite Feld definiert, für welchen Runlevel die Definition gilt.
Es können mehrere Runlevel angegeben werden. Diese werden ohne Trennzeichen direkt aneinandergereiht: z. B. „S245“, um diese Definition für die Runlevels S, 2, 4 und 5 einzustellen.
- Die dritte Stelle in der Definition bestimmt, wie/wann der am Ende der Zeile definierte Prozess gestartet werden soll.
Einige mögliche Werte sind zum Beispiel:
respawn: Der Prozess wird jedes mal neu gestartet, wenn er beendet wird.
wait: Der Prozess startet, wenn der definierte Runlevel betreten wird, der Bootvorgang bleibt so lange stehen, bis der definierte Prozess beendet wird.
once: Der Prozess wird einmalig bei betreten des Runlevels ausgeführt.
initdefault: Diese Angabe bestimmt, welcher Runlevel (eben jener, der in einer mit „initdefault“ konfigurierten Zeile definiert wurde) nach dem Systemstart benutzt werden soll.
Das Prozess-Feld wird dabei ignoriert.
Erläuterung
Standardmäßig wird nach einer Grundinstallation von Arch in den Runlevel 3 gebootet, dies wird mittels der nachsten Zeile definiert:
id:3:initdefault:
„initdefault“ bestimmt hier den Standard-Runlevel.
Das Prozess-Feld ist leer gelassen, da diese Angabe sowieso ignoriert wird, will man nach dem Booten nicht in Runlevel 3 sein, sondern auch eine grafische Benutzerschnittstelle verwenden, so ersetzt man die 3 durch eine 5:
id:5:initdefault:
Nun wird automatisch nach dem Start des Systems in Runlevel 5 gewechselt. Dieser muss allerdings noch definiert werden, sonst passiert vermutlich gar nichts. Man kann hier beispielsweise XDM starten lassen, sofern man dieses als Login-Manager benutzt:
x:5:respawn:/usr/bin/xdm -nodaemon
Wenn XDM nun beendet wird, wird es automatisch neu gestartet.
Wenn man dies nicht will, kann man auch „once“ als Action definieren, wenn XDM nun beendet wird, landet man auf der Befehlszeile.
Die Login-Shells, die man unter Alt+F1 bis Alt+F6 erreicht, werden ebenfalls über solche Definitionen gestartet:
c1:2345:respawn:/sbin/agetty -8 38400 tty1 linux
Die ID ist hier „c1“, und beim betreten der Runlevels 2, 3, 4 und 5 wird das Programm „/sbin/agetty“ ausgeführt, wobei die Parameter „-8“, „38400“, „tty1“ und „linux“ benutzt werden.
Was genau die Parameter bewirken, kann in der Manpage zu „agetty“ nachgelesen werden.
Standardmäßig werden unter Arch sechs TTYs erstellt.
Aus Performancegründen kann man dies aber ändern, wenn man sowieso hauptsächlich mit einer grafischen Oberfläche arbeitet, oder der Rechner hauptsächlich als Server im Einsatz ist, auf den nur per SSH zugegriffen wird.
Dazu löscht man die weiteren Definitionen einfach.
Für den Notfall sollte man allerdings mindestens ein TTY definiert lassen.
Beispiel
Nach dem selben System sind die weiteren Standard-Angaben unter Arch aufgebaut. Eine vollständige, aber unkommentierte und bereits angepasste „/etc/inittab“ für Arch ist zum Beispiel diese hier:
id:5:initdefault: rc::sysinit:/etc/rc.sysinit rs:S1:wait:/etc/rc.single rm:2345:wait:/etc/rc.multi rh:06:wait:/etc/rc.shutdown su:S:wait:/sbin/sulogin -p c1:2345:respawn:/sbin/agetty -8 38400 tty1 linux ca::ctrlaltdel:/sbin/shutdown -t3 -r now x:5:once:/bin/su benutzer -l -c "/bin/bash -l -c startx"
Der Standard-Runlevel ist Runlevel 5. Wenn in diesen Runlevel gestartet wurde, wird durch die am Ende der Datei befindliche Definition X mit den Rechten und der Umgebung des Anwenders „benutzer“ gestartet wird. Zudem wird auch nur ein TTY definiert. Die weiteren Angaben sind Standard-Angaben und sollten nur geändert werden, wenn man sich über die Konsequenzen bewusst ist.
102.1 Festplattenaufteilung planen
Allgemeines
- Vor der Linux-Installation
- Erstellung eines Layouts der Partitionierung und der zu verwendenden Dateisysteme
Planung der Partitionsgrößen
- Durch Zerlegen der Verzeichnisstruktur in mehrere Partitionen wird Überfüllung und Stabilität des Systems vorgebeugt
- variierende Daten sollten(z. B. /home, /var) von statischen Daten (z. B. in /usr oder /opt) getrent werden
Der Computer verwendete virtuelle Speicher:
- Besteht aus physikalischem Speicher (RAM) und Swap Space
- Wenn kein physikalischer Speicher mehr übrig ist werden Daten in den Swap Space geladen
Die Größe einer Swap-Partition ist System und Arbeitsspeicher abhängig
- Förderlich wäre es immer doppelt so viel Swap Space wie physikalischer Speicher zu haben
Wie viel Platz der Root-Verzeichnisbaum »/« benötigt, hängt von den erstellten Partitionen ab
- Wenn keine weiteren Partitionen vorliegen, verbraucht Root-Verzeichnisbaum mehr platz
- Für moderne Distribution mindestens 40 GB
- Mehrere Partitionen vorliegend, können 800 MB für das Hauptverzeichnis ausreichen
- Das Verzeichnis /usr belegt bis zu 20 GB
- Das Verzeichnis /var belegt ca. 10 GB
- Für das Verzeichnis /tmp reichen 500 MB
- Das Verzeichnis /home ist vom Platzbedarf nicht vorhersehbar
EFI Systempartition (ESP)
Die EFI-Systempartition wird bei Installation eines Betriebssystems (das EFI unterstützt) automatisch angelegt
- EFI-Systempartition ist 100MB groß
- Initialisiert erst Firmware bevor es den Kernel bzw. Betriebssystem lädt
- Datenträger wird mit GPT (GUID Partition Table) initialisiert
- Partitionen werden nicht mehr im MBR verwaltet und vor Änderungen geschützt
- Auswirkungen können mithilfe von
gdisk
einsehen werden# gdisk
GPT fdisk (gdisk) version 1.0.3
- GPT bietet Platz für bis zu 128 Partitionen
- Die ESP ist standardmäßig unter /boot/efi eingehängt
Logical Volume Manager (LVM)
- LVM verallgemeinert physikalischer Datenträger gegenüber dem Dateisystem
- Im Gegensatz zu RAID-Systemen bieten logische Volumen keine Redundanz
- Beim RAID werden mehrere Datenträger zu einem Array zusammengefasst
- Ausgehend vom Dateisystems wird beim LVM auf logische Volumen zugegriffen
- Vorteil liegt in der flexiblen Verwendung von Speicherressourcen
- logisches Volumen kann nachträglich vergrößert und verkleinert werden
- Vorteile von RAID und LVM können miteinander kombinieren werden, in dem man LVM auf einem bestehenden RAID-Array einrichten
LVM-Komponenten und Zusammenhänge
LVM besteht aus drei Komponenten:
- Physikalische Volumen (pv)
- sind vergleichbar mit echten Partitionen auf einer Festplatte
- Tatsächlich werden diese Volumen auch mittels fdisk vorbereitet
- Der Dateisystemtyp ist 8E.
- Volumen-Gruppen (vg)
- sind ein Zusammenschluss aus mehreren physikalischen Volumen
- Sie können diese Gruppen nachträglich mit weiteren physikalischen Volumen erweitern
- Logische Volumen (lv)
- werden innerhalb der Volumen-Gruppen erstellt
- Aus der Sicht des Dateisystems handelt es sich hierbei um Partitionen
- Sie werden letztendlich in den Dateisystembaum gemountet und verwendet
Sie können sich über die Befehle einen schnellen Überblick verschaffen
# ls -l /sbin/pv* # ls -l /sbin/lv* # ls -l /sbin/vg*
Kontrollfragen
Bis zu wie viel Speicherplatz kann das Verzeichnis /home belegen?
Ist nicht vorhersehbar. Dieses Verzeichnis kann solange Speicher vorhanden ist immer mehr Speicherplatz verbrauchen
Wie Groß ist die EFI-Systempartition?
102.2 Einen Bootmanager installieren
Allgemeines
- System start, benötigt ein Programm, das die für den Bootvorgang nötigen Schritte ausführt
- Wird als Boot-Strap-Loader bezeichnet
- Für Linux Bootloader heutzutage eigentlich nur noch GRUB
- GRUB (Grand Unified Bootloader) ist ein Bootmanager
- Der Bootmanager ist dafür da, den Benutzer zu fragen, welches Betriebssystem er starten soll
- Das ist wichtig, wenn man mehrere Betriebssysteme installiert hat
- Eine Alternative zu GRUB war Lilo
- GRUB ist der Standard Bootmanager bei den meisten Linux Distributionen
Einen Bootmanager installieren
GRUB ist wie gesagt bei der Ubuntu-Installation schon vorinstalliert. Installiert man nun aber Windows nach Ubuntu neu, überschreibt Windows den Master-Boot-Record (MBR). Um das wieder zu beheben, gibt es zwei Möglichkeiten:
- manuell über das Terminal einer Live-CD
- etwas einfacher mit der SuperGrubCD
Wichtigste Wissensgebiete:
- alternative und Notfall-Startmöglichkeiten vorsehen
- einen Bootloader wie GRUB Legacy installieren und konfigurieren
- rundlegende Konfigurationsänderungen an GRUB 2 durchführen
- mit dem Bootloader interagieren
Liste wichtiger Dateien, Verzeichnisse und Anwendungen:
- menu.lst , grub.cfg und grub.conf
- grub - install
- grub - mkconfig
Manuelle Installation
- Ubuntu Live-CD starten und das Terminal öffnen
- Ein sudo grub, um GRUB als root auszuführen
- Ein find /boot/grub/stage1, um den Ort, wo der GRUB-Bootmanager liegt, zu finden
- Nun root (hdx,x) eingeben (x durch Festplatte aus Schritt 3 ersetzen), um die angegebene Festplatte zu konfigurieren und zu mounten
- Um den Grub-Manager nun zu installieren, setup (hd0) ausführen. Achtung: Lasse die Ziffer mit Komma heraus!
- GRUB mit quit schließen und Computer neustarten, nun müsste GRUB auf der angegebenen Festplatte neu installiert sein
Haupt-Unterschiede zwischen GRUB Legacy und GRUB 2
- GRUB 2 braucht im Gegensatz zum Vorgänger die Stage 1.5 nicht mehr
- Diese lag zwischen dem MBR und dem ersten Block der ersten Partition
- Die Stage 2 von GRUB 2 beinhaltet einen Kernel, welcher den notwendigsten Code beinhaltet
- Dazu gehören ein ELF-Loader( Executable and Linkable Format ), Datenträger-Zugriff, eine Rettungs-Shell und Code zur Dekompression
- Während der Installation erzeugt GRUB 2 die Module für das Dateisystem in der Datei core.img und komprimiert diese normalerweise mittels LZMA ( Lempel-Ziv-Markow-Algorithmus ) oder LZO ( Lempel-Ziv-Oberhumer)
- Diese Datei ist in der Regel so klein, dass sie sich im Startbereich hinter dem MBR ablegen lässt
Links
- http://wiki.ubuntu-forum.de/index.php?title=GRUB#GRUB_installieren
- https://de.wikipedia.org/wiki/Bootmanager
- https://www.tecchannel.de/a/grub-2-den-neuen-bootmanager-richtig-einsetzen,2025415,2
Kontrollfragen
1. Was bedeutet die Abkürzung GRUB?
2. Was ist GRUB?
3. Im welchem Verzeichnis befindet sich die Hauptkonfigurationsdatei?
4. Wie heißen die wichtigsten Dateien, Verzeichnisse und Anwendungen für GRUB?
5. Was ist LZMA und LZO?
Wichtigste Wissensgebiete
- Shared Libraries identifizieren
- die typischen Orte für Systembibliotheken identifizieren
- Shared Libraries laden
Liste wichtiger Dateien, Verzeichnisse und Anwendungen:
- ldd
- ldconfig
- /etc/ld.so.conf
- LD_LIBRARY_PATH
Allgemeines
- Eine Bibliothek ist ein kompilierter Satz von Code, der alle Objekte enthält, die zum Ausführen einer in eine Datei integrierten Software erforderlich sind.
- Beispielsweise druckt man eine Eingabe und eine Ausgabe.Man hat die Aufgabe, Daten zu speichern und ... all dies wird nicht von Grund auf neu programmiert.Beispielsweise müssen Sie das Daten eingabe programm nicht mehr neu schreiben, sondern es einfach aus einer Bibliothek abrufen,
- Um zu identifizieren, von welchen Libraries ein Programm abhängt, können Sie dasTool ldd verwenden. Die Ausgabe des Programms zeigt gleichzeitig die Position der benötigten Libraries im Dateisystem an:
archangel:/ # ldd /usr/bin/grep linux-gate.so.1 => (0xffffe000) libc.so.6 => /lib/tls/libc.so.6 (0x40030000) /lib/ld-linux.so.2 (0x40000000)
- Wenn Sie neue Bibliotheken auf einem System installieren, benötigen Sie das Programm ldconfig,damit der dynamische Linker diese Bibliotheken auch verwendet.
- Zu diesem Zweck liest ldconfig die Datei /etc/ld.so.confbzw. alle conf-Dateien im Verzeichnis /etc/ld.so.conf.d ein. Hier sind alle Verzeichnisse aufgelistet, in denen sichdynamische Libraries befinden:
- archangel:/ # less /etc/ld.so.conf
/usr/i486-linux/lib /usr/i486-linux-libc5/lib=libc5 /usr/i486-linux-libc6/lib=libc6 /usr/i486-linuxaout/lib /usr/i386-suse-linux/lib /usr/local/lib
- Diese Verzeichnisse werden von ldconfig konsultiert, um die Datei/etc/ld.so.cache aufzubauen. Danach können die neuen Libraries vom dynamischen Linker verwendet und bei Bedarf eingebunden werden.
- Um den aktuellen Inhalt der Datei /etc/ld.so.cache anzuzeigen, verwenden Sie folgen des Kommando:
archangel:/ # ldconfig -p | less 1128 libs found in cache `/etc/ld.so.cache' libzvbi.so.0 (libc6) => /usr/lib/libzvbi.so.0 libzio.so.0 (libc6) => /usr/lib/libzio.so.0 libzio.so (libc6) => /usr/lib/libzio.so libz.so.1 (libc6) => /lib/libz.so.1 libz.so.1 (libc6) => /usr/lib/libz.so.1 libz.so (libc6) => /usr/lib/libz.so liby2.so.2 (libc6) => /usr/lib/liby2.so.2 libyui.so.2 (libc6) => /usr/lib/libyui.so.2
- Manche Programme funktionieren nur dann, wenn eine Bibliothek mit einer bestimmten Versionsnummer auf Ihrem System installiert ist.
- Die Versionsnummer einer einzelnen Bibliothek ermitteln Sie auf folgendem Weg:
archangel:/ # ldconfig -p | grep libusb libusb-0.1.so.4 (libc6) => /usr/lib/libusb-0.1.so.4
LD_LIBRARY_PATH
- Wenn ein Programmierer eigene Bibliotheken programmiert, kann er diese testen,indem er das Betriebssystem veranlasst,vorübergehend auf andere Verzeichnisse zuzugreifen, wenn Bibliotheken benötigt werden.
- Zu diesem Zweck werden der Variablen LD_LIBRARY_PATH die entsprechenden Pfade zuden Bibliotheken übergeben.Mehrere Pfade werden hierbei durch Doppelpunkte voneinander getrennt.
- Standardmäßig ist die Variable LD_LIBRARY_PATHnicht gesetzt.
Kontrollfragen
Testfrage 1
Testfrage 2
Testfrage 3
Testfrage 4
Testfrage 5
Grundlegende Packagverwaltung
- Paket-Manager sind auch als Paketverwaltung oder Package Manager bekannt.
- Die Termini bezeichnen eine Sammlung von Werkzeugen für die komfortable Verwaltung von Computer-Software auf Betriebssystemen, welche die Paketverwaltung zur Installation des Pakets am System vornehmen muss, werden von dieser aus dem Paket ausgelesen und umgesetzt.
- Erkennt die Paketverwaltung dabei, dass noch weitere Software für das Funktionieren benötigt wird.
- Soll eine installierte Software gelöscht werden, nimmt die Paketverwaltung dann wieder die Informationen des Pakets, um es anhand dessen Konfiguration zu ändern und Dateien zu löschen.
- Paketinformationen erhalten, wie Version, Inhalt, Abhängigkeiten, Integrität des Paketes und Installationsstatus ob das Paket installiert ist oder nicht.
Aufruf |
Anmerkungen |
apt install 'Paketname' |
Paket installieren |
apt upgrade 'Paketname' |
Paket aktualisieren |
apt remove 'Paketname' |
Paket deinstallieren |
apt list --installed |
installierte Pakete auflisten |
apt list 'Paketname' |
Informationen und Status des Pakets anzeigen |
apt-cache rdepends 'Paketname' |
Abhängigkeiten anzeigen |
aptitude show 'Paketname' |
Suche in allen verfügbaren Paketen |
DPKG-Programme
dpkg
- Wenn Sie ein Programm auf einem Debian-basierten System installieren wollen, das als Debian-Paket vorliegt, verwenden Sie das Kommando dpkg.
- Heutzutage wird man allerdings Installationsprogrammen, wie apt oder apt-get den Vorzug geben, weil diese etliche Vorteile gegenüber dpkg bieten.
- Viele Optionen von dpkg können sowohl in der kurzen als auch in der langen Notation übergeben werden.
Die beiden folgen den Kommandos installieren jeweils ein Paket:
debian:/pakete# dpkg -i fortune_1.0-861_i386.deb debian:/pakete# dpkg --install fortune_1.0-861_i386.deb
Entsprechend ist die Ausgabe, die von diesen beiden Kommandos erzeugt wird, ebenfalls identisch:
Wähle vormals abgewähltes Paket fortune. (Lese Datenbank ... 75945 Dateien und Verzeichnisse sind derzeit installiert.) Entpacke fortune (aus fortune_1.0-861_i386.deb) ... Richte fortune ein (1.0-861) ...
Die Deinstallation eines Programms erfolgt wahlweise mithilfe der Schalter
- -r oder--remove. Hierbei bleiben eventuelle Konfigurationsdateien eines Programms erhalten. Wenn Konfigurationsdateien ebenfalls aus dem System entfernt werden sollen, müssen Sie die Optionen
- -P bzw. --purge verwenden. Es folgt eine Auflistung der wichtigsten Optionen für die Prüfung:
- -i bzw. --install installiert das angegebene Paket.
- -r bzw. --remove entfernt das angegebene Paket. Konfigurationsdateien bleiben aber erhalten. Achtung! Die Option
- -e ist nicht, wie bei RPM,die Erase-Funktion!
- -P bzw. --purge entfernt das angegebene Programm inklusive der Konfigurationsdateien.
- -s bzw. --status gibt umfangreiche Informationen über das installierte Paket aus.
- -C bzw. --audit zeigt Pakete an, die nur teilweise auf dem System installiert sind.
- -L bzw. --listfileszeigt die Dateien an, die ein Paket installiert hat.
dselect
dselect ist ein Frontend für dpkg
Operationen
- Zugriffsmethode auswählen
- Liste verfügbarer Pakete erneuern
- Auswahl von Pakete
- Pakete installieren und aktualisieren
- nicht konfigurierten Pakete konfigurieren
- Software löschen
dpkg-reconfigure
- Mit dpkg-reconfigure können Sie ein bereits installiertes Paket neu konfigurieren.
- Mit dpkg-reconfigure-a können Sie sogar alle installierten Pakete neu konfigurieren.
- Dieser Vorgang kann aber in Abhängigkeit von der Menge der installierten Pakete sehr viel Zeit in Anspruch nehmen.
Konfigurationsdateien und Verzeichnisse
/etc/dpkg/dpkg.cfg
Das ist die Konfigurationsdatei für dpkg.In dieser Datei werden die voreingestellten Optionen für dpkg festgelegt. Sie können sich dabei Arbeitsaufwand ersparen, wenn Sie immer dieselben Optionen mit dpkg verwenden. Die Datei wird zeilensepariert ausgewertet. Es steht also in jeder Zeile nur eine Option.Bei den meisten aktuellen Distributionen enthält die Datei im Auslieferungszustand nur eine einzige Zeile, mit der die Logdatei definiert wird:
log /var/log/dpkg.log
/var/lib/dpkg/info
In diesem Verzeichnis befinden sich zu jedem installierten Paket mehrere Skripte und Dateien, die für eine korrekte Installation und auch später wieder für die Deinstallation benötigt werden. Das Beispiel zeigt die entsprechenden Dateien für den Editor nano:
/var/lib/dpkg/info# ls -l nano* -rw-r--r-- 1 root root 12 Jul 16 2014 nano.conffiles -rw-r--r-- 1 root root 4557 Apr 2 2016 nano.list -rw-r--r-- 1 root root 5246 Jul 16 2014 nano.md5sums -rwxr-xr-x 1 root root 582 Jul 16 2014 nano.postinst -rwxr-xr-x 1 root root 160 Jul 16 2014 nano.postrm -rwxr-xr-x 1 root root 153 Jul 16 2014 nano.prerm
Wenn Sie nach einer verunglückten Installation manuell das System aufräumen möchten, finden Sie immer in der entsprechenden .list Datei eine Aufstellung aller zum Programm gehörenden Dateien und Verzeichnisse. Im Falle von nano handelt es sich dabei übrigens um 64 über das System verteilte Dateien.
/var/lib/dpkg/status
In der Datei status sind Informationen über bereits installierte Pakete hinterlegt. Es wird auch angegeben, ob die Installation vollständig ausgeführt oder ob ein Programm bereits wieder deinstalliert wurde. Das Beispiel zeigt Informationen über einen korrekt installierten nano-Editor:
Package: nano Status: install ok installed Priority: important Section: editors Installed-Size: 1624 ... weitere Zeilen wurden abgeschnitten ...
Der nächste Eintrag zeigt ein Paket, das sauber deinstalliert wurde:
Package: courier-imap Status: deinstall ok config-files Priority: extra Section: mail Installed-Size: 1540 ... weitere Zeilen wurden abgeschnitten ...
/var/lib/dpkg/available
Diese Datei enthält eine Liste der verfügbaren Pakete. Sie beinhaltet Informationen über die Größe des Paketes, die Versionsnummer, Abhängigkeiten, den Autor, die Prozessorarchitektur und vieles andere mehr. Das Beispiel zeigt einen Eintrag für den Editor nano:
Package: nanontp Priority: important Section: editors Installed-Size: 1624 Maintainer: Ubuntu Core Developers <ubuntu-devel@lists.ubuntu.com> Architecture: i386 Version: 2.0.2-1 eplaces: pico Provides: editor Depends: libc6 (>= 2.5-0ubuntu1), libncursesw5 (>= 5.4-5) Suggests: spell Conflicts: nano-tiny (<= 1.0.0-1), pico Size: 286950 Description: free Pico clone with some new features ... weitere Zeilen wurden abgeschnitten ..
/etc/apt/apt.conf
Hierbei handelt es sich um die Konfigurationsdatei für die apt-tools.Normalerweise ist hier nur ein Eintrag für den verwendeten Proxy hinterlegt,damit apt-get ohne Probleme Pakete aus dem Internet herunterladen kann. Beispiel:
debian:/# cat /etc/apt/apt.conf Acquire::http::Proxy "http://192.168.0.1:3128";
/etc/apt/sources.list
Diese Datei enthält die Quellen für apt-tools. Das ist meistens eine Liste mit FTP-Servern oder auch HTTP-Servern,von denen Software mittels apt-tools online installiert werden kann.Zusätzlich sind natürlich auch lokale Quellen in dieser Datei enthalten.Beispiel:
# cat /etc/apt/sources.list deb cdrom:[Debian GNU/Linux 9.3.0 _Stretch_ - Official amd64 DVD Binary-1 20171209-12:11]/ stretch contrib main deb http://ftp.halifax.rwth-aachen.de/debian/ stretch main deb-src http://ftp.halifax.rwth-aachen.de/debian/ stretch main deb http://security.debian.org/debian-security stretch/updates main contrib deb-src http://security.debian.org/debian-security stretch/ updates main contrib # stretch-updates, previously known as 'volatile' deb http://ftp.halifax.rwth-aachen.de/debian/ stretch-updates main contrib deb-src http://ftp.halifax.rwth-aachen.de/debian/ stretch-updates main contrib
Kontrollfragen
Testfrage 1
Testfrage 2
Testfrage 3
Testfrage 4
Testfrage 5
RPM
Das RPM-Format ist Teil der Linux Standard Base und bedeutet RPM Package Manager, früher Red Hat Package Manager.
RPM, der Red Hat Package Manager, ist wie dpkg sehr häufig verbreitet. Er kann ebenso Pakete fertig kompilierte Pakete installieren.
Er ermöglicht ebenfalls die Installation
von Programmen, die bereits fertig kompiliert in einem Binärformat vorliegen.
bash-4.4.19-2.aarch64.rpm
- Der Name des Paketes ist bash
- Die Versionsnummer lautet4.4.19
- Die Revisionsnummer (Release) ist 2.
- Die unterstützte Architektur ist aarch64
Wenn Sie Software mittels rpm installieren, stehen Ihnen, ähnlich wie bei dpkg, Optionen in zwei Schreibweisen zur Verfügung. So können Sie ein Paket sowohl mit rpm-e als auch mit rpm--erase deinstallieren. Die wichtigsten Optionen zur aktiven Arbeit mit rpm sind die folgenden:
- -i bzw. --install installiert das angegebene Paket (oder die Pakete).
- -U bzw. --upgrade aktualisiert das angegebene Paket (oder die Pakete) bzw. installiert es einfach, wenn keine Vorgängerversion gefunden wird.
- F- bzw. --freshen aktualisiert Pakete nur, wenn diese auf dem System bereits vorhanden sind.
- -v bzw. --verbose aktiviert den Verbose-Mode.
- -e bzw. --erase(früher --uninstall) entfernt das angegebene Paket.
- -h bzw. --hash sorgt für eine Fortschrittsan zeige mit 50 Hash-Zeichen (#).
Query Option
Die Query Options dienen dazu, Informationen zu einem bestimmten Paket zubekommen. Sie sollten sich die folgenden Optionen einprägen:
-qR bzw. --requires zeigt Abhängigkeiten zu anderen Paketen an.
-qlbzw. --list führt die im Paket enthaltenen Dateien auf. -qc bzw. --configfiles zeigt nur die Konfigurationsdateien eines Paketes an qd bzw. --docfiles zeigt nur die Dokumentationsdateien eines Paketes an.
-qi bzw. --info zeigt umfangreiche Informationen zu einem Paket an
Installation, Update und Deinstallation
Wenn Sie Software mittels rpm installieren, stehen Ihnen, ähnlich wie bei dpkg, Optionen in zwei Schreibweisen zur Verfügung. So können Sie ein Paket sowohl mit rpm-e als auch mit rpm--erase deinstallieren. Die wichtigsten Optionen zur aktiven Arbeit mit rpm sind die folgenden:
- -i bzw. --install installiert das angegebene Paket (oder die Pakete).
- -U bzw. --upgrade aktualisiert das angegebene Pake
- t (oder die Pakete) bzw. installiert es einfach, wenn keine Vorgängerversion gefunden wird.
- -F bzw. --freshen aktualisiert Pakete nur, wenn diese auf dem System bereits vor handen sind.
- -v bzw. --verbose aktiviert den Verbose-Mode.
- -e bzw. --erase(früher --uninstall) entfernt das angegebene Paket.
- -h bzw. --hash sorgt für eine Fortschrittsan zeige mit 50 Hash-Zeichen8(#)
Ein typisches rpm-Kommando zur Installation wäre folgendes:
archangel:/ # rpm -Uhv /i586/fortune-1.0-860.i586.rpm Preparing.. ########################################### [100 %] 1:fortune ########################################### [100 %]
Das Programm war übrigens vorher vom System entfernt worden. Trotzdem hat die Option -U keinen Fehler hervorgerufen, so ndern das nicht vorhandene Programm aktualisiert
Zwangsinstallation
Sollte ein Paket die Installation verweigern, können Sie es meist trotzdem installieren, wenn Sie die entsprechenden Optionen kennen. Das könnte z. B. der Fall sein, wenn eine oder mehrere Abhängigkeiten nicht erfüllt sind oder wenn ein Konflikt mit einem bestehenden Paket besteht. Sie sollten diese Optionen also nur dann verwenden, wenn Sie sich über die Konsequenzen der Installation im Klaren sind:
- --force erzwingt die Installation auch bei bestehenden Konflikten.
- --nodeps lässt die Prüfung der Abhängigkeiten aus.
Das gilt sowohl für die Installation als auch für die Deinstallation von Paketen.Für beide Schalter gibt es völlig zu Recht keine Kurzform, damit man sich der Tragweite des jeweiligen Kommandos bewusst wird.
YUM
(Yellow Dog Updater Modified)ist ein Werkzeug zur Verwaltung von RPM-Paketen (*.rpm) und wurde (wie der Name schon andeutet) ursprünglich für Yellow Dog entwickelt. Inzwischen wurde YUM auch in andere Distributionen wie zum Beispiel RedHat, Fedora und CentOS integriert.
Mit dem Programm yum können Sie ähnlich wie mit apt-get Programme installieren.Allerdings handelt es sich in diesem Fall um RPM Pakete und nicht um DPKG Pakete.
Die Hauptkonfigurationsdatei von yum ist /etc/yum.conf.Hier wird unter anderem das Cache-Verzeichnis für Pakete festgelegt.In der Standardeinstellung befindet es sich unter /var/cache/yum.Im Verzeichnis /etc/yum.repos.d .liegen Dateien mit der Dateierweiterung repo.In diesen Dateien befinden sich Verweise auf URLs, die Quellen für
RPM Pakete enthalten.
Um ein Programm mithilfe von yum zu suchen, gehen Sie ähnlich vor wie bei aptitude bzw.
[root@centos /]# yum search fortune Loading "installonlyn" plugin Setting up repositories extras 100 % |=========================| 1.1 kB 00:00 updates 100 % |=========================| 951 B 00:00 base 100 % |=========================| 1.1 kB 00:00 addons 100 % |=========================| 951 B 00:00 Reading repository metadata in from local files primary.xml.gz 100 % |=========================| 90 kB 00:00 ################################################## 298/298 primary.xml.gz 100 % |=========================| 101 kB 00:00 ################################################## 156/156 primary.xml.gz 100 % |=========================| 878 kB 00:03 ################################################## 2508/2508 primary.xml.gz 100 % |=========================| 157 B 00:00 Excluding Packages in global exclude list Finished fortune-mod.i386 1.99.1-7.el5.centos extras Matched from: fortune-mod A program which will display a fortune Fortune-mod contains the ever-popular fortune program, which will display quotes or witticisms. Fun-loving system administrators can add fortune to users' .login files, so that the users get their dose of wisdom each time they log in. http://www.redellipse.net/code/fortune
yum – Informationen zu Pakten
yum list – Zeigt alle Paket die zur Verfügung stehen (auch nicht installierte) mit der Angabe ob es installiert ist oder in welcher Paketquelle es zur Verfügung steht.
- yum list installed oder yum list available.
- yum info (Info zu einem Paket).
- yum search (Suche nach Paket).
- yum deplist (Abhängigkeiten zu einem Paket)
- yum update(Achtung nicht wie bei apt werden hier die Pakete aktualisiert. Zuvor wird geprüft, ob es neuere Versionen gibt)
- yum upgrade = yum update –obsoletes (hier wird auch geprüft ob Paket durch andersbenannte Pakete ersetzt werden können oder wurden)
Zypper
Ein weiteres Tool zum Management von RPM-Paketen ist zypper.Sie finden zypper allerdings nur bei openSuse.Genau wie YaST2 verwendet zypper die Bibliothek lib-zypp(kurz ZYpp).Pakete, die mit YaST2 installiert wurden lassen sich mit zypper problemlos deinstallieren und umgekehrt.Die Installation von Software funktioniert genauso, wie Sie es bereits von yum kennen:
suse42:~ # zypper install iptraf-ng Repository-Daten werden geladen... Installierte Pakete werden gelesen... Paketabhängigkeiten werden aufgelöst... Das folgende NEUE Paket wird installiert: iptraf-ng 1 neues Paket zu installieren. Gesamtgröße des Downloads: 76,6 KiB. Bereits im Cache gespeichert: 0 B. Nach der Operation werden zusätzlich 180,4 KiB belegt. Fortfahren? [j/n/...? zeigt alle Optionen] (j):
Die meisten Kommandos können auch in einer Kurzform(bestehend aus zwei Zeichen) eingegeben werden:
- in bzw. install Pakete installieren
- rm bzw. removen Pakete entfernen
- se bzw. search nach Paketen such
- ve bzw. verify Integrität der Paketabhängigkeiten prüfen
- lr bzw. repos Repositorys auflisten
- ar bzw. addrepo Repository hinzufügen
- rr bzw. removerepo Repository entfernen
- ref bzw. refresh Repositorys aktualisieren clean Cache bereinigen
- up bzw. update installierte Pakete aktualisieren
- lu bzw. list-updates verfügbare Aktualisierungen auflisten patch Patches installieren
- lp bzw. list-patches Patches auflisten
- dup bzw. dist-upgrade Distributionsaktualisierung durchführen
- if bzw. info Infos für angegebene Pakete anzeigen
Kontrollfragen
Testfrage 1
Testfrage 2
Testfrage 3
Testfrage 4
Testfrage 5
Virtualisierung
- Der Hauptgrund für die Virtualisierung von Computern ist die wesentlich effizientere Nutzung von Hardware ressourcen und die damit verbundene Kostenersparnis.
- Die meisten physikalischen Server verwenden nur einen Bruchteil der verfügbarenHardware, weil bei der Anschaffung von Servern gerne großzügig dimensioniert wird, damit es nicht frühzeitig zu Leistungsengpässen kommt.
- Wenn sich mehrere virtuelle Server einen physikalischen Server teilen, können Sie die Ressourcen dynamisch zuweisen, also z. B. überschüssigen Arbeitsspeicher eines Servers reduzieren und diesen einem anderen Server zuweisen.
- Der Umzug eines virtuellen Servers auf eine leistungsfähigere Hardware ist natürlich auch erheblich einfacher, als derUmzug einer nativen Serverinstallation.
- Für die Virtualisierung wird ein Hypervisor(auch Virtual-Machine-Monitor, VMM genannt) benötigt:
- Dieser liegt als Schicht zwischen der Hardware des Hostsystems und den virtuellen Maschinen (Gastsysteme).
- Hierbei unterscheidet man zwischen Typ 1 und Typ 2 Hypervisor.
Ein Typ1 Hypervisor
- Ein Typ 1 Hypervisor läuft, ohne dass zuvor ein Betriebssystem auf dem Host installiert werden muss,direkt auf der Hardware.
- Man spricht hier auch von einer Bare- Metal-Installation. Ohne Gastsystem kann auf einem Typ 1 Hypervisor keine Anwendung ausgeführt werden.
- Beispiele hierfür sind VMware vSphere/ESXi, XEN, KVM, Red Hat Enterprise Virtualization und Hyper-V.
Ein Typ2 Hypervisor
- benötigt ein Betriebssystem auf dem Hostrechner. Auf dem Hostbetriebssystem kann zusätzlich andere Software installiert sein. Beispiele hier-für sind VMware Workstation und VirtualBox.
- Typ 2 Hypervisor gibt es üblicherweise für unterschiedliche Hostsysteme. Dadurch ist es sogar möglich, Gastsysteme plattformübergreifend zu migrieren (z. B. von VirtualBox auf Windows zu VirtualBox auf Linux oder umgekehrt
Vollvirtualisierung
- Bei einer Vollvirtualisierung präsentiert der Hypervisor dem Gastsystem einen virtuellen Computer und das Gastsystem erfährt nicht, dass es sich in einer virtualisierten Umgebung befindet.
- Der einzige Vorteil dabei ist, dass das Gastsystem keine Unterstützung für Virtualisierung bieten muss, was aber heutzutage nur noch bei Exoten der Fall sein dürfte.
Paravirtualisierung
- Die Paravirtualisierung ist sozusagen der Gegenspieler der Vollvirtualisierung.
- Hier weiß das Gastsystem, dass es in einer virtualisierten Umgebung läuft.
- Das hat den Vorteil, dass das Gastsystem den Hypervisor kontaktieren kann (Hypercall).
- Umgekehrt kann auch der Hypervisor das Gastsystem ansprechen. So ist es z. B. möglich, das Gastsystem mit einer Verwaltungskonsole des Hypervisors herunterzufahren.
- Auch eine Zeitsynchronisation mit dem Host ist ein wesentliches Feature, das die Paravirtualisierung, im Gegensatz zur Vollvirtualisierung, unterstützt.
Klonen virtueller Maschinen
- Damit virtuelle Maschinen schneller breitgestellt werden können, ist es sinnvoll, diese nicht jedes Mal von Grund auf neu zu installieren.
- Stattdessen erstellen Sie nur eine virtuelle Maschine als Referenzsystem und klonen dieses im Bedarfsfall.
- Das Referenzsystem sollte allerdings gepflegt, also regelmäßig mit Updates versehen werden, damit geklonte Maschinen gleich auf einem neuen Stand sind und nicht gleich Unmengen Updates installieren müssen.
- Ein Klon gleicht dem Referenzsystem leider wie ein Schaf dem anderen. Deshalb müssen Sie noch ein paar Vorkehrungen treffen, bevor Sie den neuen virtuellen Host aktiv nutzen können. Sie sollten z. B. den Hostnamen und die IP-Adresse ändern, damit es nicht zu einem Konflikt kommen kann.
Container / Anwendungscontainer
- Wenn sehr viele gleichartige virtuelle Maschinen benötigt werden, kann man auf Containervirtualisierung zurückgreifen.
- Bei dieser Art der Virtualisierung wird kein Hypervisor eingesetzt und es wird auch keine virtuelle Hardware zur Verfügung gestellt.
- Deshalb ist es auch nicht möglich, Windows-Container auf einem Linux- Host auszuführen oder umgekehrt.
- Das liegt daran, dass zwar Teile des Betriebssystems pro Gast isoliert zur Verfügung gestellt werden (Dateisystem, Bibliotheken), aber alle verwenden zumindest denselben Kernel.
chroot
- Eine frühe Form der Containervirtualisierung ist chroot.
- Diese Technologie wird verwendet um Programme in einer isolierten Umgebung (Sandbox, Jail) auszuführen.
- Hierzu werden in einem Verzeichnis alle für das zu isolierende Programm notwendigen Verzeichnisse, Dateien, Bibliotheken und auch Gerätedateien angelegt und das Programm in diesem Verzeichnis "eingesperrt".
- Dieses Verzeichnis ist aus der Sicht dieses Programms das Hauptverzeichnis (chroot = change root).
Docker
- Docker ist eine moderne Containervirtualisierung.
- Im Prinzip läuft eine virtuelle Dockeranwendung auch in einem isolierten Verzeichnis, das bei Docker als Container bezeichnet wird.
- Die Einrichtung ist im Vergleich zu
chroot
allerdings erheblich einfacher.
Cloud/Infrastructure as a Service (IaaS)
Es gibt viele Produkte, die als Clouddienste angeboten werden. Jeder kennt heutzu- tage Dropbox, OneDrive und andere Anbieter, wo auch für Privatanwender Speicherplatz zur Verfügung gestellt wird. Beliebt sind auch Onlinekalender,Adressbücher und ganze Officepakete. Abgesehen davon, dass Ihre Daten sich auf fremden Servern befinden, bieten Public Clouds natürlich auch erhebliche Vorteile:
- Zugriff auf Ressourcen von überall aus
- Netzwerkbandbreiten müssen nicht selbst vorgehalten werden.
- kein Hardwarekauf für Server
- Backuplösungen sind in der Regel integriert.
- schnelle Skalierbarkeit
- physikalische Sicherheit durch externe Dienstleister
- geringe Kosten
cloud-init
cloud-init ist ein Paket, das Probleme löst, die beim Klonen virtueller Maschinen entstehen. Einige wesentliche Aufgaben, die mittels cloud-init durchgeführt werden können, sind:
- Hostname konfigurieren
- Benutzerdaten eintragen
- Standard-Gebietsschema einstellen
- privaten SSH-Schlüssel für den Host erstellen
- öffentlichen SSH-Schlüssel eines Benutzers hinterlegen Vorbereiten der Repositorys für die Paketverwaltung
- Pakete installieren
- Benutzerskripte ausführen
- Die hierfür erforderlichen Angaben können bei unterstützenden Cloudanbietern über die Verwaltungsoberfläche eingetragen werden.
Wichtigste Wissensgebiete
- Einzelne Shell-Kommandos und einzeilige Kommandofolgen verwenden, um einfache Aufgaben auf der Kommandozeile zu lösen
- Die Shell-Umgebung verwenden und anpassen, etwa um Umgebungsvariablen zu definieren, zu verwenden und zu exportieren
- Die command-history verwenden und ändern
- Kommandos innerhalb und außerhalb des definierten Suchpfads aufrufen
Wichtiger Dateien, Verzeichnisse und Anwendungen
Allgemeines
- Damit man im Textmodus mit dem Computer kommunizieren kann, benötigt man eine Shell. Man kann über diese Shell mit dem Kern(el) Informationen austauschen
- Unter Linux wird standardmäßig die Bash als Shell verwendet. Hierbei handelt es sich um eine Weiterentwicklung der ursprünglichen Unix-Shell sh
- Die Shell sh ist immer noch Bestandteil von Linux, wird aber zumindest als Login-Shell nicht mehr so oft verwendet
Aufbau eines Shell-Kommandos
- Ein Kommando besteht aus bis zu drei verschiedenen Komponenten. Die erste Komponente ist das Kommando selbst, also eine ausführbare Datei, ein Skript oder ein Shell-interner Befehl
- Ein Kommando kann auch für sich allein stehen und ohne Optionen oder Argumente funktionieren:
# mount
- Wenn das Kommando
mount
ohne Optionen oder Argumente ausgeführt wird, zeigt es aktuell eingehängte Dateisysteme an Es gibt aber auch Konstellationen, in denen ein Kommando mit einer oder mehreren Optionen ausgeführt wird:
# mount -a
- In diesem Beispiel wurde
mount
mit der Option-a
ausgeführt. Das Programmmount
würde mit dieser Option alle in der Datei /etc/fstab aufgeführten Dateisysteme einhängen - Es ist aber auch möglich,
mount
ausschließlich mit Argumenten zu versehen:
# mount /dev/sda1 /boot
- Argumente unterscheiden sich von Optionen. Eine Option sagt einem Programm, wie es sich verhalten soll. Argumente teilen einem Programm mit, was es verarbeiten soll
- Es ist möglich, einem Programm sowohl mehrere Optionen als auch mehrere Argumente zu übergeben. Bei vielen Programmen ist die Reihenfolge sogar variabel:
mount -o username=antje,password=xy //fs1/data /mnt/ -t smbfs
- Das Beispiel zeigt eine Mischung mit einer Option vorn, einer Option hinten und den Argumenten in der Mitte. Der
mount
-Befehl baut in diesem Fall eine Netzwerkverbindung zu einem Windows-Computer auf
Übergabe der Optionen
- Bei der Übergabe von Optionen gibt es mehrere gängige Methoden
- Einige Kommandos verlangen, dass den Optionen ein Bindestrich vorangestellt wird, andere arbeiten auch ohne einleitenden Bindestrich
- Viele Programme sehen vor, dass ganze Wörter als Optionen verwendet werden. Diesen werden in der Regel zwei Bindestriche vorangestellt. Das folgende Beispiel kennen Sie sinngemäß schon aus dem vorangegangenen Kapitel:
# rpm --install -vh /i586/fortune-1.0-860.i586.rpm Preparing.. ########################################### [100 %]
- Ein weiterer prominenter Vertreter der flexiblen Programme ist
tar
. Man kanntar
mit normalen Optionen oder Optionswörtern verwenden. Außerdem kanntar
auch Optionen ohne vorangestellte Bindestriche übernehmen. Die folgenden vier Kommandos führen beitar
zum selben Ergebnis:
# tar -x -z -v -f xmbmon205.tar.gz # tar -xzvf xmbmon205.tar.gz # tar xvzf xmbmon205.tar.gz # tar --extract --gzip --verbose --file=xmbmon205.tar.gz
Umgebungsvariablen und Shellvariablen
- Die Unterschiede zwischen diesen beiden Variablentypen liegen einerseits drin.
- Durch welche Konfigurationsdateien sie deklariert werden
- Und demzufolge wann und durch welches Programm sie ausgewertet werden
- Und andererseits in ihrem Wirkungsbereich:
- Umgebungsvariablen:
- Gelten für alle Shells, die ein Benutzer verwendet
- Die Inhalte dieser Variablen werden an Subshells vererbt. Das bedeutet, dass beim Aufruf einer Subshell ein automatischer Export der Variablen in diese Subshell stattfindet
- Bei Umgebungsvariablen werden normalerweise Großbuchstaben verwendet
- Shellvariablen:
- Müssen in jeder Subshell, die durch den Benutzer oder ein Skript gestartet wird, neu deklariert werden
- Es findet standardmäßig keine Vererbung statt
- Für Shellvariablen verwendet man üblicherweise Kleinbuchstaben
- Umgebungsvariablen:
PATH-Variable
- Wenn man ein Programm ausführen will, das sich nicht in einem in Ihrer PATH-Variablen enthaltenen Verzeichnis befindet, muss man den kompletten Pfad zu diesem Programm auf der Kommandozeile mit angeben
- Wenn man ein Programm ohne Angabe eines Pfades startet, prüft die Shell zunächst, ob es sich um ein internes Kommando der Shell handelt. Dazu zählen:
echo, bg, fg,jobs, kill, pwd, set, unset
und viele mehr
- Falls kein passendes Kommando gefunden wird, sucht die Shell das Programm inallen Verzeichnissen, die in der PATH-Variablen enthalten sind
- Sollten mehrere Programme mit dem gleichen Namen vorhanden sein, wird das zuerst gefundene ausgeführt. Man kann in einem solchen Fall das Kommando
which
verwenden, um festzustellen, welches Programm die Shell automatisch ausführt:
# which less /usr/bin/less
- Es ist zu beachten, dass ein Programm auch dann nicht ohne Pfadangabe ausgeführt wird, wenn man sich aktuell in dessen Verzeichnis befindet. Dieses Verhalten gibt esunter DOS, aber nicht bei Linux
- Man kann ein Programm, das sich im aktuellen Verzeichnis befindet, aber auch starten, indem Sie ./ dem Programm voranstellen. Die Zeichen ./ repräsentieren das aktuelle Verzeichnis. Sie können z. B. Konfigurationsskripte von Tar-Balls im aktuellen Verzeichnis ausführen, indem Sie folgende Syntax verwenden:
archangel:/usr/src/xmbmon205 # ./configure
- Wenn man einen Prompt verwendet, der ihn nicht anzeigt, in welchem Verzeichnis man sich gerade befindet, verwendet man das Kommando
pwd
(Path of Working Directory) ohne Optionen. Der Pfad wird Ihnen dann angezeigt:
archangel:/usr/src/xmbmon205 # pwd /usr/src/xmbmon205
- Man kann sich den Inhalt Ihrer PATH-Variablen, genau wie den anderer Variablen, anzeigen lassen:
archangel:/ # echo $PATH /sbin:/usr/sbin:/usr/local/sbin:/root/bin:/usr/local/bin:/usr/bin:/usr/X11R6/ bin:/bin:/usr/games:/opt/gnome/bin:/opt/kde3/bin:/usr/lib/jvm/jre/bin
Beliebte Variablen für Prüfungen
Manche Variablen werden in der Prüfung immer wieder abgefragt. Dazu gehören besonders die folgenden:
$HISTSIZE
definiert die Anzahl der Kommandos, die in der Befehls-History aufbewahrt werden. Diese Variable wird normalerweise in der Datei /etc/profile festgelegt
$PS1
bestimmt das Aussehen der Eingabeaufforderung (Prompt). Beispiel:
root@archangel:~# echo $PS1 \u@\h:\w$
- Die Zeichen \u stehen für Username
- Das @ wird normal ausgegeben
- Die Zeichen \h werden mit dem Host-Namen ersetzt
- Es folgt ein Doppelpunkt
- Anschließend zeigt \w für Working Directory das aktuelle Verzeichnis an
- Die Tilde ~ repräsentiert hierbei das Heimatverzeichnis des Benutzers
- Es folgt ein >
- Der Prompt kann durch Änderung der Variablen PS1 den eigenen Wünschen angepasst werden
- Es empfiehlt sich dann eine Konfiguration in der Datei /etc/bashrc
$?
enthält das Errorlevel des zuletzt ausgeführten Kommandos. In der Regel bedeutet der Wert 0 in dieser Variablen, dass das letzte Programm erfolgreich ausgeführt wurde. Die Fehlerwerte variieren von Programm zu Programm. Beliebte Werte sind 1 und 127. Beispiel:
# Kommando, das es nicht gibt bash: Kommando: command not found # echo $? 127
- Das »Kommando, das es nicht gibt« hat ein Errorlevel von 127 zur Folge
$1 , $2
usw. enthalten die Optionen und Argumente, die an ein Programm übergeben werden. Sie werden im Normalfall vom gestarteten Programm oder Skript selbst ausgewertet
Kontrollfragen
Welcher Befehl zeigt den vollständigen Pfad eines Kommandos an?
Welche Variable definiert die Anzahl der Kommandos, die in der Befehls-History aufbewahrt werden?
Welches Kommando wird als Bang-Bang bezeichnet und führt den letzten Befehl der History noch einmal aus?
Mit welchem Befehl werden die Shellvariablen löscht?
Welcher Befehl zeigt die Versionsnummer des laufenden Kernels?
Einleitung
Textströme und Textdateien mit Filtern verarbeiten
Begriffsklärung
Was ist ein Textstrom? Ein Textstrom ist eine Dateiübertragung in Textform.
Was ist der Unterschied zu einer Textdatei? Ein Textstrom liefert Daten an eine Textdatei.
Was ist ein Filter
Ein Filter ist ein Programm, welches die Ausgabe eines Befehls als Eingabe verwertet. Es wird in Linux mit einer sogenannten Pipe gekennzeichnet. So schaut eine Pipe in der Kommandozeile aus : |
. Eine Pipe signalisiert einen Textstrom.
Relevante Filter
Die folgenden Filter sind relevant. Sie werden sehr kompakt mit jeweils einem Beispiel dargestellt.
cat
Eines der Standardbefehle bei der Arbeit in dem Linux-Terminal. Von der Namensbedeutung her ist der Befehl ursprünglich dazu gedacht, Dateien vertikal zusammenzufügen (concatenate, verketten). In der Praxis wird er aber oft verwendet um den Inhalt einer Datei komplett auszugeben auf dem Terminal.
Beispiel : cat /var/log/syslog
Gibt die komplette Syslog Datei auf dem Terminal aus
bzcat, xzcat und zcat
Möchte man eine komprimierte Datei im Terminal ausgeben, kann man einen dieser drei Befehle verwenden. Der Befehl verhält sich ansonsten ähnlich wie cat. Dabei verwendet bzcat das Kompressionsprogrammm bzip2, xzcat das Programm xz (beide Verlinken lediglich auf das Programm). zcat ist eine eigenständiges Programm und wird in der Regel für die gleichen Programme wie gzip verwendet.
Zusatzinfo
bzip2 - Dieser Algorithmus ist leistungsfähiger als gzip und wird gerne für große Datenmengen verwendet.
Beispiel: bzcat gepackteDatei.bz
Leitet den Inhalt der Datei in die Standardausgabe.
head
Dieser Befehl zeigt die ersten (Standardmäßig 10) Zeilen einer Textdatei.
Beispiel: head /var/log/syslog
Zeigt die ersten zehn Zeilen der Systemlog Datei.
tail
Dieser Befehl zeigt die letzten (Standardmäßig 10) Zeilen einer Textdatei.
Beispiel: tail /var/log/syslog
Zeigt die letzten zehn Zeilen der Systemlog Datei.
less
Dieser Befehl zeigt eine Textdatei Seitenweise. Man kann – im Gegensatz zum veralteten Befehl "more" – vor- und zurücknavigieren.
Beispiel: less Textdatei.txt
Zeigt die Dateiinhalte Seitenweise.
nl
Dieser Befehl setzt vor die Zeilen einer Textdatei eine Nummer zur besseren Ablesbarkeit.
Beispiel: nl Textdatei.txt > nummerierte_Textdatei.txt
Nummeriert die Zeilen der Datei und gibt sie in einer neuen Datei aus. Die Anzeige der Änderungen kann anschließend mit cat erfolgen.
wc
Dieser Befehl zählt die Wörter einer Textdatei.
Beispiel: wc *
Zeigt die Wortzahl aller Dateien im aktuellen Pfad.
hexdump
Wandelt die Ausgabe einer Datei in Hexadezimal-, Oktal-, Dezimalzahlen oder ASCII Zeichen um. Es kann nahezu alles als Eingabe verwendet werden, auch Binärdateien. Die Voreinstellung ist Hexadezimal.
Beispiel: hexdump Textdatei.txt
Zeigt die Dateiinhalte im Hexadezimalformat.
od
Erledigt das gleiche wie hexdump. Einige Distributionen arbeiten mit hexdump, andere mit od und wieder andere mit beiden. Die Voreinstellung ist Oktal. Od hat verglichen mit hexdump etwas weniger Funktionen.
Beispiel: od Textdatei.txt
Zeigt die Dateiinhalte im Oktalformat.
sort
Sortiert die Zeilen von Text- und anderen Dateien.
Beispiel
sort -n textfile1
Sortiert die Textdatei in numerischer Reihenfolge (-n).
history | sort -n
Sortiert die History in numerischer Reihenfolge (-n).
history | sort
Sortiert die History in alphabetischer Reihenfolge (-n).
uniq
Zeigt nur die einzigartigen Zeilen einer Datei. Funktioniert nur nach sort
Beispiel :
sort textfile.txt | uniq
Sortiert die Datei und gibt nur einzigartige Zeilen aus.
split
Spaltet Dateien in mehrere. Die Angaben sind Standardmäßig Zeilenbasiert, können aber auch Dateigrößenorientiert sein (split -b). Standardangabe ist ein Split nach 1000 Zeilen.
Beispiel :
split -b 11m grosses-paket grosses-paket-split
Teilt die Quelldatei "grosses-paket" in mehrere 11MB große Teilpakete "grosses-paket-split". Die Ausgabe erzeugt mehrere Dateien, welche in folgender Logik an den Dateinamen angehängt werden "grosses-paket-splitaa","grosses-paket-splitab" usw..
cut,paste
Cut schneidet Spalten einer Textdatei aus. Es ist jedoch nicht mit dem Windows "Ausschneiden" zu verwechseln, da die Spalten in der Originaldatei bestehen bleiben. Zum erfolgreichen ausschneiden der Spalten benötigt man eine Angabe der Spalte (z. B. "-f2") und einen sogenannten Delimiter, welcher die Spalten voneinander trennt (z. B. "d:", also hier ein Doppelpunkt). Der Befehl Paste fügt zwei oder mehr Dateien zusammen. Im Gegensatz zu cat werden diese horizontal zusammengefügt.
Beispiel : In der Datei /etc/passwd stehen die Benutzernamen in der ersten Spalte. Diese Datei enthält jedoch auch weitere Informationen:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
Der folgende Befehl führt dazu, dass nur die Benutzernamen ausgegeben werden:
cut -d: -f1 /etc/passwd
root
daemon
bin
…
sed
Der sed Editor gehört nicht in dieses Kapitel und wird nur der Vollständigkeit halber erwähnt.
tr
Der Befehl tr steht für translate und ist am besten durch die Funktion "Suchen und Ersetzen" aus Excel zu vergleichen. Es werden bestimmte Zeichen oder Wörter einer Datei durch andere ersetzt.
Beispiel:
cat textfile1 | tr n x
Ersetzt alle Buchstaben "n" mit dem Buchstaben "x"
md5sum,sha256sum,sha512sum
Die drei genannten Befehle arbeiten alle nach derselben Syntax und haben den gleichen Zweck. Sie erstellen Prüfsummen für die jeweilige Datei, welche wiederum wichtig für Datenintegrität,-sicherheit und -authentizität sind. Es lassen sich mit den jeweiligen Befehlen auch die entsprechenden Hashwerte auslesen.
Beispiel:
sha512sum textfile.txt > SHA512SUMS
Erstellt einen Secure Hash Algorithm 2 (SHA) mit 64-Bit Schlüsselwörtern (512).
Kontrollfragen
Was ist ein Textstrom?
Was passiert bei folgender Befehlszeile : cat > textdatei.txt
Was passiert bei folgender Befehlszeile : cat < textdatei.txt | uniq
Wie kann man die Dateien in einem Verzeichnis nach Dateigröße sortieren?
Was passiert bei folgender Befehlszeile : dd if=/dev/sda bs=512 count=1|od -h --endian=big | nl
Einleitung
In diesem Artikel geht es darum, wie man Dateien und Verzeichnisse durch Kommandos verwalten kann.
Begriffsklärung
Wichtigste Datenverwaltungen: Einzelne oder mehrere Dateien, einzelne oder mehrere Verzeichnisse: kopieren, verschieben, löschen, suchen, anzeigen und sortieren.
Wichtige Anwendungen zur Dateiverwaltung
Option | Beschreibung |
---|---|
cp | Eine oder mehrere Dateien kopieren |
find | Nach Datei(en) in einem Verzeichnis inkl. Unterverzeichniss(en) suchen |
mkdir | Verzeichnisse erstellen. |
mv | Dateien und Verzeichnisse verschieben bzw. umbenannen |
ls | Inhalt eines Verzeichnisses bzw. Ordners anzeigen |
rm | Dateien und Verzeichnisse löschen |
rmdir | Leere Verzeichnisse (nur leere Verzeichnisse) löschen |
touch | Zeitstempel von Dateien ändern |
tar | Daten im Archiv sichern (nicht komprimiert) |
cpio | Archivdaten verwalten |
dd | Festplatten, Partitionen oder Dateien bit-genau Kopieren. |
file | Typ einer Datei erkennen |
gzip | Dateien komprimieren |
gunzip | Dateien unkomprimieren |
bzip2 | Dateien komprimieren |
bunzip2 | Dateien unkomprimieren |
xz | Dateien komprimieren |
unxz | Dateien unkomprimieren |
Die Tilde
Die Tilde(~) zeigt an, dass Sie sich gerade in Ihrem Heimatverzeichnis befinden.
Die Tilde kann auch in Pfadangaben verwendet werden.
Beispiele und mehr Infos zur Tilde (~)
Absolute Pfadangaben
Absoluter Pfad bedeutet, dass Sie den ganzen Pfad vom Hauptverzeichnis aus angeben,
egal, in welchem Verzeichnis Sie sich selbst gerade befinden.
Ein Verzeichniswechsel mit einer absoluten Pfadangabe beginnt immer mit einem Slash.
Beispiele und mehr Infos zur Absolute Pfadangaben
Relative Pfadangaben
Bei einem Verzeichniswechsel mit Relative Pfadangabe bewegen Sie sich relativ zum aktuellen Verzeichnis fort.
Eine relative Pfadangabe beginnt deshalb nie mit einem Slash.
Beispiele und mehr Infos zur Relative Pfadangaben
Kontrollfragen
Testfrage 1
Testfrage 2
Testfrage 3
Testfrage 4
Testfrage 5
Allgemeines
- Manchmal kann es vorkommen, dass Sie die Ausgabe eines Programms direkt mit einem anderen Programm weiterverarbeiten müssen.
- In diesem Fall können Sie eine sogenannte Pipe(senkrechter Strich) verwenden.
- Mit ihrer Hilfe ist das Zwischen-speichern der Ausgabe des ersten Programms in einer Datei zum Zweck, diese Datei dann mit dem zweiten Programm wieder einzulesen, unnötig.
- In einem anderen Fall erzeugt ein Programm vielleicht eine Ausgabe auf dem Bild-schirm, die Sie abspeichern wollen.
- In diesem Fall benötigen Sie eine Umleitung der Standardausgabe (Redirect).
- Wenn ein Programm ausschließlich von der Standardeingabe (normalerweise dieTastatur) liest und Sie mit diesem Programm eine Datei einlesen müssen, benötigen Sie ebenfalls eine Umleitung.
- Diesmal mussallerdings die Standardeingabe umgeleitet (Redirect) werden
stdin, stdout und stderr
![](/images/thumb/3/35/Stdin-stdout-stderr.png/250px-Stdin-stdout-stderr.png)
stdin
Über die Standardeingabe können Daten in ein Programmelesen werden.
$ less < eingaben.txt
stdout
Über die Standardausgabe kann ein Programm Daten ausgeben Beispiel:
$ find . -name '*.html' > ausgaben.txt
gleichbedeutend:
$ find . -name '*.html' 1> ausgaben.txt
stderr
Die Standardfehlerausgabe ist ein zweiter Ausgabedatenstrom, der dazu gedacht ist, Fehler- und Statusmeldungen auszugeben.
Normalerweise ist er ebenfalls mit dem Monitor verbunden; allerdings kann er getrennt von der Standardausgabe umgeleitet werden, so dass Fehlermeldungen nicht mit den ausgegebenen Nutzdaten vermischt werden.
Beispiel
Hier werden die Fehlermeldungen des Programms find in die Datei fehlermeldungen.txt umgeleitet, während die Standardausgabe über eine Pipe an das Programm less weitergeleitet wird.
$ find . -name '*.html' 2> fehlermeldungen.txt | less
Umleitungen (Redirects)
Umleitungen werden verwendet, um die Standard-I/Os entweder in eine Datei hinein oder aus einer Datei heraus um zu lenken. Wenn Sie alle Meldungen des Kernels in einer separaten Datei speichern möchten, können Sie mittels grep im Syslognach solchen Meldungen suchen und diese dann mit einem Redirektor in eine andere Datei speichern:
$/diag # grep kernel /var/log/syslog > kernelmessages
Mit einem solchen Kommando erfassen Sie nur die Standardausgabe von grep
.
Tritt ein Fehler auf, werden die entsprechenden Meldungen weiterhin auf der Konsole ausgegeben.
Sie können mit einer Kommandozeile wie der folgenden Standard meldungen und Fehlermeldungen in zwei unterschiedlichen Dateien aufzeichnen:
$/scripts # script-xy 2>fehler.log 1>erfolg.log
Hierbei lenken das Argument, 1>erfolg.log
die normalen Meldungen des Programms und 1>erfolg.log
die Fehlermeldungen in je eine Datei um Wenn nur eine einzige Datei für die Aufzeichnung sowohl von stdout als auch stderr verwendet werden soll, können Sie auch ein Kommando wie das folgende verwenden:
$/scripts # script-xy >protokolldatei 2>&1
Der erste Teil des Kommandos i 1>script-xy>protokolldate
sorgt für die Umleitung von stdout in die Textdatei.
1>2>&1leitet
stderr auf stdoutum.
Das &
besagt, dass 1
keine Datei ist.
Das Kommando würde ohne das &
Standardfehlerkanal in die Datei 1
umleiten.
Wenn Sie einen Standard-I/O umleiten, wird die Zieldatei, wenn diese noch nicht existiert, automatisch erstellt. *Sollten Sie dieselbe Umleitung noch einmal durchführen, wird die ursprüngliche Datei überschrieben.
Um Daten an eine bestehende Dateianzuhängen, die für Umleitungen verwendet wird, müssen Sie einfach zwei Redirektor zeichen verwenden (>>
).
$/diag # grep kernel /var/log/syslog >> kernelmessages
Wenn Sie nur einen einzelnen Redirektor verwenden, wird gleich zu Beginn der Programm ausführung die Zieldatei erstellt. Ist diese bereits vorhanden, wird sie gelöscht und neu erstellt. Sollten also Zieldatei und Eingabedatei identisch sein, ist ein Daten verlust garantiert. Das folgende Kommando hat demnach eine leere Kundendatenbank zur Folge:
$/db # grep "Meier" kunden-db > kunden-db
Es besteht aber auch die Möglichkeit, den Standardeingabekanal umzuleiten. Beliebt hierfür ist das Programm mail. Das folgende Kommando sendet den kompletten Sys-log per Mail an einen kompetenten Mitarbeiter. Der Betreff lautet »Überprüfen!« und der Inhalt der Datei erscheint im Textkörper der Mail:
$/ # mail -s "Überprüfen!" willi < /var/log/syslog
Pipes
![](/images/d/df/Pipe.gif)
Im Gegensatz zu Umleitungen lenken Pipes Datenströme nicht in Dateien um oderaus Dateien heraus.
Sie sorgen vielmehr dafür, dass die Ausgabe eines Programms direkt als Eingabe für ein anderes Programm verwendet werden kann.
Die Ausgabe des ersten Programms erfolgt dann nicht nach stdout.Oft werden Umleitungen und Pipes auch miteinander kombiniert. Sehr gebräuchlich ist die Umlenkung grösserer Textmengen nach less. Das folgende Kommando würde möglicherweise eine solche größere Textmenge verursachen:
$/ # grep "kernel" /var/log/syslog
Damit Sie die Ausgabe des Kommandos überhaupt komplett lesen können, wird sie einfach mit einer Pipe an less weitergegeben:
$/ # grep "kernel" /var/log/syslog | less
Eine Kombination aus Umleitungen und Pipes verwendet z. B. üblicherweise das Programm tr. Das liegt daran,dass tr weder eine Eingabedatei noch eine Ausgabedatei103GNU- und Unix-Kommandos134 als Argument übergeben werden kann. Deshalb erfolgt die Eingabe oft mittels einer Pipe aus dem Programm cat heraus und die Ausgabe mit einer Umlenkung in die entsprechende Zieldatei:
$/textfiles # cat textfile1 | tr \n \r > textfile2
tee und xargs
Mit tee kann der Datenstrom eines Programms gleichzeitig auf der Konsole und in einer Textdatei ausgegeben werden. Beispiel:
$/ # grep pppd /var/log/syslog | tee pppdmessages
Mit xargs können Sie die Ergebnisse eines Programms, das eine mehrzeilige Ausgabeliefert, an ein Programm übergeben, das immer nur ein Argument gleichzeitig verarbeiten kann. Beispiel:
$/ # cut -d " " -f1 /var/log/apache2/access.log |\ sort | uniq | xargs -n1 host
Das Kommando wurde der Übersichtlichkeit halber mit dem Backslash auf zwei Zeilen aufgeteilt. Zur Erklärung: Mit diesem Kommando soll überprüft werden, von welchen Domänen aus auf einen Webserver zugegriffen wurde.
*Zunächst wird mit dem cut-Befehl die erste Spalte des access.log von Apache isoliert.
Diese Spalte enthält die IP-Adressen der Besucher.
Das Kommando sort sortiert die Liste der IP-Adressen. Mit uniq wird dafür gesorgt, dass jede IP-Adresse nur einmal in der Liste auftaucht. Diese Liste kann nicht direkt an das Kommando host zur Namensauflösung übergeben werden, weil host nur ein einzelnes Argument erwartet. Deshalb übergibt xargs die IP-Adressen einzeln. Das Kommando host wird also durch xargsfür jede IP-Adresse einmal aufgerufen.
Kontrollfragen
Was machen pips?
Was ist der unterschid zwischen stdin, stdout und stderr?
Testfrage 3
Testfrage 4
Was konnen wir machen mit tee und xargs?
Ziel: Erlernen, die einfache Prozessverwaltung zu beherrschen.
Wichtigste Wissensgebiete
- Jobs im Vordergrund und im Hintergrund ablaufen lassen
- einem Programm signalisieren, dass es nach dem Abmelden weiterlaufen soll
- Prozesse erzeugen, überwachen und beenden
- aktive Prozesse beobachten
- Prozesse zur Ausgabe auswählen und sortieren
- Signale an Prozesse schicken
Liste wichtiger Dateien, Verzeichnisse und Anwendungen
- &
- bg
- fg
- jobs
- kill
- nohup
- ps
- top
- free
- uptime
- pgrep
- pkill
- killall
- watch
- screen
- tmux
Überwachen von Prozessen
Mit dem Kommando ps
können Sie die aktuell auf einem Computer laufenden Prozesse anzeigen. Es handelt sich um eine Momentaufnahme. Programme mit kurzer Lebensdauer (z. B. df), werden mit ps nicht anzeigt. Das Kommando ps ohne Optionen ausführen, erhalten Sie eine Liste der Prozesse, die auf dem aktuellen Terminal laufen. Wenn Jobs im Hintergrund laufen (o. stehen), werden diese auch angezeigt.
- -a zeigt auch die Prozesse anderer Benutzer an. Voraussetzung ist, dass diese Prozesse mit einem Terminal verknüpft sind.
- -u zeigt auch die Startzeit, den Pfad zur ausführbaren Datei und den ausführenden Benutzer an.
- -x führt auch die Prozesse auf, die nicht mit einem Terminal verbunden sind (z. B. init oder cron).
- -C "prozess" sorgt für die Ausgabe aller Instanzen eines auf der Kommandozeile angegebenen Prozesses.
- -U "benutzer" zeigt die Prozesse eines bestimmten Benutzers an.
top
Mit top können Sie die auf einem Computer laufenden Prozesse in Echtzeit überwachen. Während der Ausführung werden die folgenden Informationen dynamisch im Terminal ausgegeben:
allgemeine Informationen, wie Uhrzeit, Uptime, Anzahl der angemeldeten Benutzer, durchschnittliche Systemauslastung
Tasks: Anzahl der Prozesse insgesamt, laufende Prozesse, schlafende Prozesse, gestoppte Prozesse und Zombie-Prozesse
CPU(s): Benutzung durch Benutzerprozesse, Systemprozesse, den Idle-Prozess u. a.
Mem: Speicher insgesamt, in Verwendung, freier Speicher und für Buffers verwendeter Speicher
Swap: diverse Werte zur Verwendung der Swap-Partition(en)Anschließend folgt eine Auflistung der laufenden Prozesse. Diese werden standardmäßig in Reihenfolge der CPU-Verwendung ausgegeben. Die inaktiven Prozesse werden anschließend in der Reihenfolge der PIDs ausgegeben. Beachten Sie bitte, dass das Programm top selbst auch Systemressourcen belegt und deshalb das Messergebnis beeinflusst
Wichtige Interaktivoptionen
- k (kill) tötet einen Prozess. Es müssen sowohl die PID als auch das Signal angegeben werden.
- n (number of) nennt die Anzahl der Zeilen, die top ausgibt.
- r (renice) ändert den Nice-Wert eines Prozesses zur Laufzeit.
- h (help) gibt eine Hilfe aus.
- q (quit) beendet das Programm.
Wichtige Kommandozeilenoptionen
- -i zeigt nur die Prozesse an, die aktiv sind. Schlafende Prozesse werden ignoriert.
- -b (batch) kann in Kombination mit einem Redirektor verwendet werden, um die Ausgabe in eine Textdatei umzuleiten.
- -d (delay) gibt das Aktualisierungsintervallin Sekunden an. Der Standardwert ist eine Sekunde.
- -q startet top mit Echtzeitausgabe (wird nicht von allen Versionen des Programms unterstützt).
watch
- Ein sehr nützlicher Helfer ist das Programm watch.
- Sie können es immer dann einsetzen, wenn ein anderes Programm eine Ausgabe auf dem Terminal macht und sich dann wieder beendet.
- Vielleicht wollen Sie z. B. Dateien dabei beobachten, wie diese ihre Größe ändern, während sie kopiert oder von dd erzeugt werden.
- Es gibt viele Situationen, in denen man mehrfach dasselbe Kommando gibt, um etwas zu beobachten.
Signale an Prozesse senden
Wenn Sie einen Prozess zur Laufzeit beeinflussen wollen, können Sie diesem Prozessein Signal senden. Es gibt insgesamt 64 verschiedene Signale. Die gute Nachricht ist, dass Sie nicht alle Signale für die Prüfung kennen müssen. Sie erhalten eine Auflistung aller Signale, wenn Sie das folgende Kommando ausführen:
# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 ...
Die folgenden Signale werden häufig (auch manuell) an Prozesse übermittelt.
Sie sind sowohl für die Praxis als auch für die Prüfung von Interesse:
- 1 bzw. SIGHUP ist das Hang-up-Signal, das ursprünglich Modems zum Auflegen veranlasste. Es wird auch benutzt, um Prozesse, die als Daemons laufen (bind, squidusw.), zu veranlassen, ihre Konfigurationsdateien neu einzulesen.
- 9 bzw. SIGKILL beendet einen Prozess mit Gewalt. Dieses Signal sollte nur in Notfällen verwendet werden, wenn Signal 15 kein Ergebnis bringt. Ein mit SIGKILL beendeter Prozess räumt nicht auf (temporäre Dateien usw.).
- 15 SIGTERM fordert einen Prozess auf, sich selbst zu beenden. Der Prozess erhält die Gelegenheit, Aufräumaktivitäten durchzuführen. Weitere Signale, die häufig vorkommen, aber über Umwege an den Prozess gesendet werden, sind folgende: 2 bzw. SIGINT führt einen Programmabbruch aus. SIGINT wird gesendet, wenn die Tastenkombination (Strg) + (C) betätigt wird.
- 18 bzw. SIGCONT setzt einen Prozess fort, der zuvor mit SIGSTOP angehalten wurde.
- Das Signal SIGCONT wird durch die Kommandos fg und bg gesendet, die im nächsten Abschnitt behandelt werden.
- 19 bzw. SIGSTOP hält einen Prozess an. Der Prozess kann später mit SIGCONT fortgesetzt werden.
- 20 bzw. SIGTSTP hält einen Prozess an. Der Prozess bleibt speicherresident und kann mit SIGCONT fortgesetzt werden. Die Tastenkombination (Strg) + (Z) sendet dieses Signal.
kill
- Wenn Sie ein Signal an einen Prozess senden wollen, verwenden Sie das Programm kill.
- Wie der Name schon vermuten lässt, ist kill primär dazu gedacht, ein Programm zu beenden.
- Das Kommando kill kann aber grundsätzlich alle 64 Signale (und nicht nur die »tödlichen«) an einen Prozess senden.
- Die Syntax von kill ist sehr vielfältig, und Sie müssen für die Prüfung mit den verschiedenen Optionen vertraut sein.
- Als Argument erwartet kill eine oder mehrere durch Leerstellen getrennte PIDs. Ohne Optionen sendet kill das Signal 15 (SIGTERM) an den angegebenen Prozess.
- Wenn Sie einen Prozess mit kill beenden wollen, müssen Sie zunächst dessen PID welche wir mit ps finden.
killall
- Dieses Programm verwendet im Gegensatz zu kill keine PIDs, sondern Prozessnamen. Daraus ergeben sich zwei Vorteile:
- Die PID muss nicht ermittelt werden.
- Es können mehrere Prozesse mit gleichem Namen auf einmal beendet werden.
pgrep
- Mit dem Programm pgrep können Sie die PIDs laufender Prozesse ermitteln.
- Sie müssen hierfür nicht einmal den vollständigen Namen eines Prozesses kennen.
- Es besteht außerdem die Möglichkeit, alle PIDs auszugeben, die einem bestimmten Benutzer zugeordnet sind, oder einfach nur festzustellen, wie viele Prozesse ein bestimmter Benutzer gerade verwendet.
pkill
- Dieses Programm beendet jedoch Prozesse, anstatt lediglich die PID auszugeben.
- Das folgende Kommando beendet alle Prozesse des Users. Das gilt auch für die Login-Shell, weshalb der Benutzer dann auch sofort abgemeldet wird.
jobs
die Option -l dafür sorgt, dass auch die PIDs der Prozesse angezeigt werden und nicht nur deren Jobnummern. Wenn Sie die Option -p verwenden, wird ausschließlich die PID angezeigt.
bg und fg
- mit dem Kommando bg und der durch das Kommando jobs ermittelten Jobnummer können Sie einen gestoppten Hintergrundprozess im Hintergrund fortsetzen.
- Es wird dann ein SIGCONT (Signal 18) an den Prozess gesendet.
- Wenn Sie bg ohne Optionen ausführen, wird SIGCONT an den Prozess gesendet, dem in der Auflistung von jobs das Pluszeichen zugeordnet ist
screen
- Sie können administrativen Eingriffe relativ gefahrlos durchführen, wenn Sie ein Programm wie screen oder tmux verwenden. Beide Programme sind in der Lage, eine Sitzung aufrechtzuerhalten, auch wenn die Netzwerkverbindung unterbrochen wird.
- Am besten sehen Sie, wie es funktioniert, indem Sie folgendes Experiment durchführen:
Starten Sie eine SSH-Sitzung zu einem entfernten Host. Geben Sie einfach nur das Kommando screen ein.
Sie erhalten wieder eine scheinbar gewöhnliche Shell.
Starten Sie einen Prozess, der aktiv etwas tut (z. B. top).
Sorgen Sie anschließend dafür, dass die Verbindung abbricht.
Verbinden Sie sich erneut mit dem entfernten System und geben Sie anschließend das Kommando screen -r ein.
Sie sehen nun wieder das zuvor gestartete Programm top.
tmux
- steht für Terminalmultiplexer. Das Programm bietet ähnliche Funktionen wie screen, verwendet aber auf die ncurses-Bibliothek.
- tmux basiert außerdem auf einer Client-Server-Architektur und bietet viele zusätzliche Funktionen, die über Tastenkombinationen aufgerufen werden.
- Sie erhalten einen Überblick, wenn Sie innerhalb einer tmux -Sitzung (Strg)+(B) gefolgt von einem (?) eingeben.
Allgemeines
- Der Begriff Prozeß (engl. process) bezeichnet ein Programm, das gerade geladen ist und (meist) läuft.
- Manchmal möchten Sie die Priorität eines Prozesses ändern. Ein Prozess, der für Sie sehr wichtig ist, kann z. B. ausgeführt werden und sie möchten Ihn schnell beenden.
- Ein normaler Benutzer kann allerdings einem Prozess lediglich eine niedrigere Priorität zuordnen.
- Damit soll verhindert werden, dass Benutzer, die ihre eigene Arbeit als besonders wichtig einstufen, das ganze System lahmlegen.
Liste wichtiger Dateien
nice
- nice ist ein Befehl von Unix-ähnlichen Betriebssystemen.
- Mit nice ist es möglich, ein Kommando mit einer bestimmten Priorität zu starten, sodass der dann ausgeführte Prozess im Gegensatz zu anderen Prozessen mehr oder weniger CPU-Zeit erhält.
Zum Beispiel haben wir den folgenden Prozess ausgeführt:
sleep 1000000000&
Und bestätigte die Priorität mit dem folgenden Befehl:
ps ax -o pid,ni,cmd | grep sleep 2268 0sleep 1000000000 2271 0 grep sleep michel@debian:~$ nice -n 10 sleep 1000000000&
- In beiden Fällen wird der Editor nano mit einem positiven Nice-Wert von 10 gestartet.
- Der Strich in der zweiten Zeile ist also kein Minus, sondern dient der Einleitung der Option.
- Wenn Sie einen negativen Nice-Wert verwenden wollen, um die Ausführungspriorität eines Programms zu erhöhen, können Sie folgende Kommandos verwenden:
michel@debian:~$ nice -n -10 sleep 1000000000& oder: michel@debian:~$ nice --10 sleep 1000000000&
Mit dem Kommando:
michel@debian:~$ ps ax -o pid,ni,cmd | grep sleep
sieht man ,dass das Prioritäts-Scheduling auf die zweite Spalte. In die erste Spalte steht die auführungsnummer(zum beispiel 2268) des Prozesses.
2268 -10 sleep 1000000000 2271 0 grep sleep
Die zweite Zeile enthält jetzt zwei Striche. Der erste Strich leitet die Option ein, und der zweite ist diesmal ein Minuszeichen.
renice
- renice ändert das Prioritäts-Scheduling eines oder mehrerer laufender Prozesse.
- Das erste Argument ist der zu verwendende Prioritäts-Wert.
- Die anderen Argumente werden als Prozesskennungen interpretiert (Vorgabe), Prozessgruppenkennungen, Benutzerkennungen oder Benutzernamen.
- Das Anwenden von renice auf eine Prozessgruppe beeinflusst das Scheduling aller Prozesse in dieser Prozessgruppe gleichermaßen.
- Das Anwenden von renice auf einen Benutzer ändert das Prioritäts-Scheduling aller Prozesse, die diesem Benutzer gehören.
# renice -n -7 2268 2268(process ID) old priority -10, new priority -7
- Hier ist also der Strich ein Minus und keine Einleitung für eine Option.
- Mit der Option -u (hier wiederum ist der Strich unabdingbar) können Sie alle Prozesseeines einzelnen Benutzers gleichzeitig beeinflussen.
- Die Syntax ist ansonsten mit identisch, die man auch bei der Manipulation eines Prozesses benutzen würde.
top und ps
top und ps können die prioritäten überprüfen:
- ps (für process status) ist ein Unix-Kommando, das eine Liste aller Prozesse, welche momentan laufen oder sich im Zombie-Status befinden, auf dem Bildschirm ausgibt.
michel@debian:~$ ps ax -o pid,ni,cmd | grep sleep
- top ist ein Befehl in den meisten Unix-ähnlichen Betriebssystemen, der eine ständig aktualisierte Liste der aktuell laufenden Prozesse des Systems ausgibt.
- Dabei zeigt top auch die Load der CPU, Speicherverbrauch, sowie etliche andere Informationen an,Um die tatsächliche Priorität eines Prozesses und den Wert für nice zu ermitteln,benötigen Sie das Programm top.
Kontrollfragen
Sie planen apt-get upgrade auszuführen, um Ihr System auf den neuesten Stand zu bringen. Da dieses Kommando erfahrungsgemäß eine hohe Systemlast verursacht,wollen Sie ihm eine geringere Prozesspriorität zuweisen.Welchen Befehl werden Sie apt-get voranstellen, damit andere Prozesse durch die Aktualisierung nicht negativ beeinflusst werden? (Wählen Sie zwei Antworten.)
- A: nice-14
- B: nice-n14
- C: renice-n14
- D: nice-n-14
- E: nice--14
Sie stellen fest, dass das System, an dem Sie arbeiten, sehr träge reagiert. Eine Über-prüfung ergibt, dass ein Backupskript einen großen Teil der Systemressourcen verbraucht.Die zugehörige Prozess-ID ist 8490. Welches Kommando können Sie verwenden, um die Ausführungspriorität der Datensicherung im laufenden Betrieb zu senken
- A: nice--12 8490
- B: bg
- C: renice-n15 8490
- D: renice-15 8490
- E: nice-n12 8490
Welche der folgenden Programme können Einfluss auf die Ausführungspriorität eines Prozesses nehmen? (Wählen Sie drei Programme aus.
- A: bg
- B: nice
- C: renice
- D: fg
- E: top
Was ist der maximale niceness Wert, den ein regulärer Benutzer einem Prozess mit dem Befehl nice zuweisen kann, wenn er einen neuen Prozess ausführt?
- A: 9
- B: 19
- C: 49
- D: 99
Gewichtung: 3
Begriffs- und Zeichenklärung
Was sind reguläre Ausdrücke?
- Reguläre Ausdrücke erleichtern das durchsuchen von Texten
- Sie beschreiben anhand von Wildcards, Suchwörtern und Positionsangaben und ermöglichen so eine differenziertere Suche
- Wildcards werden auch Jokerzeichen genannt und sind Platzhalter für ein oder mehrere Zeichen
- Reguläre Ausdrücke werden in englisch Regular Expressions genannt
- Reguläre Ausdrücke werden meist mit RegEx oder RegExp abgekürzt
Wo kann man reguläre Ausdrücke verwenden?
- Mit dem Filter "grep" in der Shell
- Mit dem Vi-Editor in der Shell
- Mit dem sed Editor in der Shell
- Im Kate Editor (Option {} aktivieren im Suchen Fenster)
- In allen Programmiersprachen
- In vielen weiteren Programmen (z. B. libreOffice)
Gültige Metazeichen
Metazeichen beschreiben die Position einer Suchanfrage. Sie könen auch Zeichen und Zeichensätze definieren, nach denen gesucht werden soll. Gültige Metazeichen sind :
^
Textanker für Zeilenanfang$
Textanker für Zeilenende\<
markiert einen Wortanfang\>
markiert ein Wortende\
schützt ein Zeichen vor der Interpretation (z. B. \$ sucht nach Dollarzeichen und nimmt diesen seine Spezialbedeutung)[]
sucht nach einem Zeichen oder einer Zeichenfolge innerhalb des eckig geklammerten Bereichs (z. B. [a-g] )[^Zeichen]
Schließt das Zeichen nach dem Circonflex aus der Suche aus
Wildcards (Joker/Quantoren)
Wildcards beschreiben vorgehende und nachfolgende Zeichen.
*
bezeichnet keine oder beliebig viele Wiederholungen des vorangegangenen Zeichens?
bezeichnet keine oder eine Wiederholung des vorangegangenen Zeichens+
bezeichnet, dass das voranstehende Zeichen mindestens einmal vorkommt.
wird als Platzhalter für ein beliebiges Zeichen verwendet
Verwendung von grep mit regulären Ausdrücken
- Der Filter grep bedeutet "Global search for Regular Expressions and Print out" (Sinngemäß: Globale Suche durch Reguläre Ausdrücke mit Ausgabe).
Hinweise für die Verwendung von grep:
-v
ist bei grep nicht verbose (Gesprächigkeit), sondern invertiert die Ausgabe (z. B. grep -v "Testwort" zeigt alle Zeilen ohne Testwort)-E
aktiviert erweiterte reguläre Ausdrücke (entspricht dem Befehl egrep)-i
ignoriert Groß- & Kleinschreibung
Beispiele für Verwendung von grep mit RegEx
# grep [Ww]ill[iy] Adressliste
– sucht in der Datei Adressliste nach Willi,willi,Willy und willy. (grep -i Will[iy] liefert das gleiche Ergebnis, ignoriert jedoch auch die Groß- & Kleinschreibung von den anderen Buchstaben)
# grep W.lly Adressliste
– der Punkt ersetzt ein beliebiges Zeichen, somit würden Willy, Wally usw. gefunden werden, sofern diese existieren.
# grep -v ^[#] /etc/config.conf
oder Alternativ # grep ^[^#] /etc/config.conf
– findet alle Zeilenanfänge, welche nicht mit einer Raute beginnen
# grep ^[^#] /etc/config.conf | grep -v ^$
– Sucht alle Zeilenanfänge ohne Raute und mit Zeichen am Anfang (siebt Leerzeilen aus, Leerzeile ist Zeilenanfang ^ gefolgt von Zeilenende $)
# grep 'Wort[1-9]*\>' Suchdatei
– Sucht alle Wörter, welche mit "Wort" anfangen und anschließend beliebig viele Zahlen bis zum Wortende beinhalten.
# grep 'Wort[1-9]\?\>' Suchdatei
– Sucht alle Wörter, welche mit "Wort" anfangen und anschließend eine beliebige einstellige Zahl bis zum Wortende beinhalten.
# grep -w '1\{3,5\}' Suchdatei
– Mit dem folgenden Kommando werden alle Zeilen einer Datei angezeigt, die drei, vier oder fünf aufeinander folgende Einsen enthalten.
Schutz von Metazeichen
Einige Metazeichen müssen durch einen Backslash geschützt werden, damit grep diese nicht als Suchmusterbestandteil versteht.
Diese Zeichen sind:
?
+
{
}
|
(
)
egrep und fgrep
Ursprünglich eigenständige Filter, werden diese beiden Varianten heute kaum noch verwendet. Sie sind in grep mit dem Optionen -E und -F enthalten. egrep hat erweiterte Funktionen (benötigt daher etwas länger zum Suchen), fgrep verzichtet auf Metazeichen und spart somit Zeit und Rechenleistung.
Der Streamlineeditor sed
Der Editor sed arbeitet mit Strömen. Er liest in seiner puren Form StdIn (Kanal 0) und gibt in StdOut (Kanal 1) aus, ähnlich dem Befehl cat. Um das Ergebnis zu speichern muss man eine extra Zieldatei angeben. Quelle und Ziel dürfen nicht identisch sein.
Wichtige Kommandos und Optionen
-e Kommando
– Kündigt ein Kommando an. Dies ist nur nötig, wenn mehrere Kommandos aufeinander folgen sollen.-f Scriptdatei
– Lädt mehrere Kommandos aus einem Script. Besonders praktisch, wenn eine bestimmte Kommandoroutine mehrmals aufgerufen werden soll.-g
– sed sucht normalerweise nur innerhalb einer Zeile. Die Option g setzt das Suchverhalten auf global und lässt sed somit auch nach einem Fund weitersuchen.
Adressierung mit sed
Der Editor sed sucht und bearbeitet Zeilen innerhalb einer Datei. Manchmal ist es nötig den Arbeitsbereich einzuschränken. Dies kann auf drei Arten geschehen : 1. Angabe von Zeilennummern 2. Verwendung des $ Zeichens für die Bearbeitung der letzten Zeile 3. Verwendung von regulären Ausdrücken (auf beiden Seiten mit Slashes begrenzt nach dem Muster /regEx/ )
Wird keine Adressierung vorgenommen so bearbeitrt sed die gesamte Datei.
Beispiele für das Arbeiten mit sed
sed kann mit dem Kommando "y" ähnlich wie translate (Siehe 103.2) einzelne Zeichen suchen und ersetzen. Im Gegensatz zu translate kann sed die Änderungen jedoch in einer neuen Datei abspeichern. Dabei kann für jedes Zeichen nur ein Zeichen ersetzt werden, keine Zeichenkette (1:1 Beziehung).
In dem folgenden Beispiel wird ein Komma mit einem Semikolon ersetzt.
# sed 'y/,/;/' Kommadatei > Semikolondatei
# sed -e '/^$/d' -e '/^#/d' /etc/config.conf
– Das -e leitet jeweils ein Kommando ein. Die RegEx müssen innerhalb von Slashes stehen. Der Befehl "d" löscht das Suchergebnis. "/^$/" sucht von Zeilenanfang bis Zeilenenede. "/^#/" sucht Rauten am Zeilenanfang. Somit werden bei diesem Befehl Kommentarspalten und Leerzeilen gelöscht.# sed '25,47d' Originaldatei > Kurzdatei
– In diesem Befehl wird zur Adressierung die Zeilenangabe verwendet. Es werden also Zeile 25 und 47 gelöscht. Das Kommando kann durch ein "!" invertiert werden ("25,45!d").
archangel:/textfiles # sed 's/ue/ü/' Namensliste
– Das Kommando s substituiert Zeichen. Es ist leistungsfähiger als y, da es ein Zeichen auch durch eine Zeichenkette ersetzen kann und umgekehrt. In diesem Beispiel wird ein "ue" mit einem "ü" ersetzt. Mit diesem Befehl wird allerdings lediglich der erste gefundene String mit "ue" durch "ü" ersetzt. Durch das setzen der globalen Option "g" werden alle "ue"'s im Text mit "ü" ersetzt :archangel:/textfiles # sed 's/ue/ü/g' Namensliste
Skripte in sed
Man kann mitels Skripten eine Befehlskette durch sed ausführen lassen.
In dem folgenden Beispiel werden Umlaute (Ä,ä,Ü,ü,Ö,ö und ß) mit HTML tauglichen Zeichenketten ersetzt ("Ä" ist beispielsweise in HTML "Ä"). Das Skript wird mit cat (siehe 103.2) erstellt und heisst sedskript :
# cat sedskript s/ä/\ä\;/g; s/Ä/\Ä\;/g; s/ü/\ü\;/g; s/Ü/\Ü\;/g; s/ö/\ö\;/g; s/Ö/\Ö\;/g; s/ß/\ß\;/g;
Anschließend kann das Skript mit der Option -f eingelesen werden. Es müssen nun lediglich Quell- & Zieldatei angegeben werden und die Befehle in dem Skript werden auf die Quelldatei angewandt.
# sed -f sedskript Quelltext-mit-Umlauten > Zieltext-in-HTML-Format
Kontrollfragen
Wonach sucht RegEx ^[^#]
Sie geben im Kate Editor unter Suchen ohne RegExp "a*" ein. Was erhalten Sie als Antwort?
Sie geben in der Kate-Suche mit RegEx a* ein, was erhalten Sie als Antwort?
Sie geben in der Shell den Befehl ls a* ein, was erhalten Sie als Antwort?
Sie geben in der Shell den Befehl ls a??? ein, was erhalten Sie als Antwort?
Wie können Sie sich alle Einträge vom 10ten Dezember im Systemlog ansehen?
Wonach sucht das folgende RegEx Kommando : # grep –w '[0-9]\{3\}' Suchdatei ?
Wonach sucht das folgende RegExp Kommando : # grep '[A-Z]\+' Suchdatei ?
archangel:/textfiles # sed 's/ae/ä/g' DeutscherText.txt
? In diesem Artikel stelle ich die grundlegenden Funktionen des sehr mächtigen und weitverbreiteten Texteditors Vim vor. Der Editor Vim ist eine verbesserte und frei verfügbare Version des unter Unix entwickelten Programms Vi. Gerade für Einsteiger ist dieser Editor nicht intuitiv bedienbar. Da er aber auf sehr vielen Linux-Systemen verfügbar, komplett über die Tastatur zu steuern und unter Administratoren und Programmierern weit verbreitet ist, stelle ich ihn hier grundlegend vor. Die Projekt-Website ist unter www.vim.org zu finden.
Bedenke bitte, dass es sich nicht um ein Programm zur Textverarbeitung handelt. Eine Textverarbeitung bietet Funktionen zur Formatierung der Schrift und des Seitenlayouts. Texteditoren werden zur Bearbeitung von Konfigurationsdateien oder für die Programmierung verwendet.
Installation
apt install vim
Editor starten
Der Editor kann auf unterschiedliche Weise gestartet werden. Ihm können beliebig viele Dateien übergeben werden. Nach dem starten befindet sich der Vim im Kommandomodus, der gesondert beschrieben wird. Man kann also nicht sofort losschreiben.
In der folgenden Liste sind einige Möglichkeiten aufgeführt:
vi
Öffnet ein neues Dokument
vi datei
Startet den Vi mit der angegebenen Datei. Falls diese nicht existiert, wird sie erstellt.
vi +datei
Verwendet eine Kopie der Datei und öffnet diese erst beim Beenden oder Speichern.
vi -r datei
Nach einem Systemabsturz wird die Abarbeitung an der letzten Stelle fortgesetzt. Der Vi erstellt alle 30 Sekunden eine Sicherung der Daten.
vi -R datei
Öffnet die angegebene Datei im read-only-Modus (Nur-Lese-Modus).
vi -
Liest den Inhalt der Standardausgabe ein. Beispiel: ls | vi -
Öffnen von Dateien aus Vim heraus
Dateien können auch aus dem Vim geöffnet werden. Folgende Kommandos stehen im Kommandomodus zur Verfügung:
:e datei
Öffnet die angegebene Datei. Bei der Eingabe des Dateinamens kann der Expansionsmechanismus der Bash verwendet werden.
Die aktuell geladene Datei darf seit dem letzten Speichern nicht modifiziert worden sein.
:e! datei
Wie ":e datei". Evtl. vorgenommene Änderungen der aktuellen Datei werden verworfen.
:r datei
Fügt die angegebene Datei bei der aktuellen Cursorposition ein. Auch hier kann der Expansionsmechanismus der Bash genutzt werden.
Text editieren
Wie bereits erwähnt, startet der Vim zunächst im Kommandomodus. Möchtest du Text eingeben oder editieren, wechselst du dazu in den Eingabemodus. Der Kommandomodus kann mit der Escape-Taste erreicht werden. Drückst du mehrmals die Escape-Taste, ist ein Signalton zu hören.
Folgende Tasten stehen zur Verfügung, um in den Eingabemodus zu wechseln:
i: Einfügen links vom Cursor. a: Einfügen rechts vom Cursor. I: Einfügen am Zeilenanfang. A: Einfügen am Zeilenende. o: Fügt eine neue Zeile hinter der aktuellen Zeile ein. O: Fügt eine neue Zeile vor der aktuellen Zeile ein. R: Überschreibt ab der Cursorposition.
Die folgenden Kommandos sind im Kommandomodus (zu Erreichen mit der Escape-Taste) einzugeben:
yy: Kopiert die aktuelle Zeile in einen Puffer. ny: Kopiert n+1 Zeilen in einen Puffer. yw: Kopiert ein Wort rechts vom Cursor in einen Puffer. nyw: Kopiert n Worte rechts vom Cursor in einen Puffer. yb: Kopiert ein Wort links vom Cursor in einen Puffer. nyb: Kopiert n Worte links vom Cursor in einen Puffer.
Du kannst aber auch anders vorgehen, um einen bestimmten Bereich des Textes in einen Puffer zu kopieren:
- Wechseln in den Kommandomodus (Escape-Taste)
- Bewegen des Cursors an Beginn/Ende des zu markierenden Textes
- Druck auf die Taste v schaltet in den Visual-Modus um
- Bewegen des Cursors an das Ende/Beginn des zu markierenden Textes
- Druck auf die Taste y kopiert den markierten Text in einen Puffer und schaltet wieder in den Kommandomodus um Text einfügen
Um Text aus einem Puffer einzufügen, stehen folgende Befehle im Kommandomodus zur Verfügung:
p Fügt Pufferinhalt nach aktuellem Wort oder nach aktueller Zeile ein (hängt vom Pufferinhalt ab) P Fügt den Pufferinhalt vor dem aktuellen Wort oder vor der aktuellen Zeile ein (hängt vom Pufferinhalt ab)
Text löschen
Befindet sich der Vim im Eingabemodus, kann die Backspace-Taste (Zurück-Taste) zum Löschen von Text benutzt werden.
Im Kommandomodus stehen aber auch folgende Tasten zur Verfügung:
x: Löscht das Zeichen an der Cursorposition nx: Löscht n Zeichen ab der Cursorposition X: Löscht ein Zeichen vor dem Cursor nX: Löscht n Zeichen vor dem Cursor dd: Löscht die aktuelle Zeile ndd: Löscht n Zeilen ab der Cursorposition nJ: Entfernt die Zeilenende-Zeichen der nächsten n Zeilen dL: Löscht alles bis zum unteren Bildschirmrand dw: Löscht das aktuelle Wort d): Löscht den Rest des aktuellen Absatzes D: Löscht alles bis aktuellem Zeilenende nD: Löscht bis aktuellem Zeilenende und die nächsten n-1 Zeilen
Auch zum Löschen von Text kann der Visual-Modus verwendet werden:
- Wechseln in den Kommandomodus (Escape-Taste)
- Mit v in den Visual-Modus umschalten
Text markieren Mit Druck auf die Taste d wird der markierte Text gelöscht Text suchen und ersetzen
Selbstverständlich stehen auch Kommandos zum Suchen und Ersetzen von Text zur Verfügung:
/muster: Sucht im Text vorwärts nach eingegebenem Suchmuster ?muster: Sucht im Text rückwärts nach eingegebenem Suchmuster n: Wiederholt das letzte Suchkommando
- s/alt/neu: Sucht und ersetzt alt durch neu (nur in der aktuellen Zeile)
- s/alt/neu/g: Sucht und ersetzt alt durch neu in der ganzen Zeile
- 1,$s/alt/neu: Ersetzt im ganzen Dokument alt durch neu
Optionen im Kommandomodus
Die hier aufgeführten Optionen stehen zum Beispiel im Kommandomodus zur verfügung:
se option Anzeige des Wertes einer Option se all Anzeige der Werte aller Optionen
- syntax on/off
Farbliche (unter X) bzw. durch verschiedene Schriftarten hervorgehobene Syntax verschiedener Quelldateien (C, C++, Shellskripte, HTML...)
- set bf
Entfernt alle Steuerzeichen aus dem Text
- set ic
Die Groß-/Kleinschreibung von Kommandos wird nicht unterschieden
- set nu
Zeilennummerierung wird aktiviert
- set scroll=xx
Bestimmt den Scrollbereich (xx = Zeilen)
- set sh=pfad_zu_shell
Bestimmt die Shell, deren Kommandos innerhalb des Vim aufgerufen werden können :set ts=x Bestimmt die Länge des Tabulators (x = Zeichen)
Anlegen einer Resourcendatei
Möchtest du nicht alle individuellen Optionen des Vim bei jedem Start manuell setzen, kannst du dir eine Ressourcendatei erstellen. In diese trägst du die gewünschten Optionen ein, die dann bei jedem Aufruf des Vi geladen werden. Diese Ressourcendatei wird im Heimatverzeichnis abgelegt und bekommt den Namen .vimrc. Hier eine Beispieldatei, die die Zeilennummerierung aktiviert und eine Tabulatorbreite von 5 Zeichen festlegt:
:set nu :set ts=5 Den Editor beenden
Zum Beenden von Vim stehen folgende Kommandos im Kommandomodus zur Verfügung:
:w dateiname Speichert das geladene Dokument unter dem angegebenen Dateinamen ab. Hier kann der Expansionsmechanismus der Bash verwendet werden. :w >> dateiname Fügt das aktuelle Dokument an das Ende der angegebenen Datei. :q Beendet den Vi, ohne zu speichern. Funktioniert allerdings nur, wenn das Dokument nicht verändert wurde. :q! Beendet den Vi. Vorgenommene Änderungen werden verworfen und nicht gespeichert. :wn Speichert das aktuelle Dokument und öffnet das nächste Dokument. :x Speichert das aktuelle Dokument und beendet den Editor.
Allgemein
- Wenn sie eine Partitionierung erstellen wollen stehen etliche Werkzeuge zur Verfügung: fdisk, gdisk, parted, cfdisk, sfdisk
- Prüfungsrelevant sind nur fdisk, gdisk, parted
Was ist ein Dateisystem?
- Um besser zu verstehen, was ein Dateisystem unter Linux ist, beginnen wir mit einem Beispiel der realen Welt.
- Stellen Sie sich einen Kühlschrank mit Gefrierfach vor, im Kühlschrank mit Gefrierfach gibt es normalerweise unterschiedliche Abschnitte für unterschiedliche Lebensmittel.
- Zum Beispiel ein Platz für Flüssigkeiten, ein Platz für Eier, ein Platz für Obst.
- Auf diese Weise können Sie Ihr Essen viel einfacher organisieren als wenn alles vorhanden ist, und vor allem, wenn Sie etwas suchen, können Sie tun, was Sie suchen.
- Dies gilt auch für Systemdateien, deshalb das Dateisystem ist eine Methode zum Speichern und Organisieren verschiedener Informationen. Einschließlich von Linux-Betriebssystemen unterstützter .
Dateien im Zusammenhang mit dem Dateisystem der Festplatte
Unix | GNU | Beschreibung |
---|---|---|
Ext | Extended File System | für Linux weiterentwickelte Variante des minix-Dateisystems. Es ist das erste Dateisystem, das speziell für Linux erstellt wurde. Dieses 1992 eingeführte Dateisystem ist eine aktualisierte Version des Minix-Dateisystems. Diesem Dateisystem fehlen wesentliche Funktionen, weshalb die meisten Linux-Versionen derzeit Ext nicht unterstützen. |
Ext2 | Second Extended File System | weiterentwickelte Variante von ext mit erweiterten Grenzen; war lange Zeit das Standard-Dateisystem
Dieses Dateisystem verfügt nicht über die Journalfunktion. Das erste ist ein Dateisystem, das eine Reihe zusätzlicher Funktionen für Dateien und Laufwerke mit einer Größe von 2 Terabyte unterstützt |
Ext3 | Third Extended File System | weiterentwickelte Variante von ext2 mit Journaling. Das ist das Ext2, das die Journaling-Funktion hinzugefügt hat |
Ext4 | Fourth Extended File System | weiterentwickelte Variante von ext3, u. a. mit erweiterten Grenzen. Dieses Dateisystem wurde auch so konzipiert, dass es mit früheren Versionen kompatibel ist. Neue Funktionen wurden zu Ext4 hinzugefügt. Eine der guten und nützlichen Eigenschaften dieses Dateisystems ist die Fragmentierung von Dateien (Fragmentation). |
XFS | x File System | Netzwerkdateisystem, entwickelt an der Berkeley-Universität (nicht zu verwechseln mit XFS)
Dieses Dateisystem wurde von Silicon Graphics für 64-Bit-Dateisysteme entwickelt.Einige dieser externen Dateisysteme sind nur auf demselben Betriebssystem verfügbar. Einige Dateisysteme, die nur in Unix-Umgebungen verfügbar sind, werden in xfs unterstützt. |
VFAT | Virtual FAT | Optionale Erweiterung von FAT12/FAT16/FAT32, um Unterstützung für lange Dateinamen und Sonderzeichen zu gewährleisten, ab Windows 95. Ist eine Version des FAT-Dateisystems, auch bekannt als FAT32. Dieses Dateisystem unterstützt mehr Dateikapazität als FAT. Die meisten Microsoft-Betriebssysteme unterstützen Vfat. Tatsächlich ist Vfat Windows FAT32.
VFAT: ist eine Version des FAT-Dateisystems, auch bekannt als FAT32. Dieses Dateisystem unterstützt mehr Dateikapazität als FAT. Die meisten Microsoft-Betriebssysteme unterstützen Vfat. Tatsächlich ist Vfat Windows FAT32. |
Dateisysteme für Flash-Speicher
Abkürzung | Name | Beschreibung |
---|---|---|
UBIFS | Unsorted Block Image File System | von Nokia geförderter, potenzieller JFFS2-Nachfolger |
JFFS2 | Journaling Flash File System, Version 2 | weiterentwickelte Variante von JFFS, Unterstützung für NAND-Flash, Komprimierung etc. entgegen dem Namen verwendet es kein Journaling |
Yet Another Flash File System | speziell für NAND-Flashspeicher |
Datenbank Bezogene Dateisysteme und Dateisystemen für bestimmte Zwecke
- procfs
- sysfs
- tmpfs
- debugfs
procfs
Abkürzung für process filesystem, übersetzt ‚Prozessdateisystem‘) ist ein virtuelles Dateisystem auf meist unixoiden Systemen. Es dient zur Anzeige und Änderung von System- und Prozessparametern. Üblicherweise wird es in der Verzeichnisstruktur unter /proc eingebunden. Es wird vom Kernel während des Bootvorgangs dynamisch erzeugt und nicht gespeichert.
sysfs
ist ein virtuelles Dateisystem des Linux-Kernels. Es exportiert Informationen über verschiedene Kernel-Subsysteme, Hardware und assoziierte Geräte-Treiber durch virtuelle Dateien in den Benutzer-Modus. Bestimmte Parameter können über dieses Interface auch konfiguriert werden.
Sysfs bietet eine ähnliche Funktionalität wie der Sysctl-Mechanismus in BSD-Betriebssystemen, mit dem Unterschied, dass Sysfs als virtuelles Dateisystem implementiert wurde.
tmpfs
englisch für (temporary file system) ist ein Dateisystem, das in vielen Unix-artigen Betriebssystemen, als verbesserter Ersatz für ramfs, zum Anlegen einer RAM-Disk eingesetzt wird.
debugfs
englisch für (debug filesystem) ist ein virtuelles Dateisystem des Linux-Kernels. Es wurde von Greg Kroah-Hartman entwickelt und ist seit der Kernel-Version 2.6.10-rc3 offiziell verfügbar.
Unterschiede / Gemeinsamkeiten zwischen Windows und Linux
Hier sollen die wesentlichen Unterschiede zwischen Windows und Linux gezeigt werden. Denn gerade die Personen, die in die Unix-Welt umsteigen wollen, stellen meist die Frage: Was kann Linux, das Windows nicht kann? Oder: Kann mir Linux den Komfort bieten, den mir Windows bietet? Auf all diese und weitere Fragen werden wir eingehen und dabei versuchen, auch für Laien verständlich zu sein. Wenn Sie dennoch weitere Fragen haben, zögern Sie nicht, eine E-Mail an den Autor oder an das SelfLinux-Team zu senden.
Einzel- und Mehrbenutzersysteme
Unix wurde von Anbeginn als ein Mehrbenutzersystem konzipiert. Daher benötigen Sie, bevor Sie mit dem System arbeiten können, einen Benutzernamen, ein zugehöriges Passwort und im allgemeinen auch ein sogenanntes Heimatverzeichnis für Ihre persönlichen Daten. Benutzername und Passwort werden auch als Benutzerkonto bezeichnet. Anders als bei einigen Windows-Varianten kann ein gewöhnlicher Benutzer kein neues Benutzerkonto eröffnen. Diese Aktion ist unter Unix nur dem Administrator (root) erlaubt.
Das Dateisystem
Windows und Unix verwenden unterschiedliche Dateisystemtypen. Windows 95 bis ME arbeiten ausschließlich mit den Dateisystemen de FAT16 und de FAT32. Windows NT / 2000 / XP verwenden primär das Dateisystem de NTFS.
Die Zugriffsrechte
Unter Windows 95 / 98 / ME haben Sie das Problem, dass Sie jede Datei auf dem System ansehen, verändern, speichern oder gar löschen können. Egal ob es sich nun um eine Systemdatei oder um einem geheimen Liebesbrief handelt. Ihnen steht es auch frei, einfach aus Spaß die gesamte Festplatte zu formatieren. Das muss leider nicht immer aus bösem Willen geschehen, sondern kann auch einem erfahrenen Benutzer aus Unachtsamkeit passieren.Sie speichern lediglich die persönlichen Einstellungen und den eingerichteten Desktop. Linux ist ein Open-Source-Betriebssystem. So kann jeder auf der ganzen Welt ein neues Dateisystem für dieses Betriebssystem erstellen. Dies ist einer der Gründe, warum es für Linux so viele Dateisysteme gibt.
Was ist Journaling?
Beachten Sie bei der Auswahl eines Dateisystems unter anderem, dass der Name eines Dateisystems als "Journaling" und nicht als "Journaling" angezeigt wird.
Journaling soll Datenschäden verhindern, die durch einen plötzlichen Stromausfall oder durch solche Faktoren verursacht werden können. Angenommen, Ihr System schreibt Daten auf die Festplatte, die sich plötzlich ausschaltet. Ohne die Verwendung von Journaling weiß das System nicht genau, ob die Datei vollständig auf die Festplatte geschrieben wurde oder ob die auf die Festplatte übertragene Datei möglicherweise beschädigt wurde.
MBR: Master Boot Record
Der MBR-Standard wurde erstmals 1983 mit DOS 2.0 eingeführt. Dies wird von den Master Boot Record-Diensten abgeleitet. Dies liegt daran, dass der MBR ein spezielles Startsegment ist, das oben auf einem Laufwerk beginnt. Dieser Abschnitt enthält einen Bootloader für das installierte Betriebssystem und Informationen zu den logischen Partitionen des Laufwerks. Bootloader ist auch eine Verknüpfung, die einen größeren Bootloader als eine andere Partition auf dem Laufwerk lädt. MBR ist die wichtigste Datenformatierungsstruktur auf der Festplatte.
Die MBR-Aktivitäten lassen sich im Allgemeinen wie folgt zusammenfassen
1-Suchen einer aktiven Partition oder Starten des Sektors .
2-Laden Sie eine Kopie des Boot-Sektors von der aktiven Partition auf das Speichersystem hoch .
3-Verschieben Sie die Steuerbefehle in die ausführbaren Codes im Bootsektor .
4-Durchsuchen Sie die Partitionstabelle nach einer aktiven Partition .
Wenn MBR eine der oben genannten Aktivitäten aus irgendeinem Grund nicht ausführt,gibt das System einen der folgenden Fehler aus
1- Ungültige Partitionstabelle .
2- Fehler beim Laden des Betriebssystems .
3- Fehlendes Betriebssystem .
GPT: GUID-Partitionstabelle
Der Begriff GPT steht für GUID Partition Table (GUID-Partitionstabelle) und bezeichnet eine GUID-Partitionstabelle, die im MBR-Layout neuer ist und schrittweise ersetzt wird. Dieser Standard unterliegt keinen MBR-Einschränkungen, und Partitionen können sehr viel größer sein.
Das Ergebnis ist der Unterschied zwischen MBR und GPT
In den meisten Fällen haben Sie weder mit MBR noch mit GPT ein Problem. Sie müssen nur GPT verwenden oder MBR in GPT konvertieren, wenn Sie eine Partition mit mehr als 2 Terabyte benötigen.
Liste wichtiger Dateien, Verzeichnisse und Anwendungen:
fdisk
gdisk
parted
mkfs
Der Befehl mkfs unter Linux kann zum Formatieren einer Partition verwendet werden. Mit dem Befehl mkfs können Sie eine Linux-Partition in ein anderes Dateisystem formatieren. Der Befehl mkfs ist ein ziemlich intelligenter Befehl. Wenn Sie diesen Befehl ausführen, um eine Partition zu formatieren, die bereits über ein ext3-Dateisystem verfügt, übernimmt er automatisch das neue Dateisystem ext3 und führt den Befehl mkfs.ext3 aus.
Mkfs.ext2 : Zum Formatieren von Partitionen mit ext2-Dateisystem.
Mkfs.ext3 : Zum Formatieren von Partitionen mit ext3-Dateisystem.
Mkfs.msdos: Wird zum Formatieren von Partitionen mit dem VFAT-Dateisystem von Microsoft verwendet.
Er enthält denselben Befehl wie "mkfs.vfat" und "mkfs.dosfs" ,die alle dasselbe tun .
mkswap
Einführung in das Fdisk Tool unter Linux
Das Dienstprogramm Fdisk ist ein Linux-Dateiverwaltungsdienstprogramm, das eine Befehlszeile verwendet. Mit diesem Tool können Sie Ihren Festplattenspeicher in Partitionen einteilen, Partitionen sind Teil Ihres Festplattenspeichers. Sie können den Befehl fdisk mit dem Schalter -l verwenden, um die Festplatten im System und ihre Formatierungsstruktur anzuzeigen.
Was ist parted
Wir werden das Partitionstool verwenden, um das Laufwerk zu partitionieren. In den meisten Fällen ist dies bereits auf dem Server installiert. Wenn Sie sich auf einem Ubuntu- oder Debian-Server befinden und sich noch nicht getrennt haben, können Sie ihn mit dem folgenden Befehl installieren :
sudo apt-get update
sudo apt-get install parted
Standard Partitionierung auswählen
Dazu müssen wir zuerst den Partitionierungsstandard angeben, den wir verwenden möchten: GPT ist der modernere Partitionierungsstandard, während der MBR-Standard eine umfassendere Unterstützung für alle Betriebssysteme bietet. Um den GPT-Standard auszuwählen, genehmigen Sie ihn auf einem Datenträger, den Sie wie folgt angeben:
sudo parted / dev / sda mklabel gpt
Wenn Sie stattdessen das MBR-Format verwenden möchten, geben Sie Folgendes ein:
sudo trennte sich / dev / sda mklabel msdos
Erstellen Sie ein Dateisystem auf der neuen Partition
Nachdem wir eine neue Partition haben, können wir sie als Ext4-Dateisystem formatieren. Übergeben Sie dazu die Partition an das Dienstprogramm mkfs.ext4. Mit Zustimmung des Flags -L können wir eine Partitionsbezeichnung hinzufügen. Wählen Sie einen Namen, um dieses spezielle Laufwerk zu identifizieren:
Tipp Stellen Sie sicher, dass es an die Partition und nicht an die gesamte Festplatte übergeben wird. Unter Linux haben Festplatten Namen wie sda, sdb, hda usw. Die Partitionen auf diesen Festplatten haben am Ende eine zusätzliche Nummer, daher müssen wir etwas wie sda1 und nicht sda verwenden.
sudo mkfs.ext4 -L Datenpartition / dev / sda1
Allgemeines
- Sie sollen die Integrität von Dateisystemen sicherstellen und kleinere Probleme erkennen und beseitigen.
- Desweiteren sollen sie Engpässe bei der Speicherkapazität ermitteln können und bei einem überfüllten Dateisystem feststellen wo der Speicherplatz verbraucht wird.
Sicherstellen der Integrität des Dateisystems und Problembehebung
- Das Programm fsck ist ein Frontend zur Überprüfung von Dateisystemen. Dieses ruft zur Laufzeit andere Programme
Liste wichtiger Dateien, Verzeichnisse und Anwendungen:
chmod | ändert Zugriffsrechte von Dateien und Verzeichnissen |
umask | Dateirechte bei der Erstellung von Dateien und Verzeichnissen einschränken |
chown | Die Benutzer Rechte auf eine Datei oder einen Ordner ändern |
chgrp | ändert die Gruppenzugehörigkeit von Dateien und Verzeichnissen |
Kontrollfragen
Testfrage 1
Testfrage 2
Testfrage 3
Testfrage 4
Testfrage 5
Wichtigste Wissensgebiete:
- Links anlegen
- harte und/oder symbolische Links identifizieren
- Dateien kopieren vs. verlinken
- Links verwenden, um Systemadministrationsaufgaben zu unterstütze
Wichtiger Dateien, Verzeichnisse und Anwendungen:
Allgemeines
- Wenn es ermöglicht werden soll, auf eine Datei von verschiedenen Verzeichnissen aus zuzugreifen,
- können Sie auf diese Datei einen Link legen, anstatt die Datei in dieverschiedenen Verzeichnisse zu kopieren. Das hat im Wesentlichen zwei Vorteile: Einerseits sparen Links Platz auf dem Datenträger,
- weil eine Datei nicht mehrfach vorhanden sein muss, wenn sie über mehr,als nur einen Pfad bereitgestellt werden soll.
- Andererseits wird die Administration vereinfacht, weil man nicht mehrere Ver-sionen einer Datei pflegen muss.
Softlinks
Softlinks werden auch als symbolische Links bezeichnet. Ein Softlink ist im Prinzip ein Zeiger, der auf eine Datei zeigt. Er belegt nur wenig Speicherplatz auf dem Datenträger, auf dem er angelegt wurde. Die Besonderheiten eines Softlinks sind:
- Er kann sowohl auf Dateien als auch auf Verzeichnisse verweisen.
- Er kann auf Dateien und Verzeichnisse einer anderen oder der Partition angewandt werden, auf der er sich selbst befindet.
- Er verwendet die Dateiberechtigungen der Zieldatei und ist deshalb immer mit Lese-, Schreib- und Ausführungsrechten versehen.
- Ein Softlink bleibt bestehen, wenn die Zieldatei gelöscht wird. Man bezeichnet einen solchen verwaisten Link auch als gebrochenen Link.
Die folgenden kommentierten Kommandos demonstrieren das Verhalten von Softlinks. Das erste Kommando ln-s erzeugt einen Softlink mit der Bezeichnung softlink,der auf die existierende Datei file1 verweist. Mit dem zweiten Kommando wird das Ergebnis der Aktion überprüft:
archangel:/testfiles # ln -s file1 softlink archangel:/testfiles # ls -l total 44 drwxr-xr-x 2 root root 4096 Jan 2 18:00 . drwxr-xr-x 24 root root 4096 Jan 2 17:55 .. -rw-r--r-- 1 root root 35184 Jan 2 17:55 file1 lrwxrwxrwx 1 root root 5 Jan 2 18:00 softlink -> file1
Die erste Spalte der letzten Zeile des Kommandos ls-l zeigt an, dass es sich um einen Link handelt. Beachten Sie bitte auch, dass in der Zugriffssteuerungsliste alle Rechte gesetzt sind. Wenn Sie nun den Modus dieses Links verändern, ändert sich stattdes-sen der Modus der Zieldatei:
archangel:/testfiles # chmod a+w softlink archangel:/testfiles # ls -l total 44 drwxr-xr-x 2 root root 4096 Jan 2 18:00 . drwxr-xr-x 24 root root 4096 Jan 2 17:55 .. -rw-rw-rw- 1 root root 35184 Jan 2 17:55 file1 lrwxrwxrwx 1 root root 5 Jan 2 18:00 softlink -> file1
Das erste Kommando fügt zu softlink Schreibrechte für alle hinzu. Diese Rechte werden aber stattdessen der Datei file1 hinzugefügt,wie Sie sehen.Es gibt mehrere Methoden, sich die Auswirkungen von Links anzusehen. Mit dem Kommando ls-li kann z. B. nachgewiesen werden, dass die Zieldatei und der Softlink zwei verschiedene Inodes verwenden:
archangel:/testfiles # ls -li total 44 1896834 drwxr-xr-x 2 root root 4096 Jan 2 18:00 . 2 drwxr-xr-x 24 root root 4096 Jan 2 17:55 .. 1896921 -rw-rw-rw- 1 root root 35184 Jan 2 17:55 file1 1896920 lrwxrwxrwx 1 root root 5 Jan 2 18:00 softlink -> file1
Die Datei file1 verwendet den Inode 1896921, während der Softlink softlink den Inode 1896920 belegt. Mit dem Kommando stat kann Ähnliches nachgewiesen werden:
archangel:/testfiles # stat softlink File: `softlink' -> `file1' Size: 5 Blocks: 0 IO Block: 4096 symbolic link Device: 302h/770d Inode: 1896920 Links: 1 Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2017-01-02 18:26:45.000000000 +0100 Modify: 2017-01-02 18:00:07.000000000 +0100 Change: 2017-01-02 18:00:07.000000000 +0100
In der zweiten Zeile der Kommandoausgabe wird angezeigt, dass es sich um einen symbolischen Link handelt. Die Zugriffsrechte sind auch noch einmal deutlich dargestellt. Wenden Sie dasselbe Kommando auf die Zieldatei des Links an, ergibt sich folgendes Bild:
archangel:/testfiles # stat file1 File: `file1' Size: 35184 Blocks: 72 IO Block: 4096 regular file Device: 302h/770d Inode: 1896921 Links: 1 Access: (0666/-rw-rw-rw-) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2017-01-02 17:55:38.000000000 +0100 Modify: 2017-01-02 17:55:38.000000000 +0100 Change: 2017-01-02 18:01:03.000000000 +0100
Die zweite Zeile besagt, dass es sich um eine gewöhnliche Datei handelt. Auch hier sieht man deutlich, dass die Zieldatei und der Softlink zwei verschiedene Inodes verwenden.
Mit den nächsten Kommandos wird demonstriert, was geschieht, wenn Sie die Zieldatei eines symbolischen Links löschen, den Link selbst aber nicht:
archangel:/testfiles # rm file1
Die Zieldatei ist nun gelöscht:
archangel:/testfiles # ls -l total 8 drwxr-xr-x 2 root root 4096 Jan 2 18:40 . drwxr-xr-x 24 root root 4096 Jan 2 17:55 .. lrwxrwxrwx 1 root root 5 Jan 2 18:00 softlink -> file1
Der Softlink ist, wie Sie sehen, bestehen geblieben. Wenn Sie nun versuchen, über diesen Link auf die nicht mehr existieren
de Datei zuzugreifen, erhalten Sie jedoch eine Fehlermeldung:
archangel:/testfiles # cat softlink cat: softlink: No such file or directory
Ein typisches Beispiel für die praktische Verwendung von Softlinks sind die Verlinkungen der init-Skripte, die beim Systemstart abgearbeitet werden. »Runlevel wechseln und das System anhalten oder neu starten«, behandelt. Sie sehen hier einen Teil der Links, die zum Runlevel 3 eines Systems gehören:
archangel:/etc/rc.d/rc3.d # ls -l total 8 drwxr-xr-x 2 root root 4096 Oct 19 21:53 ./ drwxr-xr-x 11 root root 4096 Dec 19 11:04 ../ lrwxrwxrwx 1 root root 7 Jul 20 2017 K03cron -> ../cron* lrwxrwxrwx 1 root root 8 Jul 20 2017 K03smbfs -> ../smbfs* lrwxrwxrwx 1 root root 6 Jul 20 2017 K05smb -> ../smb* lrwxrwxrwx 1 root root 8 Jul 20 2017 K05squid -> ../squid* ... weitere Zeilen wurden entfernt ...
Hardlinks
Bei einem Hardlink handelt es sich eigentlich nur um einen weiteren Verzeichniseintrag für eine existierende Datei.Demzufolge belegt er auch keinen eigenen Inode und fast gar keinen Speicherplatz im Dateisystem. Daraus ergeben sich völlig andere Eigenschaften im Vergleich zu einem symbolischen Link:
- Hardlinks können nicht auf Verzeichnisse angewandt werden, sondern nur auf Dateien.
- Hardlinks können nicht partitionsübergreifend eingesetzt werden.
- Es gibt keine verwaisten bzw. gebrochenen Hardlinks. Eine Datei wird gelöscht,wenn der letzte Hardlink zu dieser Datei gelöscht wird.
- Die Zieldatei und der Hardlink verwenden eine gemeinsame Zugriffssteuerungsliste (ACL).
- Ein Hardlink ist im Nachhinein nicht mehr von seiner Zieldatei zu unterscheiden.
Wenn Sie das Kommando ln ohne Optionen verwenden, wird ein Hardlink erstellt. Die folgenden Kommandos demonstrieren die Eigenarten von Hardlinks. Zunächst werden zwei Hardlinks zu einer bestehenden Datei erstellt. Das Kommando ls-l zeigt das Ergebnis der Aktion:
archangel:/testfiles # ln file1 hardlink1 archangel:/testfiles # ln file1 hardlink2 archangel:/testfiles # ls -l total 80 drwxr-xr-x 2 root root 4096 Jan 2 19:21 . drwxr-xr-x 24 root root 4096 Jan 2 17:55 .. -rw-r--r-- 3 root root 22271 Jan 2 19:21 file1 -rw-r--r-- 3 root root 22271 Jan 2 19:21 hardlink1 -rw-r--r-- 3 root root 22271 Jan 2 19:21 hardlink2
Die drei Dateien sind offensichtlich gleich groß und verfügen auch sonst über dieselben Eigenschaften. Mit ls-li soll festgestellt werden, welche Inodes die Dateien jeweils belegen:
archangel:/testfiles # ls -li total 80 1896834 drwxr-xr-x 2 root root 4096 Jan 2 19:21 . 2 drwxr-xr-x 24 root root 4096 Jan 2 17:55 .. 1896921 -rw-r--r-- 3 root root 22271 Jan 2 19:21 file1 1896921 -rw-r--r-- 3 root root 22271 Jan 2 19:21 hardlink1 1896921 -rw-r--r-- 3 root root 22271 Jan 2 19:21 hardlink2
Alle drei Dateien verwenden ein und de nselben Inode. Wenn Sie das Kommando stat auf eine der drei Dateien anwenden, sehen Sie zwei interessante Details. Erstens werden die Hardlinks als reguläre Dateien erkannt, und zweitens erkennt das Programm drei Links. Es wird also auch die ursprüngliche Datei als Link dargestellt:
archangel:/testfiles # stat hardlink1 File: `hardlink1' Size: 22271 Blocks: 48 IO Block: 4096 regular file Device: 302h/770d Inode: 1896921 Links: 3 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2017-01-02 19:21:30.000000000 +0100 Modify: 2017-01-02 19:21:30.000000000 +0100 Change: 2017-01-02 19:21:46.000000000 +0100
Kontrollfragen
Testfrage 1
Testfrage 2
Testfrage 3
Testfrage 4
Testfrage 5
Drucker und Druckvorgänge verwalten
Liste wichtiger Dateien, Verzeichnisse und Anwendungen:
- CUPS Konfigurationsdateien, -Werkzeuge und -Hilfsprogramme
- /etc/cups/
- LPD-Kompatibilitätsschnittstelle (lpr,lprm,lpq)
Befehle zur Kontrolle von Druckvorgängen
lp und lpr
lp und lpr senden Druckaufträge an einen angegebenen Drucker. Das Kommando lp entstammt dem SystemV und versteht andere Optionen als lpr. Mit -P wird die zu verwendende Warteschlange angegeben.
#:~ # lpr -Plaserjet1300 /etc/printcap
druckt die Datei /etc/printcap auf dem Printer Laserjet1300 aus.Sie können dem Kommando lpr etliche Optionen übergeben, die allesamt mit –o eingeleitet werden. Hierbei kann –o mehrfach verwendet werden. Gängige Optionen sind:
-o media=Größe (z. B. a4)
-olandscape (Querformat)
-ofit-to-page skaliert die Druckdatei auf Seitengröße.
Sie können mit folgenden Optionen mehrere Dokumentenseiten auf jede Ausgabeseite drucken:
-onumber-up=2
-onumber-up=4
-onumber-up=6
-onumber-up=9
-onumber-up=16
Beim Druck von Textdateien können Sie die Anzahl der Spalten und der Zeilen pro Zoll festlegen:
-ocpi=N
-olpi=N
lpq
lpq zeigt den Inhalt von Warteschlangen an. Es kann auch hier mit der Option -P eine bestimmte Warteschlange angegeben werden:
# lpq -Plaserjet1300 laserjet1300 is ready and printing Rank Owner Job File(s) Total Size active root 450 printcap 1024 bytes 1st harald 451 haushaltsplan 9216 bytes 2nd harald 452 haushaltsplan 9216 bytes 3rd dominik 453 domema.html 1024 bytes
Um die Aufträge aller angeschlossenen Drucker zu sehen, verwenden Sie einfach das Kommando lpq–a.
lprm
lprm löscht Aufträge aus der Warteschlange. Bereits im Druck befindliche Aufträge können nicht mehr entfernt werden.
# lprm -Plaserjet1300 451
entfernt den versehentlich doppelt abgesendeten Druckauftrag aus dem Beispiel für lpq.
lpc – Line Printer Control
lpc ist ein Programm, das man als gewöhnlichen Konsolen befehl oder interaktiv verwenden kann. Der interaktive Modus bietet einen Eingabe prompt und ist vor allem dann sinnvoll, wenn Sie beabsichtigen, dem Druckdaemon mehrere Befehle hintereinander zu geben.
lpc> status laserjet1300: printer is on device 'parallel' speed -1 queuing is enabled printing is enabled 4 entries daemon present
lpc> up laserjet1300startet und aktiviert den Laserjet 1300, während lpc> up all alle Drucker gleichzeitig startet und aktiviert.
start startet den Druckprozess als solchen,
so dass jetzt Aufträge aus der Warteschlange abgearbeitet und ausgedruckt werden können.
stop beendet den Druckprozess. Ein laufender Auftrag wird noch bis zum Ende abgearbeitet. Die Druckerwarteschlange nimmt aber weiterhin Aufträge entgegen.
enable aktiviert die Druckerwarteschlange.
disable deaktiviert die Druckerwarteschlange. Bereits in der Warteschlange befindliche Aufträge werden noch fertig abgearbeitet. Neue Jobs werden jedoch abgelehnt.
up kombiniert die Kommandos enable und start.
down kombiniert die Kommandos disable und stop.
abort beendet den Druckprozess sofort. Auch ein bereits in Arbeit befindlicher Druckauftrag wird sofort abgebrochen. Sollte der Drucker seine Tätigkeit nicht sofort einstellen, ist dies auf Restdaten im Druckerspeicher zurückzuführen.
topq stellt einen bereits gespoolten Druckauftrag an die erste Position in der Warteschlange. Hier sieht die Befehlssyntax etwas anders aus als bei den anderen Kommandos.
lpc>topqLaserjet1300 453 verschiebt den Druckjob mit der Nummer 453 an die erste Position der Druckerwarteschlange. Ein bereits in Arbeit befindlicher Druckauftrag wird hierdurch nicht abgebrochen.
quit beendet letztendlich den interaktiven Modus des lpc und kehrt zur normalen Shell zurück.
Drucken mit CUPS
CUPS modifiziert gleich nach seiner Installation die altbekannte/etc/printcap, in der er sich selbst als Netzwerkdrucker deklariert:
# This file was automatically generated by cupsd(8) from the # /etc/cups/printers.conf file. All changes to this file # will be lost. laserjet1300|laserjet1300:rm=archangel:rp=laserjet1300:
Die Konfigurationsdateien für CUPS befinden sich alle unterhalb von /etc/cups. CUPS horcht am TCP-Port 631 und kann somit über http://localhost:631 angesprochen werden. Der TCP-Port für die Konfiguration lässt sich übrigens in der Datei /etc/cups/cupsd.conf ändern. Die normalen Befehle zur Verwaltung von Warteschlangen, wie lpr, lprm, lpq und lpc,stehen genauso zur Verfügung wie unter BSD. Einzig der Befehl lpc ist in seiner Funktionsweise eingeschränkt. Zur konsolen basierten Konfiguration dient das Tool lpad-min.
Kontrollfragen
Testfrage 1
Testfrage 2
Testfrage 3
Testfrage 4
Testfrage 5