Skript/LPIC101

Aus Foxwiki

101.1 Hardwareeinstellungen ermitteln und konfigurieren

Allgemeines

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

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

Ressourcen für Hardwarekomponenten

Zur abfrage der Konfigurationen der Hardwareressourcen sind die Dateien unterhalb des Verzeichnisses /proc nötig

Im zusammenhang wichtige Date zum prüfen:

  • /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.

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.

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.

       root@user:/ # 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.

       root@user:/ # 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
       ...

Kontrollfragen

Welche Kernel-Architektur wird weitgehen in Linux-Distibutionen verwendet?

Ein Monotitischer-kernel. Er ist ein Kernel, in dem nicht nur Funktionen zu Speicher-, Prozessverwaltung und zur Kommunikation zwischen den Prozessen, sondern auch Treiber für die Hardwarekomponenten und möglicherweise weitere Funktionen direkt eingebaut sind.

Für was steht die erste Ziffer der Kernalversion?

Major Release (wird bei gravierenden Änderungen verändert)

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.
  1. wenn ein Bootloader vorgefunden wurde gibt, gibt das BIOS die Kontrolle an diesen ab und beendet sich
  2. 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)
        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?

Der Bootloader ist ein Startprogramm welches gewöhnlich durch die Firmware (z. B. UEFI, oder dessen Vorgänger bei IBM-kompatiblen PCs, dem BIOS) eines Rechners von einem startfähigen Medium geladen und anschließend ausgeführt wird. Der Bootloader lädt dann weitere Teile des Betriebssystems, gewöhnlich einen Kernel.

Wie kann man sich den MBR ausgeben lassen?

dd if=/dev/sda bs=512 count=1|od -h --endian=big

Wie kann man sich die Ausgaben, die der Kernel während des Sysemstarts produziert, ausgeben lassen?

dmesg |less

Was ist ein UEFI?

Bei modernen Hauptplatinen kommt die Unified Extensible Firmware Interface zum Einsatz. Es hat den grundsätzlich gleichen Verwendungszweck wie ein BIOS.

Wie kann man sich die Startprotokollierung des Systems noch anzeigen lassen?

journalctl -k

101.3 Runlevel wechseln und das System anhalten oder neu starten

Übersicht

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.

Wichtigste Dateien, Verzeichnisse und 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?
Die EFI-Systempartition ist 100 mb

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

Wie heißt ein GRUB?

GRAND UNIFIED BOOTLOADER

Was ist ein GRUB?

GRUB ist ein neuer Bootloader, ist ein Bootmanager

Im welche Verzeichnis befindet sich die Hauptkonfigurationsdatei?

/boot/grub auch /boot/grub2

Welche sind wichtigste Dateien,Verzeichnise und Anwendungen bei GRUB?

menu.lst, grub.cfg, grub.conf, grub - install, grub - mkconfig, MBR

Wie heißt ein LZMA und LZO?

LZMA- Lempel-Ziv-Markow-Algorithmus und LZO- Lempel-Ziv-Oberhumer

102.3 Shared Libraries verwalten

Wichtigste Wissensgebiete

  1. Shared Libraries identifizieren
  2. die typischen Orte für Systembibliotheken identifizieren
  3. 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,

Verwaltung von Shared Libraries

  • 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

Antwort1

Testfrage 2

Antwort2

Testfrage 3

Antwort3

Testfrage 4

Antwort4

Testfrage 5

Antwort5

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

Antwort

Testfrage 2

Antwort

Testfrage 3

Antwort

Testfrage 4

keine

Testfrage 5

keine

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

Antwort

Testfrage 2

Antwort

Testfrage 3

Antwort

Testfrage 4

keine

Testfrage 5

keine


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 Programm mount 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 kann tar mit normalen Optionen oder Optionswörtern verwenden. Außerdem kann tar auch Optionen ohne vorangestellte Bindestriche übernehmen. Die folgenden vier Kommandos führen bei tar 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

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?

which

Welche Variable definiert die Anzahl der Kommandos, die in der Befehls-History aufbewahrt werden?

$HISTSIZE

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?

unset

Welcher Befehl zeigt die Versionsnummer des laufenden Kernels?

uname -r

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?

Datenübertragung (Text oder Numerisch, binär usw.). In der UNIX Philosophie sollen alle Datenübertragungen idealerweise in Textform realisiert werden, sodass die Programme untereinander kompatibel sind. Die Datenübertragung mittels Textstrom wird i.d.R. durch eine Pipe veranlasst.

Was passiert bei folgender Befehlszeile : cat > textdatei.txt

Die Standardeingabe (Tastatur i.d.R.) wird in diese Datei umgelenkt. Die Konsole springt in eine leere Zeile und alles was man nun eintippt wird anschließend in die textdatei.txt übertragen. Die Eingabe wird mit STRG+D oder alternativ STRG+C beendet.

Was passiert bei folgender Befehlszeile : cat < textdatei.txt | uniq

Der Inhalt der Datei wird zur Standardausgabe. Folglich wird auf der Konsole der Inhalt der Textdatei angezeigt. Es werden lediglich einzigartige Zeilen ausgegeben.

Wie kann man die Dateien in einem Verzeichnis nach Dateigröße sortieren?

ls -s | sort -n

Was passiert bei folgender Befehlszeile : dd if=/dev/sda bs=512 count=1|od -h --endian=big | nl

Der Master-Boot-Record (die ersten 512 Byte der Festplatte) wird ausgegeben. Der Befehl od -h gibt ihn in Hexadezimaler Form aus und der Befehl nl nummeriert die Zeilen.

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

Antwort1

Testfrage 2

Antwort2

Testfrage 3

Antwort3

Testfrage 4

Antwort4

Testfrage 5

Antwort5

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

stdin, stdout und stderr

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

PIPE

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?

die Ausgabe eines Programms direkt als Eingabe für ein anderes Programm verwen det werden kann

Was ist der unterschid zwischen stdin, stdout und stderr?

stidin ist Eingabe,stdout und stderr Ausgabe

Testfrage 3

keine

Testfrage 4

keine

Was konnen wir machen mit tee und xargs?

Mit tee kann der Datenstrom eines Programms gleichzeitig auf der Konsole und in einer Textdatei ausgegeben werden.

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.)

  1. A: nice-14
  2. B: nice-n14
  3. C: renice-n14
  4. D: nice-n-14
  5. E: nice--14
A,B

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

  1. A: nice--12 8490
  2. B: bg
  3. C: renice-n15 8490
  4. D: renice-15 8490
  5. E: nice-n12 8490
C

Welche der folgenden Programme können Einfluss auf die Ausführungspriorität eines Prozesses nehmen? (Wählen Sie drei Programme aus.

  1. A: bg
  2. B: nice
  3. C: renice
  4. D: fg
  5. E: top

B,C,E

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?

  1. A: 9
  2. B: 19
  3. C: 49
  4. D: 99

B

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.confoder 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/ä/\&auml\;/g;
s/Ä/\&Auml\;/g;
s/ü/\&uuml\;/g;
s/Ü/\&Uuml\;/g;
s/ö/\&ouml\;/g;
s/Ö/\&Ouml\;/g;
s/ß/\&szlig\;/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 ^[^#]

Antwort : Nach einem Zeilenanfang ohne Raute

Sie geben im Kate Editor unter Suchen ohne RegExp "a*" ein. Was erhalten Sie als Antwort?

Antwort : Sie suchen nach dem String "a*".

Sie geben in der Kate-Suche mit RegEx a* ein, was erhalten Sie als Antwort?

Antwort: Sie erhalten alle Wörter, welche mit einem a beginnen und eine bis beliebig viele Wiederholungen dieses Zeichens aufweisen.

Sie geben in der Shell den Befehl ls a* ein, was erhalten Sie als Antwort?

Antwort: Sie erhalten alle Dateien und Verzeichnisse, welche mit a beginnen und deren Folgezeichen belibieg sein können.

Sie geben in der Shell den Befehl ls a??? ein, was erhalten Sie als Antwort?

Antwort: Sie erhalten alle Dateien und Verzeichnisse, deren Name mit a beginnt und anschließend genau drei beliebige Folgezeichen beinhaltet.

Wie können Sie sich alle Einträge vom 10ten Dezember im Systemlog ansehen?

Antwort : # grep '^Dec 10' /var/log/syslog

Wonach sucht das folgende RegEx Kommando : # grep –w '[0-9]\{3\}' Suchdatei ?

Antwort: Es sucht nach Zeilen, die drei aufeinander folgende Ziffern beinhalten.

Wonach sucht das folgende RegExp Kommando : # grep '[A-Z]\+' Suchdatei ?

Antwort: Es sucht nach Zeilen mit mindestens einem Großbuchstaben.
Was bewirkt folgender Befehl archangel:/textfiles # sed 's/ae/ä/g' DeutscherText.txt ?
Antwort: Er ersetzt alle "ae" Strings mit einem "ä".

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

Antwort1

Testfrage 2

Antwort2

Testfrage 3

Antwort3

Testfrage 4

Antwort4

Testfrage 5

Antwort5


Wichtigste Wissensgebiete:

  1. Links anlegen
  2. harte und/oder symbolische Links identifizieren
  3. Dateien kopieren vs. verlinken
  4. 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

Antwort1

Testfrage 2

Antwort2

Testfrage 3

Antwort3

Testfrage 4

Antwort4

Testfrage 5

Antwort5

Drucker und Druckvorgänge verwalten

Liste wichtiger Dateien, Verzeichnisse und Anwendungen:

  1. CUPS Konfigurationsdateien, -Werkzeuge und -Hilfsprogramme
  2. /etc/cups/
  3. 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

Antwort1

Testfrage 2

Antwort2

Testfrage 3

Antwort3

Testfrage 4

Antwort4

Testfrage 5

Antwort5