Debian-Referenz Osamu Aoki Copyright © 2013-2024 Osamu Aoki Diese Debian-Referenz (version 2.122) (2024-04-10 23:08:27 UTC) wurde geschrieben, um für die Zeit nach der Installation einen     groben Überblick über das Debian-System in Form eines Benutzerhandbuchs zu bieten. Sie behandelt viele Aspekte der Systemadministration mittels Shell-Befehlsbeispielen für einfache Benutzer. Zusammenfassung Dieses Buch ist frei; Sie dürfen es unter den Bedingungen der GNU General Public License in jeder Version, die verträglich mit den Debian Richtlinien für Freie Software (DFSG) ist, weiterverteilen und /oder verändern. --------------------------------------------------------------------- Inhaltsverzeichnis Vorwort 1. Haftungsausschluss 2. Was ist Debian 3. Über dieses Dokument 3.1. Leitregeln 3.2. Voraussetzungen 3.3. Konventionen 3.4. Der Popularitäts-Wettbewerb (popcon) 3.5. Die Paketgröße 3.6. Fehlerbericht gegen dieses Dokument 4. Gedächtnisstützen für neue Benutzer 5. Einige Zitate für neue Benutzer 1. GNU/Linux-Lehrstunde 1.1. Grundlagen für die Konsole 1.1.1. Die Shell-Eingabeaufforderung (Shell-Prompt) 1.1.2. Die Shell-Eingabeaufforderung auf einem GUI-System 1.1.3. Das root-Benutzerkonto 1.1.4. Die root-shell-Eingabeaufforderung 1.1.5. Systemadministrations-Werkzeuge mit grafischer Oberfläche (GUI) 1.1.6. Virtuelle Konsolen 1.1.7. Wie Sie die Eingabeaufforderung wieder verlassen 1.1.8. Wie Sie das System herunterfahren 1.1.9. Eine Konsole wiederherstellen 1.1.10. Zusätzliche Paketempfehlungen für Neulinge 1.1.11. Ein zusätzliches Benutzerkonto 1.1.12. sudo-Konfiguration 1.1.13. Zeit zum Spielen 1.2. Unix-ähnliches Dateisystem 1.2.1. Unix-Dateigrundlagen 1.2.2. Dateisystem-Internas 1.2.3. Dateisystem-Berechtigungen 1.2.4. Steuerung der Berechtigungen für neu erzeugte Dateien: umask 1.2.5. Berechtigungen für Gruppen von Benutzern (group) 1.2.6. Zeitstempel 1.2.7. Links 1.2.8. Benannte Pipes (FIFOs) 1.2.9. Sockets 1.2.10. Gerätedateien 1.2.11. Spezielle Gerätedateien 1.2.12. procfs und sysfs 1.2.13. tmpfs 1.3. Midnight Commander (MC) 1.3.1. Anpassen des MC 1.3.2. Starten von MC 1.3.3. Dateimanager in MC 1.3.4. Befehlszeilentricks in MC 1.3.5. Der interne Texteditor in MC 1.3.6. Der interne Dateibetrachter in MC 1.3.7. Autostart-Funktionalitäten von MC 1.3.8. Virtuelles Dateisystem von MC 1.4. Die grundlegende Unix-ähnliche Arbeitsumgebung 1.4.1. Die Login-Shell 1.4.2. Anpassen der bash 1.4.3. Spezielle Tastendrücke 1.4.4. Mausoperationen 1.4.5. Der Pager 1.4.6. Der Texteditor 1.4.7. Einen Standard-Texteditor einstellen 1.4.8. Verwenden von vim 1.4.9. Aufzeichnen der Shell-Aktivitäten 1.4.10. Grundlegende Unix-Befehle 1.5. Der einfache Shell-Befehl 1.5.1. Befehlsausführung und Umgebungsvariablen 1.5.2. Die "$LANG"-Variable 1.5.3. Die "$PATH"-Variable 1.5.4. Die "$HOME"-Variable 1.5.5. Befehlszeilen-Optionen 1.5.6. Shell-Glob 1.5.7. Rückgabewert eines Befehls 1.5.8. Typische Befehlssequenzen und Shell-Weiterleitungen 1.5.9. Befehls-Alias 1.6. Unix-ähnliche Textverarbeitung 1.6.1. Unix-Textverarbeitungswerkzeuge 1.6.2. Reguläre Ausdrücke 1.6.3. Ersetzungsausdrücke 1.6.4. Globale Ersetzungen mit regulären Ausdrücken 1.6.5. Extrahieren von Daten aus einer Textdatei-Tabelle 1.6.6. Skript-Schnipsel für die Befehlsweiterleitung 2. Debian-Paketmanagement 2.1. Grundvoraussetzungen für das Debian-Paketmanagement 2.1.1. Debian package management system 2.1.2. Paketkonfiguration 2.1.3. Grundsätzliche Vorsichtsmaßnahmen 2.1.4. Leben mit den ewigen Aktualisierungen 2.1.5. Grundlagen über das Debian-Archiv 2.1.6. Debian ist zu 100% freie Software 2.1.7. Paketabhängigkeiten 2.1.8. Die Ereignisabfolge für das Paketmanagement 2.1.9. Erste Hilfe bei Paketmanagement-Problemen 2.1.10. Wie Sie Debian-Pakete auswählen 2.1.11. How to cope with conflicting requirements 2.2. Grundlegende Paketmanagement-Operationen 2.2.1. apt contra apt-get / apt-cache contra aptitude 2.2.2. Grundlegende Paketmanagement-Operationen auf der Befehlszeile 2.2.3. Interaktive Nutzung von aptitude 2.2.4. Tastaturkürzel von aptitude 2.2.5. Paketansichten in aptitude 2.2.6. Optionen für Suchmethoden mit aptitude 2.2.7. Aptitudes Regex-Formel 2.2.8. Abhängigkeitsauflösung bei aptitude 2.2.9. Protokollierung der Paketaktivitäten 2.3. Beispiele für aptitude-Operationen 2.3.1. Seeking interesting packages 2.3.2. Auflisten von Paketen mit Regex-Suche auf den Paketnamen 2.3.3. Durchsuchen mit der Regex-Suche 2.3.4. Entfernte Pakete endgültig löschen 2.3.5. Automatisch/manuell-Installationsstatus bereinigen 2.3.6. Systemweite Hochrüstung 2.4. Erweiterte Paketmanagement-Operationen 2.4.1. Erweiterte Paketmanagement-Operationen auf der Befehlszeile 2.4.2. Verifizierung von installierten Paketdateien 2.4.3. Absicherungen für den Fall von Paketproblemen 2.4.4. Durchsuchen der Paket-Metadaten 2.5. Internas des Debian-Paketmanagements 2.5.1. Archiv-Metadaten 2.5.2. "Release"-Datei im Wurzelverzeichnis und Authentizität 2.5.3. "Release"-Dateien im Archivverzeichnis 2.5.4. Empfangen der Metadaten für ein Paket 2.5.5. Der Paketstatus für APT 2.5.6. Der Paketstatus von aptitude 2.5.7. Lokale Kopien der empfangenen Pakete 2.5.8. Debian-Paketdateinamen 2.5.9. Der dpkg-Befehl 2.5.10. Der update-alternatives-Befehl 2.5.11. Der dpkg-statoverride-Befehl 2.5.12. Der dpkg-divert-Befehl 2.6. Wiederherstellung eines beschädigten Systems 2.6.1. Fehlgeschlagene Installation aufgrund von fehlenden Abhängigkeiten 2.6.2. Fehler beim Zwischenspeichern der Paketdaten 2.6.3. Inkompatibilität mit alter Benutzerkonfiguration 2.6.4. Mehrere Pakete mit überlappenden Dateien 2.6.5. Behebung von Problemen aufgrund von beschädigtem Paketskript 2.6.6. Systemrettung mit dem dpkg-Befehl 2.6.7. Paketauswahldaten wiederherstellen 2.7. Tipps für das Paketmanagement 2.7.1. Wer hat das Paket hochgeladen? 2.7.2. Die Download-Bandbreite für APT einschränken 2.7.3. Automatisches Herunterladen und Aktualisieren von Paketen 2.7.4. Aktualisierungen und Backports 2.7.5. External package archives 2.7.6. Packages from mixed source of archives without apt-pinning 2.7.7. Tweaking candidate version with apt-pinning 2.7.8. Über "Recommends" installierte Pakete blockieren 2.7.9. Nutzen von Testing mit einigen Paketen aus Unstable 2.7.10. Nutzen von Unstable mit einigen Paketen aus Experimental 2.7.11. Downgrade im Notfall 2.7.12. Das equivs-Paket 2.7.13. Ein Paket auf das Stable-System portieren 2.7.14. Proxy-Server für APT 2.7.15. Weitere Lektüre zum Paketmanagement 3. Die Systeminitialisierung 3.1. Ein Überblick über den Bootstrap-Prozess 3.1.1. Stufe 1: das UEFI 3.1.2. Stufe 2: der Bootloader 3.1.3. Stufe 3: das Mini-Debian-System 3.1.4. Stufe 4: das normale Debian-System 3.2. Systemd 3.2.1. Systemd-Init 3.2.2. Systemd login 3.3. Die Kernel-Meldungen 3.4. Die Systemmeldungen 3.5. Systemmanagement 3.6. Weitere Systemüberwachungs-Werkzeuge 3.7. System configuration 3.7.1. Der Rechnername 3.7.2. Das Dateisystem 3.7.3. Initialisierung der Netzwerkschnittstellen 3.7.4. Cloud system initialization 3.7.5. Customization example to tweak sshd service 3.8. Das udev-System 3.9. Die Kernel-Modul-Initialisierung 4. Authentifizierung und Zugriffskontrolle 4.1. Normale Unix-Authentifizierung 4.2. Verwalten von Konten- und Passwortinformationen 4.3. Ein gutes Passwort 4.4. Verschlüsselte Passwörter erstellen 4.5. PAM und NSS 4.5.1. Konfigurationsdateien, auf die PAM und NSS zugreifen 4.5.2. Modernes zentralisiertes Systemmanagement 4.5.3. "Warum unterstützt GNU su nicht die wheel-Gruppe" 4.5.4. Schärfere Passwortregeln 4.6. Sicherheit der Authentifizierung 4.6.1. Sicheres Passwort im Internet 4.6.2. Secure Shell (sichere Shell) 4.6.3. Zusätzliche Sicherheitsmaßnahmen für das Internet 4.6.4. Sichern des root-Passworts 4.7. Andere Möglichkeiten zur Zugriffskontrolle 4.7.1. Access control lists (ACLs) 4.7.2. sudo 4.7.3. PolicyKit 4.7.4. Den Zugriff auf einige Server-Dienste einschränken 4.7.5. Linux Sicherheits-Funktionalitäten 5. Netzwerkkonfiguration 5.1. Die elementare Netzwerkinfrastruktur 5.1.1. Die Auflösung des Rechnernamens 5.1.2. Der Netzwerkschnittstellenname 5.1.3. Der Netzwerkadressbereich für das LAN 5.1.4. Unterstützung für Netzwerkgeräte 5.2. Moderne Netzwerkkonfiguration für Arbeitsplatzsysteme 5.2.1. Grafische Netzwerkkonfigurations-Werkzeuge 5.3. Moderne Netzwerkkonfiguration ohne grafische Oberfläche 5.4. The modern network configuration for cloud 5.4.1. The modern network configuration for cloud with DHCP 5.4.2. The modern network configuration for cloud with static IP 5.4.3. The modern network configuration for cloud with Network Manger 5.5. Netzwerkkonfiguration auf unterster Ebene 5.5.1. iproute2-Befehle 5.5.2. Sichere Basis-Netzwerkoperationen 5.6. Netzwerkoptimierung 5.6.1. Die optimale MTU finden 5.6.2. WAN-TCP-Optimierung 5.7. Die Netfilter-Infrastruktur 6. Netzwerkapplikationen 6.1. Webbrowser 6.1.1. Fälschen der User-Agent-Angabe 6.1.2. Browser-Erweiterung 6.2. Das Mail-System 6.2.1. Grundlagen des E-Mail-Systems 6.2.2. Einschränkungen moderner E-Mail-Dienste 6.2.3. Historische Erwartungen an E-Mail-Dienste 6.2.4. Mail Transfer Agent (MTA) 6.3. Der Server für Fernzugriff (SSH) und Hilfsprogramme 6.3.1. Grundlagen von SSH 6.3.2. Benutzername auf dem fernen Rechner 6.3.3. Verbindungen ohne Passwörter für die ferne Seite 6.3.4. Der Umgang mit fremden SSH-Clients 6.3.5. Einrichten von ssh-agent 6.3.6. Eine Mail versenden auf einem fernen Rechner 6.3.7. Portweiterleitung für SMTP-/POP3-Tunnelung 6.3.8. Wie Sie das ferne System über SSH herunterfahren 6.3.9. Fehlersuche bei SSH 6.4. Der Print-Server und Hilfsprogramme 6.5. Weitere Netzwerkanwendungs-Server 6.6. Weitere Netzwerkanwendungs-Clients 6.7. Diagnose von System-Daemons 7. GUI-System 7.1. GUI-Arbeitsplatzumgebung 7.2. GUI-Kommunikationsprotokoll 7.3. GUI-Infrastruktur 7.4. GUI-Anwendungen 7.5. User directories 7.6. Schriften 7.6.1. Basis-Schriftarten 7.6.2. Schriftenrasterung 7.7. Sandbox 7.8. Arbeitsplatz-Fernzugriff (Remote Desktop) 7.9. X-Server-Verbindungen 7.9.1. Lokale Verbindung zum X-Server 7.9.2. Fernverbindung auf den X-Server 7.9.3. Chroot-Verbindung zum X-Server 7.10. Zwischenablage 8. I18N und L10N 8.1. Das Gebietsschema (Locale) 8.1.1. Argumentation für UTF-8-Gebietsschemata 8.1.2. Die Neukonfiguration des Gebietsschemas (Locale) 8.1.3. Dateinamenkodierung 8.1.4. Lokalisierte Meldungen und übersetzte Dokumentation 8.1.5. Auswirkungen des Gebietsschemas 8.2. Die Tastatureingabe 8.2.1. Tastatureingabe für die Linux-Konsole und X-Window 8.2.2. Tastatureingabe für Wayland 8.2.3. Unterstützung für die Eingabemethode mit IBus 8.2.4. Ein Beispiel für Japanisch 8.3. Die Bildschirmausgabe 8.4. Unbekannte Zeichenbreite bei ostasiatischen Zeichen 9. Systemtipps 9.1. Tipps für die Konsole 9.1.1. Shell-Aktivitäten sauber aufzeichnen 9.1.2. Das Programm screen 9.1.3. Durch Verzeichnisse navigieren 9.1.4. Readline-Wrapper 9.1.5. Durchsuchen eines Quellcode-Baums 9.2. Anpassen von vim 9.2.1. Anpassen von vim mit internen Funktionalitäten 9.2.2. Anpassen von vim mit externen Paketen 9.3. Datenaufzeichnung und -darstellung 9.3.1. Der log-Daemon 9.3.2. Analyseprogramme für Logdateien 9.3.3. Angepasste Anzeige von Textdaten 9.3.4. Angepasste Anzeige von Datum und Uhrzeit 9.3.5. Farbige Shell-Ausgabe 9.3.6. Farbige Befehle 9.3.7. Aufzeichnen von Editor-Aktivitäten für komplexe Wiederholungen 9.3.8. Die Bildschirmanzeige einer X-Anwendung aufzeichnen 9.3.9. Aufzeichnen von Änderungen in Konfigurationsdateien 9.4. Überwachen, Steuern und Starten von Programmaktivitäten 9.4.1. Zeitmessung für einen Prozess 9.4.2. Die Ablaufpriorität 9.4.3. Der Befehl ps 9.4.4. Der Befehl top 9.4.5. Dateien auflisten, die von einem Prozess geöffnet wurden 9.4.6. Programmaktivitäten verfolgen 9.4.7. Identifikation von Prozessen, die Dateien oder Sockets verwenden 9.4.8. Einen Befehl mit festem Intervall wiederholt ausführen 9.4.9. Einen Befehl wiederholt mit einer Schleife über verschiedene Dateien ausführen 9.4.10. Ein Programm aus der grafischen Oberfläche heraus starten 9.4.11. Anpassen des zu startenden Programms 9.4.12. Einen Prozess beenden (kill) 9.4.13. Einmalige Aufgaben planen 9.4.14. Regelmäßige Aufgaben planen 9.4.15. Scheduling tasks on event 9.4.16. Die Alt-SysRq-Tastenkombination 9.5. Tipps zur Systempflege 9.5.1. Wer ist/war im System aktiv? 9.5.2. Allen eine Warnung schicken 9.5.3. Hardware-Identifikation 9.5.4. Hardware-Konfiguration 9.5.5. System- und Hardware-Zeit 9.5.6. Die Terminal-Konfiguration 9.5.7. Die Audio-Infrastruktur 9.5.8. Deaktivieren des Bildschirmschoners 9.5.9. Ausschalten von Pieptönen 9.5.10. Arbeitsspeichernutzung 9.5.11. Systemsicherheits- und Integritätsüberprüfung 9.6. Tipps zur Speicherung von Daten 9.6.1. Verwendung des Plattenplatzes 9.6.2. Konfiguration der Festplattenpartitionen 9.6.3. Zugriff auf Partitionen über die UUID-Kennung 9.6.4. LVM2 9.6.5. Konfiguration von Dateisystemen 9.6.6. Dateisystemerzeugung und Integritätsüberprüfung 9.6.7. Optimierung von Dateisystemen über mount-Optionen 9.6.8. Optimierung von Dateisystemen über den Superblock 9.6.9. Optimierung der Festplatte 9.6.10. Optimierung von Solid State Disks 9.6.11. SMART verwenden, um Festplattenausfälle vorherzusehen 9.6.12. Angeben eines Verzeichnisses für temporäre Dateien über $TMPDIR 9.6.13. Vergrößerung des nutzbaren Speicherplatzes mittels LVM 9.6.14. Vergrößerung des nutzbaren Speicherplatzes über das Einbinden anderer Partitionen 9.6.15. Vergrößerung des nutzbaren Speicherplatzes, indem ein anderes Verzeichnis mit "mount --bind" eingebunden wird 9.6.16. Vergrößerung des nutzbaren Speicherplatzes, indem ein anderes Verzeichnis mit "Overlay-mounting" eingebunden wird 9.6.17. Vergrößerung des nutzbaren Speicherplatzes über einen symbolischen Link 9.7. Das Festplatten-Abbild 9.7.1. Erzeugung der Festplatten-Abbild-Datei 9.7.2. Direkt auf eine Festplatte schreiben 9.7.3. Einbinden der Festplatten-Abbild-Datei 9.7.4. Eine Festplatten-Abbild-Datei bereinigen 9.7.5. Eine leere Abbild-Datei erstellen 9.7.6. Erstellen einer ISO9660-Abbild-Datei 9.7.7. Direkt auf die CD/DVD-R/RW schreiben 9.7.8. Einbinden einer ISO9660-Abbild-Datei 9.8. Binärdaten 9.8.1. Betrachten und Bearbeiten von Binärdaten 9.8.2. Manipulieren von Dateien ohne Einbinden der Festplatte 9.8.3. Datenredundanz 9.8.4. Datenwiederherstellung und forensische Analyse 9.8.5. Aufsplitten einer großen in mehrere kleine Dateien 9.8.6. Leeren von Dateiinhalten 9.8.7. Dummy-Dateien 9.8.8. Eine vollständige Festplatte löschen 9.8.9. Einen ungenutzten Bereich einer Festplatte löschen 9.8.10. Wiederherstellen von gelöschten, aber noch geöffneten Dateien 9.8.11. Alle harten Links suchen 9.8.12. Unsichtbarer Verbrauch von Festplattenplatz 9.9. Tipps zur Datenverschlüsselung 9.9.1. Verschlüsselung von Wechseldatenträgern mit dm-crypt/ LUKS 9.9.2. Einbinden verschlüsselter Laufwerke mit dm-crypt/LUKS 9.10. Der Kernel 9.10.1. Kernel-Parameter 9.10.2. Kernel-Header 9.10.3. Kompilieren des Kernels und dazugehöriger Module 9.10.4. Kompilieren des Kernel-Quellcodes: Empfehlung des Debian-Kernel-Teams 9.10.5. Hardware-Treiber und Firmware 9.11. Virtualisierte Systeme 9.11.1. Virtualisierungs- und Emulationswerkzeuge 9.11.2. Arbeitsablauf bei Virtualisierung 9.11.3. Einbinden des virtuellen Festplatten-Images 9.11.4. Chroot-System 9.11.5. System mit mehreren Arbeitsplatzumgebungen 10. Datenmanagement 10.1. Austauschen, kopieren und archivieren von Dateien 10.1.1. Archivierungs- und Kompressionswerkzeuge 10.1.2. Kopier- und Synchronisationswerkzeuge 10.1.3. Aufrufe für Archivierungsoperationen 10.1.4. Aufrufe für Kopieroperationen 10.1.5. Aufrufe für die Auswahl von Dateien 10.1.6. Archivierungsmedien 10.1.7. Wechseldatenträger 10.1.8. Dateisystemauswahl für den Datenaustausch 10.1.9. Datenaustausch über das Netzwerk 10.2. Datensicherung und -wiederherstellung 10.2.1. Richtlinien für Datensicherung und -wiederherstellung 10.2.2. Programmsammlungen für Datensicherungsaufgaben 10.2.3. Backup tips 10.3. Datensicherheits-Infrastruktur 10.3.1. Schlüsselverwaltung für GnuPG 10.3.2. Verwendung von GnuPG mit Dateien 10.3.3. Verwendung von GnuPG mit Mutt 10.3.4. Verwendung von GnuPG mit Vim 10.3.5. Die MD5-Prüfsumme 10.3.6. Passwort-Schlüsselbund 10.4. Werkzeuge zur Quellcode-Zusammenführung (merge) 10.4.1. Unterschiede für Quelldateien extrahieren 10.4.2. Aktualisierungen für Quelldateien zusammenführen 10.4.3. Interaktives Zusammenführen (merge) 10.5. Git 10.5.1. Konfiguration eines Git-Clients 10.5.2. Grundlegende Git-Befehle 10.5.3. Git-Tipps 10.5.4. Weitere Referenzen zu Git 10.5.5. Andere Versionskontrollsysteme 11. Datenkonvertierung 11.1. Werkzeuge für Textkonvertierung 11.1.1. Konvertieren einer Textdatei mit iconv 11.1.2. Prüfen mit iconv, ob eine Datei UTF-8-kodiert ist 11.1.3. Dateinamen konvertieren mit iconv 11.1.4. EOL-Konvertierung 11.1.5. TAB-Konvertierung 11.1.6. Editoren mit automatischer Konvertierung 11.1.7. Extrahieren von reinem Text 11.1.8. Hervorheben und Formatieren von reinen Textdaten 11.2. XML-Daten 11.2.1. Grundlegende Hinweise für XML 11.2.2. XML-Verarbeitung 11.2.3. Extrahierung von XML-Daten 11.2.4. XML Lint 11.3. Textsatz 11.3.1. roff-Textsatz 11.3.2. TeX/LaTeX 11.3.3. Schöner Ausdruck einer Handbuchseite 11.3.4. Erstellen einer Handbuchseite 11.4. Druckfähige Daten 11.4.1. Ghostscript 11.4.2. Zwei PS- oder PDF-Dateien zusammenführen 11.4.3. Werkzeuge für druckfähige Daten 11.4.4. Drucken mit CUPS 11.5. Konvertierung von Mail-Daten 11.5.1. Grundlagen zu Mail-Daten 11.6. Werkzeuge für Grafikdaten 11.6.1. Graphic data tools (metapackage) 11.6.2. Graphic data tools (GUI) 11.6.3. Graphic data tools (CLI) 11.7. Verschiedene Datenkonvertierungen 12. Programmierung 12.1. Das Shell-Skript 12.1.1. POSIX-Shell-Kompatibilität 12.1.2. Shell-Parameter 12.1.3. Bedingte Ausdrücke in der Shell 12.1.4. Shell-Schleifen 12.1.5. Shell-Umgebungsvariablen 12.1.6. Befehlsabfolge auf der Shell 12.1.7. Hilfsprogramme für Shell-Skripte 12.2. Skriptverarbeitung in Interpreter-Sprachen 12.2.1. Fehlersuche im Code für Interpreter-Sprachen 12.2.2. Grafisches GUI-Programm und Shell-Skripte 12.2.3. Eigene Aktionen im Dateimanager 12.2.4. Verrücktes bei kurzen Perl-Skripten 12.3. Programmieren in kompilierten Sprachen 12.3.1. C 12.3.2. Ein einfaches C-Programm (gcc) 12.3.3. Flex - ein besseres Lex 12.3.4. Bison - ein besseres Yacc 12.4. Werkzeuge zur statischen Code-Analyse 12.5. Fehlersuche (Debugging) 12.5.1. Grundlegende Ausführung von gdb 12.5.2. Fehlersuche (Debugging) in einem Debian-Paket 12.5.3. Gewinnen von Backtrace-Informationen 12.5.4. Erweiterte gdb-Befehle 12.5.5. Überprüfen der Abhängigkeiten von Bibliotheken 12.5.6. Werkzeuge zur dynamischen Aufrufverfolgung 12.5.7. Fehleranalyse bei X-Fehlern 12.5.8. Werkzeuge zur Erkennung von Speicherlecks 12.5.9. Disassemblieren von Binärdateien 12.6. Bauwerkzeuge 12.6.1. Make 12.6.2. Autotools 12.6.3. Meson 12.7. Web 12.8. Die Quellcode-Übersetzung 12.9. Erstellen von Debian-Paketen A. Anhang A.1. Das Debian-Labyrinth A.2. Copyright-Vergangenheit A.3. Dokumentenformat Tabellenverzeichnis 1.1. Liste interessanter Textmodus-Programm-Pakete 1.2. Liste informativer Dokumentationspakete 1.3. Auflistung der Verwendung wichtiger Verzeichnisse 1.4. Bedeutungen des ersten Zeichens der "ls -l"-Ausgabe 1.5. Der numerische Modus für Dateiberechtigungen in chmod(1) -Befehlen 1.6. Beispiele für umask-Werte 1.7. Liste erwähnenswerter systemweiter Gruppen 1.8. Liste erwähnenswerter, vom System angebotenen Gruppen zur Ausführung besonderer Befehle 1.9. Liste der Arten von Zeitstempeln 1.10. Liste spezieller Gerätedateien 1.11. Die Tastaturbefehle von MC 1.12. Die Reaktion auf die Enter-Taste in MC 1.13. Liste von Shell-Programmen 1.14. Liste der Tastaturbefehle für bash 1.15. Liste von Mausoperationen und zugehörigen Tastenaktionen auf Debian-Systemen 1.16. Liste grundlegender Vim-Tastenkürzel 1.17. Liste grundlegender Unix-Befehle 1.18. Die drei Teile des locale-Wertes 1.19. Liste mit Empfehlungen zum Gebietsschema 1.20. Liste der Werte von "$HOME" 1.21. Shell-Glob-Suchmuster 1.22. Befehls-Beendigungs-Codes 1.23. Abfolgen von Shell-Befehlen 1.24. Vordefinierte Datei-Deskriptoren 1.25. Metazeichen für BRE und ERE 1.26. Der Ersetzungsausdruck 1.27. Liste von Skript-Schnipseln für die Befehlsweiterleitung 2.1. Liste von Debians Paketmanagement-Werkzeugen 2.2. Liste von Debian-Archiv-Seiten 2.3. Liste der Debian-Archiv-Bereiche 2.4. Zusammenhanag zwischen Suite und Codename 2.5. Liste wichtiger Websites zur Lösung von Paketproblemen 2.6. Grundlegende Paketmanagement-Operationen mit apt(8), aptitude(8) und apt-get(8) / apt-cache(8) 2.7. Erwähnenswerte Befehlsoptionen für aptitude(8) 2.8. Liste der Tastaturkürzel für aptitude 2.9. Liste der Ansichten für aptitude 2.10. Die Kategorisierung von Standard-Paketansichten 2.11. Liste von aptitudes Regex-Formeln 2.12. Protokolldateien für Paketaktivitäten 2.13. Liste erweiterter Paketmanagement-Operationen 2.14. Inhalt der Metadaten des Debian-Archivs 2.15. Namensstruktur von Debian-Paketen 2.16. In den einzelnen Komponenten von Debian-Paketnamen zu verwendende Zeichen 2.17. Erwähnenswerte Dateien, die durch dpkg erzeugt werden 2.18. Liste erwähnenswerter Pin-Prioritäts-Werte für apt-pinning 2.19. Liste von Proxy-Hilfsprogrammen speziell für das Debian-Archiv 3.1. Liste der Bootloader 3.2. Bedeutung der Bestandteile eines Menüeintrags in /boot/grub/ grub.cfg 3.3. Liste von Boot-Hilfsprogrammen für das Debian-System 3.4. Liste der Schwellwerte zur Filterung von Kernel-Fehler-Meldungen 3.5. Liste typischer journalctl-Befehle 3.6. Liste typischer systemctl-Befehle 3.7. Liste weiterer Überwachungsbefehle unter systemd 4.1. Wichtige Konfigurationsdateien für pam_unix(8) 4.2. Inhalt des zweiten Eintrags in "/etc/passwd" 4.3. Liste von Befehlen zur Verwaltung von Konteninformationen 4.4. Liste der Werkzeuge zur Passworterzeugung 4.5. Liste von PAM- und NSS-Systemen 4.6. Liste von Konfigurationsdateien, auf die PAM und NSS zugreifen 4.7. Liste von unsicheren und sicheren Diensten und Ports 4.8. Liste von Werkzeugen, die zusätzliche Sicherheitsmaßnahmen ermöglichen 5.1. Liste von Werkzeugen zur Netzwerkkonfiguration 5.2. Liste der Netzwerkadressbereiche 5.3. Gegenüberstellung von net-tools- und iproute2-Befehlen 5.4. Liste von Basis-Netzwerkbefehlen 5.5. Liste von Werkzeugen zur Netzwerkoptimierung 5.6. Wesentliche Grundregeln für den optimalen MTU-Wert 5.7. Liste von Firewall-Werkzeugen 6.1. Liste der Webbrowser 6.2. Liste der Mail User Agents (MUA) 6.3. Liste von Paketen für grundlegende Mail Transfer Agents 6.4. Liste von wichtigen Postfix-Handbuchseiten 6.5. Liste von Konfigurationsdateien für Mail-Adressen 6.6. Liste grundlegender MTA-Operationen 6.7. Liste von Servern für Fernzugriff und Hilfsprogrammen 6.8. Liste von SSH-Konfigurationsdateien 6.9. Liste von Beispielen zum Start einer SSH-Verbindung auf einem Client 6.10. Liste freier SSH-Clients für andere Plattformen 6.11. Liste von Print-Servern und Hilfsprogrammen 6.12. Liste von weiteren Netzwerkanwendungs-Servern 6.13. Liste von Netzwerkanwendungs-Clients 6.14. Liste populärer RFCs 7.1. Liste der Arbeitsplatzumgebungen 7.2. Liste erwähnenswerter GUI-Infrastruktur-Pakete 7.3. Liste erwähnenswerter GUI-Anwendungen 7.4. Liste erwähnenswerter TrueType- und OpenType-Schriftarten 7.5. Liste erwähnenswerter Pakete für Schriftumgebungen 7.6. Liste erwähnenswerter Pakete für Sandbox-Umgebungen 7.7. Liste erwähnenswerter Server für Fernzugriff 7.8. Liste der Verbindungsmethoden zum X-Server 7.9. Liste von Programmen zum Beeinflussen der Zwischenablage 8.1. Liste von IBus-betreffenden Paketen 9.1. Liste von Programmen für Konsolenaktivitäten 9.2. Liste von Tastaturkürzeln für screen 9.3. Informationen zur Initialisierung von vim 9.4. Liste von System-Log-Analyzern 9.5. Anzeigebeispiele von Datum und Uhrzeit für den Befehl "ls -l" mit time style value-Einstellung 9.6. Liste von Werkzeugen zur Bildbearbeitung 9.7. Liste von Paketen zur Aufzeichnung der Konfigurations-Historie 9.8. Liste von Werkzeugen zur Überwachung und Steuerung von Programmaktivitäten 9.9. Liste der nice-Werte für die Ablaufpriorität 9.10. Liste von ps-Befehlen 9.11. Liste von häufig verwendeten Signalen für den kill-Befehl 9.12. Liste erwähnenswerter SAK-Befehlstasten 9.13. Liste von Werkzeugen zur Hardware-Identifikation 9.14. Liste von Werkzeugen zur Hardware-Konfiguration 9.15. Liste von Audio-Paketen 9.16. Liste von Befehlen zur Deaktivierung des Bildschirmschoners 9.17. Liste der gemeldeten Arbeitsspeichergrößen 9.18. Liste von Werkzeugen für eine Systemsicherheits- und Integritätsüberprüfung 9.19. Liste von Paketen für die Partitionierung 9.20. Liste von Paketen für das Dateisystem-Management 9.21. Liste von Paketen zum Betrachten und Bearbeiten von Binärdaten 9.22. Liste von Paketen zur Manipulation von Dateien ohne Einbinden der Festplatte 9.23. Liste von Werkzeugen, um Redundanz für Dateien hinzuzufügen 9.24. Liste von Paketen für Datenwiederherstellung und forensische Analysen 9.25. Liste von Werkzeugen zur Datenverschlüsselung 9.26. Liste von Schlüsselpaketen für die Neukompilierung des Kernels auf einem Debian-System 9.27. Liste von Virtualisierungswerkzeugen 10.1. Liste von Archivierungs- und Kompressionswerkzeugen 10.2. Liste von Kopier- und Synchronisationswerkzeugen 10.3. Liste von Dateisystemen für Wechseldatenträger mit typischen Anwendungsszenarien 10.4. Liste von Netzwerkdiensten mit typischen Anwendungsszenarien 10.5. Liste von Datensicherungsprogrammen 10.6. Liste von Werkzeugen für die Datensicherheits-Infrastruktur 10.7. Liste von GNU-Privacy-Guard-Befehlen für die Schlüsselverwaltung 10.8. Liste der Bedeutungen des Vertrauenscodes 10.9. Liste von GNU-Privacy-Guard-Befehlen mit Dateien 10.10. Liste von Werkzeugen zur Quellcode-Zusammenführung 10.11. Liste von zu Git gehörigen Paketen und Befehlen 10.12. Wichtige Git-Befehle 10.13. Git-Tipps 10.14. Liste anderer Versionskontrollsystem-Werkzeuge 11.1. Liste von Textkonvertierungs-Werkzeugen 11.2. Liste von Werten für die Zeichenkodierung und deren Verwendung 11.3. Liste der EOL-Codes für verschiedene Plattformen 11.4. Liste der Befehle zur TAB-Konvertierung aus den Paketen bsdmainutils und coreutils 11.5. Liste von Werkzeugen zum Extrahieren von reinen Textdaten 11.6. Liste von Werkzeugen für Hervorhebung/Formatierung von Textdaten 11.7. Liste von vordefinierten Entitäten für XML 11.8. Liste von XML-Werkzeugen 11.9. Liste von DSSSL-Werkzeugen 11.10. Liste von Werkzeugen zur Extrahierung von XML-Daten 11.11. Liste von XML-Druck-Werkzeugen 11.12. Liste von Textsatz-Werkzeugen 11.13. Liste von Paketen, die bei der Erstellung einer Handbuchseite helfen 11.14. Liste von Ghostscript-PostScript-Interpretern 11.15. Liste von Werkzeugen für druckfähige Daten 11.16. Liste von Paketen zur Konvertierung von Mail-Daten 11.17. List of graphics data tools (metapackage) 11.18. List of graphics data tools (GUI) 11.19. List of graphics data tools (CLI) 11.20. Liste verschiedener Werkzeuge zur Datenkonvertierung 12.1. Liste typischer Bashisms 12.2. Liste von Shell-Parametern 12.3. Liste von Parameterauswertungen 12.4. Liste von Shell-Parameterersetzungen 12.5. Liste von Dateivergleichsoperatoren in bedingten Ausdrücken 12.6. Liste von String-Vergleichsoperatoren im bedingten Ausdruck 12.7. Liste der Pakete, die kleine Hilfsprogramme für Shell-Skripte enthalten 12.8. Liste von Interpreter-betreffenden Paketen 12.9. Liste von Dialog-Programmen 12.10. Liste von Compiler-betreffenden Paketen 12.11. Liste Yacc-kompatibler LALR-Parser-Generatoren 12.12. Liste von Werkzeugen für die statische Code-Analyse 12.13. Liste von Debugging-Paketen 12.14. Liste erweiterter gdb-Befehle 12.15. Liste von Werkzeugen zur Erkennung von Speicherlecks 12.16. Liste von Paketen mit Bauwerkzeugen 12.17. Liste von automatischen make-Variablen 12.18. Liste von make-Variablenexpandierungen 12.19. Liste von Programmen zur Übersetzung von Quellcode Vorwort Inhaltsverzeichnis 1. Haftungsausschluss 2. Was ist Debian 3. Über dieses Dokument 3.1. Leitregeln 3.2. Voraussetzungen 3.3. Konventionen 3.4. Der Popularitäts-Wettbewerb (popcon) 3.5. Die Paketgröße 3.6. Fehlerbericht gegen dieses Dokument 4. Gedächtnisstützen für neue Benutzer 5. Einige Zitate für neue Benutzer Diese Debian-Referenz (Version 2.122) (2024-04-10 23:08:27 UTC) soll für die Zeit nach der Installation einen groben Überblick über das Debian-System in Form eines Benutzerhandbuchs bieten. Es spricht diejenigen Leser an, die bereit sind, Shell-Skripte zu lernen, aber nicht bereit sind, alle C-Quellen zu lesen, um herauszufinden, wie das GNU/Linux-System genau funktioniert. Anweisungen zur Installation eines Debian-Systems finden Sie unter: * Debian GNU/Linux Installationsanleitung für das aktuelle Stable-System * Debian GNU/Linux Installationsanleitung für das Testing-System 1. Haftungsausschluss     Jegliche Gewährleistung wird ausgeschlossen. Alle Handelsmarken sind Eigentum ihrer jeweiligen Markeninhaber. Das Debian-System selbst ist ein bewegliches Ziel. Das macht es schwer, diese Dokumentation aktuell und korrekt zu halten.     Obgleich die aktuelle Testing-Version des Debian-Systems beim Schreiben dieser Referenz als Basis genutzt wurde, mag einiges vom Inhalt bereits veraltet sein, wenn Sie dies lesen. Bitte behandeln Sie dieses Dokument als zweitrangige Referenz. Dieses Dokument ersetzt nicht die maßgeblichen Handbücher. Autor     und Helfer/Übersetzer übernehmen keine Verantwortung für die Folgen von Fehlern, Auslassungen oder Zweideutigkeiten in diesem Dokument. 2. Was ist Debian Das Debian-Projekt ist eine Vereinigung von Einzelpersonen, die     es sich zur gemeinsamen Aufgabe gemacht haben, ein freies Betriebssystem zu erstellen. Seine Distribution zeichnet sich durch folgende Aspekte aus: * Verpflichtung zur Freiheit von Software: Debian-Gesellschaftsvertrag und Debian-Richtlinien für Freie Software (DFSG); * internet-basierte, verteilte, unbezahlte und freiwillige Leistung: https://www.debian.org; * eine große Anzahl vorkompilierter, hochqualitativer     Software-Pakete; * Fokus auf Stabilität und Sicherheit mit einfachem Zugang zu Sicherheitsaktualisierungen; * Fokus auf leichte Aktualisierung auf die neuesten Software-Pakete über das testing-Archiv; * eine große Zahl unterstützter Hardware-Architekturen. Freie Software in Debian stammt von GNU, Linux, BSD, X, ISC, Apache, Ghostscript, Common Unix Printing System , Samba, GNOME, KDE, Mozilla, LibreOffice, Vim, TeX, LaTeX, DocBook, Perl,     Python, Tcl, Java, Ruby, PHP, Berkeley DB, MariaDB, PostgreSQL, SQLite, Exim, Postfix, Mutt, FreeBSD, OpenBSD, Plan 9 und vielen weiteren unabhängigen Freie-Software-Projekten. Debian integriert diese Vielzahl freier Software in ein Ökosystem. 3. Über dieses Dokument 3.1. Leitregeln     Folgende Leitregeln wurden beim Erstellen dieses Dokuments verfolgt: * liefere einen Überblick und überspringe Sonderfälle (das Gesamtbild); * halte es kurz und einfach (Keep It Short and Simple, KISS);     * erfinde das Rad nicht neu (benutze Verweise auf bestehende Referenzen); * Fokus auf nicht-grafische Werkzeuge und Konsolen (benutze Shell-Beispiele); * Sei objektiv (benutze popcon usw.). Tipp     Ich habe versucht, hierarchische Aspekte und die unteren Ebenen des Systems zu erläutern. 3.2. Voraussetzungen Warnung     Sie können davon ausgehen, auch außerhalb dieser Dokumentation leicht selbst Antworten zu finden. Dieses Dokument liefert Ihnen lediglich effiziente Ausgangssituationen.     Verwenden Sie folgende primäre Informationsquellen, um selbst nach Lösungen suchen: * die Debian-Website unter https://www.debian.org für grundsätzliche Informationen; * die Dokumentation im Verzeichnis "/usr/share/doc/paketname"; * die Handbuchseiten (manpages) im Unix-Stil: "dpkg -L paketname |grep '/man/man.*/'"; * die Infoseiten im GNU-Stil: "dpkg -L paketname |grep '/info/ '"; * The bug report: https://bugs.debian.org/package_name     * das Debian Wiki unter https://wiki.debian.org/ für sich schnell ändernde und spezielle Themen; * The Single UNIX Specification from the Open Group's The UNIX System Home Page * die freie Enzyklopädie von Wikipedia unter https:// www.wikipedia.org/. * Das Debian Administrationshandbuch * The HOWTOs from The Linux Documentation Project (TLDP) Anmerkung     Für detaillierte Dokumentation zu einem speziellen Programm/Paket müssen Sie möglicherweise das entsprechende Dokumentationspaket mit "-doc" als Anhang hinter dem Namen installieren. 3.3. Konventionen     Dieses Dokument bietet Informationen im folgenden vereinfachten Präsentationsstil mit bash(1) Shell-Befehl-Beispielen:     # command-in-root-account $ command-in-user-account Diese Shell-Prompts unterscheiden sich abhängig vom verwendeten Benutzer und sind deckungsgleich mit dem Setzen von     Umgebungsvariablen wie "PS1='\$'" und "PS2=' '". Diese Werte wurden zwecks Lesbarkeit in diesem Dokument ausgewählt und sind nicht zwingend typisch für ein aktuell installiertes System. Alle Befehlsbeispiele in dieser Referenz wurden mit der englischen Gebietsschema-Einstellung "LANG=en_US.UTF8"     ausgeführt. Bitte erwarten Sie nicht, dass Platzhalter wie command-in-root-account und command-in-user-account in den Befehlsbeispielen übersetzt sind. Sie sind bewusst unübersetzt, um alle Beispiele aktuell halten zu können. Anmerkung     Lesen Sie dazu die Bedeutung der Umgebungsvariablen "$PS1" und "$PS2" in bash(1). Eine vom Systemadministrator geforderte Aktion ist in der     Imperativ-Form (Befehlsform) geschrieben, z.B. "Enter-Taste drücken nach jedem Eingeben eines Befehls in der Shell". Spalten wie Beschreibung und ähnliche in einer Tabelle können eine Nominalphrase im Sinne der Richtlinien für die Paket-Kurzbeschreibungen enthalten, wobei führende Artikel wie "ein" oder "der" weggelassen werden. Sie können alternativ auch eine Infinitivphrase als Nominalphrase ohne das "zu" am Anfang     enthalten, folgend den Richtlinien für Befehls-Kurzbeschreibungen in Handbuchseiten. Dies mag einigen Leuten lustig erscheinen, ist aber meine beabsichtigte Stilwahl, um diese Dokumentation so einfach wie möglich zu halten. Diese Nominalphrasen beginnen nicht mit einem Großbuchstaben und enden nicht mit einem Punkt, gemäß den Richtlinien für Kurzbeschreibungen. Anmerkung     Korrekte Nomen inklusive Befehlsnamen bleiben von der Groß-/ Kleinschreibung her immer gleich, unabhängig von Ihrer Position im Satz. Ein Befehlsschnipsel, der in einem Textabschnitt zitiert wird,     ist in Schreibmaschinen-Schriftart zwischen doppelten Anführungszeichen dargestellt, z.B. "aptitude safe-upgrade". Ein Ausschnitt von Daten aus einer Konfigurationsdatei, der in     einem Textabschnitt zitiert wird, ist in Schreibmaschinen-Schriftart zwischen doppelten Anführungszeichen dargestellt, z.B. "deb-src". Ein Befehl wird mit seinem Namen in Schreibmaschinen-Schriftart     und optional gefolgt von der Nummer seines Handbuchseiten-Abschnitts in Klammern dargestellt, z.B. bash(1). Geben Sie Folgendes ein, um weitere Informationen zu erhalten:     $ man 1 bash Eine Handbuchseite (manpage) wird mit ihrem Namen in Schreibmaschinen-Schriftart gefolgt von der Nummer ihres     Handbuchseiten-Abschnitts in Klammern dargestellt, z.B. sources.list(5). Geben Sie Folgendes ein, um weitere Informationen zu erhalten:     $ man 5 sources.list Eine Infoseite wird mit dem Befehlsschnipsel in     Schreibmaschinen-Schriftart zwischen doppelten Anführungszeichen dargestellt, z.B. "info make". Geben Sie Folgendes ein, um weitere Informationen zu erhalten:     $ info make Ein Dateiname wird in Schreibmaschinen-Schriftart zwischen     doppelten Anführungszeichen dargestellt, z.B. "/etc/passwd". Geben Sie Folgendes ein, um z.B. den Inhalt von Konfigurationsdateien anzuzeigen:     $ sensible-pager "/etc/passwd" Ein Verzeichnisname wird in Schreibmaschinen-Schriftart zwischen     doppelten Anführungszeichen dargestellt, z.B. "/etc/apt/". Geben Sie Folgendes ein, um den Verzeichnisinhalt anzuzeigen:     $ mc "/etc/apt/" Ein Paketname wird mit seinem Namen in     Schreibmaschinen-Schriftart dargestellt, z.B. vim. Geben Sie Folgendes ein, um weitere Informationen zu dem Paket zu erhalten: $ dpkg -L vim     $ apt-cache show vim $ aptitude show vim Bei Dokumentation wird der Ablageort entweder über den Dateinamen in Schreibmaschinen-Schriftart zwischen doppelten Anführungszeichen angezeigt, z.B. "/usr/share/doc/base-passwd/     users-and-groups.txt.gz" und "/usr/share/doc/base-passwd/ users-and-groups.html"; oder über seine URL, z.B. https:// www.debian.org. Geben Sie Folgendes ein, um die Dokumentation zu lesen: $ zcat "/usr/share/doc/base-passwd/users-and-groups.txt.gz" | sensible-pager     $ sensible-browser "/usr/share/doc/base-passwd/users-and-groups.html" $ sensible-browser "https://www.debian.org" Eine Umgebungsvariable wird mit ihrem Namen und einem führenden     "$" in Schreibmaschinen-Schriftart zwischen doppelten Anführungszeichen dargestellt, z.B. "$VAR". Geben Sie Folgendes ein, um ihren derzeitigen Wert zu erhalten:     $ echo "$TERM" 3.4. Der Popularitäts-Wettbewerb (popcon) Die Daten des Debian Popularitäts-Wettbewerbs (Debian Popularity Contest / popcon) stellen ein objektives Messinstrument für die     Beliebtheit eines jeden Pakets dar. Sie wurden am 2024-03-03 11:51:37 UTC heruntergeladen und enthalten die gesamte Menge von 237734 Meldungen über 198687 Binärpakete und 27 Architekturen. Anmerkung     Bitte beachten Sie, dass das amd64-Archiv in unstable derzeit nur 74165 Pakete enthält. Die popcon-Daten enthalten auch Berichte von vielen alten Systeminstallationen. Die popcon-Zahl mit einem vorangestellten "V:" für "votes" wird     berechnet über "1000 * (Anzahl der popcon-Berichte, dass das Paket auf dem PC kürzlich ausgeführt wurde) / (Gesamtanzahl der popcon-Berichte)". Die popcon-Zahl mit einem vorangestellten "I:" für "installs"     wird berechnet über "1000 * (Anzahl der popcon-Berichte, dass das Paket auf dem PC installiert ist) / (Gesamtanzahl der popcon-Berichte)". Anmerkung Die popcon-Daten sollten nicht als absolutes Maß für die Wichtigkeit des Pakets angesehen werden. Es gibt viele Faktoren,     die die Statistik beeinflußen können. Zum Beispiel könnten einige Systeme, die an dem Popularitäts-Wettbewerb teilnehmen, eingebundene Verzeichnisse wie "/usr/bin" mit der Option "noatime" haben, um die System-Performance zu verbessern, und so wäre "votes" für solche Systeme letztlich deaktiviert. 3.5. Die Paketgröße Die Paketgrößen-Daten werden auch als objektives Maß für jedes Paket angeboten. Sie basieren auf der Angabe "Installed-Size:",     die vom Befehl "apt-cache show" oder "aptitude show" angezeigt werden (derzeit von der amd64-Architektur für die Unstable-Veröffentlichung). Die Größe wird in KiB (Kibibyte = Einheit für 1024 Byte) angegeben. Anmerkung Ein Paket mit einer sehr kleinen numerischen Paketgröße kann     darauf hindeuten, dass das Paket in der Unstable-Veröffentlichung ein Dummy-Paket ist, das andere Pakete mit signifikantem Inhalt über die Abhängigkeiten installiert. Dummy-Pakete ermöglichen sanfte Versionsübergänge oder das Aufsplitten von Paketen in mehrere kleinere Einzelpakete. Anmerkung     Eine Paketgröße gefolgt von "(*)" zeigt an, dass das Paket in der Unstable-Veröffentlichung fehlt und stattdessen die Paketgröße aus der Experimental-Veröffentlichung angezeigt wird. 3.6. Fehlerbericht gegen dieses Dokument Falls Sie irgendwelche Fehler in diesem Dokument finden, melden Sie diese gegen das Paket debian-reference; Sie können dazu     reportbug(1) verwenden. Fügen Sie bitte Korrekturvorschläge für den Fehler bei, als "diff -u" gegen den reinen Text oder die Quellen. 4. Gedächtnisstützen für neue Benutzer     Hier einige Gedächtnisstützen für neue Benutzer: * Sichern Sie Ihre Daten + Lesen Sie dazu Abschnitt 10.2, „Datensicherung und -wiederherstellung“. * Halten Sie Passwörter und Schlüssel verschlossen * KISS - halte es kurz und einfach (keep it simple stupid) + Machen Sie Ihr System nicht unnötig kompliziert * Lesen Sie die Protokolldateien Ihres System + Der ERSTE Fehler ist der, der zählt     * RTFM - lesen Sie das tolle Handbuch (read the fine manual) * Suchen Sie im Internet, bevor Sie Fragen stellen * Arbeiten Sie nicht als root, wenn es nicht erforderlich ist * Spielen Sie nicht mit dem Paketmanagementsystem herum * Geben Sie keine Befehle ein, die Sie nicht verstehen * Ändern Sie keine Dateizugriffsrechte * Verlassen Sie die root-Shell nicht, bevor Sie Ihre Änderungen GETESTET haben * Halten Sie stets ein alternatives Boot-Medium bereit (USB-Stick, CD-ROM, ...) 5. Einige Zitate für neue Benutzer     Hier einige interessante Zitate von den Debian-Mailinglisten, die helfen können, neue Benutzer aufzuklären. * "Dies ist Unix. Es gibt Ihnen genug Seil, damit Sie sich selbst erhängen können." --- Miquel van Smoorenburg     * "Unix IST benutzerfreundlich… Es ist nur sehr wählerisch mit der Entscheidung, wer seine Freunde sind." --- Tollef Fog Heen     Auf Wikipedia gibt es den Artikel "Unix-Philosophie", der interessante Zitate enthält. Kapitel 1. GNU/Linux-Lehrstunde Ich denke, ein Computersystem zu erlernen ist wie das Erlernen einer Fremdsprache. Obwohl Anleitungen und Dokumentation     hilfreich sind, müssen Sie es selbst einüben. Um Ihnen einen sanften Start zu verschaffen, werde ich hier einige grundsätzliche Dinge ausführen. Das kraftvolle Design von Debian GNU/Linux stammt von dem Unix-Betriebssystem, was einem Multiuser- und     Multitasking-Betriebssystem ist. Sie müssen lernen, die Vorteile aus der Kraft dieser Funktionalitäten und den Ähnlichkeiten zwischen Unix und GNU/Linux zu ziehen. Scheuen Sie sich nicht, Unix-orientierte Texte zu lesen und     stützen Sie sich nicht ausschließlich auf GNU/Linux-orientierte Texte, da Sie dann viele nützliche Informationen verpassen würden. Anmerkung     Falls Sie bereits für eine Weile irgendein Unix-ähnliches System mit Befehlszeilenwerkzeugen genutzt haben, wissen Sie möglicherweise bereits alles, was ich hier beschreibe. Bitte nutzen Sie dies zum Realitäts-Check und zur Auffrischung. 1.1. Grundlagen für die Konsole 1.1.1. Die Shell-Eingabeaufforderung (Shell-Prompt) Nach dem Starten des Systems sehen Sie einen textbasierten Anmeldebildschirm, wenn Sie keine grafische Oberfläche (GUI) wie     GNOME oder KDE installiert haben. Wenn wir davon ausgehen, dass Ihr Rechnername foo lautet, dann sieht Ihr Anmeldebildschirm wie folgt aus: Haben Sie eine GUI-Oberfläche installiert, können Sie trotzdem einen solchen textbasierten Anmeldebildschirm bekommen, indem Sie     Strg-Alt-F3 drücken; mit Strg-Alt-F2 kehren Sie wieder zur GUI-Umgebung zurück (mehr dazu unter Abschnitt 1.1.6, „Virtuelle Konsolen“).     foo login: In dem Anmeldebildschirm geben Sie Ihren Benutzernamen ein, z.B.     penguin und drücken die Enter-Taste, dann Ihr Passwort und nochmals Enter. Anmerkung Gemäß der Unix-Tradition muss bei Benutzername und Passwort auf     Groß- und Kleinschreibung geachtet werden. Im Benutzernamen werden für gewöhnlich nur Kleinbuchstaben verwendet. Das erste Benutzerkonto wird normalerweise während der Installation angelegt. Weitere Benutzerkonten können durch root mit dem Befehl adduser(8) erstellt werden. Das System startet mit einer Grußnachricht, die in "/etc/motd"     (Message Of The Day, Meldung des Tages) gespeichert ist, und zeigt einen Befehls-Prompt an. Debian GNU/Linux 12 foo tty3 foo login: penguin Password: Linux foo 6.5.0-0.deb12.4-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.5.10-1~bpo12+1 (2023-11-23) x86_64     The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Wed Dec 20 09:39:00 JST 2023 on tty3 foo:~$     Jetzt sind Sie in der Shell. Die Shell interpretiert die Befehle, die Sie eingeben. 1.1.2. Die Shell-Eingabeaufforderung auf einem GUI-System Falls Sie während der Installation eine grafische GUI-Oberfläche installiert haben, bekommen Sie nach dem Systemstart einen grafischen Anmeldebildschirm. Geben Sie zur Anmeldung     Benutzername und Passwort des unprivilegierten Benutzerkontos ein. Verwenden Sie dabei die TAB-Taste, um zwischen Benutzername und Passwort zu wechseln, oder benutzen Sie dazu die primäre Maustaste. In der GUI-Oberfläche bekommen Sie eine Shell-Eingabeaufforderung, indem Sie einen X-Terminal-Emulator     wie gnome-terminal(1), rxvt(1) oder xterm(1) starten. In der GNOME-Arbeitsplatzumgebung erreichen Sie dies, indem Sie die SUPER-Taste (Windows-Taste) drücken und "terminal" in das Suchfeld eingeben. Bei einigen anderen Arbeitsplatzumgebungen (wie fluxbox) gibt es     möglicherweise keine offensichtliche Möglichkeit, ein Menü zu öffnen. Versuchen Sie in diesem Fall einfach einen Rechtsklick auf den Desktop-Hintergrund und hoffen, dass ein Menü erscheint. 1.1.3. Das root-Benutzerkonto Das root-Benutzerkonto wird auch Superuser oder privilegierter     Benutzer genannt. Mit diesem Benutzerkonto können Sie folgende Administrationsaufgaben erledigen: * lesen, schreiben und löschen aller Dateien auf dem System unabhängig von deren Zugriffsrechten; * setzen von Eigentümer und Zugriffsrechten jeglicher Dateien     auf dem System; * setzen des Passworts von jedem unprivilegierten Benutzer auf dem System; * anmelden an jedem Benutzerkonto ohne dessen Passwort. Diese uneingeschränkten Rechte des root-Benutzerkontos erfordern     von Ihnen, dass Sie sich besonnen und verantwortungsvoll verhalten, wenn Sie es benutzen. Warnung     Teilen Sie das root-Passwort niemals anderen mit. Anmerkung Bestimmte Dateizugriffsrechte einer Datei (inklusive Hardware-Geräte wie CD-ROM usw., die auf einem Debian-System nichts anderes als eine Datei sind) können dazu führen, dass Sie     für nicht-root-Benutzer unbenutzbar sind. Obwohl die Verwendung des root-Benutzerkontos ein schneller Weg ist, solche Situationen zu testen, sollte die Lösung das korrekte Einstellen der Datei-Zugriffsrechte und/oder das Hinzufügen des Benutzers in entsprechende Gruppen sein (siehe dazu Abschnitt 1.2.3, „Dateisystem-Berechtigungen“). 1.1.4. Die root-shell-Eingabeaufforderung     Hier ein paar grundlegende Methoden, um mittels root-Passwort eine root-shell-Eingabeaufforderung zu bekommen: * Geben Sie root im textbasierten Anmeldebildschirm ein. * Tippen Sie in jeglicher Shell "su -l" ein. + Hierdurch werden NICHT die Umgebungseinstellungen des     angemeldeten Benutzers beibehalten. * Tippen Sie in jeglicher Benutzer-Shell-Eingabeaufforderung "su" ein. + Hierdurch werden teilweise die Umgebungseinstellungen des angemeldeten Benutzers beibehalten. 1.1.5. Systemadministrations-Werkzeuge mit grafischer Oberfläche (GUI) Wenn sich über Ihr Arbeitsplatz-Menü keine GUI-Systemadministrations-Werkzeuge mit den benötigten Rechten starten lassen, können Sie diese von einer     root-shell-Eingabeaufforderung aus starten, wie z.B. von gnome-terminal(1), rxvt(1) oder xterm(1). Lesen Sie dazu Abschnitt 1.1.4, „Die root-shell-Eingabeaufforderung“ und Abschnitt 7.9, „X-Server-Verbindungen“. Warnung Starten Sie niemals das GUI-Display/den Sitzungsmanager als root, indem Sie root im Anmeldebildschirm des Displaymanagers (z.B.     gdm3(1)) eingeben. Lassen Sie niemals vertrauensunwürdige GUI-Programme mit Fernanbindung in einem X-Window laufen, wenn dort kritische Daten angezeigt werden, da diese Programme Ihren grafischen Bildschirminhalt abgreifen können. 1.1.6. Virtuelle Konsolen In einem Standard-Debian-System sind sechs VT100-ähnliche textbasierte Konsolen verfügbar, zwischen denen Sie hin und her schalten können, und in denen die Befehls-Shell direkt auf dem Linux-Host ausgeführt werden kann. Solange Sie sich nicht in     einer GUI-Umgebung befinden, können Sie mit der linken Alt-Taste und gleichzeitig einer der Funktionstasten F1 — F6 zwischen den virtuellen Konsolen umschalten. Jede textbasierte Konsole erlaubt eine eigenständige Anmeldung mit einem Benutzerkonto und bietet eine Mehrbenutzer-Umgebung. Diese Mehrbenutzer-Umgebung ist eine tolle Unix-Funktionalität und macht sehr leicht süchtig. Wenn Sie sich in der grafischen GUI-Umgebung befinden, bekommen Sie mit Strg-Alt-F3 (d.h. die linke Strg-Taste, die linke     Alt-Taste und F3 gleichzeitig) Zugang zur textbasierten Konsole 3. Sie können zur GUI-Oberfläche zurückkehren, die normalerweise auf der virtuellen Konsole 2 läuft, indem Sie Alt-F2 drücken.     Alternativ können Sie auch von der Befehlszeile aus zu einer anderen virtuellen Konsole wechseln, z.B. zur Konsole 3:     # chvt 3 1.1.7. Wie Sie die Eingabeaufforderung wieder verlassen Drücken Sie in der Eingabeaufforderung Strg-D (also die linke Strg-Taste und die d-Taste gleichzeitig), um die Shell-Aktivitäten zu beenden. Wenn Sie sich auf der textbasierten     Konsole befinden, kehren Sie hiermit zum Anmeldebildschirm zurück. Obwohl bei diesen Steuerzeichen von "control D" mit großem D gesprochen wird, müssen Sie hier nicht die Umschalt-Taste drücken. Für Strg-D wird auch die Kurzform ^D benutzt. Alternativ können Sie auch "exit" eingeben.     Wenn Sie sich in einem X-Terminal-Emulator(1) befinden, können Sie hiermit das X-Terminal-Emulator-Fenster schließen. 1.1.8. Wie Sie das System herunterfahren Wie jedes andere moderne Betriebssystem, bei dem Dateioperationen das Zwischenspeichern (Caching) beinhalten, um die Performance zu erhöhen, erfordert auch das Debian-System eine Prozedur zum sauberen Herunterfahren, bevor gefahrlos abgeschaltet werden kann. Dies dient dazu, die Integrität der Daten aufrecht zu     erhalten, indem alle Änderungen auf die Platte geschrieben werden. Falls Energiekontrolle per Software verfügbar ist, wird im Rahmen des Herunterfahrens die Spannung automatisch abgeschaltet. (Andernfalls müssen Sie den Ein-/Ausschaltknopf mehrere Sekunden gedrückt halten, nachdem das Herunterfahren abgeschlossen ist).     Sie können das System im normalen Mehrbenutzermodus auf der Befehlszeile herunterfahren mittels:     # shutdown -h now     Sie können das System im Einzelbenutzermodus auf der Befehlszeile herunterfahren mittels:     # poweroff -i -f     Lesen Sie auch Abschnitt 6.3.8, „Wie Sie das ferne System über SSH herunterfahren“. 1.1.9. Eine Konsole wiederherstellen Wenn der Bildschirm verrückt spielt, nachdem Sie verrückte Dinge wie "cat irgendeine-binärdatei" gemacht haben, geben Sie "reset"     an der Eingabeaufforderung ein. Sie können den Befehl möglicherweise nicht sehen, während Sie ihn eingeben. Mit "clear" können Sie bei Bedarf auch den Bildschirm leeren. 1.1.10. Zusätzliche Paketempfehlungen für Neulinge Obwohl selbst die Minimalinstallation eines Debian-Systems ohne jegliche Arbeitsplatzumgebung die grundlegenden Unix-Funktionalitäten bietet, ist es eine gute Idee, mittels     apt-get(8) einige Befehlszeilen- und curses-basierte Zeichen-Terminal-Pakete zusätzlich zu installieren, wie z.B. mc und vim; Anfänger können dazu für einen ersten Versuch folgendes verwenden: # apt-get update     ... # apt-get install mc vim sudo aptitude ...     Falls Sie diese Pakete bereits installiert haben, werden keine neuen Pakete installiert. Tabelle 1.1. Liste interessanter Textmodus-Programm-Pakete +---------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |---------+------+-----+----------------------------------------| |mc |V:50, |1542 |Ein Textmodus-Dateimanager mit | | |I:209 | |Vollbildschirm-Ansicht | |---------+------+-----+----------------------------------------| |sudo |V:688,|6550 |Ein Programm, das Benutzern | | |I:841 | |eingeschränkte root-Privilegien einräumt| |---------+------+-----+----------------------------------------| | |V:95, | |Unix Texteditor Vi IMproved, ein | |vim |I:369 |3743 |Texteditor für Programmierer | | | | |(Standardversion) |     |---------+------+-----+----------------------------------------| | |V:58, | |Unix Texteditor Vi IMproved, ein | |vim-tiny |I:975 |1722 |Texteditor für Programmierer | | | | |(Kompaktversion) | |---------+------+-----+----------------------------------------| |emacs-nox|V:4, |39647|Emacs vom GNU-Projekt, der Lisp-basierte| | |I:16 | |erweiterbare Texteditor | |---------+------+-----+----------------------------------------| |w3m |V:15, |2837 |Textmodus-WWW-Browser | | |I:187 | | | |---------+------+-----+----------------------------------------| |gpm |V:10, |521 |Unix-ähnliches Kopieren-und-Einfügen auf| | |I:12 | |der Textkonsole (Daemon) | +---------------------------------------------------------------+     Es könnte eine gute Idee sein, einiges an informativer Dokumentation zu lesen. Tabelle 1.2. Liste informativer Dokumentationspakete +---------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |--------------------+------+-----+-----------------------------| | | | |Dokumentation des | |doc-debian |I:867 |187 |Debian-Projekts und andere | | | | |Dokumente | |--------------------+------+-----+-----------------------------| |debian-policy |I:14 |4659 |Debian Policy-Handbuch und | | | | |zugehörige Dokumente |     |--------------------+------+-----+-----------------------------| |developers-reference|V:0, |2601 |Richtlinien und Informationen| | |I:5 | |für Debian-Entwickler | |--------------------+------+-----+-----------------------------| |debmake-doc |I:0 |11701|Leitfaden für Debian-Betreuer| |--------------------+------+-----+-----------------------------| |debian-history |I:0 |4692 |Vergangenheit des | | | | |Debian-Projekts | |--------------------+------+-----+-----------------------------| |debian-faq |I:865 |790 |Debian FAQ | +---------------------------------------------------------------+     Sie sollten vielleicht einige dieser Pakete installieren, indem Sie folgendes eingeben:     # apt-get install package_name 1.1.11. Ein zusätzliches Benutzerkonto Falls Sie Ihr Haupt-Benutzerkonto nicht für die folgenden     Trainingsaktivitäten nutzen möchten, können Sie mit folgendem Befehl ein Trainings-Benutzerkonto erstellen, hier z.B. fish:     # adduser fish     Beantworten Sie alle Fragen. Dadurch wird ein neues Konto namens fish erstellt. Nach Ihren     Übungen können Sie dieses Benutzerkonto und das dazugehörige Heimatverzeichnis entfernen, indem Sie folgendes verwenden:     # deluser --remove-home fish On non-Debian and specialized Debian systems, above activities     need to use lower level useradd(8) and userdel(8) utilities, instead. 1.1.12. sudo-Konfiguration Für ein typisches Einzelbenutzer-Arbeitsplatzsystem, wie z.B. einen Debian-Desktopauf einem Laptop, ist es gängig, wie folgt     eine einfache Konfiguration für sudo(8) einzurichten, so dass der nicht-privilegierten Benutzer, z.B. penguin, lediglich mit seinem Benutzer-Passwort (aber ohne das root-Passwort) administrative Rechte bekommen kann:     # echo "penguin ALL=(ALL) ALL" >> /etc/sudoers Alternativ dazu ist es auch verbreitet, dem nicht-privilegierten     Benutzer, hier penguin, wie folgt administrative Rechte zu gewähren, ohne dass dieser irgendein Passwort eingeben muss:     # echo "penguin ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers Dieser Trick sollte nur für einen Einzelbenutzer-Arbeitsplatz     angewandt werden, den Sie selbst administrieren und auf dem Sie der einzige Benutzer sind. Warnung     Richten Sie keine Benutzerkonten regulärer Benutzer auf Mehrbenutzersystemen derartig ein; dies wäre sehr schlecht für die Systemsicherheit. Achtung Das Passwort und Benutzerkonto von penguin im obigen Beispiel erfordert ebenso viel Schutz wie das root-Passwort und das root-Benutzerkonto.     Administrative Rechte in diesem Zusammenhang gehören zu jemandem, der berechtigt ist, Systemadministrationsaufgaben auf dem Arbeitsplatzsystem durchzuführen. Gewähren Sie niemals einem Manager in der Verwaltungsabteilung Ihrer Firma oder Ihrem Chef derartige Privilegien, außer diese sind dazu autorisiert und befähigt. Anmerkung Um Leuten Zugriffsrechte auf limitierte Geräte und Dateien zu verschaffen, sollten Sie die Verwendung von group in Betracht ziehen, um eingeschränkte Rechte einzurichten, statt die root-Privilegien via sudo(8) dafür zu nutzen.     Mit einer durchdachten und vorsichtigen Konfiguration kann sudo (8) auf einem System, das Sie sich mit mehreren Leuten teilen, limitierte administrative Rechte einräumen, ohne dass Sie anderen das root-Passwort mitteilen müssen. Dies kann Ihnen auf Systemen helfen, wo Sie sich die Verantwortung mit mehreren Administratoren teilen, so dass Sie sagen können, wer was gemacht hat. Auf der anderen Seite möchten Sie vielleicht nicht, dass irgendjemand sonst solche Privilegien hat. 1.1.13. Zeit zum Spielen Jetzt sind Sie soweit, dass Sie mit dem Debian-System ohne Risiko     herumspielen können, solange Sie das nicht-privilegierte Benutzerkonto verwenden. Das liegt daran, dass sogar nach einer Standardinstallation Ihr Debian-System mit korrekten Dateiberechtigungen konfiguriert ist, die verhindern, dass nicht-privilegierte Benutzer das System     beschädigen. Natürlich könnte es immer noch einige Lücken geben, die ausgenutzt werden können, aber diejenigen, die sich darüber Sorgen machen, sollten nicht dieses Kapitel lesen, sondern die Anleitung zum Absichern von Debian (Securing Debian Manual).     Wir lernen das Debian-System mit folgenden Aspekten eines Unix-ähnlichen Systems kennen: * Abschnitt 1.2, „Unix-ähnliches Dateisystem“ * Abschnitt 1.3, „Midnight Commander (MC)“     * Abschnitt 1.4, „Die grundlegende Unix-ähnliche Arbeitsumgebung“ * Abschnitt 1.5, „Der einfache Shell-Befehl“ * Abschnitt 1.6, „Unix-ähnliche Textverarbeitung“ 1.2. Unix-ähnliches Dateisystem In GNU/Linux und anderen Unix-ähnlichen Betriebssystemen sind Dateien in Verzeichnis-Strukturen organisiert. Alle Dateien und     Verzeichnisse sind in einem großen Verzeichnisbaum unterhalb von "/" eingeordnet. Dies wird Baum genannt, weil das Dateisystem, wenn Sie es aufmalen, wie ein Baum aussieht, nur dass er auf dem Kopf steht. Diese Dateien und Verzeichnisse können auf mehrere Geräte verteilt sein. mount(8) dient dazu, Dateisysteme, die auf anderen Geräten erkannt werden, in den großen Verzeichnisbaum einzubinden. Umgekehrt dient umount(8) dazu, es wieder daraus zu     entfernen. Auf aktuellen Linux-Kernel kann mount(8) mit bestimmten Optionen Teile des Verzeichnisbaums zusätzlich an anderer Stelle anknüpfen oder die zusätzlichen Eigenschaften shared, private, slave oder unbindable verwenden. Unterstützte mount-Optionen für verschiedene Dateisystemtypen finden Sie in "/ usr/share/doc/linux-doc-*/Documentation/filesystems/". Verzeichnisse auf Unix-Systemen werden bei einigen anderen Betriebssystemen auch Ordner genannt. Bitte beachten Sie     ebenfalls, dass es auf einem Unix-System kein Konzept zur Bezeichnung von Laufwerken gibt, das vergleichbar mit z.B. "A:" wäre. Es gibt ein Dateisystem, und dort ist alles enthalten. Dies ist ein gewaltiger Unterschied verglichen mit Windows. 1.2.1. Unix-Dateigrundlagen     Hier einige Grundlagen zu Dateien unter Unix: * Bei Dateinamen ist Groß-/Kleinschreibung immer relevant. Das heißt, "MEINEDATEI" und "MeineDatei" sind zwei unterschiedliche Dateien. * Das Wurzel-Verzeichnis (root) bedeutet Wurzel des Dateisystems und wird einfach als "/" dargestellt. Verwechseln Sie dies nicht mit dem Heimatverzeichnis des root-Benutzers "/root". * Jedes Verzeichnis hat einen Namen, der jegliche Buchstaben oder Symbole außer "/" enthalten kann. Das Wurzelverzeichnis root ist eine Ausnahme; dessen Name ist "/" (ausgesprochen "slash" oder "das root-Verzeichnis") und es kann nicht umbenannt werden. * Jede Datei oder jedes Verzeichnis ist über einen voll qualifizierten Dateinamen, absoluten Dateinamen oder Pfad gekennzeichnet, der die Abfolge der Verzeichnisse enthält, die zu dessen Erreichen passiert werden müssen. Die drei oben angegebenen Ausdrücke sind alle gleichbedeutend. * Alle voll qualifizierten Dateinamen beginnen mit dem "/ "-Verzeichnis, und zwischen zwei Verzeichnissen oder zwischen Verzeichnis und Datei steht ein weiteres "/". Das erste "/" ist das Wurzelverzeichnis, und die anderen "/" sind jeweils Trenner zwischen den einzelnen Unterverzeichnissen, bis der letzte Eintrag erreicht ist, was der Name der eigentlichen Datei ist. Die Wörter, die hier verwendet werden, können verwirrend sein. Nehmen Sie den folgenden voll qualifizierten     Dateinamen als Beispiel: "/usr/share/keytables/de.map.gz". Allerdings spricht man von "de.map.gz" alleine als Dateiname. * Das Wurzelverzeichnis enthält eine Anzahl von Unterverzeichnisse, wie "/etc/" und "/usr/". Diese haben wiederum nochmals weitere Unterverzeichnisse, z. B. "/etc/ systemd/" und "/usr/local/". Das Ganze komplett betrachtet wird als Verzeichnisbaum bezeichnet. Sie können den absoluten Dateinamen als Route vom Fuss des Baums ("/") zu dessen Ende einer Verzweigung (einer Datei) betrachten. Manchmal hören Sie auch, wie Leute vom Verzeichnisbaum reden, als wäre es ein Familien-Stammbaum, der alle direkten Nachkommen einer einzigen Figur (dem Wurzelverzeichnis "/") einschließt: demzufolge haben die Unterverzeichnisse Eltern, und ein Pfad zeigt die vollständige Herkunft einer Datei. Es gibt auch relative Pfade, die irgendwo beginnen (nicht beim Wurzelverzeichnis). Sie sollten dabei in Erinnerung behalten, dass "../" immer das jeweils übergeordnete Verzeichnis (Eltern-Verzeichnis) bezeichnet. Diese Bezeichnungsweise gilt auch für andere Strukturen, die dem Verzeichnisbaum ähnlich sind, wie hierarchische Datenstrukturen. * Es gibt keine spezielle Verzeichnispfad-Namenskomponente, die einem physikalischen Gerät, wie einer Festplatte, entspricht. Dies unterscheidet sich von RT-11, CP/M, OpenVMS, MS-DOS, AmigaOS und Microsoft Windows, wo der Pfad einen Gerätenamen wie "C:\" enthält. Allerdings existieren Verzeichniseinträge, die sich als Teil des normalen Dateisystems auf physikalische Geräte beziehen. Siehe dazu Abschnitt 1.2.2, „Dateisystem-Internas“. Anmerkung Obwohl Sie nahezu alle Buchstaben oder Symbole in einem Dateinamen verwenden können, ist es in der Praxis eine schlechte Idee, dies zu tun. Es ist besser, alle Zeichen zu vermeiden, die auf der Befehlszeile oft eine spezielle Bedeutung haben, darunter     Leerzeichen, Tabulatoren, Newlines, und andere spezielle Zeichen wie { } ( ) [ ] ' ` " \ / > < | ; ! # & ^ * % @ $ . Wenn Sie innerhalb des Namens einzelne Wörter trennen möchten, sind Punkte, Bindestriche und Unterstriche hierfür eine gute Wahl. Sie können auch die Wörter jeweils am Anfang großschreiben, "SoWieHier". Erfahrene Benutzer tendieren dazu, Leerzeichen in Dateinamen zu vermeiden. Anmerkung     Das Wort "root" kann entweder "root-Benutzer" oder "root-Verzeichnis" (Wurzelverzeichnis) bedeuten. Am Zusammenhang bei der Verwendung sollten Sie erkennen können, was gemeint ist. Anmerkung     Das Wort Pfad wird nicht nur wie oben für voll qualifizierte Dateinamen verwendet, sondern auch für den Befehls-Suchpfad. Die jeweilige Bedeutung erschließt sich für gewöhnlich aus dem Zusammenhang. Detaillierte bewährte Methoden für die Dateihierarchie sind im     Filesystem Hierarchy Standard beschrieben (in "/usr/share/doc/ debian-policy/fhs/fhs-2.3.txt.gz" und unter hier(7)). Sie sollten folgendes als Ausgangspunkt nutzen: Tabelle 1.3. Auflistung der Verwendung wichtiger Verzeichnisse +---------------------------------------------------------------+ |Verzeichnis| Verwendung des Verzeichnisses | |-----------+---------------------------------------------------| |/ |das Wurzelverzeichnis (root-Verzeichnis) | |-----------+---------------------------------------------------|     |/etc/ |systemweite Konfigurationsdateien | |-----------+---------------------------------------------------| |/var/log/ |System-Protokolldateien | |-----------+---------------------------------------------------| |/home/ |die Heimatverzeichnisse aller nicht-privilegierten | | |Benutzer | +---------------------------------------------------------------+ 1.2.2. Dateisystem-Internas Gemäß der Unix-Tradition stellt das Debian GNU/Linux-System ein Dateisystem bereit, unterhalb dessen alle physikalischen Daten     auf Festplatten und anderen Speichermedien liegen; alles für das Zusammenspiel mit Hardware-Geräten wie Konsolenbildschirmen und von fern zugreifenden seriellen Konsolen benötigte wird in vereinheitlichter Art und Weise unterhalb von "/dev/" abgebildet. Alle Dateien, Verzeichnisse, benannten Pipes (named pipes; ein Verfahren, mit dem zwei Progamme Daten austauschen können) oder physikalischen Geräte auf einem Debian GNU/Linux-System haben eine Datenstruktur, Inode genannt, die die mit ihr verbundenen Attribute beschreibt, wie der Benutzer, der deren Eigentümer     (owner) ist, die Gruppe, der sie angehören, der Zeitpunkt des letzten Zugriffs usw. Die Idee, nahezu alles im Dateisystem darzustellen, war eine Unix-Innovation, und moderne Linux-Kernel haben diese Idee sogar noch weiterentwickelt. Jetzt kann man sogar Informationen über die Prozesse, die auf dem Computer laufen, im Dateisystem finden. Die abstrakte und vereinheitlichte Abbildung von physikalischen Datensätzen und internen Prozessen ist sehr leistungsfähig, da sie es uns erlaubt, für die gleiche Funktion auf vielen total     unterschiedlichen Geräten denselben Befehl zu verwenden. Es ist sogar möglich, die Art und Weise, wie der Kernel arbeitet, zu verändern, indem man Daten in spezielle Dateien schreibt, die mit laufenden Prozessen verbunden sind. Tipp     Wenn Sie wissen möchten, wie der Verzeichisbaum und die Gerätedateien verknüpft sind, führen Sie mount(8) ohne Argumente aus. 1.2.3. Dateisystem-Berechtigungen     Dateisystem-Berechtigungen auf Unix-ähnlichen Systemen werden für drei Kategorien beteiligter Benutzer festgelegt: * der Benutzer (user), der Eigentümer der Datei ist (u); * andere Benutzer der Gruppe (group), zu der die Datei gehört (     g); * alle anderen (other) Benutzer (o), auch "world" (Welt) oder "everyone" (jeder) genannt.     Bei Dateien gibt es Berechtigung für die folgenden Aktionen: * Die Lese-Berechtigung (read, r) erlaubt dem Rechteinhaber, den Inhalt der Datei zu betrachten.     * Die Schreib-Berechtigung (write, w) erlaubt dem Rechteinhaber, die Datei zu verändern. * Die Ausführungs-Berechtigung (execute, x) erlaubt dem Rechteinhaber, die Datei als Befehl auszuführen.     Bei Verzeichnissen gibt es Berechtigung für die folgenden Aktionen: * Die Lese-Berechtigung (read, r) erlaubt dem Rechteinhaber, den Inhalt des Verzeichnisses aufzulisten. * Die Schreib-Berechtigung (write, w) erlaubt dem     Rechteinhaber, Dateien zu dem Verzeichnis hinzuzufügen oder Dateien zu löschen. * Die Ausführungs-Berechtigung (execute, x) erlaubt dem Rechteinhaber, auf Dateien in dem Verzeichnis zuzugreifen. Hierbei bedeutet die Ausführungs-Berechtigung für ein Verzeichnis     nicht nur, dass der Inhalt der Dateien in diesem Verzeichnis betrachtet werden kann, sondern auch deren Attribute, wie die Dateigröße und der Zeitpunkt der letzten Änderung. ls(1) wird verwendet, um Informationen über die Zugriffsrechte     (und mehr) von Dateien und Verzeichnissen anzuzeigen. Wenn es mit der Option "-l" aufgerufen wird, werden die folgenden Informationen in der angegebenen Reihenfolge angezeigt: * Typ der Datei (erstes Zeichen); * Berechtigungen der Datei (neun Zeichen, bestehend aus drei Zeichen jeweils für Benutzer, Gruppe und andere, in dieser Reihenfolge); * Anzahl der harten Links auf die Datei;     * Name des Benutzers, der Eigentümer der Datei ist; * Name der Gruppe, zu der die Datei gehört; * Größe der Datei in Zeichen (Byte); * Datum und Uhrzeit der Datei (mtime); * Name der Datei. Tabelle 1.4. Bedeutungen des ersten Zeichens der "ls -l"-Ausgabe +-------------------------------------------------+ |Zeichen| Bedeutung | |-------+-----------------------------------------| |- |normale Datei | |-------+-----------------------------------------| |d |Verzeichnis | |-------+-----------------------------------------|     |l |symbolischer Link | |-------+-----------------------------------------| |c |Geräte-Node für zeichenorientierte Geräte| |-------+-----------------------------------------| |b |Geräte-Node für blockorientierte Geräte | |-------+-----------------------------------------| |p |benannte Pipe (named pipe) | |-------+-----------------------------------------| |s |Socket | +-------------------------------------------------+ chown(1) wird von dem root-Benutzer verwendet, um den Eigentümer einer Datei zu ändern. chgrp(1) wird vom Eigentümer einer Datei oder von root benutzt, um die Gruppe zu ändern, zu der die Datei     gehört. chmod(1) wird vom Eigentümer oder dem root-Benutzer verwendet, um die Zugriffsberechtigungen für Datei und Verzeichnis zu ändern. Die grundsätzliche Syntax, um die Datei foo zu bearbeiten, ist wie folgt: # chown newowner foo     # chgrp newgroup foo # chmod [ugoa][+-=][rwxXst][,...] foo Sie können zum Beispiel mit folgenden Befehlen einen     Verzeichnisbaum so manipulieren, dass foo sein Eigentümer wird und bar die Gruppe: # cd /some/location/     # chown -R foo:bar . # chmod -R ug+rwX,o=rX .     Es gibt noch drei weitere, spezielle Zugriffs-Bits: * das Setze Benutzer-ID-Bit (s, oder S statt dem x des Benutzers);     * das Setze Gruppen-ID-Bit (s, oder S statt dem x der Gruppe); * das sticky (klebrig)-Bit (t, oder T statt dem x der "anderen"). Hierbei enthält die Ausgabe von "ls -l" für diese Bits die     jeweiligen Großbuchstaben, wenn die Ausführungs-Bits (x), die bei dieser Ausgabe versteckt sind, nicht gesetzt sind. Das Setzen des Setze Benutzer-ID-Bits einer ausführbaren Datei erlaubt dem Benutzer, die ausführbare Datei unter der Benutzer-ID der Datei (zum Beispiel root) auszuführen. Ähnlich dazu erlaubt     das Setzen des Bits Setze Gruppen-ID einer ausführbaren Datei dem Benutzer, die ausführbare Datei unter der Gruppen-ID der Datei (zum Beispiel root) auszuführen. Da diese Einstellungen Sicherheitsrisiken verursachen können, erfordert deren Aktivierung besondere Vorsicht. Das Setzen des Setze Gruppen-ID-Bits eines Verzeichnisses     aktiviert das BSD-ähnliche Dateierstellungs-Schema, bei dem alle in dem Verzeichnis erzeugten Dateien der gleichen Gruppe angehören wie das Verzeichnis selbst. Das Setzen des sticky (klebrig)-Bits eines Verzeichnisses verhindert, dass eine Datei in dem Verzeichnis von einem Benutzer gelöscht wird, der nicht Eigentümer der Datei ist. Um den Inhalt einer Datei in einem für alle schreibbaren Verzeichnis wie "/tmp" oder in durch die Gruppe schreibbaren Verzeichnissen     sicherzustellen, muss nicht nur die Schreib-Berechtigung für die Datei zurückgenommen werden, sondern auch das sticky (klebrig) -Bit für das Verzeichnis. Ansonsten könnte jeder Benutzer, der Schreibberechtigung in dem Verzeichnis hat, die Datei löschen und eine neue mit dem gleichen Namen (aber eventuell anderem Inhalt) erstellen.     Hier einige interessante Beispiele von Dateiberechtigungen: $ ls -l /etc/passwd /etc/shadow /dev/ppp /usr/sbin/exim4 crw------T 1 root root 108, 0 Oct 16 20:57 /dev/ppp -rw-r--r-- 1 root root 2761 Aug 30 10:38 /etc/passwd -rw-r----- 1 root shadow 1695 Aug 30 10:38 /etc/shadow -rwsr-xr-x 1 root root 973824 Sep 23 20:04 /usr/sbin/exim4     $ ls -ld /tmp /var/tmp /usr/local /var/mail /usr/src drwxrwxrwt 14 root root 20480 Oct 16 21:25 /tmp drwxrwsr-x 10 root staff 4096 Sep 29 22:50 /usr/local drwxr-xr-x 10 root root 4096 Oct 11 00:28 /usr/src drwxrwsr-x 2 root mail 4096 Oct 15 21:40 /var/mail drwxrwxrwt 3 root root 4096 Oct 16 21:20 /var/tmp Es gibt eine alternative numerische Möglichkeit, um     Dateiberechtigungen mit chmod(1) darzustellen. Dieser numerische Modus verwendet 3 oder 4 einstellige Oktalzahlen (Basis=8). Tabelle 1.5. Der numerische Modus für Dateiberechtigungen in chmod(1)-Befehlen +---------------------------------------------------------------+ | Ziffer | Bedeutung | |------------+--------------------------------------------------| |1. Ziffer |Summe der Bits Setze Benutzer-ID (=4), Setze | |(optional) |Gruppen-ID (=2) und sticky (klebrig) (=1) |     |------------+--------------------------------------------------| |2. Ziffer |Summer der Rechte Lesen (= 4), Schreiben (= 2) und| | |Ausführen (= 1) für den Benutzer | |------------+--------------------------------------------------| |3. Ziffer |identisch für die Gruppe | |------------+--------------------------------------------------| |4. Ziffer |identisch für alle anderen | +---------------------------------------------------------------+ Dies klingt kompliziert, aber es ist letztendig ganz einfach. Wenn Sie die ersten Spalten (2-10) der "ls -l"-Ausgabe anschauen     und sie in binärer Darstellung (Basis = 2) lesen ("-" ist "0" und "rwx" sind "1"), werden Sie die letzten 3 Ziffern des numerischen Modus' im Oktalformat (Basis = 8) erkennen.     Probieren Sie zum Beispiel folgendes: $ touch foo bar $ chmod u=rw,go=r foo     $ chmod 644 bar $ ls -l foo bar -rw-r--r-- 1 penguin penguin 0 Oct 16 21:39 bar -rw-r--r-- 1 penguin penguin 0 Oct 16 21:35 foo Tipp     Wenn Sie mit einem Shell-Skript auf Informationen von "ls -l" zugreifen müssen, sollten Sie geeignete Befehle wie test(1), stat (1) und readlink(1) verwenden. Auch in die Shell integrierte Dinge wie "[" oder "test" können genutzt werden. 1.2.4. Steuerung der Berechtigungen für neu erzeugte Dateien: umask Welche Berechtigungen einer neu erzeugten Datei oder einem neu     erzeugten Verzeichnis zugewiesen werden, wird durch den in die Shell integrierten Befehl umask festgelegt/eingeschränkt. Lesen Sie dazu dash(1), bash(1) und builtins(7).     (file permissions) = (requested file permissions) & ~(umask value) Tabelle 1.6. Beispiele für umask-Werte +---------------------------------------------------------------+ |umask| erzeugte | erzeugte | Verwendung | | | Dateirechte |Verzeichnisrechte | | |-----+--------------+------------------+-----------------------|     |0022 |-rw-r--r-- |-rwxr-xr-x |schreibbar nur durch | | | | |den Benutzer | |-----+--------------+------------------+-----------------------| |0002 |-rw-rw-r-- |-rwxrwxr-x |schreibbar durch die | | | | |Gruppe | +---------------------------------------------------------------+ Das Debian-System verwendet standardmäßig das UPG-Schema (user private group, eineprivate Gruppe für jeden Benutzer). Eine UPG wird erstellt, immer wenn ein Benutzer dem System hinzugefügt wird. Eine UPG hat den gleichen Namen wie der Benutzer, für den sie erstellt wurde, und dieser Benutzer ist das alleinige     Mitglied in dieser Gruppe. Durch das UPG-Schema ist es sicher, die umask auf 0002 zu setzen, da jeder Benutzer seine eigene private Gruppe hat. (Bei einigen Unix-Varianten ist es gängig, alle normalen Benutzer so einzurichten, dass sie einer einzigen users-Gruppe angehören und es ist in solchen Fällen eine gute Idee, umask aus Sicherheitsgründen auf 0022 zu setzen.) Tipp     Sie aktivieren das UPG-Schema, indem Sie "umask 002" zur Datei ~ /.bashrc hinzufügen. 1.2.5. Berechtigungen für Gruppen von Benutzern (group) Warnung     Please make sure to save unsaved changes before doing reboot or similar actions.     You can add a user penguin to a group bird in two steps: * Change group configuration using one of following: + Execute "sudo usermod -aG bird penguin". + Execute "sudo adduser penguin bird". (only on typical Debian systems) + Execute "sudo vigr" for /etc/group and "sudo vigr -s" for     /etc/gshadow to append penguin in the line for bird. * Apply configuration using one of following: + Cold reboot and login. (Best option) + Execute "kill -TERM -1" and do some fix-up actions such as "systemctl restart NetworkManager.service". + Logout via GUI menu and login.     You can remove a user penguin from a group bird in two steps: * Change group configuration using one of following: + Execute "sudo usermod -rG bird penguin". + Execute "sudo deluser penguin bird". (only on typical Debian systems) + Execute "sudo vigr" for /etc/group and "sudo vigr -s" for     /etc/gshadow to remove penguin in the line for bird. * Apply configuration using one of following: + Cold reboot and login. (Best option) + Execute "kill -TERM -1" and do some fix-up actions such as "systemctl restart NetworkManager.service". + Logout via GUI menu is not an option for Gnome Desktop.     Any warm reboot attempts are fragile replacements of the real cold reboot under the modern desktop system. Anmerkung Alternativ können Sie Benutzer während des     Authentifizierungsprozesses dynamisch zu Gruppen hinzufügen, indem Sie die Zeile "auth optional pam_group.so" zu "/etc/pam.d/ common-auth" hinzufügen und "/etc/security/group.conf" einrichten. Lesen Sie dazu Kapitel 4, Authentifizierung und Zugriffskontrolle.) Hardware-Geräte sind nur eine andere Art von Datei auf dem Debian-System. Wenn Sie Probleme haben, von einem Benutzerkonto     aus auf Geräte wie CD-ROM-Laufwerke oder USB-Memory-Sticks zuzugreifen, sollten Sie den Benutzer zu einem Mitglied der entsprechenden Gruppe machen. Einige erwähnenswerte systemweite Gruppen erlauben ihren     Mitglieder, ohne root-Privilegien auf die jeweiligen Dateien und Geräte zuzugreifen: Tabelle 1.7. Liste erwähnenswerter systemweiter Gruppen +---------------------------------------------------------------+ |Gruppe | Beschreibung der Dateien und Geräte, auf die | | | zugegriffen werden kann | |-------+-------------------------------------------------------| |dialout|voller und direkter Zugriff auf serielle Ports ("/dev/ | | |ttyS[0-3]") | |-------+-------------------------------------------------------| | |eingeschränkter Zugriff auf serielle Ports für Dialup | |dip |IP-(Einwahl-)Verbindungen zu vertrauenswürden | | |Gegenstellen | |-------+-------------------------------------------------------|     |cdrom |CD-ROM- und DVD+/-RW-Laufwerke | |-------+-------------------------------------------------------| |audio |Audiogeräte (z.B. Soundkarten) | |-------+-------------------------------------------------------| |video |Videogeräte (z.B. Grafikkarten) | |-------+-------------------------------------------------------| |scanner|Scanner | |-------+-------------------------------------------------------| |adm |Systemüberwachungs-Protokolle | |-------+-------------------------------------------------------| |staff |einige Verzeichnisse für untergeordnete administrative | | |Tätigkeiten: "/usr/local", "/home" | +---------------------------------------------------------------+ Tipp Sie müssen der Gruppe dialout angehören, um ein Modem     umzukonfigurieren, sich irgendwo einzuwählen usw. Wenn jedoch root vordefinierte Konfigurationsdateien für vertrauenswürdige Gegenstellen in "/etc/ppp/peers/" anlegt, müssen Sie lediglich Mitglied der Gruppe dip sein, um mit den Befehlen pppd(8), pon(1) und poff(1) Dialup IP-(Einwahl-)Verbindungen herzustellen. Einige erwähnenswerte, vom System angebotene Gruppen erlauben     Ihren Mitgliedern, besondere Befehle ohne root-Rechte auszuführen: Tabelle 1.8. Liste erwähnenswerter, vom System angebotenen Gruppen zur Ausführung besonderer Befehle +---------------------------------------------------------------+ |Gruppe | Befehle, die ausgeführt werden können |     |-------+-------------------------------------------------------| |sudo |sudo ohne sein Passwort ausführen | |-------+-------------------------------------------------------| |lpadmin|Befehle ausführen, um Drucker zur Druckerdatenbank | | |hinzuzufügen, zu modifizieren und zu entfernen | +---------------------------------------------------------------+ Eine vollständige Liste der vom System angebotenen Benutzer und     Gruppen finden Sie in der letzten Version des Dokuments "Users and Groups" in "/usr/share/doc/base-passwd/users-and-groups.html" aus dem Paket base-passwd. Lesen Sie passwd(5), group(5), shadow(5), newgrp(1), vipw(8),     vigr(8) und pam_group(8) für Informationen über Befehle zur Verwaltung des Benutzer- und Gruppensystems. 1.2.6. Zeitstempel     Es gibt drei Arten von Zeitstempeln für eine GNU/Linux-Datei: Tabelle 1.9. Liste der Arten von Zeitstempeln +-------------------------------------------------------------+ | Art | Bedeutung (historische Unix-Definition) | |-----+-------------------------------------------------------|     |mtime|Zeitpunkt der letzten Änderung an der Datei (ls -l) | |-----+-------------------------------------------------------| |ctime|Zeitpunkt der letzten Statusänderung der Datei (ls -lc)| |-----+-------------------------------------------------------| |atime|Zeitpunkt des letzten Zugriffs auf die Datei (ls -lu) | +-------------------------------------------------------------+ Anmerkung     ctime ist nicht der Zeitpunkt der Dateierzeugung. Anmerkung     Der wirkliche Wert von atime auf einem GNU/Linux-System könnte sich von dem mit der historischen Unix-Definition konformen Variante unterscheiden. * Das Überschreiben einer Datei ändert die mtime-, ctime- und atime-Attribute der Datei. * Das Ändern von Eigentümer oder Zugriffsrechten ändert die ctime- und atime-Attribute der Datei. * Das Lesen einer Datei ändert das atime-Attribut der Datei auf einem historischen Unix-System. * Das Lesen einer Datei ändert das atime-Attribut der Datei auf     einem GNU/Linux-System, wenn das Dateisystem mit dem Argument "strictatime" eingebunden wurde. * Das erstmalige Lesen einer Datei oder das Lesen nach einem Tag ändert das atime-Attribut der Datei auf einem GNU/ Linux-System, wenn das Dateisystem mit dem Argument "relatime" eingebunden wurde (dies ist das Standardverhalten seit Linux 2.6.30). * Das Lesen einer Datei ändert nicht das atime-Attribut der Datei auf einem GNU/Linux-System, wenn das Dateisystem mit dem Argument "noatime" eingebunden wurde. Anmerkung Die mount-Argument "noatime" und "relatime" wurden eingeführt, um in normalen Anwendungssituationen die Leistungsfähigkeit der     Systeme beim Lesen vom Dateisystem zu verbessern. Der einfache Vorgang zum Lesen einer Datei beinhaltet bei aktivierter "strictatime"-Option den zeitaufwendigen Schreibvorgang zum Aktualisieren des atime-Attributs. Jedoch wird das atime-Attribut selten benutzt, außer bei der mbox(5)-Datei. Lesen Sie dazu mount (8).     Verwenden Sie den Befehl touch(1), um den Zeitstempel vorhandener Dateien zu ändern. Zeitstempel werden in der Ausgabe des ls-Befehls lokalisiert     angezeigt, wenn ein nicht-englisches Gebietsschema (Locale) eingestellt ist (bei "de_DE.UTF-8" also im deutschen Datumsformat. $ LANG=C ls -l foo -rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo     $ LANG=en_US.UTF-8 ls -l foo -rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo $ LANG=fr_FR.UTF-8 ls -l foo -rw-rw-r-- 1 penguin penguin 0 oct. 16 21:35 foo Tipp     Lesen Sie Abschnitt 9.3.4, „Angepasste Anzeige von Datum und Uhrzeit“, um die Ausgabe von "ls -l" anzupassen. 1.2.7. Links     Es gibt zwei Methoden, um die Datei "foo" mit einem anderen Dateinamen, z.B. "bar" zu verbinden: * Harter Link + doppelter Name für eine existierende Datei + "ln foo bar"     * symbolischer Link (auch Symlink genannt) + eine spezielle Datei, die über deren Namen auf eine andere Datei verweist + "ln -s foo bar" Schauen Sie sich folgendes Beispiel bezüglich Änderungen bei der     Linkanzahl und den feinen Unterschieden im Resultat des rm-Befehls an: $ umask 002 $ echo "Original Content" > foo $ ls -li foo 1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 foo $ ln foo bar # hard link $ ln -s foo baz # symlink $ ls -li foo bar baz 1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 bar 1450180 lrwxrwxrwx 1 penguin penguin 3 Oct 16 21:47 baz -> foo     1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 foo $ rm foo $ echo "New Content" > foo $ ls -li foo bar baz 1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 bar 1450180 lrwxrwxrwx 1 penguin penguin 3 Oct 16 21:47 baz -> foo 1450183 -rw-rw-r-- 1 penguin penguin 12 Oct 16 21:48 foo $ cat bar Original Content $ cat baz New Content Der harte Link kann innerhalb des gleichen Dateisystems erstellt     werden und teilt sich die gleiche Inode-Nummer mit der Originaldatei, welche Sie mittels der Option "-i" des ls(1) -Befehls herausfinden können. Der Symlink hat immer nominal die Dateiberechtigungen     "rwxrwxrwx", wie in dem obigen Beispiel zu sehen, wobei die letztlich wirksamen Zugriffsrechte durch die Berechtigungen der Datei, auf die verwiesen wird, bestimmt werden. Achtung Es ist grundsätzlich eine gute Idee, keine komplizierten     symbolischen oder harten Link zu erstellen, außer Sie haben einen sehr guten Grund dafür. Es könnte Ihnen sonst Albträume bescheren, wenn die logische Kombination von symbolischen Links zu Schleifen im Dateisystem führt. Anmerkung     Im allgemeinen sollten Sie symbolische Links gegenüber harten Links bevorzugen, außer Sie haben einen guten Grund, einen harten Link zu verwenden. Das Verzeichnis "." verweist auf das Verzeichnis, in dem es erscheint, daher steht die Anzahl der Links in jedem neuen     Verzeichnis auf 2. ".." verweist auf das jeweilige Elternverzeichnis, daher erhöht sich die Anzahl der Links für dieses Verzeichnis mit jedem Hinzufügen eines neuen Unterverzeichnisses. Wenn Sie gerade von Windows zu Linux wechseln, wird Ihnen bald klar werden, wie gut das Verfahren zum Verknüpfen von Dateinamen bei Unix aufgebaut ist, verglichen mit dem Windows-Equivalent der     "Shortcuts". Weil es im Dateisystem implementiert ist, bemerken Anwendungen keinen Unterschied zwischen der verknüpften Datei und dem Original. Im Fall eines harten Links gibt es auch tatsächlich keinen Unterschied. 1.2.8. Benannte Pipes (FIFOs) Eine benannte Pipe (named pipe) ist eine Datei, die sich wie ein Rohr verhält: wenn Sie etwas in die Datei hineingeben, kommt es     am anderen Ende wieder heraus. Daher wird sie auch FIFO genannt, vom englischen First-In-First-Out: das erste, was Sie in das Rohr hineingeben, kommt als erstes am anderen Ende wieder heraus. Wenn Sie in eine benannte Pipe schreiben, wird der Prozess, der in die Pipe schreibt, nicht eher beendet, als bis die zu schreibenden Informationen von der Pipe gelesen wurden. Wenn Sie aus einer benannten Pipe lesen, wartet der lesende Prozess, bis es nichts mehr zu lesen gibt, bevor er beendet wird. Die Größe     der Pipe ist immer Null --- sie speichert keine Informationen, sie verbindet lediglich zwei Prozesse, wie dies die Shell mittels "|" tut. Da diese Pipe allerdings einen Namen hat, müssen die beiden Prozesse nicht auf der gleichen Befehlszeile und nicht einmal unter dem gleichen Benutzerkonto laufen. Pipes waren eine sehr einflußreiche Innovation von Unix.     Probieren Sie zum Beispiel folgendes: $ cd; mkfifo mypipe $ echo "hello" >mypipe & # put into background [1] 8022 $ ls -l mypipe prw-rw-r-- 1 penguin penguin 0 Oct 16 21:49 mypipe     $ cat mypipe hello [1]+ Done echo "hello" >mypipe $ ls mypipe mypipe $ rm mypipe 1.2.9. Sockets Sockets werden von allen Internet-Übertragungen, Datenbanken und dem Betriebssystem selbst umfassend genutzt. Sie sind den benannten Pipes (FIFO) ähnlich und erlauben Prozessen, Informationen sogar zwischen verschiedenen Computern auszutauschen. Für die Nutzung von Sockets müssen diese Prozesse     nicht zur gleichen Zeit laufen und auch nicht Kindprozesse desselben Urprozesses sein. Ein Socket ist der Endpunkt für die Interprozesskommunikation (IPC). Der Austausch von Informationen kann über das Netzwerk zwischen verschiedenen Rechnern stattfinden. Die beiden meist verwendeten sind der Internet-Socket und der Unix-Domain-Socket. Tipp     "netstat -an" bietet eine sehr nützliche Übersicht aller auf einem entsprechenden System geöffneten Sockets. 1.2.10. Gerätedateien Gerätedateien verweisen auf physikalische oder virtuelle Geräte     auf Ihrem System, wie Ihre Festplatte, Grafikkarte, Bildschirm oder Tastatur. Ein Beispiel für ein virtuelles Gerät ist die Konsole, repräsentiert durch "/dev/console".     Es gibt zwei Arten von Gerätedateien: * Zeichenorientierte Geräte + Zugriff immer nur auf ein Zeichen gleichzeitig + 1 Zeichen = 1 Byte + z.B. Tastatur, serieller Port, …     * Blockorientierte Geräte + Zugriff in größeren Einheiten, Blocks genannt + 1 Block > 1 Byte + z.B. Festplatten, … Sie können Gerätedateien lesen und schreiben, allerdings enthalten diese möglicherweise Binärdaten, die für Menschen nur unverständliches Kauderwelsch darstellen. Daten direkt in diese Dateien zu schreiben, ist manchmal zur Fehlersuche bei     Verbindungsproblemen nützlich. Zum Beispiel können Sie eine Textdatei zur Drucker-Gerätedatei "/dev/lp0" schicken oder Modembefehle an den entsprechenden seriellen Port "/dev/ttyS0". Aber wenn hierbei nicht mit Vorsicht gearbeitet wird, kann dies eine große Katastrophe verursachen. Seien Sie also auf der Hut. Anmerkung     Für den normalen Zugriff auf den Drucker verwenden Sie lp(1).     Die Geräte-Node-Nummer wird angezeigt, indem Sie ls(1) wie folgt ausführen: $ ls -l /dev/sda /dev/sr0 /dev/ttyS0 /dev/zero brw-rw---T 1 root disk 8, 0 Oct 16 20:57 /dev/sda     brw-rw---T+ 1 root cdrom 11, 0 Oct 16 21:53 /dev/sr0 crw-rw---T 1 root dialout 4, 64 Oct 16 20:57 /dev/ttyS0 crw-rw-rw- 1 root root 1, 5 Oct 16 20:57 /dev/zero * "/dev/sda" hat die major-Gerätenummer 8 und die minor-Gerätenummer 0. Es ist lesbar/schreibbar für Benutzer, die der Gruppe disk angehören. * "/dev/sr0" hat die major-Gerätenummer 11 und die minor-Gerätenummer 0. Es ist lesbar/schreibbar für Benutzer,     die der Gruppe cdrom angehören. * "/dev/ttyS0" hat die major-Gerätenummer 4 und die minor-Gerätenummer 64. Es ist lesbar/schreibbar für Benutzer, die der Gruppe dialout angehören. * "/dev/zero" hat die major-Gerätenummer 1 und die minor-Gerätenummer 5. Es ist lesbar/schreibbar für jeden.     Auf modernen Linux-Systemen wird das Dateisystem unterhalb von "/ dev/" automatisch durch den udev(7)-Mechanismus bestückt. 1.2.11. Spezielle Gerätedateien     Es gibt einige spezielle Gerätedateien: Tabelle 1.10. Liste spezieller Gerätedateien +---------------------------------------------------------------+ |Gerätedatei| Aktion | Beschreibung der Antwort | |-----------+---------+-----------------------------------------| |/dev/null |lesen |gibt das "end-of-file"-Zeichen (EOF) | | | |zurück | |-----------+---------+-----------------------------------------| |/dev/null |schreiben|gibt nichts zurück (ein bodenloses Loch | | | |für Datenmüll) | |-----------+---------+-----------------------------------------| | | |gibt das "\0"-Zeichen (NUL) zurück (das | |/dev/zero |lesen |ist nicht dasselbe wie die Zahl Null in |     | | |ASCII) | |-----------+---------+-----------------------------------------| | | |gibt zufällige Zeichen von einem realen | |/dev/random|lesen |Zufallszahlengenerator zurück, der echte | | | |Entropie liefert (langsam) | |-----------+---------+-----------------------------------------| |/dev/ | |gibt zufällige Zeichen von einem | |urandom |lesen |kryptografisch sicheren | | | |Pseudo-Zufallszahlengenerator zurück | |-----------+---------+-----------------------------------------| |/dev/full |schreiben|gibt den "disk-full"-Fehler (ENOSPC, | | | |Platte voll) zurück | +---------------------------------------------------------------+ Diese werden oft in Verbindung mit der Shell-Umleitung genutzt     (lesen Sie Abschnitt 1.5.8, „Typische Befehlssequenzen und Shell-Weiterleitungen“). 1.2.12. procfs und sysfs procfs und sysfs, eingebunden unter "/proc" und "/sys", sind Pseudo-Dateisysteme und bringen interne Datenstrukturen des     Kernel in den Userspace. Mit anderen Worten: diese Einträge sind virtuell, sie fungieren als komfortables Fenster zu den Operationen des Betriebssystems. Das Verzeichnis "/proc" enthält (neben anderen Dingen) ein Unterverzeichnis für jeden Prozess, der auf dem System läuft,     welches nach der Prozess-ID (PID) benannt ist. Systemwerkzeuge, die auf Prozessinformationen zugreifen, wie ps(1), bekommen ihre Informationen aus dieser Verzeichnisstruktur. Die Verzeichnisse unterhalb von "/proc/sys/" enthalten Schnittstellen, um bestimmte Kernel-Parameter zur Laufzeit zu     ändern. (Sie können dies möglicherweise auch mit dem spezialisierten Befehl sysctl(8) oder seiner Preload-/ Konfigurationsdatei "/etc/sysctl.conf" erreichen.) Die Leute geraten regelmäßig in Panik, wenn Sie eine bestimmte Datei bemerken - "/proc/kcore" - die wirklich riesig ist. Dies ist (mehr oder weniger) eine Kopie des Inhalts vom     Arbeitsspeicher Ihres Rechners. Sie wird für Fehlersuche im Kernel verwendet. Es ist eine virtuelle Datei, die auf den Arbeitsspeicher verweist, sorgen Sie sich daher nicht über ihre Größe. Das Verzeichnis unterhalb von "/sys" enthält vom Kernel     exportierte Datenstrukturen, deren Attribute sowie die Anbindungen zwischen ihnen. Es enthält auch Schnittstellen, um bestimmte Kernel-Parameter zur Laufzeit zu ändern. Lesen Sie "proc.txt(.gz)", "sysfs.txt(.gz)" sowie weitere     dazugehörige Dokumente aus der Linux-Kernel-Dokumentation ("/usr/ share/doc/linux-doc-*/Documentation/filesystems/*") aus dem Paket linux-doc-*. 1.2.13. tmpfs tmpfs ist ein temporäres Dateisystem, das alle Dateien im     virtuellen Speicher hält. Die Daten des tmpfs im page cache des Speichers können - falls nötig - in den Swap-Bereich auf der Festplatte ausgelagert werden. Das Verzeichnis "/run" wird im frühen Stadium des Boot-Prozesses als tmpfs eingebunden. Dadurch ist es möglich, in dieses     Verzeichnis zu schreiben, auch wenn "/" als read-only (nur lesen) eingebunden ist. Dies ist der neue Ablageort für die Speicherung kurzlebiger Statusdateien und ersetzt verschiedene Orte, die im Filesystem Hierarchy Standard Version 2.3 beschrieben sind: * "/var/run" → "/run"     * "/var/lock" → "/run/lock" * "/dev/shm" → "/run/shm" Lesen Sie "tmpfs.txt(.gz)" in der Linux-Kernel-Dokumentation ("/     usr/share/doc/linux-doc-2.6.*/Documentation/filesystems/*") aus dem Paket linux-doc-2.6.*. 1.3. Midnight Commander (MC) Midnight Commander (MC) ist ein GNU "Schweizer Messer" für die     Linux-Konsole und andere Terminal-Umgebungen. Er bringt Neulingen eine menügeführte Konsole, die viel einfacher zu erlernen ist wie die Standard-Unix-Befehle.     Sie müssen möglicherweise wie folgt das Midnight Commander-Paket mit Namen "mc" installieren:     $ sudo apt-get install mc Verwenden Sie den mc(1)-Befehl, um das Debian-System zu     erforschen. Dies ist der beste Weg, um zu lernen. Entdecken Sie einige interessante Orte lediglich durch Verwendung der Pfeiltasten und der Enter-Taste. * "/etc" und dessen Unterverzeichnisse; * "/var/log" und dessen Unterverzeichnisse;     * "/usr/share/doc" und dessen Unterverzeichnisse; * "/usr/sbin" und "/usr/bin". 1.3.1. Anpassen des MC Um beim Schließen des MC das Arbeitsverzeichnis zu speichern und     beim nächsten Start mit cd dorthin zu wechseln, empfehle ich, "~ /.bashrc" zu modifizieren, um ein Skript dort zu integrieren, das vom mc-Paket bereitgestellt wird:     . /usr/lib/mc/mc.sh Den Grund finden Sie unter mc(1) (unter der Option "-P"). (Falls     Sie nicht verstehen, worum genau es hier geht, können Sie dies später erledigen.) 1.3.2. Starten von MC     MC kann wie folgt gestartet werden:     $ mc MC kümmert sich über sein Menü um alle Dateioperationen und erfordert dabei nur minimale Anstrengungen des Benutzers. Drücken     Sie einfach F1, um die Hilfe-Seiten zu bekommen. Sie können mit dem MC herumspielen, indem Sie einfach die Pfeiltasten und Funktionstasten drücken. Anmerkung     In einigen Konsolen, wie gnome-terminal(1), könnten Tastendrücke der Funktionstasten vom Konsolenprogramm "gestohlen" werden. Bei gnome-terminal können Sie diese Funktionalität über "Bearbeiten" → "Einstellungen" → "Tastenkürzel" deaktivieren. Wenn Sie Probleme mit der Zeichenkodierung feststellen und     Zeichenmüll angezeigt wird, kann das Hinzufügen von "-a" zur MC-Befehlszeile helfen, Probleme zu vermeiden.     Falls dies Ihre Anzeigeprobleme mit MC nicht löst, lesen Sie Abschnitt 9.5.6, „Die Terminal-Konfiguration“. 1.3.3. Dateimanager in MC Die Standardanzeige sind zwei Verzeichnisfenster, welche Dateilisten enthalten. Ein anderer nützlicher Modus ist, das rechte Fenster auf "Info" einzustellen, um dort Informationen zu     Dateizugriffsrechten und anderem zu erhalten. Wenn der gpm(8) -Daemon läuft, kann man auch auf textbasierten Linux-Konsolen eine Maus verwenden. (Stellen Sie sicher, dass Sie die Umschalt-Taste drücken, um im MC das normale Ausschneiden-und-Einfügen-Verhalten zu bekommen.) Tabelle 1.11. Die Tastaturbefehle von MC +---------------------------------------------------------------+ | Taste | Tastaturbefehl | |-----------+---------------------------------------------------| |F1 |Hilfe-Menü | |-----------+---------------------------------------------------| |F3 |interner Dateibetrachter | |-----------+---------------------------------------------------| |F4 |interner Texteditor | |-----------+---------------------------------------------------| |F9 |Aufklapp-Menü aktivieren |     |-----------+---------------------------------------------------| |F10 |Midnight Commander beenden | |-----------+---------------------------------------------------| |Tab |zwischen den beiden Fenstern wechseln | |-----------+---------------------------------------------------| |Einfg oder |Datei für eine mehrere Dateien betreffende | |Strg-T |Operation wie Kopieren markieren | |-----------+---------------------------------------------------| |Entf |Datei löschen (seien Sie vorsichtig --- stellen Sie| | |MC auf "sicheres Löschen") | |-----------+---------------------------------------------------| |Pfeiltasten|selbsterklärend | +---------------------------------------------------------------+ 1.3.4. Befehlszeilentricks in MC * cd-Befehl wechselt das Verzeichnis, das im gewählten Fenster angezeigt wird. * Strg-Enter oder Alt-Enter kopiert einen Dateinamen auf die Befehlszeile. Nutzen Sie dies mit cp(1) und mv(1) zusammen mit dem Editieren auf der Befehlszeile. * Alt-Tab zeigt Auswahlmöglichkeiten für die Auto-Vervollständigung von Dateinamen.     * Die Start-Verzeichnisse für beide Fenster können MC als Argumente angegeben werden, zum Beispiel "mc /etc /root". * Esc + n-Taste → Fn (d.h. Esc + 1 → F1, usw.; Esc + 0 → F10). * Das Drücken von Esc vor einer anderen Buchstabentaste hat den gleichen Effekt wie das Drücken von Alt und der anderen Taste zusammen, d. h. drücken Sie Esc + c für Alt-C. Esc wird Meta-Taste genannt und manchmal als "M-" dargestellt. 1.3.5. Der interne Texteditor in MC Der interne Editor hat ein interessantes Ausschneiden-und-Einfügen-Schema: das Drücken von F3 setzt den Startpunkt einer zu markierenden Auswahl, ein weiteres F3 markiert das Ende der Auswahl und hebt die Auswahl hervor. Dann     können Sie Ihren Cursor verschieben. Wenn Sie F6 drücken, wird der ausgewählte Bereich an die Cursor-Position verschoben. Wenn Sie F5 drücken, wird der ausgewählte Bereich kopiert und an der Cursor-Position eingefügt. F2 sichert die Datei. F10 beendet das Ganze. Die meisten Pfeiltasten funktionieren intuitiv.     Dieser Editor kann direkt mit einer Datei gestartet werden, indem einer der folgenden Befehle benutzt wird:     $ mc -e filename_to_edit     $ mcedit filename_to_edit Dies ist kein Multi-Fenster-Editor, aber man kann mehrere Linux-Konsolen verwenden, um den gleichen Effekt zu erreichen. Um Inhalte zwischen verschiedenen Fenstern hin und her zu kopieren,     verwenden Sie die Alt-Fn-Tasten, um zwischen den virtuellen Konsolen zu wechseln, und "Datei→Datei einfügen" oder "Datei→Kopie in Datei", um Teile einer Datei in eine andere Datei zu kopieren.     Dieser interne Editor kann auf Wunsch durch jeden anderen externen Editor ersetzt werden. Außerdem verwenden viele Programme die Umgebungsvariablen "$EDITOR" oder "$VISUAL", um festzulegen, welcher Editor genutzt     wird. Wenn Ihnen vim(1) oder nano(1) nicht behagen, möchten Sie diese vielleicht auf "mcedit" setzen, indem Sie folgende Zeilen zu "~/.bashrc" hinzufügen:     export EDITOR=mcedit export VISUAL=mcedit     Ich empfehle, diese wenn möglich auf "vim" zu setzen.     Wenn Sie vim(1) nicht mögen, können Sie für die meisten Systemwartungsaufgaben auch mcedit(1) benutzen. 1.3.6. Der interne Dateibetrachter in MC MC ist ein sehr toller Dateibetrachter. Er ist ein großartiges Werkzeug, um nach Wörtern in Dokumenten zu suchen. Ich verwende     ihn immer für Dateien im /usr/share/doc-Verzeichnis. Dies ist der schnellste Weg, um Massen von Linux-Informationen zu durchsuchen. Dieser Betrachter kann direkt gestartet werden, indem einer der folgenden Befehle benutzt wird:     $ mc -v path/to/filename_to_view     $ mcview path/to/filename_to_view 1.3.7. Autostart-Funktionalitäten von MC Drücken Sie Enter auf einer Datei und das zugehörige Programm     wird den Inhalt der Datei verarbeiten (lesen Sie Abschnitt 9.4.11, „Anpassen des zu startenden Programms“). Dies ist eine sehr praktische MC-Funktionalität. Tabelle 1.12. Die Reaktion auf die Enter-Taste in MC +---------------------------------------------------------------+ | Dateityp | Reaktion auf die Enter-Taste | |----------------------+----------------------------------------| |ausführbare Datei |Befehl ausführen | |----------------------+----------------------------------------|     |Handbuchseiten-Datei |Inhalt an Betrachter-Software | | |weiterleiten | |----------------------+----------------------------------------| |html-Datei |Inhalt an Webbrowser weiterleiten | |----------------------+----------------------------------------| |"*.tar.gz"- und |den Inhalt anzeigen, als wäre es ein | |"*.deb"-Datei |Unterverzeichnis | +---------------------------------------------------------------+ Damit diese Betrachter- und virtuellen Dateifunktionalitäten korrekt funktionieren können, sollte bei Dateien, deren Inhalt     betrachtet werden kann, nicht die Ausführungs-Berechtigung gesetzt sein. Ändern Sie deren Status ansonsten mit chmod(1) oder über das MC-Dateimenü. 1.3.8. Virtuelles Dateisystem von MC MC kann verwendet werden, um über das Internet auf Dateien zuzugreifen. Rufen Sie das Menü auf über F9, "Enter" und "h"     aktiviert das virtuelle Dateisystem. Geben Sie eine URL in der Form "sh://[benutzer@]rechner[:optionen]/[fernes-verzeichnis]" ein, wodurch (mittels ssh) ein auf einem fernen Rechner liegendes Verzeichnis abgerufen wird, das dann wie ein lokales erscheint. 1.4. Die grundlegende Unix-ähnliche Arbeitsumgebung Obwohl MC es Ihnen erlaubt, fast alles zu tun, ist es sehr     wichtig für Sie, zu lernen, wie die Befehlszeilenwerkzeuge am Shell-Prompt aufgerufen werden, und mit der Unix-ähnlichen Arbeitsumgebung vertraut zu werden. 1.4.1. Die Login-Shell Da die Login-Shell von einigen Programmen zur     Systeminitialisierung verwendet werden könnte, ist es klug, diese auf bash(1) eingestellt zu lassen (vermeiden Sie es also auch, mittels chsh(1) die Login-Shell zu ändern). Wenn Sie eine andere interaktive Shell nutzen möchten, stellen Sie dies in der GUI-Konfiguration des Terminal-Emulator-Programms     ein oder legen Sie es in ~/.bashrc fest, z.B. indem Sie dort "exec /usr/bin/zsh -i -l" oder "exec /usr/bin/fish -i -l" angeben. Tabelle 1.13. Liste von Shell-Programmen +---------------------------------------------------------------+ | Paket |Popcon|Größe|POSIX-Shell| Beschreibung | |---------------+------+-----+-----------+----------------------| | |V:838,| | |Bash: die GNU Bourne | |bash |I:999 |7175 |Ja |Again SHell | | | | | |(De-Facto-Standard) | |---------------+------+-----+-----------+----------------------| | |V:32, | |Nicht |konfigurierbare | |bash-completion|I:933 |1454 |verfügbar |Vervollständigung für | | | | | |die bash-Shell | |---------------+------+-----+-----------+----------------------| | |V:884,| | |Debian Almquist Shell,| |dash |I:997 |191 |Ja |gut für | | | | | |Shell-Scripting | |---------------+------+-----+-----------+----------------------| | |V:40, | | |Z Shell: die | |zsh |I:73 |2463 |Ja |Standard-Shell mit | | | | | |vielen Erweiterungen | |---------------+------+-----+-----------+----------------------| | |V:6, | | |TENEX C Shell: eine | |tcsh |I:20 |1355 |Nein |erweiterte Version der| | | | | |Berkeley csh |     |---------------+------+-----+-----------+----------------------| |mksh |V:6, |1579 |Ja |Eine Version der | | |I:11 | | |Korn-Shell | |---------------+------+-----+-----------+----------------------| | |V:1, | | |OpenBSD C-Shell, eine | |csh |I:6 |339 |Nein |Version der Berkeley | | | | | |csh | |---------------+------+-----+-----------+----------------------| | | | | |Stand-alone Shell mit | | |V:0, | | |integrierten Befehlen | |sash |I:5 |1157 |Ja |(nicht gedacht für | | | | | |Standard "/usr/bin/ | | | | | |sh") | |---------------+------+-----+-----------+----------------------| |ksh |V:1, |61 |Ja |die echte AT&T-Version| | |I:10 | | |der Korn Shell | |---------------+------+-----+-----------+----------------------| |rc |V:0, |178 |Nein |Implementierung der AT| | |I:1 | | |&T Plan 9 rc-Shell | |---------------+------+-----+-----------+----------------------| | | | | |Policy-compliant | |posh |V:0, |190 |Ja |(grundsatz-konforme) | | |I:0 | | |Ordinary SHell | | | | | |(pdksh-Abkömmling) | +---------------------------------------------------------------+ Tipp Obwohl sich POSIX-konforme Shells die grundsätzliche Syntax     teilen, können sie sich beim Verhalten für Dinge wie Shell-Variablen oder Glob-Ersetzungen unterscheiden. Bitte konsultieren Sie die jeweilige Dokumentation bezüglich weiterer Details.     In dieser Lehrstunde ist mit interaktiver Shell immer bash gemeint. 1.4.2. Anpassen der bash     Sie können das Verhalten von bash(1) mittels "~/.bashrc" anpassen.     Probieren Sie zum Beispiel folgendes: # enable bash-completion if ! shopt -oq posix; then if [ -f /usr/share/bash-completion/bash_completion ]; then . /usr/share/bash-completion/bash_completion elif [ -f /etc/bash_completion ]; then . /etc/bash_completion fi fi # CD upon exiting MC . /usr/lib/mc/mc.sh     # set CDPATH to a good one CDPATH=.:/usr/share/doc:~:~/Desktop:~ export CDPATH PATH="${PATH+$PATH:}/usr/sbin:/sbin" # set PATH so it includes user's private bin if it exists if [ -d ~/bin ] ; then PATH="~/bin${PATH+:$PATH}" fi export PATH EDITOR=vim export EDITOR Tipp     Es gibt weitere Tipps zur Anpassung der bash, zum Beispiel Abschnitt 9.3.6, „Farbige Befehle“ in Kapitel 9, Systemtipps. Tipp     Das bash-completion-Paket enthält eine konfigurierbare Auto-Vervollständigung für bash. 1.4.3. Spezielle Tastendrücke In einer Unix-ähnlichen Umgebung gibt es ein paar Tastendrücke, die spezielle Bedeutungen haben. Bitte beachten Sie, dass auf     einer normalen textbasierten Linux-Konsole nur die linke Strg- und Alt-Taste wie erwartet funktionieren. Hier ein paar erwähnenswerte Tastendrücke, die Sie sich merken sollten: Tabelle 1.14. Liste der Tastaturbefehle für bash +---------------------------------------------------------------+ | Taste | Beschreibung des Tastaturbefehls | |---------------------+-----------------------------------------| |Strg-U |alle Zeichen vor dem Cursor löschen | |---------------------+-----------------------------------------| |Strg-H |ein Zeichen vor dem Cursor löschen | |---------------------+-----------------------------------------| |Strg-D |Eingabe beenden (Shell beenden, wenn Sie | | |eine benutzen) | |---------------------+-----------------------------------------| |Strg-C |einen laufenden Prozess beenden | |---------------------+-----------------------------------------| |Strg-Z |Programm vorübergehend stoppen, indem es | | |in den Hintergrund geschoben wird | |---------------------+-----------------------------------------| |Strg-S |Ausgabe auf den Bildschirm anhalten | |---------------------+-----------------------------------------| |Strg-Q |Ausgabe auf den Bildschirm wieder starten|     |---------------------+-----------------------------------------| |Strg-Alt-Entf |Neu starten/anhalten des Systems, siehe | | |dazu inittab(5) | |---------------------+-----------------------------------------| |Linke-Alt-Taste |Meta-Taste für Emacs und ähnliche | |(optional |Benutzerschnittstellen | |Windows-Taste) | | |---------------------+-----------------------------------------| |Pfeiltaste aufwärts |Die zuletzt ausgeführten Befehlen der | | |bash anzeigen | |---------------------+-----------------------------------------| |Strg-R |Inkrementelle Suche in den zuletzt | | |ausgeführten Befehlen der bash | |---------------------+-----------------------------------------| |Tab |Auto-Vervollständigung des Dateinamens | | |auf der Befehlszeile in der bash | |---------------------+-----------------------------------------| | |Eingabe von Tab ohne | |Strg-V Tab |Auto-Vervollständigung auf der | | |Befehlszeile in der bash | +---------------------------------------------------------------+ Tipp     Die Terminal-Funktionalität von Strg-S kann mittels stty(1) deaktiviert werden. 1.4.4. Mausoperationen Bei Mausoperationen für text-basierte Anwendungen werden auf     Debian-Systemen über einige Kniffe zwei 2 Stile miteinander vermischt: * Traditionelle Mausoperationen im Unix-Stil: + Verwendung von 3 Tasten (Klicken) + Verwendung von PRIMARY + wird verwendet von X-Anwendungen wie xterm sowie von textbasierten Anwendungen in der Linux-Konsole     * Moderne Mausoperationen im GUI-Stil: + Verwendung von 2 Knöpfen (Ziehen + Klicken) + Verwendung von PRIMARY und ZWISCHENABLAGE + wird verwendet in modernen GUI-Anwendungen wie gnome-terminal Tabelle 1.15. Liste von Mausoperationen und zugehörigen Tastenaktionen auf Debian-Systemen +---------------------------------------------------------------+ | Aktion | Reaktion | |-----------------------+---------------------------------------| |Links-Klick und Ziehen |Bereich als PRIMARY-Auswahl festlegen | |der Maus | | |-----------------------+---------------------------------------| |Links-Klick |Beginn des Bereich für die | | |PRIMARY-Auswahl festlegen | |-----------------------+---------------------------------------| |Rechts-Klick |Ende des Bereich für die | |(traditionell) |PRIMARY-Auswahl festlegen | |-----------------------+---------------------------------------|     |Rechts-Klick (modern) |Kontextmenü (ausschneiden/kopieren/ | | |einfügen) | |-----------------------+---------------------------------------| |Mittel-Klick oder |PRIMARY-Auswahl an Cursor-Position | |Umschalt-Einfüg |einfügen | |-----------------------+---------------------------------------| |Strg-X |PRIMARY-Auswahl ausschneiden und in | | |ZWISCHENABLAGE einfügen | |-----------------------+---------------------------------------| |Strg-C (Umschalt-Strg-C|PRIMARY-Auswahl in ZWISCHENABLAGE | |im Terminal) |kopieren | |-----------------------+---------------------------------------| |Strg-V |Inhalt der ZWISCHENABLAGE an | | |Cursor-Position einfügen | +---------------------------------------------------------------+ Hierbei ist die PRIMARY-Auswahl der hervorgehobene Textbereich.     Innerhalb des Terminal-Programms wird Umschalt-Strg-C anstelle von Strg-C zum Kopieren benutzt, um zu vermeiden, dass laufende Programme beendet werden. Das Mittelrad auf einer modernen Radmaus wird als mittlerer Mausknopf betrachtet und kann für den Mittel-Klick verwendet     werden. Das gleichzeitige Drücken des rechten und linken Maus-Knopfes wirkt in einem 2-Knopf-Maus-System wie ein Mittel-Klick.     Um eine Maus in textbasierten Linux-Konsolen verwenden zu können, müssen Sie gpm(8) als Daemon laufen haben. 1.4.5. Der Pager Der less(1)-Befehl ist ein erweiterter Pager (Dateiinhalt-Browser). Er liest die Datei, die per Befehlsargument oder Standardeingabe angegeben wird. Drücken Sie "h", wenn Sie beim Anzeigen von Dateiinhalten mit less Hilfe     benötigen. Er hat viel mehr Fähigkeiten als more(1) und kann sogar noch weiter aufgebohrt werden, indem "eval $(lesspipe)" oder "eval $(lessfile)" im Shell-Startskript ausgeführt wird. Weiteres dazu finden Sie in "/usr/share/doc/less/LESSOPEN". Die Option "-R" erlaubt die Ausgabe von Rohformat-Zeichen und aktiviert ANSI-Color-Escape-Sequenzen. Lesen Sie dazu less(1). Tipp     In the less command, type "h" to see the help screen, type "/" or "?" to search a string, and type "-i" to the change case sensitivity. 1.4.6. Der Texteditor     Sie sollten lernen, eine der Varianten von Vim oder Emacs zu nutzen, die auf Unix-ähnlichen Systemen beliebt sind. Ich denke, sich an Vim-Befehle zu gewöhnen, ist das richtige, da der Vi-Editor in der Linux-/Unix-Welt immer vorhanden ist.     (Eigentlich sind der originale vi oder auch der neue nvi Programme, die Sie überall finden. Ich habe stattdessen für Neulinge Vim ausgewählt, da es über F1 eine Hilfe anbietet, den anderen sehr ähnlich und gleichzeitig noch leistungsfähiger ist.) Wenn Sie stattdessen entweder Emacs oder XEmacs als Ihren Editor auswählen, ist dies in der Tat eine andere gute Wahl, speziell zum Programmieren. Emacs enthält ebenso eine Fülle an weiteren Funktionen, dazu gehört die Arbeit als Newsreader, Verzeichnis-Editor, Mail-Programm usw. Wenn Sie ihn zum     Programmieren oder Editieren von Shell-Skripten verwenden, erkennt er intelligent das Format, an dem Sie arbeiten, und versucht Sie dabei zu unterstützen. Einige Leute behaupten, dass das einzige Programm, dass Sie unter Linux benötigen, Emacs sei. Jetzt zehn Minuten Emacs lernen kann später Stunden an Zeit sparen. Es wird dringend empfohlen, beim Erlernen von Emacs das GNU Emacs-Handbuch als Referenz zur Hand zu haben. All diese Programme enthalten gewöhnlich Unterrichtseinheiten für Sie, damit Sie sie erlernen können. Starten Sie Vim, indem Sie     "vim" eingeben, und drücken Sie die F1-Taste. Sie sollten zumindest die ersten 35 Zeilen lesen. Absolvieren Sie dann den Online-Trainingskurs, indem Sie mit dem Cursor auf "|tutor|" gehen, und drücken Sie Strg-]. Anmerkung Gute Editoren wie Vim und Emacs können Texte mit UTF-8 und anderen exotischen Kodierungen korrekt darstellen. Es ist eine     gute Idee, für die GUI-Umgebung eine UTF-8-Locale zu verwenden und dafür benötigte Programme und Schriften zu installieren. Editoren haben Optionen, um die Dateikodierung unabhängig von der GUI-Umgebung zu setzen. Bitte ziehen Sie deren Dokumentation bezüglich Multibyte-Text zu Rate. 1.4.7. Einen Standard-Texteditor einstellen     Debian enthält eine Reihe verschiedener Editoren. Wir empfehlen wie oben bereits erwähnt, das vim-Paket zu installieren. Debian bietet über den Befehl "/usr/bin/editor" einen     einheitlichen Zugriff auf den Standard-Editor des Systems, so dass andere Programme (z. B. reportbug(1)) ihn aufrufen können. Sie können ihn wie folgt ändern:     $ sudo update-alternatives --config editor Ich empfehle Neulingen, die Auswahl "/usr/bin/vim.basic"     gegenüber /usr/bin/vim.tiny zu bevorzugen, da er Syntaxhervorhebung beherrscht. Tipp Viele Programme nutzen die Umgebungsvariablen "$EDITOR" oder "$VISUAL", um zu entscheiden, welcher Editor verwendet wird     (lesen Sie dazu Abschnitt 1.3.5, „Der interne Texteditor in MC“ und Abschnitt 9.4.11, „Anpassen des zu startenden Programms“). Zwecks Konsistenz auf Debian-Systemen sollten Sie dies auf "/usr/ bin/editor" setzen. (Früher war "$EDITOR" auf "ed" und "$VISUAL" auf "vi" gesetzt.) 1.4.8. Verwenden von vim     Der aktuelle vim(1) startet selbsttätig mit der schlauen "nocompatible"-Option und wechselt in den NORMAL-Modus.^[1] Tabelle 1.16. Liste grundlegender Vim-Tastenkürzel +---------------------------------------------------------------+ | Modus | Tastatureingabe | Aktion | |---------------+-----------------+-----------------------------| |NORMAL |:help|only |die Hilfedatei anzeigen | |---------------+-----------------+-----------------------------| |NORMAL |:e dateiname.ext |neuen Puffer öffnen, um | | | |dateiname.ext zu bearbeiten | |---------------+-----------------+-----------------------------| |NORMAL |:w |Originaldatei mit aktuellem | | | |Puffer überschreiben | |---------------+-----------------+-----------------------------| |NORMAL |:w filename.ext |aktuellen Puffer in | | | |filename.ext schreiben | |---------------+-----------------+-----------------------------| |NORMAL |:q |vim beenden | |---------------+-----------------+-----------------------------| |NORMAL |:q! |Beenden von vim erzwingen | |---------------+-----------------+-----------------------------| |NORMAL |:only |alle anderen vorhandenen | | | |Fenster schließen | |---------------+-----------------+-----------------------------| |NORMAL |:set |prüfen, ob vim im schlauen | | |nocompatible? |nocompatible-Modus läuft | |---------------+-----------------+-----------------------------| |NORMAL |:set nocompatible|vim in den schlauen | | | |nocompatible-Modus versetzen |     |---------------+-----------------+-----------------------------| |NORMAL |i |in den EINGABE-Modus wechseln| |---------------+-----------------+-----------------------------| |NORMAL |R |in den ERSETZEN-Modus | | | |wechseln | |---------------+-----------------+-----------------------------| |NORMAL |v |in den VISUELL-Modus wechseln| |---------------+-----------------+-----------------------------| |NORMAL |V |in den zeilenweise VISUELLEN | | | |Modus wechseln | |---------------+-----------------+-----------------------------| |NORMAL |Strg-V |in den blockweise VISUELLEN | | | |Modus wechseln | |---------------+-----------------+-----------------------------| |außer |ESC-Taste |in den NORMAL-Modus wechseln | |TERMINAL-JOB | | | |---------------+-----------------+-----------------------------| |NORMAL |:term |in den TERMINAL-JOB-Modus | | | |wechseln | |---------------+-----------------+-----------------------------| |TERMINAL-NORMAL|i |in den TERMINAL-JOB-Modus | | | |wechseln | |---------------+-----------------+-----------------------------| |TERMINAL-JOB |Strg-W N (oder |in den TERMINAL-NORMAL-Modus | | |Strg-\ Strg-N) |wechseln | |---------------+-----------------+-----------------------------| |TERMINAL-JOB |Strg-W : |in den Ex-Modus in | | | |TERMINAL-NORMAL wechseln | +---------------------------------------------------------------+     Bitte nutzen Sie das "vimtutor"-Programm, um die Verwendung von vim über einen interaktiven Einführungskurs zu erlernen. Das vim-Programm ändert seine Reaktion auf Tastatureingaben abhängig vom aktiven Modus: Tastatureingaben in den Puffer erfolgen überwiegend im EINFÜGEN- oder ERSETZEN-Modus. Das     Bewegen des Cursors findet meist im NORMAL-Modus statt. Interaktive Auswahlen erledigen Sie im VISUELL-Modus. Die Eingabe von ":" im NORMAL-Modus schaltet den Modus in den Ex-Modus um. Im Ex-Modus werden Befehle akzeptiert. Tipp Vim bringt das Netrw-Paket mit. Netrw unterstützt das Lesen und     Schreiben von Dateien sowie das Durchsuchen von Verzeichnissen über das Netzwerk und lokal! Probieren Sie Netrw, indem Sie "vim ." ausführen (also ein Punkt als Argument zu vim) und lesen Sie das Handbuch mittels ":help netrw".     Informationen zur fortgeschrittenen Konfiguration von vim finden Sie in Abschnitt 9.2, „Anpassen von vim“. 1.4.9. Aufzeichnen der Shell-Aktivitäten Die Ausgabe eines Shell-Befehls könnte aus Ihrem Bildschirm herauslaufen und für immer verloren sein. Es ist nützlich,     Shell-Aktivitäten in einer Datei zu protokollieren, um sie später kontrollieren zu können. Diese Art der Aufzeichnung ist besonders wichtig für jegliche Systemadministrationsaufgaben. Tipp     Der neue Vim (Version>=8.2) kann über seinen TERMINAL-JOB-Modus verwendet werden, um Shell-Aktivitäten sauber aufzuzeichnen. Näheres in Abschnitt 1.4.8, „Verwenden von vim“.     Die grundsätzliche Methode, um die Aktivitäten auf der Shell aufzuzeichnen ist, sie via script(1) laufen zu lassen.     Probieren Sie zum Beispiel folgendes:     $ script Script started, file is typescript     Führen Sie alle gewünschten Shell-Befehle via script aus.     Drücken Sie Strg-D, um script zu beenden.     $ vim typescript     Lesen Sie Abschnitt 9.1.1, „Shell-Aktivitäten sauber aufzeichnen“ . 1.4.10. Grundlegende Unix-Befehle Wir wollen einige grundlegende Unix-Befehle lernen. Ich verwende hier "Unix" in seiner allgemeinen Bedeutung. Alle Unix-Clone-Betriebssysteme bieten normalerweise entsprechende gleichbedeutende Befehle. Das Debian-System ist hier keine     Ausnahme. Sorgen Sie sich nicht, wenn einige Befehle jetzt bei Ihnen nicht wie gewünscht funktionieren. Falls alias in der Shell verwendet wird, sind die zugehörigen Befehlsausgaben unterschiedlich. Diese Beispiele sind nicht dazu gedacht, in dieser Reihenfolge ausgeführt zu werden.     Probieren Sie die folgenden Befehle von einem nicht-privilegierten Benutzerkonto: Tabelle 1.17. Liste grundlegender Unix-Befehle +---------------------------------------------------------------+ | Befehl | Beschreibung | |-------------+-------------------------------------------------| |pwd |Name des derzeitigen/Arbeits-Verzeichnisses | |-------------+-------------------------------------------------| |whoami |derzeitigen Benutzernamen anzeigen | |-------------+-------------------------------------------------| | |derzeitige Benutzeridentität anzeigen (Name, uid | |id |(Benutzer-ID), gid (Gruppen-ID) und zugehörige | | |Gruppen) | |-------------+-------------------------------------------------| |file foo |den Dateityp der Datei "foo" anzeigen | |-------------+-------------------------------------------------| |type -p |den Speicherort des Befehls befehlsname anzeigen | |befehlsname | | |-------------+-------------------------------------------------| |which |" | |befehlsname | | |-------------+-------------------------------------------------| |type |Informationen zum Befehl befehlsname anzeigen | |befehlsname | | |-------------+-------------------------------------------------| |apropos |Befehle mit Bezug zu schlüsselwort finden | |schlüsselwort| | |-------------+-------------------------------------------------| |man -k |" | |schlüsselwort| | |-------------+-------------------------------------------------| |whatis |eine einzeilige Kurzbeschreibung des Befehls | |befehlsname |befehlsname anzeigen | |-------------+-------------------------------------------------| |man -a |Beschreibung zum Befehl befehlsname anzeigen | |befehlsname |(Unix-Stil) | |-------------+-------------------------------------------------| |info |eher lange Beschreibung zum Befehl "befehlsname" | |befehlsname |anzeigen (GNU-Stil) | |-------------+-------------------------------------------------| |ls |Inhalte eines Verzeichnisses auflisten (keine | | |versteckten Dateien und Verzeichnisse) | |-------------+-------------------------------------------------| |ls -a |Inhalte eines Verzeichnisses auflisten (alle | | |Dateien und Verzeichnisse) | |-------------+-------------------------------------------------| | |Inhalte eines Verzeichnisses auflisten (nahezu | |ls -A |alle Dateien und Verzeichnisse, ".." und "." | | |werden übersprungen) | |-------------+-------------------------------------------------| |ls -la |alle Inhalte eines Verzeichnisses mit | | |detaillierten Informationen auflisten | |-------------+-------------------------------------------------| | |alle Inhalte eines Verzeichnisses mit | |ls -lai |Inode-Nummer und detaillierten Informationen | | |auflisten | |-------------+-------------------------------------------------| |ls -d |alle Verzeichnisse im derzeitigen Verzeichnis | | |auflisten | |-------------+-------------------------------------------------| |tree |Verzeichnisbaum-Inhalte anzeigen | |-------------+-------------------------------------------------| |lsof foo |"geöffnet"-Status der Datei foo anzeigen | |-------------+-------------------------------------------------| |lsof -p pid |Dateien auflisten, die von dem Prozess mit der ID| | |pid geöffnet wurden | |-------------+-------------------------------------------------| |mkdir foo |ein neues Verzeichnis foo im derzeitigen | | |Verzeichnis erstellen | |-------------+-------------------------------------------------| |rmdir foo |das Verzeichnis foo im derzeitigen Verzeichnis | | |löschen | |-------------+-------------------------------------------------| | |in das Verzeichnis foo im derzeitigen Verzeichnis| |cd foo |oder im in der Variable "$CDPATH" enthaltenen | | |Verzeichnis wechseln | |-------------+-------------------------------------------------| |cd / |in das root-Verzeichnis wechseln | |-------------+-------------------------------------------------| |cd |in das Heimatverzeichnis des derzeitigen | | |Benutzers wechseln | |-------------+-------------------------------------------------| |cd /foo |in das Verzeichnis mit dem absoluten Pfad "/foo" | | |wechseln | |-------------+-------------------------------------------------| |cd .. |in das übergeordnete Verzeichnis | | |(Eltern-Verzeichnis) wechseln | |-------------+-------------------------------------------------| |cd ~foo |in das Heimatverzeichnis des Benutzers foo | | |wechseln | |-------------+-------------------------------------------------| |cd - |in das vorherige Verzeichnis wechseln | |-------------+-------------------------------------------------| | |von "README.gz" erstellen | |foo | | |-------------+-------------------------------------------------| |zcat |den dekomprimierten Inhalt von "README.gz" an das| |README.gz >> |Ende der Datei "foo" anfügen (Datei vorher | |foo |erzeugen, falls sie nicht existiert) | +---------------------------------------------------------------+ Anmerkung Unix hat die Tradition, Dateinamen zu verstecken, die mit einem "." beginnen. Dies sind traditionell Dateien, die Konfigurationsinformationen und Benutzereinstellungen enthalten. Bezüglich des cd-Befehls schauen Sie unter builtins(7). Der Standard-Pager auf einem reinen Debian-System ist more(1), der nicht rückwärts scrollen kann. Indem Sie das less-Paket     mittels "apt-get install less" installieren, wird less(1) zum Standard-Pager und Sie können mit den Pfeiltasten rückwärts scrollen. Die Zeichen "[" und "]" in dem regulären Ausdruck des obigen Befehls "ps aux | grep -e "[e]xim4*"" vermeiden, dass grep sich selbst findet. Das "4*" in dem regulären Ausdruck steht für 0 oder mehr Wiederholungen des Zeichens "4", wodurch grep sowohl "exim" wie auch "exim4" findet. Obwohl "*" in dem Dateinamen und dem regulären Ausdruck verwendet wird, ist ihre Bedeutung unterschiedlich. Lernen Sie die regulären Ausdrücke von grep(1). Bitte durchlaufen Sie zur Übung verschiedene Verzeichnisse und     erforschen Sie das System. Wenn Sie Fragen zu einem der Konsolenbefehle haben, seien Sie sicher, dass Sie die Handbuchseite gelesen haben.     Probieren Sie zum Beispiel folgendes: $ man man $ man bash     $ man builtins $ man grep $ man ls An den Stil der Handbuchseiten kann man sich eventuell etwas     schwer gewöhnen, da sie eher knapp gehalten sind, speziell die älteren, traditionellen. Aber wenn Sie sich einmal daran gewöhnt haben, werden Sie die knappe Form zu schätzen wissen. Bitte beachten Sie, dass viele der Unix-ähnlichen Befehle von GNU     und BSD eine kurze Hilfe anzeigen, wenn Sie auf eine der folgenden Arten aufgerufen werden (oder in einigen Fällen ohne jegliche Argumente):     $ commandname --help $ commandname -h 1.5. Der einfache Shell-Befehl Jetzt haben Sie ein Gefühl, wie das Debian-System genutzt wird.     Lassen Sie uns tiefer in den Mechanismus der Befehlsausführung einsteigen. Eine genaue Beschreibung finden Sie unter bash(1).     Ein einfacher Befehl ist eine Abfolge mehrerer Komponenten. 1. Zuweisung von Variablen (optional) 2. Befehlsname     3. Argumente (optional) 4. Weiterleitungen (optional: > , >> , < , << usw.) 5. Steuer-Operator (optional: && , || , newline , ; , & , ( , ) ) 1.5.1. Befehlsausführung und Umgebungsvariablen     Die Werte einiger Umgebungsvariablen verändern teilweise das Verhalten von Unix-Befehlen. Die Standardwerte von Umgebungsvariablen werden zunächst vom     PAM-System gesetzt und dann eventuell von manchen Anwendungsprogrammen wieder zurückgesetzt. * Das PAM-System (wie pam_env) könnte Umgebungsvariablen über " /etc/pam.conf", "/etc/environment" und "/etc/default/locale" setzen.     * Display-Manager wie z.B. gdm3 setzen Umgebungsvariablen für GUI-Sitzungen unter Umständen über "~/.profile" zurück. * Benutzer-spezifische Programminitialisierungen könnten Umgebungsvariablen über "~/.profile", "~/.bash_profile" und "~/.bashrc" zurücksetzen. 1.5.2. Die "$LANG"-Variable Das Standard-Gebietsschema wird über die Umgebungsvariable "$LANG" festgelegt; sie hat die Form "LANG=xx_YY.UTF-8" und wird     vom Installer oder einer späteren GUI-Konfiguration (in GNOME z.B. über "Einstellungen" → "Region & Sprache" → "Sprache" / "Formate") gesetzt. Anmerkung     Ich empfehle Ihnen, die Systemumgebung für den Anfang direkt über die "$LANG"-Variable zu konfigurieren und die Finger von den "$LC_*"-Variablen zu lassen, außer es ist absolut nötig. Der vollständige Wert für das Gebietsschema (Locale), der an die     "$LANG"-Variable übergeben wird, besteht aus drei Teilen: "xx_YY.ZZZZ". Tabelle 1.18. Die drei Teile des locale-Wertes +---------------------------------------------------------------+ |locale-Wert| Bedeutung | |-----------+---------------------------------------------------| |xx |Sprach-Code laut ISO 639 (in Kleinbuchstaben) wie | | |z.B. "de" |     |-----------+---------------------------------------------------| |YY |Länder-Code laut ISO 3166 (in Großbuchstaben) wie | | |z.B. "DE" | |-----------+---------------------------------------------------| |ZZZZ |Zeichenkodierung (am besten immer auf "UTF-8" | | |setzen) | +---------------------------------------------------------------+ Tabelle 1.19. Liste mit Empfehlungen zum Gebietsschema +----------------------------------------------------------+ |empfohlenes Gebietsschema| Sprache (Gebiet) | |-------------------------+--------------------------------| |en_US.UTF-8 |Englisch (USA) | |-------------------------+--------------------------------| |en_GB.UTF-8 |Englisch (Großbritannien) | |-------------------------+--------------------------------| |fr_FR.UTF-8 |Französisch (Frankreich) | |-------------------------+--------------------------------| |de_DE.UTF-8 |Deutsch (Deutschland) | |-------------------------+--------------------------------| |it_IT.UTF-8 |Italienisch (Italien) | |-------------------------+--------------------------------| |es_ES.UTF-8 |Spanisch (Spanien) | |-------------------------+--------------------------------|     |ca_ES.UTF-8 |Katalanisch (Spanien) | |-------------------------+--------------------------------| |sv_SE.UTF-8 |Schwedisch (Schweden) | |-------------------------+--------------------------------| |pt_BR.UTF-8 |Portugiesisch (Brasilien) | |-------------------------+--------------------------------| |ru_RU.UTF-8 |Russisch (Russland) | |-------------------------+--------------------------------| |zh_CN.UTF-8 |Chinesisch (Volksrepublik China)| |-------------------------+--------------------------------| |zh_TW.UTF-8 |Chinesisch (Taiwan) | |-------------------------+--------------------------------| |ja_JP.UTF-8 |Japanisch (Japan) | |-------------------------+--------------------------------| |ko_KR.UTF-8 |Koreanisch (Republik Korea) | |-------------------------+--------------------------------| |vi_VN.UTF-8 |Vietnamesisch (Vietnam) | +----------------------------------------------------------+     Eine typische Befehlsausführung verwendet eine Shell-Sequenz wie die folgende: $ echo $LANG en_US.UTF-8     $ date -u Wed 19 May 2021 03:18:43 PM UTC $ LANG=fr_FR.UTF-8 date -u mer. 19 mai 2021 15:19:02 UTC     Hier wird das Programm date(1) mit verschiedenen Gebietsschema-Einstellungen ausgeführt. * Beim ersten Befehl ist "$LANG" auf den System-locale-Standardwert "en_US.UTF-8" gesetzt.     * Beim zweiten Befehl ist "$LANG" auf den französischen UTF-8-locale-Wert "fr_FR.UTF-8" gesetzt. Die meisten Befehlsausführungen haben keine voreingestellten     Definitionen für Umgebungsvariablen. Bei dem obigen Beispiel können Sie alternativ auch folgendes ausführen: $ LANG=fr_FR.UTF-8     $ date -u mer. 19 mai 2021 15:19:24 UTC Tipp     Wenn Sie mit einem nicht auf Englisch eingerichteten System einen Fehlerbericht einreichen, ist es eine gute Idee, die nötigen Befehle mit "en_US.UTF-8" als Gebietsschema laufen zu lassen und zu überprüfen.     Tolle Details zur Konfiguration des Gebietsschemas finden Sie in Abschnitt 8.1, „Das Gebietsschema (Locale)“. 1.5.3. Die "$PATH"-Variable Wenn Sie einen Befehl in die Shell eingeben, sucht die Shell in den durch die Umgebungsvariable "$PATH" definierten     Verzeichnissen nach diesem Befehl. Der Wert der Umgebungsvariablen "$PATH" wird auch als Shell-Suchpfad bezeichnet. In der Standard-Debian-Installation enthält die Umgebungsvariable "$PATH" bei normalen Benutzerkonten nicht die Verzeichnisse "/usr     /sbin" und "/usr/sbin". Zum Beispiel muss der ifconfig-Befehl mit dem vollständigen Pfad aufgerufen werden, also "/usr/sbin/ ifconfig". Ähnlich dazu ist der ip-Befehl in "/usr/bin" abgelegt.     Sie können die Umgebungsvariable "$PATH" der Bash-Shell über die Dateien "~/.bash_profile" oder "~/.bashrc" verändern. 1.5.4. Die "$HOME"-Variable Viele Befehle speichern Konfigurationsdateien im Heimatverzeichnis des jeweiligen Benutzers. Über diese läßt sich     das Verhalten der Befehle anpassen. Der Ort des Heimatverzeichnisses ist in der Umgebungsvariable "$HOME" gespeichert. Tabelle 1.20. Liste der Werte von "$HOME" +---------------------------------------------------------------+ |Wert von "$HOME" | Situation bei Programmausführung | |-----------------+---------------------------------------------| |/ |Programm ausgeführt vom init-Prozess (Daemon)| |-----------------+---------------------------------------------| |/root |Programm ausgeführt von der root-Shell | |-----------------+---------------------------------------------| |/home/ |Programm ausgeführt von der Shell des |     |normaler_benutzer|normalen Benutzers | |-----------------+---------------------------------------------| |/home/ |Programm ausgeführt vom GUI-Desktop-Menü des | |normaler_benutzer|normalen Benutzers | |-----------------+---------------------------------------------| |/home/ |Programm ausgeführt von root mittels "sudo | |normaler_benutzer|programm" | |-----------------+---------------------------------------------| |/root |Programm ausgeführt von root mittels "sudo -H| | |programm" | +---------------------------------------------------------------+ Tipp     Die Shell expandiert "~/" zum Heimatverzeichnis des aktuellen Benutzers, also "$HOME/", und "~foo/" zum Heimatverzeichnis des Benutzers foo, also "/home/foo/".     Schauen Sie in Abschnitt 12.1.5, „Shell-Umgebungsvariablen“, wenn $HOME für Ihr Programm nicht verfügbar ist. 1.5.5. Befehlszeilen-Optionen Einige Befehle akzeptieren Argumente. Argumente, die mit "-" oder     "--" beginnen, werden Optionen genannt und steuern das Verhalten des Befehls. $ date     Thu 20 May 2021 01:08:08 AM JST $ date -R Thu, 20 May 2021 01:08:12 +0900     Hier ändert das Befehlszeilen-Argument "-R" das Verhalten von date(1) zwecks Ausgabe einer RFC2822-konformen Datumsangabe. 1.5.6. Shell-Glob Oft möchten Sie einen Befehl auf eine Gruppe von Dateien     anwenden, ohne all die Dateinamen einzutippen. Die Dateinamen-Suchmuster mittels Shell-Glob (manchmal auch Wildcards genannt) erfüllen diese Bedürfnisse. Tabelle 1.21. Shell-Glob-Suchmuster +---------------------------------------------------------------+ |Shell-Glob-Suchmuster| Beschreibung der Regel | |---------------------+-----------------------------------------| |* |Dateiname (oder Segment), der nicht mit | | |"." beginnt | |---------------------+-----------------------------------------| |.* |Dateiname (oder Segment), der mit "." | | |beginnt | |---------------------+-----------------------------------------|     |? |genau ein Zeichen | |---------------------+-----------------------------------------| |[…] |genau eins der in Klammern | | |eingeschlossenen Zeichen | |---------------------+-----------------------------------------| |[a-z] |genau ein Zeichen von denen zwischen "a" | | |und "z" | |---------------------+-----------------------------------------| |[^…] |genau ein Zeichen von denen, die nicht in| | |Klammern eingeschlossen sind (außer "^") | +---------------------------------------------------------------+     Probieren Sie zum Beispiel folgendes: $ mkdir junk; cd junk; touch 1.txt 2.txt 3.c 4.h .5.txt ..6.txt $ echo *.txt 1.txt 2.txt $ echo * 1.txt 2.txt 3.c 4.h $ echo *.[hc]     3.c 4.h $ echo .* . .. .5.txt ..6.txt $ echo .*[^.]* .5.txt ..6.txt $ echo [^1-3]* 4.h $ cd ..; rm -rf junk     Weitere Details finden Sie in glob(7). Anmerkung     Anders als die normale Dateinamenerweiterung der Shell findet das Shell-Suchmuster "*", das in find(1) mit -name abgefragt wird, den führenden "." des Dateinamens (neue POSIX-Funktionalität). Anmerkung     bash kann dahingehend angepasst werden, sein glob-Verhalten mittels der integrierten shopt-Optionen wie "dotglob", "noglob", "nocaseglob", "nullglob", "extglob" usw. zu verändern. Lesen Sie dazu bash(1). 1.5.7. Rückgabewert eines Befehls     Jeder Befehl gibt seinen Beendigungsstatus (Exit-Status, Variable: "$?") als Rückgabewert zurück. Tabelle 1.22. Befehls-Beendigungs-Codes +---------------------------------------------------------------+ |Befehls-Beendigungsstatus| numerischer | logischer | | | Rückgabewert | Rückgabewert |     |-------------------------+-------------------+-----------------| |Erfolg |Null, 0 |WAHR | |-------------------------+-------------------+-----------------| |Fehler |nicht-Null, -1 |FALSCH | +---------------------------------------------------------------+     Probieren Sie zum Beispiel folgendes: $ [ 1 = 1 ] ; echo $?     0 $ [ 1 = 2 ] ; echo $? 1 Anmerkung     Bitte beachten Sie, dass im logischen Zusammenhang für die Shell Erfolg als logisches WAHR betrachtet wird, was 0 (Null) als Wert bedeutet. Dies ist nicht ganz intuitiv und daher soll hier daran erinnert werden. 1.5.8. Typische Befehlssequenzen und Shell-Weiterleitungen     Versuchen Sie, sich folgende Shell-Befehlsfolgen zu merken, die in einer Zeile eingegeben werden: Tabelle 1.23. Abfolgen von Shell-Befehlen +---------------------------------------------------------------+ |Befehlsabfolge| Beschreibung | |--------------+------------------------------------------------| |befehl & |Ausführung von befehl im Hintergrund in einer | | |Unter-Shell | |--------------+------------------------------------------------| |befehl1 | |Weiterleitung (pipe) der Standardausgabe von | |befehl2 |befehl1 an die Standardeingabe von befehl2 ( | | |gleichzeitige Ausführung) | |--------------+------------------------------------------------| | |Weiterleitung (pipe) der Standardausgabe und | |befehl1 2>&1 ||Standardfehler von befehl1 an die | |befehl2 |Standardeingabe von befehl2 (gleichzeitige | | |Ausführung) | |--------------+------------------------------------------------| |befehl1 ; |Aufeinander folgende Ausführung von befehl1 und | |befehl2 |befehl2 | |--------------+------------------------------------------------| | |Ausführung von befehl1; falls erfolgreich, | |befehl1 && |anschließende Ausführung von befehl2 (Erfolg | |befehl2 |zurückgeben, wenn beide (befehl1 und befehl2) | | |erfolgreich sind) | |--------------+------------------------------------------------| | |Ausführung von befehl1; falls nicht erfolgreich,| |befehl1 || |anschließende Ausführung von befehl2 (Erfolg | |befehl2 |zurückgeben, wenn befehl1 oder befehl2 |     | |erfolgreich ist) | |--------------+------------------------------------------------| |befehl > foo |Weiterleitung der Standardausgabe von befehl in | | |die Datei foo (Datei überschreiben) | |--------------+------------------------------------------------| |befehl 2> foo |Weiterleitung des Standardfehlers von befehl in | | |die Datei foo (Datei überschreiben) | |--------------+------------------------------------------------| |befehl >> foo |Weiterleitung der Standardausgabe von befehl in | | |die Datei foo (an Datei anhängen) | |--------------+------------------------------------------------| |befehl 2>> foo|Weiterleitung des Standardfehlers von befehl in | | |die Datei foo (an Datei anhängen) | |--------------+------------------------------------------------| |befehl > foo |Weiterleitung der Standardausgabe und | |2>&1 |Standardfehler von befehl in die Datei foo | |--------------+------------------------------------------------| |befehl < foo |Weiterleitung der Standardeingabe von befehl in | | |die Datei foo | |--------------+------------------------------------------------| |befehl << |Weiterleitung der Standardeingabe von befehl in | |begrenzung |die folgenden Zeilen, bis "begrenzung" erreicht | | |ist | |--------------+------------------------------------------------| | |Weiterleitung der Standardeingabe von befehl in | |befehl <<- |die folgenden Zeilen, bis "begrenzung" erreicht | |delimiter |ist (die führenden Tab-Zeichen werden von den | | |Eingabezeilen entfernt) | +---------------------------------------------------------------+ Das Debian-System ist ein Multi-Tasking-System. Hintergrundprozesse erlauben es Benutzern, mehrere Programme in     einer einzigen Shell laufen zu lassen. Zur Verwaltung von Hintergrundprozessen werden die Shell-Builtins jobs, fg, bg und kill benutzt. Bitte lesen Sie die entsprechenden Abschnitte von bash(1) bezüglich "SIGNALS", "JOB CONTROL" und builtins(1).     Probieren Sie zum Beispiel folgendes:     $ foo $ exec 3bar # open files     $ cat <&3 >&4 # redirect stdin to 3, stdout to 4 $ exec 3<&- 4>&- # close files $ cat bar Hello     Die Datei-Deskriptoren 0-2 sind fest vordefiniert. Tabelle 1.24. Vordefinierte Datei-Deskriptoren +---------------------------------------+ |Gerät | Beschreibung |Datei-Deskriptor| |------+---------------+----------------|     |stdin |Standardeingabe|0 | |------+---------------+----------------| |stdout|Standardausgabe|1 | |------+---------------+----------------| |stderr|Standardfehler |2 | +---------------------------------------+ 1.5.9. Befehls-Alias     Sie können einen Alias für häufig verwendete Befehle definieren.     Probieren Sie zum Beispiel folgendes:     $ alias la='ls -la'     Jetzt funktioniert "la" als Kurzform für "ls -la", was alle Dateien in einem langen Listenformat auflistet. Sie können alle vorhandenen Alias-Definitionen mit alias anzeigen     (lesen Sie dazu in bash(1) den Abschnitt "SHELL BUILTIN COMMANDS"). $ alias     ... alias la='ls -la' Sie können den exakten Pfad oder die Identität eines Befehls mit     type herausfinden (lesen Sie dazu in bash(1) den Abschnitt "SHELL BUILTIN COMMANDS").     Probieren Sie zum Beispiel folgendes: $ type ls ls is hashed (/bin/ls) $ type la     la is aliased to ls -la $ type echo echo is a shell builtin $ type file file is /usr/bin/file Hier wurde kürzlich nach "ls" gesucht, nach "file" hingegen     nicht, daher ist "ls" "hashed", d.h. die Shell hat einen internen Eintrag für einen schnellen Zugriff auf den Speicherort des "ls"-Befehls. Tipp     Lesen Sie Abschnitt 9.3.6, „Farbige Befehle“. 1.6. Unix-ähnliche Textverarbeitung In Unix-ähnlichen Arbeitsumgebungen können     Textverarbeitungsvorgänge durchgeführt werden, indem der Text durch Abfolgen mehrerer Standardwerkzeuge geleitet wird. Dies war eine weitere bedeutende Unix-Innovation. 1.6.1. Unix-Textverarbeitungswerkzeuge     Es gibt ein paar Standard-Textverarbeitungswerkzeuge, die auf Unix-ähnlichen Systemen sehr oft verwendet werden. * Ohne Verwendung regulärer Ausdrücke: + cat(1) verkettet Dateien und gibt den vollständigen Inhalt aus. + tac(1) verkettet Dateien und gibt den Inhalt in umgekehrter Reihenfolge aus. + cut(1) wählt Teile von Zeilen und ausgegebenen Inhalten aus. + head(1) gibt die ersten Zeilen von Dateien aus. + tail(1) gibt die letzten Zeilen von Dateien aus. + sort(1) sortiert Zeilen von Textdateien. + uniq(1) entfernt doppelte Zeilen aus einer sortierten Datei. + tr(1) übersetzt oder löscht Zeichen. + diff(1) vergleicht Dateien Zeile für Zeile. * Mit Verwendung grundlegender regulärer Ausdrücke (basic regular expressions / BRE) als Standardeinstellung: + ed(1) ist ein primitiver Zeilen-Editor.     + sed(1) ist ein Stream-Editor. + grep(1) findet Text über Suchmuster. + vim(1) ist ein Bildschirm-gestützter Editor. + emacs(1) ist ein Bildschirm-gestützter Editor (leicht erweiterte BRE) * Mit Verwendung erweiterter regulärer Ausdrücke (extended regular expressions / ERE): + awk(1) führt einfache Textverarbeitung durch. + egrep(1) findet Text über Suchmuster. + tcl(3tcl) kann jede erdenkliche Art von Textverarbeitung durchführen. Lesen Sie dazu re_syntax(3). Oft zusammen mit tk(3tk) verwendet. + perl(1) kann jede erdenkliche Art von Textverarbeitung durchführen. Lesen Sie dazu perlre(1). + pcregrep(1) aus dem pcregrep-Paket findet Text über Perl-kompatible reguläre Ausdrücke (PCRE). + python(1) mit dem re-Modul kann jede erdenkliche Art von Textverarbeitung durchführen. Lesen Sie dazu "/usr/share/ doc/python/html/index.html".     Wenn Sie sich nicht sicher sind, was genau diese Befehle tun, verwenden Sie bitte "man befehl", um es selbst herauszufinden. Anmerkung Sortierreihenfolge und Bereichsausdruck sind abhängig vom     Gebietsschema (Locale). Wenn Sie das traditionelle Verhalten eines Befehls erreichen möchten, verwenden Sie die Locale C oder C.UTF-8 statt der normalen UTF-8-Locales (siehe Abschnitt 8.1, „Das Gebietsschema (Locale)“). Anmerkung Die regulären Perl-Erweiterungen (perlre(1)), Perl-kompatiblen     regulären Ausdrücke (PCRE) sowie regulären Python-Erweiterungen (bereitgestellt durch das re-Modul) enthalten viele gängige Erweiterungen zu den normalen erweiterten regulären Ausdrücken (ERE). 1.6.2. Reguläre Ausdrücke Reguläre Ausdrücke werden in vielen Textverarbeitungswerkzeugen     verwendet. Sie sind den Shell Globs ähnlich, aber viel komplexer und leistungsfähiger.     Ein regulärer Ausdruck beschreibt ein Muster und besteht aus Textzeichen und Metazeichen. Ein Metazeichen ist einfach ein Zeichen mit einer speziellen     Bedeutung. Es gibt zwei Hauptgruppen, BRE und ERE, abhängig von den Textwerkzeugen, wie unten beschrieben. Tabelle 1.25. Metazeichen für BRE und ERE +---------------------------------------------------------------+ | BRE | ERE | Beschreibung des regulären Ausdrucks | |--------+------+-----------------------------------------------| |\ . [ ] |\ . [ | | |^ $ * |] ^ $ |allgemeine Metazeichen | | |* | | |--------+------+-----------------------------------------------| |\+ \? \(| | | |\) \{ \}|  |nur bei BRE: durch "\" geschützte Metazeichen | |\| | | | |--------+------+-----------------------------------------------| | |+ ? ( |nur bei ERE: nicht durch "\" geschützte | |  |) { } |Metazeichen | | || | | |--------+------+-----------------------------------------------| |c |c |findet Nicht-Metazeichen "c" | |--------+------+-----------------------------------------------| |\c |\c |findet den Buchstaben "c", auch wenn "c" selbst| | | |ein Metazeichen ist | |--------+------+-----------------------------------------------| |. |. |findet jegliches Zeichen inklusive Newline | |--------+------+-----------------------------------------------| |^ |^ |Position am Anfang einer Zeichenkette | |--------+------+-----------------------------------------------|     |$ |$ |Position am Ende einer Zeichenkette | |--------+------+-----------------------------------------------| |\< |\< |Position am Anfang eines Wortes | |--------+------+-----------------------------------------------| |\> |\> |Position am Ende eines Wortes | |--------+------+-----------------------------------------------| |[abc…] |[abc…]|findet irgendein Zeichen von "abc…" | |--------+------+-----------------------------------------------| |[^abc…] |[^ |findet irgendein Zeichen außer "abc…" | | |abc…] | | |--------+------+-----------------------------------------------| |r* |r* |findet keinen oder mehrere reguläre Ausdrücke | | | |festgelegt durch "r" | |--------+------+-----------------------------------------------| |r\+ |r+ |findet einen oder mehrere reguläre Ausdrücke | | | |festgelegt durch "r" | |--------+------+-----------------------------------------------| |r\? |r? |findet keinen oder einen regulären Ausdruck | | | |festgelegt durch "r" | |--------+------+-----------------------------------------------| |r1\|r2 |r1|r2 |findet einen der regulären Ausdrücke festgelegt| | | |durch "r1" oder "r2" | |--------+------+-----------------------------------------------| |\(r1\|r2|(r1| |findet einen der regulären Ausdrücke festgelegt| |\) |r2) |durch "r1" oder "r2" und behandelt es als einen| | | |in Klammern gesetzten regulären Ausdruck | +---------------------------------------------------------------+ Die regulären Ausdrücke von emacs gehören grundsätzlich zu den     BRE, sind aber erweitert worden, damit "+" und "?" wie bei den ERE als Metazeichen behandelt werden. Es ist daher nicht nötig, sie bei den regulären Ausdrücken von emacs mit "\" zu schützen.     grep(1) kann verwendet werden, um eine Textsuche mittels regulärer Ausdrücke durchzuführen.     Probieren Sie zum Beispiel folgendes: $ egrep 'GNU.*LICENSE|Yoyodyne' /usr/share/common-licenses/GPL     GNU GENERAL PUBLIC LICENSE GNU GENERAL PUBLIC LICENSE Yoyodyne, Inc., hereby disclaims all copyright interest in the program Tipp     Lesen Sie Abschnitt 9.3.6, „Farbige Befehle“. 1.6.3. Ersetzungsausdrücke     Bei den Ersetzungsausdrücken haben einige Zeichen spezielle Bedeutungen. Tabelle 1.26. Der Ersetzungsausdruck +---------------------------------------------------------------+ |Ersetzungsausdruck| Beschreibung des Textes, der den | | | Ersetzungsausdruck ersetzen soll | |------------------+--------------------------------------------|     |& |was der reguläre Ausdruck gefunden hat | | |(benutzen Sie \& in emacs) | |------------------+--------------------------------------------| |\n |was der n-te in Klammern gesetzte reguläre | | |Ausdruck gefunden hat ("n" ist ein Zahl) | +---------------------------------------------------------------+     Bei Ersetzungsausdrücken für Perl wird "$&" statt "&" verwendet und "$n" statt "\n".     Probieren Sie zum Beispiel folgendes: $ echo zzz1abc2efg3hij4 | \ sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/=&=/' zzz=1abc2efg3hij4= $ echo zzz1abc2efg3hij4 | \ sed -E -e 's/(1[a-z]*)[0-9]*(.*)$/=&=/' zzz=1abc2efg3hij4= $ echo zzz1abc2efg3hij4 | \ perl -pe 's/(1[a-z]*)[0-9]*(.*)$/=$&=/'     zzz=1abc2efg3hij4= $ echo zzz1abc2efg3hij4 | \ sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/\2===\1/' zzzefg3hij4===1abc $ echo zzz1abc2efg3hij4 | \ sed -E -e 's/(1[a-z]*)[0-9]*(.*)$/\2===\1/' zzzefg3hij4===1abc $ echo zzz1abc2efg3hij4 | \ perl -pe 's/(1[a-z]*)[0-9]*(.*)$/$2===$1/' zzzefg3hij4===1abc Achten Sie hier bitte besonders auf die Art der in Klammern     gesetzten regulären Ausdrücke und wie die gefundenen Zeichenketten bei der Textersetzung mit verschiedenen Werkzeugen genutzt werden.     Diese regulären Ausdrücke können in einigen Editoren auch zur Cursor-Verschiebung und Textersetzung verwendet werden. Der Back-Slash "\" am Ende der Zeile in der Shell-Befehlszeile     schützt das Newline als Leerraum-Zeichen und erlaubt die Fortsetzung der Shell-Befehlszeileneingabe in die nächste Zeile.     Bitte lesen Sie alle zugehörigen Handbuchseiten, um diese Befehle zu erlernen. 1.6.4. Globale Ersetzungen mit regulären Ausdrücken     Der Befehl ed(1) ersetzt hier alle Vorkommen von "VON_REGEX" in "datei" durch "ZU_TEXT". $ ed file < input to main shell Sat 23 Aug 2003 08 30 36 +0200 $ unset IFS # reset IFS to the default $ echo $(date -R) Sat, 23 Aug 2003 08:30:50 +0200 1.6.6. Skript-Schnipsel für die Befehlsweiterleitung     Die folgenden Befehlsketten tun nette Dinge als Teil einer Weiterleitung: Tabelle 1.27. Liste von Skript-Schnipseln für die Befehlsweiterleitung +---------------------------------------------------------------+ | Skript-Schnipsel | | | (in einer Zeile | Auswirkung des Befehls | | eingeben) | | |-------------------+-------------------------------------------| |find /usr -print |findet alle Dateien in "/usr" | |-------------------+-------------------------------------------| |seq 1 100 |gibt die Zahlen 1 bis 100 aus | |-------------------+-------------------------------------------| | |führt wiederholt aus, jeweils mit | || xargs -n 1 befehl|jedem Element aus der Weiterleitung als | | |Argument | |-------------------+-------------------------------------------| | |splittet durch Leerraum getrennte Elemente | || xargs -n 1 echo |aus der Weiterleitung in einzelne Zeilen | | |auf | |-------------------+-------------------------------------------| || xargs echo |führt alle Zeilen aus der Weiterleitung in | | |eine Zeile zusammen | |-------------------+-------------------------------------------| || grep -e |extrahiert Zeilen aus der Weiterleitung, | |regex_muster |die das Regex-Suchmuster enthalten | |-------------------+-------------------------------------------| || grep -v -e |extrahiert Zeilen aus der Weiterleitung, | |regex_muster |die nicht das Regex-Suchmuster enthalten | |-------------------+-------------------------------------------| | |extrahiert das dritte Feld aus der | || cut -d: -f3 - |Weiterleitung, separiert durch ":" (z.B. | | |aus der passwd-Datei) |     |-------------------+-------------------------------------------| || awk '{ print $3 }|extrahiert das dritte Feld aus der | |' |Weiterleitung, separiert durch | | |Leerraum-Zeichen | |-------------------+-------------------------------------------| || awk -F'\t' '{ |extrahiert das dritte Feld aus der | |print $3 }' |Weiterleitung, separiert durch Tab | |-------------------+-------------------------------------------| || col -bx |entfernt Backspace und expandiert Tabs zu | | |Leerzeichen | |-------------------+-------------------------------------------| || expand - |expandiert Tabs | |-------------------+-------------------------------------------| || sort| uniq |sortiert Inhalte und entfernt Duplikate | |-------------------+-------------------------------------------| || tr 'A-Z' 'a-z' |konvertiert Großschreibung in | | |Kleinschreibung | |-------------------+-------------------------------------------| || tr -d '\n' |führt mehrere Zeilen in eine zusammen | |-------------------+-------------------------------------------| || tr -d '\r' |entfernt CR (carriage return/Wagenrücklauf)| |-------------------+-------------------------------------------| || sed 's/^/# /' |fügt "#" zum Anfang jeder Zeile hinzu | |-------------------+-------------------------------------------| || sed 's/\.ext//g' |entfernt ".ext" | |-------------------+-------------------------------------------| || sed -n -e 2p |gibt die zweite Zeile aus | |-------------------+-------------------------------------------| || head -n 2 - |gibt die ersten zwei Zeilen aus | |-------------------+-------------------------------------------| || tail -n 2 - |gibt die letzten zwei Zeilen aus | +---------------------------------------------------------------+ Ein einzeiliges Shell-Skript kann durch Verwendung von find(1) und xargs(1) über Schleifen viele Dateien in Folge abarbeiten und     so ziemlich komplexe Aufgaben erledigen. Lesen Sie dazu Abschnitt 10.1.5, „Aufrufe für die Auswahl von Dateien“ und Abschnitt 9.4.9, „Einen Befehl wiederholt mit einer Schleife über verschiedene Dateien ausführen“. Wenn die Verwendung des interaktiven Shell-Modus' zu kompliziert     wird, ziehen Sie bitte in Erwägung, ein Shell-Skript zu schreiben (weiteres dazu in Abschnitt 12.1, „Das Shell-Skript“). --------------------------------------------------------------------- ^[1] Auch ältere vim-Versionen können im schlauen     "nocompatible"-Modus genutzt werden, wenn Sie mit der Option "-N" gestartet werden. Kapitel 2. Debian-Paketmanagement Anmerkung Dieses Kapitel geht davon aus, dass Bookworm die aktuelle stabile Veröffentlichung ist.     The data source of the APT system is collectively refered as the source list in this document . This can be defined anywhere in the "/etc/apt/sources.list" file, "/etc/apt/sources.list.d/ *.list" files, or "/etc/apt/sources.list.d/*.source" files. 2.1. Grundvoraussetzungen für das Debian-Paketmanagement 2.1.1. Debian package management system Debian ist eine Organisation Freiwilliger, die konsistente     Distributionen vorkompilierter Binärpakete von freier Software erstellt und sie über ihr Archiv verteilt.     Das Debian-Archiv wird von vielen Spiegel-Servern via HTTP und FTP bereitgestellt. Es ist auch als CD-ROM/DVD erhältlich. Das derzeit empfohlene Debian-Werkzeug für Paketmanagement, das     all diese Ressourcen nutzen kann, ist das Advanced Packaging Tool (APT). Debians Paketmanagement-System, ermöglicht dem Nutzer (wenn es     korrekt genutzt wird), konsistente Sätze von Binärpaketen auf dem System zu installieren. Derzeit sind für die amd64-Architektur 74165 Pakete verfügbar. Das Debian-Paketmanagement-System hat eine reichhaltige Geschichte und bietet eine Auswahl an     Frontend-Benutzerprogrammen, die genutzt werden können sowie an verschiedenen Varianten des Archivzugriffs. Derzeit empfehlen wir folgendes: * apt(8) für alle interaktiven Befehlszeilen-Operationen, inklusive Paketinstallationen und -entfernungen sowie Distributions-Upgrades; * apt-get(8) für Paketverwaltungsoperationen mittels Skripten;     auch eine Ausweichlösung für den Fall, dass apt nicht verfügbar ist (z.B. auf älteren Debian-Systemen); * aptitude(8) für ein interaktives Text-Interface zur Verwaltung der installierten Pakete und für die Suche nach verfügbaren Paketen. Tabelle 2.1. Liste von Debians Paketmanagement-Werkzeugen +---------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |-------------------+------+-----+------------------------------| | |V:912,| |niederschwelliges | |dpkg |I:999 |6388 |Paketmanagement-System für | | | | |Debian (datei-basiert) | |-------------------+------+-----+------------------------------| | | | |APT-Frontend zur | |apt |V:865,|4318 |Paketverwaltung mit | | |I:999 | |text-basierter Bedienung: apt/| | | | |apt-get/apt-cache | |-------------------+------+-----+------------------------------| | | | |APT-Frontend für interaktives | |aptitude |V:48, |4389 |Paketmanagement mit | | |I:253 | |Vollbildschirm-Konsole: | | | | |aptitude(8) | |-------------------+------+-----+------------------------------| | | | |APT-Frontend zur Installation | |tasksel |V:34, |347 |von vorausgewählten | | |I:980 | |Programmgruppen (Tasks): | | | | |tasksel(8) | |-------------------+------+-----+------------------------------| | | | |Erweiterungspaket für APT, um | | |V:182,| |die automatische Installation | |unattended-upgrades|I:278 |301 |von |     | | | |Sicherheits-Aktualisierungen | | | | |zu ermöglichen | |-------------------+------+-----+------------------------------| |gnome-software |V:153,|3085 |Software Center für GNOME | | |I:263 | |(grafisches Frontend für APT) | |-------------------+------+-----+------------------------------| | |V:46, | |grafischer Paketmanager | |synaptic |I:375 |7627 |(grafisches GTK-Frontend für | | | | |APT) | |-------------------+------+-----+------------------------------| | | | |APT-Hilfsprogramme: | |apt-utils |V:379,|1065 |apt-extracttemplates(1), | | |I:998 | |apt-ftparchive(1) und | | | | |apt-sortpkgs(1) | |-------------------+------+-----+------------------------------| | |V:358,| |Benachrichtigungswerkzeug für | |apt-listchanges |I:872 |398 |die Änderungshistorie von | | | | |Paketen | |-------------------+------+-----+------------------------------| |apt-listbugs |V:6, |477 |Auflistung kritischer Fehler | | |I:8 | |vor jeder APT-Installation | |-------------------+------+-----+------------------------------| |apt-file |V:17, |89 |APT-Paketsuch-Werkzeug - | | |I:67 | |Befehlszeilen-Interface | |-------------------+------+-----+------------------------------| |apt-rdepends |V:0, |39 |rekursive Auflistung von | | |I:5 | |Paketabhängigkeiten | +---------------------------------------------------------------+ 2.1.2. Paketkonfiguration     Hier einige wichtige Punkte für die Paketkonfiguration auf einem Debian-System: * Die händische Konfiguration durch den Systemadministrator wird respektiert. In anderen Worten: das Paketkonfigurationssystem führt keine aufdringliche Konfiguration durch, nur weil es einfach wäre. * Jedes Paket enthält sein eigenes Konfigurationsskript mit einer standardisierten Benutzerschnittstelle namens debconf (7), um Sie bei der Erstinstallation des Pakets zu unterstützen. * Debian-Entwickler versuchen ihr Bestes, um mittels der Paketkonfigurationsskripte für einen fehlerfreien Ablauf der     Paketaktualisierungen zu sorgen. * Dem Systemadministrator steht die volle Funktionalität der paketierten Software zur Verfügung, aber Funktionen mit Sicherheitsrisiken sind standardmäßig deaktiviert. * Wenn Sie von Hand einen Dienst aktivieren und so Sicherheitsrisiken hervorrufen, sind Sie selbst für die Beherrschung der Risiken verantwortlich. * Esoterische Konfigurationen könnten manuell durch den Systemadministrator aktiviert worden sein. Dies kann Behinderungen mit beliebten, grundlegenden Systemkonfigurations-Programmen verursachen. 2.1.3. Grundsätzliche Vorsichtsmaßnahmen Warnung Installieren Sie nicht Pakete aus einer wahllosen Mischung von     Debian-Suiten (Stable, Testing, Unstable, Experimental). Sie können dadurch die Paketkonsistenz beschädigen und deren Korrektur erfordert ein tiefes Verständnis der Systemverwaltung wie Compiler-ABI, Bibliotheks-Versionen, Interpreter-Funktionalitäten usw. The newbie Debian system administrator should stay with the     stable release of Debian while applying only security updates. Until you understand the Debian system very well, you should follow the following precautions. * Do not include testing or unstable in the source list. * Do not mix standard Debian with other non-Debian archives such as Ubuntu in the source list . * Erstellen Sie keine "/etc/apt/preferences"-Datei. * Ändern Sie nicht über Konfigurationsdateien das Standardverhalten der Paketmanagement-Werkzeuge, wenn Sie die vollständigen Auswirkungen nicht kennen. * Installieren Sie nicht irgendwelche Pakete mit "dpkg -i     irgendein_paket". * Installieren Sie niemals irgendwelche Pakete mit "dpkg --force-all -i irgendein_paket". * Löschen oder verändern Sie keine Dateien in "/var/lib/dpkg/". * Überschreiben Sie keine Systemdateien, indem Sie Software-Programme installieren, die direkt aus den Quellen übersetzt wurden. + Installieren Sie solche Pakete, falls nötig, in "/usr/ local" oder "/opt". The non-compatible effects caused by violating above precautions     to the Debian package management system may leave your system unusable.     Ein ernsthafter Debian-Systemadministrator, der missionskritische Server betreibt, sollte besondere Vorsicht walten lassen. * Installieren Sie nicht irgendwelche Pakete von Debian, die Sicherheitsaktualisierungen beinhalten, ohne sie unter sicheren Bedingungen sorgfältig mit Ihrer speziellen Konfiguration getestet zu haben.     + Sie als Systemadministrator sind am Ende für Ihr System verantwortlich. + Die lange Stabilitäts-Historie des Debian-Systems ist für sich alleine keine Garantie. 2.1.4. Leben mit den ewigen Aktualisierungen Achtung     Für Ihre Produktions-Server wird die Stable-Suite inklusive der Sicherheitsaktualisierungen empfohlen. Dasselbe gilt für Desktop-Rechner, für die nur eingeschränkt administrative Betreuung gewährleistet ist. Trotz der obigen Warnungen weiß ich, dass viele Leser dieses     Dokuments trotzdem die neuere Testing- oder Unstable-Suite nutzen möchten. Die Erleuchtung, die wir Ihnen mit den folgenden Informationen     bieten, bewahrt Sie vor der ewigen karmischen Qual der Upgrade-Hölle und ermöglicht Ihnen, das Debian-Nirvana zu erreichen.     Diese Liste zielt auf ein selbst-administriertes Arbeitsplatzsystem ab: * Nutzen Sie die Testing-Suite, da dies letztlich ein Rolling-Release ist, das von Debians Qualitässicherungs-Infrastruktur profitiert, wie Debians Continuous-Integration-Unterstützung, der Regel, dass nur Quellcode hochgeladen werden kann sowie die Nachverfolgung von Versionsübergängen bei Bibliotheken. Die Pakete in der Testing-Suite werden häufig genug aktualisiert, um stets die neuesten Funktionalitäten bieten zu können.     * Set the codename corresponding to the testing suite ("trixie" during the bookworm-as-stable release cycle) in the source list. * Manually update this codename in the source list to the new one only after assessing situation by yourself for about a month after the major suite release. The Debian user and developer mailing list are good sources of information for this, too. Die Verwendung von Unstable wird nicht empfohlen. Die Unstable-Suite ist für Entwickler gut geeignet zur Fehlersuche in Paketen, bringt aber für normale Arbeitsplatznutzer auch gewisse     unnötige Risiken mit sich. Selbst wenn die Unstable-Suite von Debian die meiste Zeit sehr stabil erscheint, hat es in der Vergangenheit bereits Probleme mit bestimmten Paketen gegeben, von denen einige nicht einfach zu beheben waren. Hier einige Tipps für grundlegende Vorsichtsmaßnahmen, wie Sie     eine schnelle und einfache Systemwiederherstellung bei Fehlern in Debian-Paketen gewährleisten können: * Erstellen Sie ein Dual-boot-fähiges System, das Debians Stable-Suite auf einer anderen Partition installiert hat. * Halten Sie die Installations-CD griffbereit, um davon das Rettungssystem (Rescue mode) nutzen zu können.     * Ziehen Sie in Betracht, apt-listbugs zu installieren, um vor einer Paketaktualisierung relevante Informationen aus der Debian-Fehlerdatenbank (BTS) einsehen zu können. * Lernen Sie genug über die Infrastruktur des Paketsystems, um das Problem umgehen zu können. Achtung     Falls Sie keine dieser Vorsichsmaßnahmen durchführen können, sind Sie möglicherweise nicht bereit für die Testing- oder Unstable-Suite. 2.1.5. Grundlagen über das Debian-Archiv Tipp     Die offiziellen Richtlinien für das Debian-Archiv sind im Debian Policy-Handbuch, Kapitel 2 - The Debian Archive festgeschrieben.     Lassen Sie uns das Debian-Archiv aus der Sicht eines Benutzers betrachten.     For a system user, the Debian archive is accessed using the APT system.     The APT system specifies its data source as the source list and it is described in sources.list(5).     For the bookworm system with the typical HTTP access, the source list in one-line-style as the following: deb http://deb.debian.org/debian/ bookworm main non-free-firmware contrib non-free deb-src http://deb.debian.org/debian/ bookworm main non-free-firmware contrib non-free     deb http://security.debian.org/debian-security bookworm-security main non-free-firmware contrib non-free deb-src http://security.debian.org/debian-security bookworm-security main non-free-firmware contrib non-free     Alternatively, the equivqlent source list in deb822-style as the following. Types: deb deb-src URIs: http://deb.debian.org/debian/ Suites: bookworm Components: main non-free-firmware contrib non-free     Types: deb deb-src URIs: http://security.debian.org/debian-security/ Suites: bookworm-security Components: main non-free-firmware contrib non-free     Key points of the source list are followings. * One-line-style format + It's definition files are in the "/etc/apt/sources.list" file and "/etc/apt/sources.list.d/*.list" files. + Each line defines the data source for the APT system. + Die "deb"-Zeile definiert die Quelle für Binärpakete. + Die "deb-src"-Zeile definiert die Quelle für Quellpakete. + Das erste Argument ist die Wurzel-URL für das Debian-Archiv. + The 2nd argument is the distribution name using either the suite name or the codename. + Das dritte und die darauf folgenden Argumente sind eine Liste gültiger Namen für Bereiche im Debian-Archiv.     * Deb822-style format + It's definition files are in "/etc/apt/sources.list.d/ *.source" files. + Each block of lines separated by a blank line defines the data source for the APT system. + The "Types:" stanza defines the list of types such as "deb" and "deb-src". + The "URIs:" stanza defines the list of root URIs of the Debian archive. + The "Suites:" stanza defines the list of distribution names using either the suite name or the codename. + The "Components:" stanza defines the list of valid archive area names of the Debian archive. The definition for "deb-src" can safely be omitted if it is just     for aptitude which does not access source related meta data. It speeds up the updates of the archive meta data.     The URL can be "https://", "http://", "ftp://", "file://", ….     Lines starting with "#" are comments and ignored. Here, I tend to use codename "bookworm" or "trixie" instead of     suite name "stable" or "testing" to avoid surprises when the next stable is released. Tipp If "sid" is used in the above example instead of "bookworm", the     "deb: http://security.debian.org/ …" line or its deb822 equivalent content for security updates in the source list is not required. This is because there is no security update archive for "sid" (unstable). Here is the list of URL of the Debian archive sites and suite     name or codename used in the configuration file after the bookworm release. Tabelle 2.2. Liste von Debian-Archiv-Seiten +---------------------------------------------------------------------------------------------+ | Archiv-URL | suite name | codename | purpose of repository | |-------------------+-----------------------+-------------------------+-----------------------| |http:// | | |Quasi-static stable | |deb.debian.org/ |stable |bookworm |release after extensive| |debian/ | | |checks | |-------------------+-----------------------+-------------------------+-----------------------| |http:// | | |Dynamic testing release| |deb.debian.org/ |testing |trixie |after decent checks and| |debian/ | | |short waits | |-------------------+-----------------------+-------------------------+-----------------------| |http:// | | |Dynamic unstable | |deb.debian.org/ |unstable |sid |release after minimal | |debian/ | | |checks and no waits | |-------------------+-----------------------+-------------------------+-----------------------| |http:// | | |Pre-release experiments| |deb.debian.org/ |experimental |Nicht verfügbar |by developers | |debian/ | | |(optional, only for | | | | |developer) | |-------------------+-----------------------+-------------------------+-----------------------| |http:// | | |Updates for the next |     |deb.debian.org/ |stable-proposed-updates|bookworm-proposed-updates|stable point release | |debian/ | | |(optional) | |-------------------+-----------------------+-------------------------+-----------------------| | | | |Subset of | |http:// | | |stable-proposed-updates| |deb.debian.org/ |stable-updates |bookworm-updates |suite needing urgent | |debian/ | | |updates such as | | | | |timezone data | | | | |(optional) | |-------------------+-----------------------+-------------------------+-----------------------| |http:// | | |Random collection of | |deb.debian.org/ |stable-backports |bookworm-backports |recompiled packages | |debian/ | | |mostly from the testing| | | | |release (optional) | |-------------------+-----------------------+-------------------------+-----------------------| |http:// | | |Security updates for | |security.debian.org|stable-security |bookworm-security |the stable release | |/debian-security/ | | |(important) | |-------------------+-----------------------+-------------------------+-----------------------| |http:// | | |This isn't actively | |security.debian.org|testing-security |trixie-security |supported nor used by | |/debian-security/ | | |the security team | +---------------------------------------------------------------------------------------------+ Achtung Only pure stable release with security updates provides the best stability. Running mostly stable release mixed with some packages     from testing or unstable release is riskier than running pure unstable release for library version mismatch etc. If you really need the latest version of some programs under stable release, please use packages from stable-updates and backports (see Abschnitt 2.7.4, „Aktualisierungen und Backports“) services. These services must be used with extra care. Achtung Sie sollten grundsätzlich nur eine der Suiten stable, testing oder unstable pro "deb"-Zeile angeben. Wenn Sie irgendeine Kombination von stable, testing und unstable in einer "deb"-Zeile     verwenden, bremst dies die APT-Programme aus, wobei am Ende aber nur das neueste Archiv verwendet wird. Eine Auflistung mehrerer Einträge macht Sinn, wenn die "/etc/apt/preferences"-Datei genutzt wird und dort klare Richtlinien festgelegt sind (lesen Sie dazu Abschnitt 2.7.7, „Tweaking candidate version with apt-pinning“). Tipp     For the Debian system with the stable suite, it is a good idea to include the content with "http://security.debian.org/" in the source list to enable security updates as in the example above. Anmerkung Sicherheitsprobleme im Stable-Archiv werden vom Debian-Sicherheits-Team behoben. Dies war immer ziemlich gründlich und zuverlässig. Sicherheitsprobleme im Testing-Archiv werden unter Umständen durch das Debian-Testing-Sicherheits-Team behoben. Aus verschiedenen Gründen funktioniert dies aber nicht     so gründlich wie für Stable und Sie müssen möglicherweise warten, bis die Pakete mit den Fehlerkorrekturen von Unstable nach Testing migriert sind. Sicherheitsprobleme in Unstable werden durch die jeweiligen Paketbetreuer behoben. Aktiv betreute Unstable-Pakete sind für gewöhnlich in einem ziemlich guten Zustand, da Sicherheitskorrekturen von Upstream mit einfließen. In der Debian Sicherheits-FAQ finden Sie Informationen, wie Debian mit Sicherheitslücken umgeht. Tabelle 2.3. Liste der Debian-Archiv-Bereiche +---------------------------------------------------------------+ | | Anzahl | | | Bereich | der | Kriterien der Paketkomponenten | | | Pakete | | |-----------------+--------+------------------------------------| |main |72806 |DFSG-konform und keine | | | |Abhängigkeiten zu non-free | |-----------------+--------+------------------------------------|     | | |not DFSG compliant, firmware | |non-free-firmware|39 |required for reasonable system | | | |installation experience | |-----------------+--------+------------------------------------| |contrib |356 |DFSG-konform, aber mit | | | |Abhängigkeiten zu non-free | |-----------------+--------+------------------------------------| |non-free |964 |not DFSG compliant and not in | | | |non-free-firmware | +---------------------------------------------------------------+ Die Paketanzahl in obiger Liste gilt für die amd64-Architektur.     Der main-Bereich stellt das Debian-System dar (lesen Sie dazu Abschnitt 2.1.6, „Debian ist zu 100% freie Software“). Die Struktur des Debian-Archivs können am besten erforschen,     indem Sie mit Ihrem Browser die jeweilige Archiv-URL mit einem angehängten dists oder pool besuchen. Die Distribution wird auf zwei Arten referenziert, über die Suite oder über den Codenamen. Das Wort "Distribution" wird in vielen     Dokumentationen synonym zum Namen der Suite verwendet. Die Beziehung zwischen Suite und Codename kann wie folgt zusammengefasst werden: Tabelle 2.4. Zusammenhanag zwischen Suite und Codename +---------------------------------------------------------------+ | Zeitraum | Suite = | Suite = | Suite = | | | Stable | Testing | Unstable | |-------------------------+-------------+-----------+-----------|     |nach der Veröffentlichung|Codename = |Codename = |Codename = | |von Bookworm |Bookworm |Trixie |Sid | |-------------------------+-------------+-----------+-----------| |nach der Veröffentlichung|Codename = |Codename = |Codename = | |von Trixie |Trixie |Forky |Sid | +---------------------------------------------------------------+ Die Historie der Codenamen ist beschrieben in der Debian FAQ:     Kapitel 6.2.1 Welche Codenamen wurden in der Vergangenheit verwendet? In der strengeren Debian-Archiv-Terminologie wird das Wort "Sektion" (section) speziell für die Kategorisierung der Pakete     durch Anwendungen genutzt (obwohl der Begriff "main section" auch verwendet werden könnte, um den Bereich "main" im Debian-Archiv zu beschreiben). Immer wenn ein Debian-Entwickler (DD, von Debian developer) ein     Paket in das Unstable-Archiv hochlädt (via incoming), muss der DD dafür sorgen, dass das hochgeladene Paket mit dem aktuellen Satz der Pakete im Unstable-Archiv kompatibel ist. Falls der DD diese Kompatibilität absichtlich verletzt (für     wichtige Bibliotheksaktualisierungen usw.), gibt es gewöhnlich eine Ankündigung dazu auf der Mailingliste debian-devel. Before a set of packages are moved by the Debian archive maintenance script from the unstable archive to the testing archive, the archive maintenance script not only checks the     maturity (about 2-10 days old) and the status of the RC bug reports for the packages but also tries to ensure them to be compatible with the latest set of packages in the testing archive. This process makes the testing archive very current and usable. Durch den abgestuften, vom Release-Team gesteuerten Archiv-Freeze-Prozess ist das Testing-Archiv bereits gereift, um es auf diesem Wege - mit einigen manuellen Eingriffen - vollständig konsistent und fehlerfrei zu machen. Dann wird die     neue Stable-Veröffentlichung erzeugt, indem der Codename für das alte Testing-Archiv dem neuen Stable-Archiv zugewiesen wird; anschließend wird ein neuer Codename für das neue Testing-Archiv erstellt. Die anfänglichen Inhalte des neuen Testing entsprechen exakt dem des neu veröffentlichten Stable.     Sowohl das Unstable- wie auch das Testing-Archiv können aus unterschiedlichen Gründen unter vorübergehenden Störungen leiden: * Upload eines beschädigten Pakets in das Archiv (meistens bei Unstable); * Verzögerung, bis die neuen Pakete im Archiv akzeptiert werden (meistens bei Unstable);     * Timing-Probleme bei der Archiv-Synchronisation (sowohl bei Testing wie auch bei Unstable); * Manuelle Eingriffe in das Archiv wie das Entfernen eines Pakets (überwiegend bei Testing). Falls Sie sich also jemals entscheiden, diese Archive zu     verwenden, sollten Sie in der Lage sein, diese Arten von Störungen zu beheben oder zu umgehen. Achtung For about few months after a new stable release, most desktop users should use the stable archive with its security updates even if they usually use unstable or testing archives. For this transition period, both unstable and testing archives are not     good for most people. Your system is difficult to keep in good working condition with the unstable archive since it suffers surges of major upgrades for core packages. The testing archive is not useful either since it contains mostly the same content as the stable archive without its security support (Debian testing-security-announce 2008-12). After a month or so, unstable or testing archives may become useful if you are careful. Tipp Wenn Sie das Testing-Archiv beobachten, stellen Sie fest, dass     ein durch die Entfernung eines Pakets verursachtes Problem normalerweise umgangen wird, indem man das entsprechende Paket aus Unstable installiert, welches zwecks Behebung des Fehlers hochgeladen wurde.     Näheres über Begriffsdefinitionen zum Debian-Archiv finden Sie im Debian Policy-Handbuch: * "Sections" (Sektionen); * "Priorities" (Prioritäten);     * "Base system" (Grundsystem); * "Essential packages" (grundlegende Pakete). 2.1.6. Debian ist zu 100% freie Software     Debian besteht aus folgenden Gründen zu 100% aus freier Software: * Debian installiert standardmäßig nur freie Software und respektiert so diedie Freiheit des Benutzers. * Debian stellt in main nur freie Software bereit.     * Debian empfiehlt, nur freie Software aus main zu verwenden. * No packages in main depend nor recommend packages in non-free nor non-free-firmware nor contrib.     Einige Leute fragen sich, ob sich folgende Fakten widersprechen oder nicht: * "Debian wird zu 100% frei bleiben" (der erste Punkt des Debian-Gesellschaftsvertrags).     * Debian servers host some non-free-firmware, non-free and contrib packages.     Sie widersprechen sich nicht, und zwar aus folgenden Gründen: * Das Debian-System ist zu 100% frei und seine Pakete werden von Debian-Servern im main-Bereich vorgehalten.     * Packages outside of the Debian system are hosted by Debian servers in the non-free, non-free-firmware and contrib areas.     Dies wird auch präzise unter Punkt 4 und 5 des Debian-Gesellschaftsvertrags erklärt: * Unsere Prioritäten sind unsere Anwender und Freie Software + Wir orientieren uns an den Bedürfnissen unserer Anwender und der Gemeinschaft für Freie Software. Deren Interessen stehen an erster Stelle. Wir werden unsere Nutzer bei ihrer Arbeit mit den verschiedensten Rechnerumgebungen unterstützen. Wir haben nichts gegen unfreie Arbeiten, die darauf abzielen, auf Debian-Systemen verwendet zu werden oder versuchen, eine Gebühr von Personen, die solche Arbeiten erstellen oder verwenden, einzufordern. Wir erlauben anderen, Distributionen zu erstellen, die das Debian-System und andere Arbeiten enthalten, ohne dafür irgendwelche Gebühren zu erheben. Um diese Ziele zu fördern, bieten wir ein integriertes System von hoher Qualität an, das die gerade beschriebene Nutzung nicht durch rechtliche Einschränkungen verhindert.     * Arbeiten, die nicht unseren Standards für Freie Software genügen + We acknowledge that some of our users require the use of works that do not conform to the Debian Free Software Guidelines. We have created "non-free", "non-free-firmware" and "contrib" areas in our archive for these works. The packages in these areas are not part of the Debian system, although they have been configured for use with Debian. We encourage CD manufacturers to read the licenses of the packages in these areas and determine if they can distribute the packages on their CDs. Thus, although non-free works are not a part of Debian, we support their use and provide infrastructure for non-free packages (such as our bug tracking system and mailing lists). The Debian official media may include firmware that is otherwise not part of the Debian system to enable use of Debian with hardware that requires such firmware. Anmerkung The actual text of the 5th term in the current Debian Social     Contract 1.2 is slightly different from the above text. This editorial deviation is intensional one to make this user document consistent without changing the real content of the Social Contract.     Users should be aware of the risks of using packages in the non-free, non-free-firmware and contrib areas: * fehlende Freiheit bei diesen Software-Paketen; * keine Unterstützung von Debian für solche Software-Pakete     (Debian kann keine vernünftige Unterstützung für Software bieten, bei der nicht auf den Quellcode zugegriffen werden kann); * Verunreinigung Ihres zu 100% freien Debian-Systems. Die Debian-Richtlinien für Freie Software (DFSG) sind der Freie-Software-Standard für Debian. Debian interpretiert     "Software" im weitesten Sinne inklusive Dokumentation, Firmware, Logos und künstlerische Arbeiten in einem Paket. Aufgrund dessen sind Debians Freie-Software-Standards sehr streng.     Typical non-free, non-free-firmware and contrib packages include freely distributable packages of following types: * Dokumentationspakete unter der GNU-Lizenz für freie Dokumentation mit unveränderlichen Abschnitten wie diejenigen für GCC und Make (meistens zu finden in der Sektion non-free/ doc).     * Firmware packages containing sourceless binary data such as ones listed in Abschnitt 9.10.5, „Hardware-Treiber und Firmware“ as non-free-firmware. (mostly found in the non-free-firmware/kernel section.) * Spiele- und Schriftarten-Pakete mit Einschränkungen für die kommerzielle Verwendung und/oder inhaltliche Veränderung. Please note that the number of non-free, non-free-firmware and contrib packages is less than 2% of that of main packages. Enabling access to the non-free, non-free-firmware and contrib     areas does not obscure the source of packages. Interactive full screen use of aptitude(8) provides you with full visibility and control over what packages are installed from which area to keep your system as free as you wish. 2.1.7. Paketabhängigkeiten Das Debian-System stellt einen konsistenten Satz von Binärpaketen bereit und verwendet dafür einen Deklarationsmechanismus für     versionierte Binärabhängigkeiten über Felder in der control-Datei. Hier eine leicht vereinfachte Definition dieser Felder: * "Depends" / Hängt ab von + Depends deklariert eine absolute Abhängigkeit und alle Pakete, die in diesem Feld aufgelistet sind, müssen zur selben Zeit oder im Voraus installiert sein. * "Pre-Depends" / Hängt ab (vorher) von + Pre-Depends ist ähnlich wie Depends, nur dass die vollständige Installation der aufgelisteten Pakete im Voraus erforderlich ist. * "Recommends" / Empfiehlt + Recommends deklariert eine starke, aber nicht absolute Abhängigkeit. Die meisten Benutzer würden das Paket nicht installiert haben wollen, solange nicht auch alle in diesem Feld aufgelisteten Pakete installiert sind. * "Suggests" / Schlägt vor + Suggests deklariert eine schwache Abhängigkeit. Viele Benutzer dieses Pakets würden davon profitieren, auch die in diesem Feld aufgelisteten Pakete zu installieren, aber selbst ohne diese bietet das Paket vernünftige Funktionalität. * "Enhances" / Wertet auf     + Enhances deklariert eine schwache Abhängigkeit wie Suggests, nur funktioniert sie in der entgegengesetzten Richtung. * "Breaks" / Beschädigt + Breaks deklariert eine Paket-Inkompatibilität, gewöhnlich mit einer Versionsangabe. Grundsätzlich lösen Sie etwaige Probleme, indem Sie alle in diesem Feld aufgelisteten Pakete auf den neuesten Stand bringen. * "Conflicts" / Kollidiert + Conflicts deklariert eine absolute Inkompatibilität. Alle in diesem Feld aufgelisteten Pakete müssen entfernt werden, um dieses Paket zu installieren. * "Replaces" / Ersetzt + Replaces wird deklariert, wenn Dateien, die von diesem Paket installiert werden, andere Dateien in den aufgelisteten Paketen ersetzen. * "Provides" / Stellt bereit + Provides wird deklariert, wenn dieses Paket alle Dateien und Funktionalitäten der hier aufgelisteten Pakete bereitstellt. Anmerkung Bitte beachten Sie, dass die gleichzeitige Deklaration von     "Provides", "Conflicts" und "Replaces" für ein virtuelles Paket eine vernünftige Konfiguration ist. So wird sichergestellt, dass nur ein reelles Paket, das dieses virtuelle Paket bereit stellt, zur jeweiligen Zeit installiert sein kann. Die offizielle Definition inklusive der Quellpaket-Abhängigkeiten     finden Sie im Debian Policy-Handbuch: Kapitel 7 - Declaring relationships between packages. 2.1.8. Die Ereignisabfolge für das Paketmanagement     Hier folgt eine vereinfachte Ereignisabfolge für das APT-Paketmanagement. * Aktualisierung der Paketlisten / Update ("apt update", "aptitude update" oder "apt-get update"): 1. Archiv-Metadaten vom Archiv-Server beziehen; 2. Neuaufbau und Aktualisierung der lokalen Metadaten für die Verwendung durch APT. * Paketaktualisierung / Upgrade ("apt upgrade" und "apt full-upgrade" oder "aptitude safe-upgrade" und "aptitude full-upgrade" oder "apt-get upgrade" und "apt-get dist-upgrade"): 1. Choose candidate version which is usually the latest available version for all installed packages (see Abschnitt 2.7.7, „Tweaking candidate version with apt-pinning“ for exception) 2. Auflösung der Paketabhängigkeiten; 3. Ausgewählte Binärpakete vom Archiv-Server beziehen, falls die jeweilige Installationskandidat-Version sich von der installierten Version unterscheidet; 4. Entpacken der heruntergeladenen Binärpakete; 5. Ausführen des preinst-Skripts; 6. Installieren der Binärdateien; 7. Ausführen des postinst-Skripts. * Installieren / Install ("apt install …", "aptitude install …" oder "apt-get install …"): 1. Choose packages listed on the command line     2. Auflösung der Paketabhängigkeiten; 3. Beziehen der ausgewählten Binärpakete vom Archiv-Server; 4. Entpacken der heruntergeladenen Binärpakete; 5. Ausführen des preinst-Skripts; 6. Installieren der Binärdateien; 7. Ausführen des postinst-Skripts. * Entfernen / Remove ("apt remove …", "aptitude remove …" oder "apt-get remove …"): 1. Choose packages listed on the command line 2. Auflösung der Paketabhängigkeiten; 3. Ausführen des prerm-Skripts; 4. Löschen der installierten Dateien außer den Konfigurationsdateien; 5. Ausführen des postrm-Skripts. * Entfernen inkl. der Konfigurationsdateien / Purge ("apt purge", "aptitude purge …" oder "apt-get purge …"): 1. Choose packages listed on the command line 2. Auflösung der Paketabhängigkeiten; 3. Ausführen des prerm-Skripts; 4. Löschen der installierten Dateien inklusive der Konfigurationsdateien; 5. Ausführen des postrm-Skripts.     Um des Gesamtbildes willen habe ich hier absichtlich technische Details übersprungen. 2.1.9. Erste Hilfe bei Paketmanagement-Problemen Sie sollten die offizielle Dokumentation lesen. Das erste Dokument ist hierbei die Debian-spezifische Datei "/usr/share/doc     /paketname/README.Debian". Weitere Dokumentation in "/usr/share/ doc/paketname/" sollten Sie ebenfalls konsultieren. Wenn Sie die Shell wie in Abschnitt 1.4.2, „Anpassen der bash“ beschrieben eingerichtet haben, geben Sie folgendes ein: $ cd package_name     $ pager README.Debian $ mc Sie müssen unter Umständen das entsprechende Dokumentationspaket     installieren (hängen Sie dazu "-doc" an den Namen an), um die Dokumentation verfügbar zu haben. Wenn Sie Probleme mit einem bestimmten Paket haben, sollten Sie     unbedingt zuerst die Seiten der Debian-Fehlerdatenbank (BTS) besuchen. Tabelle 2.5. Liste wichtiger Websites zur Lösung von Paketproblemen +---------------------------------------------------------------+ | Website | Befehl | |----------------------------+----------------------------------| |Homepage der |sensible-browser "https:// |     |Debian-Fehlerdatenbank (BTS)|bugs.debian.org/" | |----------------------------+----------------------------------| |Fehlerberichte gegen ein |sensible-browser "https:// | |bestimmtes Paket |bugs.debian.org/paketname" | |----------------------------+----------------------------------| |Fehlerbericht mit einer |sensible-browser "https:// | |bekannten Fehlernummer |bugs.debian.org/fehlernummer" | +---------------------------------------------------------------+     Suchen Sie bei Google mit Suchbegriffen, die "site:debian.org", "site:wiki.debian.org", "site:lists.debian.org" usw. enthalten.     Wenn Sie einen Fehlerbericht einreichen, nutzen Sie bitte den Befehl reportbug(1). 2.1.10. Wie Sie Debian-Pakete auswählen Wenn Sie auf mehr als zwei ähnliche Pakete stoßen und sich fragen, welches Sie installieren sollen, ohne dabei nach dem     "trial and error"-Verfahren (ausprobieren und schauen, welches das richtige ist) vorgehen zu müssen, sollten Sie ein wenig Ihren gesunden Menschenverstand benutzen. Die folgenden Punkte können als gute Hinweise auf passende Pakete angesehen werden: * Essentiell: ja > nein; * Bereich: main > contrib > non-free; * Priorität: erforderlich > wichtig > standard > optional > extra; * Tasks: Pakete, die in Tasks wie "Desktop-Umgebungen" aufgelistet sind; * Pakete, die über eine Paketabhängigkeit ausgewählt werden (z.B. gcc-10 über gcc); * Popcon: höhere Einstufung bei den vote- und install-Werten;     * Changelog (Änderunsprotokoll): regelmäßige Aktualisierungen durch den Betreuer; * BTS (Fehlerdatenbank): keine veröffentlichungskritischen Fehler (RC-Bugs, d.h. keine Fehler mit Schweregrad critical, grave oder serious); * BTS (Fehlerdatenbank): Betreuer reagiert auf Fehlerberichte; * BTS (Fehlerdatenbank): höhere Anzahl von kürzlich behobenen Fehlern; * BTS (Fehlerdatenbank): niedrigere Anzahl von offenen Fehlern mit Schweregrad (Severity) verschieden von wishlist. Debian ist ein Freiwilligenprojekt mit verteiltem     Entwicklungsmodell, dessen Archiv viele Pakete unterschiedlicher Zielsetzung und Qualität enthält. Sie müssen Ihre eigene Entscheidung treffen, was Sie damit anfangen. 2.1.11. How to cope with conflicting requirements Whatever suite of Debian system you may decide to use, you may still wish to run versions of programs which aren't available in     that suite. Even if you find binary packages of such programs in other Debian suites or in other non-Debian resources, their requirements may conflict with your current Debian system. Although you can tweak package management system with apt-pinning technique etc. as described in Abschnitt 2.7.7, „Tweaking     candidate version with apt-pinning“ to instal such out-of-sync binary packages, such tweaking approaches have only limited use cases since they may break those programs and your system. Before brutally installing such out-of-sync packages, you should     seek all available alternative safer technical solutions which are compatible with your current Debian syetem. * Install such programs using corresponding sandboxed upstream binary packages (see Abschnitt 7.7, „Sandbox“). + Many mostly GUI programs such as LibreOffice and GNOME applications are available as Flatpak, Snap, or AppImage packages. * Create a chroot or similar environment and run such programs in it (see Abschnitt 9.11, „Virtualisierte Systeme“).     + CLI commands can be executed easily under its compatible chroot (see Abschnitt 9.11.4, „Chroot-System“). + Multiple full desktop environments can be tried easily without reboot (see Abschnitt 9.11.5, „System mit mehreren Arbeitsplatzumgebungen“). * Build desired versions of binary packages which are compatible with your current Debian syetem by yourself. + This is a non-trivial task (see Abschnitt 2.7.13, „Ein Paket auf das Stable-System portieren“). 2.2. Grundlegende Paketmanagement-Operationen Paketmanagement-Operationen können im Debian-System mit vielen,     auf APT aufbauenden Werkzeugen durchgeführt werden. Wir beschreiben hier drei grundlegende Paketmanagement-Werkzeuge: apt, apt-get / apt-cache und aptitude. Für Paketmanagement-Operationen inklusive Installation oder     Aktualisierung der Paket-Metadaten benötigen Sie root-Privilegien. 2.2.1. apt contra apt-get / apt-cache contra aptitude Obwohl aptitude ein tolles interaktives Werkzeug ist, das auch     der Autor überwiegend verwendet, sollten Sie einige warnende Fakten kennen: * aptitude wird nicht für das Upgrade eines Debian-Stable-Systems (Hochrüstung von einer Stable-Version zur nächsten) empfohlen. + Dafür empfehlen wir "apt full-upgrade" oder "apt-get dist-upgrade". Lesen Sie dazu den Fehlerbericht #411280. * Manchmal empfiehlt aptitude beim System-Upgrade von Testing- oder Unstable-Systemen die massenweise Entfernung von Paketen.     + Diese Situation hat schon manchen Systemadministrator erschreckt. Aber: keine Panik. + Dies wurde scheinbar überwiegend dadurch verursacht, dass eine Schieflage bei den Versionsnummern von Paketen bestand, die von Metapaketen wie gnome-core abhängen oder diese empfehlen. + Sie können dies beheben, indem Sie "Noch ausstehende Aktionen abbrechen" im Menü von aptitude wählen, aptitude beenden und "apt full-upgrade" verwenden.     Die Befehle apt-get und apt-cache sind sehr grundlegende APT-basierte Paketmanagement-Werkzeuge. * apt-get und apt-cache bieten lediglich eine Befehlszeilen-Oberfläche. * apt-get eignet sich sehr gut für die großen Systemhochrüstungen von einer Debian-Veröffentlichung auf die nächste, usw. * apt-get bietet einen robusten Mechanismus zur Auflösung von Paketabhängigkeiten.     * apt-get ist weniger anspruchsvoll bezüglich der Hardware-Ressourcen. Es verbraucht weniger Speicher und läuft schneller. * apt-cache bietet eine grundlegende, auf regulären Ausdrücken basierende Suche über Paketname und -beschreibung. * apt-get und apt-cache können über /etc/apt/preferences mehrere Versionen des gleichen Pakets verwalten, aber dies ist ziemlich mühselig. Das apt-Programm ist eine Befehlszeilenschnittstelle für das Paketmanagement. Es ist vom Grundsatz her ein Wrapper-Skript für     apt-get, apt-cache und ähnliche Programme und als Bedienoberfläche für den Benutzer gedacht; einige für die interaktive Nutzung zweckmäßige Optionen sind standardmäßig aktiviert. * apt bietet eine nette Fortschrittsanzeige bei der Paketinstallation mittels apt install.     * Standardmäßig entfernt apt die zwischengespeicherten .deb-Dateien nach der erfolgreichen Installation. Tipp     Benutzern wird empfohlen, den neuen apt(8)-Befehl zu verwenden, der für die interaktive Nutzung durch den Benutzer gedacht ist. In Shell-Skripten sollten Sie apt-get(8) und apt-cache(8) einsetzen.     Der Befehl aptitude ist das vielseitigste APT-basierte Paketmanagement-Werkzeug. * aptitude bietet eine interaktive textbasierte Benutzeroberfläche mit Vollbildschirm-Ansicht. * aptitude enthält auch eine Befehlszeilen-Benutzerschnittstelle. * aptitude eignet sich sehr gut für das tägliche interaktive Paketmanagement, wie die Überprüfung installierter Pakete und die Suche nach verfügbaren Paketen.     * aptitude ist anspruchsvoller bezüglich der Hardware-Ressourcen. Es verbraucht mehr Speicher und läuft geringfügig langsamer. * aptitude bietet eine erweiterte, auf regulären Ausdrücken basierende Suche über alle Paket-Metadaten. * aptitude kann mehrere Versionen des gleichen Pakets verwalten, ohne dabei /etc/apt/preferences zu verwenden, und es ist sehr intuitiv. 2.2.2. Grundlegende Paketmanagement-Operationen auf der Befehlszeile Hier einige grundlegende Paketmanagement-Operationen auf der     Befehlszeile, die apt(8), aptitude(8) und apt-get(8) / apt-cache (8) verwenden. Tabelle 2.6. Grundlegende Paketmanagement-Operationen mit apt(8), aptitude(8) und apt-get(8) / apt-cache(8) +---------------------------------------------------------------------------------+ | apt-Syntax |aptitude-Syntax| apt-get/ | Beschreibung | | | |apt-cache-Syntax| | |------------------+---------------+----------------+-----------------------------| |apt update |aptitude update|apt-get update |Aktualisieren der | | | | |Paket-Metadaten | |------------------+---------------+----------------+-----------------------------| | | | |Installieren der | |apt install foo |aptitude |apt-get install |Installationskandidat-Version| | |install foo |foo |von "foo" inklusive seiner | | | | |Abhängigkeiten | |------------------+---------------+----------------+-----------------------------| | | | |Installieren der | | |aptitude | |Installationskandidat-Version| |apt upgrade |safe-upgrade |apt-get upgrade |aller installierten Pakete, | | | | |ohne irgendwelche anderen | | | | |Pakete zu entfernen | |------------------+---------------+----------------+-----------------------------| | | | |Installieren der | | |aptitude |apt-get |Installationskandidat-Version| |apt full-upgrade |full-upgrade |dist-upgrade |aller installierten Pakete | | | | |und Entfernen anderer Pakete,| | | | |falls nötig | |------------------+---------------+----------------+-----------------------------| | |aptitude remove|apt-get remove |Entfernen des Pakets "foo" | |apt remove foo |foo |foo |bei gleichzeitiger Erhaltung | | | | |seiner Konfigurationsdateien | |------------------+---------------+----------------+-----------------------------| | | |apt-get |Entfernen aller automatisch | |apt autoremove |Nicht verfügbar|autoremove |installierten, nicht mehr | | | | |benötigten Pakete | |------------------+---------------+----------------+-----------------------------|     | |aptitude purge |apt-get purge |Vollständiges Entfernen des | |apt purge foo |foo |foo |Pakets "foo" und Löschung | | | | |seiner Konfigurationsdateien | |------------------+---------------+----------------+-----------------------------| | | | |Vollständiges Leeren des | |apt clean |aptitude clean |apt-get clean |lokalen Depots | | | | |heruntergeladener | | | | |Paketdateien | |------------------+---------------+----------------+-----------------------------| | | | |Leeren des lokalen Depots | |apt autoclean |aptitude |apt-get |heruntergeladener | | |autoclean |autoclean |Paketdateien für veraltete | | | | |Pakete | |------------------+---------------+----------------+-----------------------------| | |aptitude show |apt-cache show |Anzeigen von detaillierten | |apt show foo |foo |foo |Informationen über das Paket | | | | |"foo" | |------------------+---------------+----------------+-----------------------------| | |aptitude search|apt-cache search|Suchen nach Paketen, auf die | |apt search regex |regex |regex |der reguläre Ausdruck regex | | | | |zutrifft | |------------------+---------------+----------------+-----------------------------| | | | |Erklären, warum die Pakete, | |Nicht verfügbar |aptitude why |Nicht verfügbar |auf die der reguläre Ausdruck| | |regex | |regex zutrifft, installiert | | | | |werden sollen | |------------------+---------------+----------------+-----------------------------| | | | |Erklären, warum die Pakete, | |Nicht verfügbar |aptitude |Nicht verfügbar |auf die der reguläre Ausdruck| | |why-not regex | |regex zutrifft, nicht | | | | |installiert werden sollen | |------------------+---------------+----------------+-----------------------------| |apt list |aptitude search|apt-mark |Händisch installierte Paket | |--manual-installed|'~i!~M' |showmanual |auflisten | +---------------------------------------------------------------------------------+     apt/apt-get und aptitude können ohne größere Probleme gemischt verwendet werden. Der Befehl "aptitude why regex" kann mehr Informationen ausgeben,     wenn "-v" verwendet wird ("aptitude -v why regex"). Ähnliche Informationen erhalten Sie mit apt rdepends paket" oder "apt-cache rdepends paket. Wenn aptitude im Befehlszeilenmodus gestartet wird und Probleme     wie z.B. Paketkonflikte anzeigt, können Sie im Nachhinein in die interaktive Vollbildschirm-Ansicht wechseln, indem Sie am Prompt die Taste "e" drücken. Anmerkung Obwohl der aptitude-Befehl reichhaltige Funktionen mit sich     bringt, wie z.B. seinen erweiterten Paketabhängigkeitsauflöser, hat diese Komplexität einige Rückentwicklungen verursacht (oder könnte sie auch in Zukunft verursachen), wie z.B. Fehler #411123, Fehler #514930 und Fehler #570377. Im Zweifel bevorzugen Sie bitte die apt-, apt-get- und apt-cache-Befehle.     Befehlsoptionen können direkt im Anschluß an den "aptitude"-Befehl angegeben werden. Tabelle 2.7. Erwähnenswerte Befehlsoptionen für aptitude(8) +---------------------------------------------------------------+ |Befehlsoptionen| Beschreibung | |---------------+-----------------------------------------------| |-s |das Resultat des Befehls simulieren |     |---------------+-----------------------------------------------| |-d |nur Herunterladen, aber nicht installieren/ | | |aktualisieren | |---------------+-----------------------------------------------| |-D |kurze Erläuterungen vor automatischen | | |Installationen und Entfernungen anzeigen | +---------------------------------------------------------------+     Weitere Informationen finden Sie unter aptitude(8) und im "aptitude-Benutzerhandbuch" in "/usr/share/doc/aptitude/README". 2.2.3. Interaktive Nutzung von aptitude     Für interaktives Paketmanagement starten Sie aptitude von der Konsolen-Shell aus im interaktiven Modus mit:     $ sudo aptitude -u Password: Die lokale Kopie der Archivinformationen wird aktualisiert und     die Paketliste in der Vollbildschirm-Ansicht angezeigt. Aptitude legt seine Konfiguration in "~/.aptitude/config" ab. Tipp     Wenn Sie root's Konfiguration verwenden wollen statt der des unprivilegierten Benutzers, verwenden Sie in obigem Ausdruck "sudo -H aptitude …" statt "sudo aptitude …". Tipp     Aptitude merkt automatisch bestimmte Aktionen vor, wenn es interaktiv gestartet wird. Wenn Sie dies nicht möchten, können Sie sie über das Menü zurücksetzen: "Aktionen" → "Nicht abgeschlossene Aktionen abbrechen". 2.2.4. Tastaturkürzel von aptitude Es folgen einige erwähnenswerte Tastenkürzel, um in der     Vollbildschirm-Ansicht den Status von Paketen abzufragen und "geplante Aktionen" vorzumerken. Tabelle 2.8. Liste der Tastaturkürzel für aptitude +---------------------------------------------------------------+ | Taste | Tastaturbefehl | |-------------+-------------------------------------------------| |F10 oder |Menü | |Strg-t | | |-------------+-------------------------------------------------| |? |Hilfe für Tastaturkürzel anzeigen (ausführlichere| | |Auflistung) | |-------------+-------------------------------------------------| |F10 → Hilfe →|Benutzerhandbuch anzeigen | |Handbuch | | |-------------+-------------------------------------------------| |u |Paketinformationen (Metadaten) aktualisieren | |-------------+-------------------------------------------------| |+ |Paket zur Aktualisierung (upgrade) oder | | |Installation (install) vormerken | |-------------+-------------------------------------------------| |- |Paket zum Entfernen (remove) vormerken | | |(Konfigurationsdateien erhalten) | |-------------+-------------------------------------------------| |_ |Paket zum vollständigen Entfernen (purge) | | |vormerken (Konfigurationsdateien löschen) | |-------------+-------------------------------------------------|     |= |Paket auf Zurückhalten (hold) setzen | |-------------+-------------------------------------------------| |U |Alle aktualisierbaren Pakete markieren (die | | |gleiche Funktion wie full-upgrade) | |-------------+-------------------------------------------------| |g |Das Herunterladen und Installieren aller | | |markierten Pakete starten | |-------------+-------------------------------------------------| |q |Aktuelle Ansicht schließen und Änderungen | | |speichern | |-------------+-------------------------------------------------| |x |Aktuelle Ansicht schließen und Änderungen | | |verwerfen | |-------------+-------------------------------------------------| |Enter |Informationen über ein Paket anzeigen | |-------------+-------------------------------------------------| |C |Änderungsprotokoll (Changelog) eines Pakets | | |anzeigen | |-------------+-------------------------------------------------| |l |Ändern des Filters für die Paketanzeige | |-------------+-------------------------------------------------| |/ |Suche nach dem ersten Treffer | |-------------+-------------------------------------------------| |\ |Wiederholen der letzten Suche | +---------------------------------------------------------------+ The file name specification of the command line and the menu prompt after pressing "l" and "//" take the aptitude regex as     described below. Aptitude regex can explicitly match a package name using a string started by "~n" and followed by the package name. Tipp Im interaktiven Modus müssen Sie "U" drücken, um alle     installierten Pakete auf die Installationskandidat-Version zu aktualisieren. Andernfalls werden nur die markierten Pakete und solche mit versionierten Abhängigkeiten zu diesen auf die Installationskandidat-Version aktualisiert. 2.2.5. Paketansichten in aptitude     In der interaktiven Vollbildschirm-Ansicht von aptitude(8) werden Pakete in der Paketliste wie im folgenden Beispiel angezeigt:     idA libsmbclient -2220kB 3.0.25a-1 3.0.25a-2     Diese Zeile hat die folgenden Bedeutungen (von links nach rechts): * die Markierung für den aktuellen Zustand (der erste Buchstabe); * die Markierung für die geplante Aktion (der zweite Buchstabe); * die Markierung für "automatisch installiert" (der dritte Buchstabe);     * der Paketname; * die voraussichtliche Änderung beim verwendeten Platz auf der Festplatte, ausgelöst durch die geplante Aktion; * die aktuelle Version des Pakets; * die Installationskandidat-Version des Pakets. Tipp     Eine vollständige Liste der Markierungen finden Sie am unteren Ende der Hilfe-Ansicht, die Ihnen durch Drücken von "?" angezeigt wird. Die Installationskandidat-Version wird aufgrund der aktuellen     lokalen Voreinstellungen ausgewählt (lesen Sie dazu apt_preferences(5) und Abschnitt 2.7.7, „Tweaking candidate version with apt-pinning“).     Im Menü unter Ansichten sind verschiedene Arten von Paketansichten verfügbar: Tabelle 2.9. Liste der Ansichten für aptitude +---------------------------------------------------------------+ | Ansicht | Beschreibung der Ansicht | |-----------------+---------------------------------------------| | |laut Tabelle 2.10, „Die Kategorisierung von | |Paketansicht |Standard-Paketansichten“ | | |(Standardeinstellung) | |-----------------+---------------------------------------------| |Empfehlungen |Pakete auflisten, die von installierten |     |überprüfen |Paketen empfohlen werden, aber noch nicht | | |installiert sind | |-----------------+---------------------------------------------| |Einfache |Pakete ohne Kategorisierung anzeigen (für | |Paketansicht |Verwendung mit Regex) | |-----------------+---------------------------------------------| |Debtags-Browser |Pakete sortiert nach der Kategorisierung in | | |ihren debtags-Einträgen anzeigen | |-----------------+---------------------------------------------| |Quellpaketansicht|Pakete gruppiert nach Quellpaketen anzeigen | +---------------------------------------------------------------+ Anmerkung     Bitte helfen Sie uns, Pakete mit debtags zu versehen!     Die Standard-Paketansicht kategorisiert Pakete ähnlich wie dselect plus einiger zusätzlicher Funktionalitäten. Tabelle 2.10. Die Kategorisierung von Standard-Paketansichten +---------------------------------------------------------------+ | Kategorie | Beschreibung der Ansicht | |-----------------+---------------------------------------------| |Aktualisierbare |Pakete organisiert nach Sektion → Bereich → | |Pakete |Paket | |-----------------+---------------------------------------------| |Neue Pakete |" | |-----------------+---------------------------------------------| |Installierte |" | |Pakete | | |-----------------+---------------------------------------------| |Nicht | |     |installierte |" | |Pakete | | |-----------------+---------------------------------------------| |Veraltete und | | |lokal erstellte |" | |Pakete | | |-----------------+---------------------------------------------| |Virtuelle Pakete |Pakete mit der gleichen Funktionalität | | |auflisten | |-----------------+---------------------------------------------| |Tasks |Pakete mit verschiedenen Funktionalitäten | |(Programmgruppen)|auflisten, die grundsätzlich für eine | | |bestimmte Aufgabe benötigt werden | +---------------------------------------------------------------+ Tipp     Die Tasks-Ansicht kann verwendet werden, um aus verschiedenen Paketen für eine Aufgabe auszuwählen. 2.2.6. Optionen für Suchmethoden mit aptitude     Aptitude bietet verschiedene Optionen, damit Sie über seine Regex-Formel (regulären Ausdruck) nach Paketen suchen können. * Shell-Befehlszeile: + "aptitude search aptitude_regex" zur Anzeige von Installationsstatus, Paketname und Kurzbeschreibung passender Pakete + "aptitude show paketname" zur Anzeige detaillierter Informationen für ein Paket * Interaktive Vollbildschirm-Ansicht:     + "l" zur Einschränkung der Paketansicht auf zutreffende Pakete + "/" für die Suche nach einem passenden Paket + "\" für die Rückwärts-Suche nach einem passenden Paket + "n" zum Finden des nächsten Treffers + "N" zum Finden des nächsten Treffers in umgekehrter Richtung Tipp     Die obige Zeichenkette paketname muss exakt auf den Paketnamen zutreffen, außer sie beginnt mit "~", um anzuzeigen, dass es ein regulärer Ausdruck ist. 2.2.7. Aptitudes Regex-Formel Die Regex-Formel (regulärer Ausdruck) ist ähnlich wie bei mutt ein erweiterter regulärer Ausdruck (ERE) (lesen Sie dazu     Abschnitt 1.6.2, „Reguläre Ausdrücke“); die Bedeutung der aptitude-spezifischen speziellen Regelerweiterungen ist im folgenden erklärt: Tabelle 2.11. Liste von aptitudes Regex-Formeln +------------------------------------------------------------------------+ | Beschreibung der | Regex-Formel | | erweiterten Regel | | |---------------------+--------------------------------------------------| |Treffer auf Paketname|~nregex_name | |---------------------+--------------------------------------------------| |Treffer auf |~dregex_beschreibung | |Paketbeschreibung | | |---------------------+--------------------------------------------------| |Treffer auf Task-Name|~tregex_task | |---------------------+--------------------------------------------------| |Treffer auf Debtag |~Gregex_debtag | |---------------------+--------------------------------------------------| |Treffer auf |~mregex_betreuer | |Paketbetreuer | | |---------------------+--------------------------------------------------| |Treffer auf |~sregex_sektion | |Paketsektion | | |---------------------+--------------------------------------------------| |Treffer auf |~Vregex_version | |Paketversion | | |---------------------+--------------------------------------------------| |Treffer auf Archiv |~A{bookworm,trixie,sid} | |---------------------+--------------------------------------------------| |Treffer auf |~O{debian,…} | |Paket-Herkunft | | |---------------------+--------------------------------------------------| |Treffer auf Priorität|~p{extra,important,optional,required,standard} | |---------------------+--------------------------------------------------| |Treffer auf |~E | |essentielle Pakete | | |---------------------+--------------------------------------------------| |Treffer auf virtuelle|~v | |Pakete | | |---------------------+--------------------------------------------------| |Treffer auf neue |~N | |Pakete | | |---------------------+--------------------------------------------------| |Treffer auf noch |~a | |nicht abgeschlossene |{install,upgrade,downgrade,remove,purge,hold,keep}| |Aktion | | |---------------------+--------------------------------------------------| |Treffer auf |~i | |installierte Pakete | | |---------------------+--------------------------------------------------| |Treffer auf Pakete | | |mit der A-Markierung |~M | |(automatisch | | |installierte Pakete) | | |---------------------+--------------------------------------------------| |Treffer auf Pakete | | |ohne A-Markierung | | |(vom Administrator |~i!~M | |manuell zur | | |Installation | | |ausgewählte Pakete) | | |---------------------+--------------------------------------------------| |Treffer auf | | |installierte und |~U | |aktualisierbare | | |Pakete | | |---------------------+--------------------------------------------------| |Treffer auf entfernte| | |Pakete, deren | | |Konfigurationsdateien|~c | |aber noch vorhanden | | |sind | |     |---------------------+--------------------------------------------------| |Treffer auf Pakete, | | |die entfernt oder | | |vollständig inklusive| | |der |~g | |Konfigurationsdateien| | |entfernt wurden oder | | |entfernt werden | | |können | | |---------------------+--------------------------------------------------| |Treffer auf Pakete, | | |die eine beschädigte |~b | |Abhängigkeit melden | | |---------------------+--------------------------------------------------| |Treffer auf Pakete, | | |die eine beschädigte |~Btyp | |Abhängigkeit vom Typ | | |typ melden | | |---------------------+--------------------------------------------------| |Treffer auf Pakete, | | |die eine Abhängigkeit|~D[typ:]muster | |vom Typ typ definiert| | |haben | | |---------------------+--------------------------------------------------| |Treffer auf Pakete, | | |die eine beschädigte |~DB[typ:]muster | |Abhängigkeit vom Typ | | |typ definiert haben | | |---------------------+--------------------------------------------------| |Treffer auf Pakete, | | |zu denen auf muster | | |passende Pakete die |~R[typ:]muster | |Abhängigkeit typ | | |definiert haben | | |---------------------+--------------------------------------------------| |Treffer auf Pakete, | | |zu denen auf muster | | |passende Pakete die |~RB[typ:]muster | |beschädigte | | |Abhängigkeit typ | | |definiert haben | | |---------------------+--------------------------------------------------| |Treffer auf Pakete, | | |von denen andere |~R~i | |installierte Pakete | | |abhängig sind | | |---------------------+--------------------------------------------------| |Treffer auf Pakete, | | |von denen keine |!~R~i | |anderen installierten| | |Pakete abhängig sind | | |---------------------+--------------------------------------------------| |Treffer auf Pakete, | | |von denen andere | | |installierte Pakete |~R~i|~Rrecommends:~i | |abhängig sind oder | | |empfohlen werden | | |---------------------+--------------------------------------------------| |Treffer auf Pakete, | | |die auf muster |~S filter muster | |passen, mit | | |gefilterter Version | | |---------------------+--------------------------------------------------| |Treffer auf alle |~T | |Pakete (true/wahr) | | |---------------------+--------------------------------------------------| |Treffer auf kein |~F | |Paket (false/unwahr) | | +------------------------------------------------------------------------+ * Der Regex-Teil ist der gleiche erweiterte reguläre Ausdruck ( ERE) wie in Unix-typischen Textverarbeitungswerkzeugen und nutzt "^", ".*", "$" usw., wie es auch egrep(1), awk(1) und perl(1) tun. * Der Typ einer Abhängigkeit zur Festlegung von     Wechselbeziehungen zwischen Paketen ist einer aus der folgenden Liste: depends (hängt ab von), predepends (hängt ab (vorher) von), recommends (empfiehlt), suggests (schlägt vor), conflicts (kollidiert mit), replaces (ersetzt), provides (stellt bereit). * Der Typ der Standardabhängigkeit ist "depends". Tipp     Wenn regex_muster ein Null-String ist, geben Sie "~T" direkt hinter dem Befehl an.     Hier einige Abkürzungen: * "~Pname" == "~Dprovides:name"     * "~Cname" == "~Dconflicts:name" * "…~W name" == "(…|name)" Benutzer, denen mutt geläufig ist, werden sich auch hier schnell zurechtfinden, da mutt die Inspiration für die Syntax des     regulären Ausdrucks war. Lesen Sie "SEARCHING, LIMITING, AND EXPRESSIONS" im "Benutzerhandbuch" unter "/usr/share/doc/aptitude /README". Anmerkung Seit der Lenny-Version von aptitude(8) kann für die Suche über     reguläre Ausdrücke statt der alten kurzen Form (wie z.B. "~b") auch die neue lange Form (entsprechend "?broken") verwendet werden. Leerzeichen " " werden jetzt als Regex-Abschluß-Zeichen gewertet, zusätzlich zu dem Tilde-Zeichen "~". Weitere Details zur Syntax der neuen langen Form finden Sie im Benutzerhandbuch. 2.2.8. Abhängigkeitsauflösung bei aptitude Die Auswahl eines Pakets in aptitude bringt nicht nur Pakete mit, die in seiner "Depends:"-Liste stehen, sondern auch solche in "Recommends:", falls die Einstellung im Menü unter F10 →     "Optionen" → "Einstellungen" → "Abhängigkeitsbehandlung" entsprechend gesetzt ist. Diese automatisch installierten Pakete werden automatisch entfernt, wenn sie laut aptitude nicht mehr benötigt werden. Der Schalter, der das "auto install"-Verhalten von aptitude     steuert, kann auch über den Befehl apt-mark(8) aus dem apt-Paket verändert werden. 2.2.9. Protokollierung der Paketaktivitäten     Sie können vergangene Paketaktivitäten in den Protokolldateien nachkontrollieren. Tabelle 2.12. Protokolldateien für Paketaktivitäten +---------------------------------------------------------------+ | Datei | Inhalt | |--------------+------------------------------------------------| |/var/log/ |Protokollierung der Operationen auf dpkg-Ebene | |dpkg.log |für alle Paketaktivitäten |     |--------------+------------------------------------------------| |/var/log/apt/ |Protokollierung der grundlegenden | |term.log |APT-Aktivitäten | |--------------+------------------------------------------------| |/var/log/ |Protokollierung der Aktivitäten des | |aptitude |aptitude-Befehls | +---------------------------------------------------------------+ In der Realität ist es nicht so einfach, aus diesen Protokollen auf die Schnelle aussagekräftige Informationen herauszuziehen.     Abschnitt 9.3.9, „Aufzeichnen von Änderungen in Konfigurationsdateien“ gibt Ihnen hilfreiche Infos, wie Sie dies einfacher bewältigen können. 2.3. Beispiele für aptitude-Operationen     Hier ein paar Beispiele für aptitude(8)-Operationen. 2.3.1. Seeking interesting packages Mit aptitude können Sie nach Paketen suchen, die Ihren     Anforderungen entsprechen, entweder über die Paketbeschreibung oder über die Liste in "Tasks". 2.3.2. Auflisten von Paketen mit Regex-Suche auf den Paketnamen     Der folgende Befehl listet Pakete auf, bei denen die Regex-Suche nach dem Paketnamen zutrifft: $ aptitude search '~n(pam|nss).*ldap'     p libnss-ldap - NSS module for using LDAP as a naming service p libpam-ldap - Pluggable Authentication Module allowing LDAP interfaces     Dies ist für Sie ziemlich praktisch, um den exakten Namen eines Pakets zu finden. 2.3.3. Durchsuchen mit der Regex-Suche Wenn Sie den regulären Ausdruck "~dipv6" in der "Neuen einfachen Paketansicht" im "l"-Dialog eingeben, werden die angezeigten     Pakete auf diejenigen eingeschränkt, bei denen der Ausdruck auf die Paketbeschreibung zutrifft, und Sie können deren Informationen interaktiv durchsuchen. 2.3.4. Entfernte Pakete endgültig löschen     Sie können alle verbliebenen Konfigurationsdateien entfernter Pakete endgültig löschen.     Überprüfen Sie die Resultate des folgenden Befehls:     # aptitude search '~c'     Wenn Sie glauben, dass die aufgelisteten Pakete vollständig entfernt werden können, führen Sie folgenden Befehl aus:     # aptitude purge '~c' Sie möchten das gleiche vielleicht im interaktiven Modus     durchführen, um eine detailgenaue Kontrolle über den Vorgang zu haben: Sie geben den regulären Ausdruck "~c" unter der "Neuen Paketansicht" in dem "l"-Dialog ein. Dadurch werden die angezeigten Pakete auf solche eingeschränkt, auf die der reguläre     Ausdruck zutrifft, d.h. "gelöscht, aber nicht vollständig inklusive der Konfigurationsdateien entfernt". All diese, auf den regulären Ausdruck zutreffenden Pakete können angezeigt werden, indem Sie auf der höchsten Ebene der Anzeigehierachie (z.B. "Nicht installierte Pakete") "[" drücken. Dann drücken Sie auf einem Eintrag in der höchsten Anzeigehierachie (z.B. auf "Nicht installierte Pakete") "_". Nur Pakete, auf die der reguläre Ausdruck passt, werden auf diese Art     vollständig inklusive der Konfigurationsdateien entfernt. Sie können jedes dieser Pakete interaktiv von der vollständigen Entfernung ausschließen, indem Sie auf dem entsprechenden Paket " =" drücken.     Diese Methode ist ziemlich praktisch und funktioniert für viele andere Befehlskürzel. 2.3.5. Automatisch/manuell-Installationsstatus bereinigen Hier beschreibe ich, wie Sie den automatisch/     manuell-Installationsstatus bereinigen können (nach der Verwendung von anderen Paketinstallationsprogrammen o.ä.): 1. Starten Sie aptitude im interaktiven Modus als root. 2. Drücken Sie "u", "U", "f" und "g", um die Paketliste sowie die Pakete zu aktualisieren. 3. Drücken Sie "l" und setzen Sie den Anzeigefilter auf "~i(~R~i |~Rrecommends:~i)"; drücken Sie dann "M" mit der Markierung auf "Installierte Pakete", um deren Status auf "Automatisch installiert" zu ändern. 4. Drücken Sie "l", setzen Sie den Anzeigefilter auf "~prequired |~pimportant|~pstandard|~E" und drücken Sie "m" mit der Markierung auf "Installierte Pakete", um deren Status auf "Manuell installiert" zu ändern. 5. Drücken Sie "l", setzen Sie den Anzeigefilter auf "~i!~M" und entfernen Sie nicht genutzte Pakete, indem Sie "-" auf jedem davon drücken (wenn die Markierung auf "Installierte Pakete" steht, können Sie mit "[" die Liste aufklappen, so dass alle Pakete sichtbar werden).     6. Drücken Sie "l" um den Anzeigefilter auf "~i" zu setzen; drücken Sie dann "m", während die Markierung auf "Tasks" steht, um diese Pakete auf "Manuell installiert" zu setzen. 7. Beenden Sie aptitude. 8. Führen Sie "apt-get -s autoremove|less" als root aus, um zu überprüfen, welche Pakete derzeit von apt-get als ungenutzt gemeldet werden. 9. Starten Sie aptitude erneut im interaktiven Modus und markieren Sie Pakete, bei denen dies nötig ist, mit "m" als "Manuell installiert". 10. Führen Sie erneut "apt-get -s autoremove|less" als root aus, um erneut zu überprüfen, ob bei ENTFERNT nur die gewünschten Pakete enthalten sind. 11. Führen Sie "apt-get autoremove|less" als root aus, um nicht genutzte Pakete automatisch zu entfernen. Die Aktion "m" mit der Markierung auf "Tasks" ist eine optionale     Aktion, um die Situation massenhaft zu entfernender Pakete in der Zukunft zu vermeiden. 2.3.6. Systemweite Hochrüstung Anmerkung Beim Wechsel auf einen neue Veröffentlichung sollten Sie eine Neuinstallation in Erwägung ziehen, auch wenn Debian wie unten beschrieben auch auf die neue Version hochgerüstet werden kann. So haben Sie eine Chance, Müll, der sich über die Dauer der Zeit     angesammelt hat, loszuwerden und bekommen die beste Kombination der aktuellsten Pakete. Natürlich sollten Sie ein vollständiges System-Backup machen und an einem sicheren Platz ablegen (lesen Sie dazu Abschnitt 10.2, „Datensicherung und -wiederherstellung“ ), bevor Sie neu installieren. Ich empfehle für einen sanften Übergang eine Dual-Boot-Installation unter Verwendung separater Partitionen. You can perform system wide upgrade to a newer release by     changing contents of the source list pointing to a new release and running the "apt update; apt dist-upgrade" command. To upgrade from stable to testing or unstable during the     bookworm-as-stable release cycle, you replace "bookworm" in the source list example of Abschnitt 2.1.5, „Grundlagen über das Debian-Archiv“ with "trixie" or "sid". In der Realität könnte es vielleicht einige Komplikationen aufgrund von Problemen mit Paketübergängen geben, meistens wegen Paketabhängigkeiten. Je größer die Unterschiede bei der Hochrüstung sind, um so wahrscheinlicher werden Sie gravierendere     Probleme bekommen. Für die Hochrüstung des alten Stable auf das neue Stable nach dessen Veröffentlichung können Sie die neuen Veröffentlichungshinweise (Release Notes) lesen. Folgen Sie exakt der dort beschriebenen Prozedur, um die möglichen Probleme zu minimieren. Wenn Sie sich entscheiden, vor der offiziellen Freigabe der nächsten Veröffentlichung von Stable zu Testing zu wechseln, gibt     es keine Veröffentlichunshinweise, die Ihnen helfen könnten. Die Unterschiede zwischen Stable und Testing könnten seit der letzten Stable-Veröffentlichung ziemlich groß geworden sein und die Situation für eine Hochrüstung recht komplex machen. Sie sollten vorbeugende Schritte für das vollständige Upgrade     durchführen, indem Sie aktuellste Informationen von den Mailinglisten sammeln, und Ihren gesunden Menschenverstand einsetzen. 1. Lesen Sie die vorherigen "Veröffentlichungshinweise (Release Notes)". 2. Machen Sie eine vollständige Sicherung (Backup) von Ihrem System (speziell Daten und Konfigurationsdateien). 3. Halten Sie ein boot-fähiges Medium bereit für den Fall eines beschädigten Bootloaders. 4. Informieren Sie die Benutzer des Systems rechtzeitig vorher. 5. Zeichnen Sie die Aktivitäten während des Upgrades mit script (1) auf. 6. Wenden Sie "unmarkauto" für erforderliche Pakete an, also z.B. "aptitude unmarkauto vim", um solche Pakete als "Manuell installiert" zu markieren und zu verhindern, dass sie entfernt werden.     7. Minimieren Sie die Anzahl installierter Pakete, um die Wahrscheinlichkeit von Paketkonflikten zu reduzieren, entfernen Sie z.B. Desktop-Task-Pakete. 8. Remove the "/etc/apt/preferences" file (disable apt-pinning). 9. Versuchen Sie, das Upgrade in mehreren Schritten durchzuführen: oldstable → stable → testing → unstable. 10. Update the source list to point to new archive only and run "aptitude update". 11. Installieren Sie neue Kern-Pakete separat im Voraus, z.B. "aptitude install perl" (optional). 12. Führen Sie "apt-get -s dist-upgrade" aus, um die Auswirkungen im Voraus abschätzen zu können. 13. Führen Sie als letztes den Befehl "apt-get dist-upgrade" aus. Achtung Es ist nicht klug, bei Hochrüstung einer Stable-Veröffentlichung     auf ein anderes Stable ein oder mehrere Debian-Hauptveröffentlichungen zu überspringen (also z.B. von Debian 5.0 direkt auf 7.0 hochzurüsten und dabei 6.0 zu überspringen). Achtung     In früheren "Veröffentlichungshinweisen" wurden für GCC, Linux-Kernel, initrd-Werkzeuge, Glibc, Perl, APT-Werkzeuge usw. spezielle Vorsichtsmaßnahmen bei systemweiten Upgrades erwähnt.     Informationen zu täglichen Upgrades in Unstable finden Sie in Abschnitt 2.4.3, „Absicherungen für den Fall von Paketproblemen“. 2.4. Erweiterte Paketmanagement-Operationen 2.4.1. Erweiterte Paketmanagement-Operationen auf der Befehlszeile Hier eine Liste weiterer Paketmanagement-Operationen, die     aptitude nicht unterstützt, weil es auf einer anderen Ebene arbeitet oder weil ihm die nötigen Funktionen fehlen. Tabelle 2.13. Liste erweiterter Paketmanagement-Operationen +-------------------------------------------------------------------------+ | Befehl | Aktion | |------------------------------------------+------------------------------| | |Status eines installierten | |COLUMNS=120 dpkg -l paketnamen_muster |Pakets für einen Fehlerbericht| | |auflisten | |------------------------------------------+------------------------------| |dpkg -L paketname |Inhalte eines installierten | | |Pakets auflisten | |------------------------------------------+------------------------------| |dpkg -L paketname | egrep '/usr/share/man/|Handbuchseiten (manpages) für | |man.*/.+' |ein installiertes Paket | | |auflisten | |------------------------------------------+------------------------------| | |Installierte Pakete auflisten,| |dpkg -S dateinamen_muster |die auf das Muster passende | | |Dateien enthalten | |------------------------------------------+------------------------------| | |Pakete im Archiv auflisten, | |apt-file search dateinamen_muster |die auf das Muster passende | | |Dateien enthalten | |------------------------------------------+------------------------------| | |Inhalte von auf das Muster | |apt-file list paketnamen_muster |passenden Paketen im Archiv | | |auflisten | |------------------------------------------+------------------------------| |dpkg-reconfigure paketname |Dieses Paket neu konfigurieren| |------------------------------------------+------------------------------| |dpkg-reconfigure -plow paketname |Dieses Paket mit detaillierten| | |Fragen neu konfigurieren | |------------------------------------------+------------------------------| | |Pakete über das | |configure-debian |Vollbildschirm-Menü neu | | |konfigurieren | |------------------------------------------+------------------------------| | |System nach teilweise | |dpkg --audit |installierten Paketen | | |durchsuchen | |------------------------------------------+------------------------------| |dpkg --configure -a |Alle teilweise installierten | | |Pakete konfigurieren | |------------------------------------------+------------------------------| | |Verfügbare Version, Priorität | |apt-cache policy binärpaketname |und Archivinformationen eines | | |Binärpakets anzeigen | |------------------------------------------+------------------------------| | |Verfügbare Version und | |apt-cache madison paketname |Archivinformationen eines | | |Pakets anzeigen | |------------------------------------------+------------------------------| |apt-cache showsrc binärpaketname |Quellpaket-Informationen eines|     | |Binärpakets anzeigen | |------------------------------------------+------------------------------| |apt-get build-dep paketname |Zum Bau eines Pakets benötigte| | |Pakete installieren | |------------------------------------------+------------------------------| |aptitude build-dep paketname |Zum Bau eines Pakets benötigte| | |Pakete installieren | |------------------------------------------+------------------------------| |apt-get source paketname |Ein Quellpaket herunterladen | | |(aus dem Standardarchiv) | |------------------------------------------+------------------------------| |dget URL für dsc-Datei |Ein Quellpaket herunterladen | | |(aus einem anderen Archiv) | |------------------------------------------+------------------------------| | |Einen Quellcodebaum aus einem | |dpkg-source -x paketname_version- |Satz von Quellpaketen | |debian.revision.dsc |erstellen ("*.orig.tar.gz" und| | |"*.debian.tar.gz" / | | |"*.diff.gz") | |------------------------------------------+------------------------------| |debuild binärdatei |Paket(e) aus einem lokalen | | |Quellcodebaum bauen | |------------------------------------------+------------------------------| |make-kpkg kernel_image |Ein Kernelpaket aus einem | | |Kernel-Quellcodebaum bauen | |------------------------------------------+------------------------------| | |Ein Kernelpaket mit | |make-kpkg --initrd kernel_image |aktivierter initramfs aus | | |einem Kernel-Quellcodebaum | | |bauen | |------------------------------------------+------------------------------| |dpkg -i paketname_version-debian.revision_|Ein lokales Paket in das | |arch.deb |System installieren | |------------------------------------------+------------------------------| | |Ein lokales Paket in das | |apt install /pfad/zu/paketname.deb |System installieren und dabei | | |versuchen, die Abhängigkeiten | | |automatisch aufzulösen | |------------------------------------------+------------------------------| |debi paketname_version-debian.revision_ |Lokale(s) Paket(e) in das | |arch.dsc |System installieren | |------------------------------------------+------------------------------| |dpkg --get-selections '*' >selection.txt |dpkg-Paketauswahlinformationen| | |sichern | |------------------------------------------+------------------------------| |dpkg --set-selections /etc/alternatives/vi $ sudo update-alternatives --display vi ... $ sudo update-alternatives --config vi     Selection Command ---------------------------------------------- 1 /usr/bin/vim *+ 2 /usr/bin/nvi Enter to keep the default[*], or type selection number: 1 Das Debian-alternatives-System setzt seine Auswahl als     symbolischer Link in "/etc/alternatives/". Der Auswahlprozess nutzt die entsprechende Datei in "/var/lib/dpkg/alternatives/". 2.5.11. Der dpkg-statoverride-Befehl Stat overrides, bereitgestellt durch den dpkg-statoverride(8) -Befehl, sind ein Weg, dpkg(1) mitzuteilen, dass bei Installation     eines Pakets für eine Datei ein anderer Eigentümer oder andere Berechtigungen verwendet werden sollen. Falls "--update" angegeben wurde und die Datei bereits existiert, werden direkt der neue Eigentümer oder neue Berechtigungen gesetzt. Achtung     Die direkte Abänderung von Benutzer oder Berechtigungen durch den Systemadministrator (über die Befehle chmod oder chown) bei einer Datei, die zu einem Paket gehört, wird bei der nächsten Aktualisierung des Pakets wieder aufgehoben. Anmerkung     Ich verwende hier den Begriff Datei, jedoch kann dies jegliches Objekt im Dateisystem sein, dass durch dpkg behandelt wird, inklusive Verzeichnissen, Gerätedateien usw. 2.5.12. Der dpkg-divert-Befehl Diversions, bereitgestellt durch den dpkg-divert(8)-Befehl, bieten die Möglichkeit, dpkg(1) zu zwingen, eine Datei nicht an     Ihren Standardort zu installieren, sondern an einen umgelenkten Speicherort (diverted). dpkg-divert ist zur Verwendung durch Paketverwaltungs-Skripte gedacht. Die beiläufige Verwendung durch den Systemadministrator ist nicht mehr zeitgemäß. 2.6. Wiederherstellung eines beschädigten Systems Bei einem testing- oder unstable-System sollte der Administrator     darauf vorbereitet sein, das System im Falle einer Beschädigung des Paketmanagements wiederherstellen zu können. Achtung     Einige Methoden, die hier beschrieben werden, beinhalten ein hohes Risiko. Sie wurden gewarnt! 2.6.1. Fehlgeschlagene Installation aufgrund von fehlenden Abhängigkeiten Wenn Sie die Installation eines Pakets über "sudo dpkg -i ..."     auf einem System erzwingen, auf dem nicht alle erforderlichen Pakete vorhanden sind, wird die Paketinstallation mit dem Status "nicht vollständig installiert" fehlschlagen.     Sie sollten alle benötigten Pakete (Depends) über das APT-System oder "sudo dpkg -i ..." installieren.     Konfigurieren Sie dann alle unvollständig installierten Pakete mit folgendem Befehl:     # dpkg --configure -a 2.6.2. Fehler beim Zwischenspeichern der Paketdaten Fehler beim Zwischenspeichern der Paketdaten führen zu     verblüffenden Meldungen, wie "GPG error: ... invalid: BADSIG ..." bei APT. Sie sollten alle zwischengespeicherten Daten mittels "sudo rm -rf     /var/lib/apt/* " entfernen und es erneut versuchen. (Falls Sie apt-cacher-ng verwenden, führen Sie auch "sudo rm -rf /var/cache/ apt-cacher-ng/* " aus.) 2.6.3. Inkompatibilität mit alter Benutzerkonfiguration Wenn ein Desktop-GUI-Programm nach signifikanten Upgrades von Upstream Instabilitäten erkennen lässt, sollten Sie Behinderungen durch alte lokal erstellte Konfigurationsdateien als Ursache in     Betracht ziehen. Falls das Programm unter einem neu erstellten Benutzerkonto stabil läuft, ist diese Hypothese bestätigt. (Dies ist ein Fehler beim Paketieren und wird für gewöhnlich durch den Paketersteller vermieden.) Um das Programm wieder stabil zu bekommen, sollten Sie die entsprechenden lokalen Konfigurationsdateien beiseite schaffen     und das GUI-Programm neu starten. Sie müssen möglicherweise die Inhalte alter Konfigurationsdateien lesen, um die Konfigurationsinformationen später wiederherstellen zu können. (Löschen Sie sie nicht zu früh.) 2.6.4. Mehrere Pakete mit überlappenden Dateien Paketmanagementsysteme für das Debian-Archiv wie aptitude(8) oder     apt-get(1) versuchen erst gar nicht, Pakete mit überlappenden Dateien über Paketabhängigkeiten zu installieren (weiteres in Abschnitt 2.1.7, „Paketabhängigkeiten“). Fehler durch einen Paketbetreuer oder die Einrichtung von inkonsistent gemischten Archivquellen durch den Systemadministrator (lesen Sie Abschnitt 2.7.6, „Packages from mixed source of archives without apt-pinning“) könnten     Situationen mit falsch definierten Paketabhängigkeiten hervorrufen. Wenn Sie in solch einer Situation ein Paket mit überlappenden Dateien mittels aptitude(8) oder apt-get(1) installieren, stellt dpkg(1), das das Paket entpackt, sicher, dass ein Fehler an das aufrufende Programm zurückgegeben wird, ohne dass vorhandene Dateien überschrieben werden. Achtung Die Verwendung von Paketen aus Drittquellen bringt durch     Betreuerskripte ein erhebliches Risiko für das System mit sich, da diese mit root-Privilegien ausgeführt werden und jegliche Aktion auf dem System ausführen können. Der dpkg(1)-Befehl schützt lediglich vor dem Überschreiben beim Entpacken.     Sie können solche beschädigten Installationen umgehen, indem Sie vorher das alte betroffene Paket altes-paket entfernen:     $ sudo dpkg -P old-package 2.6.5. Behebung von Problemen aufgrund von beschädigtem Paketskript Wenn ein Befehl in einem Paketskript aus irgendeinem Grund einen Fehler zurückgibt und das Skript aufgrund des Fehlers abgebrochen wird, beendet das Paketmanagement die Aktion und es bleiben     halb-installierte Pakete zurück. Enthält ein Paket Programmierfehler in seinen Skripten zum Löschen des Pakets, könnte es sein, dass das Paket nicht mehr entfernt werden kann und ziemlich unangenehm wird.     Wenn das Paket "paketname" ein Problem mit den Skripten hat, sollten Sie in folgenden Paketskripten nachschauen: * "/var/lib/dpkg/info/paketname.preinst" * "/var/lib/dpkg/info/paketname.postinst"     * "/var/lib/dpkg/info/paketname.prerm" * "/var/lib/dpkg/info/paketname.postrm"     Editieren Sie die angebotenen Paketskripte von Grund auf mittels folgender Techniken: * deaktivieren Sie die problematische Zeile, indem Sie ein "#" voranstellen;     * erzwingen Sie, dass das Skript einen Rückgabewert für Erfolg zurück gibt, indem Sie der fraglichen Zeile "|| true" anhängen.     Folgen Sie dann den Anweisungen in Abschnitt 2.6, „Wiederherstellung eines beschädigten Systems“. 2.6.6. Systemrettung mit dem dpkg-Befehl Da dpkg ein Paketwerkzeug ist, das auf der untersten Ebene arbeitet, kann es auch in sehr schlechten Situationen wie einem     nicht startfähigen System und ohne Netzwerkverbindung noch arbeiten. Wir gehen hier davon aus, dass das Paket foo beschädigt war und ersetzt werden muss. Sie könnten im cache-Verzeichnis "/var/cache/apt/archives/" zwischengespeicherte Kopien von älteren, fehlerfreien Versionen     des Pakets foo finden. (Falls nicht, können Sie diese auch aus dem Archiv unter https://snapshot.debian.org/ herunterladen oder von einem funktionierenden System herüber kopieren.)     Ist das System boot-fähig, könnte es unter Umständen möglich sein, das Paket mit folgendem Befehl zu installieren:     # dpkg -i /path/to/foo_old_version_arch.deb Tipp     Wenn die Beschädigung des Systems nur gering ist, könnten Sie das ganze System möglicherweise mit dem APT-System auf eine ältere Version zurückrüsten, wie in Abschnitt 2.7.11, „Downgrade im Notfall“ beschrieben.     Kann Ihr System überhaupt nicht mehr von Festplatte gestartet werden, suchen Sie nach anderen Wegen, das System zu starten: 1. Booten Sie das System, indem Sie den Rettungsmodus der debian-installer-CD verwenden.     2. Binden Sie die Festplattenpartitionen des nicht mehr zu startenden Systems in "/target" ein. 3. Installieren Sie wie folgt eine ältere Version des Pakets foo:     # dpkg --root /target -i /path/to/foo_old_version_arch.deb     Dies funktioniert sogar, wenn der dpkg-Befehl auf der Festplatte beschädigt ist. Tipp     Jegliches GNU/Linux-System, das von einem anderen System auf der Festplatte oder von Live-GNU/Linux-CD, bootfähigem USB-Stick oder per Netboot gestartet wird, kann auf ähnliche Art zur Rettung des beschädigten Systems verwendet werden. Falls der Versuch, ein Paket auf diese Art zu installieren, aufgrund von verletzten Abhängigkeiten fehlschlägt, können Sie als letzten Ausweg Abhängigkeiten mit den dpkg-Optionen     "--ignore-depends", "--force-depends" und weiteren überschreiben. Dabei müssen Sie besondere Sorgfalt darauf verwenden, die Abhängigkeiten später korrekt wiederherzustellen. Details finden Sie in dpkg(8). Anmerkung Falls Ihr System ernsthaft beschädigt ist, sollten ein     vollständiges Backup aller Daten an einem sicheren Ort ablegen (siehe Abschnitt 10.2, „Datensicherung und -wiederherstellung“) und eine saubere Neuinstallation durchführen. Dies ist weniger zeitaufwändig und führt am Ende zu einem besseren Ergebnis. 2.6.7. Paketauswahldaten wiederherstellen Falls "/var/lib/dpkg/status" aus irgendeinem Grund beschädigt wird, verliert das Debian-System die Daten über ausgewählte     Pakete und kommt dadurch erheblich zu Schaden. Sie finden alte "/ var/lib/dpkg/status"-Dateien in "/var/lib/dpkg/status-old" oder " /var/backups/dpkg.status.*". Es könnte eine gute Idee sein, "/var/backups/" auf einer     separaten Partition abzulegen, da dieses Verzeichnis viele wichtige Systemdaten enthält. Bei ernsten Beschädigungen empfehle ich eine frische Neuinstallation, nachdem eine Sicherung der Daten durchgeführt     wurde. Sogar wenn alles in "/var/" verloren ist, können Sie trotzdem noch etliche Informationen aus Verzeichnissen in "/usr/ share/doc/" wiederherstellen, um Ihre neue Installation zu lenken:     Installieren Sie ein minimales (Desktop-)System.     # mkdir -p /path/to/old/system     Binden Sie die alten Systempartitionen in "/pfad/zum/alten/system /" ein. # cd /path/to/old/system/usr/share/doc # ls -1 >~/ls1.txt     # cd /usr/share/doc # ls -1 >>~/ls1.txt # cd # sort ls1.txt | uniq | less Jetzt haben Sie eine Liste mit Paketnamen, die Sie installieren     können. (Es könnten auch einige Zeichenfolgen darunter sein, die keine Paketnamen sind, wie z.B. "texmf".) 2.7. Tipps für das Paketmanagement For simplicity, the source list examples in this section are     presented as "/etc/apt/sources.list" in one-line-style after the bookworm release. 2.7.1. Wer hat das Paket hochgeladen? Obwohl der Betreuername, der in "/var/lib/dpkg/available" und "/ usr/share/doc/package_name/changelog" aufgelistet ist, Informationen darüber gibt, "wer hinter den Paketaktivitäten     steht", sind Informationen über den Uploader (die Person, die das Paket wirklich hochgeladen hat) ein wenig verschleiert. who-uploads(1) aus dem devscripts-Paket identifiziert die realen Uploader von Debian-Quellpaketen. 2.7.2. Die Download-Bandbreite für APT einschränken Falls Sie die Download-Bandbreite für APT einschränken möchten,     sagen wir z.B. auf 800Kib/sec (=100kiB/sec), sollten Sie APT mit folgenden Konfigurationsparametern einrichten:     APT::Acquire::http::Dl-Limit "800"; 2.7.3. Automatisches Herunterladen und Aktualisieren von Paketen Das apt-Paket enthält ein eigenes cron-Skript ("/etc/cron.daily/ apt"), um den automatischen Download von Paketen zu unterstützen. Durch die Installation des unattended-upgrades-Pakets kann dieses     Skript erweitert werden, so dass auch die automatische Aktualisierung von Paketen durchgeführt wird. Sie können dies über Parameter in "/etc/apt/apt.conf.d/02backup" und "/etc/apt/ apt.conf.d/50unattended-upgrades" noch weiter anpassen, wie in "/ usr/share/doc/unattended-upgrades/README" beschrieben. Das unattended-upgrades-Paket ist hauptsächlich für Sicherheits-Upgrades auf Stable-Systemen gedacht. Wenn das Risiko, ein vorhandenes Stable-System über einen automatischen Upgrade-Prozess zu beschädigen, geringer ist als das, welches von     einem Angreifer ausgeht, der über Ausnutzung einer Sicherheitslücke das System schädigt, sollten Sie ein automatisches Upgrade in Erwägung ziehen, das diese Lücke über ein Sicherheits-Upgrade schließt. Nutzen Sie dazu folgende Konfigurationsparameter: APT::Periodic::Update-Package-Lists "1";     APT::Periodic::Download-Upgradeable-Packages "1"; APT::Periodic::Unattended-Upgrade "1"; If you are running an testing or unstable system, you do not want to use the automatic upgrade since it certainly breaks system     some day. Even for such testing or unstable case, you may still want to download packages in advance to save time for the interactive upgrade with configuration parameters as the following. APT::Periodic::Update-Package-Lists "1";     APT::Periodic::Download-Upgradeable-Packages "1"; APT::Periodic::Unattended-Upgrade "0"; 2.7.4. Aktualisierungen und Backports There are stable-updates ("bookworm-updates" during the     bookworm-as-stable release cycle) and backports.debian.org archives which provide upgrade packages for stable.     Um diese Archive zu nutzen, listen Sie alle erforderlichen Archive in der "/etc/apt/sources.list"-Datei auf, wie hier: deb http://deb.debian.org/debian/ bookworm main non-free-firmware contrib non-free     deb http://security.debian.org/debian-security bookworm-security main non-free-firmware contrib non-free deb http://deb.debian.org/debian/ bookworm-updates main non-free-firmware contrib non-free deb http://deb.debian.org/debian/ bookworm-backports main non-free-firmware contrib non-free Es ist nicht nötig, einen Wert für die Pin-Priorität in "/etc/apt /preferences" zu setzen. Wenn neuere Pakete verfügbar werden,     werden mit der Standardkonfiguration passende Upgrades bereitgestellt (siehe Abschnitt 2.5.3, „"Release"-Dateien im Archivverzeichnis“). * Alle installierten veralteten Pakete werden auf die neuen von bookworm-updates aktualisiert.     * Nur manuell installierte veraltete Pakete von bookworm-backports werden auf die neuen Versionen von bookworm-backports aktualisiert. Wann immer Sie ein Paket namens "paketname" inklusive seiner     Abhängigkeiten von bookworm-backports manuell installieren möchten, verwenden Sie den folgenden Befehl, wobei Sie die Zielveröffentlichung mit der Option "-t" festlegen:     $ sudo apt-get install -t bookworm-backports package-name Warnung     Do not install too many packages from backports.debian.org archives. It may cause package dependency complications. See Abschnitt 2.1.11, „How to cope with conflicting requirements“ for alternative solutions. 2.7.5. External package archives Warnung     You should be aware that the external package gains the root priviledge to your system. You should only use the trusted external package archive. See Abschnitt 2.1.11, „How to cope with conflicting requirements“ for alternative solutions. You can use secure APT with Debian-compatible external package     archive by adding it to the source list and its archive key file into the "/etc/apt/trusted.gpg.d/" directory. See sources.list (5), apt-secure(8) and apt-key(8). 2.7.6. Packages from mixed source of archives without apt-pinning Achtung     Installing packages from mixed source of archives is not supported by the official Debian distribution except for officially supported particular combinations of archives such as stable with security updates and stable-updates. Hier ein Beispiel von Befehlen, über die man spezielle neuere     Upstream-Versionen von Paketen aus Unstable verwendet, während ansonsten Testing genutzt wird: 1. Ändern Sie die Datei "/etc/apt/sources.list" vorübergehend in "unstable". 2. Führen Sie "aptitude update" aus.     3. Führen Sie "aptitude install packetname" aus. 4. Stellen Sie die Originalversion von "/etc/apt/sources.list" für testing wieder her. 5. Führen Sie "aptitude update" aus. You do not create the "/etc/apt/preferences" file nor need to     worry about apt-pinning with this manual approach. But this is very cumbersome. Achtung Wenn Sie gemischte Paketquellen verwenden, müssen Sie die Kompatibilität selbst sicherstellen, da Debian diese in solchem     Falle nicht garantieren kann. Falls Paketinkompatibilitäten existieren, könnten Sie Ihr System beschädigen. Sie müssen in der Lage sein, diese technischen Anforderungen zu beurteilen. Die Verwendung von gemischten Quellen zufällig ausgewählter Archive ist eine absolut optionale Operation und nicht zu empfehlen.     Die grundsätzlichen Regeln für die Installation von Paketen aus unterschiedlichen Archiven sind wie folgt: * Nicht-binäre Pakete ("Architecture: all") sind recht unproblematisch zu installieren: + Dokumentationspakete: keine speziellen Anforderungen; + Pakete von Interpreter-Programmen: ein kompatibler Interpreter muss verfügbar sein. * Bei Binärpaketen (nicht "Architecture: all") gibt es gewöhnlich viele Stolpersteine und ihre Installation könnte problematisch sein:     + Kompatibilität zu Bibliotheksversionen (inklusive "libc"); + Kompatibilität zu damit in Verbindung stehenden Hilfswerkzeugen; + Kernel ABI-Kompatibilität; + C++ ABI-Kompatibilität; + … Anmerkung     Um die Installation eines Pakets unproblematischer zu machen, existieren möglicherweise einige nicht-freie Binärprogramm-Pakete mit vollständig statisch gelinkten Bibliotheken. Sie sollten diese immer auf ABI-Kompatibilitätsprobleme usw. kontrollieren. Anmerkung Except to avoid broken package for a short term, installing     binary packages from non-Debian archives is generally bad idea. You should seek all available alternative safer technical solutions which are compatible with your current Debian syetem (see Abschnitt 2.1.11, „How to cope with conflicting requirements“). 2.7.7. Tweaking candidate version with apt-pinning Warnung     Use of apt-pinning by a novice user is sure call for major troubles. You must avoid using apt-pinning except when you absolutely need it. Ohne eine "/etc/apt/preferences"-Datei wählt das APT-System basierend auf dem Versionseintrag die letzte verfügbare Version als Installationskandidat-Version aus. Dies ist der normale Weg     und die empfohlene Verwendung des APT-Systems. Alle offiziell unterstützten Archivkombinationen erfordern keine "/etc/apt/ preferences"-Datei, da bei Archiven, die nicht als automatische Quelle für Aktualisierungen empfohlen werden, die Einstellung NotAutomatic gesetzt ist und diese entsprechend behandelt werden. Tipp     Die Regel zum Vergleich der Versionsnummern (welche Versionsnummer größer ist) kann z.B. über "dpkg --compare-versions ver1.1 gt ver1.1~1; echo $?" verifiziert werden (näheres unter dpkg(1)). Wenn Sie regelmäßig Pakete aus gemischten Quellen installieren (siehe Abschnitt 2.7.6, „Packages from mixed source of archives without apt-pinning“), können Sie diese komplizierten Operationen     automatisieren, indem Sie eine Datei "/etc/apt/preferences" mit entsprechenden Einträgen erstellen; so beeinflussen Sie die Auswahlregel für die Installationskandidat-Version; dies ist in apt_preferences(5) beschrieben. Dies Verfahren wird apt-pinning genannt. When using apt-pinning, you must ensure compatibility of packages     by yourself since the Debian does not guarantee it. The apt-pinning is completely optional operation and its use is not something I encourage you to use. Archive level Release files (see Abschnitt 2.5.3, „"Release"-Dateien im Archivverzeichnis“) are used for the rule of apt_preferences(5). Thus apt-pinning works only with "suite"     name for normal Debian archives and security Debian archives. (This is different from Ubuntu archives.) For example, you can do "Pin: release a=unstable" but can not do "Pin: release a=sid" in the "/etc/apt/preferences" file. When you use non-Debian archive as a part of apt-pinning, you     should check what they are intended for and also check their credibility. For example, Ubuntu and Debian are not meant to be mixed. Anmerkung Even if you do not create the "/etc/apt/preferences" file, you     can do fairly complex system operations (see Abschnitt 2.6.6, „Systemrettung mit dem dpkg-Befehl“ and Abschnitt 2.7.6, „Packages from mixed source of archives without apt-pinning“) without apt-pinning.     Hier eine vereinfachte Beschreibung der Technik hinter apt-pinning: Das APT-System wählt für ein Upgrade das Paket mit der höchsten Pin-Priorität aus den verfügbaren (in "/etc/apt/sources.list" definierten) Paketquellen als Installationskandidat-Version aus.     Wenn die Pin-Priorität des Pakets größer als 1000 ist, wird die Einschränkung für Upgrades nicht beachtet, um ein Downgrade (eine Zurückrüstung auf eine ältere Version) zu ermöglichen (siehe Abschnitt 2.7.11, „Downgrade im Notfall“). Werte für die Pin-Priorität eines jeden Pakets werden über     Einträge in der "/etc/apt/preferences"-Datei festgelegt oder verwenden deren Standardwert. Tabelle 2.18. Liste erwähnenswerter Pin-Prioritäts-Werte für apt-pinning +---------------------------------------------------------------+ |Pin-Priorität| apt-pinning effects to the package | |-------------+-------------------------------------------------| |1001 |das Paket installieren, auch wenn dies ein | | |Downgrade des Pakets bedeutet | |-------------+-------------------------------------------------| |990 |wird als Standardwert für das Archiv der | | |Zielveröffentlichung verwendet | |-------------+-------------------------------------------------| |500 |wird als Standardwert für das normale Archiv |     | |verwendet | |-------------+-------------------------------------------------| |100 |wird als Standardwert für Archive mit | | |NotAutomatic und ButAutomaticUpgrades verwendet | |-------------+-------------------------------------------------| |100 |wird für das installierte Paket verwendet | |-------------+-------------------------------------------------| |1 |wird als Standardwert für Archive mit | | |NotAutomatic verwendet | |-------------+-------------------------------------------------| |-1 |das Paket niemals installieren, selbst wenn es | | |empfohlen wird | +---------------------------------------------------------------+     The target release archive can be set by the command line option, e.g., "apt-get install -t testing some-package" Die NotAutomatic- und ButAutomaticUpgrades-Archive werden durch Archiv-Server definiert, die in ihren Release-Dateien im Archiv-Wurzelverzeichnis (siehe Abschnitt 2.5.3,     „"Release"-Dateien im Archivverzeichnis“) sowohl "NotAutomatic: yes" wie auch "ButAutomaticUpgrades: yes" gesetzt haben. Das NotAutomatic-Archiv wird über Server definiert, die in ihren Release-Dateien lediglich "NotAutomatic: yes" gesetzt haben.     Die apt-pinning-Situation von package aus mehreren Archivquellen wird mittels "apt-cache policy package" angezeigt. * Eine Zeile beginnend mit "Package pin:" listet die Paketversion von pin auf, wenn die Zuordnung direkt über package definiert ist, z.B. "Package pin: 0.190". * Es existiert keine Zeile mit "Package pin:", wenn keine Zuordnung direkt über package definiert ist. * Der Pin-Prioritäts-Wert, der direkt zu package gehört, ist rechts neben den Versionseinträgen aufgelistet, z.B. "0.181     700". * "0" wird rechts neben den Versionseinträgen aufgelistet, wenn keine Zuordnung direkt mit package definiert ist, z.B "0.181 0". * Die Pin-Prioritäts-Werte von Archiven (definiert als "Package: *" in der "/etc/apt/preferences"-Datei) sind links von den Archivpfaden aufgelistet, z.B. "100 http:// deb.debian.org/debian/ bookworm-backports/main Packages". 2.7.8. Über "Recommends" installierte Pakete blockieren Warnung     Use of apt-pinning by a novice user is sure call for major troubles. You must avoid using apt-pinning except when you absolutely need it. Wenn Sie verhindern möchten, dass bestimmte Pakete über "Recommends"-Abhängigkeiten (Empfohlen) installiert werden,     müssen Sie die Datei "/etc/apt/preferences" erstellen und explizit all diese Pakete ganz oben in der Datei auflisten, wie in diesem Beispiel: Package: package-1 Pin: version * Pin-Priority: -1     Package: package-2 Pin: version * Pin-Priority: -1 2.7.9. Nutzen von Testing mit einigen Paketen aus Unstable Warnung     Use of apt-pinning by a novice user is sure call for major troubles. You must avoid using apt-pinning except when you absolutely need it. Hier ein Beispiel für eine apt-pinning-Technik, um neuere Upstream-Versionen einzelner Pakete aus Unstable regelmäßig     aktualisieren zu können und ansonsten Testing zu nutzen. Sie listen alle benötigten Archive in der "/etc/apt/ sources.list"-Datei auf, wie hier: deb http://deb.debian.org/debian/ testing main contrib non-free     deb http://deb.debian.org/debian/ unstable main contrib non-free deb http://security.debian.org/debian-security testing-security main contrib     Richten Sie die "/etc/apt/preferences"-Datei wie folgt ein: Package: *     Pin: release a=unstable Pin-Priority: 100 Wenn Sie mit dieser Konfiguration ein Paket namens "paketname" aus dem Unstable-Archiv inklusive seiner Abhängigkeiten     installieren möchten, führen Sie folgenden Befehl aus, wobei über die Option "-t" die Zielveröffentlichung angepasst wird (die Pin-Priorität von Unstable wird 990):     $ sudo apt-get install -t unstable package-name Mit dieser Konfiguration wird die normale Ausführung von "apt-get upgrade" und "apt-get dist-upgrade" (oder "aptitude safe-upgrade" und "aptitude full-upgrade") Pakete, die aus Testing installiert     wurden, unter Verwendung des derzeitigen Testing-Archivs aktualisieren; Pakete, die aus Unstable installiert wurden, werden unter Verwendung des derzeitigen Unstable-Archivs aktualisiert. Achtung     Achten Sie darauf, dass Sie nicht den "testing"-Eintrag aus der " /etc/apt/sources.list"-Datei entfernen. Ohne diesen "testing"-Eintrag aktualisiert das APT-System alle Pakete unter Verwendung des (neueren) Unstable-Archivs. Tipp Ich bearbeite für gewöhnlich die "/etc/apt/sources.list"-Datei direkt nach obigen Befehlen, um das "unstable"-Archiv     auszukommentieren. Dies verhindert, dass der Prozess zur Aktualisierung der Paketdaten aufgrund von zu vielen Einträgen in der "/etc/apt/sources.list"-Datei sehr lange dauert; allerdings können dadurch Pakete, die aus Unstable installiert wurden, nicht unter Verwendung des derzeitigen Unstable-Archivs aktualisiert werden. Tipp Wenn "Pin-Priority: 1" statt "Pin-Priority: 100" in der "/etc/apt     /preferences"-Datei eingetragen wird, werden bereits installierte Pakete, die den Pin-Prioritäts-Wert 100 haben, nicht mittels dem Unstable-Archiv aktualisiert, selbst wenn der "testing"-Eintrag in "/etc/apt/sources.list" entfernt wird. Möchten Sie bestimmte Pakete in Unstable automatisch ohne     vorangestelltes "-t unstable" auf aktuellem Stand halten, müssen Sie die "/etc/apt/preferences"-Datei erstellen und ganz oben in der Datei all diese Pakete wie folgt auflisten: Package: package-1 Pin: release a=unstable Pin-Priority: 700     Package: package-2 Pin: release a=unstable Pin-Priority: 700 Dadurch wird die Pin-Priorität für jedes dieser Pakete spezifisch gesetzt. Um zum Beispiel immer die aktuellste Unstable-Version     dieser "Debian Reference" in Englisch zu installieren, sollten Sie folgende Einträge in Ihrer "/etc/apt/preferences"-Datei haben: Package: debian-reference-en Pin: release a=unstable Pin-Priority: 700     Package: debian-reference-common Pin: release a=unstable Pin-Priority: 700 Tipp     This apt-pinning technique is valid even when you are tracking stable archive. Documentation packages have been always safe to install from unstable archive in my experience, so far. 2.7.10. Nutzen von Unstable mit einigen Paketen aus Experimental Warnung     Use of apt-pinning by a novice user is sure call for major troubles. You must avoid using apt-pinning except when you absolutely need it. Hier ein anderes Beispiel der apt-pinning-Technik, um neuere Upstream-Versionen einzelner Pakete aus Experimental zu     integrieren und ansonsten Testing zu nutzen. Sie listen alle benötigten Archive in der "/etc/apt/sources.list"-Datei auf, wie hier: deb http://deb.debian.org/debian/ unstable main contrib non-free     deb http://deb.debian.org/debian/ experimental main contrib non-free deb http://security.debian.org/ testing-security main contrib Die Standard-Pin-Priorität für das Experimental-Archiv ist immer 1 (<<100), da es ein Archiv mit gesetztem NotAutomatic ist (siehe Abschnitt 2.5.3, „"Release"-Dateien im Archivverzeichnis“). Es     ist nicht nötig, den Wert für die Pin-Priorität explizit in der " /etc/apt/preferences"-Datei zu setzen, um das Experimental-Archiv nutzen zu können (außer wenn Sie möchten, dass bestimmte Pakete daraus beim nächsten Upgrade automatisch verwendet werden sollen). 2.7.11. Downgrade im Notfall Warnung     Use of apt-pinning by a novice user is sure call for major troubles. You must avoid using apt-pinning except when you absolutely need it. Achtung Ein Downgrade wird von Debian aufgrund seines Designs nicht offiziell unterstützt. Es sollte nur als Teil einer     Notfall-Rettungsmaßnahme durchgeführt werden. Davon einmal abgesehen ist bekannt, dass es in den meisten Fällen gut funktioniert. Bei kritischen Systemen sollten Sie nach der Wiederherstellung alle wichtigen Daten auf dem System sichern und dann das System von Grund auf neu installieren. Sie könnten Glück haben und ein Downgrade auf eine ältere Archiv-Version durch Manipulation der Installationskandidat-Versionen hinbekommen (lesen Sie dazu     Abschnitt 2.7.7, „Tweaking candidate version with apt-pinning“). Dies ist die tippfaule Alternative zu vielen langwierigen Befehlen der Art "dpkg -i beschädigtes-paket_alte-version.deb" (näheres dazu in Abschnitt 2.6.6, „Systemrettung mit dem dpkg-Befehl“).     Suchen Sie Zeilen in der "/etc/apt/sources.list"-Datei wie die folgende, die unstable referenzieren:     deb http://deb.debian.org/debian/ sid main contrib non-free     Ersetzen Sie sie durch die folgende, um stattdessen auf testing zu verweisen:     deb http://deb.debian.org/debian/ trixie main contrib non-free     Richten Sie die "/etc/apt/preferences"-Datei wie folgt ein: Package: *     Pin: release a=testing Pin-Priority: 1010     Führen Sie "apt-get update; apt-get dist-upgrade" aus, um ein Downgrade aller Pakete im System zu erzwingen.     Entfernen Sie diese spezielle "/etc/apt/preferences"-Datei nach dem Downgrade. Tipp Es ist eine gute Idee, so viele Pakete wie möglich zu löschen (nicht vollständig inklusive der Konfigurationsdateien     entfernen!), um die Wahrscheinlichkeit von Abhängigkeitsproblemen zu minimieren. Sie müssen bei einem solchen Downgrade unter Umständen einige Pakete von Hand entfernen oder installieren. Linux-Kernel, Bootloader, udev, PAM, APT und Netzwerk-bezogene Pakete sowie deren Konfigurationsdateien erfordern besondere Aufmerksamkeit. 2.7.12. Das equivs-Paket Wenn Sie ein Programm aus den Quellen übersetzen möchten, um das     entsprechende Debian-Paket zu ersetzen, ist es das beste, ein echtes lokal gebautes Paket nach Debian-Art zu erstellen (*.deb) und dafür ein privates Archiv zu nutzen. Haben Sie sich jedoch entschieden, ein Programm aus den Quellen     zu kompilieren und es stattdessen in "/usr/local" zu installieren, können Sie möglicherweise equivs als letzte Rettung einsetzen, um die fehlenden Paketabhängigkeiten zu erfüllen: Package: equivs Priority: optional Section: admin Description: Circumventing Debian package dependencies This package provides a tool to create trivial Debian packages. Typically these packages contain only dependency information, but they can also include normal installed files like other packages do.     . One use for this is to create a metapackage: a package whose sole purpose is to declare dependencies and conflicts on other packages so that these will be automatically installed, upgraded, or removed. . Another use is to circumvent dependency checking: by letting dpkg think a particular package name and version is installed when it isn't, you can work around bugs in other packages' dependencies. (Please do still file such bugs, though.) 2.7.13. Ein Paket auf das Stable-System portieren Achtung     There is no gurantee for the procedure descried here to work without extra manual efforts for system differences. Für partielle Upgrades eines Stable-Systems ist das Neubauen von     Paketen innerhalb ihrer Umgebung unter Verwendung der Quellpakete sinnvoll. Sie vermeiden so riesige Upgrades aufgrund von Paketabhängigkeiten.     Fügen Sie folgende Einträge zur "/etc/apt/sources.list" des Stable-Systems hinzu:     deb-src http://deb.debian.org/debian unstable main contrib non-free     Installieren Sie für das Kompilieren erforderliche Pakete und laden Sie das Quellpaket wie folgt herunter: # apt-get update # apt-get dist-upgrade     # apt-get install fakeroot devscripts build-essential # apt-get build-dep foo $ apt-get source foo $ cd foo* Aktualisieren Sie einige Pakete aus der Werkzeugkette wie z.B.     dpkg und debhelper aus Paketquellen für zurück-portierte Pakete, falls diese für die Rückportierung erforderlich sind.     Führen Sie folgendes aus:     $ dch -i     Erhöhen Sie die Paketversion, z.B. indem Sie ein "+bp1" in "debian/changelog" angehängen.     Bauen Sie die Pakete und installieren Sie sie wie folgt im System: $ debuild     $ cd .. # debi foo*.changes 2.7.14. Proxy-Server für APT Obwohl das Spiegeln von vollständigen Sektionen des Debian-Archivs Plattenplatz und Netzwerkbandbreite verschwendet, ist es der Einsatz eines lokalen Proxy-Servers für APT wert in Erwägung gezogen zu werden, wenn Sie viele Systeme im LAN (Netzwerk) administrieren. APT kann konfiguriert werden, einen     generischen Web-(http-)Proxy-Server wie squid (siehe auch Abschnitt 6.5, „Weitere Netzwerkanwendungs-Server“) zu verwenden, wie in apt.conf(5) und "/usr/share/doc/apt/examples/ configure-index.gz" beschrieben. Sie können die Umgebungsvariable "$http_proxy" nutzen, um die Proxy-Server-Einstellungen aus der " /etc/apt/apt.conf"-Datei zu überschreiben. Es gibt Proxy-Hilfsprogramme, die für das Debian-Archiv     spezialisiert sind. Sie sollten die Fehlerdatenbank (BTS) überprüfen, bevor Sie sie verwenden. Tabelle 2.19. Liste von Proxy-Hilfsprogrammen speziell für das Debian-Archiv +---------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |-------------+------+-----+------------------------------------| | |V:0, | |zwischenspeichernder Proxy-Server | |approx |I:0 |7124 |für Debian-Archiv-Dateien | | | | |(kompiliertes OCaml-Programm) |     |-------------+------+-----+------------------------------------| | |V:0, | |zwischenspeichernder Proxy-Server | |apt-cacher |I:0 |266 |für Debian-Paket- und Quell-Dateien | | | | |(Perl-Programm) | |-------------+------+-----+------------------------------------| | |V:4, | |zwischenspeichernder Proxy für die | |apt-cacher-ng|I:4 |1816 |Verteilung von Software-Paketen | | | | |(kompiliertes C++-Programm) | +---------------------------------------------------------------+ Achtung Sollte Debian einmal seine Archivstruktur umorganisieren,     benötigen diese spezialisierten Proxy-Hilfsprogramme eventuell eine Code-Änderung durch den Paketbetreuer und könnten eine Zeit lang nicht funktionsfähig sein. Generische Web-(http-) Proxy-Server sind andererseits robuster und können einfacher mit solchen Änderungen umgehen. 2.7.15. Weitere Lektüre zum Paketmanagement     Folgende Dokumentation bietet sich an, um mehr über das Paketmanagement zu lernen. * Primäre Dokumentation zum Paketmanagement: + aptitude(8), dpkg(1), tasksel(8), apt(8), apt-get(8), apt-config(8), apt-secure(8), sources.list(5), apt.conf (5) und apt_preferences(5); + "/usr/share/doc/apt-doc/guide.html/index.html" und "/usr/ share/doc/apt-doc/offline.html/index.html" aus dem apt-doc-Paket; + "/usr/share/doc/aptitude/html/en/index.html" aus dem aptitude-doc-en-Paket.     * Offizielle und detaillierte Dokumentation zum Debian-Archiv: + "Debian Policy Manual Chapter 2 - The Debian Archive" + "Debian Entwickler-Referenz, Kapitel 4 - Ressourcen für Debian-Entwickler, 4.6 Das Debian-Archiv" + "Die Debian GNU/Linux-FAQ, Kapitel 6 - Die Debian FTP-Archive" * Anleitung zum Bau eines Debian-Pakets für Debian-Benutzer: + "Debian-Leitfaden für Paketbetreuer" Kapitel 3. Die Systeminitialisierung Als Systemadministrator sollten Sie grob wissen, wie das Debian-System gestartet und konfiguriert wird. Obwohl die genauen     Details in den Quelldateien der installierten Pakete und deren Dokumentation zu finden sind, ist dies für die meisten von uns ein bisschen viel. Hier ein knapper Überblick über die wichtigsten Dinge bei der     Initialisierung eines Debian-Systems. Da dies ein bewegliches Ziel ist, sollten Sie die neueste Dokumentation lesen: * Das Debian Linux Kernel Handbook ist die primäre Informationsquelle zum Debian-Kernel.     * bootup(7) beschreibt den System-Boot-Prozess basierend auf systemd (derzeitiges Debian-System). * boot(7) beschreibt den System-Boot-Prozess basierend auf UNIX System V Release 4 (älteres Debian-System). 3.1. Ein Überblick über den Bootstrap-Prozess Das Computer-System durchläuft verschiedene Phasen des     Bootstrap-Prozesses vom Einschalten bis zur Bereitstellung des funktionalen Betriebssystems an den Benutzer.     Der Einfachheit halber beschränke ich meine Betrachtung auf die weit verbreitete PC-Plattform mit einer Standardinstallation. Der typische Bootstrap-Prozess ist wie eine 4-stufige Rakete.     Jede Stufe übergibt die Systemkontrolle an die jeweils nachfolgende Stufe: * Abschnitt 3.1.1, „Stufe 1: das UEFI“ * Abschnitt 3.1.2, „Stufe 2: der Bootloader“     * Abschnitt 3.1.3, „Stufe 3: das Mini-Debian-System“ * Abschnitt 3.1.4, „Stufe 4: das normale Debian-System“ Natürlich können diese unterschiedlich konfiguriert werden. Wenn Sie zum Beispiel Ihren eigenen Kernel kompilieren, werden Sie     unter Umständen den Schritt mit dem Mini-Debian-System überspringen. Gehen Sie daher nicht davon aus, dass dies alles in Ihrem Fall zutrifft, solange Sie es nicht selbst überprüft haben. 3.1.1. Stufe 1: das UEFI Das Unified Extensible Firmware Interface (UEFI) definiert als Teil der UEFI-Spezifikation einen Boot-Manager. Wenn ein Rechner eingeschaltet wird, ist dieser Boot-Manager die erste Stufe im Boot-Prozess; er prüft die Boot-Konfiguration und führt den dort     festgelegten Betriebssystem-Bootloader bzw. Betriebssystem-Kern aus (normalerweise einen Bootloader). Die Boot-Konfiguration ist über Variablen definiert, die im NVRAM gespeichert sind; dazu gehören Variablen, die den Dateisystempfad zum Betriebssystem-Bootloader oder -Kern enthalten. Eine EFI System Partition (ESP) ist eine spezielle Partition auf einem Datenspeicher auf UEFI-konformen Computersystemen. Nach dem Einschalten des Rechners greift die UEFI-Firmware auf die ESP zu.     Auf ihr sind UEFI-Applikationen abgelegt sowie weitere Dateien, die von diesen Applikationen benötigt werden. Zu diesen Applikationen gehören auch die Betriebssystem-Bootloader. (Auf älteren PC-Systemen können auch das BIOS und der MBR zum Einsatz kommen.) 3.1.2. Stufe 2: der Bootloader Der Bootloader ist die zweite Stufe des Boot-Prozesses und wird durch das UEFI gestartet. Er lädt das System-Kernel-Image und das     initrd-Image in den Speicher und übergibt diesen die Kontrolle. Das initrd-Image ist ein Abbild des Wurzeldateisystems und seine Funktionalitäten hängen von dem verwendeten Bootloader ab. Das Debian-System nutzt normalerweise den Linux-Kernel als     Standard-Betriebssystem-Kern. Das initrd-Image für den aktuellen Linux-Kernel der Version 5.x ist technisch gesehen ein initramfs- (initial RAM Filesystem-) Image.     Es gibt mehrere Bootloader und Konfigurationsoptionen: Tabelle 3.1. Liste der Bootloader +--------------------------------------------------------------------------+ | Paket |Popcon|Größe| initrd |Bootloader| Beschreibung | |--------------+------+-----+-----------+----------+-----------------------| | | | | | |Intelligenter | | | | | | |Bootloader, der | |grub-efi-amd64|I:339 |184 |Unterstützt|GRUB UEFI |Festplattenpartitionen | | | | | | |und Dateisysteme wie | | | | | | |vfat, ext4 … | | | | | | |unterstützt (UEFI). | |--------------+------+-----+-----------+----------+-----------------------| | | | | | |Intelligenter | | | | | | |Bootloader, der | |grub-pc |V:21, |557 |Unterstützt|GRUB 2 |Festplattenpartitionen | | |I:634 | | | |und Dateisysteme wie | | | | | | |vfat, ext4 … | | | | | | |unterstützt (BIOS). | |--------------+------+-----+-----------+----------+-----------------------| | | | | | |Dies ist das | | |V:0, | | | |boot-fähige | |grub-rescue-pc|I:0 |6625 |Unterstützt|GRUB 2 |Rettungs-Image von GRUB| | | | | | |2 (CD und Diskette) (PC| | | | | | |/BIOS-Version). |     |--------------+------+-----+-----------+----------+-----------------------| | | | | | |Unterstützt das | |syslinux |V:3, |344 |Unterstützt|Isolinux |ISO9660-Dateisystem. | | |I:36 | | | |Dies wird von Boot-CDs | | | | | | |verwendet. | |--------------+------+-----+-----------+----------+-----------------------| | | | | | |Unterstützt das | | |V:3, | | | |MSDOS-Dateisystem FAT. | |syslinux |I:36 |344 |Unterstützt|Syslinux |Dies wird von | | | | | | |Boot-Disketten | | | | | | |verwendet. | |--------------+------+-----+-----------+----------+-----------------------| | | | | | |Das gewünschte | | |V:0, | | | |Betriebssystem wird aus| |loadlin |I:0 |90 |Unterstützt|Loadlin |dem laufenden FreeDOS-/| | | | | | |MSDOS-System heraus | | | | | | |gestartet. | |--------------+------+-----+-----------+----------+-----------------------| | | | | | |Dies ist freie | | |V:0, | |Nicht |MBR von |Software, die den | |mbr |I:4 |47 |unterstützt|Neil |MSDOS-MBR ersetzt. | | | | | |Turton |Unterstützt nur | | | | | | |Festplattenpartitionen.| +--------------------------------------------------------------------------+ Warnung Spielen Sie nicht mit Bootloadern herum, ohne boot-fähige     Rettungsmedien (USB-Stick, CD, Diskette) zur Hand zu haben, die von Images im grub-rescue-pc-Paket erstellt wurden. Damit können Sie Ihr System auch ohne funktionsfähigen Bootloader auf der Festplatte starten. For UEFI system, GRUB2 first reads the ESP partition and uses     UUID specified for search.fs_uuid in "/boot/efi/EFI/debian/ grub.cfg" to determine the partition of the GRUB2 menu configuration file "/boot/grub/grub.cfg".     The key part of the GRUB2 menu configuration file looks like: menuentry 'Debian GNU/Linux' ... { load_video insmod gzio insmod part_gpt insmod ext2     search --no-floppy --fs-uuid --set=root fe3e1db5-6454-46d6-a14c-071208ebe4b1 echo 'Loading Linux 5.10.0-6-amd64 ...' linux /boot/vmlinuz-5.10.0-6-amd64 root=UUID=fe3e1db5-6454-46d6-a14c-071208ebe4b1 ro quiet echo 'Loading initial ramdisk ...' initrd /boot/initrd.img-5.10.0-6-amd64 }     Dieser Teil von /boot/grub/grub.cfg hat folgende Bedeutung: Tabelle 3.2. Bedeutung der Bestandteile eines Menüeintrags in / boot/grub/grub.cfg +---------------------------------------------------------------+ | Einstellung | Wert | |----------------------+----------------------------------------| |Geladene GRUB2-Module |gzio, part_gpt, ext2 | |----------------------+----------------------------------------| |verwendete Partition |Partition, die über UUID= | |für das |fe3e1db5-6454-46d6-a14c-071208ebe4b1 | |root-Dateisystem |identifiziert wird |     |----------------------+----------------------------------------| |Pfad zum Kernel-Image |/boot/vmlinuz-5.10.0-6-amd64 | |im root-Dateisystem | | |----------------------+----------------------------------------| |verwendete |"root=UUID= | |Kernel-Boot-Parameter |fe3e1db5-6454-46d6-a14c-071208ebe4b1 ro | | |quiet" | |----------------------+----------------------------------------| |Pfad zum initrd-Image |/boot/initrd.img-5.10.0-6-amd64 | |im root-Dateisystem | | +---------------------------------------------------------------+ Tipp     You can enable to see kernel boot log messages by removing quiet in "/boot/grub/grub.cfg". For the persistent change, please edit "GRUB_CMDLINE_LINUX_DEFAULT="quiet"" line in "/etc/default/grub". Tipp     Sie können das GRUB-Hintergrundbild (Splash image) über die Variable GRUB_BACKGROUND in "/etc/default/grub" anpassen; die Variable kann auf den Pfad der Grafikdatei verweisen, oder Sie legen die Grafikdatei selbst in "/boot/grub/" ab.     Weitere Infos finden Sie unter "info grub" und grub-install(8). 3.1.3. Stufe 3: das Mini-Debian-System Das Mini-Debian-System ist die dritte Stufe des Boot-Prozesses und wird durch den Bootloader gestartet. Es lässt den     System-Kernel mit seinem eigenen Wurzeldateisystem im Speicher laufen. Dies ist ein optionaler, vorbereitender Schritt des Boot-Prozesses. Anmerkung Der Begriff "Mini-Debian-System" wurde von dem Autor erfunden, um     diese dritte Stufe des Boot-Prozesses in diesem Dokument zu beschreiben. Dieses System wird normalerweise initrd- oder initramfs-System genannt. Ein ähnliches System wird im Speicher auch durch den Debian Installer verwendet. "/init" wird als erstes Programm aus diesem Wurzeldateisystem im Speicher ausgeführt. Es ist ein Programm, das den Kernel im Userspace initialisiert und die Kontrolle an die nächste Stufe     übergibt. Dieses Mini-Debian-System bietet Flexibilität für den Boot-Prozess, um zum Beispiel Kernel-Module vor dem Hauptteil des Boot-Prozesses hinzuzufügen oder um das Wurzeldateisystem als verschlüsseltes Dateisystem einzubinden. * "/init" ist ein Shell-Skript, wenn das initfamfs durch initramfs-tools erstellt wurde. + Sie können diesen Teil des Boot-Prozesses unterbrechen, um eine root-Shell zu bekommen, indem Sie "break=init" usw. zu den Kernel-Boot-Parametern hinzufügen. Informationen zu weiteren Unterbrechungsmöglichkeiten finden Sie im "/init"-Skript. Diese Shell-Umgebung ist ausgeklügelt genug, um eine gute Überprüfung der Hardware     Ihrer Maschine zu ermöglichen. + Die verfügbaren Befehle in diesem Mini-Debian-System gehen auf ein GNU-Werkzeug namens busybox(1) zurück und werden auch hauptsächlich von diesem bereitgestellt. * "/init" ist ein binäres systemd-Programm, wenn das initramfs durch dracut erstellt wurde. + Befehle in diesem Mini-Debian-System sind in ihrer Funktionalität auf die systemd(1)-Umgebung reduziert. Achtung     Sie müssen die Option "-n" für den mount-Befehl verwenden, wenn Sie sich im Nur-Lese-Wurzeldateisystem befinden. 3.1.4. Stufe 4: das normale Debian-System Das normale Debian-System ist die vierte Stufe des Boot-Prozesses und wird von dem Mini-Debian-System gestartet. Der System-Kernel     des Mini-Debian-Systems läuft in dieser Umgebung weiter. Das verwendete Wurzeldateisystem wird von dem im Arbeitsspeicher umgeschwenkt zu dem auf der echten Festplatte. Das Programm init wird als erstes Programm mit PID=1 ausgeführt und erledigt die eigentliche Hauptarbeit beim Booten, das Starten     verschiedener Programme. Der Standardpfad zum init-Programm ist " /usr/sbin/init", aber er kann über einen Kernel-Boot-Parameter wie "init=/pfad/zum/init-programm" auch geändert werden.     "/usr/sbin/init" wurde nach Debian 8 Jessie (veröffentlicht in 2015) ein symbolischer Link auf "/lib/systemd/systemd". Tipp     Mittels "ps --pid 1 -f" können Sie überprüfen, welcher init-Befehl letztlich auf Ihrem System verwendet wird. Tabelle 3.3. Liste von Boot-Hilfsprogrammen für das Debian-System +---------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |-------------------+------+-----+------------------------------| | | | |Ereignis-basierter init(8) | |systemd |V:860,|11168|-Daemon für gleichzeitige | | |I:966 | |Ausführung (Alternative zu | | | | |sysvinit) | |-------------------+------+-----+------------------------------| |cloud-init |V:3, |2870 |initialization system for | | |I:5 | |infrastructure cloud instances| |-------------------+------+-----+------------------------------| | |V:832,| |die Handbuchseiten und Links, | |systemd-sysv |I:964 |80 |die nötig sind, um sysvinit | | | | |durch systemd zu ersetzen | |-------------------+------+-----+------------------------------| | |V:699,| |Hilfsprogramme, um zwischen | |init-system-helpers|I:974 |130 |sysvinit und systemd | | | | |umschalten zu können | |-------------------+------+-----+------------------------------| | |V:33, | |Skripte zur Initialisierung | |initscripts |I:133 |198 |und zum Herunterfahren des | | | | |Systems | |-------------------+------+-----+------------------------------| |sysvinit-core |V:4, |361 |System-V-ähnliche init(8) | | |I:5 | |-Werkzeuge | |-------------------+------+-----+------------------------------|     |sysv-rc |V:66, |88 |System-V-ähnlicher Mechanismus| | |I:145 | |zum Wechsel des Runlevels | |-------------------+------+-----+------------------------------| |sysvinit-utils |V:897,|102 |System-V-ähnliche Werkzeuge | | |I:999 | |(startpar(8), bootlogd(8), …) | |-------------------+------+-----+------------------------------| | |V:634,| |Zur Linux Standard Base 3.2 | |lsb-base |I:675 |12 |konforme | | | | |init-Skript-Funktionalität | |-------------------+------+-----+------------------------------| | | | |Werkzeug, um die | | |V:88, | |Boot-Reihenfolge unter | |insserv |I:144 |132 |Verwendung von LSB-konformen | | | | |init.d-Skript-Abhängigkeiten | | | | |zu organisieren | |-------------------+------+-----+------------------------------| |kexec-tools |V:1, |316 |Werkzeug für kexec(8) | | |I:6 | |-Neustarts (Warmstarts) | |-------------------+------+-----+------------------------------| |systemd-bootchart |V:0, |131 |Performance-Analyseprogramm | | |I:0 | |für den Boot-Prozess | |-------------------+------+-----+------------------------------| |mingetty |V:0, |36 |getty(8) nur für die Konsole | | |I:2 | | | |-------------------+------+-----+------------------------------| |mgetty |V:0, |315 |Intelligenter getty(8)-Ersatz | | |I:0 | |für Modems | +---------------------------------------------------------------+ Tipp     Im Debian Wiki unter BootProcessSpeedup finden Sie aktuelle Tipps zur Beschleunigung des Boot-Prozesses. 3.2. Systemd 3.2.1. Systemd-Init When the Debian system starts, /usr/sbin/init symlinked to /usr/     lib/systemd is started as the init system process (PID=1) owned by root (UID=0). See systemd(1). Der systemd-Init-Prozess wird - basierend auf den Unit-Konfigurationsdateien (siehe systemd.unit(5)) - in mehrere     parallele Prozesse aufgespalten; diese Konfigurationsdateien sind in deklarativem Stil geschrieben, im Unterschied zu dem prozeduralen Stil von SysV. Die abgespalteten Prozesse werden in individuellen Linux control     groups abgelegt, die nach der Unit benannt werden, zu der sie in der privaten systemd-Hierarchie gehören (siehe cgroups und Abschnitt 4.7.5, „Linux Sicherheits-Funktionalitäten“). Units for the system mode are loaded from the "System Unit Search     Path" described in systemd.unit(5). The main ones are as follows in the order of priority: * "/etc/systemd/system/*": System units created by the administrator     * "/run/systemd/system/*": Runtime units * "/lib/systemd/system/*": System units installed by the distribution package manager Deren Abhängigkeiten untereinander sind durch die Regeln "Wants= ", "Requires=", "Before=", "After=", … (siehe "MAPPING OF UNIT     PROPERTIES TO THEIR INVERSES" in systemd.unit(5)) definiert. Die Ressourcen-Steuerung ist ebenfalls festgelegt (siehe systemd.resource-control(5)).     Die Endung der Unit-Konfigurationsdateien definiert ihren Typ wie folgt: * *.service beschreibt einen Prozess (Dienst), der von systemd gesteuert und überwacht wird. Siehe systemd.service(5). * *.device beschreibt ein Gerät, das im sysfs(5) als udev(7) -Gerätedatei abgebildet ist. Siehe systemd.device(5). * *.mount beschreibt einen Einbindungspunkt im System, der von systemd gesteuert und überwacht wird. Siehe systemd.mount(5). * *.automount beschreibt einen automatischen Einbindungspunkt im System, der von systemd gesteuert und überwacht wird. Siehe systemd.automount(5). * *.swap beschreibt ein Swap-Device oder eine Swap-Datei (zum Auslagern von Arbeitsspeicher auf eine Festplatte), die von systemd gesteuert und überwacht wird. Siehe systemd.swap(5). * *.path beschreibt einen Pfad im Dateisystem, der von systemd zum Zwecke der pfad-basierten Aktivierung überwacht wird.     Siehe systemd.path(5). * *.socket beschreibt einen Socket, der von systemd zum Zwecke der socket-basierten Aktivierung gesteuert und überwacht wird. Siehe systemd.socket(5). * *.timer beschreibt einen Timer (Zeitgeber), der von systemd zum Zwecker der timer-basierten Aktivierung gesteuert und überwacht wird. Siehe systemd.timer(5). * *.slice verwaltet Ressourcen über cgroups(7). Siehe systemd.slice(5). * *.scope wird programmgesteuert über die Busschnittstellen von systemd erzeugt, um Systemprozesse zu verwalten. Siehe systemd.scope(5). * *.target fasst andere Unit-Konfigurationsdateien zu Gruppen zusammen, um Synchronisierungspunkte für den Startprozess zu erstellen. Siehe systemd.target(5). Während des Systemstarts versucht der systemd-Prozess, das Target "/lib/systemd/system/default.target (normalerweise ein symbolischer Link auf "graphical.target") zu starten. Als erstes     werden dabei einige spezielle Target-Units (siehe systemd.special (7)) wie "local-fs.target", "swap.target" und "cryptsetup.target" aktiviert, um die Dateisysteme einzubinden. Dann werden über die Abhängigkeiten weitere Target-Units aktiviert. Details finden Sie in bootup(7). systemd enthält Funktionalitäten, um die Rückwärtskompatibilität zu SysV zu gewährleisten. Boot-Skripte im SysV-Stil in "/etc/     init.d/rc[0123456S].d/[KS]name" werden immer noch abgearbeitet, und telinit(8)-Befehle werden in Aktivierungsanforderungen für systemd-Units übersetzt. Achtung     Die emulierten Runlevel 2 bis 4 verweisen über symbolische Links alle auf des gleiche "multi-user.target". 3.2.2. Systemd login When a user logins to the Debian system via gdm3(8), sshd(8),     etc., /lib/systemd/system --user is started as the user service manager process owned by the corresponding user. See systemd(1). The systemd user service manager process spawns processes in     parallel based on the declarative unit configuration files (see systemd.unit(5) and user@.service(5)). Units for the user mode are loaded from the "User Unit Search     Path" described in systemd.unit(5). The main ones are as follows in the order of priority: * "~/.config/systemd/user/*": User configuration units * "/etc/systemd/user/*": User units created by the administrator     * "/run/systemd/user/*": Runtime units * "/lib/systemd/user/*": User units installed by the distribution package manager     These are managed in the same way as Abschnitt 3.2.1, „Systemd-Init“. 3.3. Die Kernel-Meldungen     Die angezeigten Fehlermeldungen des Kernels auf der Konsole können über einen Schwellwert gefiltert werden:     # dmesg -n3 Tabelle 3.4. Liste der Schwellwerte zur Filterung von Kernel-Fehler-Meldungen +--------------------------------------------------------------+ |Wert| Name | Bedeutung | |----+------------+--------------------------------------------| |0 |KERN_EMERG |System ist unbenutzbar | |----+------------+--------------------------------------------| |1 |KERN_ALERT |es ist unverzüglich eine Aktion erforderlich| |----+------------+--------------------------------------------| |2 |KERN_CRIT |Zustände mit kritischen Fehlern |     |----+------------+--------------------------------------------| |3 |KERN_ERR |Zustände mit Fehlern | |----+------------+--------------------------------------------| |4 |KERN_WARNING|Zustände mit Warnungen | |----+------------+--------------------------------------------| |5 |KERN_NOTICE |normale, aber erwähnenswerte Zustände | |----+------------+--------------------------------------------| |6 |KERN_INFO |rein informativ | |----+------------+--------------------------------------------| |7 |KERN_DEBUG |Nachrichten zur Fehlersuche/-eingrenzung | +--------------------------------------------------------------+ 3.4. Die Systemmeldungen Unter systemd werden sowohl Kernel- wie auch Systemmeldungen durch den Journal-Dienst systemd-journald.service (a.k.a journald) protokolliert, entweder in Form von Binärdaten     unterhalb von "/var/log/journal" oder in flüchtigen Binärdaten in "/run/log/journal/". Diese binären Protokolldaten können mit dem Befehl journalctl(1) abgefragt werden. Zum Beispiel erhalten Sie das Protokoll vom letzten Boot-Vorgang mit:     $ journalctl -b Tabelle 3.5. Liste typischer journalctl-Befehle +---------------------------------------------------------------+ | Tätigkeit | Befehl | |------------------------------------------------+--------------| |Protokoll für Systemdienste und Kernel vom |"journalctl -b| |letzten Boot-Vorgang anzeigen |--system" | |------------------------------------------------+--------------|     |Protokoll für Dienste des aktuellen Benutzers |"journalctl -b| |vom letzten Boot-Vorgang anzeigen |--user" | |------------------------------------------------+--------------| |Protokollinformationen von "$unit" vom letzten |"journalctl -b| |Boot-Vorgang anzeigen |-u $unit" | |------------------------------------------------+--------------| |Protokollinformationen von "$unit" vom letzten |"journalctl -b| |Boot-Vorgang anzeigen (im Stil von "tail -f") |-u $unit -f" | +---------------------------------------------------------------+ Unter systemd könnte das System-Log-Werkzeug rsyslogd(8) deinstalliert sein. Falls es installiert ist, ändert sich sein Verhalten, so dass die volatilen binären Logdaten gelesen werden (statt "/dev/log", was vor systemd der Standard war) und     traditionelle permanente ASCII-Logdaten erstellt werden. Dies kann über "/etc/default/rsyslog" und "/etc/rsyslog.conf" sowohl für die Protokolldateien wie auch für die Bildschirmanzeige angepasst werden. Lesen Sie dazu rsyslogd(8) und rsyslog.conf(5) sowie auch Abschnitt 9.3.2, „Analyseprogramme für Logdateien“. 3.5. Systemmanagement systemd enthält nicht nur das eigentliche init-System zum Starten     des Systems, sondern auch Funktionalitäten zum Systemmanagement mittels dem systemctl(1)-Befehl. Tabelle 3.6. Liste typischer systemctl-Befehle +---------------------------------------------------------------+ | Tätigkeit | Befehl | |-----------------------------------------+---------------------| |List all available unit types |"systemctl list-units| | |--type=help" | |-----------------------------------------+---------------------| |List all target units in memory |"systemctl list-units| | |--type=target" | |-----------------------------------------+---------------------| |List all service units in memory |"systemctl list-units| | |--type=service" | |-----------------------------------------+---------------------| |List all device units in memory |"systemctl list-units| | |--type=device" | |-----------------------------------------+---------------------| |List all mount units in memory |"systemctl list-units| | |--type=mount" | |-----------------------------------------+---------------------| |Alle Socket-Units im Arbeitsspeicher |"systemctl | |auflisten |list-sockets" | |-----------------------------------------+---------------------| |Alle Timer-Units im Arbeitsspeicher |"systemctl | |auflisten |list-timers" | |-----------------------------------------+---------------------| |"$unit" starten |"systemctl start | | |$unit" | |-----------------------------------------+---------------------| |"$unit" stoppen |"systemctl stop | | |$unit" | |-----------------------------------------+---------------------| |Dienst-spezifische Konfiguration neu |"systemctl reload | |laden |$unit" | |-----------------------------------------+---------------------| |"$unit" stoppen und neu starten |"systemctl restart | | |$unit" | |-----------------------------------------+---------------------| |"$unit" starten und alle anderen stoppen |"systemctl isolate | | |$unit" | |-----------------------------------------+---------------------| |Zur grafischen Oberfläche wechseln |"systemctl isolate | |(GUI-System) |graphical" | |-----------------------------------------+---------------------| |Zur Konsolenoberfläche wechseln |"systemctl isolate | |(Mehrbenutzer-CLI-System) |multi-user" | |-----------------------------------------+---------------------| |Zur Rettungssystem-Oberfläche wechseln |"systemctl isolate | |(Einzelbenutzer-CLI-System) |rescue" | |-----------------------------------------+---------------------| |Kill-Signal an "$unit" senden |"systemctl kill | | |$unit" | |-----------------------------------------+---------------------| |Prüfen, ob "$unit" aktiv ist |"systemctl is-active | | |$unit" | |-----------------------------------------+---------------------| |Prüfen, ob "$unit" fehlgeschlagen ist |"systemctl is-failed | | |$unit" | |-----------------------------------------+---------------------| |Status von "$unit|$PID|device" prüfen |"systemctl status | | |$unit|$PID|$device" |     |-----------------------------------------+---------------------| |Eigenschaften von "$unit|$job" anzeigen |"systemctl show $unit| | ||$job" | |-----------------------------------------+---------------------| |Fehlgeschlagene "$unit" zurücksetzen |"systemctl | |(Reset) |reset-failed $unit" | |-----------------------------------------+---------------------| |Abhängigkeiten aller Unit-Dienste |"systemctl | |auflisten |list-dependencies | | |--all" | |-----------------------------------------+---------------------| |Auf dem System installierte Unit-Dateien |"systemctl | |auflisten |list-unit-files" | |-----------------------------------------+---------------------| |"$unit" aktivieren (symbolischen Link |"systemctl enable | |hinzufügen) |$unit" | |-----------------------------------------+---------------------| |"$unit" deaktivieren (symbolischen Link |"systemctl disable | |entfernen) |$unit" | |-----------------------------------------+---------------------| |"$unit" zum Starten bereit machen |"systemctl unmask | |(symbolischen Link auf "/dev/null" |$unit" | |entfernen) | | |-----------------------------------------+---------------------| |"$unit" am Starten hindern (symbolischen |"systemctl mask | |Link auf "/dev/null" hinzufügen) |$unit" | |-----------------------------------------+---------------------| |Aktuelles default-Target abrufen |"systemctl | | |get-default" | |-----------------------------------------+---------------------| |default-Target auf "graphical" setzen |"systemctl | |(grafische Oberfläche, GUI) |set-default | | |graphical" | |-----------------------------------------+---------------------| |default-Target auf "multi-user" setzen |"systemctl | |(Konsolenoberfläche, CLI) |set-default | | |multi-user" | |-----------------------------------------+---------------------| |Job-Umgebungseinstellungen anzeigen |"systemctl | | |show-environment" | |-----------------------------------------+---------------------| |Job-Umgebungseinstellung "variable" auf |"systemctl | |"wert" setzen |set-environment | | |variable=wert" | |-----------------------------------------+---------------------| |Job-Umgebungseinstellung "variable" |"systemctl | |löschen |unset-environment | | |variable" | |-----------------------------------------+---------------------| |Alle Unit-Dateien und Daemons neu laden |"systemctl | | |daemon-reload" | |-----------------------------------------+---------------------| |System herunterfahren |"systemctl poweroff" | |-----------------------------------------+---------------------| |System herunterfahren und neu starten |"systemctl reboot" | |(Reboot) | | |-----------------------------------------+---------------------| |System in Standby setzen (Suspend) |"systemctl suspend" | |-----------------------------------------+---------------------| |System in Ruhezustand setzen (Hibernate) |"systemctl hibernate"| +---------------------------------------------------------------+ In obigen Beispielen kann "$unit" für einen einzelnen Unit-Namen stehen (ein Anhang wie .service oder .target ist dabei optional),     oder auch für die Angabe mehrerer Units (über Suchmuster im Shell-Stil wie "*", "?" oder "[]", die fnmatch(3) verwenden; diese werden auf die primären Namen aller Units angewandt, die derzeit in den Arbeitsspeicher geladen sind). Befehlen zum Ändern des Systemstatus wird typischerweise ein     "sudo" vorangestellt, um die nötigen administrativen Rechte anzufordern. Die Ausgabe von "systemctl status $unit|$PID|$device" nutzt     farbige Punkte ("●"), um den Unit-Status kompakt zusammenzufassen. * Ein weisser "●" steht für "inaktiv" oder "deaktiviert".     * Ein roter "●" steht für "fehlgeschlagen" oder "Fehler". * Ein grüner "●" steht für "aktiv", "wird neu geladen" oder "wird aktiviert". 3.6. Weitere Systemüberwachungs-Werkzeuge Hier eine Liste von weiteren Befehlsschnipseln zur     Systemüberwachung unter systemd. Bitte lesen Sie die zugehörigen Handbuchseiten inklusive cgroups(7). Tabelle 3.7. Liste weiterer Überwachungsbefehle unter systemd +---------------------------------------------------------------+ | Tätigkeit | Befehl | |----------------------------------------+----------------------| |Dauer der einzelnen |"systemd-analyze time"| |Initialisierungsschritte anzeigen | | |----------------------------------------+----------------------| |Alle Units auflisten, sortiert nach der |"systemd-analyze | |Dauer ihrer Initialisierung |blame" | |----------------------------------------+----------------------| |"$unit"-Datei laden und auf Fehler |"systemd-analyze | |prüfen |verify $unit" | |----------------------------------------+----------------------|     |Kurze Statusinformationen zum Benutzer |"loginctl user-status"| |der Sitzung vom Aufrufer | | |----------------------------------------+----------------------| |Kurze Statusinformationen zur Sitzung |"loginctl | |vom Aufrufer |session-status" | |----------------------------------------+----------------------| |Boot-Prozess nachverfolgen über cgroups |"systemd-cgls" | |----------------------------------------+----------------------| |Boot-Prozess nachverfolgen über cgroups |"ps xawf -eo | | |pid,user,cgroup,args" | |----------------------------------------+----------------------| |Boot-Prozess nachverfolgen über cgroups |sysfs unter "/sys/fs/ | | |cgroup/" auslesen | +---------------------------------------------------------------+ 3.7. System configuration 3.7.1. Der Rechnername Der Kernel verwaltet den Rechnernamen (hostname) des Systems. Die durch systemd-hostnamed.service gestartete System-Unit setzt beim     Systemstart den Rechnernamen auf den in "/etc/hostname" festgelegten Wert. Diese Datei sollte nur den Rechnernamen des Systems enthalten, nicht einen vollqualifizierten Domänennamen.     Um den derzeitigen Rechnernamen auszugeben, führen Sie hostname (1) ohne ein Argument aus. 3.7.2. Das Dateisystem Die Optionen zum Einbinden normaler Festplatten- und     Netzwerkdateisysteme werden in "/etc/fstab" festgelegt. See fstab (5) und Abschnitt 9.6.7, „Optimierung von Dateisystemen über mount-Optionen“.     Die Konfiguration verschlüsselter Dateisysteme ist in "/etc/ crypttab" abgelegt. Siehe crypttab(5).     Software-RAID mit mdadm(8) wird in "/etc/mdadm/mdadm.conf" konfiguriert. Siehe mdadm.conf(5). Warnung     Bei jedem Systemstart werden nach dem Einbinden aller Dateisysteme temporäre Dateien in "/tmp", "/var/lock" und "/var/ run" gelöscht. 3.7.3. Initialisierung der Netzwerkschnittstellen Auf modernen Debian-Desktop-Systemen mit systemd erfolgt die Initialisierung von Netzwerkschnittstellen für die     Loopback-Schnittstelle lo typischerweise durch "networking.service" und für andere Schnittstellen durch "NetworkManager.service".     Details zur Konfiguration finden Sie in Kapitel 5, Netzwerkkonfiguration. 3.7.4. Cloud system initialization The cloud system instance may be launched as a clone of "Debian Official Cloud Images" or similar images. For such system instance, personalities such as hostname, filesystem, networking, locale, SSH keys, users and groups may be configured using     functionalities provided by cloud-init and netplan.io packages with multiple data sources such as files placed in the original system image and external data provided during its launch. These packages enable the declarative system configuration using YAML data. See more at "Cloud Computing with Debian and its descendants",     "Cloud-init documentation" and Abschnitt 5.4, „The modern network configuration for cloud“. 3.7.5. Customization example to tweak sshd service Bei einer Standardinstallation werden viele Netzwerkdienste (siehe Kapitel 6, Netzwerkapplikationen) von systemd durch     network.target als Daemon-Prozess gestartet. "sshd" ist hier keine Ausnahme. Als Beispiel dafür, wie man so etwas anpassen kann, wollen wir zeigen, wie Sie "sshd" so ändern, dass er nur auf Anfrage (on-demand) startet.     Als erstes deaktivieren Sie die entsprechende Dienst-Unit:     $ sudo systemctl stop sshd.service $ sudo systemctl mask sshd.service Der klassische Weg zur on-demand-Aktivierung von Sockets führte     früher über den inetd- (oder xinetd)-Superserver. Unter systemd kann dies über das Hinzufügen von *.socket und *.service Unit-Konfigurationsdateien erreicht werden.     Eine sshd.socket anlegen zur Spezifizierung eines Sockets, der auf Anfragen überwacht wird: [Unit] Description=SSH Socket for Per-Connection Servers [Socket]     ListenStream=22 Accept=yes [Install] WantedBy=sockets.target     Und eine sshd@.service als Dienste-Datei passend zu sshd.socket: [Unit] Description=SSH Per-Connection Server     [Service] ExecStart=-/usr/sbin/sshd -i StandardInput=socket     Dann muss der Dienst neu geladen werden:     $ sudo systemctl daemon-reload 3.8. Das udev-System Das udev-System bietet seit dem Linux-Kernel 2.6 Mechanismen zur automatischen Hardware-Erkennung und -initialisierung (lesen Sie dazu udev(7)). Nach der Erkennung eines Gerätes durch den Kernel startet das udev-System einen User-Prozess. Dieser verwendet     Informationen aus dem sysfs-Dateisystem (Näheres in Abschnitt 1.2.12, „procfs und sysfs“), lädt über den Befehl modprobe(8) benötigte Kernel-Module, die die Hardware unterstützen (Details in Abschnitt 3.9, „Die Kernel-Modul-Initialisierung“), und erstellt die zugehörigen Geräteknoten (device nodes). Tipp Falls "/lib/modules/kernel-version/modules.dep" mittels depmod(8) aus irgendeinem Grund nicht korrekt erstellt wurde, könnte es beim Laden der Module durch das udev-System Probleme geben.     Führen Sie "depmod -a" aus, um dies zu beheben. Für die Regeln zum Einbinden von Dateisystemen in "/etc/fstab" müssen Geräteknoten nicht fest zugeordnet sein. Sie können auch UUIDs verwenden, um Geräte einzubinden, statt der Gerätenamen wie "/dev/sda". Lesen Sie dazu Abschnitt 9.6.3, „Zugriff auf Partitionen über die UUID-Kennung“. Da das udev-System immer ein wenig im Wandel ist, überlasse ich     die Details anderen Dokumenten und beschränke mich hier auf das Nötigste. Warnung     Don't try to run long running programs such as backup script with RUN in udev rules as mentioned in udev(7). Please create a proper systemd.service(5) file and activate it, instead. See Abschnitt 10.2.3.2, „Mount event triggered backup“. 3.9. Die Kernel-Modul-Initialisierung Das modprobe(8)-Programm erlaubt es, einen laufenden Linux-Kernel über einen User-Prozess zu konfigurieren, indem Kernel-Module     hinzugefügt und entfernt werden. Das udev-System (Näheres in Abschnitt 3.8, „Das udev-System“) automatisiert dessen Aufruf, um bei der Initialisierung des Kernel-Moduls zu helfen. Es gibt Module, die nicht zu bestimmter Hardware gehören, sowie     spezielle Hardware-Treibermodule wie die folgenden, die im Voraus geladen werden müssen, indem Sie in die Datei "/etc/modules" eingetragen werden (Details in modules(5)): * TUN/TAP-Module, die ein virtuelles Point-to-Point Netzwerkgerät (TUN) und ein virtuelles Ethernet-Netzwerkgerät (TAP) bereitstellen;     * netfilter-Module, die Netfilter-Firewall-Funktionalitäten bereitstellen (lesen Sie dazu iptables(8) und Abschnitt 5.7, „Die Netfilter-Infrastruktur“); * watchdog timer-Treibermodule. Die Konfigurationsdateien für das modprobe(8)-Programm sind unterhalb des "/etc/modprobes.d/"-Verzeichnisses abgelegt, wie in     modprobe.conf(5) beschrieben. (Falls Sie vermeiden möchten, dass einige Kernel-Module automatisch geladen werden, sollten Sie erwägen, diese in die Datei "/etc/modprobes.d/blacklist" einzutragen.) Die Datei "/lib/modules/version/modules.dep" (erzeugt durch das     Programm depmod(8)) beschreibt Abhängigkeiten zwischen den Modulen; diese Abhängigkeiten werden von modprobe(8) genutzt. Anmerkung     Wenn Sie Probleme beim Laden von Modulen feststellen, entweder während des Systemstarts oder beim Nachladen mit modprobe(8), kann "depmod -a" diese Probleme möglicherweise durch Neuerstellung der "modules.dep"-Datei beheben.     Der Befehl modinfo(8) zeigt Informationen über ein Linux-Kernel-Modul an. Das lsmod(8)-Programm formatiert den Inhalt von "/proc/modules"     zu einer hübschen Ausgabe, um anzuzeigen, welche Kernel-Module gerade geladen sind. Tipp Sie können die Hardware in Ihrem System exakt identifizieren. Lesen Sie dazu Abschnitt 9.5.3, „Hardware-Identifikation“. Möglicherweise wollen Sie Hardware während des Systemstarts     konfigurieren, um bestimmte erwartete Hardware-Funktionalitäten zu aktivieren. Näheres finden Sie in Abschnitt 9.5.4, „Hardware-Konfiguration“. Unterstützung für spezielle Geräte können Sie unter Umständen durch Neukompilieren des Kernels hinzufügen. Details finden Sie in Abschnitt 9.10, „Der Kernel“. Kapitel 4. Authentifizierung und Zugriffskontrolle Wenn eine Person (oder ein Programm) Zugriff auf das System     erlangen möchte, wird über die Authentifizierung kontrolliert, ob der Identität vertraut werden kann. Warnung Konfigurationsfehler von PAM können Sie aus Ihrem eigenen System     aussperren. Sie müssen eine Rettungs-CD zur Hand haben oder eine alternative Boot-Partition einrichten. Um das System wiederherzustellen, booten Sie das System damit und korrigieren Sie alles Nötige von dort. 4.1. Normale Unix-Authentifizierung Die normale Unix-Authentifizierung wird über das Modul pam_unix     (8) von PAM (Pluggable Authentication Modules) bereitgestellt. Dessen drei wichtige Konfigurationsdateien (mit durch ":" getrennten Einträgen) sind: Tabelle 4.1. Wichtige Konfigurationsdateien für pam_unix(8) +---------------------------------------------------------------+ | Datei |Berechtigung|Benutzer|Gruppe| Beschreibung | |-------+------------+--------+------+--------------------------| |/etc/ |-rw-r--r-- |root |root |(bereinigte) Informationen| |passwd | | | |zum Benutzerkonto |     |-------+------------+--------+------+--------------------------| |/etc/ |-rw-r----- |root |shadow|geschützte Informationen | |shadow | | | |zum Benutzerkonto | |-------+------------+--------+------+--------------------------| |/etc/ |-rw-r--r-- |root |root |Informationen zur Gruppe | |group | | | | | +---------------------------------------------------------------+     "/etc/passwd" enthält Folgendes: ...     user1:x:1000:1000:User1 Name,,,:/home/user1:/bin/bash user2:x:1001:1001:User2 Name,,,:/home/user2:/bin/bash ...     Wie in passwd(5) beschrieben haben die durch ":" separierten Einträge dieser Datei folgende Bedeutungen: * Benutzername (Login-Name); * Eintrag zur Passwortspezifikation; * nummerische Benutzer-ID;     * nummerische Gruppen-ID; * Name oder Kommentarfeld; * Home-Verzeichnis des Benutzers; * optionale Angabe des Befehlsinterpreters für den Benutzer. Der zweite Eintrag von "/etc/passwd" wurde früher für das     verschlüsselte Passwort benutzt. Seit der Einführung von "/etc/ shadow" enthält er die Passwortspezifikation: Tabelle 4.2. Inhalt des zweiten Eintrags in "/etc/passwd" +---------------------------------------------------------------+ |Inhalt| Bedeutung | |------+--------------------------------------------------------|     |(leer)|Konto ohne Passwort | |------+--------------------------------------------------------| |x |das verschlüsselte Passwort ist in "/etc/shadow" | | |abgelegt | +---------------------------------------------------------------+     "/etc/shadow" enthält Folgendes: ...     user1:$1$Xop0FYH9$IfxyQwBe9b8tiyIkt2P4F/:13262:0:99999:7::: user2:$1$vXGZLVbS$ElyErNf/agUDsm1DehJMS/:13261:0:99999:7::: ...     Wie in shadow(5) beschrieben haben die durch ":" separierten Einträge dieser Datei folgende Bedeutungen: * Benutzername (Login-Name); * verschlüsseltes Passwort (das "$1$" am Anfang zeigt die Verwendung der MD5-Verschlüsselung an; "*" steht für "kein Login"); * Datum der letzten Passwortänderung, ausgedrückt als Anzahl der Tage seit dem 1. Januar 1970; * Anzahl der Tage, die der Benutzer vor der erneuten Änderung des Passworts warten muss;     * Anzahl der Tage, nach denen der Benutzer das Passwort ändern muss; * Anzahl der Tage vor dem Verfall des Passworts, während derer der Benutzer vor dem Passwortverfall gewarnt wird; * Anzahl der Tage, während derer das Passwort noch akzeptiert wird, obwohl es abgelaufen ist; * Datum, an dem das Konto abläuft, ausgedrückt als Anzahl der Tage seit dem 1. Januar 1970. * …     "/etc/group" enthält Folgendes:     group1:x:20:user1,user2     Wie in group(5) beschrieben haben die durch ":" separierten Einträge dieser Datei folgende Bedeutungen: * Gruppenname; * verschlüsseltes Passwort (nicht wirklich benutzt);     * nummerische Gruppen-ID; * durch "," getrennte Liste von Benutzernamen. Anmerkung     "/etc/gshadow" bietet für "/etc/group" ähnliche Funktionalität wie "/etc/shadow", diese wird aber nicht wirklich genutzt. Anmerkung Die aktuelle Gruppenmitgliedschaft eines Benutzers kann dynamisch     angepasst werden, wenn eine Zeile mit "auth optional pam_group.so" zu "/etc/pam.d/common-auth" hinzugefügt wird und wenn dies in "/etc/security/group.conf" gesetzt ist. Lesen Sie dazu pam_group(8). Anmerkung     Das base-passwd-Paket enthält eine verbindliche Liste von Benutzern und Gruppen: "/usr/share/doc/base-passwd/ users-and-groups.html". 4.2. Verwalten von Konten- und Passwortinformationen     Hier einige erwähnenswerte Befehle zur Verwaltung von Konteninformationen: Tabelle 4.3. Liste von Befehlen zur Verwaltung von Konteninformationen +---------------------------------------------------------------+ | Befehl | Funktion | |-----------------+---------------------------------------------| |getent passwd |Konteninformationen von benutzername anzeigen| |benutzername | | |-----------------+---------------------------------------------| |getent shadow |durch shadow geschützte Konteninformationen | |benutzername |von benutzername anzeigen |     |-----------------+---------------------------------------------| |getent group |Gruppeninformationen von gruppenname anzeigen| |gruppenname | | |-----------------+---------------------------------------------| |passwd |Passwort für das Konto verwalten | |-----------------+---------------------------------------------| |passwd -e |Einmal-Passwort für die Kontenaktivierung | | |setzen | |-----------------+---------------------------------------------| |chage |Alterungsinformationen des Passworts | | |verwalten | +---------------------------------------------------------------+ Sie benötigen für einige Funktionen root-Privilegien. Lesen Sie     crypt(3) für Informationen zur Passwort- und Datenverschlüsselung. Anmerkung Auf Systemen, die mit PAM und NSS eingerichtet sind, wie der     Debian-Salsa-Maschine, wird der Inhalt der lokalen Dateien "/etc/ passwd", "/etc/group" und "/etc/shadow" auf dem System unter Umständen nicht aktiv verwendet. Obige Befehle sind aber auch in solchen Umgebungen gültig. 4.3. Ein gutes Passwort Bei der Erstellung eines Kontos während der Systeminstallation oder mit dem passwd(1)-Befehl sollten Sie ein gutes Passwort     auswählen, das aus mindestens sechs bis acht Zeichen besteht und ein oder mehrere Zeichen aus folgenden Gruppen enthält (gemäß passwd(1)): * Kleinbuchstaben;     * Ziffern zwischen 0 und 9; * Satzzeichen. Warnung Wählen Sie keine Wörter für das Passwort, die erraten werden     könnten: Kontoname, Sozialversicherungsnummer, Telefonnummer, Adresse, Geburtstag, Name von Familienmitgliedern oder Haustieren, Wörter, die in Lexika auftauchen, einfache Zeichenfolgen wie "12345" oder "qwerty", … alle diese sind eine schlechte Wahl für ein Passwort. 4.4. Verschlüsselte Passwörter erstellen     Es gibt mehrere unabhängige Werkzeuge, um verschlüsselte Passwörter mit Salz zu erzeugen: Tabelle 4.4. Liste der Werkzeuge zur Passworterzeugung +---------------------------------------------------------------+ | Paket |Popcon |Größe| Befehl | Funktion | |-------+-------+-----+--------+--------------------------------|     |whois |V:25, |387 |mkpasswd|best-ausgestattetes Frontend für| | |I:251 | | |die crypt(3)-Bibliothek | |-------+-------+-----+--------+--------------------------------| |openssl|V:841, |2111 |openssl |Passwort-Hashes berechnen | | |I:995 | |passwd |(OpenSSL). passwd(1ssl) | +---------------------------------------------------------------+ 4.5. PAM und NSS Moderne Unix-ähnliche Systeme wie Debian stellen dem lokalen     Systemadministrator die Mechanismen PAM (Pluggable Authentication Modules) und NSS (Name Service Switch) zur Systemkonfiguration bereit. Deren Funktionen können wie folgt zusammengefasst werden: * PAM bietet flexible Authentifizierungsmechanismen, die von Anwendungen genutzt werden, und integriert daher auch den Austausch von Passwortdaten.     * NSS besitzt einen flexiblen Name-Service-Mechanismus, der oft von der C-Standard-Bibliothek genutzt wird, um die Benutzer- und Gruppennamen für Programme wie ls(1) und id(1) einzuholen.     Diese PAM- und NSS-Systeme müssen konsistent konfiguriert sein.     Hier einige erwähnenswerte Pakete von PAM- und NSS-Systemen: Tabelle 4.5. Liste von PAM- und NSS-Systemen +---------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |-------------------+------+-----+------------------------------| |libpam-modules |V:889,|984 |Pluggable Authentication | | |I:999 | |Modules (grundlegende Dienste)| |-------------------+------+-----+------------------------------| | |V:0, | |Pluggable Authentication | |libpam-ldap |I:6 |249 |Module, das | | | | |LDAP-Schnittstellen erlaubt | |-------------------+------+-----+------------------------------| | |V:0, | |Pluggable Authentication | |libpam-cracklib |I:8 |117 |Module, um Unterstützung für | | | | |cracklib zu aktivieren | |-------------------+------+-----+------------------------------| | |V:571,| |Pluggable Authentication | |libpam-systemd |I:936 |627 |Module zur Registrierung von | | | | |Nutzersitzungen für logind | |-------------------+------+-----+------------------------------| | | | |Pluggable Authentication | |libpam-doc |I:0 |152 |Modules (Dokumentation in | | | | |html- und Textform) | |-------------------+------+-----+------------------------------|     | | | |GNU-C-Bibliothek: | |libc6 |V:917,|12988|Programmbibliothek, die auch | | |I:999 | |einen "Name Service | | | | |Switch"-Dienst bereitstellt | |-------------------+------+-----+------------------------------| |glibc-doc |I:8 |3503 |GNU-C-Bibliothek: | | | | |Handbuchseiten | |-------------------+------+-----+------------------------------| | | | |GNU-C-Bibliothek: | |glibc-doc-reference|I:4 |13841|Referenzhandbuch im info-, | | | | |pdf- und html-Format | | | | |(nicht-frei) | |-------------------+------+-----+------------------------------| |libnss-mdns |I:510 |141 |NSS-Modul für | | | | |Multicast-DNS-Namensauflösung | |-------------------+------+-----+------------------------------| |libnss-ldap |I:5 |265 |NSS-Modul, um LDAP als | | | | |Namensdienst zu verwenden | |-------------------+------+-----+------------------------------| | | | |NSS-Modul, um LDAP als | |libnss-ldapd |I:15 |129 |Namensdienst zu verwenden | | | | |(neue Abspaltung von | | | | |libnss-ldap) | +---------------------------------------------------------------+ * Der "Linux-PAM System Administrators' Guide" in libpam-doc ist zum Erlernen der PAM-Konfiguration unerlässlich.     * Zum Erlernen der NSS-Konfiguration ist der Abschnitt "System Databases and Name Service Switch" in glibc-doc-reference unerlässlich. Anmerkung     Eine ausführlichere und aktuellere Liste bekommen Sie mit dem Befehl "aptitude search 'libpam-|libnss-'". Die Abkürzung NSS kann auch "Network Security Service" bedeuten, was etwas anderes ist als "Name Service Switch". Anmerkung     PAM ist der grundlegendste Weg, um Umgebungsvariablen für jegliche Programme mit einem systemweiten Standardwert vorzubelegen. Unter systemd ist das Paket libpam-systemd installiert, um die Login-Informationen der Benutzer zu verwalten; dazu werden die     Nutzersitzungen in der systemd-Kontrollgruppen-Hierarchie für logind registriert. Details finden Sie in systemd-logind(8), logind.conf(5) und pam_systemd(8). 4.5.1. Konfigurationsdateien, auf die PAM und NSS zugreifen     Hier einige erwähnenswerte Konfigurationsdateien, die von PAM und NSS genutzt werden: Tabelle 4.6. Liste von Konfigurationsdateien, auf die PAM und NSS zugreifen +---------------------------------------------------------------+ |Konfigurationsdatei| Funktion | |-------------------+-------------------------------------------| |/etc/pam.d/ |Einrichtung der PAM-Konfiguration für das | |programmname |Programm programmname; lesen Sie dazu pam | | |(7) und pam.d(5) | |-------------------+-------------------------------------------| | |Einrichtung der NSS-Konfiguration mit | |/etc/nsswitch.conf |Einträgen für die jeweiligen Dienste; lesen| | |Sie dazu nsswitch.conf(5) | |-------------------+-------------------------------------------| |/etc/nologin |Einschränkung der Benutzeranmeldung über | | |das pam_nologin(8)-Modul | |-------------------+-------------------------------------------| |/etc/securetty |Einschränkung des tty für den root-Zugriff | | |durch das pam_securetty(8)-Modul | |-------------------+-------------------------------------------| |/etc/security/ |Zugriffsbeschränkungen setzen über das | |access.conf |pam_access(8)-Modul | |-------------------+-------------------------------------------| |/etc/security/ |Einschränkungen für Gruppen setzen über das|     |group.conf |pam_group(8)-Modul | |-------------------+-------------------------------------------| |/etc/security/ |Umgebungsvariablen setzen über das pam_env | |pam_env.conf |(8)-Modul | |-------------------+-------------------------------------------| | |Zusätzliche Umgebungsvariablen setzen über | |/etc/environment |das pam_env(8)-Modul mit dem Argument | | |"readenv=1" | |-------------------+-------------------------------------------| | |Setzen der Locale (Gebietsschema) über das | |/etc/default/locale|pam_env(8)-Modul mit dem Argument "readenv=| | |1 envfile=/etc/default/locale" (Debian) | |-------------------+-------------------------------------------| |/etc/security/ |Beschränkungen für Ressourcen (ulimit, | |limits.conf |core, …) setzen über das pam_linits(8) | | |-Modul | |-------------------+-------------------------------------------| |/etc/security/ |Zeitbeschränkungen setzen über das pam_time| |time.conf |(8)-Modul | |-------------------+-------------------------------------------| |/etc/systemd/ |systemd Login-Manager-Konfiguration setzen | |logind.conf |(siehe logind.conf(5) and | | |systemd-logind.service(8)) | +---------------------------------------------------------------+ Einschränkungen bei der Passwortauswahl sind über die PAM-Module     pam_unix(8) und pam_cracklib(8) implementiert. Diese können über deren Argumente konfiguriert werden. Tipp     PAM-Module verwenden den Anhang ".so" für ihre Dateinamen. 4.5.2. Modernes zentralisiertes Systemmanagement Ein Lightweight Directory Access Protocol (LDAP)-Server erlaubt modernes zentralisiertes Systemmanagement und somit die     Administrierung vieler Unix-ähnlicher und nicht-Unix-Systeme über das Netzwerk. Die quelloffene Implementation des Lightweight Directory Access Protocol ist OpenLDAP. Der LDAP-Server stellt die Konteninformationen auf Debian-Systemen durch die Nutzung von PAM und NSS über die     libpam-ldap- und libnss-ldap-Pakete bereit. Verschiedene Aktionen sind nötig, um dies zu aktivieren. (Ich verwende dieses Setup nicht, daher stammen diese Informationen komplett aus zweiter Hand. Bitte beachten Sie das beim Lesen dieses Abschnitts.) * Richten Sie einen zentralisierten LDAP-Server ein, indem Sie ein Programm wie den eigenständigen LDAP-Daemon slapd(8) starten. * Ändern Sie die PAM-Konfigurationsdateien im Verzeichnis "/etc /pam.d/", um "pam_ldap.so" statt dem Standard "pam_unix.so" zu verwenden. + Debian nutzt "/etc/pam_ldap.conf" als Konfigurationsdatei für libpam-ldap und "/etc/pam_ldap.secret" als Datei zur Speicherung des root-Passworts. * Ändern Sie die NSS-Konfiguration in der Datei "/etc/ nsswitch.conf", um "ldap" statt dem Standard ("compat" oder "file") zu verwenden.     + Debian nutzt "/etc/libnss-ldap.conf" als Konfigurationsdatei für libnss-ldap. * Richten Sie es so ein, dass libpam-ldap SSL- (oder TLS-) Verbindungen verwendet, um die Passwortsicherheit zu gewährleisten. * Richten Sie es so ein, dass libnss-ldap SSL- (oder TLS-) Verbindungen verwendet, um die Unversehrtheit der Daten sicherzustellen (auch wenn dies zusätzlichen LDAP-Netzwerk-Overhead verursacht). * Sie sollten nscd(8) lokal ausführen, um alle Antworten auf LDAP-Anfragen zwischenzuspeichern; dies reduziert den LDAP-Netzwerkverkehr. Lesen Sie die Dokumentation in pam_ldap.conf(5) und "/usr/share/     doc/libpam-doc/html/" aus dem libpam-doc-Paket sowie "info libc 'Name Service Switch'", bereitgestellt durch das Paket glibc-doc.     Ähnlich zu diesem Verfahren können Sie auch alternative zentralisierte Systeme mit anderen Methoden einrichten: * Verflechtung von Benutzer- und Gruppeninformationen mit Windows-Systemen + Zugriff auf Windows Domain-Dienste mittels der Pakete winbind- und libpam_winbind; + Lesen Sie dazu winbindd(8) und Integrating MS Windows     Networks with Samba. * Verflechtung von Benutzer- und Gruppeninformationen mit Unix-ähnlichen Systemen + Zugriff auf NIS (ursprünglich YP genannt) oder NIS+ mittels dem nis-Paket; + Lesen Sie dazu das Linux NIS(YP)/NYS/NIS+ HOWTO. 4.5.3. "Warum unterstützt GNU su nicht die wheel-Gruppe" Dies ist eine bekannte Redewendung am Ende der alten "info su"-Seite von Richard M. Stallman. Aber keine Sorge: der aktuelle     su-Befehl in Debian nutzt PAM, so dass man die Erlaubnis zur Nutzung von su auf die root-Gruppe beschränken kann, indem die Zeile mit "pam_wheel.so" in "/etc/pam.d/su" aktiviert wird. 4.5.4. Schärfere Passwortregeln     Die Installation des libpam-cracklib-Pakets ermöglicht Ihnen, schärfere Regeln für Passwörter vorzuschreiben. Auf einem typischen GNOME-System, auf dem automatisch     libpam-gnome-keyring installiert wird, sieht "/etc/pam.d/ common-password" wie folgt aus: # here are the per-package modules (the "Primary" block) password requisite pam_cracklib.so retry=3 minlen=8 difok=3 password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt # here's the fallback if no module succeeds password requisite pam_deny.so     # prime the stack with a positive return value if there isn't one already; # this avoids us returning an error just because nothing sets a success code # since the modules above will each just jump around password required pam_permit.so # and here are more per-package modules (the "Additional" block) password optional pam_gnome_keyring.so # end of pam-auth-update config 4.6. Sicherheit der Authentifizierung Anmerkung     Die Informationen hier sind für Ihre Sicherheitsbedürfnisse möglicherweise nicht passend, aber sie sollten für den Anfang eine gute Basis sein. 4.6.1. Sicheres Passwort im Internet Viele beliebte Transport-Layer-Dienste kommunizieren Nachrichten inklusive der Passwort-Authentifizierung im Klartext. Es ist eine sehr schlechte Idee, Passwörter im Klartext über das wilde     Internet zu übertragen, wo es abgehört werden kann. Sie können diese Dienste über "Transport Layer Security" (TLS) oder seinen Vorgänger "Secure Sockets Layer" (SSL) betreiben, um die vollständige Kommunikation inklusive des Passworts über die Verschlüsselung zu schützen. Tabelle 4.7. Liste von unsicheren und sicheren Diensten und Ports +---------------------------------------------------------------+ | Name des unsicheren |Port| Name des sicheren |Port| | Dienstes | | Dienstes | | |---------------------------+----+-------------------------+----| |www (http) |80 |https |443 | |---------------------------+----+-------------------------+----| |smtp (Mail) |25 |ssmtp (smtps) |465 | |---------------------------+----+-------------------------+----| |ftp-data |20 |ftps-data |989 |     |---------------------------+----+-------------------------+----| |ftp |21 |ftps |990 | |---------------------------+----+-------------------------+----| |telnet |23 |telnets |992 | |---------------------------+----+-------------------------+----| |imap2 |143 |imaps |993 | |---------------------------+----+-------------------------+----| |pop3 |110 |pop3s |995 | |---------------------------+----+-------------------------+----| |ldap |389 |ldaps |636 | +---------------------------------------------------------------+ Die Verschlüsselung kostet CPU-Zeit. Als CPU-freundliche Alternative können Sie die Kommunikation im Klartext lassen und nur das Passwort verschlüsseln; verwenden Sie dazu ein sicheres Authentifizierungsprotokoll wie "Authenticated Post Office Protocol" (APOP) für POP oder "Challenge-Response Authentication     Mechanism MD5" (CRAM-MD5) für SMTP und IMAP. (Um E-Mail-Nachrichten über das Internet von Ihrem Mail-Client-Programm zum Mail-Server zu übertragen, ist es derzeit verbreitet, den neuen Message-Submission-Port 587 zu nutzen statt dem traditionellen SMTP-Port 25, um zu vermeiden, dass Port 25 vom Netzwerk-Provider geblockt wird, während Sie sich über CRAM-MD5 authentifizieren.) 4.6.2. Secure Shell (sichere Shell) Das Secure-Shell-(SSH-)Programm bietet sichere verschlüsselte Kommunikation zwischen zwei nicht vertrauenswürdigen Rechnern über ein unsicheres Netzwerk mittels sicherer Authentifizierung.     Es besteht aus dem OpenSSH-Client (ssh(1)) und dem OpenSSH-Daemon (sshd(8)). SSH kann genutzt werden, um mittels der Port-Forwarding-Funktionalität (Port-Weiterleitung) eine unsichere Protokoll-Kommunikation wie POP oder X gesichert durch das Internet zu tunneln. Der Client versucht, sich selbst über eine Host-basierte Authentifizierung gegenüber dem Server zu identifizieren; dazu können verschiedene Verfahren angewandt werden: Public Key Authentication (über einen öffentlichen Schlüssel),     Challenge-Response Authentication (es wird eine Aufgabe gestellt, für die die andere Seite die Lösung liefern muss) oder Passwort-Authentifizierung. Die Nutzung der Public Key Authentication ermöglicht eine Anmeldung aus der Ferne ohne Passwort. Lesen Sie dazu Abschnitt 6.3, „Der Server für Fernzugriff (SSH) und Hilfsprogramme“. 4.6.3. Zusätzliche Sicherheitsmaßnahmen für das Internet Sogar wenn Sie sichere Dienste wie Secure Shell (SSH) und Point-to-point Tunneling Protocol (PPTP) verwenden, bestehen trotzdem noch Chancen für die Einbrecher mittels     Brute-Force-Atttacken zum Erraten von Passwörtern usw. über das Internet. Die Nutzung von Firewall-Richtlinien (mehr dazu in Abschnitt 5.7, „Die Netfilter-Infrastruktur“) zusammen mit den folgenden Sicherheitswerkzeugen kann die Situation weiter verbessern. Tabelle 4.8. Liste von Werkzeugen, die zusätzliche Sicherheitsmaßnahmen ermöglichen +---------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |-------------+------+-----+------------------------------------| | | | |kleiner Port-Knock-Daemon knockd(1) | |knockd |V:0, |110 |(horcht auf spezielle |     | |I:2 | |Anklopf-Sequenzen für Ports) und | | | | |-Client knock(1) | |-------------+------+-----+------------------------------------| |fail2ban |V:98, |2126 |IP-Adressen sperren, die vielfache | | |I:111 | |Authentifizierungsfehler verursachen| |-------------+------+-----+------------------------------------| |libpam-shield|V:0, |115 |Ferne Angreifer aussperren, die | | |I:0 | |versuchen, Passwörter zu erraten | +---------------------------------------------------------------+ 4.6.4. Sichern des root-Passworts Um zu verhindern, dass Leute auf Ihre Maschine mit     root-Privilegien zugreifen, müssen Sie folgende Aktionen durchführen: * physikalischen Zugriff auf die Festplatte unterbinden; * das UEFI/BIOS abriegeln und verhindern, dass von     Wechseldatenträgern gebootet wird; * ein Passwort für interaktive Sitzungen von GRUB vergeben; * das Editieren des GRUB-Menüs verhindern. Mit physikalischem Zugriff auf die Festplatte ist das     Zurücksetzen des root-Passworts relativ leicht; dies erfordert folgende Schritte: 1. Bauen Sie die Festplatte in einen PC mit UEFI/BIOS ein, der von CD gebootet werden kann. 2. Booten Sie das System mit einer Rettungs-CD (Debian Boot-Disk, Knoppix-CD, GRUB-CD, …).     3. Binden Sie die root-Partition mit Lese-/Schreibberechtigung ein. 4. Editieren Sie "/etc/passwd" auf der root-Partition und verändern Sie den zweiten Eintrag für das root-Konto, so dass dieser leer ist. Wenn Sie beim Booten Schreibzugriff auf den GRUB-Menüeintrag für     grub-rescue-pc haben (lesen Sie dazu Abschnitt 3.1.2, „Stufe 2: der Bootloader“), ist es mit folgenden Schritten sogar noch einfacher: 1. Booten Sie das System, nachdem Sie die Kernel-Parameter etwa wie folgt geändert haben: "root=/dev/hda6 rw init=/bin/sh".     2. Editieren Sie "/etc/passwd" und verändern Sie den zweiten Eintrag für das root-Konto, so dass dieser leer ist. 3. Starten Sie das System neu.     Die root-Shell des Systems ist jetzt ohne Passwort zugänglich. Anmerkung Sobald jemand Zugriff auf die root-Shell hat, kann er auf alles auf dem System zugreifen und jegliche Passwörter auf dem System     zurücksetzen. Mehr noch, er könnte die Passwörter für alle Benutzerkonten kompromittieren, indem Brute-Force-Werkzeuge zum Knacken von Passwörtern wie john oder crack eingesetzt werden (Näheres in Abschnitt 9.5.11, „Systemsicherheits- und Integritätsüberprüfung“). Diese geknackten Passwörter könnten dann dazu verwendet werden, um andere Systeme zu kompromittieren. Die einzige vernünftige Software-Lösung, um all diese Bedenken auszuräumen, ist die Verwendung einer Software-verschlüsselten     root-Partition (oder "/etc"-Partition) mittels dm-crypt und initramfs (lesen Sie dazu Abschnitt 9.9, „Tipps zur Datenverschlüsselung“). Sie benötigen dann allerdings immer ein Passwort, um das System zu booten. 4.7. Andere Möglichkeiten zur Zugriffskontrolle Es gibt Zugriffsbeschränkungen auf dem System, die nicht auf     passwort-basierter Authentifizierung und Dateiberechtigungen beruhen. Anmerkung     Abschnitt 9.4.16, „Die Alt-SysRq-Tastenkombination“ enthält Informationen, wie Sie die Kernel-Funktion Secure attention key (SAK) einschränken. 4.7.1. Access control lists (ACLs)     ACLs are a superset of the regular permissions as explained in Abschnitt 1.2.3, „Dateisystem-Berechtigungen“. You encounter ACLs in action on modern desktop environment. When     a formatted USB storage device is auto mounted as, e.g., "/media/ penguin/USBSTICK", a normal user penguin can execute: $ cd /media/penguin $ ls -la     total 16 drwxr-x---+ 1 root root 16 Jan 17 22:55 . drwxr-xr-x 1 root root 28 Sep 17 19:03 .. drwxr-xr-x 1 penguin penguin 18 Jan 6 07:05 USBSTICK "+" in the 11th column indicates ACLs are in action. Without     ACLs, a normal user penguin shouldn't be able to list like this since penguin isn't in root group. You can see ACLs as: $ getfacl . # file: . # owner: root # group: root     user::rwx user:penguin:r-x group::--- mask::r-x other::---     Hierbei: * "user::rwx", "group::---", and "other::---" correspond to the regular owner, group, and other permissions.     * The ACL "user:penguin:r-x" allows a normal user penguin to have "r-x" permissions. This enabled "ls -la" to list directory content. * The ACL "mask::r-x" sets the upper bound of permissions.     See "POSIX Access Control Lists on Linux", acl(5), getfacl(1), and setfacl(1) for more. 4.7.2. sudo Das Programm sudo(8) wurde entwickelt, um einem Systemadministrator die Möglichkeit zu geben, Benutzern eingeschränkte root-Privilegien zu gewähren sowie um die Aktivitäten rund um das root-Konto zu protokollieren. sudo     benötigt nur das Passwort eines normalen Benutzers. Installieren Sie das sudo-Paket und aktivieren Sie es, indem Sie passende Optionen in "/etc/sudoers" setzen. Konfigurationsbeispiele finden Sie unter "/usr/share/doc/sudo/examples/sudoers" und in Abschnitt 1.1.12, „sudo-Konfiguration“. Die Art, wie ich sudo auf meinem Einzelbenutzersystem verwende (lesen Sie Abschnitt 1.1.12, „sudo-Konfiguration“), soll mich selbst vor meiner eigenen Dummheit schützen. Ich persönlich     denke, dass die Verwendung von sudo eine bessere Alternative zur dauerhaften Nutzung des root-Kontos ist. Der folgende Befehl ändert zum Beispiel den Eigentümer von "irgendeine_datei" in " mein_name":     $ sudo chown my_name some_file Wenn Sie das root-Passwort kennen (was bei Benutzern, die sich     ihr Debian-System selbst installieren, immer der Fall ist), können Sie natürlich jeden Befehl von jeglichem Benutzerkonto aus ausführen, indem Sie "su -c" verwenden. 4.7.3. PolicyKit     PolicyKit ist eine Komponente des Betriebssystems zur Kontrolle von systemweiten Privilegien auf Unix-ähnlichen Systemen. Neuere GUI-Anwendungen sind nicht dafür entwickelt, als     privilegierte Prozesse zu laufen. Sie kommunizieren mit privilegierten Prozessen über PolicyKit, um administrative Operationen durchführen zu können.     Auf Debian-Systemen beschränkt PolicyKit solche Operationen auf Benutzerkonten, die der sudo-Gruppe angehören.     Lesen Sie dazu polkit(8). 4.7.4. Den Zugriff auf einige Server-Dienste einschränken Aus Gründen der Systemsicherheit ist es eine gute Idee, so viele Server-Programme wie möglich zu deaktivieren. Dies ist besonders     für Netzwerk-Server kritisch. Ungenutzte Server, die entweder direkt als Daemon oder über den Super-Server aktiviert sind, müssen als Sicherheitsrisiko angesehen werden. Viele Programme wie sshd(8) verwenden PAM-basierte     Zugriffskontrollen. Es gibt viele Möglichkeiten, um den Zugriff auf Server-Dienste einzuschränken: * Konfigurationsdateien: "/etc/default/programmname"; * Systemd Dienste-Unit-Konfiguration für den Daemon; * PAM (Pluggable Authentication Modules); * "/etc/inetd.conf" für den Super-Server;     * "/etc/hosts.deny" und "/etc/hosts.allow" für TCP-Wrapper (tcpd(8)); * "/etc/rpc.conf" für Sun RPC; * "/etc/at.allow" und "/etc/at.deny" für atd(8); * "/etc/cron.allow" und "/etc/cron.deny" für crontab(1); * Netzwerk-Firewall aus der netfilter-Infrastruktur. Lesen Sie dazu Abschnitt 3.5, „Systemmanagement“,     Abschnitt 4.5.1, „Konfigurationsdateien, auf die PAM und NSS zugreifen“ und Abschnitt 5.7, „Die Netfilter-Infrastruktur“. Tipp     Sun-RPC-Dienste müssen für NFS und andere RPC-basierte Programme aktiviert sein. Tipp Falls Sie Probleme mit dem Zugriff von außen auf ein aktuelles     Debian-System haben, kommentieren Sie blockierende Konfigurationselemente wie "ALL: PARANOID" in "/etc/hosts.deny" aus, falls solche existieren. (Aber sie müssen vorsichtig sein bezüglich der Sicherheitsrisiken, die durch solche Aktionen entstehen.) 4.7.5. Linux Sicherheits-Funktionalitäten Der Linux-Kernel hat Sicherheitsfunktionen entwickelt und     unterstützt sie immer noch, die in traditionellen UNIX-Implementierungen nicht zu finden sind.     Linux unterstützt erweiterte Dateiattribute, die über die traditionellen UNIX-Attribute hinausgehen (siehe xattr(7)). Linux teilt die Privilegien, die dem Superuser traditionell zugewiesen wurden, in verschiedene Bereiche auf, bekannt als     Capabilities(7), die unabhängig voneinander aktiviert oder deaktiviert werden können. Capatilities sind Attribute, die pro Prozess definiert werden können, und werden seit der Kernel-Version 2.2 unterstützt. Das Linux Security Module (LSM) Framework stellt einen     Mechanismus für verschiedene Sicherheits-Checks bereit, die von neuen Kernel-Erweiterungen abhängig sind. Zum Beispiel: * AppArmor * Security-Enhanced Linux (SELinux)     * Smack (Simplified Mandatory Access Control Kernel) * Tomoyo Linux Da diese Erweiterungen die Privilegien grundsätzlich weiter einschränken, als dies im normalen UNIX-artigen Sicherheitsmodell     der Fall ist, können unter Umständen sogar die Superuser-Rechte beschnitten sein. Sie werden aufgefordert, das Dokument zum Linux Security Module (LSM) Framework auf kernel.org zu lesen. Das Konzept der Linux Namespaces hüllt eine globale Systemressource in eine Abstraktion, die dazu führt, dass es für einen Prozess innerhalb des Namespace so erscheint, als hätte er     eine eigene isolierte Instanz dieser globalen Ressource. Änderungen an der globalen Ressource sind für alle Prozesse innerhalb des Namespace sichtbar, nicht aber für andere Prozesse. Seit Kernel-Version 5.6 gibt es 8 Arten von Namespaces (lesen Sie dazu namespaces(7), unshare(1), nsenter(1)).     Mit Stand Debian 11 Bullseye (2021) nutzt Debian die Funktionalität "unified cgroup hierarchy" (a.k.a. cgroups-v2).     Anwendungsbeispiele für Namespaces mit cgroups, die die Isolation von Prozessen sowie die Zugriffskontrolle ermöglichen, sind: * Systemd. Siehe Abschnitt 3.2.1, „Systemd-Init“.     * Sandbox-Umgebungen. Näheres dazu in Abschnitt 7.7, „Sandbox“. * Linux-Container wie Docker oder LXC. Lesen Sie hierzu Abschnitt 9.11, „Virtualisierte Systeme“. Diese Funktionalitäten können nicht über das Konzept in     Abschnitt 4.1, „Normale Unix-Authentifizierung“ realisiert werden! Solche fortgeschrittenen Themen sind allerdings nicht Thema dieses einführenden Dokuments. Kapitel 5. Netzwerkkonfiguration Tipp     Bezüglich einer aktuellen Anleitung für Debian zum Thema Netzwerk lesen Sie Debian Administratorhandbuch — Konfigurieren des Netzwerks. Tipp     Unter systemd kann networkd für die Netzwerkverwaltung genutzt werden; lesen Sie dazu systemd-networkd(8). 5.1. Die elementare Netzwerkinfrastruktur     Lassen Sie uns einen Blick auf die elementare Netzwerkinfrastruktur eines modernen Debian-Systems werfen: Tabelle 5.1. Liste von Werkzeugen zur Netzwerkkonfiguration +---------------------------------------------------------------------------------------+ | Pakete |Popcon|Größe| Art | Beschreibung | |---------------------+------+-----+-------------------+--------------------------------| |network-manager |V:392,|15542|config::NM |NetworkManager (Daemon): das | | |I:459 | | |Netzwerk automatisch verwalten | |---------------------+------+-----+-------------------+--------------------------------| |network-manager-gnome|V:121,|5583 |config::NM |NetworkManager (GNOME-Frontend) | | |I:369 | | | | |---------------------+------+-----+-------------------+--------------------------------| | | | | |Netplan (generator): Unified, | |netplan.io |V:1, |319 |config::NM+networkd|declarative interface to | | |I:5 | | |NetworkManager and | | | | | |systemd-networkd backends | |---------------------+------+-----+-------------------+--------------------------------| | |V:608,| | |standardisiertes Werkzeug zum | |ifupdown |I:979 |199 |config::ifupdown |Aktivieren und Deaktivieren des | | | | | |Netzwerks (Debian-spezifisch) | |---------------------+------+-----+-------------------+--------------------------------| |isc-dhcp-client |V:217,|2875 |config::low-level |DHCP-Client | | |I:981 | | | | |---------------------+------+-----+-------------------+--------------------------------| |pppoeconf |V:0, |186 |config::helper |Konfigurations-Hilfswerkzeug für| | |I:5 | | |PPPoE-Verbindungen | |---------------------+------+-----+-------------------+--------------------------------| |wpasupplicant |V:353,|3862 |config::helper |clientseitige Unterstützung für | | |I:513 | | |WPA und WPA2 (IEEE 802.11i) | |---------------------+------+-----+-------------------+--------------------------------| |wpagui |V:0, |774 |config::helper |Qt-GUI-Programm für | | |I:1 | | |wpa_supplicant | |---------------------+------+-----+-------------------+--------------------------------| |wireless-tools |V:179,|292 |config::helper |Werkzeuge zum Bearbeiten der | | |I:244 | | |Linux Wireless Extensions | |---------------------+------+-----+-------------------+--------------------------------| | |V:34, | | |Werkzeug zum Konfigurieren von | |iw |I:475 |302 |config::helper |Drahtlos-Netzwerkgeräten unter | | | | | |Linux | |---------------------+------+-----+-------------------+--------------------------------| | | | | |iproute2, IPv6 und andere | |iproute2 |V:736,|3606 |config::iproute2 |erweiterte | | |I:972 | | |Netzwerkkonfiguration: ip(8), tc| | | | | |(8) usw. | |---------------------+------+-----+-------------------+--------------------------------| | |V:319,| | |Administrationswerkzeuge für | |iptables |I:718 |2414 |config::Netfilter |Paketfilterung und NAT | | | | | |(Netfilter) | |---------------------+------+-----+-------------------+--------------------------------| | | | | |Administrationswerkzeuge für | |nftables |V:106,|182 |config::Netfilter |Paketfilterung und NAT | | |I:701 | | |(Netfilter) (Nachfolger von | | | | | |{ip,ip6,arp,eb}tables) | |---------------------+------+-----+-------------------+--------------------------------| | | | | |Erreichbarkeit eines fernen | | |V:194,| | |Rechners über das Netzwerk | |iputils-ping |I:997 |122 |Test |testen, entweder mittels | | | | | |Rechnername oder IP-Addresse |     | | | | |(iproute2) | |---------------------+------+-----+-------------------+--------------------------------| | | | | |Erreichbarkeit eines fernen | |iputils-arping |V:3, |50 |Test |Rechners über das Netzwerk | | |I:36 | | |mittels seiner ARP-Addresse | | | | | |testen | |---------------------+------+-----+-------------------+--------------------------------| |iputils-tracepath |V:2, |47 |Test |Netzwerkpfad zu einem fernen | | |I:30 | | |Rechner verfolgen | |---------------------+------+-----+-------------------+--------------------------------| | |V:95, | | |Eigenschaften von | |ethtool |I:267 |739 |Test |Ethernet-Geräten anzeigen oder | | | | | |ändern | |---------------------+------+-----+-------------------+--------------------------------| | |V:5, | | |Netzwerkpfad zu einem fernen | |mtr-tiny |I:46 |156 |test::low-level |Rechner verfolgen | | | | | |(Curses-basiert) | |---------------------+------+-----+-------------------+--------------------------------| | |V:4, | | |Netzwerkpfad zu einem fernen | |mtr |I:41 |209 |test::low-level |Rechner verfolgen (Curses- und | | | | | |GTK-basiert) | |---------------------+------+-----+-------------------+--------------------------------| | |V:0, | | |Werkzeuge für allgemeine | |gnome-nettool |I:17 |2492 |test::low-level |Netzwerkinformations-Operationen| | | | | |(GNOME) | |---------------------+------+-----+-------------------+--------------------------------| |nmap |V:25, |4498 |test::low-level |Netzwerk-Mapper/Port-Scanner | | |I:199 | | |(Nmap, konsolen-basiert) | |---------------------+------+-----+-------------------+--------------------------------| |tcpdump |V:17, |1340 |test::low-level |Netzwerkverkehr-Analysator | | |I:175 | | |(Tcpdump, konsolen-basiert) | |---------------------+------+-----+-------------------+--------------------------------| |wireshark |I:45 |10417|test::low-level |Netzwerkverkehr-Analysator | | | | | |(Wireshark, GTK-basiert) | |---------------------+------+-----+-------------------+--------------------------------| |tshark |V:2, |400 |test::low-level |Netzwerkverkehr-Analysator | | |I:25 | | |(konsolen-basiert) | |---------------------+------+-----+-------------------+--------------------------------| | |V:0, | | |eine Zusammenfassung von | |tcptrace |I:2 |401 |test::low-level |Verbindungen auf Basis der | | | | | |tcpdump-Ausgabe erstellen | |---------------------+------+-----+-------------------+--------------------------------| |snort |V:0, |2203 |test::low-level |flexibles Einbruchmeldesystem | | |I:0 | | |für das Netzwerk (Snort) | |---------------------+------+-----+-------------------+--------------------------------| |ntopng |V:0, |15904|test::low-level |Daten über die Netzwerknutzung | | |I:1 | | |im Webbrowser anzeigen | |---------------------+------+-----+-------------------+--------------------------------| | |V:16, | | |Netzwerk-Clients, die mit BIND | |dnsutils |I:280 |276 |test::low-level |bereitgestellt werden: nslookup | | | | | |(8), nsupdate(8), dig(8) | |---------------------+------+-----+-------------------+--------------------------------| |dlint |V:0, |53 |test::low-level |DNS-Zoneninformationen mittels | | |I:3 | | |Nameserver-Abfragen überprüfen | |---------------------+------+-----+-------------------+--------------------------------| |dnstracer |V:0, |59 |test::low-level |eine Verkettung von DNS-Servern | | |I:1 | | |zu ihrer Quelle verfolgen | +---------------------------------------------------------------------------------------+ 5.1.1. Die Auflösung des Rechnernamens Die Auflösung des Rechnernamens (hostname) wird derzeit auch     durch den NSS-(Name-Service-Switch-)Mechanismus unterstützt. Die Auflösung läuft wie folgt ab: 1. Die "/etc/nsswitch.conf"-Datei mit Einträgen wie "hosts: files dns" bestimmt die Reihenfolge der Rechnernamenauflösung. (Dies ersetzt die alte Funktionalität der "order"-Einträge in "/etc/host.conf".) 2. Als erstes wird in diesem Beispiel die files-Methode aufgerufen. Wenn der Rechnername in der "/etc/hosts"-Datei     gefunden wird, werden alle gültigen Adressen für den Rechner ausgegeben und die Abfrage wird beendet. (Die "/etc/ host.conf"-Datei enthält "multi on".) 3. Dann wird die dns-Methode wird aufgerufen. Wenn der Rechnername über das Internet Domain Name System (DNS) (definiert über die Datei "/etc/resolv.conf") gefunden wird, werden alle dafür gültigen Adressen ausgegeben und die Abfrage wird beendet. A typical workstation may be installed with its host name set to,     e.g., "host_name" and its optional domain name set to an empty string. Then, "/etc/hosts" looks like the following. 127.0.0.1 localhost 127.0.1.1 host_name     # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters     Jede Zeile beginnt mit einer IP-Addresse und dahinter steht jeweils der zugeordnete Rechnername. Die IP-Adresse 127.0.1.1 in der zweiten Zeile dieses Beispiels ist auf einigen anderen Unix-ähnlichen Systemen möglicherweise     nicht vorhanden. Der Debian Installer erstellt diesen Eintrag für Systeme ohne feste IP-Adresse als provisorische Lösung für einige Software-Produkte (z.B. GNOME), wie in Fehler #719621 dokumentiert.     The host_name matches the hostname defined in the "/etc/hostname" (see Abschnitt 3.7.1, „Der Rechnername“).     Auf Systemen mit einer festen IP-Adresse sollte allerdings diese feste IP-Adresse statt der 127.0.1.1 verwendet werden. Bei Systemen mit einer festen IP-Adresse und einem voll     qualifizierten Domain-Namen (FQDN), bereitgestellt durch das Domain Name System (DNS), sollte rechnername.domain-name verwendet werden statt nur rechnername. Die Datei "/etc/resolv.conf" ist eine statische Datei, falls das Paket resolvconf nicht installiert ist. Falls das Paket     installiert ist, ist dies ein symbolischer Link. In beiden Fällen enthält es Informationen zur Initialisierung der Namensauflösungs-Routinen. Wenn das DNS zum Beispiel über die IP "192.168.11.1" erreichbar ist, enthält sie Folgendes:     nameserver 192.168.11.1 Das resolvconf-Paket macht "/etc/resolv.conf" zu einem     symbolischen Link und verwaltet ihren Inhalt automatisch über die Hook-Skripte. For the PC workstation on the typical adhoc LAN environment, the     hostname can be resolved via Multicast DNS (mDNS) in addition to the basic files and dns methods. * Avahi stellt ein Rahmenwerk für Multicast-DNS-Diensteabfragen auf Debian-Systemen bereit. * Es ist ein Äquivalent zu Apple Bonjour / Apple Rendezvous. * Das libnss-mdns-Plugin-Paket bietet Rechnernamensauflösung via mDNS für die GNU Name-Service-Switch-(NSS-)Funktionalität der GNU C-Bibliothek (glibc).     * The "/etc/nsswitch.conf" file should have stanza like "hosts: files mdns4_minimal [NOTFOUND=return] dns" (see /usr/share/ doc/libnss-mdns/README.Debian for other configurations). * A host name suffixed with the ".local" pseudo-top-level domain is resolved by sending a mDNS query message in a multicast UDP packet using IPv4 address "224.0.0.251" or IPv6 address "FF02::FB". Anmerkung     Die Ausweitung generischer Top-Level-Domains (gTLD) im Domain-Name-System ist in Arbeit. Achten Sie bei Auswahl von Domain-Namen, die nur im lokalen Netzwerk verwendet werden sollen, auf Namenskollisionen. Anmerkung Use of packages such as libnss-resolve together with systemd-resolved, or libnss-myhostname, or libnss-mymachine, with     coressponding listings on the "hosts" line in the "/etc/ nsswitch.conf" file may override the traditional network configuration discussed in the above. See nss-resolve(8), systemd-resolved(8), nss-myhostname(8), and nss-mymachines(8) for more. 5.1.2. Der Netzwerkschnittstellenname     Systemd verwendet "verlässlich vorhersagbare Namen (Predictable Network Interface Names)" wie "enp0s25". 5.1.3. Der Netzwerkadressbereich für das LAN Wir wollen uns an die IPv4 32-Bit-Adressbereiche erinnern, die     durch die rfc1918 für jede Klasse zur Verwendung in Local Area Networks (LANs) reserviert sind. Diese Adressen werden bestimmt nicht mit irgendwelchen Adressen im Internet kollidieren. Anmerkung     IP-Adressen mit Doppelpunkten sind IPv6-Adressen, z.B. "::1" für localhost. Tabelle 5.2. Liste der Netzwerkadressbereiche +---------------------------------------------------------------+ |Klasse| Netzwerkadressen | Netzmaske |Netzmaske | number of | | | | | /Bits | subnets | |------+------------------+-------------+----------+------------| |A |10.x.x.x |255.0.0.0 |/8 |1 |     |------+------------------+-------------+----------+------------| |B |172.16.x.x — |255.255.0.0 |/16 |16 | | |172.31.x.x | | | | |------+------------------+-------------+----------+------------| |C |192.168.0.x — |255.255.255.0|/24 |256 | | |192.168.255.x | | | | +---------------------------------------------------------------+ Anmerkung Wenn eine dieser Adressen einem Rechner zugewiesen ist, kann     dieser Rechner das Internet nicht direkt erreichen, sondern muss ein Gateway verwenden, der als Proxy für verschiedene Dienste dient, oder er nutzt Network Address Translation (NAT). Ein Breitband-Router nutzt üblicherweise NAT für das Anwender-Netzwerk. 5.1.4. Unterstützung für Netzwerkgeräte Der größte Teil verfügbarer Netzwerk-Hardware wird durch das     Debian-System unterstützt; es gibt einige Geräte, die laut DFSG nicht-freie Firmware für den Betrieb erfordern. Lesen Sie dazu Abschnitt 9.10.5, „Hardware-Treiber und Firmware“. 5.2. Moderne Netzwerkkonfiguration für Arbeitsplatzsysteme Auf modernen Debian-Desktop-Systemen mit systemd erfolgt die Initialisierung von Netzwerkschnittstellen für die     Loopback-Schnittstelle lo typischerweise durch "networking.service" und für andere Schnittstellen durch "NetworkManager.service". Debian-Systeme können Netzwerkverbindungen über Software-Daemons     wie NetworkManager (NM) (network-manager und zugehörige Pakete) verwalten. * Sie haben ihre eigenen grafischen GUI- und Befehlszeilen-Programme als Bedienoberfläche. * Sie haben ihre eigenen Daemons als Unterbau. * Sie erlauben eine einfache Verbindung Ihres Systems mit dem     Internet. * Sie ermöglichen eine problemlose Verwaltung von kabelgebundenen und kabellosen Netzwerkkonfigurationen. * Sie erlauben uns, das Netzwerk unabhängig vom althergebrachten ifupdown zu konfigurieren. Anmerkung     Verwenden Sie diese automatischen Netzwerkkonfigurations-Werkzeuge nicht für Server. Sie sind primär für die Nutzung auf Arbeitsplatzrechnern oder Laptops gedacht. Diese modernen Werkzeuge müssen korrekt konfiguriert werden, um     Konflikte mit dem ifupdown-Paket und seiner Konfigurationsdatei " /etc/network/interfaces" zu vermeiden. 5.2.1. Grafische Netzwerkkonfigurations-Werkzeuge     Offizielle Dokumentation für NM unter Debian ist in "/usr/share/ doc/network-manager/README.Debian" verfügbar.     Grundsätzlich läuft die Netzwerkkonfiguration für Arbeitsplatzsysteme wie folgt ab: 1. Fügen Sie den Benutzer, der sich am Arbeitsplatz anmeldet, z.B. foo, mit folgendem Befehl zur Gruppe "netdev" hinzu (alternativ kann dies in modernen Arbeitsplatzumgebungen wie GNOME oder KDE auch automatisch über D-bus erledigt werden): $ sudo usermod -a -G foo netdev 2. Halten Sie die Konfiguration in "/etc/network/interfaces" so einfach wie hier:     auto lo iface lo inet loopback 3. Starten Sie NM mit folgendem Befehl neu: $ sudo systemctl restart network-manager 4. Konfigurieren Sie Ihr Netzwerk über die grafische GUI-Oberfläche. Anmerkung     Um Konflikte mit ifupdown zu vermeiden, werden nur Schnittstellen, die nicht in "/etc/network/interfaces" aufgelistet sind, von NM verwaltet. Tipp Wenn Sie die Fähigkeiten von NM erweitern möchten, suchen Sie     nach entsprechenden Plugin-Modulen und zusätzlichen Paketen wie network-manager-openconnect, network-manager-openvpn-gnome, network-manager-pptp-gnome, mobile-broadband-provider-info, gnome-bluetooth usw. 5.3. Moderne Netzwerkkonfiguration ohne grafische Oberfläche Unter systemd kann das Netzwerk stattdessen in /etc/systemd/     network/ konfiguriert werden. Lesen Sie dazu systemd-resolved(8), resolved.conf(5) und systemd-networkd(8).     Dies ermöglicht eine moderne Netzwerkkonfiguration auch ohne grafische Oberfläche.     Eine DHCP-Client-Konfiguration kann durch Erzeugen von "/etc/ systemd/network/dhcp.network" eingerichtet werden, z.B. mit: [Match] Name=en*     [Network] DHCP=yes     Eine statische Netzwerkkonfiguration richten Sie über "/etc/ systemd/network/static.network" ein, wie hier: [Match] Name=en*     [Network] Address=192.168.0.15/24 Gateway=192.168.0.1 5.4. The modern network configuration for cloud The modern network configuration for cloud may use cloud-init and     netplan.io packages (see Abschnitt 3.7.4, „Cloud system initialization“). The netplan.io package supports systemd-networkd and     NetworkManager as its network configuration backends, and enables the declarative network configuration using YAML data. When you change YAML: * Run "netplan generate" command to generate all the necessary backend configuration from YAML.     * Run "netplan apply" command to apply the generated configuration to the backends.     See "Netplan documentation", netplan(5), netplan-generate(8), and netplan-apply(8). See also "Cloud-init documentation" (especially around     "Configuration sources" and "Netplan Passthrough") for how cloud-init can integrate netplan.io configuration with alternative data sources. 5.4.1. The modern network configuration for cloud with DHCP     A DHCP client configuration can be set up by creating a data source file "/etc/netplan/50-dhcp.yaml": network: version: 2 ethernets:     all-en: match: name: "en*" dhcp4: true dhcp6: true 5.4.2. The modern network configuration for cloud with static IP     A static network configuration can be set up by creating a data source file "/etc/netplan/50-static.yaml": network: version: 2 ethernets: eth0:     addresses: - 192.168.0.15/24 routes: - to: default via: 192.168.0.1 5.4.3. The modern network configuration for cloud with Network Manger The network client configuration using Network Manger     infrastructure can be set up by creating a data source file "/etc /netplan/00-network-manager.yaml": network:     version: 2 renderer: NetworkManager 5.5. Netzwerkkonfiguration auf unterster Ebene     Für Netzwerkkonfiguration über die Konsole können Sie unter Linux die iproute2-Programme (ip(8), …) verwenden. 5.5.1. iproute2-Befehle Die iproute2-Befehle bieten vollwertige Funktionalität auf der     untersten Ebene der Netzwerkkonfiguration. Hier eine Tabelle zur Gegenüberstellung von veralteten net-tools-Befehlen und neuen iproute2- und anderen Befehlen. Tabelle 5.3. Gegenüberstellung von net-tools- und iproute2-Befehlen +---------------------------------------------------------------+ | net-tools | iproute2 | Beeinflussung | | (veraltet) | usw. (neu) | | |-------------+------------+------------------------------------| |ifconfig(8) |ip addr |Protokoll-Adresse (IP oder IPv6) | | | |eines Gerätes | |-------------+------------+------------------------------------| |route(8) |ip route |Eintrag in der Routing-Tabelle |     |-------------+------------+------------------------------------| |arp(8) |ip neigh |ARP- oder NDISC-Cache-Eintrag | |-------------+------------+------------------------------------| |ipmaddr |ip maddr |Multicast-Adresse | |-------------+------------+------------------------------------| |iptunnel |ip tunnel |Tunnel über IP | |-------------+------------+------------------------------------| |nameif(8) |ifrename(8) |Netzwerkschnittstellen basierend auf| | | |MAC-Adressen benennen | |-------------+------------+------------------------------------| |mii-tool(8) |ethtool(8) |Einstellungen von Ethernet-Geräten | +---------------------------------------------------------------+     Lesen Sie ip(8) und das Linux Advanced Routing & Traffic Control. 5.5.2. Sichere Basis-Netzwerkoperationen Sie können die folgenden Netzwerkbefehle der untersten Ebene     problemlos verwenden, da sie die Netzwerkkonfiguration nicht verändern: Tabelle 5.4. Liste von Basis-Netzwerkbefehlen +---------------------------------------------------------------+ | Befehl | Beschreibung | |-------------------+-------------------------------------------| |ip addr show |Verbindungs- und Adressstatus von aktiven | | |Schnittstellen anzeigen | |-------------------+-------------------------------------------| |route -n |Vollständige Routing-Tabelle mit | | |numerischen Adressen anzeigen | |-------------------+-------------------------------------------| |ip route show |Vollständige Routing-Tabelle mit | | |numerischen Adressen anzeigen | |-------------------+-------------------------------------------| |arp |Aktuellen Inhalt der ARP-Cache-Tabellen | | |anzeigen | |-------------------+-------------------------------------------| |ip neigh |Aktuellen Inhalt der ARP-Cache-Tabellen | | |anzeigen | |-------------------+-------------------------------------------| |plog |Logdaten des PPP-Daemons anzeigen | |-------------------+-------------------------------------------| |ping yahoo.com |Internet-Verbindung zu "yahoo.com" | | |überprüfen | |-------------------+-------------------------------------------| |whois yahoo.com |Überprüfen, wer "yahoo.com" in der | | |Domain-Datenbank registriert hat |     |-------------------+-------------------------------------------| |traceroute |Verbindung zu "yahoo.com" durch das | |yahoo.com |Internet verfolgen | |-------------------+-------------------------------------------| |tracepath yahoo.com|Verbindung zu "yahoo.com" durch das | | |Internet verfolgen | |-------------------+-------------------------------------------| |mtr yahoo.com |Verbindung zu "yahoo.com" durch das | | |Internet verfolgen (wiederholt) | |-------------------+-------------------------------------------| |dig |DNS-Einträge von "example.com" laut den | |[@dns-server.com] |Daten von "dns-server.com" auf einen "a"-, | |example.com [{a|mx||"mx"- oder "any"-Eintrag überprüfen | |any}] | | |-------------------+-------------------------------------------| |iptables -L -n |Paketfilter überprüfen | |-------------------+-------------------------------------------| |netstat -a |Alle offenen Ports finden | |-------------------+-------------------------------------------| |netstat -l --inet |Ports finden, die auf eine Verbindung | | |warten | |-------------------+-------------------------------------------| |netstat -ln --tcp |TCP-Ports finden, die auf eine Verbindung | | |warten (numerisch) | |-------------------+-------------------------------------------| |dlint example.com |DNS-Zonen-Informationen von "example.com" | | |überprüfen | +---------------------------------------------------------------+ Tipp     Einige dieser Basisbefehle zur Netzwerkkonfiguration sind in "/ usr/sbin/" abgelegt. Sie müssen unter Umständen den vollständigen Pfad, wie z.B. "/usr/sbin/ifconfig" angeben oder "/usr/sbin" zur Variable "$PATH" in Ihrer "~/.bashrc"-Datei hinzufügen. 5.6. Netzwerkoptimierung Die grundsätzliche Netzwerkoptimierung liegt außerhalb des     Rahmens dieser Dokumentation. Ich erwähne hier nur Dinge, die für Anwender-typische Verbindungen passend sind. Tabelle 5.5. Liste von Werkzeugen zur Netzwerkoptimierung +---------------------------------------------------------------+ | Pakete |Popcon|Größe| Beschreibung | |---------+------+-----+----------------------------------------| |iftop |V:7, |93 |Informationen zur Bandbreitennutzung | | |I:100 | |einer Netzwerkschnittstelle anzeigen | |---------+------+-----+----------------------------------------| |iperf |V:3, |360 |Werkzeug zur IP-Bandbreiten-Messung | | |I:43 | | | |---------+------+-----+----------------------------------------| | |V:0, | |InterFace STATistics Monitoring | |ifstat |I:7 |60 |(Netzwerkschnittstellen-Statistik/ | | | | |-Überwachung) | |---------+------+-----+----------------------------------------| |bmon |V:1, |144 |Portierbarer Bandbreitenmonitor und |     | |I:18 | |Geschwindigkeitsrechner | |---------+------+-----+----------------------------------------| |ethstatus|V:0, |40 |Skript, das schnell den Durchsatz eines | | |I:3 | |Netzwerkgerätes messen kann | |---------+------+-----+----------------------------------------| |bing |V:0, |80 |Empirisch stochastischer | | |I:0 | |Bandbreitentester | |---------+------+-----+----------------------------------------| |bwm-ng |V:1, |95 |Kleiner und einfacher konsolenbasierter | | |I:13 | |Bandbreitenmonitor | |---------+------+-----+----------------------------------------| |ethstats |V:0, |23 |Konsolenbasierter | | |I:0 | |Ethernet-Statistikmonitor | |---------+------+-----+----------------------------------------| |ipfm |V:0, |82 |Bandbreitenanalyse-Werkzeug | | |I:0 | | | +---------------------------------------------------------------+ 5.6.1. Die optimale MTU finden     NM setzt den optimalen Wert für die Maximum Transmission Unit (MTU) normalerweise automatisch. In speziellen Fällen möchten Sie die MTU jedoch vielleicht händisch setzen, nachdem Sie mit ping(8) und seiner Option "-M do" experimentiert haben; Sie haben damit die Möglichkeit, ein ICMP-Paket mit verschiedenen Paketgrößen zu verschicken. MTU ist     die größte Paketgröße, bei der das Paket noch erfolgreich ohne Fragmentierung verschickt werden kann plus 28 Byte für die IPv4- bzw. 48 Byte für die IPv6-Adresse. In folgendem Beispiel wurde für eine IPv4-Verbindung eine MTU von 1460 ermittelt und für IPv6 eine MTU von 1500: $ ping -4 -c 1 -s $((1500-28)) -M do www.debian.org PING (149.20.4.15) 1472(1500) bytes of data. ping: local error: message too long, mtu=1460 --- ping statistics --- 1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms $ ping -4 -c 1 -s $((1460-28)) -M do www.debian.org PING (130.89.148.77) 1432(1460) bytes of data. 1440 bytes from klecker-misc.debian.org (130.89.148.77): icmp_seq=1 ttl=50 time=325 ms     --- ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 325.318/325.318/325.318/0.000 ms $ ping -6 -c 1 -s $((1500-48)) -M do www.debian.org PING www.debian.org(mirror-csail.debian.org (2603:400a:ffff:bb8::801f:3e)) 1452 data bytes 1460 bytes from mirror-csail.debian.org (2603:400a:ffff:bb8::801f:3e): icmp_seq=1 ttl=47 time=191 ms --- www.debian.org ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 191.332/191.332/191.332/0.000 ms     Dies ist das Path MTU (PMTU) Discovery-Verfahren (RFC1191) und der Befehl tracepath(8) kann dies automatisieren. Tabelle 5.6. Wesentliche Grundregeln für den optimalen MTU-Wert +---------------------------------------------------------------+ | Netzwerkumgebung |MTU | Argumentation | |------------------------------------+----+---------------------|     |Einwahlverbindung (IP: PPP) |576 |Standard | |------------------------------------+----+---------------------| |Ethernet-Verbindung (IP: DHCP oder |1500|Standard und | |fest) | |vorgegeben | +---------------------------------------------------------------+     Zusätzlich zu diesen Grundregeln sollten Sie folgendes wissen: * Jegliche Nutzung von Tunneling-Methoden (VPN usw.) kann aufgrund des Overheads den optimalen MTU-Wert reduzieren.     * Der MTU-Wert sollte den über die experimentelle Methode ermittelten PMTU-Wert nicht überschreiten. * Ein größerer MTU-Wert ist grundsätzlich besser, wenn andere Einschränkungen greifen. Die Maximum Segment Size (MSS) wird als alternative Messmethode     für die Paketgröße verwendet. Der Zusammenhang zwischen MSS und MTU ist wie folgt: * MSS = "MTU - 40" bei IPv4     * MSS = "MTU - 60" bei IPv6 Anmerkung     Bei Netzwerkoptimierung mittels iptables(8) (lesen Sie dazu auch Abschnitt 5.7, „Die Netfilter-Infrastruktur“) kann die Paketgröße über die MSS begrenzt werden; dies ist für einen Router nützlich. Lesen Sie den Abschnitt bezüglich "TCPMSS" in iptables(8). 5.6.2. WAN-TCP-Optimierung The TCP throughput can be maximized by adjusting TCP buffer size parameters as in "TCP tuning" for the modern high-bandwidth and     high-latency WAN. So far, the current Debian default settings serve well even for my LAN connected by the fast 1G bps FTTP service. 5.7. Die Netfilter-Infrastruktur Netfilter stellt eine Infrastruktur für Stateful Packet Inspection (SPI, zustandsorientierte Paketüberprüfung) und     Network Address Translation (NAT) über Module des Linux-Kernels (lesen Sie hierzu Abschnitt 3.9, „Die Kernel-Modul-Initialisierung“) zur Verfügung. Tabelle 5.7. Liste von Firewall-Werkzeugen +---------------------------------------------------------------+ | Pakete |Popcon|Größe| Beschreibung | |---------------+------+-----+----------------------------------| | | | |Administrationswerkzeuge für | |nftables |V:106,|182 |Paketfilterung und NAT (Netfilter)| | |I:701 | |(Nachfolger von {ip,ip6,arp,eb} | | | | |tables) | |---------------+------+-----+----------------------------------| | |V:319,| |Administrationswerkzeuge für | |iptables |I:718 |2414 |netfilter (iptables(8) für IPv4, | | | | |ip6tables(8) für IPv6) | |---------------+------+-----+----------------------------------| |arptables |V:0, |100 |Administrationswerkzeuge für | | |I:1 | |netfilter (arptables(8) für ARP) | |---------------+------+-----+----------------------------------| | |V:14, | |Administrationswerkzeuge für | |ebtables |I:29 |276 |netfilter (ebtables(8) für | | | | |Ethernet-Bridging-Betrieb) | |---------------+------+-----+----------------------------------| | |V:0, | |Fortlaufende Überwachung des | |iptstate |I:2 |119 |netfilter-Status (ähnlich zu top | | | | |(1)) | |---------------+------+-----+----------------------------------| | |V:55, | |Uncomplicated Firewall (UFW) is a | |ufw |I:77 |859 |program for managing a netfilter | | | | |firewall | |---------------+------+-----+----------------------------------| |gufw |V:5, |3660 |graphical user interface for |     | |I:10 | |Uncomplicated Firewall (UFW) | |---------------+------+-----+----------------------------------| | |V:11, | |firewalld is a dynamically managed| |firewalld |I:16 |2613 |firewall program with support for | | | | |network zones | |---------------+------+-----+----------------------------------| |firewall-config|V:0, |1163 |graphical user interface for | | |I:3 | |firewalld | |---------------+------+-----+----------------------------------| |shorewall-init |V:0, |88 |Initialisierung der Shoreline | | |I:0 | |Firewall | |---------------+------+-----+----------------------------------| | |V:3, | |Erzeugung von | |shorewall |I:8 |3090 |netfilter-Konfigurationsdateien | | | | |für Shoreline Firewall | |---------------+------+-----+----------------------------------| | | | |Erzeugung von | |shorewall-lite |V:0, |71 |netfilter-Konfigurationsdateien | | |I:0 | |für Shoreline Firewall | | | | |(abgespeckte Version) | |---------------+------+-----+----------------------------------| | | | |Erzeugung von | |shorewall6 |V:0, |1334 |netfilter-Konfigurationsdateien | | |I:1 | |für Shoreline Firewall | | | | |(IPv6-Version) | |---------------+------+-----+----------------------------------| | | | |Erzeugung von | |shorewall6-lite|V:0, |71 |netfilter-Konfigurationsdateien | | |I:0 | |für Shoreline Firewall | | | | |(abgespeckte IPv6-Version) | +---------------------------------------------------------------+ Das vorherrschende Nutzerprogramm für netfilter ist iptables(8). Sie können netfilter von Hand interaktiv über die Shell     konfigurieren, seinen Status mit iptables-save(8) sichern und beim Systemstart über ein Init-Skript mittels iptables-restore(8) wiederherstellen.     Konfigurations-Hilfsskripte wie shorewall vereinfachen diesen Prozess.     See documentations at Netfilter Documentation (or in "/usr/share/ doc/iptables/html/"). * Linux Networking-Concepts HOWTO     * Linux 2.4 Packet Filtering HOWTO * Linux 2.4 NAT HOWTO Tipp     Obwohl für Linux 2.4 geschrieben, sind sowohl der iptables(8) -Befehl wie auch die Netfilter-Kernel-Funktionalität für die Linux-Kernel-Serien 2.6 und 3.x passend. Kapitel 6. Netzwerkapplikationen Nach dem Aufbau der Netzwerkverbindung (laut Kapitel 5,     Netzwerkkonfiguration) können Sie verschiedenste Netzwerkapplikationen nutzen. Tipp     Bezüglich einer aktuellen Anleitung für Debian zum Thema Netzwerk-Infrastruktur lesen Sie das Debian Administratorhandbuch — Netzwerk-Infrastruktur. Tipp Falls Sie "2-Schritt-Verifizierung" aktiviert haben, müssen Sie     bei manchen Internet-Providern ein Anwendungspasswort beziehen, um aus Ihrem Anwendungsprogramm Zugriff auf POP- und SMTP-Dienste zu erhalten. Auch kann es erforderlich sein, dass Sie im voraus Ihre Host-IP-Adresse bestätigen müssen. 6.1. Webbrowser     Es gibt viele Webbrowser-Pakete, um über das Hypertext Transfer Protocol (HTTP-Protokoll) auf ferne Inhalte zuzugreifen: Tabelle 6.1. Liste der Webbrowser +---------------------------------------------------------------+ | Paket |Popcon|Größe | Art | Beschreibung des | | | | | | Webbrowsers | |----------------+------+------+--------+-----------------------| |chromium |V:35, |234084|X |Chromium (quelloffener | | |I:108 | | |Browser von Google) | |----------------+------+------+--------+-----------------------| | | | | |Firefox, (quelloffener | |firefox |V:10, |239492|" |Browser von Mozilla, | | |I:15 | | |nur in Debian Unstable | | | | | |verfügbar) | |----------------+------+------+--------+-----------------------| | | | | |Firefox ESR, | |firefox-esr |V:198,|228981|" |(Firefox-Variante mit | | |I:435 | | |erweitertem | | | | | |Support-Umfang, ESR) | |----------------+------+------+--------+-----------------------| |epiphany-browser|V:3, |2154 |" |GNOME, HIG-konform, | | |I:15 | | |Epiphany | |----------------+------+------+--------+-----------------------|     |konqueror |V:24, |25905 |" |KDE, Konqueror | | |I:106 | | | | |----------------+------+------+--------+-----------------------| | |V:0, | | |Dillo | |dillo |I:5 |1565 |" |(ressourcenschonender | | | | | |Browser, FLTK-basiert) | |----------------+------+------+--------+-----------------------| |w3m |V:15, |2837 |Text |w3m | | |I:187 | | | | |----------------+------+------+--------+-----------------------| |lynx |V:25, |1948 |" |Lynx | | |I:344 | | | | |----------------+------+------+--------+-----------------------| |elinks |V:3, |1654 |" |ELinks | | |I:20 | | | | |----------------+------+------+--------+-----------------------| |links |V:3, |2314 |" |Links (Nur-Text) | | |I:28 | | | | |----------------+------+------+--------+-----------------------| |links2 |V:1, |5492 |grafisch|Links (Konsolen-Grafik | | |I:12 | | |ohne X) | +---------------------------------------------------------------+ 6.1.1. Fälschen der User-Agent-Angabe Um auf einige übermäßig beschränkte Webseiten zugreifen zu     können, müssen Sie unter Umständen die User-Agent-Angabe fälschen, die Ihr Webbrowser zurück gibt. Näheres unter: * MDN Web Docs: userAgent (englisch) * Chrome-Entwickler: die User-Agent-Angabe überschreiben (englisch) * Wie Sie Ihre User-Agent-Angabe ändern (englisch)     * Wie Sie die User-Agent-Angabe in Chrome, Firefox, Safari und weiteren ändern (englisch) * Wie Sie die User-Agent-Angabe Ihres Browsers ändern, ohne irgendwelche Erweiterungen installieren zu müssen (englisch) * Wie Sie die User-Agent-Angabe in Gnome Web (epiphany) ändern (englisch) Achtung     Eine gefälschte user-agent-Angabe kann möglicherweise nachteilige Nebenwirkungen bei der Verwendung von Java haben. 6.1.2. Browser-Erweiterung Alle modernen grafischen Webbrowser unterstützen     quellcode-basierte Browser-Erweiterungen; diese sollen als Web extensions standardisiert werden. 6.2. Das Mail-System Dieser Abschnitt ist überwiegend für typische tragbare     Arbeitsplatzrechner (Laptops) gedacht, die über Internetverbindungen verfügen, wie sie für normale Privatkunden üblich sind. Achtung     Falls Sie vorhaben, den Mail-Server so einzurichten, dass Mails direkt über das Internet ausgetauscht werden, gibt es wahrscheinlich bessere Beschreibungen als dieses grundlegende Dokument. 6.2.1. Grundlagen des E-Mail-Systems Eine E-Mail besteht aus drei Komponenten: den Absender- und     Empfänger-Informationen, wie sie bei einem normalen Brief auf dem Umschlag stehen würden, den Nachrichten-Kopfzeilen (Header) und der eigentlichen Nachricht (dem "Nachrichtenkörper"). * Die "An"- und "Von"-Informationen ("To" und "From") auf dem "Umschlag" werden von SMTP genutzt, um die Nachricht zuzustellen. (Die "From"-Information auf dem Umschlag wird auch mit Bounce address/Envelope sender, From_ usw. bezeichnet). * Die "An"- und "Von"-Informationen ("To" und "From") in den Nachrichten-Kopfzeilen werden vom E-Mail-Client     (E-Mail-Programm) angezeigt. (Obwohl es sehr gängig ist, dass diese mit den Informationen vom "Umschlag" übereinstimmen, muss dies nicht immer der Fall sein.) * Das E-Mail-Nachrichtenformat bestehend aus Kopfzeilen (Header) und Nachrichtenkörper (Body) wird erweitert durch die Multipurpose Internet Mail Extensions (MIME), so dass zusätzlich zum reinen ASCII-Text auch andere Zeichenkodierungen unterstützt werden sowie Anhänge mit Audio-, Video-, Grafik- oder Applikationsdaten.     Voll ausgestattete GUI-basierte E-Mail-Clients bieten all diese Funktionen über eine grafische intuitive Konfiguration. * Sie erstellen und interpretieren die Nachrichten-Kopfzeilen und den Nachrichtenkörper unter Verwendung der Multipurpose Internet Mail Extensions (MIME), um den Datentyp und die Kodierung des Nachrichteninhalts korrekt zu bestimmen. * Sie authentifizieren sich selbst gegenüber den SMTP- und IMAP-Servern des ISP mittels der althergebrachten Basic Access Authentication oder der modernen Variante OAuth 2.0. (Um OAuth 2.0 zu nutzen, legen Sie dies über die Einstellungen Ihrer Arbeitsplatzumgebung fest; z.B. über     "Einstellungen" -> "Online-Konten".) * Sie versenden die Nachrichten an den SMTP-Server des ISP (über den Message Submission Port 587). * Sie empfangen die auf dem Mail-Server des ISP vorhandenen Nachrichten über den TSL/IMAP4-Port (993). * Sie können Mails über deren Attribute filtern. * Teilweise bieten sie auch weitere optionale Funktionalitäten: Kontakte, Kalender, Aufgaben, Notizen. Tabelle 6.2. Liste der Mail User Agents (MUA) +---------------------------------------------------------------+ | Paket |Popcon|Größe | Art | |-----------+------+------+-------------------------------------| | |V:30, | |Programm mit grafischer | |evolution |I:239 |486 |X-GUI-Oberfläche (GNOME3, | | | | |Groupware-Suite) | |-----------+------+------+-------------------------------------| | |V:48, | |Programm mit grafischer | |thunderbird|I:119 |224760|X-GUI-Oberfläche (GTK, Mozilla |     | | | |Thunderbird) | |-----------+------+------+-------------------------------------| |kmail |V:38, |23871 |Programm mit grafischer | | |I:97 | |X-GUI-Oberfläche (KDE) | |-----------+------+------+-------------------------------------| |mutt |V:16, |7104 |Programm für textbasiertes Terminal, | | |I:149 | |zu benutzen u.a. mit vim | |-----------+------+------+-------------------------------------| |mew |V:0, |2319 |Programm für textbasiertes Terminal, | | |I:0 | |zu benutzen mit (x)emacs | +---------------------------------------------------------------+ 6.2.2. Einschränkungen moderner E-Mail-Dienste Moderne E-Mail-Dienste unterliegen einigen Einschränkungen, um     die Belästigung/Schädigung durch Spam (unerwünschte und unverlangte E-Mails) zu minimieren. * Sie können nicht davon ausgehen, dass das Betreiben eines SMTP-Servers an einem Endverbraucher-Anschluß (und somit das Senden von Nachrichten direkt an einen fernen Zielrechner) zuverlässig funktioniert.     * Eine E-Mail kann an jeglicher Stelle auf der Route zum Ziel ohne weiteren Hinweis verworfen werden, außer sie ist als so authentisch wie möglich erkennbar. * Sie können nicht davon ausgehen, dass das Versenden von Mails an ferne Rechner mit einer zufälligen Absender-Mail-Adresse über einen eigenen Smarthost zuverlässig funktioniert.     Die Gründe hierfür sind: * Kommunikation über den SMTP-Port (25) von Rechnern an einem Endverbraucher-Anschluß wird geblockt. * Kommunikation über den SMTP-Port (25) zu Rechnern an einem Endverbraucher-Anschluß wird geblockt. * Ausgehende Nachrichten von Rechnern an einem Endverbraucher-Anschluß ins Internet können nur über den Message Submission Port (587) versandt werden.     * Zur E-Mail-Filterung werden großflächig Anti-Spam-Techniken wie DomainKeys Identified Mail (DKIM), Sender Policy Framework (SPF) und Domain-based Message Authentication, Reporting and Conformance (DMARC) eingesetzt. * Unter Umständen können Sie zum Versand von Mails über einen Smarthost den DomainKeys Identified Mail-Dienst verwenden. * Der Smarthost-Dienst überschreibt unter Umständen die Absenderadresse in den Nachrichten-Kopfzeilen mit der Ihres Mail-Accounts, um zu verhindern, dass die E-Mail-Adresse gefälscht wird. 6.2.3. Historische Erwartungen an E-Mail-Dienste Einige Programme im Debian-System erwarten, dass auf den /usr/ sbin/sendmail-Befehl zugegriffen werden kann, um in der     Standardeinstellung (oder auch in benutzerspezifisch angepassten Konfigurationen) E-Mails verschicken zu können. Der Grund hierfür ist, dass der Mail-Dienst auf UNIX-Systemen historisch gesehen wie folgt funktioniert: * Eine E-Mail wird als Textdatei erstellt. * Die E-Mail wird an den /usr/sbin/sendmail-Befehl übergeben. * Wenn die Zieladresse auf dem gleichen Rechner liegt, stellt / usr/sbin/sendmail die Mail per lokaler Auslieferung zu, indem sie an die Datei /var/mail/$username angehängt wird.     + Befehle, die diese Funktionalität nutzen: apt-listchanges, cron, at, ... * Liegt die Zieladresse auf einem fernen Rechner, sendet /usr/ sbin/sendmail die Nachricht per SMTP an den (per DNS-MX-Eintrag ermittelten) Zielrechner. + Befehle, die diese Funktionalität nutzen: popcon, reportbug, bts, ... 6.2.4. Mail Transfer Agent (MTA) Debian mobile workstations can be configured just with full     featured GUI based email clients without mail transfer agent (MTA) program after Debian 12 Bookworm. Debian traditionally installed some MTA program to support programs expecting the /usr/sbin/sendmail command. Such MTA on     mobile workstations must cope with Abschnitt 6.2.2, „Einschränkungen moderner E-Mail-Dienste“ and Abschnitt 6.2.3, „Historische Erwartungen an E-Mail-Dienste“. Bei mobilen Arbeitsplatzrechnern ist die typische Wahl für den MTA entweder exim4-daemon-light oder postfix (bei diesem wird die     Installationsoption "E-Mails direkt mittels SMTP oder über fetchmail empfangen; ausgehende E-Mails über einen Smarthost versenden." ausgewählt). Dies sind ressourcen-schonende MTAs, die auch "/etc/aliases" respektieren. Tipp Die Konfiguration von exim4 zum Versenden von E-Mails über mehrere Absender-Mail-Adressen und mehrere dazugehörige     Smarthosts ist alles andere als einfach. Wenn Sie solche Funktionalitäten für einige Programme benötigen, richten Sie diese so ein, dass sie msmtp benutzen; damit ist es auf einfache Art möglich, mehrere Absender-Adressen einzurichten. Den Haupt-MTA können Sie dann für nur eine einzige Mail-Adresse eingerichtet lassen. Tabelle 6.3. Liste von Paketen für grundlegende Mail Transfer Agents +--------------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |------------------+------+-----+------------------------------------| |exim4-daemon-light|V:217,|1575 |Exim4 Mail Transfer Agent (MTA: | | |I:227 | |Debian-Standard) | |------------------+------+-----+------------------------------------| |exim4-daemon-heavy|V:6, |1743 |Exim4 Mail Transfer Agent (MTA: | | |I:6 | |flexible Alternative) | |------------------+------+-----+------------------------------------| |exim4-base |V:224,|1699 |Exim4-Dokumentation (Text-Variante) | | |I:234 | |und allgemeine Dateien | |------------------+------+-----+------------------------------------| |exim4-doc-html |I:1 |3746 |Exim4-Dokumentation (html-Variante) | |------------------+------+-----+------------------------------------| |exim4-doc-info |I:0 |637 |Exim4-Dokumentation (info-Variante) | |------------------+------+-----+------------------------------------| |postfix |V:124,|4039 |Postfix Mail Transfer Agent (MTA: | | |I:133 | |sichere Alternative) | |------------------+------+-----+------------------------------------| |postfix-doc |I:6 |4646 |Postfix-Dokumentation (html- + | | | | |Text-Variante) | |------------------+------+-----+------------------------------------| |sasl2-bin |V:5, |371 |Cyrus SASL API Implementation | | |I:13 | |(Ergänzung zu Postfix für SMTP AUTH)| |------------------+------+-----+------------------------------------| |cyrus-sasl2-doc |I:0 |2154 |Cyrus SASL - Dokumentation | |------------------+------+-----+------------------------------------|     |msmtp |V:6, |667 |Ressourcen-schonender MTA | | |I:11 | | | |------------------+------+-----+------------------------------------| | |V:4, | |Ressourcen-schonender MTA | |msmtp-mta |I:6 |124 |(Sendmail-Kompatibilitätserweiterung| | | | |für msmtp) | |------------------+------+-----+------------------------------------| |esmtp |V:0, |129 |Ressourcen-schonender MTA | | |I:0 | | | |------------------+------+-----+------------------------------------| | |V:0, | |Ressourcen-schonender MTA | |esmtp-run |I:0 |32 |(Sendmail-Kompatibilitätserweiterung| | | | |für esmtp) | |------------------+------+-----+------------------------------------| |nullmailer |V:8, |474 |eingeschränkter MTA, kein lokaler | | |I:9 | |Mail-Transfer | |------------------+------+-----+------------------------------------| |ssmtp |V:5, |2 |eingeschränkter MTA, kein lokaler | | |I:8 | |Mail-Transfer | |------------------+------+-----+------------------------------------| | |V:13, | |vollständig ausgestatteter MTA (nur,| |sendmail-bin |I:13 |1901 |wenn Sie sich bereits damit | | | | |auskennen) | |------------------+------+-----+------------------------------------| |courier-mta |V:0, |2407 |vollständig ausgestatteter MTA | | |I:0 | |(inklusive Web-Interface usw.) | |------------------+------+-----+------------------------------------| |git-email |V:0, |1087 |git-send-email(1) program for | | |I:10 | |sending series of patch emails | +--------------------------------------------------------------------+ 6.2.4.1. Die Konfiguration von exim4     Für das Verschicken von Mails über das Internet via Smarthost (re-)konfigurieren Sie die exim4-*-Pakete wie folgt:     $ sudo systemctl stop exim4 $ sudo dpkg-reconfigure exim4-config Wählen Sie bei "Generelle E-Mail-Einstellungen" den Eintrag     "Versand über Sendezentrale (Smarthost); Empfang mit SMTP oder Fetchmail". Setzen Sie den "E-Mail-Name des Systems" auf seinen Standardwert,     den FQDN (Näheres dazu in Abschnitt 5.1.1, „Die Auflösung des Rechnernamens“).     Bei "IP-Adressen, an denen eingehende SMTP-Verbindungen erwartet werden" wählen Sie den Standardwert "127.0.0.1 ; ::1".     Löschen Sie alle eingetragenen Werte bei der Abfrage von "Weitere Ziele, für die E-Mails angenommen werden sollen".     Löschen Sie alle eingetragenen Werte bei der Abfrage von "Rechner, für die E-Mails weitergeleitet werden (Relay)".     Setzen Sie "IP-Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails" auf "smtp.hostname.dom:587". Wählen Sie "Nein" bei der Frage "Lokalen E-Mail-Namen in     ausgehenden E-Mails verbergen?". (Nutzen Sie stattdessen "/etc/ email-addresses" wie in Abschnitt 6.2.4.3, „Die Mail-Adress-Konfiguration“ beschrieben.)     Bei der Abfrage "DNS-Anfragen minimieren (Automatische Einwahl, Dial-on-Demand)?" gehen Sie wie folgt vor: * Wählen Sie "Nein", wenn Ihr System während des Rechnerstarts mit dem Internet verbunden ist.     * Wählen Sie "Ja", wenn Ihr System während des Rechnerstarts nicht (oder nicht immer) mit dem Internet verbunden ist.     Setzen Sie den Wert für "Versandart bei lokaler E-Mail-Zustellung:" auf "Mbox-Format in /var/mail/".     Bei der Frage "Einstellungen auf kleine Dateien aufteilen?" wählen Sie "Ja".     Erzeugen Sie Passworteinträge für den Smarthost, indem Sie "/etc/ exim4/passwd.client" editieren: $ sudo vim /etc/exim4/passwd.client     ... $ cat /etc/exim4/passwd.client ^smtp.*\.hostname\.dom:username@hostname.dom:password Konfigurieren Sie exim4(8) mit "QUEUERUNNER='queueonly'",     "QUEUERUNNER='nodaemon'" usw. in "/etc/default/exim4", um die Nutzung von Systemressourcen zu minimieren (optional).     Starten Sie exim4 mit folgendem Befehl:     $ sudo systemctl start exim4 Der Rechnername in "/etc/exim4/passwd.client" sollte nicht der     Alias-Name sein. Sie können den echten Rechnernamen wie folgt herausfinden: $ host smtp.hostname.dom     smtp.hostname.dom is an alias for smtp99.hostname.dom. smtp99.hostname.dom has address 123.234.123.89 Ich verwende reguläre Ausdrücke in "/etc/exim4/passwd.client", um     das Alias-Problem zu umgehen. SMTP AUTH funktioniert unter Umständen sogar, wenn der Internet-Diensteanbieter den Host (Rechner), auf den der Alias zeigt, verändert.     Sie können die exim4-Konfiguration händisch aktualisieren, indem Sie wie folgt vorgehen: * Aktualisieren der exim4-Konfigurationsdateien in "/etc/exim4/ ". + Erzeugen von "/etc/exim4/exim4.conf.localmacros", um MACROs zu aktivieren und Editieren von "/etc/exim4/ exim4.conf.template" (bei Installation ohne gesplittete     Konfigurationsdateien) + Erzeugen neuer oder Editieren vorhandener Dateien in den Unterverzeichnissen von "/etc/exim4/exim4.conf.d" (bei Installation mit gesplitteten Konfigurationsdateien) * Führen Sie "systemctl reload exim4" aus. Achtung     Das Starten von exim4 dauert ziemlich lange, wenn die Frage "DNS-Anfragen minimieren (Automatische Einwahl, Dial-on-Demand)?" mit "Nein" (dem Standardwert) beantwortet wurde und das System während dem Rechnerstart nicht mit dem Internet verbunden ist.         Lesen Sie bitte die offizielle Anleitung unter "/usr/share/doc/ exim4-base/README.Debian.gz" und update-exim4.conf(8). Warnung     For all practical consideration, use SMTP with STARTTLS on port 587 or SMTPS (SMTP over SSL) on port 465, instead of plain SMTP on port 25. 6.2.4.2. Die Konfiguration von Postfix mit SASL Für das Verschicken von Mails über das Internet via Smarthost     sollten Sie zunächst die Postfix-Dokumentation und einschlägige dazugehörige Handbuchseiten lesen. Tabelle 6.4. Liste von wichtigen Postfix-Handbuchseiten +------------------------------------------------+ | Befehl | Funktion | |------------+-----------------------------------| |postfix(1) |Postfix-Steuerprogramm | |------------+-----------------------------------|     |postconf(1) |Postfix-Konfigurationswerkzeug | |------------+-----------------------------------| |postconf(5) |Postfix-Konfigurationsparameter | |------------+-----------------------------------| |postmap(1) |Wartung von Postfix-Lookup-Tabellen| |------------+-----------------------------------| |postalias(1)|Wartung der Postfix-Alias-Datenbank| +------------------------------------------------+     Sie (re-)konfigurieren die postfix- und sasl2-bin-Pakete wie folgt:     $ sudo systemctl stop postfix $ sudo dpkg-reconfigure postfix     Wählen Sie "Internet mit Smarthost". Setzen Sie "SMTP-Relay-Server (leere Eingabe: keiner)" auf "     [smtp.rechnername.dom]:587" und konfigurieren Sie ihn mit folgenden Befehlen: $ sudo postconf -e 'smtp_sender_dependent_authentication = yes' $ sudo postconf -e 'smtp_sasl_auth_enable = yes'     $ sudo postconf -e 'smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd' $ sudo postconf -e 'smtp_sasl_type = cyrus' $ sudo vim /etc/postfix/sasl_passwd     Erzeugen Sie Passworteinträge für den Smarthost: $ cat /etc/postfix/sasl_passwd     [smtp.hostname.dom]:587 username:password $ sudo postmap hush:/etc/postfix/sasl_passwd     Starten Sie postfix wie folgt:     $ sudo systemctl start postfix Hierbei stellt die Verwendung von "[" und "]" im dpkg-reconfigure-Dialog und in "/etc/postfix/sasl_passwd" sicher,     dass keine MX-Einträge abgefragt werden, sondern direkt der angegebene Rechnername genutzt wird. Lesen Sie dazu "Enabling SASL authentication in the Postfix SMTP client" in "/usr/share/ doc/postfix/html/SASL_README.html". 6.2.4.3. Die Mail-Adress-Konfiguration     Es gibt mehrere Dateien zur Konfiguration der Mail-Adresse für Mail Transfer Agents, Mail Delivery Agents und Mail User Agents. Tabelle 6.5. Liste von Konfigurationsdateien für Mail-Adressen +---------------------------------------------------------------+ | Datei | Funktion | Applikation | |---------------+--------------------+--------------------------| | |Standard-Rechnername|Debian-spezifisch, | |/etc/mailname |für (ausgehende) |mailname(5) | | |Mails | | |---------------+--------------------+--------------------------| |/etc/ |Änderung des |exim(8)-spezifisch, |     |email-addresses|Rechnernamens für |exim4-config_files(5) | | |ausgehende Mails | | |---------------+--------------------+--------------------------| |/etc/postfix/ |Änderung des |postfix(1)-spezifisch, | |generic |Rechnernamens für |aktiviert nach Ausführung | | |ausgehende Mails |des postmap(1)-Befehls | |---------------+--------------------+--------------------------| | |Kontonamen-Alias für|Grundlegend, aktiviert | |/etc/aliases |eingehende Mails |nach Ausführung des | | | |newaliases(1)-Befehls | +---------------------------------------------------------------+ Der mailname in der Datei "/etc/mailname" ist normalerweise ein voll-qualifizierter Domain-Name (FQDN), der sich auf eine der IP-Adressen des Rechners auflösen lässt. Bei     Privatkundenrechnern, die keinen solchen FQDN-Namen mit einer aufzulösenden IP-Adresse haben, setzen Sie diesen mailname auf den Wert von "hostname -f". (Dies ist eine sichere Wahl und funktioniert sowohl für exim4-* wie auch für postfix.) Tipp Der Inhalt von "/etc/mailname" wird von vielen nicht-MTA-Programmen für deren Standardverhalten genutzt. Für     mutt setzen Sie die "hostname"- und "from"-Variablen in der Datei ~/muttrc, um den mailname-Wert zu überschreiben. Für Programme im devscripts-Paket, wie bts(1) und dch(1), exportieren Sie die Umgebungsvariablen "$DEBFULLNAME" und "$DEBEMAIL", um ihn zu überschreiben. Tipp Das Paket popularity-contest sendet normalerweise Mails vom root-Konto über den FQDN. Sie müssen MAILFROM in /etc/     popularity-contest.conf setzen, wie in der Datei /usr/share/ popularity-contest/default.conf beschrieben. Andernfalls wird Ihre Mail vom Smarthost-SMTP-Server abgelehnt werden. Obwohl lästig, ist dieser Ansatz sicherer als das Neuschreiben der Ursprungsadresse für alle Mails von root über den MTA und sollte für andere Daemons und cron-Skripte ebenfalls genutzt werden. Wenn Sie den mailname auf den Wert von "hostname -f" setzen, kann     die Änderung der Mail-Ursprungsadresse via MTA wie folgt realisiert werden: * für exim4(8) über die Datei "/etc/email-addresses", wie in exim4-config_files(5) beschrieben;     * für postfix(1) über die Datei "/etc/postfix/generic", wie in generic(5) beschrieben.     Für postfix sind die folgenden zusätzlichen Schritte nötig: # postmap hash:/etc/postfix/generic     # postconf -e 'smtp_generic_maps = hash:/etc/postfix/generic' # postfix reload     Sie können die Mailadressen-Konfiguration wie folgt testen: * exim(8) mit den Optionen -brw, -bf, -bF, -bV, …;     * postmap(1) mit der Option -q. Tipp     Exim wird zusammen mit mehreren Hilfsprogrammen wie exiqgrep(8) und exipick(8) ausgeliefert. Informationen über verfügbare Befehle finden Sie mittels "dpkg -L exim4-base|grep man8/". 6.2.4.4. Grundlegende MTA-Operationen     Es gibt mehrere grundlegende MTA-Operationen. Einige könnten über die sendmail(1)-Kompatibilitätsschnittstelle ausgeführt werden. Tabelle 6.6. Liste grundlegender MTA-Operationen +---------------------------------------------------------------+ |exim-Befehl| postfix-Befehl | Beschreibung | |-----------+-----------------+---------------------------------| | | |Mails von der Standardeingabe | |sendmail |sendmail |lesen und für die Zustellung | | | |vorbereiten (-bm) | |-----------+-----------------+---------------------------------| |mailq |mailq |Die Mail-Warteschlange auflisten | | | |mit Status und Queue-ID (-bp) | |-----------+-----------------+---------------------------------| |newaliases |newaliases |Initialisieren der | | | |Alias-Datenbank (-I) | |-----------+-----------------+---------------------------------| |exim4 -q |postqueue -f |Wartende Mails zustellen (-q) | |-----------+-----------------+---------------------------------|     | |postsuper -r ALL | | |exim4 -qf |deferred; |Alle Mails zustellen | | |postqueue -f | | |-----------+-----------------+---------------------------------| |exim4 -qff |postsuper -r ALL;|Zurückgehaltene Mails ebenfalls | | |postqueue -f |zustellen | |-----------+-----------------+---------------------------------| |exim4 -Mg |postsuper -h |Eine durch ihre Queue-ID | |queue_id |queue_id |spezifizierte Nachricht | | | |zurückhalten | |-----------+-----------------+---------------------------------| |exim4 -Mrm |postsuper -d |Eine durch ihre Queue-ID | |queue_id |queue_id |spezifizierte Nachricht löschen | |-----------+-----------------+---------------------------------| |Nicht |postsuper -d ALL |Alle Nachrichten löschen | |verfügbar | | | +---------------------------------------------------------------+ Tipp     Es könnte eine gute Idee sein, alle Mails durch ein Skript in "/ etc/ppp/ip-up.d/*" zustellen zu lassen. 6.3. Der Server für Fernzugriff (SSH) und Hilfsprogramme Die Secure SHell (SSH) ist der sichere Weg für Verbindungen über     das Internet. Eine freie Version von SSH namens OpenSSH ist in Debian über die openssh-client- und openssh-server-Pakete verfügbar. Für den Benutzer fungiert ssh(1) als clevere und sichere     Alternative zu telnet(1). Anders als der telnet-Befehl scheitert ssh nicht am telnet-Maskierungszeichen (escape character; Standardeinstellung STRG-]). Tabelle 6.7. Liste von Servern für Fernzugriff und Hilfsprogrammen +----------------------------------------------------------------------------------+ | Paket |Popcon|Größe| Werkzeug | Beschreibung | |----------------------+------+-----+----------------------+-----------------------| |openssh-client |V:866,|4959 |ssh(1) |Secure-Shell-Client | | |I:996 | | | | |----------------------+------+-----+----------------------+-----------------------| |openssh-server |V:730,|1804 |sshd(8) |Secure-Shell-Server | | |I:814 | | | | |----------------------+------+-----+----------------------+-----------------------| | | | | |Fragt den Benutzer nach| |ssh-askpass |I:23 |102 |ssh-askpass(1) |einer Passphrase für | | | | | |ssh-add (reines X) |     |----------------------+------+-----+----------------------+-----------------------| | |V:0, | | |Fragt den Benutzer nach| |ssh-askpass-gnome |I:3 |200 |ssh-askpass-gnome(1) |einer Passphrase für | | | | | |ssh-add (GNOME) | |----------------------+------+-----+----------------------+-----------------------| | | | | |Fragt den Benutzer nach| |ssh-askpass-fullscreen|V:0, |48 |ssh-askpass-fullscreen|einer Passphrase für | | |I:0 | |(1) |ssh-add (GNOME) - etwas| | | | | |hübscher | |----------------------+------+-----+----------------------+-----------------------| | |V:0, | | |Webserver für den | |shellinabox |I:1 |507 |shellinaboxd(1) |VT100-Terminal-Emulator| | | | | |mit Browser-Zugriff | +----------------------------------------------------------------------------------+     Obwohl shellinabox kein SSH-Programm ist, ist es hier als interessante Alternative für fernen Terminal-Zugriff aufgelistet.     Lesen Sie auch Abschnitt 7.9, „X-Server-Verbindungen“ für Infos zur Verbindung mit fernen X-Client-Programmen. Achtung     Lesen Sie Abschnitt 4.6.3, „Zusätzliche Sicherheitsmaßnahmen für das Internet“, falls Ihr SSH über das Internet erreichbar ist. Tipp     Bitte nutzen Sie das Programm screen(1), um dem Remote-Shell-Prozess die Chance zu geben, Verbindungsunterbrechungen zu überstehen (Weiteres dazu finden Sie in Abschnitt 9.1.2, „Das Programm screen“). 6.3.1. Grundlagen von SSH     Der OpenSSH-Daemon unterstützt lediglich das SSH-Protokoll 2. Bitte lesen Sie "/usr/share/doc/openssh-client/README.Debian.gz",     ssh(1), sshd(8), ssh-agent(1), ssh-keygen(1), ssh-add(1) und ssh-agent(1). Warnung Wenn Sie den OpenSSH-Server laufen lassen möchten, darf "/etc/ssh     /sshd_not_to_be_run" nicht vorhanden sein. Aktivieren Sie NICHT rhost-basierte Authentifizierung (HostbasedAuthentication in /etc/ssh/sshd_config). Tabelle 6.8. Liste von SSH-Konfigurationsdateien +---------------------------------------------------------------+ |Konfigurationsdatei| Beschreibung | |-------------------+-------------------------------------------| |/etc/ssh/ssh_config|SSH-Client-Standardeinstellungen, lesen Sie| | |ssh_config(5) | |-------------------+-------------------------------------------| |/etc/ssh/ |SSH-Server-Standardeinstellungen, lesen Sie| |sshd_config |sshd_config(5) |     |-------------------+-------------------------------------------| |~/.ssh/ |öffentliche Standard-SSH-Schlüssel, die | |authorized_keys |Clients verwenden, um sich mit diesem Konto| | |auf diesem SSH-Server zu verbinden | |-------------------+-------------------------------------------| |~/.ssh/id_rsa |geheimer SSH-2 RSA-Schlüssel des Benutzers | |-------------------+-------------------------------------------| |~/.ssh/id_ |geheimer SSH-2 key-type-name-Schlüssel wie | |key-type-name |z.B. ecdsa, ed25519, ... des Benutzers | +---------------------------------------------------------------+     Mit folgenden Befehlen starten Sie eine ssh(1)-Verbindung von einem Client: Tabelle 6.9. Liste von Beispielen zum Start einer SSH-Verbindung auf einem Client +---------------------------------------------------------------+ | Befehl | Beschreibung | |------------------------------------+--------------------------| |ssh |im Standardmodus verbinden| |benutzername@rechnername.domaene.ext| | |------------------------------------+--------------------------| | |im Standardmodus verbinden| |ssh -v |mit aktivierten |     |benutzername@rechnername.domaene.ext|Debugging-Meldungen (zur | | |Fehlersuche) | |------------------------------------+--------------------------| |ssh -o PreferredAuthentications= |Verwendung des Passworts | |password |erzwingen mit SSH Version | |username@hostname.domain.ext |2 | |------------------------------------+--------------------------| |ssh -t username@hostname.domain.ext |führen Sie passwd aus, um | |passwd |das Passwort auf einem | | |fernen Rechner zu ändern | +---------------------------------------------------------------+ 6.3.2. Benutzername auf dem fernen Rechner     Wenn Sie auf dem lokalen und dem fernen Rechner den gleichen Benutzernamen verwenden, können Sie "username@" weglassen. Sogar wenn Sie unterschiedliche Benutzernamen nutzen, können Sie     sie weglassen, sofern Sie "~/.ssh/config" verwenden. Für den Debian Salsa-Service mit dem Kontoname "foo-guest" muss "~/.ssh/ config" z.B. folgendes enthalten:     Host salsa.debian.org people.debian.org User foo-guest 6.3.3. Verbindungen ohne Passwörter für die ferne Seite Man kann es vermeiden, sich Passwörter für ferne Systeme merken     zu müssen, indem man "PubkeyAuthentication" (SSH-2-Protokoll) nutzt.     Setzen Sie dazu auf dem fernen System die entsprechenden Einträge: "PubkeyAuthentication yes" in "/etc/ssh/sshd_config".     Erzeugen Sie die Authentifizierungs-Schlüssel lokal und installieren Sie sie wie folgt auf dem fernen System:     $ ssh-keygen -t rsa $ cat .ssh/id_rsa.pub | ssh user1@remote "cat - >>.ssh/authorized_keys" Sie können weitere Optionen zu den Einträgen in "~/.ssh/     authorized_keys" hinzufügen, um die erlaubten Rechner einzuschränken und spezifische Befehle ausführen. Lesen Sie dazu sshd(8) - "AUTHORIZED_KEYS FILE FORMAT". 6.3.4. Der Umgang mit fremden SSH-Clients     Es sind einige freie SSH-Clients für andere Plattformen verfügbar: Tabelle 6.10. Liste freier SSH-Clients für andere Plattformen +---------------------------------------------------------------+ | Umgebung | freies SSH-Programm | |------------+--------------------------------------------------| |Windows |puTTY (PuTTY: a free SSH and Telnet client) (GPL) |     |------------+--------------------------------------------------| |Windows |SSH in cygwin (Cygwin: Get that Linux feeling - on| |(Cygwin) |Windows) (GPL) | |------------+--------------------------------------------------| |Mac OS X |OpenSSH; verwenden Sie ssh in der | | |Terminal-Applikation (GPL) | +---------------------------------------------------------------+ 6.3.5. Einrichten von ssh-agent Es ist sicherer, Ihren geheimen SSH-Authentifizierungs-Schlüssel     mit einer Passphrase zu schützen. Falls Sie noch keine Passphrase vergeben haben, verwenden Sie dazu "ssh-keygen -p". Legen Sie Ihren öffentlichen SSH-Schlüssel (z.B. "~/.ssh/     id_rsa.pub") wie folgt in "~/.ssh/authorized_keys" auf dem fernen Server ab, und zwar über eine passwort-basierte Verbindung zum Server, wie oben beschrieben. $ ssh-agent bash     $ ssh-add ~/.ssh/id_rsa Enter passphrase for /home/username/.ssh/id_rsa: Identity added: /home/username/.ssh/id_rsa (/home/username/.ssh/id_rsa)     Es ist kein Passwort für das ferne System zur Ausführung des nächsten Befehls mehr nötig:     $ scp foo username@remote.host:foo     Drücken Sie Strg-D, um die ssh-agent-Sitzung zu beenden. Für den X-Server führt das normale Debian-Start-Skript ssh-agent     als Eltern-Prozess aus. Sie müssen ssh-add daher nur einmal ausführen. Für weitere Details lesen Sie ssh-agent(1) und ssh-add (1). 6.3.6. Eine Mail versenden auf einem fernen Rechner Wenn Sie ein SSH-Shell-Konto auf einem Server mit vernünftigen     DNS-Einstellungen haben, können Sie eine Mail, die Sie auf Ihrem Arbeitsplatzrechner vorbereitet haben, von dem fernen Rechner aus als E-Mail verschicken:     $ ssh username@example.org /usr/sbin/sendmail -bm -ti -f "username@example.org" < mail_data.txt 6.3.7. Portweiterleitung für SMTP-/POP3-Tunnelung Um für eine Verbindung von Port 4025 auf localhost zu Port 25 auf remote-server (einem fernen Server) oder für eine Verbindung von     Port 4110 auf localhost zu Port 110 auf remote-server via ssh eine Weiterleitung aufzubauen, führen Sie auf dem lokalen Rechner (localhost) folgendes aus:     # ssh -q -L 4025:remote-server:25 4110:remote-server:110 username@remote-server Dies ist ein sicherer Weg für Verbindungen zu SMTP-/POP3-Servern     über das Internet. Setzen Sie in "/etc/ssh/sshd_config" auf dem fernen Server den Wert für "AllowTcpForwarding" auf "yes". 6.3.8. Wie Sie das ferne System über SSH herunterfahren Sie müssen den Prozess, der das "shutdown -h now" ausführt (lesen Sie Abschnitt 1.1.8, „Wie Sie das System herunterfahren“), davor     schützen, durch SSH beendet zu werden. Verwenden Sie dazu wie folgt den at(1)-Befehl (weiteres zu at in Abschnitt 9.4.13, „Einmalige Aufgaben planen“):     # echo "shutdown -h now" | at now "shutdown -h now" in einer screen(1)-Sitzung auszuführen (weitere     Infos in Abschnitt 9.1.2, „Das Programm screen“) ist ein anderer möglicher Weg. 6.3.9. Fehlersuche bei SSH Falls Sie Probleme haben, kontrollieren Sie die Zugriffsrechte     der Konfigurationsdateien und starten Sie ssh mit der Option "-v". Nutzen Sie die Option "-p", wenn Sie root sind und Probleme mit     einer Firewall haben; dadurch wird die Verwendung der Ports 1 - 1023 auf dem Server vermieden. Wenn ssh-Verbindungen zu einem fernen Rechner plötzlich nicht mehr funktionieren, könnte dies auf Spielereien des Systemadministrators zurückzuführen sein, höchstwahrscheinlich Änderungen am "host_key" im Rahmen von Systemwartungsarbeiten.     Nachdem Sie sich versichert haben, dass dies der Fall ist und niemand versucht, den fernen Rechner über einen cleveren Hack zu imitieren, können Sie die Verbindung wiedererlangen, indem Sie den "host_key"-Eintrag in der "~/.ssh/known_hosts"-Datei auf dem lokalen Rechner entfernen. 6.4. Der Print-Server und Hilfsprogramme Im alten Unix-ähnlichen System war der BSD Line Printer Daemon (lpd) Standard und das Standard-Druckausgabe-Format von freier     Software auf Unix-artigen Systemen war PostScript (PS). Ein Filtersystem wurde zusammen mit Ghostscript verwendet, um das Drucken auf nicht-PostScript-Druckern zu ermöglichen. Siehe Abschnitt 11.4.1, „Ghostscript“. Im modernen Debian-System ist das Common UNIX Printing System     (CUPS) der De-Facto-Standard und das Standard-Druckausgabe-Format von moderner freier Software ist das Portable Document Format (PDF). CUPS nutzt das Internet Printing Protocol (IPP). IPP wird jetzt auch von anderen Betriebssystemen wie Windows XP und Mac OS X     unterstützt und ist der plattform-übergreifende De-Facto-Standard für das Drucken von fern; es unterstützt bi-direktionale Kommunikation. Dank der Dateiformat-abhängigen automatischen Konvertierungsfunktion des CUPS-Systems sollte die einfache     Übergabe jeglicher Daten an den lpr-Befehl zur gewünschten Druckausgabe führen. (In CUPS kann lpr aktiviert werden, indem das cups-bsd-Paket installiert wird.)     Das Debian-System enthält einige erwähnenswerte Pakete für Print-Server und deren Hilfsprogramme: Tabelle 6.11. Liste von Print-Servern und Hilfsprogrammen +------------------------------------------------------------------------+ | Paket |Popcon|Größe| Port | Beschreibung | |-------------------------+------+-----+---------+-----------------------| |lpr |V:2, |367 |printer |BSD lpr/lpd (Line | | |I:3 | |(515) |Printer Daemon) | |-------------------------+------+-----+---------+-----------------------| |lprng |V:0, |3051 |" |" (Erweitert) | | |I:0 | | | | |-------------------------+------+-----+---------+-----------------------| |cups |V:97, |1061 |IPP (631)|Internet-Printing | | |I:441 | | |CUPS-Server | |-------------------------+------+-----+---------+-----------------------|     | | | | |System-V-Druckerbefehle| | | | | |für CUPS: lp(1), lpstat| |cups-client |V:119,|426 |" |(1), lpoptions(1), | | |I:461 | | |cancel(1), lpmove(8), | | | | | |lpinfo(8), lpadmin(8), | | | | | |… | |-------------------------+------+-----+---------+-----------------------| | |V:32, | | |BSD-Druckbefehle für | |cups-bsd |I:219 |131 |" |CUPS: lpr(1), lpq(1), | | | | | |lprm(1), lpc(8) | |-------------------------+------+-----+---------+-----------------------| |printer-driver-gutenprint|V:20, |1219 |Nicht |Druckertreiber für CUPS| | |I:114 | |anwendbar| | +------------------------------------------------------------------------+ Tipp     Sie können das CUPS-System konfigurieren, indem Sie in Ihrem Browser "http://localhost:631/" eingeben. 6.5. Weitere Netzwerkanwendungs-Server     Hier einige weitere Netzwerkanwendungs-Server: Tabelle 6.12. Liste von weiteren Netzwerkanwendungs-Servern +-----------------------------------------------------------------+ | Paket |Popcon|Größe|Protokoll| Beschreibung | |-----------------+------+-----+---------+------------------------| |telnetd |V:0, |54 |TELNET |TELNET-Server | | |I:2 | | | | |-----------------+------+-----+---------+------------------------| |telnetd-ssl |V:0, |159 |" |" (mit | | |I:0 | | |SSL-Unterstützung) | |-----------------+------+-----+---------+------------------------| |nfs-kernel-server|V:49, |769 |NFS |Datei-Netzwerkfreigabe | | |I:63 | | |unter Unix | |-----------------+------+-----+---------+------------------------| | |V:108,| | |Datei- und | |samba |I:131 |3995 |SMB |Drucker-Netzwerkfreigabe| | | | | |unter Windows | |-----------------+------+-----+---------+------------------------| | | | | |Datei- und |     |netatalk |V:1, |2003 |ATP |Drucker-Netzwerkfreigabe| | |I:1 | | |unter Apple/Mac | | | | | |(AppleTalk) | |-----------------+------+-----+---------+------------------------| |proftpd-basic |V:8, |452 |FTP |Grundlegender | | |I:16 | | |Datei-Download | |-----------------+------+-----+---------+------------------------| |apache2 |V:214,|561 |HTTP |Grundlegender Web-Server| | |I:263 | | | | |-----------------+------+-----+---------+------------------------| |squid |V:11, |9265 |" |Grundlegender | | |I:12 | | |Web-Proxy-Server | |-----------------+------+-----+---------+------------------------| |bind9 |V:43, |1124 |DNS |IP-Adresse für andere | | |I:49 | | |Rechner | |-----------------+------+-----+---------+------------------------| |isc-dhcp-server |V:18, |6082 |DHCP |IP-Adresse des Clients | | |I:36 | | |selbst | +-----------------------------------------------------------------+ Das Common Internet File System - Protokoll (CIFS) ist das     gleiche Protokoll wie Server Message Block (SMB) und wird von Microsoft Windows ausgiebig genutzt. Tipp     In Abschnitt 4.5.2, „Modernes zentralisiertes Systemmanagement“ finden Sie Informationen zur Integration von Server-Systemen. Tipp Die Rechnernamenauflösung wird normalerweise über den DNS-Server     realisiert. Für IP-Adressen, die dynamisch über einen DHCP-Server zugewiesen werden, kann Dynamic DNS eingerichtet werden; dazu können bind9 und isc-dhcp-server genutzt werden, wie auf der DDNS-Seite im Debian-Wiki beschrieben. Tipp     Die Verwendung eines Proxy-Servers wie squid ist viel effizienter, um Bandbreite zu sparen, als ein lokaler Archiv-Spiegel mit dem vollständigen Inhalt des Debian-Archivs. 6.6. Weitere Netzwerkanwendungs-Clients     Hier einige weitere Netzwerkanwendungs-Clients: Tabelle 6.13. Liste von Netzwerkanwendungs-Clients +----------------------------------------------------------------+ | Paket |Popcon|Größe|Protokoll| Beschreibung | |---------------+------+-----+---------+-------------------------| |netcat |I:27 |16 |TCP/IP |TCP/IP-Alleskönner | |---------------+------+-----+---------+-------------------------| | | | | |Secure-Socket-Layer- | |openssl |V:841,|2111 |SSL |(SSL-)Binärdatei und | | |I:995 | | |dazugehörige | | | | | |Kryptografie-Werkzeuge | |---------------+------+-----+---------+-------------------------| |stunnel4 |V:7, |548 |" |universeller SSL-Wrapper | | |I:12 | | | | |---------------+------+-----+---------+-------------------------| |telnet |V:29, |54 |TELNET |TELNET-Client | | |I:511 | | | | |---------------+------+-----+---------+-------------------------| |telnet-ssl |V:0, |196 |" |" (mit SSL-Unterstützung)| | |I:2 | | | | |---------------+------+-----+---------+-------------------------| |nfs-common |V:152,|1124 |NFS |Datei-Netzwerkfreigabe | | |I:234 | | |unter Unix | |---------------+------+-----+---------+-------------------------| | |V:24, | | |Datei- und | |smbclient |I:204 |2071 |SMB |Druckerfreigabe-Client | | | | | |für MS Windows | |---------------+------+-----+---------+-------------------------| | | | | |Befehle zum Einbinden und| |cifs-utils |V:29, |317 |" |Trennen von fern | | |I:121 | | |abgelegten | | | | | |MS-Windows-Dateien | |---------------+------+-----+---------+-------------------------| |ftp |V:7, |53 |FTP |FTP-Client |     | |I:114 | | | | |---------------+------+-----+---------+-------------------------| |lftp |V:4, |2361 |" |" | | |I:30 | | | | |---------------+------+-----+---------+-------------------------| |ncftp |V:1, |1389 |" |FTP-Client mit | | |I:14 | | |Vollbildschirmdarstellung| |---------------+------+-----+---------+-------------------------| | |V:208,| |HTTP und |Programm zum | |wget |I:981 |3681 |FTP |Herunterladen von Dateien| | | | | |aus dem Web | |---------------+------+-----+---------+-------------------------| |curl |V:185,|517 |" |" | | |I:620 | | | | |---------------+------+-----+---------+-------------------------| |axel |V:0, |224 |" |Download-Beschleuniger | | |I:3 | | | | |---------------+------+-----+---------+-------------------------| | |V:3, | | |Download-Beschleuniger | |aria2 |I:20 |1981 |" |mit Unterstützung für | | | | | |BitTorrent und Metalink | |---------------+------+-----+---------+-------------------------| |bind9-host |V:115,|393 |DNS |host(1) von bind9, | | |I:939 | | |"Priorität: standard" | |---------------+------+-----+---------+-------------------------| |dnsutils |V:16, |276 |" |dig(1) von bind, | | |I:280 | | |"Priorität: standard" | |---------------+------+-----+---------+-------------------------| |isc-dhcp-client|V:217,|2875 |DHCP |IP-Adresse beziehen | | |I:981 | | | | |---------------+------+-----+---------+-------------------------| |ldap-utils |V:12, |767 |LDAP |Daten von einem | | |I:63 | | |LDAP-Server beziehen | +----------------------------------------------------------------+ 6.7. Diagnose von System-Daemons     Das telnet-Programm ermöglicht die manuelle Verbindung zu den System-Daemons und ihren Diagnosefunktionen.     Um einen reinen POP3-Dienst zu testen, probieren Sie folgendes:     $ telnet mail.ispname.net pop3 Um einen POP3-Dienst mit aktiviertem TLS/SSL (wie sie bei manchen     Providern vorkommen) zu testen, benötigen Sie einen telnet-Client mit aktiviertem TLS/SSL, z.B. aus dem telnet-ssl- oder openssl-Paket:     $ telnet -z ssl pop.gmail.com 995     $ openssl s_client -connect pop.gmail.com:995     Die folgenden RFCs enthalten das zur Diagnose erforderliche Wissen für jeden System-Daemon. Tabelle 6.14. Liste populärer RFCs +---------------------------------------------------------------+ | RFC | Beschreibung | |-------------------+-------------------------------------------| |rfc1939 und rfc2449|POP3-Dienst | |-------------------+-------------------------------------------| |rfc3501 |IMAP4-Dienst | |-------------------+-------------------------------------------| |rfc2821 (rfc821) |SMTP-Dienst | |-------------------+-------------------------------------------|     |rfc2822 (rfc822) |Mail-Datei-Format | |-------------------+-------------------------------------------| |rfc2045 |Multipurpose Internet Mail Extensions | | |(MIME) | |-------------------+-------------------------------------------| |rfc819 |DNS-Dienst | |-------------------+-------------------------------------------| |rfc2616 |HTTP-Dienst | |-------------------+-------------------------------------------| |rfc2396 |URI-Definition | +---------------------------------------------------------------+     Die Verwendung der Ports ist in "/etc/services" beschrieben. Kapitel 7. GUI-System 7.1. GUI-Arbeitsplatzumgebung     Im Debian-System stehen mehrere voll ausgestattete grafische GUI-Arbeitsplatzumgebungen zur Auswahl: Tabelle 7.1. Liste der Arbeitsplatzumgebungen +------------------------------------------------------------------------+ | Programmgruppen-Paket |Popcon|Größe| Beschreibung | |----------------------------+------+-----+------------------------------| |task-gnome-desktop |I:198 |9 |GNOME-Arbeitsplatzumgebung | |----------------------------+------+-----+------------------------------| |task-xfce-desktop |I:96 |9 |Xfce-Arbeitsplatzumgebung | |----------------------------+------+-----+------------------------------| |task-kde-desktop |I:81 |6 |KDE | | | | |Plasma-Arbeitsplatzumgebung |     |----------------------------+------+-----+------------------------------| |task-mate-desktop |I:43 |9 |MATE-Arbeitsplatzumgebung | |----------------------------+------+-----+------------------------------| |task-cinnamon-desktop |I:41 |9 |Cinnamon-Arbeitsplatzumgebung | |----------------------------+------+-----+------------------------------| |task-lxde-desktop |I:29 |9 |LXDE-Arbeitsplatzumgebung | |----------------------------+------+-----+------------------------------| |task-lxqt-desktop |I:18 |9 |LXQt-Arbeitsplatzumgebung | |----------------------------+------+-----+------------------------------| |task-gnome-flashback-desktop|I:13 |6 |GNOME | | | | |Flashback-Arbeitsplatzumgebung| +------------------------------------------------------------------------+ Tipp Paketabhängigkeiten, die durch ein Programmgruppen-Metapaket (task-*) ausgewählt wurden, könnten nicht mehr synchron sein zu den letzten Versionsübergängen in Debian Unstable/Testing. Für task-gnome-desktop beispielsweise müssen Sie eventuell die Paketauswahl wie folgt anpassen: * Starten Sie aptitude(8) mit sudo aptitude -u. * Wählen Sie "Tasks" aus und drücken Sie "Enter". * Wählen Sie "Endbenutzer" aus und drücken Sie "Enter". * Wählen Sie "GNOME" aus und drücken Sie "Enter".     * Wählen Sie task-gnome-desktop aus und drücken Sie "Enter". * Wählen Sie "Hängt ab von" aus und drücken Sie "m" (manuell installiert). * Wählen Sie "Empfiehlt" aus und drücken Sie "m" (manuell installiert). * Wählen Sie "task-gnome-desktop" aus und drücken Sie "-" (entfernen). * Anpassen ausgewählter Pakete bei gleichzeitigem Entfernen von problematischen Paketen, die Abhängigkeitskonflikte auslösen * Drücken Sie "g", um die Installation/Aktualisierung zu starten.     Dieser Abschnitt behandelt die Standard-Arbeitsplatzumgebung von Debian: task-gnome-desktop, die GNOME unter wayland bereitstellt. 7.2. GUI-Kommunikationsprotokoll     Beim GNOME-Desktop verfügbare GUI-Kommunikationsprotokolle: * Wayland (Display-Server-Protokoll) (nativ)     * X-Window-System Core-Protokoll (über xwayland)     Bitte besuchen Sie die freedesktop.org-Seite für Infos zu Unterschieden zwischen Wayland und der X-Window-Architektur.     Aus Sicht des Benutzers können die Unterschiede wie folgt zusammengefasst werden: * Wayland ist ein rechner-internes GUI-Kommunikationsprotokoll: neu, einfacher, schneller, keine setuid-root-Binärdatei;     * X-Window ist ein netzwerkfähiges GUI-Kommunikationsprotokoll: traditionell, komplex, langsamer, hat eine setuid-root-Binärdatei. Betreffend Anwendungen, die das Wayland-Protokoll verwenden: der     Zugriff auf deren Bildschirminhalte von einem fernen Rechner wird unterstützt durch VNC und RDP. Siehe Abschnitt 7.8, „Arbeitsplatz-Fernzugriff (Remote Desktop)“. Moderne X-Server enthalten die MIT Shared Memory Extension und kommunizieren über gemeinsam genutzten Speicher (shared memory) mit den lokalen X-Clients. So wird der netzwerk-transparente     Xlib-Interprozess-Kommunikationskanal umgangen und die Performance erhöht. Diese Situation war der Hintergrund für die Erstellung von Wayland als ausschließlich lokales GUI-Kommunikationsprotokoll. Über das xeyes-Programm - vom GNOME-Terminal aus gestartet -     können Sie das GUI-Kommunikationsprotokoll für jede GUI-Anwendung getrennt kontrollieren.     $ xeyes * Wenn der Mauscursor auf einer Anwendung steht, die das Wayland Display-Server-Protokoll verwendet - wie z.B. das "GNOME-Terminal", bewegen sich die Augen nicht zusammen mit dem Mauscursor.     * Befindet sich der Mauscursor auf einer Anwendung, die das X-Window-System Core-Protokoll nutzt - wie "xterm", bewegen sich die Augen synchron zum Mauscursor; hier zeigt sich die nicht-isolierte Natur der X-Window-Architektur. Mit Stand April 2021 wurden viele populäre GUI-Anwendungen wie GNOME- und LibreOffice (LO)-Anwendungen auf das Wayland     Display-Server-Protokoll migriert. Soweit ich das sehe, verwenden z.B. xterm, gitk, chromium, firefox, gimp, dia und KDE-Anwendungen noch das X-Window-System Core-Protokoll. Anmerkung Sowohl für xwayland unter Wayland wie auch für das native X-Window-System sollte die alte X-Server-Konfigurationsdatei "/     etc/X11/xorg.conf" nicht auf dem System vorhanden sein. Die Grafikausgabe- und Eingabegeräte werden jetzt vom Kernel über DRM, KMS und udev konfiguriert. Der native X-Server wurde entsprechend angepasst, um diese zu verwenden. Weiteres dazu unter "modedb default video mode support" in der Dokumentation des Linux-Kernels. 7.3. GUI-Infrastruktur     Hier einige erwähnenswerte GUI-Infrastruktur-Pakete für die GNOME-Umgebung unter Wayland: Tabelle 7.2. Liste erwähnenswerter GUI-Infrastruktur-Pakete +--------------------------------------------------------------------+ | Paket |Popcon|Paketgröße| Beschreibung | |---------------------------+------+----------+----------------------| |mutter |V:1, |187 |GNOMEs Fenster-Manager| | |I:60 | |mutter [auto] | |---------------------------+------+----------+----------------------| |xwayland |V:240,|2388 |Ein X-Server, der auf | | |I:319 | |wayland läuft [auto] | |---------------------------+------+----------+----------------------| | | | |Remote-Desktop-Daemon |     |gnome-remote-desktop |V:35, |1068 |für GNOME, der | | |I:221 | |PipeWire verwendet | | | | |[auto] | |---------------------------+------+----------+----------------------| | |V:21, | |Fortgeschrittene | |gnome-tweaks |I:229 |1170 |Konfigurationsoptionen| | | | |für GNOME | |---------------------------+------+----------+----------------------| | |V:13, | |Tool to enable / | |gnome-shell-extension-prefs|I:213 |60 |disable GNOME Shell | | | | |extensions | +--------------------------------------------------------------------+ Hierbei bedeutet "[auto]", dass diese Pakete automatisch     installiert werden, wenn Sie bei der Installation die Programmgruppe task-gnome-desktop auswählen. Tipp gnome-tweaks ist das unverzichtbare Konfigurationswerkzeug für GNOME. Zum Beispiel:     * können Sie eine "Über-Verstärkung" der Sound-Lautstärke erzwingen (unter "Allgemein"); * können Sie erzwingen, dass die Feststelltaste ("Caps-Lock") zu "Esc" wird (unter "Tastatur & Maus" -> "Tastatur" -> "Zusätzliche Layout-Optionen"). Tipp     Detail features of GNOME desktop environment can be configured with utilities started by typing "settings", "tweaks", or "extensions" after pressing Super-key. 7.4. GUI-Anwendungen Viele nützliche GUI-Anwendungen sind jetzt in Debian verfügbar. Die Installation von Paketen wie scribus (aus KDE) innerhalb der     GNOME-Arbeitsplatzumgebung ist absolut akzeptabel, da eine entsprechende Funktionalität in GNOME nicht enthalten ist. Allerdings könnte die Installation von vielen Paketen mit identischer Funktion Ihr System aufblähen.     Hier eine Liste von GUI-Anwendungen, die mir ins Auge gestochen sind: Tabelle 7.3. Liste erwähnenswerter GUI-Anwendungen +------------------------------------------------------------------------+ | Paket |Popcon|Paketgröße| Art | Beschreibung | |-------------------+------+----------+--------+-------------------------| | |V:30, | | |persönliches | |evolution |I:239 |486 |GNOME |Informationsmanagement | | | | | |(Groupware und E-Mail) | |-------------------+------+----------+--------+-------------------------| |thunderbird |V:48, |224760 |GTK |E-Mail-Client (Mozilla | | |I:119 | | |Thunderbird) | |-------------------+------+----------+--------+-------------------------| | |V:1, | | |persönliches | |kontact |I:12 |2208 |KDE |Informationsmanagement | | | | | |(Groupware und E-Mail) | |-------------------+------+----------+--------+-------------------------| |libreoffice-writer |V:117,|31474 |LO |Schreibprogramm | | |I:435 | | | | |-------------------+------+----------+--------+-------------------------| |abiword |V:1, |3542 |GNOME |Schreibprogramm | | |I:8 | | | | |-------------------+------+----------+--------+-------------------------| |calligrawords |V:0, |6097 |KDE |Schreibprogramm | | |I:7 | | | | |-------------------+------+----------+--------+-------------------------| | |V:1, | | |Desktop-Publishing-Editor| |scribus |I:16 |31345 |KDE |zum Ändern von | | | | | |PDF-Dateien | |-------------------+------+----------+--------+-------------------------| |glabels |V:0, |1338 |GNOME |Aufkleber-Editor | | |I:3 | | | | |-------------------+------+----------+--------+-------------------------| |libreoffice-calc |V:111,|26009 |LO |Tabellenkalkulation | | |I:432 | | | | |-------------------+------+----------+--------+-------------------------| |gnumeric |V:4, |9910 |GNOME |Tabellenkalkulation | | |I:14 | | | | |-------------------+------+----------+--------+-------------------------| |calligrasheets |V:0, |11396 |KDE |Tabellenkalkulation | | |I:5 | | | | |-------------------+------+----------+--------+-------------------------| |libreoffice-impress|V:69, |2646 |LO |Präsentation | | |I:429 | | | | |-------------------+------+----------+--------+-------------------------| |calligrastage |V:0, |5339 |KDE |Präsentation | | |I:5 | | | | |-------------------+------+----------+--------+-------------------------| |libreoffice-base |V:26, |5003 |LO |Datenbank-Verwaltung | | |I:121 | | | | |-------------------+------+----------+--------+-------------------------| |kexi |V:0, |7118 |KDE |Datenbank-Verwaltung | | |I:1 | | | | |-------------------+------+----------+--------+-------------------------| |libreoffice-draw |V:72, |10312 |LO |Vektorgrafik-Editor | | |I:430 | | | | |-------------------+------+----------+--------+-------------------------| |inkscape |V:15, |99800 |GNOME |Vektorgrafik-Editor | | |I:112 | | | | |-------------------+------+----------+--------+-------------------------| |karbon |V:0, |3610 |KDE |Vektorgrafik-Editor | | |I:6 | | | | |-------------------+------+----------+--------+-------------------------| |dia |V:2, |3741 |GTK |Ablaufschema- und | | |I:22 | | |Diagramm-Editor | |-------------------+------+----------+--------+-------------------------|     |gimp |V:50, |19304 |GTK |Bitmapgrafik-Editor | | |I:252 | | | | |-------------------+------+----------+--------+-------------------------| |shotwell |V:17, |6263 |GTK |Digitalfoto-Verwaltung | | |I:255 | | | | |-------------------+------+----------+--------+-------------------------| |digikam |V:1, |293 |KDE |Digitalfoto-Verwaltung | | |I:9 | | | | |-------------------+------+----------+--------+-------------------------| | |V:4, | | |Leuchttisch und | |darktable |I:13 |30554 |GTK |Dunkelkammer für | | | | | |Photographen | |-------------------+------+----------+--------+-------------------------| |planner |V:0, |1394 |GNOME |Projektverwaltung | | |I:4 | | | | |-------------------+------+----------+--------+-------------------------| |calligraplan |V:0, |19013 |KDE |Projektverwaltung | | |I:2 | | | | |-------------------+------+----------+--------+-------------------------| |gnucash |V:2, |28928 |GNOME |Finanzverwaltung/ | | |I:8 | | |Homebanking-Programm | |-------------------+------+----------+--------+-------------------------| |homebank |V:0, |1218 |GTK |Finanzverwaltung/ | | |I:2 | | |Homebanking-Programm | |-------------------+------+----------+--------+-------------------------| |lilypond |V:0, |16092 |- |Notensatzprogramm | | |I:7 | | | | |-------------------+------+----------+--------+-------------------------| |kmymoney |V:0, |13937 |KDE |Finanzverwaltung/ | | |I:2 | | |Homebanking-Programm | |-------------------+------+----------+--------+-------------------------| | |V:1, | | |System für | |librecad |I:15 |8963 |Qt-Appl.|computerunterstützte | | | | | |Konstruktion (CAD, 2D) | |-------------------+------+----------+--------+-------------------------| | | | | |System für | |freecad |I:18 |36 |Qt-Appl.|computerunterstützte | | | | | |Konstruktion (CAD, 3D) | |-------------------+------+----------+--------+-------------------------| |kicad |V:3, |236461 |GTK |Software zum Entwurf von | | |I:14 | | |Schaltplänen und Platinen| |-------------------+------+----------+--------+-------------------------| |xsane |V:12, |2339 |GTK |Scanner-Frontend | | |I:144 | | | | |-------------------+------+----------+--------+-------------------------| |libreoffice-math |V:51, |1898 |LO |mathematischer | | |I:432 | | |Gleichungs-/Formel-Editor| |-------------------+------+----------+--------+-------------------------| |calibre |V:6, |63385 |KDE |E-Book-Konvertierer und | | |I:28 | | |Bibliotheksverwaltung | |-------------------+------+----------+--------+-------------------------| |fbreader |V:1, |3783 |GTK |E-Book-Reader | | |I:9 | | | | |-------------------+------+----------+--------+-------------------------| |evince |V:92, |941 |GNOME |Dokumentenbetrachter | | |I:314 | | |(pdf) | |-------------------+------+----------+--------+-------------------------| |okular |V:40, |17728 |KDE |Dokumentenbetrachter | | |I:123 | | |(pdf) | |-------------------+------+----------+--------+-------------------------| |x11-apps |V:31, |2460 |reine |xeyes(1), usw. | | |I:463 | |X-Appl. | | |-------------------+------+----------+--------+-------------------------| |x11-utils |V:192,|651 |reine |xev(1), xwininfo(1), usw.| | |I:566 | |X-Appl. | | +------------------------------------------------------------------------+ 7.5. User directories Default names for user directories such as "~/Desktop", "~/     Documents", ..., used by the Desktop environment depend on the locale used for the system installation. You can reset them to the English ones by:     $ LANGUAGE=C xdg-user-dirs-update --force     Then you manually move all the data to the newer directories. See xdg-user-dirs-update(1).     You can also set them to any names by editing "~/.config/ user-dirs.dirs". See user-dirs.dirs(5). 7.6. Schriften Viele nützliche skalierbare Schriftarten sind für Debian-Nutzer verfügbar. Anliegen der Benutzer hierbei sind, wie sie     Redundanzen (doppelt vorhandene Schriften) vermeiden können und wie sie Teile von installierten Schriftarten deaktivieren können. Ansonsten könnten unnötigerweise verfügbare Schriften die Menüs der GUI-Anwendungen aufblähen. Das Debian-System verwendet die FreeType 2.0-Bibliothek zur     Rasterung vieler skalierbarer Schriftformate für Bildschirmanzeige und Druck: * Type 1 (PostScript)-Schriften, die kubische Bézierkurven verwenden (nahezu veraltetes Format);     * TrueType-Schriften, die quadratische Bézierkurven verwenden (gute Wahl); * OpenType-Schriften, die kubische Bézierkurven verwenden (beste Wahl). 7.6.1. Basis-Schriftarten The following table is compiled in the hope to help users to chose appropriate scalable fonts with clear understanding of the     metric compatibility and the glyph coverage. Most fonts cover all Latin, Greek, and Cyril characters. The final choice of activated fonts can also be affected by your aesthetics. These fonts can be used for the screen display or for the paper printing. Tabelle 7.4. Liste erwähnenswerter TrueType- und OpenType-Schriftarten +-------------------------------------------------------------------------------+ | Paket |Popcon|Größe|sans|serif|mono|Hinweise zur Schriftart | |-------------------------+------+-----+----+-----+----+------------------------| |fonts-cantarell |V:216,|572 |59 |- |- |Cantarell (GNOME 3; | | |I:306 | | | | |Bildschirmanzeige) | |-------------------------+------+-----+----+-----+----+------------------------| |fonts-noto |I:153 |31 |61 |63 |40 |Noto-Schriften (Google; | | | | | | | |mehrsprachig inkl. CJK) | |-------------------------+------+-----+----+-----+----+------------------------| | | | | | | |DejaVu (GNOME 2; | |fonts-dejavu |I:421 |35 |58 |68 |40 |MCM:Verdana, erweiterte | | | | | | | |Bitstream Vera) | |-------------------------+------+-----+----+-----+----+------------------------| | |V:130,| | | | |Liberation-Schriften für| |fonts-liberation2 |I:427 |15 |56 |60 |40 |LibreOffice (Red Hat; | | | | | | | |MCMATC) | |-------------------------+------+-----+----+-----+----+------------------------| | |V:20, | | | | |Chrome OS: Arimo, Tinos | |fonts-croscore |I:40 |5274 |56 |60 |40 |und Cousine (Google; | | | | | | | |MCMATC) | |-------------------------+------+-----+----+-----+----+------------------------| |fonts-crosextra-carlito |V:21, |2696 |57 |- |- |Chrome OS: Carlito | | |I:131 | | | | |(Google; MCM:Calibri ) | |-------------------------+------+-----+----+-----+----+------------------------| | | | | | | |Chrome OS: Caladea | |fonts-crosextra-caladea |I:128 |347 |- |55 |- |(Google; MCM:Cambria ) | | | | | | | |(nur Latein) | |-------------------------+------+-----+----+-----+----+------------------------|     |fonts-freefont-ttf |V:76, |14460|57 |59 |40 |GNU FreeFont (erweiterte| | |I:218 | | | | |URW Nimbus) | |-------------------------+------+-----+----+-----+----+------------------------| | | | | | | |Debian task-desktop, | |fonts-quicksand |V:123,|392 |56 |- |- |Quicksand | | |I:438 | | | | |(Bildschirmanzeige, nur | | | | | | | |Latein) | |-------------------------+------+-----+----+-----+----+------------------------| | |V:24, | | | | |Eine Schriftart, die für| |fonts-hack |I:120 |2508 |- |- |40 P|Quellcode-Hack entworfen| | | | | | | |wurde (Facebook) | |-------------------------+------+-----+----+-----+----+------------------------| |fonts-sil-gentiumplus |I:32 |14345|- |54 |- |Gentium SIL | |-------------------------+------+-----+----+-----+----+------------------------| |fonts-sil-charis |I:27 |6704 |- |59 |- |Charis SIL | |-------------------------+------+-----+----+-----+----+------------------------| | |V:167,| | | | |URW Nimbus (Nimbus Sans,| |fonts-urw-base35 |I:472 |15560|56 |60 |40 |Roman No. 9 L, Mono L, | | | | | | | |MCAHTC) | |-------------------------+------+-----+----+-----+----+------------------------| |fonts-ubuntu |V:2, |4339 |58 |- |33 P|Ubuntu-Schriften | | |I:5 | | | | |(Bildschirmanzeige) | |-------------------------+------+-----+----+-----+----+------------------------| |fonts-terminus |V:0, |452 |- |- |33 |Coole | | |I:3 | | | | |Retro-Terminal-Schriften| |-------------------------+------+-----+----+-----+----+------------------------| | | | | | | |Downloader für | |ttf-mscorefonts-installer|V:1, |85 |56? |60 |40 |nicht-freie | | |I:49 | | | | |Microsoft-Schriften | | | | | | | |(siehe unten) | +-------------------------------------------------------------------------------+     Hierbei: * steht "MCM" für "metrisch kompatibel mit durch Microsoft bereitgestellte Schriften"; * steht "MCMATC" für "metrisch kompatibel mit durch Microsoft bereitgestellte Schriften: Arial, Times New Roman, Courier New"; * steht "MCAHTC" für "metrisch kompatibel mit durch Adobe bereitgestellte Schriften: Helvetica, Times, Courier";     * stehen Zahlen in den Schrifttyp-Spalten für die ungefähre Weite von "M" der gleichen Punktgrößen-Schrift; * steht "P" in einer Mono-Schrifttyp-Spalte für die Eignung in der Programmierung (mit einem klaren Unterschied bei "0"/"O" und "1"/"I"/"l"). * Das ttf-mscorefonts-installer-Paket lädt Microsofts "Core fonts for the Web" herunter und installiert Arial, Times New Roman, Courier New, Verdana, ... . Diese Schriftarten sind nicht-freie Daten.     Viele freie lateinische Schriftarten haben eine Abstammungslinie zur URW Nimbus-Familie oder zu Bitstream Vera. Tipp Wenn Ihr Gebietsschema Schriften erfordert, die von den oben genannten Schriften nicht gut abgedeckt werden, verwenden Sie     bitte aptitude, um nach Tasks-Paketen zu suchen (unter "Tasks" -> "Lokalisierung"). Die Schriftpakete, die in dem zu Ihrem Gebietsschema gehörigen Lokalisierungs-Task zu finden sind (unter "Hängt ab von" oder "Empfiehlt"), sind die primär für Sie interessanten Kandidaten. 7.6.2. Schriftenrasterung Debian verwendet FreeType für die Rasterung von Schriften. Deren     Infrastruktur zur Schriftenauswahl wird von der Schriften-Konfigurationsbibliothek Fontconfig bereitgestellt. Tabelle 7.5. Liste erwähnenswerter Pakete für Schriftumgebungen +---------------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |---------------------+------+-----+----------------------------------| |libfreetype6 |V:560,|938 |FreeType-Bibliothek zur | | |I:997 | |Schriftenrasterung | |---------------------+------+-----+----------------------------------| |libfontconfig1 |V:554,|587 |Fontconfig - | | |I:849 | |Schriften-Konfigurationsbibliothek|     |---------------------+------+-----+----------------------------------| |fontconfig |V:437,|680 |fc-*: CLI-Befehle für Fontconfig | | |I:721 | | | |---------------------+------+-----+----------------------------------| |font-manager |V:2, |1022 |Font Manager: GUI-Programm für | | |I:8 | |Fontconfig | |---------------------+------+-----+----------------------------------| |nautilus-font-manager|V:0, |37 |Nautilus-Erweiterung für Font | | |I:0 | |Manager | +---------------------------------------------------------------------+ Tipp Einige Schriftpakete wie fonts-noto* installieren zu viele Schriftarten. Auch möchten Sie vielleicht einige Schriftpakete installiert haben, aber die zugehörigen Schriftarten sollen normalerweise trotzdem nicht aktiv sein. Doppelte Glyphen sind     für einige Unicode-Codepoints aufgrund der Han-Vereinheitlichung zu erwarten, und durch eine unkonfigurierte Fontconfig-Bibliothek könnte es dazu kommen, dass unerwünschte Glyphen ausgewählt werden. Sehr nervige Fälle sind dabei "U+3001 IDEOGRAPHIC COMMA" und "U+3002 IDEOGRAPHIC FULL STOP" in CJK-Ländern. Sie können solche Problematiken ganz einfach vermeiden, indem Sie die Verfügbarkeit von Schriftarten über den grafischen Schriften-Manager font-manager konfigurieren.     Der Schriftarten-Konfigurationsstatus kann auch über die Befehlszeile abgefragt werden: * "fc-match(1)" zeigt, welche fontconfig-Schriften     Standardeinstellung sind; * "fc-list(1)" zeigt verfügbare fontconfig-Schriften. Sie können den Schriftarten-Konfigurationsstatus auch über einen     Texteditor konfigurieren, aber dies ist nicht trivial. Lesen Sie dazu fonts.conf(5). 7.7. Sandbox     Viele (meist grafische) Anwendungen unter Linux sind auch in binärer Form über Debian-fremde Quellen verfügbar: * AppImage -- Linux apps that run anywhere     * FLATHUB -- Apps for Linux, right here * snapcraft -- The app store for Linux Warnung     Binärdateien aus diesen Quellen könnten proprietäre, nicht-freie Software-Pakete enthalten. Es gibt eine Existenzberechtigung für diese Binärformat-Distributionen auch unter Liebhabern Freier Software,     die Debian nutzen, da auf diesem Wege ein sauberer Satz von Bibliotheken für jede Anwendung vom jeweiligen Upstream-Entwickler bereitgestellt werden kann, unabhängig von den ansonsten in Debian verfügbaren Versionen. Das dem Nutzen von externen Binärdateien anhängende Risiko kann     reduziert werden, indem eine Sandbox-Umgebung genutzt wird, die moderne Linux-Sicherheitsfunktionalitäten zum Einsatz bringt (siehe Abschnitt 4.7.5, „Linux Sicherheits-Funktionalitäten“): * Binärdateien von AppImage und einigen weiteren Upstream-Sites sollten Sie in firejail laufen lassen (bei manueller Konfiguration).     * Binärdateien von FLATHUB sollten Sie in Flatpak laufen lassen. (Keine manuelle Konfiguration erforderlich.) * Binärdateien von Snapcraft sollten Sie in Snap laufen lassen. (Keine manuelle Konfiguration erforderlich. Kompatibel mit Daemon-Programmen.) Das xdg-desktop-portal-Paket bietet eine standardisierte     API-Schnittstelle für allgemeine Desktop-Funktionalitäten. Näheres unter xdg-desktop-portal (Flatpak) und xdg-desktop-portal (Snap) . Tabelle 7.6. Liste erwähnenswerter Pakete für Sandbox-Umgebungen +-----------------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |-----------------------------+------+-----+----------------------------| | |V:65, | |Rahmenwerk zur Verteilung | |flatpak |I:70 |7499 |von Desktop-Anwendungen | | | | |basierend auf Flatpak | |-----------------------------+------+-----+----------------------------| |gnome-software-plugin-flatpak|V:20, |254 |Flatpak-Unterstützung für | | |I:29 | |GNOME Software | |-----------------------------+------+-----+----------------------------| |snapd |V:67, |60022|Daemon und Werkzeuge, um | | |I:70 | |Snap-Pakete zu aktivieren | |-----------------------------+------+-----+----------------------------| |gnome-software-plugin-snap |V:1, |121 |Snap-Support für GNOME | | |I:2 | |Software |     |-----------------------------+------+-----+----------------------------| |xdg-desktop-portal |V:303,|1936 |Desktop-Integrations-Portal | | |I:394 | |für Flatpak und Snap | |-----------------------------+------+-----+----------------------------| |xdg-desktop-portal-gtk |V:274,|715 |xdg-desktop-portal-Backend | | |I:392 | |für gtk (GNOME) | |-----------------------------+------+-----+----------------------------| |xdg-desktop-portal-kde |V:53, |1438 |xdg-desktop-portal-Backend | | |I:72 | |für Qt (KDE) | |-----------------------------+------+-----+----------------------------| |xdg-desktop-portal-wlr |V:0, |135 |xdg-desktop-portal-Backend | | |I:4 | |für wlroots (Wayland) | |-----------------------------+------+-----+----------------------------| | | | |das | |firejail |V:1, |1771 |Sicherheits-Sandbox-Programm| | |I:4 | |firejail zur Nutzung mit | | | | |AppImage | +-----------------------------------------------------------------------+ Diese Sandbox-Technologie ähnelt sehr den Apps auf     Smartphone-Betriebssystemen, wo Apps mit eingeschränktem Ressourcenzugriff ausgeführt werden.     Einige große GUI-Anwendungen in Debian wie Webbrowser nutzen intern ebenfalls die Sandbox-Technologie, um sicherer zu werden. 7.8. Arbeitsplatz-Fernzugriff (Remote Desktop) Tabelle 7.7. Liste erwähnenswerter Server für Fernzugriff Der Zugriff von fern auf den Arbeitsplatz sowie auf Anwendungen, die Wayland nutzen und auf dem fernen Rechner laufen, wird von GNOME Remote Desktop auf dem fernen Rechner bereitgestellt und über VNC oder RDP an den lokalen Client übertragen. Zugriff auf die Desktop-Fähigkeiten aller virtuellen Maschinen mit QEMU wird über das SPICE (the Simple Protocol for Independent Computing Environments)-Protokoll unterstützt. +-----------------------------------------------------------------------------------+ | Paket |Popcon|Größe|Protokolle| Beschreibung | |--------------------------+------+-----+----------+--------------------------------| |gnome-remote-desktop |V:35, |1068 |RDP |GNOME Remote Desktop-Server | | |I:221 | | | | |--------------------------+------+-----+----------+--------------------------------| |xrdp |V:22, |3202 |RDP |xrdp, Remote Desktop Protocol | | |I:24 | | |(RDP) server | |--------------------------+------+-----+----------+--------------------------------| |x11vnc |V:6, |2107 |RFB (VNC) |x11vnc, Remote Framebuffer | | |I:23 | | |Protocol (VNC) server | |--------------------------+------+-----+----------+--------------------------------| |tigervnc-standalone-server|V:4, |2768 |RFB (VNC) |TigerVNC, Remote Framebuffer |     | |I:15 | | |Protocol (VNC) server | |--------------------------+------+-----+----------+--------------------------------| |gnome-connections |V:0, |1356 |RDP, RFB |GNOME remote desktop client | | |I:1 | |(VNC) | | |--------------------------+------+-----+----------+--------------------------------| | |V:2, | |RDP, RFB |Vinagre: GNOME-Client für | |vinagre |I:68 |4249 |(VNC), |Arbeitsplatz-Fernzugriff | | | | |SPICE, SSH| | |--------------------------+------+-----+----------+--------------------------------| | | | |RDP, RFB | | |remmina |V:15, |953 |(VNC), |Remmina: GTK-Client für | | |I:72 | |SPICE, |Arbeitsplatz-Fernzugriff | | | | |SSH, ... | | |--------------------------+------+-----+----------+--------------------------------| |krdc |V:1, |3873 |RDP, RFB |KRDC: KDE-Client für | | |I:17 | |(VNC) |Arbeitsplatz-Fernzugriff | |--------------------------+------+-----+----------+--------------------------------| | |V:0, | |RDP, RFB |Apache Guacamole: | |guacd |I:0 |83 |(VNC), SSH|Arbeitsplatz-Fernzugriff-Gateway| | | | |/ HTML5 |(ohne Client; HTML5) | |--------------------------+------+-----+----------+--------------------------------| | |V:5, | |RFB (VNC),|Virtual Machine Manager: | |virt-viewer |I:52 |1284 |SPICE |grafischer Display-Client von | | | | | |Gastbetriebssystemen | +-----------------------------------------------------------------------------------+ 7.9. X-Server-Verbindungen Es gibt verschiedene Wege, um eine Anwendung auf einem fernen     Rechner mit dem X-Server zu verbinden; dazu gehört auch xwayland auf dem lokalen Rechner. Tabelle 7.8. Liste der Verbindungsmethoden zum X-Server +----------------------------------------------------------------------+ | Paket |Popcon|Größe| Befehl | Beschreibung | |-----------------+------+-----+--------------+------------------------| | |V:730,| |sshd mit der | | |openssh-server |I:814 |1804 |Option |SSH-Server (sicher) | | | | |X11-forwarding| | |-----------------+------+-----+--------------+------------------------|     |openssh-client |V:866,|4959 |ssh -X |SSH-Client (sicher) | | |I:996 | | | | |-----------------+------+-----+--------------+------------------------| |xauth |V:165,|81 |xauth |Werkzeug für die | | |I:961 | | |X-authority-Datei | |-----------------+------+-----+--------------+------------------------| |x11-xserver-utils|V:302,|568 |xhost |Server-Zugriffskontrolle| | |I:528 | | |für X | +----------------------------------------------------------------------+ 7.9.1. Lokale Verbindung zum X-Server Ein Zugriff auf den lokalen X-Server durch lokale Anwendungen, die das X-Core-Protokoll nutzen, kann über einen lokalen UNIX-Domain-Socket realisiert werden. Die Authentifizierung hierfür kann über die authority-Datei mittels Access-Cookies     erfolgen. Der Speicherort der authority-Datei wird über die Umgebungsvariable "$XAUTHORITY" definiert, und das X-Display über die "$DISPLAY"-Umgebungsvariable. Da diese normalerweise automatisch gesetzt werden, ist keine spezielle Aktion dafür nötig; für "gitk" starten Sie z.B. einfach:     username $ gitk Anmerkung     Für xwayland enthält XAUTHORITY einen Wert wie "/run/user/1000 /.mutter-Xwaylandauth.YVSU30". 7.9.2. Fernverbindung auf den X-Server Der Zugriff von fern auf den lokalen X-Server mittels einer     Anwendung, die das X-Core-Protokoll verwendet, wird über die Nutzung der X11-forwarding-Funktionalität unterstützt: * Öffnen Sie gnome-terminal auf dem lokalen Rechner. * Führen Sie ssh(1) mit der Option -X wie folgt aus, um eine Verbindung mit der fernen Seite aufzubauen:     localname @ localhost $ ssh -q -X loginname@remotehost.domain Password: * Starten Sie auf der fernen Seite einen X-Anwendungsbefehl, z.B. "gitk": loginname @ remotehost $ gitk Mit dieser Methode kann die Anzeige eines fernen X-Clients     dargestellt werden, als wäre sie lokal über einen UNIX-Domain-Socket verbunden.     Lesen Sie für Informationen zu SSH/SSHD Abschnitt 6.3, „Der Server für Fernzugriff (SSH) und Hilfsprogramme“. Warnung     A remote TCP/IP connection to the X server is disabled by default on the Debian system for security reasons. Don't enable them by simply setting "xhost +" nor by enabling XDMCP connection, if you can avoid it. 7.9.3. Chroot-Verbindung zum X-Server Der Zugriff auf den X-Server über Anwendungen, die das X-Core-Protokoll verwenden und auf dem gleichen Rechner laufen,     jedoch in einer Umgebung (wie einem chroot), in der die authority-Datei nicht erreichbar ist, kann sicher über xhost authentifiziert werden, indem User-based access verwendet wird, z.B. wie hier für "gitk": username $ xhost + si:localuser:root ; sudo chroot /path/to # cd /src     # gitk # exit username $ xhost - 7.10. Zwischenablage     Um Text in die Zwischenablage zu kopieren, lesen Sie Abschnitt 1.4.4, „Mausoperationen“.     Um Grafiken in die Zwischenablage zu kopieren, gehen Sie zu Abschnitt 11.6, „Werkzeuge für Grafikdaten“.     Auch einige CLI-Befehle können die Zwischenablage beeinflussen: Tabelle 7.9. Liste von Programmen zum Beeinflussen der Zwischenablage +-----------------------------------------------------------------------+ | Paket |Popcon|Paketgröße| Ziel | Beschreibung | |------------+------+----------+-------------+--------------------------| | |V:9, | | |Befehlszeilenprogramm für | |xsel |I:42 |55 |X |die X-Auswahl | | | | | |(Zwischenablage) | |------------+------+----------+-------------+--------------------------| | |V:12, | | |Befehlszeilenprogramm für | |xclip |I:63 |62 |X |die X-Auswahl |     | | | | |(Zwischenablage) | |------------+------+----------+-------------+--------------------------| | | | | |wl-copy / wl-paste: | |wl-clipboard|V:3, |162 |Wayland |Befehlszeilenschnittstelle| | |I:14 | | |für die | | | | | |Wayland-Zwischenablage | |------------+------+----------+-------------+--------------------------| | |V:10, | | |ein Daemon, der | |gpm |I:12 |521 |Linux-Konsole|Mausereignisse auf der | | | | | |Linux-Konsole verarbeitet | +-----------------------------------------------------------------------+ Kapitel 8. I18N und L10N Multilingualisation (M17N) oder native Sprachunterstützung (die     Anpassung eines Software-Produkts zur Unterstützung mehrerer Sprachen) besteht aus zwei Schritten: * Internationalisierung (I18N): eine Software so einrichten, dass sie grundsätzlich verschiedene Gebietsschemata (Locales)     unterstützt. * Lokalisierung (L10N): eine Software für die Unterstützung eines bestimmten Gebietsschemas anpassen. Tipp Bei den englischen Begriffen Multilingualization,     Internationalization und Localization befinden sich 17, 18 bzw. 10 Buchstaben zwischen dem ersten und letzten Buchstaben ("m" und "n", "i" und "n" bzw. "l" und "n"), was M17N, I18N und L10N ergibt. Weitere Details finden Sie unter Internationalization and localization (englisch). 8.1. Das Gebietsschema (Locale) Das Verhalten von Programmen, die Internationalisierung unterstützen, wird bestimmt durch die Umgebungsvariable "$LANG".     Die Unterstützung von Locale-abhängigen Funktionalitäten erfordert die Installation von locales-Paketen oder dem Paket locales-all. Die locales-Pakete müssen korrekt eingerichtet sein. Wenn weder irgendwelche locales-Pakete noch locales-all installiert sind, gibt es keine Locale-spezifischen     Funktionalitäten und das System nutzt Meldungen in amerikanischem Englisch; Daten werden als ASCII behandelt. Dieses Verhalten ist dasselbe, wie wenn "$LANG" auf "LANG=", "LANG=C" oder "LANG= POSIX" gesetzt ist. Moderne Software wie GNOME oder KDE ist für die Unterstützung verschiedener Sprachen ausgerüstet. Sie ist mittels UTF-8     internationalisiert und über übersetzte Texte mittels gettext(1) -Infrastruktur lokalisiert. Übersetzte Texte werden teilweise als separate Lokalisierungspakete bereitgestellt. Das aktuelle grafische Arbeitsplatzsystem in Debian setzt das Gebietsschema normalerweise in grafischen GUI-Umgebungen auf "LANG=xx_YY.UTF-8". Hierbei entspricht "xx" dem Sprachcode gemäß     ISO 639 und "YY" dem Ländercode gemäß ISO 3166. Diese Werte werden über den Konfigurationsdialog der jeweiligen Arbeitsplatzumgebung gesetzt und haben entsprechenden Einfluß auf die Programme. Näheres dazu finden Sie in Abschnitt 1.5.2, „Die "$LANG"-Variable“. 8.1.1. Argumentation für UTF-8-Gebietsschemata Die einfachste Art von Textdaten ist ASCII, was passend ist für     Englisch und weniger als 127 Zeichen enthält (welche in 7 Bits dargestellt werden können). Sogar reiner Text in Englisch kann nicht-ASCII-Zeichen enthalten,     so sind z.B. die leicht geschweiften rechten und linken Anführungszeichen in ASCII nicht enthalten:     “double quoted text” is not "double quoted ASCII" ‘single quoted text’ is not 'single quoted ASCII' Um mehr Zeichen zu unterstützen, wurden weitere Zeichensätze und     Zeichenkodierungen entwickelt, um eine Vielzahl von Sprachen unterstützen zu können (siehe Tabelle 11.2, „Liste von Werten für die Zeichenkodierung und deren Verwendung“). Der Unicode-Zeichensatz kann nahezu alle dem Menschen bekannten     Zeichen mit Codepunkten aus einem Bereich von 21 Bits (dies entspricht 0 bis 10FFFF in hexadezimaler Darstellung) abbilden. Das Zeichenkodierungssystem UTF-8 passt Unicode-Codepunkte in einen 8 Bit breiten Datenstrom ein, der überwiegend zum ASCII-Datenverarbeitungssystem kompatibel ist. Das macht UTF-8     zur modernen und bevorzugten Zeichenkodierung. UTF steht dabei für Unicode Transformation Format. Wenn reiner ASCII-Text in UTF-8 konvertiert wird, hat er exakt den gleichen Inhalt und die gleiche Größe wie der originale ASCII-Text. Sie verlieren also nichts, wenn Sie ein UTF-8-Gebietsschema nutzen. Mit einem UTF-8-Gebietsschema und einer dazu kompatiblen Anwendung können Sie Textdaten in jeglicher fremden Sprache anzeigen und editieren, solange die entsprechenden Schriftarten und Eingabemethoden installiert und aktiviert sind. Wenn     beispielsweise das Gebietsschema auf "LANG=fr_FR.UTF-8" gesetzt ist, kann mit gedit(1) (dem Texteditor der GNOME Arbeitsplatzumgebung) chinesischer Text dargestellt und bearbeitet werden, während das Menü in Französisch angezeigt wird. Tipp Sowohl das neue (standardmäßige) "en_US.UTF-8" wie auch das alte "C"/"POSIX"-Gebietsschema nutzen US-Englisch für Meldungen, es     gibt nur minimale Unterschiede bei der Sortierreihenfolge etc. Wenn Sie nicht nur ASCII-Zeichen anzeigen möchten, sondern auch UTF-8-kodierte Zeichen, und trotzdem das alte Verhalten der "C"-Locale bevorzugen, verwenden Sie das Gebietsschema "C.UTF-8" (kein Standard). Anmerkung Einige Programme verbrauchen mehr Speicher, wenn sie I18N unterstützen. Das kommt daher, weil sie für die     Unicode-Unterstützung intern UTF-32(UCS4) verwenden (zwecks Geschwindigkeitsoptimierung; dabei werden 4 Bytes für jedes ASCII-Zeichen genutzt, unabhängig vom gewählten Gebietsschema). Nochmals: Sie verlieren nichts, wenn Sie ein UTF-8-Gebietsschema einsetzen. 8.1.2. Die Neukonfiguration des Gebietsschemas (Locale) Damit das System ein bestimmtes Gebietsschema verwenden kann,     müssen die entsprechenden Locale-Daten aus der Datenbank kompiliert werden.     Das locales-Paket enthält all die verfügbaren Locale-Daten nicht bereits vorkompiliert. Sie müssen Sie also konfigurieren mittels:     # dpkg-reconfigure locales     Dieser Prozess besteht aus zwei Schritten: 1. Auswahl der benötigten Locale-Daten, die in die binäre Form kompiliert werden sollen. (Stellen Sie bitte sicher, dass Sie mindestens ein UTF-8-Gebietsschema auswählen.)     2. Setzen des Werts für das systemweite Standard-Gebietsschema (mittels "/etc/default/locale"); dies wird von PAM genutzt (Näheres in Abschnitt 4.5, „PAM und NSS“). Der Wert für das systemweite Standard-Gebietsschema (in "/etc/     default/locale") kann von der Konfiguration für grafische GUI-Anwendungen überschrieben werden. Anmerkung     Das effektiv genutzte Kodierungssystem kann über "/usr/share/i18n /SUPPORTED" identifiziert werden. So ist "LANG=en_US" letztlich "LANG=en_US.ISO-8859-1". The locales-all package comes with pre-compiled locale data for     all locale data. Since it doesn't create "/etc/default/locale", you may still need to install the locales package, too. Tipp     The locales package of some Debian derivative distributions come with pre-compiled locale data for all locale data. You need to install both locales and locales-all packages on Debian to emulate such system environment. 8.1.3. Dateinamenkodierung Für den Datenaustausch über verschiedene Plattformen hinweg (Näheres in Abschnitt 10.1.7, „Wechseldatenträger“) müssen Sie unter Umständen beim Einbinden einiger Dateisysteme bestimmte     Kodierungen vorwählen. Zum Beispiel wird beim Einbinden eines vfat-Dateisystems durch mount(8) die CP437-Kodierung genutzt, wenn nichts anderes angegeben ist. Sie müssen eine explizite mount-Option angeben, wenn UTF-8 oder CP932 als Kodierung für die Dateinamen genutzt werden soll. Anmerkung Wenn ein während des Betrieb eingesteckter USB-Stick in einer modernen Arbeitsplatzumgebung wie GNOME automatisch eingebunden wird, können Sie solche mount-Optionen möglicherweise durch einen     Rechtsklick auf das entsprechende Icon auf der Arbeitsfläche auswählen. Klicken Sie auf die Lasche "Laufwerk", klappen Sie per Mausklick die Liste der "Einstellungen" auf und geben Sie dann "utf8" bei den "Mount-Optionen" ein. Wenn der USB-Stick das nächste Mal eingesteckt wird, ist das Einbinden mit UTF-8 aktiviert. Anmerkung Beim Hochrüsten eines Systems oder wenn Sie Laufwerke von älteren nicht-UTF-8-Systemen verwenden, könnten Dateinamen mit     nicht-ASCII-Zeichen in historischen und überholten Kodierungen wie ISO-8859-1 oder eucJP kodiert sein. Bitte suchen Sie die Hilfe von Textkonvertierungswerkzeugen, um diese in UTF-8 zu konvertieren. Details hierzu finden Sie in Abschnitt 11.1, „Werkzeuge für Textkonvertierung“. Samba verwendet für neuere Clients (Windows NT, 200x, XP und später) standardmäßig Unicode, aber bei älteren für DOS und     Windows 9x/Me wird per Voreinstellung CP850 eingesetzt. Dieser Standard für ältere Clients kann mittels "dos charset" in der Datei "/etc/samba/smb.conf" geändert werden, CP932 zum Beispiel für Japanisch. 8.1.4. Lokalisierte Meldungen und übersetzte Dokumentation Für viele Textmeldungen und Dokumente, die im Debian-System angezeigt werden, wie z.B. Fehlermeldungen,     Standard-Programmausgaben, Menüs und Handbuchseiten, existieren Übersetzungen. Für die meisten Übersetzungsaktivitäten werden die GNU-gettext(1)-Werkzeuge als Backend-Programme im Hintergrund verwendet. aptitude(8) bietet unter "Tasks" → "Lokalisierung" eine     ausführliche Liste nützlicher Binärpakete, die lokalisierte Meldungen für Anwendungen und übersetzte Dokumentation enthalten. So können Sie übersetzte Handbuchseiten (manpages) in Deutsch     erhalten, indem Sie das manpages-de-Paket installieren. Um andererseits die italienische Handbuchseite für programmname aus "/usr/share/man/it/" zu lesen, führen Sie folgendes aus:     LANG=it_IT.UTF-8 man programname GNU gettext kann über die Umgebungsvariable $LANGUAGE eine     priorisierte Liste von Übersetzungssprachen erstellen. Nutzen Sie dafür zum Beispiel:     $ export LANGUAGE="pt:pt_BR:es:it:fr"     Bezüglich weiterer Infos lesen Sie info gettext und dort speziell den Abschnitt "The LANGUAGE variable". 8.1.5. Auswirkungen des Gebietsschemas The sort order of characters with sort(1) and ls(1) are affected     by the locale. Exporting LANG=en_US.UTF-8 sorts in the dictionary A->a->B->b...->Z->z order, while exporting LANG=C.UTF-8 sorts in ASCII binary A->B->...->Z->a->b... order. Das Gebietsschema wirkt sich auch auf das Datumsformat von ls(1)     aus (Näheres in Abschnitt 9.3.4, „Angepasste Anzeige von Datum und Uhrzeit“).     The date format of date(1) is affected by the locale. For example: $ unset LC_ALL $ LANG=en_US.UTF-8 date Thu Dec 24 08:30:00 PM JST 2023 $ LANG=en_GB.UTF-8 date     Thu 24 Dec 20:30:10 JST 2023 $ LANG=es_ES.UTF-8 date jue 24 dic 2023 20:30:20 JST $ LC_TIME=en_DK.UTF-8 date 2023-12-24T20:30:30 JST Die Zahlen-Interpunktion unterscheidet sich ebenfalls abhängig vom Gebietsschema. Zum Beispiel wird ein-tausend-komma-eins im     englischen Gebietsschema "1,000.1" geschrieben, im deutschen hingegen "1.000,1". Sie können den Unterschied in einem Tabellenkalkulationsprogramm sehen. Jegliches Detail der "$LANG"-Umgebungsvariable kann über das Setzen einer der "$LC_*"-Variablen überschrieben werden. Diese wiederum können über die "$LC_ALL"-Variable überschrieben werden.     Details hierzu finden Sie in der locale(7)-Handbuchseite. Bitte versuchen Sie, dies alles zu vermeiden und nutzen Sie nur die Variable "$LANG", um eine der UTF-8-Locales zu setzen (außer Sie haben gute Gründe für die Erstellung einer komplizierten Konfiguration). 8.2. Die Tastatureingabe 8.2.1. Tastatureingabe für die Linux-Konsole und X-Window Das Debian-System kann mittels der Pakete keyboard-configuration     und console-setup so konfiguriert werden, dass es mit vielen internationalen Tastaturkonfigurationen funktioniert:     # dpkg-reconfigure keyboard-configuration # dpkg-reconfigure console-setup Für die Linux-Konsole und das X-Window-System werden damit Parameter in "/etc/default/keyboard" und "/etc/default/ console-setup" angepasst. Auch wird dabei die Schrift für die     Linux-Konsole konfiguriert. Viele nicht-ASCII-Zeichen, inklusive akzentuierte Zeichen, die in europäischen Sprachen verwendet werden, sind über die Tottaste, AltGr-Taste und Compose-Taste zugänglich. 8.2.2. Tastatureingabe für Wayland Für GNOME auf Wayland-Arbeitsplatzsystemen können über den in Abschnitt 8.2.1, „Tastatureingabe für die Linux-Konsole und X-Window“ beschriebenen Weg keine europäischen Sprachen außer Englisch unterstützt werden. IBus wurde nicht nur entwickelt, um asiatische Sprachen zu unterstützen, sondern auch europäische.     Die Paketabhängigkeiten für die GNOME-Arbeitsplatzumgebung empfehlen "ibus" über den Umweg des "gnome-shell"-Pakets. Der Code von "ibus" wurde aktualisiert, so dass er jetzt auch setxkbmap- und XKB-option-Funktionalitäten enthält. Sie müssen ibus über die "GNOME Einstellungen" oder über "GNOME Tweaks" für mehrsprachige Tastatureingabe konfigurieren. Anmerkung Wenn ibus aktiv ist, könnte Ihre klassische X-Tastatur-Konfiguration (durchgeführt über setxkbmap) von ibus     überschrieben werden, selbst wenn die klassische X-Arbeitsplatzumgebung läuft. Sie können ibus über im-config deaktivieren, indem Sie die Eingabemethode auf "Keine" einstellen. Weitere Informationen hierzu finden Sie im Debian-Wiki unter Keyboard. 8.2.3. Unterstützung für die Eingabemethode mit IBus Da die GNOME Arbeitsplatzumgebung jetzt "ibus" empfiehlt (über     "gnome-shell"), ist "ibus" die beste Wahl zum Thema Eingabemethoden.     Mehrsprachige Eingaben für Anwendungen werden wie hier dargestellt verarbeitet: Keyboard Application | ^     | | +-> Linux kernel -> Input method (ibus) -> Gtk, Qt, X, Wayland +-- Engine--+     Hier eine Liste der IBus- und zugehöriger Engine-Pakete: Tabelle 8.1. Liste von IBus-betreffenden Paketen +---------------------------------------------------------------+ | Paket |Popcon|Größe|unterstütztes Gebietsschema | |---------------------+------+-----+----------------------------| |ibus |V:198,|1723 |Eingabemethoden-Rahmenwerk, | | |I:245 | |das dbus verwendet | |---------------------+------+-----+----------------------------| |ibus-mozc |V:1, |944 |Japanisch | | |I:3 | | | |---------------------+------+-----+----------------------------| |ibus-anthy |V:0, |8856 |" | | |I:1 | | | |---------------------+------+-----+----------------------------| |ibus-skk |V:0, |242 |" | | |I:0 | | | |---------------------+------+-----+----------------------------| |ibus-kkc |V:0, |210 |" | | |I:0 | | | |---------------------+------+-----+----------------------------| |ibus-libpinyin |V:1, |2761 |Chinesisch (für zh_CN) | | |I:3 | | | |---------------------+------+-----+----------------------------| |ibus-chewing |V:0, |247 |" (für zh_TW) | | |I:0 | | | |---------------------+------+-----+----------------------------| |ibus-libzhuyin |V:0, |40995|" (für zh_TW) | | |I:0 | | | |---------------------+------+-----+----------------------------|     |ibus-rime |V:0, |73 |" (für zh_CN/zh_TW) | | |I:0 | | | |---------------------+------+-----+----------------------------| |ibus-cangjie |V:0, |119 |" (für zh_HK) | | |I:0 | | | |---------------------+------+-----+----------------------------| |ibus-hangul |V:0, |264 |Koreanisch | | |I:2 | | | |---------------------+------+-----+----------------------------| |ibus-libthai |I:0 |90 |Thailändisch | |---------------------+------+-----+----------------------------| |ibus-table-thai |I:0 |58 |Thailändisch | |---------------------+------+-----+----------------------------| |ibus-unikey |V:0, |318 |Vietnamesisch | | |I:0 | | | |---------------------+------+-----+----------------------------| |ibus-keyman |V:0, |161 |Multilingual: Keyman engine | | |I:0 | |for over 2000 languages | |---------------------+------+-----+----------------------------| |ibus-table |V:0, |2176 |Tabellen-Engine für IBus | | |I:1 | | | |---------------------+------+-----+----------------------------| |ibus-m17n |V:0, |395 |Multilingual: Indisch, | | |I:1 | |Arabisch und andere | |---------------------+------+-----+----------------------------| | |V:50, | |additional widgets for | |plasma-widgets-addons|I:100 |1992 |Plasma 5 containing Keyboard| | | | |Indicator | +---------------------------------------------------------------+ Anmerkung Für Chinesisch könnte auch "fcitx5" eine Alternative sein. Für Emacs-Liebhaber wäre auch die Verwendung von "uim" ein möglicher     Weg. In all diesen Fällen ist zusätzliche manuelle Konfiguration über im-config erforderlich. Einige alte klassische Eingabemethoden wie "kinput2" könnten noch im Debian-Depot existieren, werden aber in modernen Umgebungen nicht mehr empfohlen. 8.2.4. Ein Beispiel für Japanisch Ich finde diese japanische Eingabemethode, gestartet in einer     englischen Umgebung ("en_US.UTF-8"), sehr nützlich. Hier ein Beispiel, wie ich dies mit IBus für GNOME3 unter Wayland eingerichtet habe: 1. Installieren Sie das japanische Eingabewerkzeug über ibus-mozc (oder ibus-anthy) inklusive der empfohlenen Pakete wie z.B. im-config. 2. Wählen Sie dann "Einstellungen" → "Tastatur" → "Eingabequellen", klicken Sie bei den "Eingabequellen" auf "+", dann "Japanisch" → "Japanisch mozc (oder anthy)" und dann "Hinzufügen", falls es noch nicht aktiviert wurde.     3. Sie können weitere Eingabequellen wählen. 4. Melden Sie sich am Benutzerkonto neu an. 5. Richten Sie jede Eingabequelle durch einen Rechtsklick auf das Icon in der GUI-Werkzeugleiste ein. 6. Wählen Sie zwischen den installierten Eingabequellen mittels SUPERTASTE+LEERTASTE (die SUPERTASTE ist normalerweise die Windows-Taste). Tipp Wenn Sie mit Ihrer japanischen Tastatur Zugriff auf eine Tastaturumgebung mit alphabetischen Zeichen wünschen, bei der     Umschalt-2 das doppelte Anführungszeichen (") ausgibt, sollten Sie in der obigen Prozedur "Japanisch" auswählen. Auch können Sie Japanisch über "Japanisch mozc (oder anthy)" mit einer physikalischen "US"-Tastatur eingeben, dabei wird dann über Umschalt-2 das @-Zeichen ausgegeben. * Der Eintrag für im-config(8) im GUI-Menü ist "Eingabemethode"; starten Sie es jetzt. * Alternativ führen Sie jetzt "im-config" über eine Benutzer-Shell aus.     * im-config(8) verhält sich unterschiedlich abhängig davon, ob es von root ausgeführt wurde oder nicht. * im-config(8) aktiviert standardmäßig ohne weiteres Zutun des Benutzers die beste Eingabemethode auf dem System. 8.3. Die Bildschirmausgabe Die Linux-Konsole kann nur einen beschränkten Bereich von Zeichen     anzeigen. (Sie benötigen ein spezielles Terminal-Programm wie jfbterm(1), um nicht-europäische Sprachen in der Konsole außerhalb der grafischen Umgebung anzuzeigen.) Die grafische Umgebung (Kapitel 7, GUI-System) kann jegliche Zeichen in UTF-8 anzeigen, sofern die benötigten Schriften     installiert und aktiviert sind. (Die Kodierung der Original-Schriftdaten wird für den Benutzer transparent erledigt.) 8.4. Unbekannte Zeichenbreite bei ostasiatischen Zeichen Bei Verwendung des ostasiatischen Gebietsschemas können die Zeichnung der Box sowie griechische und kyrillische     Schriftzeichen breiter als beabsichtigt dargestellt werden, was zu einer ungleichmäßigen, schlecht ausgerichteten Terminalausgabe führt (näheres unter Unicode Standard Annex #11).     Sie können dies Problem jedoch umgehen: * gnome-terminal: Einstellungen → Profile → Profilname → Kompatibilität → Zeichen mit unbekannter Breite → Schmal     * ncurses: Setzen einer Umgebungsvariablen mit export NCURSES_NO_UTF8_ACS=0. Kapitel 9. Systemtipps     Hier beschreibe ich einige grundlegende Tipps zur Konfiguration und Verwaltung des Systems, überwiegend für die Konsole. 9.1. Tipps für die Konsole     Es gibt einige Hilfsprogramme, die Sie bei Ihren Konsolenaktivitäten unterstützen können: Tabelle 9.1. Liste von Programmen für Konsolenaktivitäten +---------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |--------+------+-----+-----------------------------------------| |mc |V:50, |1542 |siehe Abschnitt 1.3, „Midnight Commander | | |I:209 | |(MC)“ | |--------+------+-----+-----------------------------------------| |bsdutils|V:519,|356 |script(1) command to make a record of | | |I:999 | |terminal session | |--------+------+-----+-----------------------------------------| |screen |V:71, |1003 |Terminal-Multiplexer mit VT100-/ | | |I:230 | |ANSI-Terminal-Emulation | |--------+------+-----+-----------------------------------------| |tmux |V:43, |1180 |Terminal-Multiplexer-Alternative | | |I:146 | |(verwenden Sie "Strg-B") | |--------+------+-----+-----------------------------------------| |fzf |V:4, |3648 |Unschärfe-Textsuch-Programm |     | |I:16 | | | |--------+------+-----+-----------------------------------------| |fzy |V:0, |54 |Unschärfe-Textsuch-Programm | | |I:0 | | | |--------+------+-----+-----------------------------------------| |rlwrap |V:1, |330 |Befehlszeilen-Wrapper mit | | |I:15 | |readline-Funktionalität | |--------+------+-----+-----------------------------------------| |ledit |V:0, |331 |Befehlszeilen-Wrapper mit | | |I:11 | |readline-Funktionalität | |--------+------+-----+-----------------------------------------| |rlfe |V:0, |45 |Befehlszeilen-Wrapper mit | | |I:0 | |readline-Funktionalität | |--------+------+-----+-----------------------------------------| | |V:5, | |schnelle rekursive Textsuche für | |ripgrep |I:19 |5152 |Quellcode-Bäume mit automatischer | | | | |Filterung | +---------------------------------------------------------------+ 9.1.1. Shell-Aktivitäten sauber aufzeichnen Die schlichte Verwendung von script(1) wie in Abschnitt 1.4.9,     „Aufzeichnen der Shell-Aktivitäten“ erzeugt eine Datei mit Steuerzeichen. Sie können dies durch Nutzung von col(1) wie folgt beheben:     $ script Script started, file is typescript     Machen Sie irgendetwas … und drücken Sie Strg-D, um script zu beenden.     $ col -bx < typescript > cleanedfile $ vim cleanedfile     Es gibt alternative Methoden, um Shell-Aktivitäten aufzuzeichnen: * Verwendung von tee (auch verwendbar während des Boot-Vorgangs in der initramfs): $ sh -i 2>&1 | tee typescript * Verwendung von gnome-terminal erweitertem Zeilenpuffer, um zurückscrollen zu können. * Verwendung von screen mit "^A H" (siehe Abschnitt 9.1.2, „Das     Programm screen“), um eine Konsolensitzung aufzuzeichnen. * Verwendung von vim mit ":terminal", um in den Terminal-Modus zu wechseln. (Mit "Ctrl-W N" kommen Sie vom Terminal-Modus zurück in den Normalmodus.) Geben Sie ":w typescript" ein, um den Puffer in eine Datei zu schreiben. * Verwendung von emacs mit "M-x shell", "M-x eshell" oder "M-x term", um eine Konsolensitzung aufzuzeichnen. Um den Puffer in eine Datei zu schreiben, verwenden Sie "C-x C-w". 9.1.2. Das Programm screen screen(1) bietet nicht nur die Möglichkeit, in einem Terminal-Fenster mehrere Prozesse laufen zu lassen, sondern     erlaubt auch einem Remote-Shell-Prozess, Verbindungsunterbrechungen zu überstehen. Hier ein typisches Anwendungsszenario für screen(1): 1. Sie melden sich auf einer fernen Maschine an. 2. Sie starten screen auf einer einfachen Konsole. 3. Sie führen mehrere Programme in screen-Fenstern aus, die Sie über ^A c ("Strg-A" gefolgt von "c") erzeugen. 4. Sie können mittels ^A n ("Strg-A" gefolgt von "n") zwischen den verschiedenen screen-Fenstern hin- und herschalten. 5. Plötzlich müssen Sie Ihr Terminal verlassen, aber Sie möchten Ihre aktuelle Arbeit nicht verlieren und deshalb die Verbindung erhalten. 6. Sie können die Verbindung zur screen-Sitzung durch eine der     folgenden Methoden lösen: + Ganz brutal: die Netzwerkverbindung trennen; + Tippen Sie ^A d ("Strg-A" gefolgt von "d") und melden Sie sich händisch von der Fernverbindung ab; + Tippen Sie ^A DD ("Strg-A" gefolgt von "DD"), damit screen die Verbindung löst und Sie abmeldet. 7. Sie melden Sich am gleichen fernen Rechner erneut an (funktioniert sogar bei Anmeldung über ein anderes Terminal). 8. Sie starten screen über "screen -r". 9. screen verbindet ganz von selbst alle vorherigen screen-Fenster mit allen aktuell laufenden Programmen. Tipp Bei Verbindungen, die über Zeit oder Volumen abgerechnet werden,     können Sie mit screen Kosten sparen, indem Sie einen Prozess aktiv laufen lassen, während die Verbindung aber unterbrochen ist, und die Sitzung später erneut verbinden, wenn Sie sich wieder einwählt haben. In einer screen-Sitzung werden alle Tastatureingaben zu Ihrem aktuell laufenden screen-Fenster gesendet, außer Befehlseingaben.     Alle screen-Befehlseingaben werden mittels ^A ("Strg-A") plus einer einzelnen Taste [plus eventuellen Parametern] eingegeben. Hier einige wichtige zur Erinnerung: Tabelle 9.2. Liste von Tastaturkürzeln für screen +---------------------------------------------------------------+ |Tastaturbefehl| Bedeutung | |--------------+------------------------------------------------| |^A ? |eine Hilfe anzeigen (Tastaturkürzel anzeigen) | |--------------+------------------------------------------------| |^A c |ein neues Fenster erstellen und dorthin wechseln| |--------------+------------------------------------------------| |^A n |zu nächstem Fenster wechseln | |--------------+------------------------------------------------| |^A p |zu vorherigem Fenster wechseln | |--------------+------------------------------------------------| |^A 0 |zu Fenster Nr. 0 wechseln | |--------------+------------------------------------------------| |^A 1 |zu Fenster Nr. 1 wechseln | |--------------+------------------------------------------------|     |^A w |eine Liste vorhandener Fenster anzeigen | |--------------+------------------------------------------------| |^A a |ein Strg-A als Tastatureingabe an das aktuelle | | |Fenster senden | |--------------+------------------------------------------------| |^A h |Hardcopy des aktuellen Fensters in eine Datei | | |schreiben | |--------------+------------------------------------------------| |^A H |Starten/stoppen des Aufzeichnens vom aktuellen | | |Fenster in eine Datei | |--------------+------------------------------------------------| |^A ^X |Terminal sperren (Passwort-geschützt) | |--------------+------------------------------------------------| |^A d |Verbindung der screen-Sitzung zum Terminal lösen| |--------------+------------------------------------------------| |^A DD |Verbindung der screen-Sitzung lösen und abmelden| +---------------------------------------------------------------+     Lesen Sie screen(1) bezüglich weiterer Details.     Lesen Sie tmux(1) für Funktionalitäten einer Alternative zum Befehl screen. 9.1.3. Durch Verzeichnisse navigieren In Abschnitt 1.4.2, „Anpassen der bash“ finden Sie 2 Tipps, die     eine schnelle Navigation durch Verzeichnisse ermöglichen: $CDPATH und mc. Wenn Sie einen Unschärfe-Textfilter verwenden, müssen Sie dabei     nicht einmal den exakten Pfad angeben. Für fzf geben Sie dazu folgendes in ~/.bashrc ein: FZF_KEYBINDINGS_PATH=/usr/share/doc/fzf/examples/key-bindings.bash     if [ -f $FZF_KEYBINDINGS_PATH ]; then . $FZF_KEYBINDINGS_PATH fi     Beispiele: * Sie können mit minimalem Aufwand in ein sehr tief verschachteltes Unterverzeichnis springen. Zunächst geben Sie "cd **" ein und drücken Tab. Es werden Ihnen jetzt die in Frage kommenden Pfade angezeigt. Durch Eingabe von Teilen des Pfads, z.B. s/d/b foo, schränken Sie die Kandidaten weiter ein. Den gewünschten Pfad wählen Sie mittels cd und Pfeil-/     Entertasten aus. * Sie können ganz einfach und effizient einen Befehl aus der Befehlshistorie aufrufen. Drücken Sie dazu am Eingabe-Prompt Strg-R. Es werden Ihnen die in Frage kommenden Befehle angezeigt. Durch Eingabe von Teilen des Befehls, z.B. vim d, schränken Sie die Kandidaten weiter ein. Den gewünschten Befehl wählen Sie mittels Pfeil-/Entertasten aus. 9.1.4. Readline-Wrapper Einige Befehle wie z.B. /usr/bin/dash, die nicht die Fähigkeit     zum Editieren der Befehlshistorie haben, können diese Fähigkeit trotzdem erlangen, indem sie mittels rlwrap (oder seinen Äquivalenten) ausgeführt werden.     $ rlwrap dash -i     Dies bietet eine komfortable Plattform, um gewisse Dinge mit dash zu testen mit dem Komfort einer bash-ähnlichen Umgebung. 9.1.5. Durchsuchen eines Quellcode-Baums Der Befehl rg(1) aus dem ripgrep-Paket ist eine schnellere Alternative zu grep(1) zum Durchsuchen eines Quellcode-Baums nach     typischen Situationen. Er nutzt die Vorteile moderner Multi-Kern-CPUs und wendet bei einigen Dateien automatisch passende Filter an. 9.2. Anpassen von vim Nachdem Sie die Grundlagen von vim(1) in Abschnitt 1.4.8,     „Verwenden von vim“ kennengelernt haben, lesen Sie bitte Bram Moolenaars "Seven habits of effective text editing (2000)", um zu verstehen, wie vim genutzt werden sollte. 9.2.1. Anpassen von vim mit internen Funktionalitäten Das Verhalten von vim kann signifikant verändert werden, indem     über Ex-Modus-Befehle interne Funktionalitäten aktiviert werden, wie z.B. "set ..." zum Setzen von vim-Optionen. Diese Ex-Modus-Befehle können in der vimrc-Datei des Benutzers     (traditionell "~/.vimrc", oder auch git-freundlich "~/.vim/ vimrc") eingefügt werden. Hier ein einfaches Beispiel ^[2]: """ Generic baseline Vim and Neovim configuration (~/.vimrc) """ - For NeoVim, use "nvim -u ~/.vimrc [filename]" set nocompatible " :h 'cp -- sensible (n)vim mode syntax on " :h :syn-on filetype plugin indent on " :h :filetype-overview set encoding=utf-8 " :h 'enc (default: latin1) -- sensible encoding """ current vim option value can be verified by :set encoding? set backspace=indent,eol,start " :h 'bs (default: nobs) -- sensible BS set statusline=%<%f%m%r%h%w%=%y[U+%04B]%2l/%2L=%P,%2c%V set listchars=eol:¶,tab:⇄\ ,extends:↦,precedes:↤,nbsp:␣ set viminfo=!,'100,<5000,s100,h " :h 'vi -- bigger copy buffer etc. """ Pick "colorscheme" from blue darkblue default delek desert elflord evening """ habamax industry koehler lunaperche morning murphy pablo peachpuff quiet ron """ shine slate torte zellner colorscheme industry     "colorscheme default set scrolloff=5 " :h 'scr -- show 5 lines around cursor set laststatus=2 " :h 'ls (default 1) k """ boolian options can be unset by prefixing "no" "set list " :h 'list (default nolist) set smartcase " :h 'scs -- Override the 'ignorecase' option set autoindent " :h 'ai set smartindent " :h 'si set nowrap " :h 'wrap set nolist " :h 'list -- (enable when needed) set noerrorbells " :h 'eb set novisualbell " :h 'vb set t_vb= " :h 't_vb -- termcap visual bell set spell " :h 'spell set spelllang=en_us,cjk " :h 'spl -- english spell, ignore CJK set clipboard=unnamedplus " :h 'clipboard -- cut/copy/paste with other app     The keymap of vim can be changed in user's vimrc file. E.g.: Achtung     Versuchen Sie nicht ohne guten Grund, die Standard-Tastaturkürzel zu ändern. """ *** popular mappings *** """ Window moves without using CTRL-W which is dangerous in INSERT mode nnoremap h nnoremap j nnoremap k silent! nnoremap l """ nohlsearch with ( is mapped as above) inoremap noh nnoremap noh """ execute macro recorded with qq.....q with Q nnoremap Q @q """ center after jump next nnoremap n nzz nnoremap N Nzz """ fast "jk" to get out of INSERT mode ()     inoremap jk """ double to get out of TERM mode (CTRL-\ CTRL-N) tnoremap """ fast "jk" to get out of TERM mode (CTRL-\ CTRL-N) tnoremap jk """ """ *** nvim default mappings (no need for nvim) *** """ copy to EOL (no delete) like D for d noremap Y y$ """ disable prefix repeats for erases inoremap u inoremap u """ search visual selected string for visual mode xnoremap * y/\V" xnoremap # y?\V" """ repeat last substitute and *KEEP* flags nnoremap & :&& Damit die oben aufgeführten Tastaturkürzel korrekt funktionieren,     muss das Terminal-Programm so konfiguriert sein, dass es "ASCII DEL" für die Backspace-Taste und "Escape sequence" für die Entf-Taste generiert.     Other miscellaneous configuration can be changed in user's vimrc file. E.g.: """ Force to use underline for spell check results augroup SpellUnderline autocmd! autocmd ColorScheme * highlight SpellBad term=Underline gui=Undercurl autocmd ColorScheme * highlight SpellCap term=Underline gui=Undercurl autocmd ColorScheme * highlight SpellLocal term=Underline gui=Undercurl autocmd ColorScheme * highlight SpellRare term=Underline gui=Undercurl augroup END " """ highlight tailing spaces except when typing as red (set after colorscheme) highlight TailingWhitespaces ctermbg=red guibg=red     """ \s\+ 1 or more whitespace character: and """ \%#\@ 0 && line ("'\"") <= line("$") | \ exe "normal! g'\"" | \ endif augroup END 9.2.2. Anpassen von vim mit externen Paketen     Interessante externe Plugin-Pakete finden Sie unter: * Vim - the ubiquitous text editor -- Die offizielle Upstream-Seite von Vim und Vim-Scripten     * VimAwsome -- Auflistung von Vim-Plugins * vim-scripts -- Debian-Paket: eine Sammlung von Vim-Scripten     Plugin packages in the vim-scripts package can be enabled using user's vimrc file. E.g.: packadd! secure-modelines packadd! winmanager let mapleader = ' '     " Toggle paste mode with p for Vim (no need for Nvim) set pastetoggle=p " IDE-like UI for files and buffers with w nnoremap w :WMToggle Das neue native Vim-Paketsystem funktioniert sehr gut mit "git"     und "git submodule". Eine solche Beispielkonfiguration finden Sie in meinem git-Repository: dot-vim. Was sie bewirkt, ist letztlich: * Durch Verwenden von "git" und "git submodule werden die aktuellsten externen Pakete in ~/.vim/pack/*/opt/ abgelegt, z.B. für "name" in ~/.vim/pack/*/opt/name, und entsprechend für andere Pakete. * Indem eine :packadd! name-Zeile zur vimrc-Datei des Benutzers     hinzugefügt wird, werden die entsprechenden Pakete im runtimepath abgelegt. * Vim lädt diese Pakete während der Initialisierung aus dem runtimepath. * Am Ende der Initialisierung werden die Marker (Tags) für die installierten Dokumente mit "helptags ALL" aktualisiert. Wenn Sie es genauer wissen möchten, starten Sie vim mit "vim     --startuptime vimstart.log", um die aktuell ausgeführte Startsequenz sowie die für jeden Schritt benötigte Zeit kontrollieren zu können. Es kann sehr verwirrend sein, wenn es zu viele Wege ^[3] für die     Verwaltung und das Herunterladen externer vim-Pakete gibt. Sich an die Original-Informationen zu halten, ist dann die beste Hilfe. Tabelle 9.3. Informationen zur Initialisierung von vim +---------------------------------------------------------------+ |Tastatureingabe| Information | |---------------+-----------------------------------------------| |:help package |Erklärung zum Vim-Paket-Mechanismus | |---------------+-----------------------------------------------| |:help |Erklärung zum runtimepath-Mechanismus | |runtimepath | | |---------------+-----------------------------------------------| |:version |interner Status inklusive Kandidaten für die | | |vimrc-Datei |     |---------------+-----------------------------------------------| |:echo $VIM |die Umgebungsvariable "$VIM", die verwendet | | |wird, um die vimrc-Datei zu finden | |---------------+-----------------------------------------------| |:set |Liste der Verzeichnisse, die auf der Suche nach| |runtimepath? |runtime-Support-Dateien durchsucht werden | |---------------+-----------------------------------------------| | |die Umgebungsvariable "$VIMRUNTIME", die | |:echo |verwendet wird, um verschiedene (vom System | |$VIMRUNTIME |bereitgestellte) Runtime-Support-Dateien zu | | |finden | +---------------------------------------------------------------+ 9.3. Datenaufzeichnung und -darstellung 9.3.1. Der log-Daemon     Viele traditionelle Programme zeichnen ihre Aktivitäten als Textdatei im "/var/log/"-Verzeichnis auf. logrotate(8) wird verwendet, um die Administration der Logdateien     auf Systemen zu vereinfachen, die viele solcher Logdateien erzeugen. Viele neue Programme hingegen zeichnen ihre Aktivitäten in     binärem Format mittels dem Journal-Service systemd-journald(8) im Verzeichnis "/var/log/journal" auf. Sie können Logdaten von einem Shell-Skript zum systemd-journald     (8)-Journal hinzufügen, indem Sie den systemd-cat(1)-Befehl nutzen.     Lesen Sie dazu Abschnitt 3.4, „Die Systemmeldungen“ und Abschnitt 3.3, „Die Kernel-Meldungen“. 9.3.2. Analyseprogramme für Logdateien     Hier eine Liste erwähnenswerter Analyseprogramme für Logdateien ("~Gsecurity::log-analyzer" in aptitude(8)): Tabelle 9.4. Liste von System-Log-Analyzern +---------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |----------+------+-----+---------------------------------------| |logwatch |V:11, |2328 |Log-Analysator mit netter Ausgabe, | | |I:13 | |geschrieben in Perl | |----------+------+-----+---------------------------------------| |fail2ban |V:98, |2126 |IP-Adressen sperren, die vielfache | | |I:111 | |Authentifizierungsfehler verursachen | |----------+------+-----+---------------------------------------| |analog |V:3, |3739 |Webserver-Log-Analysator | | |I:96 | | | |----------+------+-----+---------------------------------------| | |V:6, | |leistungsfähiger und mit vielen | |awstats |I:10 |6928 |Funktionen ausgestatteter | | | | |Webserver-Log-Analysator | |----------+------+-----+---------------------------------------| |sarg |V:1, |845 |Analysereportgenerator für Squid | | |I:1 | | |     |----------+------+-----+---------------------------------------| |pflogsumm |V:1, |109 |Programm zur Zusammenfassung von | | |I:4 | |Postfix-Logeinträgen | |----------+------+-----+---------------------------------------| |fwlogwatch|V:0, |481 |Firewall-Log-Analysator | | |I:0 | | | |----------+------+-----+---------------------------------------| |squidview |V:0, |189 |Programm zum Beobachten und Analysieren| | |I:0 | |von Squid-access.log-Dateien | |----------+------+-----+---------------------------------------| | |V:0, | |Logdatei-Betrachter mit Unterstützung | |swatch |I:0 |99 |für reguläre Ausdrücke, Hervorhebung | | | | |und Einsprungstellen | |----------+------+-----+---------------------------------------| |crm114 |V:0, |1119 |Programm zur flexiblen Einordnung von | | |I:0 | |E-Mails und anderen Daten (CRM114) | |----------+------+-----+---------------------------------------| |icmpinfo |V:0, |44 |Programm zur Interpretation von | | |I:0 | |ICMP-Nachrichten | +---------------------------------------------------------------+ Anmerkung     CRM114 bietet eine Sprachinfrastruktur, um Unschärfe-Filter (fuzzy filters) mittels der TRE-regex-Bibliothek zu erstellen. Ein populärer Anwendungsfall ist der Spam-Mail-Filter, aber es kann auch als Log-Analysator verwendet werden. 9.3.3. Angepasste Anzeige von Textdaten Obwohl Pager wie more(1) und less(1) (lesen Sie dazu Abschnitt 1.4.5, „Der Pager“) sowie spezielle Werkzeuge für Hervorhebung und Formatierung (Näheres dazu in Abschnitt 11.1.8,     „Hervorheben und Formatieren von reinen Textdaten“) Text gut anzeigen können, sind normale Texteditoren (Details in Abschnitt 1.4.6, „Der Texteditor“) vielseitiger und besser anzupassen. Tipp     Bei vim(1) und seinem Pager-Modus alias view(1) wird über ":set hls" die Suche mit Hervorhebung aktiviert. 9.3.4. Angepasste Anzeige von Datum und Uhrzeit Das Standard-Anzeigeformat von Datum und Uhrzeit bei dem Befehl "ls -l" hängt vom gewählten Gebietsschema (locale) ab (siehe dazu     auch Abschnitt 1.2.6, „Zeitstempel“). Die Variable "$LANG" wird als erstes abgefragt, der Wert kann jedoch mittels der "$LC_TIME"- oder "$LC_ALL"-Variable überschrieben werden. Das letztlich verwendete Anzeigeformat für das jeweilige Gebietsschema hängt von der verwendeten Standard-C-Bibliothek     (aus dem libc6-Paket) ab. Aufgrunddessen hatten verschiedene Debian-Veröffentlichungen unterschiedliche Standardeinstellungen. Bezüglich der ISO-Formate besuchen Sie ISO 8601. Wenn Sie das Anzeigeformat von Datum und Uhrzeit wirklich über die locale-Einstellung hinaus anpassen möchten, sollten Sie die     Option time style value setzen, entweder über das "--time-style"-Argument oder über den Wert der Variable "$TIME_STYLE" (Näheres unter ls(1), date(1) und "info coreutils 'ls invocation'"). Tabelle 9.5. Anzeigebeispiele von Datum und Uhrzeit für den Befehl "ls -l" mit time style value-Einstellung +---------------------------------------------------------------+ | time style | Locale | Anzeige von Datum und Uhrzeit | | value | | | |--------------+----------------+-------------------------------| |iso |alle |01-19 00:15 | |--------------+----------------+-------------------------------| |long-iso |alle |2009-01-19 00:15 | |--------------+----------------+-------------------------------| |full-iso |alle |2009-01-19 00:15:16.000000000 | | | |+0900 | |--------------+----------------+-------------------------------|     |locale |C |Jan 19 00:15 | |--------------+----------------+-------------------------------| |locale |en_US.UTF-8 |Jan 19 00:15 | |--------------+----------------+-------------------------------| |locale |es_ES.UTF-8 |ene 19 00:15 | |--------------+----------------+-------------------------------| |+%d.%m.%y |alle |19.01.09 00:15 | |%H:%M | | | |--------------+----------------+-------------------------------| |+%d.%b.%y |C oder |19.Jan.09 00:15 | |%H:%M |en_US.UTF-8 | | |--------------+----------------+-------------------------------| |+%d.%b.%y |es_ES.UTF-8 |19.ene.09 00:15 | |%H:%M | | | +---------------------------------------------------------------+ Tipp Sie können die Eingabe langer Optionsparameter auf der     Befehlszeile vermeiden, indem sie einen Befehls-Alias verwenden (siehe Abschnitt 1.5.9, „Befehls-Alias“): alias ls='ls --time-style=+%d.%m.%y %H:%M' 9.3.5. Farbige Shell-Ausgabe Die Shell-Ausgabe der meisten modernen Terminals kann über     ANSI-Escape-Codes farbig gestaltet werden (lesen Sie dazu auch "/ usr/share/doc/xterm/ctlseqs.txt.gz").     Probieren Sie zum Beispiel folgendes: $ RED=$(printf "\x1b[31m")     $ NORMAL=$(printf "\x1b[0m") $ REVERSE=$(printf "\x1b[7m") $ echo "${RED}RED-TEXT${NORMAL} ${REVERSE}REVERSE-TEXT${NORMAL}" 9.3.6. Farbige Befehle Farbige Befehle sind praktisch, um deren Ausgabe in einer     interaktiven Umgebung zu kontrollieren. Ich habe Folgendes in meiner "~/.bashrc": if [ "$TERM" != "dumb" ]; then eval "`dircolors -b`" alias ls='ls --color=always' alias ll='ls --color=always -l' alias la='ls --color=always -A' alias less='less -R' alias ls='ls --color=always'     alias grep='grep --color=always' alias egrep='egrep --color=always' alias fgrep='fgrep --color=always' alias zgrep='zgrep --color=always' else alias ll='ls -l' alias la='ls -A' fi Die Verwendung von Befehls-Alias beschränkt die Farbeffekte auf interaktive Befehlseingaben. Dies ist ein Vorteil gegenüber dem Exportieren der Umgebungsvariablen ("export GREP_OPTIONS='--color     =auto'"), da die Farben auch in Pager-Programmen wie less(1) sichtbar sind. Falls Sie die Farbeffekte bei Weiterleitung zu anderen Programmen deaktivieren möchten, nutzen Sie stattdessen "--color=auto" in dem obigen Beispiel für die "~/.bashrc". Tipp     Sie können die Farb-Alias in der interaktiven Umgebung ausschalten, indem Sie die Shell mit "TERM=dumb bash" starten. 9.3.7. Aufzeichnen von Editor-Aktivitäten für komplexe Wiederholungen     Sie können Editor-Aktivitäten aufzeichnen, um sie später für komplexe Wiederholungen wiederzuverwenden.     Bei Vim wie folgt: * "qa": Aufnahme der eingegebenen Zeichen in das Register "a" starten;     * … Editor-Aktivitäten; * "q": Aufnahme der eingegebenen Zeichen beenden; * "@a": Ausführen des Inhalts von Register "a".     Bei Emacs wie folgt: * "C-x (": Definition eines Tastaturmakros starten; * … Editor-Aktivitäten;     * "C-x )": Definition des Tastaturmakros beenden; * "C-x e": Ausführen des Tastaturmakros. 9.3.8. Die Bildschirmanzeige einer X-Anwendung aufzeichnen     Es gibt mehrere Wege, die Anzeige einer X-Anwendung aufzuzeichnen, inklusive eines xterm-Displays: Tabelle 9.6. Liste von Werkzeugen zur Bildbearbeitung +-----------------------------------------------------------------+ | Paket |Popcon|Größe|Umgebung| Befehl | |----------------+------+-----+--------+--------------------------| |gnome-screenshot|V:18, |1134 |Wayland |Bildschirmfoto-Applikation| | |I:173 | | |für GNOME | |----------------+------+-----+--------+--------------------------| |flameshot |V:7, |3364 |Wayland |Bildschirmfoto-Applikation| | |I:15 | | |auf Steroid | |----------------+------+-----+--------+--------------------------|     |gimp |V:50, |19304|Wayland |Bildschirmfoto im GUI-Menü| | |I:252 | |+ X | | |----------------+------+-----+--------+--------------------------| |x11-apps |V:31, |2460 |X |xwd(1) | | |I:463 | | | | |----------------+------+-----+--------+--------------------------| |imagemagick |I:317 |74 |X |import(1) | |----------------+------+-----+--------+--------------------------| |scrot |V:5, |131 |X |scrot(1) | | |I:63 | | | | +-----------------------------------------------------------------+ 9.3.9. Aufzeichnen von Änderungen in Konfigurationsdateien Es gibt spezielle Werkzeuge, um Änderungen in     Konfigurationsdateien mit Hilfe von DVCS-Systemen aufzuzeichnen sowie System-Schnappschüsse mittels Btrfs zu erstellen: Tabelle 9.7. Liste von Paketen zur Aufzeichnung der Konfigurations-Historie +---------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |---------+------+-----+----------------------------------------| | |V:26, | |Konfigurationsdateien und deren | |etckeeper|I:30 |168 |Metadaten mit Git (Standard), Mercurial |     | | | |oder GNU Bazaar abspeichern | |---------+------+-----+----------------------------------------| |timeshift|V:5, |3506 |Werkzeug zur Systemwiederherstellung | | |I:10 | |mittels rsync oder BTRFS-Schnappschüssen| |---------+------+-----+----------------------------------------| |snapper |V:4, |2392 |Verwaltungswerkzeug für | | |I:5 | |Linux-Dateisystem-Schnappschüsse | +---------------------------------------------------------------+     You may also think about local script Abschnitt 10.2.3, „Backup tips“ approach. 9.4. Überwachen, Steuern und Starten von Programmaktivitäten     Programmaktivitäten können mittels spezieller Werkzeuge überwacht und kontrolliert werden: Tabelle 9.8. Liste von Werkzeugen zur Überwachung und Steuerung von Programmaktivitäten +---------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |---------+------+-----+----------------------------------------| |coreutils|V:880,|18307|nice(1): ein Programm mit veränderter | | |I:999 | |Ablaufpriorität ausführen | |---------+------+-----+----------------------------------------| |bsdutils |V:519,|356 |renice(1): die Ablaufpriorität eines | | |I:999 | |laufenden Prozess verändern | |---------+------+-----+----------------------------------------| |procps |V:766,|2389 |Werkzeuge für das "/proc"-Dateisystem: | | |I:999 | |ps(1), top(1), kill(1), watch(1), … | |---------+------+-----+----------------------------------------| | |V:420,| |Werkzeuge für das "/proc"-Dateisystem: | |psmisc |I:775 |908 |killall(1), fuser(1), peekfd(1), pstree | | | | |(1) | |---------+------+-----+----------------------------------------| | |V:7, | |time(1): ein Programm ausführen und die | |time |I:132 |129 |Zeit ausgeben, während der Ressourcen | | | | |verbraucht wurden | |---------+------+-----+----------------------------------------| | |V:148,| |sar(1), iostat(1), mpstat(1), …: | |sysstat |I:170 |1904 |Werkzeuge zur Messung der | | | | |System-Performance unter Linux | |---------+------+-----+----------------------------------------| |isag |V:0, |109 |Interaktive grafische Darstellung der | | |I:3 | |Systemaktivität, basierend auf sysstat |     |---------+------+-----+----------------------------------------| | |V:422,| |lsof(8): mit der Option "-p" diejenigen | |lsof |I:945 |482 |Dateien auflisten, die von einem gerade | | | | |laufenden Prozess geöffnet wurden | |---------+------+-----+----------------------------------------| |strace |V:12, |2897 |strace(1): Systemaufrufe und -signale | | |I:119 | |verfolgen | |---------+------+-----+----------------------------------------| |ltrace |V:0, |330 |ltrace(1): Bibliotheksaufrufe verfolgen | | |I:16 | | | |---------+------+-----+----------------------------------------| |xtrace |V:0, |353 |xtrace(1): Kommunikation zwischen | | |I:0 | |X11-Client und -Server verfolgen | |---------+------+-----+----------------------------------------| |powertop |V:18, |677 |powertop(1): Informationen über | | |I:217 | |verbrauchte Systemleistung | |---------+------+-----+----------------------------------------| |cron |V:872,|244 |Prozesse laut dem Ablaufplan des cron(8)| | |I:995 | |-Daemons im Hintergrund ausführen | |---------+------+-----+----------------------------------------| | |V:396,| |cron-ähnlicher Programmablauf-Planer für| |anacron |I:479 |93 |Systeme, die nicht 24 Stunden am Tag | | | | |laufen | |---------+------+-----+----------------------------------------| | | | |at(1) oder batch(1): einen Prozess zu | |at |V:101,|158 |einer bestimmten Zeit oder unterhalb | | |I:154 | |einer bestimmten Systembelastung | | | | |ausführen | +---------------------------------------------------------------+ Tipp     Das procps-Paket enthält sehr grundlegende Werkzeuge zum Überwachen, Steuern und Starten von Programmaktivitäten. Sie sollten sich mit diesen vertraut machen. 9.4.1. Zeitmessung für einen Prozess     Zeit anzeigen, die der von dem Befehl angestossene Prozess benötigt hat: # time some_command >/dev/null     real 0m0.035s # time on wall clock (elapsed real time) user 0m0.000s # time in user mode sys 0m0.020s # time in kernel mode 9.4.2. Die Ablaufpriorität     Der nice-Wert wird verwendet, um die Ablaufpriorität von Prozessen zu steuern. Tabelle 9.9. Liste der nice-Werte für die Ablaufpriorität +-------------------------------------------------------------+ |nice-Wert| Ablaufpriorität | |---------+---------------------------------------------------|     |19 |niedrigste Prozesspriorität (sparsam) | |---------+---------------------------------------------------| |0 |sehr hohe Prozesspriorität für Benutzer | |---------+---------------------------------------------------| |-20 |sehr hohe Prozesspriorität für root (nicht sparsam)| +-------------------------------------------------------------+     # nice -19 top # very nice # nice --20 wodim -v -eject speed=2 dev=0,0 disk.img # very fast     Manchmal schadet ein extremer nice-Wert dem System mehr als er ihm nützt. Nutzen Sie diesen Befehl mit Vorsicht. 9.4.3. Der Befehl ps Der ps(1)-Befehl im Debian-System unterstützt sowohl BSD- wie     auch SystemV-Funktionalitäten und hilft dabei, die Prozessaktivitäten (in statischem Zustand) zu beurteilen. Tabelle 9.10. Liste von ps-Befehlen +----------------------------------------------------+ | Art |typischer Befehl| Funktionalität |     |--------+----------------+--------------------------| |BSD |ps aux |anzeigen von %CPU und %MEM| |--------+----------------+--------------------------| |System V|ps -efH |anzeigen der PPID | +----------------------------------------------------+     Nicht mehr vorhandene Zombie-Kindprozesse können Sie über die Prozess-ID des Eltern-Prozesses in dem "PPID"-Feld beenden.     Der Befehl pstree(1) zeigt alle Prozesses in Form eines Hierarchie-Baums an. 9.4.4. Der Befehl top top(1) auf einem Debian-System hat reichhaltige Funktionalitäten     und hilft dabei, Prozesse zu identifizieren, die sich sehr auffällig dynamisch verhalten. Es ist ein interaktives Programm mit Vollbildschirmmodus. Sie     erhalten eine Hilfe zur Nutzung, indem Sie die Taste "h" drücken; mit "q" beenden Sie das Programm. 9.4.5. Dateien auflisten, die von einem Prozess geöffnet wurden Sie können wie folgt alle Dateien auflisten, die von einem     Prozess mit einer bestimmten Prozess-ID (PID), z.B. 1, geöffnet wurden:     $ sudo lsof -p 1     PID 1 ist normalerweise das init-Programm. 9.4.6. Programmaktivitäten verfolgen Sie können Programmaktivitäten mit strace(1) (für Systemaufrufe     und -signale), ltrace(1) (für Bibliotheksaufrufe) oder xtrace(1) (für die Kommunikation zwischen X11-Client und -Server) verfolgen.     Systemaufrufe des ls-Befehls verfolgen Sie z.B. wie folgt:     $ sudo strace ls Tipp     Nutzen Sie das Skript strace-graph aus /usr/share/doc/strace/ examples/, um eine hübsche Baumansicht zu erstellen. 9.4.7. Identifikation von Prozessen, die Dateien oder Sockets verwenden     Auch können Sie Prozesse, die bestimmte Dateien nutzen, mit fuser (1) identifizieren, hier z.B. "/var/log/mail.log": $ sudo fuser -v /var/log/mail.log     USER PID ACCESS COMMAND /var/log/mail.log: root 2946 F.... rsyslogd     Sie sehen, dass die Datei "/var/log/mail.log" von dem Befehl rsyslogd(8) zum Schreiben geöffnet wurde.     Prozessse, die bestimmte Sockets verwenden, können Sie ebenfalls mittels fuser(1) identifizieren, für "smtp/tcp" z.B. wie hier: $ sudo fuser -v smtp/tcp     USER PID ACCESS COMMAND smtp/tcp: Debian-exim 3379 F.... exim4     Jetzt wissen Sie, dass auf Ihrem System exim4(8) läuft, um TCP-Verbindungen zum SMTP-Port (25) zu bedienen. 9.4.8. Einen Befehl mit festem Intervall wiederholt ausführen     watch(1) führt ein Programm wiederholt mit einem festen Intervall aus und zeigt dessen Ausgabe im Vollbildschirmmodus an.     $ watch w     Hiermit wird alle 2 Sekunden neu angezeigt, wer auf dem System angemeldet ist. 9.4.9. Einen Befehl wiederholt mit einer Schleife über verschiedene Dateien ausführen Es gibt verschiedene Wege, um einen Befehl zu wiederholen und     jedes Mal eine andere Datei aus einer bestimmten Menge von Dateien (hier z.B. ausgewählt über ein glob-Suchmuster auf "*.ext") als Argument zu verwenden.     * Methode mit einer for-Schleife in der Shell (Näheres in Abschnitt 12.1.4, „Shell-Schleifen“):     for x in *.ext; do if [ -f "$x"]; then command "$x" ; fi; done     * Kombination aus find(1) und xargs(1):     find . -type f -maxdepth 1 -name '*.ext' -print0 | xargs -0 -n 1 command     * find(1) mit "-exec"-Option und einem Befehl:     find . -type f -maxdepth 1 -name '*.ext' -exec command '{}' \;     * find(1) mit "-exec"-Option und einem kurzen Shell-Skript:     find . -type f -maxdepth 1 -name '*.ext' -exec sh -c "command '{}' && echo 'successful'" \; Die obigen Beispiele wurden geschrieben, um auch eine korrekte Behandlung von komischen Dateinamen, wie z.B. solche mit     Leerzeichen, sicherzustellen. Lesen Sie dazu auch Abschnitt 10.1.5, „Aufrufe für die Auswahl von Dateien“; dort finden Sie außerdem weitergehende Verwendungen des Befehls find (1). 9.4.10. Ein Programm aus der grafischen Oberfläche heraus starten Auf der Befehlszeile (command-line interface, CLI) wird das erste     Programm mit dem passenden Namen ausgeführt, das in den durch die Umgebungsvariable $PATH definierten Verzeichnissen gefunden wird. Lesen Sie dazu auch Abschnitt 1.5.3, „Die "$PATH"-Variable“. Bei einer zum freedesktop.org-Standard konformen grafischen Oberfläche (graphical user interface, GUI) enthalten die *.desktop-Dateien in dem Verzeichnis /usr/share/applications/ alle nötigen Attribute für die Anzeige der Programmeinträge im     grafischen Menü. Jedes Paket, das mit dem xdg-Menüsystem von Freedesktop.org konform ist, installiert seine Menüdaten (für die "*.desktop"-Dateien) unter "/usr/share/applications/". Moderne Arbeitsplatzumgebungen gemäß Freedesktop.org-Standard verwenden diese Daten, um mittels dem xdg-utils-Paket das Programmmenü zu erstellen. Näheres dazu in "/usr/share/doc/xdg-utils/README". Im folgenden Beispiel definiert die Datei chromium.desktop die Attribute für den "Chromium-Webbrowser", z.B. "Name" für den     Programmnamen, "Exec" für den Pfad zum auszuführenden Programm mit zugehörigen Argumenten, "Icon" für das verwendete Icon-Symbol usw. (Details finden Sie unter Desktop Entry Specification): [Desktop Entry] Version=1.0 Name=Chromium Web Browser GenericName=Web Browser Comment=Access the Internet Comment[fr]=Explorer le Web Exec=/usr/bin/chromium %U     Terminal=false X-MultipleArgs=false Type=Application Icon=chromium Categories=Network;WebBrowser; MimeType=text/html;text/xml;application/xhtml_xml;x-scheme-handler/http;x-scheme-handler/https; StartupWMClass=Chromium StartupNotify=true     Dies ist eine vereinfachte Beschreibung. Die *.desktop-Dateien werden wie folgt eingelesen:     Die Desktop-Umgebung setzt die Umgebungsvariablen $XDG_DATA_HOME und $XDG_DATA_DIR. Unter GNOME3 z.B.: * $XDG_DATA_HOME wird nicht genutzt (der Standardwert aus $HOME /.local/share wird verwendet).     * $XDG_DATA_DIRS wird auf /usr/share/gnome:/usr/local/share/:/ usr/share/ gesetzt.     Daher werden die Basisverzeichnisse (lesen Sie XDG Base Directory Specification) und applications-Verzeichnisse wie folgt gesetzt: * $HOME/.local/share/ → $HOME/.local/share/applications/ * /usr/share/gnome/ → /usr/share/gnome/applications/     * /usr/local/share/ → /usr/local/share/applications/ * /usr/share/ → /usr/share/applications/     Die *.desktop-Dateien aus diesen applications-Verzeichnissen werden in obiger Reihenfolge eingelesen. Tipp     Ein benutzerdefinierter Menüeintrag für die grafische Oberfläche kann erstellt werden, indem eine *.desktop-Datei zum Verzeichnis $HOME/.local/share/applications/ hinzugefügt wird. Tipp     The "Exec=..." line isn't parsed by the shell. Use the env(1) command if environment variables need to be set. Tipp Ähnlich dazu verhält es sich, wenn eine *.desktop-Datei zum     autostart-Verzeichnis in diesen Basisverzeichnissen hinzugefügt wird: das in der *.desktop-Datei definierte Programm wird beim Start der grafischen Benutzeroberfläche automatisch ausgeführt (z.B. nach dem Anmelden). Lesen Sie dazu Desktop Application Autostart Specification. Tipp Ähnlich ist es auch, wenn eine *.desktop-Datei im $HOME/ Desktop-Verzeichnis erstellt wird und die grafische Umgebung die     Funktionalität der Programmstarter-Icons (desktop icon launcher) unterstützt: das definierte Programm wird bei Anklicken des Icons ausgeführt. Bitte beachten Sie, dass der eigentliche Name des $HOME/Desktop-Verzeichnisses letztlich vom Gebietsschema (Locale) abhängt; Näheres dazu finden Sie in xdg-user-dirs-update(1). 9.4.11. Anpassen des zu startenden Programms     Einige Programme starten automatisch weitere Programme. Hier einige Punkte bezüglich der Anpassung dieses Prozesses. * Menü zur Konfiguration von bevorzugten Anwendungen: + GNOME3-Umgebung: "Einstellungen" → "Systemeinstellungen" → "Details" → "Vorgabe-Anwendungen"; + KDE-Umgebung: "K" → "Control-Center" → "KDE-Komponenten" → "Komponentenauswahl"; + Iceweasel-Browser: "Bearbeiten" → "Einstellungen" → "Anwendungen"; + mc(1): "/etc/mc/mc.ext";     * Umgebungsvariablen wie "$BROWSER", "$EDITOR", "$VISUAL" und "$PAGER" (Näheres in environ(7)); * das update-alternatives(1)-System für Programme wie "editor", "view", "x-www-browser", "gnome-www-browser" und "www-browser" (Näheres in Abschnitt 1.4.7, „Einen Standard-Texteditor einstellen“); * die Inhalte der Dateien "~/.mailcap" und "/etc/mailcap", über die die MIME-Types bestimmten Programmen zugeordnet werden (Näheres in mailcap(5)); * die Inhalte der Dateien "~/.mime.types" und "/etc/ mime.types", über die Dateinamenerweiterungen entsprechenden MIME-Types zugeordnet werden (Näheres in run-mailcap(1)). Tipp     update-mime(8) aktualisiert die "/etc/mailcap"-Datei unter Verwendung von "/etc/mailcap.order" (Näheres in mailcap.order (5)). Tipp     Das debianutils-Paket stellt sensible-browser(1), sensible-editor (1) und sensible-pager(1) bereit; diese treffen eine sinnvolle Auswahl, welcher Editor, Pager bzw. Webbrowser aufgerufen wird. Ich empfehle, dass Sie diese Shell-Skripte lesen. Tipp Um eine Konsolen-Applikation (hier mutt) im GUI als bevorzugte Anwendung festzulegen, sollten Sie wie folgt ein Startskript für die Applikation erzeugen (in diesem Fall "/usr/local/bin/ mutt-term") und dieses als bevorzugt zu startende Anwendung     konfigurieren: # cat /usr/local/bin/mutt-term <> $HOME/tmp/out 2>&1     # run at 14:15 on the first of every month -- output mailed to paul 15 14 1 * * $HOME/bin/monthly # run at 22:00 on weekdays(1-5), annoy Joe. % for newline, last % for cc: 0 22 * * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%.%% 23 */2 1 2 * echo "run 23 minutes after 0am, 2am, 4am ..., on Feb 1" 5 4 * * sun echo "run at 04:05 every Sunday" # run at 03:40 on the first Monday of each month 40 3 1-7 * * [ "$(date +%a)" == "Mon" ] && command -args Tipp Auf Systemen, die nicht ständig laufen, installieren Sie das     anacron-Paket, um regelmäßige Aufgaben auszuführen, sobald nach entsprechender Maschinen-Einschaltdauer ein festgelegter Intervall abgelaufen ist. Näheres unter anacron(8) und anacrontab (5). Tipp Geplante Skripte zur Systemwartung können Sie vom root-Konto aus     wiederholt ausführen, indem Sie solche Skripte in "/etc/ cron.hourly/", "/etc/cron.daily/", "/etc/cron.weekly/" oder "/etc /cron.monthly/" einfügen. Der Ausführungszeitpunkt dieser Skripte kann über "/etc/crontab" und "/etc/anacrontab" angepasst werden. Systemd gewisse Fähigkeiten, um die Ausführung von Programmen ohne den cron-Daemon zu planen. Zum Beispiel werden über /lib/     systemd/system/apt-daily.timer und /lib/systemd/system/ apt-daily.service tägliche Download-Aktivitäten von apt geplant. Näheres in systemd.timer(5) . 9.4.15. Scheduling tasks on event Systemd can schedule program not only on the timer event but also     on the mount event. See Abschnitt 10.2.3.3, „Timer event triggered backup“ and Abschnitt 10.2.3.2, „Mount event triggered backup“ for examples. 9.4.16. Die Alt-SysRq-Tastenkombination Alt-SysRq (auf deutschen Tastaturen das Drücken von Alt+Druck)     gefolgt von einer weiteren Taste löst verschiedene, fast magische Aktionen aus, um im Notfall die Kontrolle über das System wiederzuerlangen: Tabelle 9.12. Liste erwähnenswerter SAK-Befehlstasten +---------------------------------------------------------------+ |Taste nach| Beschreibung der Aktion | |Alt-SysRq | | |----------+----------------------------------------------------| |k |alle Prozesse auf der aktuellen virtuellen Konsole | | |durch ein kill zum Beenden zwingen (SAK) | |----------+----------------------------------------------------|     | |alle eingebundenen Dateisysteme synchronisieren | |s |(Dateisystempuffer auf Platte schreiben), um | | |Datenverluste zu vermeiden | |----------+----------------------------------------------------| |u |alle eingebundenen Dateisysteme neu einbinden mit | | |Nur-Lese-Berechtigung (umount) | |----------+----------------------------------------------------| |r |Tastatur aus dem Roh-Modus (raw) wiederherstellen | | |nach X-Abstürzen | +---------------------------------------------------------------+     Weitere Details finden Sie im Linux kernel user’s and administrator’s guide » Linux Magic System Request Key Hacks. Tipp Von einem SSH-Terminal u.ä. können Sie die     Alt-SysRq-Funktionalität nutzen, indem Sie in "/proc/ sysrq-trigger" schreiben. Zum Beispiel werden durch "echo s > / proc/sysrq-trigger; echo u > /proc/sysrq-trigger" alle eingebundenen Dateisysteme synchronisiert und mittels umount aus der Einbindung gelöst.     Der aktuelle Debian amd64 Linux-Kernel (Stand 2021) hat /proc/sys /kernel/sysrq=438=0b110110110: * 2 = 0x2 - Aktivieren der Kontrolle über das Konsolen-Log-Level (AN) * 4 = 0x4 - Aktivieren der Kontrolle über die Tastatur (SAK, unraw) (AN) * 8 = 0x8 - Aktivieren von Speicher-Dumps der Prozesse zwecks Fehlersuche (Debugging) usw. (AUS) * 16 = 0x10 - Aktivieren des sync-Befehls (AN)     * 32 = 0x20 - Aktivieren von Neueinbinden mit Nur-Lese-Berechtigung (remount read-only) (AN) * 64 = 0x40 - Aktivieren des Sendens von Signalen an Prozesse (term, kill, oom-kill) (AUS) * 128 = 0x80 - Erlauben von Neustart/Ausschalten (AN) * 256 = 0x100 - Erlauben von nice-Prioritäten für all Echtzeit- (RT-)Prozesse (AN) 9.5. Tipps zur Systempflege 9.5.1. Wer ist/war im System aktiv?     Sie können wie folgt überprüfen, wer derzeit im System aktiv ist: * who(1) zeigt, wer angemeldet ist. * w(1) zeigt, wer angemeldet ist und was derjenige jeweils tut.     * last(1) zeigt eine Auflistung der zuletzt angemeldeten Benutzer. * lastb(1) zeigt eine Auflistung der letzten Benutzer mit fehlgeschlagenen Anmeldeversuchen. Tipp     Diese Informationen werden in "/var/run/utmp" und "/var/log/wtmp" zur Verfügung gehalten. Lesen Sie dazu login(1) und utmp(5). 9.5.2. Allen eine Warnung schicken     Mit wall(1) können Sie wie folgt eine Nachricht an alle am System angemeldeten Benutzer schicken:     $ echo "We are shutting down in 1 hour" | wall 9.5.3. Hardware-Identifikation Bei PCI-basierten Geräten (AGP, PCI-Express, CardBus, ExpressCard     usw.) ist lspci(8) (eventuell mit der Option "-nn") ein guter Anfang zur Hardware-Identifikation. Alternativ können Sie die Hardware auch über das Auslesen der     Inhalte von "/proc/bus/pci/devices" identifizieren oder indem Sie die Verzeichnisse unterhalb von "/sys/bus/pci" durchsuchen (Näheres in Abschnitt 1.2.12, „procfs und sysfs“). Tabelle 9.13. Liste von Werkzeugen zur Hardware-Identifikation +---------------------------------------------------------------+ | Paket |Popcon |Größe| Beschreibung | |-----------+-------+-----+-------------------------------------| |pciutils |V:249, |213 |Hilfsprogramme für PCI unter Linux: | | |I:991 | |lspci(8) | |-----------+-------+-----+-------------------------------------| |usbutils |V:68, |325 |Hilfsprogramme für USB unter Linux: | | |I:869 | |lsusb(8) | |-----------+-------+-----+-------------------------------------| |nvme-cli |V:15, |1642 |Hilfsprogramme für NVME unter Linux: | | |I:22 | |nvme(1) | |-----------+-------+-----+-------------------------------------|     |pcmciautils|V:6, |91 |Hilfsprogramme für PCMCIA unter | | |I:10 | |Linux: pccardctl(8) | |-----------+-------+-----+-------------------------------------| |scsitools |V:0, |346 |Sammlung von Werkzeugen für das | | |I:2 | |SCSI-Hardware-Management: lsscsi(8) | |-----------+-------+-----+-------------------------------------| |procinfo |V:0, |132 |Systeminformationen, gewonnen aus "/ | | |I:9 | |proc": lsdev(8) | |-----------+-------+-----+-------------------------------------| |lshw |V:13, |919 |Informationen über die | | |I:89 | |Hardware-Konfiguration: lshw(1) | |-----------+-------+-----+-------------------------------------| |discover |V:40, |98 |System zur Hardware-Identifikation: | | |I:958 | |discover(8) | +---------------------------------------------------------------+ 9.5.4. Hardware-Konfiguration Obwohl der größte Teil der Hardware-Konfiguration auf modernen GUI-Arbeitsplatzsystemen wie GNOME und KDE über entsprechende     GUI-Werkzeuge verwaltet werden kann, ist es eine gute Idee, zumindest einige grundlegende Methoden für deren Konfiguration zu kennen. Tabelle 9.14. Liste von Werkzeugen zur Hardware-Konfiguration +--------------------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |-----------------+------+-----+-------------------------------------------| |console-setup |V:88, |428 |Werkzeuge für Schriftarten und | | |I:967 | |Tastaturbelegungen auf der Linux-Konsole | |-----------------+------+-----+-------------------------------------------| |x11-xserver-utils|V:302,|568 |X-Server-Hilfsprogamme: xset(1), xmodmap(1)| | |I:528 | | | |-----------------+------+-----+-------------------------------------------| | |V:84, | |Daemon zur Verwaltung von Ereignissen der | |acpid |I:148 |158 |Advanced-Configuration-and-Power-Interface-| | | | |(ACPI-)Schnittstelle | |-----------------+------+-----+-------------------------------------------| |acpi |V:9, |47 |Werkzeug zur Anzeige von Informationen über| | |I:136 | |ACPI-Geräte | |-----------------+------+-----+-------------------------------------------| |sleepd |V:0, |86 |Daemon, mit dem man einen Laptop bei | | |I:0 | |Inaktivität in Ruhemodus schicken kann | |-----------------+------+-----+-------------------------------------------|     | |V:178,| |Optimierung des Festplattenzugriffs (lesen | |hdparm |I:335 |256 |Sie dazu Abschnitt 9.6.9, „Optimierung der | | | | |Festplatte“) | |-----------------+------+-----+-------------------------------------------| |smartmontools |V:207,|2358 |Speichersysteme mittels S.M.A.R.T. | | |I:250 | |kontrollieren und überwachen | |-----------------+------+-----+-------------------------------------------| |setserial |V:4, |103 |Werkzeugsammlung zur Verwaltung von | | |I:6 | |seriellen Ports | |-----------------+------+-----+-------------------------------------------| |memtest86+ |V:1, |12711|Werkzeugsammlung zur | | |I:21 | |Speicher-Hardware-Verwaltung | |-----------------+------+-----+-------------------------------------------| |scsitools |V:0, |346 |Werkzeugsammlung zur | | |I:2 | |SCSI-Hardware-Verwaltung | |-----------------+------+-----+-------------------------------------------| |setcd |V:0, |37 |Optimierung des Zugriffs auf CD-Laufwerke | | |I:0 | | | |-----------------+------+-----+-------------------------------------------| |big-cursor |I:0 |26 |größere Maus-Cursor für X | +--------------------------------------------------------------------------+     ACPI ist ein neueres Rahmenwerk für das Power Management und der Nachfolger für das ältere APM. Tipp     Die Skalierung der CPU-Frequenz wird auf modernen Systemen durch Kernel-Module wie acpi_cpufreq abgewickelt. 9.5.5. System- und Hardware-Zeit Über folgende Befehle wird die System- und Hardware-Zeit auf MM/     DD hh:mm, CCYY (MM - Monat, DD - Tag, hh - Stunde, mm - Minute, CCYY - Jahr) gesetzt: # date MMDDhhmmCCYY     # hwclock --utc --systohc # hwclock --show Zeiten werden auf einem Debian-System normalerweise in der     Lokalzeit angezeigt, aber die Hardware- und Systemzeit verwenden üblicherweise UTC (GMT). Wenn die Hardware-Zeit (teilweise auch als BIOS-/UEFI- oder     CMOS-Uhr bezeichnet) auf UTC eingestellt ist, ändern Sie die Einstellung in "/etc/default/rcS" auf "UTC=yes".     Mit folgendem Befehl konfigurieren Sie die vom Debian-System verwendete Zeitzone neu:     # dpkg-reconfigure tzdata Falls Sie die Systemzeit über das Netzwerk aktualisieren möchten,     sollten Sie die Verwendung des NTP-Dienstes in Erwägung ziehen; dazugehörige Pakete sind ntp, ntpdate und chrony. Tipp     Unter systemd sollten Sie stattdessen systemd-timesyncd für die Netzwerk-Zeitsynchronisation verwenden. Lesen Sie dazu systemd-timesyncd(8).     Hier finden Sie weitere Informationen: * Managing Accurate Date and Time HOWTO;     * NTP Public Services Project; * im ntp-doc-Paket. Tipp     ntptrace(8) aus dem ntp-Paket kann eine Hintereinanderschaltung mehrerer NTP-Server zu deren primärer Quelle zurückverfolgen. 9.5.6. Die Terminal-Konfiguration     Es existieren mehrere Komponenten zur Konfiguration von Systemfunktionalitäten für textbasierte Konsolen und ncurses(3): * die Datei "/etc/terminfo/*/*" (terminfo(5));     * die Umgebungsvariable "$TERM" (term(7)); * setterm(1), stty(1), tic(1) und toe(1). Falls bei Anmeldung von fern auf einem Debian-System mit einem Debian-fremden xtermder terminfo-Eintrag für xterm nicht     funktioniert, ändern Sie den Terminaltyp ("$TERM") von "xterm" auf eine der funktionseingeschränkten Versionen wie "xterm-r6". Näheres dazu finden Sie in "/usr/share/doc/libncurses5/FAQ". "dumb" ist der kleinste gemeinsame Nenner für "$TERM". 9.5.7. Die Audio-Infrastruktur Gerätetreiber für Soundkarten werden in aktuellen Linux-Systemen     von Advanced Linux Sound Architecture (ALSA) bereitgestellt. ALSA enthält zwecks Kompatibilität auch einen Emulationsmodus für das ältere Open Sound System (OSS). Anwendungssoftware kann konfiguriert sein, nicht die Soundkarte direkt anzusprechen, sondern über standardisierte     Sound-Server-Systeme darauf zuzugreifen. Derzeit werden PulseAudio, JACK und PipeWire als Sound-Server-Systeme genutzt. Schauen Sie im Debian-Wiki unter Sound, wie die aktuelle Situation ist. Es gibt normalerweise für jede populäre Arbeitsplatzumgebung eine     Sound-Engine. Für jede Sound-Engine, die von einer Anwendung verwendet wird, kann ausgewählt werden, mit welchem der verschiedenen Sound-Server sie sich verbindet. Tipp     Verwenden Sie "cat /dev/urandom > /dev/audio" oder speaker-test (1), um die Lautsprecher zu testen (^C zum stoppen). Tipp Falls Sie keinen Ton hören, sind Ihre Lautsprecher möglicherweise     an einem stummgeschalteten Ausgang angeschlossen. Moderne Sound-Systeme haben oft mehrere Ausgänge. alsamixer(1) aus dem alsa-utils-Paket ist nützlich für die Einstellung von Lautstärke und Stummschaltung. Tabelle 9.15. Liste von Audio-Paketen +---------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |-----------------+------+-----+--------------------------------| |alsa-utils |V:330,|2605 |Werkzeuge zur Konfiguration und | | |I:466 | |Nutzung von ALSA | |-----------------+------+-----+--------------------------------| | | | |Paket für OSS-Kompatibilität, | |oss-compat |V:1, |18 |verhindert unter ALSA das | | |I:17 | |Auftreten von "/dev/dsp not | | | | |found"-Fehlern | |-----------------+------+-----+--------------------------------| | |V:265,| |Multimedia-Server - Engine für | |pipewire |I:319 |120 |Audio- und Videoverarbeitung - | | | | |Metapaket | |-----------------+------+-----+--------------------------------| | |V:274,| |audio and video processing | |pipewire-bin |I:319 |1631 |engine multimedia server - audio| | | | |server and CLI programs | |-----------------+------+-----+--------------------------------| | |V:105,| |audio and video processing | |pipewire-alsa |I:157 |206 |engine multimedia server - audio| | | | |server to replace ALSA |     |-----------------+------+-----+--------------------------------| | |V:160,| |audio and video processing | |pipewire-pulse |I:214 |50 |engine multimedia server - audio| | | | |server to replace PulseAudio | |-----------------+------+-----+--------------------------------| |pulseaudio |V:256,|6472 |PulseAudio-Server | | |I:308 | | | |-----------------+------+-----+--------------------------------| |libpulse0 |V:413,|975 |PulseAudio-Client-Bibliothek | | |I:580 | | | |-----------------+------+-----+--------------------------------| |jackd |V:2, |9 |JACK Audio Connection Kit (JACK)| | |I:18 | |-Server (niedrige Latenzzeiten) | |-----------------+------+-----+--------------------------------| | |V:1, | |JACK Audio Connection Kit (JACK)| |libjack0 |I:9 |326 |-Bibliothek (niedrige | | | | |Latenzzeiten) | |-----------------+------+-----+--------------------------------| |libgstreamer1.0-0|V:429,|4455 |GStreamer: GNOME-Sound-Engine | | |I:597 | | | |-----------------+------+-----+--------------------------------| |libphonon4qt5-4 |V:72, |594 |Phonon: KDE-Sound-Engine | | |I:162 | | | +---------------------------------------------------------------+ 9.5.8. Deaktivieren des Bildschirmschoners     Verwenden Sie folgende Befehle, um den Bildschirmschoner zu deaktivieren: Tabelle 9.16. Liste von Befehlen zur Deaktivierung des Bildschirmschoners +---------------------------------------------------------------+ | Umgebung | Befehl | |------------------------------------------+--------------------| |Linux-Konsole |setterm -powersave | | |off |     |------------------------------------------+--------------------| |X-Window (Bildschirmschoner ausschalten) |xset s off | |------------------------------------------+--------------------| |X-Window (dpms deaktivieren) |xset -dpms | |------------------------------------------+--------------------| |X-Window (grafische Oberfläche zur |xscreensaver-command| |Konfiguration des Bildschirmschoners) |-prefs | +---------------------------------------------------------------+ 9.5.9. Ausschalten von Pieptönen Man kann immer den Stecker des internen PC-Lautsprechers     abziehen, um jegliche Pieptöne loszuwerden, aber auch über das Entfernen des pcspkr-Kernel-Moduls kann dies erreicht werden. Folgender Befehl verhindert, dass das readline(3)-Programm, das     von bash(1) genutzt wird, einen Piepton ausgibt, wenn es ein Alarm-Zeichen (ASCII=7) empfängt:     $ echo "set bell-style none">> ~/.inputrc 9.5.10. Arbeitsspeichernutzung     Es gibt zwei Ressourcen, über die Sie die aktuelle Situation zur Arbeitsspeichernutzung abfragen können: * Die Boot-Meldungen des Kernels in "/var/log/dmesg" enthalten die exakte Größe des verfügbaren Arbeitsspeichers.     * free(1) und top(1) zeigen Informationen über Arbeitsspeicher-Ressourcen auf dem laufenden System an.     Hier ein Beispiel: # grep '\] Memory' /var/log/dmesg [ 0.004000] Memory: 990528k/1016784k available (1975k kernel code, 25868k reserved, 931k data, 296k init) $ free -k     total used free shared buffers cached Mem: 997184 976928 20256 0 129592 171932 -/+ buffers/cache: 675404 321780 Swap: 4545576 4 4545572 Sie fragen sich vielleicht: "Warum sagt dmesg mir, dass 990 MB     frei sind, während free -k sagt, 320 MB seien frei. Da fehlen mehr als 600 MB …" Sorgen Sie sich nicht über den hohen Wert von "used" und die     kleine Größe von "free" in der "Mem:"-Zeile; schauen Sie sich stattdessen die Werte darunter an (inklusive Puffer/Cache, 675404 und 321780 in obigem Beispiel) und entspannen Sie sich.     Auf meinem MacBook mit 1GB=1048576k DRAM (das Grafik-System stiehlt einiges davon) sehe ich Folgendes: Tabelle 9.17. Liste der gemeldeten Arbeitsspeichergrößen +------------------------------------------------------+ | gemeldet | Größe | |-----------------------+------------------------------| |absolute Größe in dmesg|1016784k = 1GB - 31792k |     |-----------------------+------------------------------| |frei in dmesg |990528k | |-----------------------+------------------------------| |absolut auf der Shell |997184k | |-----------------------+------------------------------| |frei auf der Shell |20256k (aber effektiv 321780k)| +------------------------------------------------------+ 9.5.11. Systemsicherheits- und Integritätsüberprüfung     Schlechte Systemwartung könnte Ihr System für Angriffe von extern anfällig machen.     Um eine Systemsicherheits- und Integritätsüberprüfung durchzuführen, sollten Sie mit folgendem beginnen: * dem debsums-Paket, lesen Sie dazu debsums(1) und Abschnitt 2.5.2, „"Release"-Datei im Wurzelverzeichnis und Authentizität“; * dem chkrootkit-Paket, lesen Sie dazu chkrootkit(1);     * der clamav-Paketfamilie, lesen Sie dazu clamscan(1) und freshclam(1); * der Debian Sicherheits-FAQ; * der Anleitung zum Absichern von Debian. Tabelle 9.18. Liste von Werkzeugen für eine Systemsicherheits- und Integritätsüberprüfung +---------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |----------+------+-----+---------------------------------------| | |V:6, | |Daemon, um Anomalien in den | |logcheck |I:7 |110 |System-Logdateien per Mail an den | | | | |Administrator zu melden | |----------+------+-----+---------------------------------------| | |V:5, | |Hilfsprogramm, um installierte | |debsums |I:35 |98 |Paketdateien anhand von MD5-Prüfsummen | | | | |zu verifizieren | |----------+------+-----+---------------------------------------| |chkrootkit|V:8, |925 |rootkit-Erkennungsprogramm | | |I:17 | | | |----------+------+-----+---------------------------------------| |clamav |V:9, |27455|Antiviren-Programm für Unix - | | |I:45 | |Befehlszeilenschnittstelle |     |----------+------+-----+---------------------------------------| |tiger |V:1, |7800 |Sicherheitslücken im System melden | | |I:2 | | | |----------+------+-----+---------------------------------------| |tripwire |V:1, |5016 |Integritätsüberprüfung für Dateien und | | |I:2 | |Verzeichnisse | |----------+------+-----+---------------------------------------| |john |V:1, |471 |Programm zum aktiven Knacken von | | |I:9 | |Passwörtern | |----------+------+-----+---------------------------------------| | |V:1, | |Fortschrittliche | |aide |I:1 |293 |Intrusion-Detection-Umgebung - | | | | |statische Binärdatei | |----------+------+-----+---------------------------------------| |integrit |V:0, |2659 |Dateiintegritäts-Verifizierungsprogramm| | |I:0 | | | |----------+------+-----+---------------------------------------| |crack |V:0, |149 |Programm zum Erraten von Passwörtern | | |I:1 | | | +---------------------------------------------------------------+     Hier ein einfaches Skript, um nach Dateien mit typischerweise falschen Dateiberechtigungen (schreibbar für alle) zu suchen:     # find / -perm 777 -a \! -type s -a \! -type l -a \! \( -type d -a -perm 1777 \) Achtung     Da das debsums-Paket MD5-Prüfsummen verwendet, die lokal gespeichert sind, kann ihm als Sicherheits-Audit-Werkzeug gegen bösartige Angriffe nicht vollständig vertraut werden. 9.6. Tipps zur Speicherung von Daten Indem Sie Ihr System mit einer Linux Live-CD oder einer     Debian-Installer-CD im Rettungsmodus starten, können Sie auf einfache Weise den Speicher auf Ihrem Boot-Laufwerk neu konfigurieren. Teilweise werden Geräte vom grafischen Arbeitsplatzsystem     automatisch eingebunden. Solche Geräte müssen Sie dann händisch über die Befehlszeile vom System trennen (mittels umount(8)), bevor Sie daran arbeiten können. 9.6.1. Verwendung des Plattenplatzes     Der verwendete Plattenplatz kann mit Programmen aus den Paketen mount, coreutils und xdu beurteilt werden: * mount(8) gibt Informationen über alle eingebundenen Dateisysteme (= "Laufwerke") aus.     * df(1) gibt Informationen über den verwendeten Plattenplatz für das Dateisystem aus. * du(1) gibt Informationen über den verwendeten Plattenplatz für den Verzeichnisbaum aus. Tipp     Mit "du -k . |xdu", "sudo du -k -x / |xdu" usw. können Sie die Ausgabe von du(8) an xdu(1x) weiterleiten, um eine grafische und interaktive Präsentation zu erhalten. 9.6.2. Konfiguration der Festplattenpartitionen Bei der Konfiguration von Laufwerkspartitionen können Sie erwägen, parted(8) zu verwenden (obwohl fdisk(8) lange als     Standard angesehen wurde). Die Begriffe "Partitionstabelle", "Disk partitioning data", "Partition map" und "Disk label" werden alle gleichbedeutend verwendet. Ältere PCs verwenden das klassische Schema des Master Boot Record     (MBR) und legen die Partitionstabelle im ersten Sektor, also im LBA-Sektor 0 (512 Byte) ab. Aktuelle PCs mit Unified Extensible Firmware Interface (UEFI),     inklusive Intel-basierten Macs, verwenden teilweise das GUID Partition Table (GPT)-Schema, bei dem die Partitionstabelle nicht im ersten Sektor liegt. Obwohl fdisk(8) lange Zeit das Standardwerkzeug zur     Laufwerkspartitionierung war, ist parted(8) dabei, ihm den Rang abzulaufen. Tabelle 9.19. Liste von Paketen für die Partitionierung +---------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |----------+------+-----+---------------------------------------| |util-linux|V:881,|5283 |verschiedene System-Werkzeuge inklusive| | |I:999 | |fdisk(8) und cfdisk(8) | |----------+------+-----+---------------------------------------| |parted |V:417,|122 |GNU Parted - Programm zum Anlegen / | | |I:568 | |Ändern von Partitionen |     |----------+------+-----+---------------------------------------| |gparted |V:15, |2175 |GNOME Partitionseditor, basierend auf | | |I:102 | |libparted | |----------+------+-----+---------------------------------------| |gdisk |V:338,|885 |Partitionseditor für GPT/ | | |I:511 | |MBR-Hybrid-Laufwerke | |----------+------+-----+---------------------------------------| | |V:22, | |Programm zur Erzeugung von | |kpartx |I:33 |77 |Gerätezuordnungen (device mappings) für| | | | |Partitionen | +---------------------------------------------------------------+ Achtung Obwohl parted(8) vorgibt, Dateisysteme erzeugen und auch     nachträglich in der Größe verändern zu können, ist es sicherer, für solche Dinge gut betreute und spezialisierte Werkzeuge wie mkfs(8) (mkfs.msdos(8), mkfs.ext2(8), mkfs.ext3(8), mkfs.ext4(8), …) und resize2fs(8) zu verwenden. Anmerkung Um zwischen GPT und MBR zu wechseln, müssen Sie die ersten paar     Blöcke der Platte löschen (lesen Sie dazu Abschnitt 9.8.6, „Leeren von Dateiinhalten“) und "parted /dev/sdx mklabel gpt" oder "parted /dev/sdx mklabel msdos" nutzen, um die gewünschte Einstellung neu zu setzen. Bitte beachten Sie, dass hierbei "msdos" für MBR verwendet wird. 9.6.3. Zugriff auf Partitionen über die UUID-Kennung Obwohl aufgrund der Neukonfiguration einer Partition oder der Aktivierungsreihenfolge von Wechseldatenträgern Laufwerke von einem zum anderen Mal unterschiedliche Laufwerksnamen haben     können, gibt es auch eine Möglichkeit, konsistente Bezeichnungen für den Laufwerkszugriff zu verwenden. Dies ist ebenfalls hilfreich, wenn Sie mehrere Festplatten haben und Ihr BIOS/UEFI die Gerätenamen nicht jedes Mal identisch zuweist. * mount(8) kann über die Option "-U" ein blockorientiertes Gerät mittels seiner UUID-Kennung einbinden, statt dessen Gerätedateinamen (wie z.B. "/dev/sda3") zu nutzen.     * "/etc/fstab" (lesen Sie hierzu auch fstab(5)) kann UUID verwenden. * Auch Bootloader (Abschnitt 3.1.2, „Stufe 2: der Bootloader“) können unter Umständen die UUID benutzen. Tipp Sie können die UUID eines blockorientierten Gerätes mit blkid(8)     abfragen. Sie können die UUID und weitere Informationen auch mit "lsblk -f" abfragen. 9.6.4. LVM2 LVM2 ist ein Logical Volume Manager für den Linux-Kernel. Mit     LVM2 können Partitionen auf logischen Volumes erzeugt werden statt auf physikalischen Festplatten.     LVM erfordert folgendes: * device-mapper-Unterstützung im Linux-Kernel (Standardeinstellung für Debian-Kernel);     * die Userspace-Bibliothek zur Unterstützung von device-mapper (libdevmapper*-Paket); * die Userspace-LVM2-Werkzeuge (lvm2-Paket).     Lehrreiche Informationen über LVM2 finden Sie mittels folgender Handbuchseiten: * lvm(8): Grundlagen des LVM2-Mechanismus' (Liste aller LVM2-Befehle); * lvm.conf(5): Konfigurationsdatei für LVM2;     * lvs(8): Informationen über logische Volumes ausgeben; * vgs(8): Informationen über Volume-Gruppen ausgeben; * pvs(8): Informationen über physikalische Volumes ausgeben. 9.6.5. Konfiguration von Dateisystemen     Für das ext4-Dateisystem enthält das e2fsprogs-Paket folgendes: * mkfs.ext4(8) zur Erzeugung neuer ext4-Dateisysteme; * fsck.ext4(8) zur Überprüfung und Reparatur vorhandener ext4-Dateisysteme;     * tune2fs(8) zur Konfiguration des Superblocks von ext4-Dateisystemen; * debugfs(8) für interaktive Fehlersuche in ext4-Dateisystemen (es enthält den undel-Befehl, um gelöschte Dateien wiederherzustellen). Die Befehle mkfs(8) und fsck(8) werden durch das e2fsprogs-Paket bereitgestellt und sind Frontends für Dateisystem-abhängige     Programme (mkfs.dateisystemtyp und fsck.dateisystemtyp). Für ext4 sind das mkfs.ext4(8) und fsck.ext4(8) (dies sind symbolischer Link auf mke2fs(8) und e2fsck(8)).     Ähnliche Befehle sind für jedes von Linux unterstützte Dateisystem verfügbar. Tabelle 9.20. Liste von Paketen für das Dateisystem-Management +---------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |--------------+------+-----+-----------------------------------| |e2fsprogs |V:767,|1499 |Hilfsprogramme für ext2/ext3/ | | |I:999 | |ext4-Dateisysteme | |--------------+------+-----+-----------------------------------| |btrfs-progs |V:44, |5078 |Hilfsprogramme für das | | |I:72 | |Btrfs-Dateisystem | |--------------+------+-----+-----------------------------------| |reiserfsprogs |V:12, |473 |Hilfsprogramme für das | | |I:25 | |Reiserfs-Dateisystem | |--------------+------+-----+-----------------------------------| |zfsutils-linux|V:29, |1762 |Hilfsprogramme für das | | |I:30 | |OpenZFS-Dateisystem | |--------------+------+-----+-----------------------------------| | |V:196,| |Hilfsprogramme für das | |dosfstools |I:541 |315 |FAT-Dateisystem (Microsoft: MS-DOS,| | | | |Windows) | |--------------+------+-----+-----------------------------------| |exfatprogs |V:29, |301 |Hilfsprogramme für das von Samsung | | |I:371 | |betreute exFAT-Dateisystem | |--------------+------+-----+-----------------------------------| | |V:5, | |Treiber für das Lesen/Schreiben des| |exfat-fuse |I:120 |73 |exFAT-Dateisystems (Microsoft) über|     | | | |FUSE | |--------------+------+-----+-----------------------------------| | |V:4, | |Hilfsprogramme für das | |exfat-utils |I:106 |231 |exFAT-Dateisystem vom | | | | |exfat-fuse-Autor | |--------------+------+-----+-----------------------------------| |xfsprogs |V:21, |3476 |Hilfsprogramme für das | | |I:95 | |XFS-Dateisystem (SGI: IRIX) | |--------------+------+-----+-----------------------------------| | |V:197,| |Treiber für das Lesen/Schreiben des| |ntfs-3g |I:513 |1474 |NTFS-Dateisystems (Microsoft: | | | | |Windows NT, ...) über FUSE | |--------------+------+-----+-----------------------------------| |jfsutils |V:0, |1577 |Hilfsprogramme für das | | |I:8 | |JFS-Dateisystem (IBM: AIX, OS/2) | |--------------+------+-----+-----------------------------------| |reiser4progs |V:0, |1367 |Hilfsprogramme für das | | |I:2 | |Reiser4-Dateisystem | |--------------+------+-----+-----------------------------------| |hfsprogs |V:0, |394 |Hilfsprogramme für HFS- und HFS | | |I:4 | |Plus-Dateisysteme (Apple: Mac OS) | |--------------+------+-----+-----------------------------------| | |V:5, | |Programm, um freie Blöcke auf ext2/| |zerofree |I:131 |25 |3/4-Dateisystemen mit Nullen zu | | | | |überschreiben | +---------------------------------------------------------------+ Tipp Ext4 ist das Standard-Dateisystem für Linux-Systeme und Sie sollten dies verwenden, außer Sie haben einen bestimmten Grund, ein anderes zu nutzen.     Den aktuellen Status zu Btrfs finden Sie im Debian Wiki und im kernel.org Wiki. Man geht davon aus, dass dies nach ext4 das neue Standard-Dateisystem wird. Einige Werkzeuge erlauben den Zugriff auf Dateisysteme ohne entsprechende Unterstützung im Linux-Kernel (lesen Sie dazu Abschnitt 9.8.2, „Manipulieren von Dateien ohne Einbinden der Festplatte“). 9.6.6. Dateisystemerzeugung und Integritätsüberprüfung Der mkfs(8)-Befehl erzeugt unter Linux ein Dateisystem. Mit fsck     (8) führen Sie eine Integritätsüberprüfung oder Reparatur des Dateisystems durch. Standardmäßig gibt es jetzt auf Debian-Systemen nach der     Erzeugung des Dateisystems keinen periodischen Dateisystem-Check (fsck) mehr. Achtung     Es ist grundsätzlich nicht sicher, fsck auf eingebundenen Dateisystemen laufen zu lassen. Tipp Sie können den fsck(8)-Befehl auf allen Dateisystemen inklusive dem root-Dateisystem (/) gefahrlos beim Reboot ausführen, indem Sie "enable_periodic_fsck" in "/etc/mke2fs.conf" setzen und den     Max-Wert für die mount-Vorgänge mittels "tune2fs -c0 /dev/ partitionsname" auf 0 setzen. Details finden Sie in mke2fs.conf (5) und tune2fs(8). In "/var/log/fsck/" finden Sie Ergebnisse von dem fsck(8)-Lauf, der bei jedem Systemstart durch das Boot-Skript durchgeführt wird. 9.6.7. Optimierung von Dateisystemen über mount-Optionen     Die grundlegende statische Dateisystem-Konfiguration wird in "/ etc/fstab" festgelegt. Zum Beispiel: «file system» «mount point» «type» «options» «dump» «pass» proc /proc proc defaults 0 0     UUID=709cbe4c-80c1-56db-8ab1-dbce3146d2f7 / ext4 errors=remount-ro 0 1 UUID=817bae6b-45d2-5aca-4d2a-1267ab46ac23 none swap sw 0 0 /dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0 Tipp     Die UUID (Näheres in Abschnitt 9.6.3, „Zugriff auf Partitionen über die UUID-Kennung“) kann statt der normalen Namen für blockorientierte Geräte wie "/dev/sda1", "/dev/sda2" … verwendet werden, um das Gerät zu identifizieren.     Seit Linux 2.6.30 ist das Standardverhalten die "relatime"-Option.     Lesen Sie fstab(5) und mount(8). 9.6.8. Optimierung von Dateisystemen über den Superblock     Die Charakteristik eines Dateisystems kann über seinen Superblock optimiert werden; verwenden Sie dazu den Befehl tune2fs(8): * "sudo tune2fs -l /dev/hda1" zeigt den Inhalt des Dateisystem-Superblocks auf "/dev/hda1" an. * "sudo tune2fs -c 50 /dev/hda1" ändert den Intervall zur Überprüfung des Dateisystems (Ausführung von fsck während des Systemstarts) für "/dev/hda1" auf jeden 50. Start.     * "sudo tune2fs -j /dev/hda1" fügt Journalfunktionalität zum Dateisystem hinzu; das bedeutet, dass ein ext2-Dateisystem auf "/dev/hda1" nach ext3 konvertiert wird. (Führen Sie dies nur bei einem nicht eingebundenen Dateisystem durch.) * "sudo tune2fs -O extents,uninit_bg,dir_index /dev/hda1 && fsck -pf /dev/hda1" konvertiert ein ext3-Dateisystem auf "/ dev/hda1" nach ext4. (Führen Sie dies nur bei einem nicht eingebundenen Dateisystem durch.) Tipp     Ungeachtet seines Namens funktioniert tune2fs(8) nicht nur für ext2-Dateisysteme, sondern auch für ext3 und ext4. 9.6.9. Optimierung der Festplatte Warnung     Bitte überprüfen Sie Ihre Hardware und lesen Sie die Handbuchseite von hdparm(8), bevor Sie mit der Festplattenkonfiguration herumspielen, da dies ziemlich gefährlich für die Datenintegrität sein kann. Sie können die Zugriffsgeschwindigkeit einer Festplatte testen, für "/dev/hda" z.B. mit "hdparm -tT /dev/hda". Bei einigen Festplatten, die über (E)IDE angeschlossen sind, kann diese über     "hdparm -q -c3 -d1 -u1 -m16 /dev/hda" erhöht werden; dabei wird " (E)IDE 32-Bit I/O-Unterstützung" aktiviert, außerdem das "using_dma-Flag" und das "interrupt-unmask-Flag" gesetzt sowie die (gefährliche!) "Multiple 16 Sector I/O"-Einstellung aktiviert. Sie können die Cache-Funktionalität für das Schreiben auf eine     Festplatte testen, für "/dev/sda" z.B. mit "hdparm -W /dev/sda". Mit "hdparm -W 0 /dev/sda" deaktivieren Sie diese Funktion. Im Falle von Problemen beim Lesen von schlecht gepressten CD-ROMs     in modernen Hochgeschwindigkeits-CD-ROM-Laufwerken können Sie diese möglicherweise trotzdem lesen, indem Sie mit "setcd -x 2" die Geschwindigkeit herabsetzen. 9.6.10. Optimierung von Solid State Disks     Eine Solid State Disk (SSD) wird mittlerweile automatisch detektiert. Reduzieren Sie unnötige Laufwerkszugriffe, um die     Laufwerksabnutzung zu minimieren, indem Sie "tmpfs" für das Einbinden schnell veränderlicher Daten in Ihrer /etc/fstab verwenden. 9.6.11. SMART verwenden, um Festplattenausfälle vorherzusehen Sie können Ihre Festplatte mit dem smartd(8)-Daemon überwachen     und protokollieren, sofern diese mit dem SMART-Standard kompatibel ist: 1. Aktivieren Sie die SMART-Funktionalität im BIOS. 2. Installieren Sie das Paket smartmontools. 3. Identifizieren Sie Ihre Festplatten, indem Sie sie mit df(1) auflisten. + Wir gehen hier davon aus, dass die zu überwachende Festplatte als "/dev/hda" auftaucht. 4. Überprüfen Sie die Ausgabe von "smartctl -a /dev/hda", um     festzustellen, ob die SMART-Funktionalität derzeit wirklich aktiv ist. + Falls nicht, aktivieren Sie sie mit "smartctl -s on -a / dev/hda". 5. Aktivieren Sie den smartd(8)-Daemon wie folgt: + Entfernen Sie das Kommentarzeichen vor "start_smartd=yes" in der Datei "/etc/default/smartmontools". + Führen Sie einen Neustart des smartd(8)-Daemons über "sudo systemctl restart smartmontools" durch. Tipp     Die Einstellungen des smartd(8)-Daemons können über die /etc/ smartd.conf-Datei angepasst werden; dazu gehört auch die Einstellung, auf welchem Wege Sie über Warnungen informiert werden möchten. 9.6.12. Angeben eines Verzeichnisses für temporäre Dateien über $TMPDIR Anwendungen erzeugen temporäre Dateien normalerweise unterhalb des temporären Verzeichnisses "/tmp". Falls "/tmp" nicht genug     freien Speicherplatz bietet, können Sie für Anwendungen, die sich diesbezüglich korrekt verhalten, auch mittels der $TMPDIR-Variable festlegen, welches Verzeichnis für solche temporären Daten genutzt werden soll. 9.6.13. Vergrößerung des nutzbaren Speicherplatzes mittels LVM Partitionen, die bei der Installation über den Logical Volume Manager (LVM) (Linux-Funktionalität) erzeugt wurden, können     einfach und ohne größere System-Neukonfiguration in der Größe verändert werden, indem Speicherplatz hinzugefügt oder entfernt wird, und zwar über die Grenzen einzelner Laufwerke hinweg. 9.6.14. Vergrößerung des nutzbaren Speicherplatzes über das Einbinden anderer Partitionen Wenn Sie eine leere Partition (z.B. "/dev/sdx") haben, können Sie     sie mit mkfs.ext4(1) formatieren und dann mit mount(8) in ein Verzeichnis einbinden, in dem Sie mehr Platz benötigen (Sie müssen die originalen Daten kopieren): $ sudo mv work-dir old-dir $ sudo mkfs.ext4 /dev/sdx     $ sudo mount -t ext4 /dev/sdx work-dir $ sudo cp -a old-dir/* work-dir $ sudo rm -rf old-dir Tipp Alternativ können Sie eine leere Festplatten-Image-Datei (lesen     Sie dazu Abschnitt 9.7.5, „Eine leere Abbild-Datei erstellen“) als loop-device einbinden (Näheres dazu in Abschnitt 9.7.3, „Einbinden der Festplatten-Abbild-Datei“). Die reelle Größe des Festplatten-Images wächst mit den wirklich darin abgelegten Daten. 9.6.15. Vergrößerung des nutzbaren Speicherplatzes, indem ein anderes Verzeichnis mit "mount --bind" eingebunden wird Wenn Sie ein leeres Verzeichnis (z.B. "/pfad/zu/leer") auf einer anderen Partition haben, auf der noch Platz frei ist, können Sie     dieses Verzeichnis mit der mount-Option "--bind" in ein anderes Verzeichnis (z.B. "arbeit") einbinden, in dem Sie mehr Speicherplatz benötigen:     $ sudo mount --bind /path/to/emp-dir work-dir 9.6.16. Vergrößerung des nutzbaren Speicherplatzes, indem ein anderes Verzeichnis mit "Overlay-mounting" eingebunden wird Wenn Sie freien Platz auf einer anderen Partition haben (mit 2 Verzeichnissen wie "/pfad/zu/leer" und "/pfad/zu/arbeit"), können Sie dort ein Verzeichnis erstellen und dieses einem anderen alten     Verzeichnis (z.B. "/pfad/zu/alt") "überstülpen", in dem Sie mehr Platz benötigen. Dies wird ermöglicht durch die OverlayFS-Funktionalität im Linux-Kernel 3.18 oder neuer (ab Debian Stretch 9.0).     $ sudo mount -t overlay overlay \ -olowerdir=/path/to/old-dir,upperdir=/path/to/empty,workdir=/path/to/work Hierbei sollten "/pfad/zu/leer" und "/pfad/zu/nutzverzeichnis"     auf einer schreibbaren (RW) Partition liegen, um "/pfad/zu/alt" zu überlagern. 9.6.17. Vergrößerung des nutzbaren Speicherplatzes über einen symbolischen Link Achtung     Diese Methode ist überholt. Manche Software könnte nicht korrekt funktionieren mit "symbolischen Links auf ein Verzeichnis". Verwenden Sie stattdessen einen der oben beschriebenen "mounting"-basierten Ansätze. Wenn Sie ein leeres Verzeichnis (z.B. "/pfad/zu/leer") auf einer     anderen Partition haben, auf der noch Platz frei ist, können Sie mit ln(8) einen symbolischen Link zu einem anderen Verzeichnis erstellen: $ sudo mv work-dir old-dir $ sudo mkdir -p /path/to/emp-dir     $ sudo ln -sf /path/to/emp-dir work-dir $ sudo cp -a old-dir/* work-dir $ sudo rm -rf old-dir Warnung     Verwenden Sie solch einen symbolischen Link auf ein Verzeichnis nicht für Verzeichnisse, die von dem System verwaltet werden, wie z.B. "/opt". Solch ein Link könnte bei einer Systemhochrüstung überschrieben werden. 9.7. Das Festplatten-Abbild     Hier wird die Veränderung eines Festplatten-Abbilds behandelt. 9.7.1. Erzeugung der Festplatten-Abbild-Datei Die Festplatten-Abbild-Datei ("disk.img") eines nicht     eingebundenen Gerätes, z.B. der zweiten SCSI- oder Serial-ATA-Festplatte "/dev/sdb", kann mit cp(1) oder dd(1) wie folgt erzeugt werden:     # cp /dev/sdb disk.img # dd if=/dev/sdb of=disk.img Ein Abbild des Master Boot Record (MBR), wie er in traditionellen PCs verwendet wird (lesen Sie auch Abschnitt 9.6.2,     „Konfiguration der Festplattenpartitionen“) und der im ersten Sektor der primären IDE-Festplatte abgelegt ist, kann mit dd(1) erstellt werden, wie hier: # dd if=/dev/hda of=mbr.img bs=512 count=1     # dd if=/dev/hda of=mbr-nopart.img bs=446 count=1 # dd if=/dev/hda of=mbr-part.img skip=446 bs=1 count=66 * "mbr.img": der MBR mit der Partitionstabelle     * "mbr-nopart.img": der MBR ohne Partitionstabelle * "mbr-part.img": die Partitionstabelle nur vom MBR     Falls Sie eine SCSI- oder Serial-ATA-Festplatte als Boot-Festplatte haben, ersetzen Sie "/dev/hda" durch "/dev/sda". Falls Sie ein Abbild einer einzelnen Partition der Festplatte     erstellen möchten, ersetzen Sie "/dev/hda" z.B. durch "/dev/ hda1". 9.7.2. Direkt auf eine Festplatte schreiben Die Festplatten-Abbild-Datei "disk.img" kann wie folgt auf ein     nicht eingebundenes Laufwerk passender Größe (hier z.B. auf die zweite SCSI- oder Serial-ATA-Festplatte "/dev/sdb") geschrieben werden:     # dd if=disk.img of=/dev/sdb Ähnlich dazu kann mit folgendem Befehl die Abbild-Datei "partition.img" einer einzelnen Partition auf eine nicht     eingebundene Partition passender Größe (hier z.B. die erste Partition der zweiten SCSI- oder Serial-ATA-Festplatte "/dev/ sdb1") geschrieben werden:     # dd if=partition.img of=/dev/sdb1 9.7.3. Einbinden der Festplatten-Abbild-Datei Das Festplatten-Abbild "partition.img", welches ein einfaches     Partitions-Abbild enthält, kann mittels einem loop device wie folgt eingebunden und anschließend wieder gelöst werden: # losetup --show -f partition.img /dev/loop0 # mkdir -p /mnt/loop0     # mount -t auto /dev/loop0 /mnt/loop0 ...hack...hack...hack # umount /dev/loop0 # losetup -d /dev/loop0     Das kann noch weiter vereinfacht werden: # mkdir -p /mnt/loop0     # mount -t auto -o loop partition.img /mnt/loop0 ...hack...hack...hack # umount partition.img     Jede Partition des Festplatten-Abbilds "disk.img", das mehrere Partitionen enthält, kann mittels loop device eingebunden werden. # losetup --show -f -P disk.img /dev/loop0 # ls -l /dev/loop0* brw-rw---- 1 root disk 7, 0 Apr 2 22:51 /dev/loop0 brw-rw---- 1 root disk 259, 12 Apr 2 22:51 /dev/loop0p1 brw-rw---- 1 root disk 259, 13 Apr 2 22:51 /dev/loop0p14 brw-rw---- 1 root disk 259, 14 Apr 2 22:51 /dev/loop0p15 # fdisk -l /dev/loop0 Disk /dev/loop0: 2 GiB, 2147483648 bytes, 4194304 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: 6A1D9E28-C48C-2144-91F7-968B3CBC9BD1     Device Start End Sectors Size Type /dev/loop0p1 262144 4192255 3930112 1.9G Linux root (x86-64) /dev/loop0p14 2048 8191 6144 3M BIOS boot /dev/loop0p15 8192 262143 253952 124M EFI System Partition table entries are not in disk order. # mkdir -p /mnt/loop0p1 # mkdir -p /mnt/loop0p15 # mount -t auto /dev/loop0p1 /mnt/loop0p1 # mount -t auto /dev/loop0p15 /mnt/loop0p15 # mount |grep loop /dev/loop0p1 on /mnt/loop0p1 type ext4 (rw,relatime) /dev/loop0p15 on /mnt/loop0p15 type vfat (rw,relatime,fmask=0002,dmask=0002,allow_utime=0020,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro) ...hack...hack...hack # umount /dev/loop0p1 # umount /dev/loop0p15 # losetup -d /dev/loop0 Alternativ können Sie ähnliche Funktionalitäten auch erreichen,     indem Sie wie hier die device-mapper-Geräte nutzen, die von kpartx(8) aus dem kpartx-Paket erzeugt werden: # kpartx -a -v disk.img add map loop0p1 (253:0): 0 3930112 linear 7:0 262144 add map loop0p14 (253:1): 0 6144 linear 7:0 2048 add map loop0p15 (253:2): 0 253952 linear 7:0 8192 # fdisk -l /dev/loop0 Disk /dev/loop0: 2 GiB, 2147483648 bytes, 4194304 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: 6A1D9E28-C48C-2144-91F7-968B3CBC9BD1 Device Start End Sectors Size Type /dev/loop0p1 262144 4192255 3930112 1.9G Linux root (x86-64) /dev/loop0p14 2048 8191 6144 3M BIOS boot /dev/loop0p15 8192 262143 253952 124M EFI System     Partition table entries are not in disk order. # ls -l /dev/mapper/ total 0 crw------- 1 root root 10, 236 Apr 2 22:45 control lrwxrwxrwx 1 root root 7 Apr 2 23:19 loop0p1 -> ../dm-0 lrwxrwxrwx 1 root root 7 Apr 2 23:19 loop0p14 -> ../dm-1 lrwxrwxrwx 1 root root 7 Apr 2 23:19 loop0p15 -> ../dm-2 # mkdir -p /mnt/loop0p1 # mkdir -p /mnt/loop0p15 # mount -t auto /dev/mapper/loop0p1 /mnt/loop0p1 # mount -t auto /dev/mapper/loop0p15 /mnt/loop0p15 # mount |grep loop /dev/loop0p1 on /mnt/loop0p1 type ext4 (rw,relatime) /dev/loop0p15 on /mnt/loop0p15 type vfat (rw,relatime,fmask=0002,dmask=0002,allow_utime=0020,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro) ...hack...hack...hack # umount /dev/mapper/loop0p1 # umount /dev/mapper/loop0p15 # kpartx -d disk.img 9.7.4. Eine Festplatten-Abbild-Datei bereinigen Eine Festplatten-Abbild-Datei (hier "disk.img") kann wie folgt     von allen gelöschten Dateien bereinigt und in eine gesäuberte kompakte Abbild-Datei "new.img" geschrieben werden: # mkdir old; mkdir new # mount -t auto -o loop disk.img old # dd bs=1 count=0 if=/dev/zero of=new.img seek=5G # mount -t auto -o loop new.img new     # cd old # cp -a --sparse=always ./ ../new/ # cd .. # umount new.img # umount disk.img Wenn "disk.img" auf einem ext2-, ext3- oder ext4-Dateisystem     liegt, können Sie auch zerofree(8) aus dem zerofree-Paket verwenden, wie hier gezeigt: # losetup --show -f disk.img /dev/loop0     # zerofree /dev/loop0 # cp --sparse=always disk.img new.img # losetup -d /dev/loop0 9.7.5. Eine leere Abbild-Datei erstellen     Ein leeres Festplatten-Abbild "disk.img", das bis zu einer Größe von 5 GiB anwachsen kann, erzeugen Sie mit dd(1) wie folgt:     $ dd bs=1 count=0 if=/dev/zero of=disk.img seek=5G     Statt dd(1) kann hier auch das dafür spezialisierte fallocate(8) verwendet werden.     Mittels eines loop device erstellen Sie auf diesem Festplatten-Abbild "disk.img" wie folgt ein ext4-Dateisystem: # losetup --show -f disk.img /dev/loop0 # mkfs.ext4 /dev/loop0 ...hack...hack...hack     # losetup -d /dev/loop0 $ du --apparent-size -h disk.img 5.0G disk.img $ du -h disk.img 83M disk.img Die Dateigröße von "disk.img" ist 5.0 GiB, aber der aktuell von     ihm verwendete Speicherplatz ist lediglich 83 MiB. Diese Diskrepanz ist möglich, da ext4 die Verwendung von Sparse-Dateien unterstützt. Tipp     Der wirklich genutzte Speicherplatz von Sparse-Dateien wächst mit den Daten, die in diese hineingeschrieben werden. Die Nutzung von Befehlen ähnlich denen aus Abschnitt 9.7.3, „Einbinden der Festplatten-Abbild-Datei“ auf Geräten, die von     loop device oder device-mapper-Geräten erzeugt wurden, erlaubt Ihnen ebenfalls, das Abbild "disk.img" über parted(8) oder fdisk (8) zu erzeugen, sowie Dateisysteme mit mkfs.ext4(8), mkswap(8) usw. zu erstellen. 9.7.6. Erstellen einer ISO9660-Abbild-Datei Eine ISO9660-Abbild-Datei "cd.iso" aus einem Quellverzeichnisbaum     (hier in "quell_verzeichnis") kann mit genisoimage(1) aus dem cdrkit-Paket erstellt werden:     # genisoimage -r -J -T -V volume_id -o cd.iso source_directory Ähnlich dazu kann ein boot-fähiges ISO9660-Abbild "cdboot.iso"     aus einem Verzeichnisbaum ("quell_verzeichnis") erstellt werden, der dem des debian-installer ähnelt: # genisoimage -r -o cdboot.iso -V volume_id \     -b isolinux/isolinux.bin -c isolinux/boot.cat \ -no-emul-boot -boot-load-size 4 -boot-info-table source_directory     Hier wird der Isolinux-Bootloader zum Booten verwendet (Näheres in Abschnitt 3.1.2, „Stufe 2: der Bootloader“). Sie können die Berechnung der md5sum-Prüfsumme und die Erstellung     eines ISO9660-Abbilds direkt von der CD-ROM durchführen, wie hier gezeigt: $ isoinfo -d -i /dev/cdrom CD-ROM is in ISO 9660 format ...     Logical block size is: 2048 Volume size is: 23150592 ... # dd if=/dev/cdrom bs=2048 count=23150592 conv=notrunc,noerror | md5sum # dd if=/dev/cdrom bs=2048 count=23150592 conv=notrunc,noerror > cd.iso Warnung     Sie müssen wie oben gezeigt dafür sorgen, dass Sie nicht von einem Fehler im Linux-Kernel ("ISO9660 filesystem read ahead bug") betroffen werden; nur so können Sie korrekte Ergebnisse erhalten. 9.7.7. Direkt auf die CD/DVD-R/RW schreiben Tipp     Eine DVD ist für wodim(1) aus dem cdrkit-Paket lediglich eine große CD.     Sie finden nutzbare Laufwerke wie folgt:     # wodim --devices Dann wird die leere CD-R in das Laufwerk eingelegt und die     ISO9660-Abbild-Datei "cd.iso" wird wie folgt mit wodim(1) auf das Laufwerk (hier "/dev/hda") geschrieben:     # wodim -v -eject dev=/dev/hda cd.iso     Falls statt der CD-R eine CD-RW genutzt wird, verwenden Sie dies:     # wodim -v -eject blank=fast dev=/dev/hda cd.iso Tipp     Wenn Ihre Arbeitsplatzumgebung CDs automatisch einbindet, lösen Sie die Einbindung mit "sudo umount /dev/hda" über eine Konsole, bevor Sie den wodim(1)-Befehl ausführen. 9.7.8. Einbinden einer ISO9660-Abbild-Datei     Wenn "cd.iso" ein ISO9660-Abbild enthält, können Sie es wie folgt in "/cdrom" einbinden:     # mount -t iso9660 -o ro,loop cd.iso /cdrom Tipp     Moderne Arbeitsplatzsysteme binden Wechseldatenträger (wie mit ISO9660 formatierte CDs) automatisch ein (lesen Sie dazu Abschnitt 10.1.7, „Wechseldatenträger“). 9.8. Binärdaten     Hier behandeln wir das Bearbeiten von Binärdaten auf einem Speichermedium. 9.8.1. Betrachten und Bearbeiten von Binärdaten     Die grundlegendste Methode zum Betrachten von Binärdaten ist die Verwendung des Befehls "od -t x1". Tabelle 9.21. Liste von Paketen zum Betrachten und Bearbeiten von Binärdaten +---------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |---------------+------+-----+----------------------------------| | |V:880,| |grundlegendes Paket, das od(1) für| |coreutils |I:999 |18307|die Ausgabe von Dateien (HEX, | | | | |ASCII, OCTAL, …) enthält | |---------------+------+-----+----------------------------------| | |V:11, | |Hilfspaket, das hd(1) für die | |bsdmainutils |I:315 |17 |Ausgabe von Dateien (HEX, ASCII, | | | | |OCTAL, …) enthält | |---------------+------+-----+----------------------------------| |hexedit |V:0, |73 |Editor und Betrachter für |     | |I:9 | |Binärdateien (HEX, ASCII) | |---------------+------+-----+----------------------------------| |bless |V:0, |924 |voll ausgestatteter | | |I:2 | |Hexadezimal-Editor (GNOME) | |---------------+------+-----+----------------------------------| |okteta |V:1, |1585 |voll ausgestatteter | | |I:12 | |Hexadezimal-Editor (KDE4) | |---------------+------+-----+----------------------------------| |ncurses-hexedit|V:0, |130 |Editor und Betrachter für | | |I:1 | |Binärdateien (HEX, ASCII, EBCDIC) | |---------------+------+-----+----------------------------------| | |V:0, | |Editor und Betrachter für | |beav |I:0 |137 |Binärdateien (HEX, ASCII, EBCDIC, | | | | |OKTAL, …) | +---------------------------------------------------------------+ Tipp HEX wird als Acronym für das Hexadezimal-Format mit einer Basis (Radix) von 16 verwendet. OKTAL steht für das Oktal-Format mit     einer Basis von 8. ASCII ist der American Standard Code for Information Interchange, also für normalen englischsprachigen Text-Code. EBCDIC steht für den Extended Binary Coded Decimal Interchange Code, der auf IBM Mainframe-Betriebssystemen verwendet wird. 9.8.2. Manipulieren von Dateien ohne Einbinden der Festplatte     Diese Werkzeuge können Dateien lesen und schreiben, ohne dass die Festplatte dazu eingebunden werden muss: Tabelle 9.22. Liste von Paketen zur Manipulation von Dateien ohne Einbinden der Festplatte +---------------------------------------------------------------+ | Paket |Popcon |Größe| Beschreibung | |--------+-------+-----+----------------------------------------|     |mtools |V:8, |390 |Hilfsprogramme zur Bearbeitung von | | |I:63 | |MSDOS-Dateien | |--------+-------+-----+----------------------------------------| |hfsutils|V:0, |184 |Hilfsprogramme zur Bearbeitung von HFS- | | |I:5 | |und HFS+-Dateien | +---------------------------------------------------------------+ 9.8.3. Datenredundanz Software RAID-Systeme, bereitgestellt durch den Linux-Kernel,     bieten Datenredundanz auf Ebene des Kernel-Dateisystems und erreichen so eine sehr hohe Zuverlässigkeit der Datenspeicherung. Es gibt auch Werkzeuge, die Datenredundanz für Dateien auf Ebene     der Anwendungen ermöglichen und so ebenfalls eine sehr zuverlässige Datenspeicherung erlauben: Tabelle 9.23. Liste von Werkzeugen, um Redundanz für Dateien hinzuzufügen +---------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |----------+------+-----+---------------------------------------| |par2 |V:9, |268 |Parity Archive Volume Set, für die |     | |I:94 | |Dateiüberprüfung und -reparatur | |----------+------+-----+---------------------------------------| |dvdisaster|V:0, |1422 |Schutz vor Datenverlust/Kratzern/ | | |I:1 | |Alterung von CD-/DVD-Medien | |----------+------+-----+---------------------------------------| |dvbackup |V:0, |413 |Backup-Werkzeug, das MiniDV-Camcorder | | |I:0 | |verwendet (enthält rsbep(1)) | +---------------------------------------------------------------+ 9.8.4. Datenwiederherstellung und forensische Analyse     Hier einige Programme für Datenwiederherstellung und forensische Analysen: Tabelle 9.24. Liste von Paketen für Datenwiederherstellung und forensische Analysen +---------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |-------------+------+-----+------------------------------------| | |V:2, | |Hilfsprogramm zum Scannen von | |testdisk |I:28 |1413 |Partitionen und Wiederherstellen von| | | | |Daten | |-------------+------+-----+------------------------------------| | |V:0, | |Hilfsprogramm zur | |magicrescue |I:2 |255 |Dateiwiederherstellung mittels Suche| | | | |nach "magischen Bytes" | |-------------+------+-----+------------------------------------| |scalpel |V:0, |89 |ein sparsamer, sehr leistungsfähiger| | |I:3 | |Datei-Carver | |-------------+------+-----+------------------------------------| |myrescue |V:0, |83 |Daten von beschädigten Festplatten | | |I:2 | |retten | |-------------+------+-----+------------------------------------| | |V:0, | |Hilfsprogramm, um gelöschte Dateien | |extundelete |I:8 |147 |von ext3-/ext4-Dateisystemen | | | | |wiederherzustellen | |-------------+------+-----+------------------------------------| | |V:0, | |Hilfsprogramm, um gelöschte Dateien | |ext4magic |I:4 |233 |von ext3-/ext4-Dateisystemen |     | | | |wiederherzustellen | |-------------+------+-----+------------------------------------| | |V:0, | |Werkzeug, das bei der | |ext3grep |I:2 |293 |Wiederherstellung von gelöschten | | | | |Dateien auf ext3-Dateisystemen hilft| |-------------+------+-----+------------------------------------| |scrounge-ntfs|V:0, |50 |Datenwiederherstellungsprogramm für | | |I:2 | |NTFS-Dateisysteme | |-------------+------+-----+------------------------------------| |gzrt |V:0, |33 |Werkzeugsatz für die | | |I:0 | |Wiederherstellung von gzip-Daten | |-------------+------+-----+------------------------------------| |sleuthkit |V:3, |1671 |Werkzeuge für forensische Analysen | | |I:24 | |(SleuthKit) | |-------------+------+-----+------------------------------------| |autopsy |V:0, |1026 |grafische Oberfläche für SleuthKit | | |I:1 | | | |-------------+------+-----+------------------------------------| |foremost |V:0, |102 |forensiche Anwendung zur | | |I:5 | |Datenwiederherstellung | |-------------+------+-----+------------------------------------| |guymager |V:0, |1021 |forensisches Imaging-Werkzeug, | | |I:0 | |basierend auf Qt | |-------------+------+-----+------------------------------------| |dcfldd |V:0, |114 |erweitertes dd für Forensik und | | |I:3 | |Sicherheit | +---------------------------------------------------------------+ Tipp     Sie können gelöschte Dateien auf einem ext2-Dateisystem wiederherstellen, indem Sie list_deleted_inodes und den undel-Befehl von debugfs(8) (aus dem e2fsprogs-Paket) verwenden. 9.8.5. Aufsplitten einer großen in mehrere kleine Dateien Wenn eine Datei zu groß ist, um sie als einzelne Datei zu sichern, können Sie trotzdem ein Backup davon erstellen, nachdem     Sie sie in kleinere, z.B. 2000 MiB große Stücke aufgeteilt haben; später können diese Stücke wieder zur Originaldatei zusammengesetzt werden.     $ split -b 2000m large_file $ cat x* >large_file Achtung     Stellen Sie sicher, dass Sie dort keine anderen Dateien haben, die mit einem "x" beginnen, um Kollisionen bei den Dateinamen zu vermeiden. 9.8.6. Leeren von Dateiinhalten Zum Leeren des Inhalt einer Datei, z.B. einer Logdatei, verwenden Sie nicht rm(1), um die Datei zu löschen und anschließend eine     neue leere Datei zu erstellen, da in der Zeit zwischen den Befehlen möglicherweise Zugriffsversuche auf die Datei erfolgen könnten. Folgender Weg ist der sicherste, um Dateiinhalte zu leeren:     $ :>file_to_be_cleared 9.8.7. Dummy-Dateien     Folgende Befehle erzeugen Dummy- oder leere Dateien: $ dd if=/dev/zero of=5kb.file bs=1k count=5     $ dd if=/dev/urandom of=7mb.file bs=1M count=7 $ touch zero.file $ : > alwayszero.file     Sie sollten folgende Dateien vorfinden: * "5kb.file" ist eine 5KB große Datei, die Nullen enthält. * "7mb.file" ist eine 7MB große Datei mit zufälligem Inhalt. * "zero.file" könnte eine 0 Byte große Datei sein. Falls sie     bereits existierte, wurde ihr mtime-Attribut aktualisiert, aber der Inhalt wurde beibehalten. * "alwayszero.file" ist immer eine 0 Byte große Datei. Falls sie bereits existierte, wurde ihr mtime-Attribut aktualisiert und der Inhalt entfernt. 9.8.8. Eine vollständige Festplatte löschen Es gibt mehrere Wege, um alle Daten von einer Festplatte oder     einem ähnlichen Gerät zu entfernen, z.B. einem USB-Speicherstick unter "/dev/sda". Achtung Überprüfen Sie zuerst den Speicherort des USB-Sticks mit mount     (8), bevor Sie irgendwelche dieser Befehle ausführen. Das Gerät, auf das "/dev/sda" verweist, könnte auch die SCSI- oder Serial-ATA-Festplatte sein, die Ihr komplettes Betriebssystem enthält.     Löschen Sie den kompletten Inhalt der Platte, indem Sie wie folgt die Daten auf 0 setzen:     # dd if=/dev/zero of=/dev/sda     Löschen Sie alles, indem Sie es wie folgt mit zufälligen Daten überschreiben:     # dd if=/dev/urandom of=/dev/sda     Löschen Sie alles, indem Sie es wie hier auf sehr effiziente Art mit zufälligen Daten überschreiben:     # shred -v -n 1 /dev/sda     Alternativ können Sie auch badblocks(8) mit der Option -t random verwenden. Da dd(1) auf der Shell vieler boot-fähiger Linux-CDs (wie einer Debian-Installer-CD) verfügbar ist, können Sie Ihr installiertes     Betriebssystem vollständig entfernen, indem Sie von solch einer CD einen Löschbefehl auf die System-Festplatte (z.B. "/dev/hda", "/dev/sda" o.ä.) ausführen. 9.8.9. Einen ungenutzten Bereich einer Festplatte löschen In einem nicht genutzten Bereich auf einer Festplatte (oder einem USB-Speicherstick), z.B. "/dev/sdb1", könnten gelöschte Daten     noch immer vorhanden sein, da beim Löschen lediglich die Verbindung zum Dateisystem entfernt wurde. Diese Daten können durch Überschreiben entfernt werden: # mount -t auto /dev/sdb1 /mnt/foo # cd /mnt/foo # dd if=/dev/zero of=junk     dd: writing to `junk': No space left on device ... # sync # umount /dev/sdb1 Warnung     Dies ist für Ihren USB-Stick normalerweise ausreichend, aber es ist nicht perfekt. Die meisten Teile von gelöschten Dateinamen und deren Attribute könnten versteckt sein und im Dateisystem verbleiben. 9.8.10. Wiederherstellen von gelöschten, aber noch geöffneten Dateien Wenn Sie versehentlich eine Datei gelöscht haben, die noch von     einem Programm verwendet wird (lesend oder schreibend), ist es möglich, diese Datei wiederherzustellen.     Probieren Sie zum Beispiel folgendes: $ echo foo > bar $ less bar $ ps aux | grep ' less[ ]' bozo 4775 0.0 0.0 92200 884 pts/8 S+ 00:18 0:00 less bar $ rm bar     $ ls -l /proc/4775/fd | grep bar lr-x------ 1 bozo bozo 64 2008-05-09 00:19 4 -> /home/bozo/bar (deleted) $ cat /proc/4775/fd/4 >bar $ ls -l -rw-r--r-- 1 bozo bozo 4 2008-05-09 00:25 bar $ cat bar foo     Führen Sie auf einem anderen Terminal (wenn Sie das lsof-Paket installiert haben) folgendes aus: $ ls -li bar 2228329 -rw-r--r-- 1 bozo bozo 4 2008-05-11 11:02 bar $ lsof |grep bar|grep less less 4775 bozo 4r REG 8,3 4 2228329 /home/bozo/bar $ rm bar     $ lsof |grep bar|grep less less 4775 bozo 4r REG 8,3 4 2228329 /home/bozo/bar (deleted) $ cat /proc/4775/fd/4 >bar $ ls -li bar 2228302 -rw-r--r-- 1 bozo bozo 4 2008-05-11 11:05 bar $ cat bar foo 9.8.11. Alle harten Links suchen     Dateien mit harten Links können mittels "ls -li" identifiziert werden: $ ls -li total 0     2738405 -rw-r--r-- 1 root root 0 2008-09-15 20:21 bar 2738404 -rw-r--r-- 2 root root 0 2008-09-15 20:21 baz 2738404 -rw-r--r-- 2 root root 0 2008-09-15 20:21 foo Sowohl bei "baz" wie auch bei "foo" zeigt die Anzahl der Links von "2" (>1) an, dass für sie harte Links existieren. Sie haben     beide die gemeinsame Inode-Nummer "2738404". Das bedeutet, dass dies beides die gleiche hart verlinkte Datei ist. Falls Sie nicht zufällig alle hart verlinkten Dateien finden, können Sie über die Inode (z.B. "2738404") danach suchen:     # find /path/to/mount/point -xdev -inum 2738404 9.8.12. Unsichtbarer Verbrauch von Festplattenplatz Alle gelöschten, aber noch geöffneten Dateien verbrauchen     Festplattenplatz, obwohl dies über einen normalen du(1)-Befehl nicht festgestellt werden kann. Sie können wie folgt über ihre Größe aufgelistet werden:     # lsof -s -X / |grep deleted 9.9. Tipps zur Datenverschlüsselung Mit physikalischem Zugriff auf den Rechner kann jeder ganz einfach uneingeschränkte Rechte und Zugriffe auf alle Dateien auf Ihrem PC erlangen (lesen Sie dazu Abschnitt 4.6.4, „Sichern des root-Passworts“). Das passwortgeschützte Anmeldesystem ist nicht     in der Lage, Ihre Privatsphäre und sensible Daten vor einem möglichen Diebstahl Ihres PCs zu schützen. Dies kann nur durch Verwendung einer Technologie zur Datenverschlüsselung erreicht werden. Obwohl GNU Privacy Guard (Näheres in Abschnitt 10.3, „Datensicherheits-Infrastruktur“) Dateien verschlüsseln kann, bedeutet es für den Benutzer einigen Aufwand. dm-crypt ermöglicht eine automatische Datenverschlüsselung über     native Linux-Kernel-Module mittels device-mapper bei minimalem Aufwand für den Benutzer. Tabelle 9.25. Liste von Werkzeugen zur Datenverschlüsselung +---------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |--------------+------+-----+-----------------------------------| | |V:19, | |Werkzeug zur Verschlüsselung von | |cryptsetup |I:79 |417 |blockorientierten Geräten (dm-crypt| | | | |/ LUKS) | |--------------+------+-----+-----------------------------------| | | | |Werkzeuge zur Verschlüsselung von |     |cryptmount |V:2, |231 |blockorientierten Geräten (dm-crypt| | |I:3 | |/ LUKS) mit Fokus auf das Einbinden| | | | |/Trennen durch normale Benutzer | |--------------+------+-----+-----------------------------------| |fscrypt |V:0, |5520 |Werkzeuge für die Verschlüsselung | | |I:1 | |von Linux-Dateisystemen (fscrypt) | |--------------+------+-----+-----------------------------------| |libpam-fscrypt|V:0, |5519 |PAM-Modul für die Verschlüsselung | | |I:0 | |von Linux-Dateisystemen (fscrypt) | +---------------------------------------------------------------+ Achtung     Datenverschlüsselung kostet CPU-Zeit usw. Verschlüsselte Daten sind nicht mehr zugänglich, wenn das zugehörige Passwort verloren ist. Bitte wägen Sie Kosten und Nutzen gegeneinander ab. Anmerkung     Mit dem debian-installer (Lenny und später) kann ein vollständiges Debian-System auf einer verschlüsselten Festplatte installiert werden; dabei werden dm-crypt/LUKS und initramfs verwendet. Tipp     In Abschnitt 10.3, „Datensicherheits-Infrastruktur“ finden Sie Infos über eine Verschlüsselungslösung, die komplett auf Benutzerebene abläuft: GNU Privacy Guard. 9.9.1. Verschlüsselung von Wechseldatenträgern mit dm-crypt/LUKS Sie können die Inhalte eines Wechseldatenträgers, wie z.B. eines     USB-Sticks auf "/dev/sdx", mit dm-crypt/LUKS verschlüsseln. Formatieren Sie ihn einfach wie folgt: # fdisk /dev/sdx ... "n" "p" "1" "return" "return" "w" # cryptsetup luksFormat /dev/sdx1 ... # cryptsetup open /dev/sdx1 secret ...     # ls -l /dev/mapper/ total 0 crw-rw---- 1 root root 10, 60 2021-10-04 18:44 control lrwxrwxrwx 1 root root 7 2021-10-04 23:55 secret -> ../dm-0 # mkfs.vfat /dev/mapper/secret ... # cryptsetup close secret Dann kann er in einer modernen Arbeitsplatzumgebung wie ein normaler USB-Stick unter "/media/benutzername/datenträgername" eingebunden werden (Näheres hierzu in Abschnitt 10.1.7, „Wechseldatenträger“), nur dass dabei nach dem Passwort gefragt     wird; dazu wird das Paket udisks2 genutzt. Der Unterschied ist, dass jegliche Daten, die auf den Stick geschrieben werden, verschlüsselt sind. Der Passworteintrag kann auch automatisch über einen Schlüsselbund erfolgen (Näheres dazu in Abschnitt 10.3.6, „Passwort-Schlüsselbund“). Alternativ können Sie solche Medien auch mit anderen Dateisystemen formatieren, z.B. ext4 mit "mkfs.ext4 /dev/mapper/     sdx1". Falls btrfs genutzt wird, muss das Paket udisks2-btrfs installiert sein. Bei diesen Dateisystemen müssen unter Umständen der Eigentümer und die Berechtigungen der Dateien separat konfiguriert werden. 9.9.2. Einbinden verschlüsselter Laufwerke mit dm-crypt/LUKS Eine verschlüsselte Plattenpartition zum Beispiel, die durch den     Debian Installer mit dm-crypt/LUKS auf "/dev/sdc5" erstellt wurde, kann wie folgt unter "/mnt" eingebunden werden: $ sudo cryptsetup open /dev/sdc5 ninja --type luks Enter passphrase for /dev/sdc5: **** $ sudo lvm lvm> lvscan inactive '/dev/ninja-vg/root' [13.52 GiB] inherit     inactive '/dev/ninja-vg/swap_1' [640.00 MiB] inherit ACTIVE '/dev/goofy/root' [180.00 GiB] inherit ACTIVE '/dev/goofy/swap' [9.70 GiB] inherit lvm> lvchange -a y /dev/ninja-vg/root lvm> exit Exiting. $ sudo mount /dev/ninja-vg/root /mnt 9.10. Der Kernel     Debian stellt für unterstützte Architekturen modulare Linux-Kernel als Pakete bereit.     Wenn Sie diese Dokumentation lesen, müssen Sie vermutlich keinen eigenen Linux-Kernel kompilieren. 9.10.1. Kernel-Parameter     Viele Linux-Funktionalitäten sind wie folgt über Kernel-Parameter konfigurierbar: * Kernel-Parameter, die durch den Bootloader initialisiert werden (Näheres in Abschnitt 3.1.2, „Stufe 2: der Bootloader“ ); * Kernel-Parameter, die durch sysctl(8) zur Laufzeit geändert     werden und die über sysfs erreichbar sind (Näheres in Abschnitt 1.2.12, „procfs und sysfs“); * Modul-Parameter, die über Argumente von modprobe(8) gesetzt werden, wenn ein Modul aktiviert wird (Näheres in Abschnitt 9.7.3, „Einbinden der Festplatten-Abbild-Datei“). Nähere Details finden Sie unter "The Linux kernel user’s and     administrator’s guide » The kernel’s command-line parameters" (Englisch). 9.10.2. Kernel-Header Die meisten normalen Programme benötigen keine Kernel-Header und könnten im Gegenteil sogar gestört werden, wenn Sie diese direkt     zum Kompilieren verwenden würden. Sie sollten stattdessen gegen die Header in "/usr/include/linux" und "/usr/include/asm" aus dem Paket libc6-dev kompiliert werden (diese werden auf einem Debian-System aus dem glibc-Quellpaket erzeugt). Anmerkung     Um einige Kernel-spezifische Programme wie Kernel-Module aus externen Linux-Quellen oder den automounter-Daemon (amd) zu kompilieren, müssen Sie den Pfad zu den entsprechenden Kernel-Headern auf der Befehlszeile mit angeben. 9.10.3. Kompilieren des Kernels und dazugehöriger Module     Debian hat seine eigene Methode zur Kompilierung des Kernels und zugehöriger Module. Tabelle 9.26. Liste von Schlüsselpaketen für die Neukompilierung des Kernels auf einem Debian-System +---------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |----------------+------+-----+---------------------------------| | | | |Pakete, die zum Bauen von | |build-essential |I:480 |17 |Debian-Paketen essentiell nötig | | | | |sind: make, gcc, … | |----------------+------+-----+---------------------------------| |bzip2 |V:166,|112 |Werkzeuge zum Komprimieren und | | |I:970 | |Dekomprimieren von bz2-Dateien | |----------------+------+-----+---------------------------------| |libncurses5-dev |I:71 |6 |Entwickler-Bibliothek und | | | | |Dokumentation für ncurses | |----------------+------+-----+---------------------------------| |git |V:351,|46734|git: vom Linux-Kernel verwendetes| | |I:549 | |verteiltes Versionskontrollsystem|     |----------------+------+-----+---------------------------------| | |V:29, | |bietet eine fakeroot-Umgebung, um| |fakeroot |I:486 |224 |Pakete als nicht-root-Benutzer zu| | | | |bauen | |----------------+------+-----+---------------------------------| |initramfs-tools |V:430,|113 |Werkzeug zur Erzeugung eines | | |I:989 | |initramfs (Debian-spezifisch) | |----------------+------+-----+---------------------------------| |dkms |V:74, |196 |Dynamic Kernel Module Support | | |I:162 | |(DKMS) (generisch) | |----------------+------+-----+---------------------------------| |module-assistant|V:0, |406 |Hilfsprogramme zum Erstellen von | | |I:19 | |Modulpaketen (Debian-spezifisch) | |----------------+------+-----+---------------------------------| | |V:6, | |Helfer-Skripte für | |devscripts |I:40 |2658 |Debian-Paketbetreuer | | | | |(Debian-spezifisch) | +---------------------------------------------------------------+ Wenn Sie eine initrd wie in Abschnitt 3.1.2, „Stufe 2: der     Bootloader“ verwenden, lesen Sie unbedingt die entsprechenden Informationen in initramfs-tools(8), update-initramfs(8), mkinitramfs(8) und initramfs.conf(5). Warnung     Setzen Sie in den Verzeichnissen Ihres Quellcode-Baums (z.B. "/ usr/src/linux*") keine symbolischen Links auf "/usr/include/ linux" and "/usr/include/asm" (einige veraltete Dokumentationen empfehlen dies). Anmerkung Um den aktuellsten Linux-Kernel auf einem Debian-Stable-System zu kompilieren, könnte die Verwendung von rückportierten aktuellen Werkzeugen aus Unstable nötig sein. module-assistant(8) (oder seine Kurzform m-a) unterstützt Benutzer bei Bau und Installation von Modulpaketen für einen oder     mehrere selbst angepasste Kernel. Dynamic Kernel Module Support (DKMS) ist ein neues distributions-unabhängiges Rahmenwerk, das entwickelt wurde, um die Aktualisierung einzelner Kernel-Module ohne Austausch des kompletten Kernels zu ermöglichen. Dies wird verwendet für die Betreuung von Modulen außerhalb des Linux-Quellcode-Baums. Auch ist es damit sehr einfach, im Zuge der Hochrüstung des Kernels Module neu zu bauen. 9.10.4. Kompilieren des Kernel-Quellcodes: Empfehlung des Debian-Kernel-Teams     Um eigene Kernel-Binärpakete aus den Upstream-Kernel-Quelltexten zu erstellen, sollten Sie das angebotene "deb-pkg"-Target nutzen: $ sudo apt-get build-dep linux $ cd /usr/src $ wget https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-version.tar.xz $ tar --xz -xvf linux-version.tar.xz     $ cd linux-version $ cp /boot/config-version .config $ make menuconfig ... $ make deb-pkg Tipp     Das Paket linux-source-version stellt den Linux-Kernel-Quelltext inklusive Debian-Patches als "/usr/src/linux-version.tar.bz2" bereit. Um spezifische Binärpakete aus dem Debian-Kernel-Quellpaket zu     bauen, sollten Sie die Targets "binary-arch_architecture_ featureset_flavour" in "debian/rules.gen" verwenden: $ sudo apt-get build-dep linux     $ apt-get source linux $ cd linux-3.* $ fakeroot make -f debian/rules.gen binary-arch_i386_none_686     Hier finden Sie weitere Informationen: * Debian Wiki: KernelFAQ     * Debian Wiki: DebianKernel * Debian Linux Kernel Handbook: https:// kernel-handbook.debian.net 9.10.5. Hardware-Treiber und Firmware Der Hardware-Treiber ist Code, der auf der Haupt-CPU des Zielsystems läuft. Die meisten Hardware-Treiber sind heutzutage     als freie Software verfügbar und in den normalen Debian-Kernel-Paketen im main-Bereich des Debian-Archivs enthalten. * GPU-Treiber + Intel GPU-Treiber (main)     + AMD/ATI GPU-Treiber (main) + NVIDIA GPU-Treiber (main für den nouveau-Treiber, non-free für Treiber, die vom Hersteller als Nur-Binär-Variante bereitgestellt werden) Die Firmware ist Code, der in das (mit dem Zielsystem verbundene) Gerät geladen wird (z.B. CPU-Mikrocode, Rendering-Code, der auf der GPU läuft, oder FPGA-/CPLD-Daten …). Einige Firmware-Pakete     gibt es als freie Software, aber viele davon werden nicht als freie Software bereitgestellt, da sie Binärdaten ohne den zugehörigen Quelltext enthalten. Die Installation dieses Firmware-Codes ist erforderlich, damit das Gerät wie vorgesehen funktionieren kann. * Firmware-Pakete, die Daten enthalten, welche in den flüchtigen Speicher des Zielgeräts geladen werden: + firmware-linux-free (main) + firmware-linux-nonfree (non-free-firmware) + firmware-linux-* (non-free-firmware) + *-firmware (non-free-firmware) + intel-microcode (non-free-firmware)     + amd64-microcode (non-free-firmware) * Pakete mit Firmware-Update-Programmen, die Daten in den nicht-flüchtigen Speicher des Zielgeräts laden: + fwupd (main): Firmware-Update-Daemon, der Firmware-Daten vom Linux Vendor Firmware Service herunterlädt + gnome-firmware (main): GTK-Frontend für fwupd + plasma-discover-backend-fwupd (main): Qt-Frontend für fwupd Please note that access to non-free-firmware packages are provided by the official installation media to offer functional     installation experience to the user since Debian 12 Bookworm. The non-free-firmware area is described in Abschnitt 2.1.5, „Grundlagen über das Debian-Archiv“. Bitte beachten Sie außerdem, dass die Firmware-Daten, die über     fwupd vom Linux Vendor Firmware Service heruntergeladen und in den laufenden Linux-Kernel integriert werden, ebenfalls nicht-frei (non-free) sein könnten. 9.11. Virtualisierte Systeme Die Verwendung eines virtualisierten Systems ermöglicht es uns,     mehrere Instanzen eines Systems gleichzeitig auf einer einzigen Hardware laufen zu lassen. Tipp     See Debian wiki on SystemVirtualization. 9.11.1. Virtualisierungs- und Emulationswerkzeuge     Es gibt verschiedene Virtualisierungs- und Emulations-Plattformen: * Vollständige Hardware-Emulations-Pakete, wie die aus dem Metapaket games-emulator * Plattformen, bei denen die CPU und einige Eingabe-/ Ausgabegeräte überwiegend emuliert werden, wie z.B. QEMU * Plattformen, bei denen die CPU und einige Eingabe-/ Ausgabegeräte überwiegend virtualisiert werden, wie z.B. Kernel-based Virtual Machine (KVM) (Betriebssystemkern-basierte virtuelle Maschine) * Container-Virtualisierung auf Betriebssytemebene mit Kernel-Level-Unterstützung, wie z.B. LXC (Linux Containers), Docker, systemd-nspawn(1), ...     * Dateisystemzugriff-Virtualisierung auf Betriebssystemebene, bei der der Aufruf der Systembibliotheken über den Dateipfad überschrieben/geändert wird, wie z.B. chroot * Dateisystemzugriff-Virtualisierung auf Betriebssystemebene, bei der der Aufruf der Systembibliotheken über die Dateieigentümerschaft überschrieben/geändert wird, wie z.B.fakeroot * Betriebssystem-API-Emulation, wie z.B. Wine * Virtualisierung auf Interpreter-Ebene mit Überschreiben von Executable Selection und Runtime-Bibliotheken, wie z.B. virtualenv und venv für Python Die Container-Virtualisierung nutzt Fähigkeiten aus     Abschnitt 4.7.5, „Linux Sicherheits-Funktionalitäten“ sowie die Backend-Technologie aus Abschnitt 7.7, „Sandbox“.     Hier einige Pakete, die Ihnen bei der Einrichtung eines virtualisierten Systems helfen: Tabelle 9.27. Liste von Virtualisierungswerkzeugen +---------------------------------------------------------------+ | Paket |Popcon|Größe | Beschreibung | |------------------+------+------+------------------------------| |coreutils |V:880,|18307 |GNU core utilities which | | |I:999 | |contain chroot(8) | |------------------+------+------+------------------------------| | |V:53, | |systemd container/nspawn tools| |systemd-container |I:61 |1330 |which contain systemd-nspawn | | | | |(1) | |------------------+------+------+------------------------------| | |V:5, | |spezialisiertes Werkzeug, um | |schroot |I:7 |2579 |Debian-Binärpakete in | | | | |chroot-Umgebungen auszuführen | |------------------+------+------+------------------------------| | |V:1, | |Werkzeug, um | |sbuild |I:3 |243 |Debian-Binärpakete aus | | | | |Debian-Quellen zu bauen | |------------------+------+------+------------------------------| | |V:5, | |Programm zum Bootstrap eines | |debootstrap |I:54 |314 |grundlegenden Debian-Systems | | | | |(geschrieben in sh) | |------------------+------+------+------------------------------| | |V:0, | |Programm zum Bootstrap eines | |cdebootstrap |I:1 |115 |Debian-Systems (geschrieben in| | | | |C) | |------------------+------+------+------------------------------| |cloud-image-utils |V:1, |66 |cloud image management | | |I:17 | |utilities | |------------------+------+------+------------------------------| |cloud-guest-utils |V:3, |71 |cloud guest utilities | | |I:13 | | | |------------------+------+------+------------------------------| | | | |Virtual Machine Manager: | | |V:11, | |grafische | |virt-manager |I:44 |2296 |Arbeitsplatzanwendung zur | | | | |Verwaltung von virtuellen | | | | |Maschinen | |------------------+------+------+------------------------------| |libvirt-clients |V:46, |1241 |Programme für die | | |I:65 | |libvirt-Bibliothek | |------------------+------+------+------------------------------| | |V:0, | |Incus: system container and | |incus |I:0 |56209 |virtual machine manager (for | | | | |Debian 13 "Trixie") | |------------------+------+------+------------------------------| | |V:0, | |LXD: system container and | |lxd |I:0 |52119 |virtual machine manager (for | | | | |Debian 12 "Bookworm") | |------------------+------+------+------------------------------| |podman |V:14, |41948 |podman: engine to run | | |I:16 | |OCI-based containers in Pods | |------------------+------+------+------------------------------| | |V:0, | |engine to run OCI-based | |podman-docker |I:0 |249 |containers in Pods - wrapper | | | | |for docker | |------------------+------+------+------------------------------| |docker.io |V:41, |150003|docker: Linux container | | |I:43 | |runtime |     |------------------+------+------+------------------------------| |games-emulator |I:0 |21 |games-emulator: Debians | | | | |Emulatoren für Spiele | |------------------+------+------+------------------------------| |bochs |V:0, |6956 |Bochs: IA-32 PC-Emulator | | |I:0 | | | |------------------+------+------+------------------------------| |qemu |I:14 |97 |QEMU: schneller generischer | | | | |Prozessor-Emulator | |------------------+------+------+------------------------------| | | | |QEMU: Binärdateien zur | |qemu-system |I:22 |66 |Emulation eines vollständigen | | | | |Systems | |------------------+------+------+------------------------------| |qemu-user |V:1, |93760 |QEMU: Binärdateien für | | |I:6 | |User-Mode-Emulation | |------------------+------+------+------------------------------| |qemu-utils |V:12, |10635 |QEMU: Hilfsprogramme | | |I:106 | | | |------------------+------+------+------------------------------| | | | |KVM: vollständige | | |V:33, | |Virtualisierungslösung auf | |qemu-system-x86 |I:91 |58140 |x86-Hardware mit | | | | |hardware-unterstützter | | | | |Virtualisierung | |------------------+------+------+------------------------------| | |V:6, | |VirtualBox: | |virtualbox |I:8 |130868|x86-Virtualisierungslösung auf| | | | |i386 und amd64 | |------------------+------+------+------------------------------| |gnome-boxes |V:1, |6691 |Boxes: Simple GNOME app to | | |I:7 | |access virtual systems | |------------------+------+------+------------------------------| |xen-tools |V:0, |719 |Werkzeuge zur Verwaltung von | | |I:2 | |virtuellen Debian-XEN-Servern | |------------------+------+------+------------------------------| | |V:13, | |Wine: | |wine |I:60 |132 |Windows-API-Implementierung | | | | |(Standard-Programm-Suite) | |------------------+------+------+------------------------------| | | | |DOSBox: x86-Emulator mit | |dosbox |V:1, |2696 |Tandy-/Herc-/CGA-/EGA-/VGA-/ | | |I:15 | |SVGA-Grafik, Audioausgabe und | | | | |DOS | |------------------+------+------+------------------------------| | |V:9, | |Linux-Container verwenden | |lxc |I:12 |25890 |Werkzeuge im | | | | |User-Space-Bereich | |------------------+------+------+------------------------------| | | | |venv zur Erzeugung von | |python3-venv |I:88 |6 |virtuellen Umgebungen für | | | | |Python (Systembibliothek) | |------------------+------+------+------------------------------| | |V:9, | |virtualenv zur Erzeugung | |python3-virtualenv|I:50 |356 |isolierter virtueller | | | | |Umgebungen für Python | |------------------+------+------+------------------------------| | |V:3, | |pipx für die Installation von | |pipx |I:19 |3324 |Python-Applikationen in | | | | |isolierten Umgebungen | +---------------------------------------------------------------+ Der Wikipedia-Artikel Comparison of platform virtual machines     (Englisch) enthält detaillierte Gegenüberstellungen der verschiedenen Plattform-Virtualisierungslösungen. 9.11.2. Arbeitsablauf bei Virtualisierung Anmerkung     Standard-Debian-Kernel unterstützen KVM seit Lenny.     Ein typischer Arbeitsablauf für eine Virtualisierung enthält folgende Schritte: * Erzeugen eines leeren Dateisystems (ein Verzeichnisbaum oder ein Festplatten-Image); + Ein Verzeichnisbaum kann über "mkdir -p /path/to/chroot" erzeugt werden. + Eine rohe (leere) Image-Datei kann mittels dd(1) erstellt werden (lesen Sie dazu Abschnitt 9.7.1, „Erzeugung der Festplatten-Abbild-Datei“ und Abschnitt 9.7.5, „Eine leere Abbild-Datei erstellen“). + qemu-img(1) kann verwendet werden, um zu QEMU kompatible Image-Dateien zu erzeugen. + Rohe Image-Dateien und solche im VMDK-Format sind weit verbreitet und können bei verschiedenen Virtualisierungslösungen eingesetzt werden. * Einbinden des Festplatten-Images in das Dateisystem mit mount (8) (optional); + Bei einer rohen Image-Datei verwenden Sie zum Einbinden ein loop device oder Device Mapper-Geräte (Näheres in Abschnitt 9.7.3, „Einbinden der Festplatten-Abbild-Datei“ ). + Festplatten-Images, die von QEMU unterstützt werden, binden Sie als Network Block Device ein (lesen Sie dazu     Abschnitt 9.11.3, „Einbinden des virtuellen Festplatten-Images“). * Bestücken des Zieldateisystems mit den benötigten Systemdaten; + Die Nutzung von Programmen wie debootstrap und cdebootstrap hilft Ihnen bei diesem Schritt (Details dazu in Abschnitt 9.11.4, „Chroot-System“). + Verwenden Sie die Installationsroutinen anderer Betriebssysteme für das in der Emulation laufende System. * Ausführen eines Programms in der virtualisierten Umgebung; + chroot bietet eine grundlegende virtualisierte Umgebung, die zur Kompilierung von Programmen, Ausführung von Konsolenanwendungen sowie Daemons ausreichende Funktionalitäten hat. + QEMU stellt eine CPU-Emulation quer über verschiedene Plattformen zur Verfügung. + QEMU mit KVM bietet eine vollständige Systememulation mit hardware-unterstützter Virtualisierung. + VirtualBox bietet eine vollständige System-Emulation auf i386 und amd64 mit oder ohne hardware-unterstützter Virtualisierung. 9.11.3. Einbinden des virtuellen Festplatten-Images     Wenn Sie eine rohe Image-Datei verwenden, finden Sie die nötigen Informationen in Abschnitt 9.7, „Das Festplatten-Abbild“. Bei anderen Dateiformaten für virtuelle Festplatten-Images können     Sie qemu-nbd(8) verwenden, um diese über das Network Block Device-Protokoll zu exportieren; dann können sie mittels dem nbd-Kernelmodul in das Dateisystem eingebunden werden (mount). qemu-nbd(8) unterstützt Festplattenformate, die auch von QEMU unterstützt werden. QEMU wiederum unterstützt folgende Formate:     roh (raw), qcow2, qcow, vmdk, vdi, bochs, cow (User-Mode-Linux Copy-on-Write), parallels, dmg, cloop, vpc, vvfat (virtuelles VFAT) und host_device. Das Network Block Device unterstützt Partitionen auf die gleiche     Art wie das loop device (Näheres hierzu in Abschnitt 9.7.3, „Einbinden der Festplatten-Abbild-Datei“). Sie können die erste Partition von "disk.img" wie folgt einbinden: # modprobe nbd max_part=16 # qemu-nbd -v -c /dev/nbd0 disk.img     ... # mkdir /mnt/part1 # mount /dev/nbd0p1 /mnt/part1 Tipp     Eventuell möchten Sie lediglich die erste Partition von "disk.img" exportieren; geben Sie dazu für qemu-nbd(8) die Option "-P 1" an. 9.11.4. Chroot-System Wenn Sie eine neue Debian-Umgebung im Terminal ausprobieren möchten, empfehle ich Ihnen, chroot zu verwenden. Es ermöglicht     Ihnen, Konsolenapplikationen aus Debian Unstable und Testing laufen zu lassen ohne die üblichen Risiken, die dies sonst mit sich bringt, und ohne einen Reboot des Systems. chroot(8) ist der elementarste Weg für solch einen Ansatz. Achtung     Die hier angegebenen Beispiele gehen davon aus, dass sowohl das Elternsystem wie auch das chroot-System die gleiche CPU-Architektur (amd64) haben.     Although you can manually create a chroot(8) environment using debootstrap(1), this requires non-trivial efforts. The sbuild package to build Debian packages from source uses the     chroot environment managed by the schroot package. It comes with helper script sbuild-createchroot(1). Let's learn how it works by running it as follows. $ sudo mkdir -p /srv/chroot     $ sudo sbuild-createchroot -v --include=eatmydata,ccache unstable /srv/chroot/unstable-amd64-sbuild http://deb.debian.org/debian ... Sie sehen jetzt, wie debootstrap(8) Systemdaten für eine     unstable-Umgebung in "/srv/chroot/unstable-amd64-sbuild" anlegt und so ein minimales Build-System erzeugt.     Sie können sich über schroot(1) in dieser Umgebung anmelden.     $ sudo schroot -v -c chroot:unstable-amd64-sbuild     Hier sehen Sie nun, wie eine System-Shell in einer unstable-Umgebung erstellt wird. Anmerkung     Die Datei "/usr/sbin/policy-rc.d", die immer mit dem Rückgabewert 101 beendet wird, verhindert, dass Daemon-Programme automatisch in dieser Debian-Umgebung gestartet werden. Lesen Sie hierzu "/ usr/share/doc/init-system-helpers/README.policy-rc.d.gz". Anmerkung Einige Programme könnten unter chroot Zugriff auf mehr Dateien     des Elternsystems erfordern, als sbuild-createchroot mit obiger Vorgehensweise bereitstellt. Zum Beispiel könnte es nötig sein, " /sys", "/etc/passwd", "/etc/group", "/var/run/utmp", "/var/log/ wtmp" usw. über bind-mount einzubinden oder zu kopieren. Tipp Das sbuild-Paket hilft Ihnen, ein chroot-System zu erstellen mit     schroot als Backend, und ein Paket innerhalb dieser Umgebung zu bauen. Dies ist ideal, um Paketabhängigkeiten zu testen. Weitere Informationen finden Sie im Debian-Wiki unter sbuild sowie im sbuild-Konfigurationsbeispiel des "Guide for Debian Maintainers". Tipp The systemd-nspawn(1) command helps to run a command or OS in a     light-weight container in similar ways to chroot. It is more powerful since it uses namespaces to fully virtualize the the process tree, IPC, hostname, domain name and, optionally, networking and user databases. See systemd-nspawn. 9.11.5. System mit mehreren Arbeitsplatzumgebungen Wenn Sie eine neue grafische Arbeitsplatzumgebung von irgendeinem Betriebssystem ausprobieren möchten, empfehle ich Ihnen, QEMU oder KVM auf einem Debian-Stable-System zu verwenden, um mittels     Virtualisierung mehrere Arbeitsplatzumgebungen (Desktops) sicher auf einem System laufen lassen zu können. So ist es möglich, Desktop-Anwendungen aus Debian Unstable und Testing ohne die üblichen damit verbundenen Risiken auszuführen sowie ohne einen Reboot des Systems.     Da reines QEMU sehr langsam ist, wird empfohlen, es mit KVM zu beschleunigen, falls das Host-System dies unterstützt. Virtual Machine Manager, auch bekannt als virt-manager, ist ein     praktisches grafisches Werkzeug für die Verwaltung von virtuellen KVM-Maschinen via libvirt. Ein Image einer virtuellen Festplatte "virtdisk.qcow2", mit einem     Debian-System für QEMU kann z.B. mittels Debian über das Internet installieren wie folgt erzeugt werden: $ wget https://cdimage.debian.org/debian-cd/5.0.3/amd64/iso-cd/debian-503-amd64-netinst.iso     $ qemu-img create -f qcow2 virtdisk.qcow2 5G $ qemu -hda virtdisk.qcow2 -cdrom debian-503-amd64-netinst.iso -boot d -m 256 ... Tipp Andere GNU/Linux-Distributionen wie Ubuntu und Fedora mittels     Virtualisierung laufen zu lassen ist eine tolle Möglichkeit, Tipps zur Konfiguration zu bekommen. Auch andere proprietäre Betriebssysteme können über diese GNU/Linux-Virtualisierung bequem zum Laufen gebracht werden.     Weitere Tipps finden Sie im Debian Wiki unter SystemVirtualization. ---------------------------------------------------------------------     ^[2] Tiefergehende Anpassungsbeispiele: "Vim Galore", "sensible.vim", "#vim Recommendations" ...     ^[3] vim-pathogen war sehr populär. Kapitel 10. Datenmanagement     Hier werden Werkzeuge und Tipps zur Verwaltung von Binär- und Textdateien auf einem Debian-System beschrieben. 10.1. Austauschen, kopieren und archivieren von Dateien Warnung Nicht-koordinierte zeitgleiche Schreibzugriffe auf Geräte und     Dateien durch mehrere Prozesse sind nicht erlaubt, da dadurch eine Race Condition (Wettlaufsituation um konkurrierende Zugriffe auf die Ressource) entstehen könnte. Dies kann über einen File locking-Mechanismus mittels flock(1) umgangen werden.     Die Sicherheit der Daten und deren kontrolliertes Austauschen mit anderen hat verschiedene Aspekte: * Erzeugung von Datenarchiven; * Fern-Speicherzugriff; * Vervielfältigung;     * Nachverfolgung der Änderungshistorie; * Erleichterung des Tauschens von Daten; * Verhinderung von unerlaubten Dateizugriffen; * Erkennung von unerlaubten Dateiveränderungen.     Diese können über die Verwendung einer Kombination von Werkzeugen realisiert werden: * Archivierungs- und Kompressionswerkzeuge * Kopier- und Synchronisationswerkzeuge * Netzwerk-Dateisysteme; * Wechseldatenträger;     * Secure Shell; * Authentifizierungssysteme; * Versionskontrollsysteme; * Hash- und kryptographische Verschlüsselungswerkzeuge. 10.1.1. Archivierungs- und Kompressionswerkzeuge     Hier eine Zusammenfassung von Archivierungs- und Kompressionswerkzeugen im Debian-System: Tabelle 10.1. Liste von Archivierungs- und Kompressionswerkzeugen +---------------------------------------------------------------------------+ | Paket |Popcon|Größe|Erweiterung|Befehl | Erläuterung | |----------+------+-----+-----------+-------+-------------------------------| |tar |V:902,|3077 |.tar |tar(1) |Standard-Archivierungs-Programm| | |I:999 | | | |(De-Facto-Standard) | |----------+------+-----+-----------+-------+-------------------------------| | |V:440,| | | |Unix-Archivier-Programm im | |cpio |I:998 |1199 |.cpio |cpio(1)|System-V-Stil, zu verwenden mit| | | | | | |find(1) | |----------+------+-----+-----------+-------+-------------------------------| | |V:172,| | | |Archivier-Programm zur | |binutils |I:629 |144 |.ar |ar(1) |Erstellung von statischen | | | | | | |Bibliotheken | |----------+------+-----+-----------+-------+-------------------------------| |fastjar |V:1, |183 |.jar |fastjar|Archivier-Programm für Java | | |I:13 | | |(1) |(zip-artig) | |----------+------+-----+-----------+-------+-------------------------------| | |V:8, | | | |neues POSIX-Archivier-Programm,| |pax |I:14 |170 |.pax |pax(1) |Kompromiss zwischen tar und | | | | | | |cpio | |----------+------+-----+-----------+-------+-------------------------------| | | | | |gzip | | |gzip |V:876,|252 |.gz |(1), |GNU LZ77-Kompressionswerkzeug | | |I:999 | | |zcat |(De-Facto-Standard) | | | | | |(1), … | | |----------+------+-----+-----------+-------+-------------------------------| | | | | |bzip2 |Burrows-Wheeler Block-Sorting | | |V:166,| | |(1), |Kompressions-Werkzeug mit | |bzip2 |I:970 |112 |.bz2 |bzcat |höherem Kompressionsverhältnis | | | | | |(1), … |als gzip(1) (langsamer als gzip| | | | | | |mit ähnlicher Syntax) | |----------+------+-----+-----------+-------+-------------------------------| | |V:1, | | | |LZMA-Kompressionswerkzeug mit | |lzma |I:16 |149 |.lzma |lzma(1)|höherem Kompressionsverhältnis | | | | | | |als gzip(1) (überholt) |     |----------+------+-----+-----------+-------+-------------------------------| | | | | | |XZ-Kompressionswerkzeug mit | | | | | |xz(1), |höherem Kompressionsverhältnis | |xz-utils |V:360,|1203 |.xz |xzdec |als bzip2(1) (langsamer als | | |I:980 | | |(1), … |gzip, aber schneller als bzip2;| | | | | | |ersetzt das | | | | | | |LZMA-Kompressionswerkzeug) | |----------+------+-----+-----------+-------+-------------------------------| | | | | |zstd |Zstandard: schnelles | |zstd |V:193,|2158 |.zstd |(1), |verlustfreies | | |I:481 | | |zstdcat|Kompressionswerkzeug | | | | | |(1), … | | |----------+------+-----+-----------+-------+-------------------------------| | | | | |7zr(1),|7-Zip-Dateiarchivier-Programm | |p7zip |V:20, |8 |.7z |p7zip |mit hohem | | |I:463 | | |(1) |Kompressionsverhältnis | | | | | | |(LZMA-Kompression) | |----------+------+-----+-----------+-------+-------------------------------| | | | | | |7-Zip-Dateiarchivier-Programm | | |V:110,| | |7z(1), |mit hohem | |p7zip-full|I:480 |12 |.7z |7za(1) |Kompressionsverhältnis (LZMA- | | | | | | |und andere | | | | | | |Kompressionsalgorithmen) | |----------+------+-----+-----------+-------+-------------------------------| | | | | | |LZO-Kompressionswerkzeug mit | | | | | | |höherer Kompressions- und | |lzop |V:15, |164 |.lzo |lzop(1)|Dekompressionsgeschwindigkeit | | |I:142 | | | |als gzip(1) (niedrigeres | | | | | | |Kompressionsverhältnis als gzip| | | | | | |mit ähnlicher Syntax) | |----------+------+-----+-----------+-------+-------------------------------| |zip |V:48, |616 |.zip |zip(1) |InfoZIP: DOS-Archivierungs- und| | |I:380 | | | |Kompressionswerkzeug | |----------+------+-----+-----------+-------+-------------------------------| |unzip |V:105,|379 |.zip |unzip |InfoZIP: DOS-Dearchivierungs- | | |I:771 | | |(1) |und Dekompressionswerkzeug | +---------------------------------------------------------------------------+ Warnung     Setzen Sie nicht die "$TAPE"-Variable, außer Sie sind sich über die Folgen im klaren. Sie verändern dadurch das Verhalten von tar (1). * Ein gezipptes tar(1)-Archiv verwendet die Dateierweiterung ".tgz" oder ".tar.gz". * Ein xz-komprimiertes tar(1)-Archiv verwendet die Dateierweiterung ".txz" oder ".tar.xz". * Die Popularität der Kompressionsmethoden in FOSS-Programmen wie tar(1) hat sich mit der Zeit wie folgt verschoben: gzip → bzip2 → xz. * cp(1), scp(1) und tar(1) könnten Einschränkungen bei speziellen Dateien haben. cpio(1) ist dabei erheblich vielseitiger.     * cpio(1) wurde entwickelt, um zusammen mit find(1) und anderen Befehlen verwendet zu werden und ist geeignet, Backup-Skripte zu erstellen, da der Teil des Skriptes zur Dateiauswahl eigenständig getestet werden kann. * Die interne Struktur von Libreoffice-Dateien entspricht der von ".jar"-Dateien, die auch mit unzip geöffnet werden können. * Das de-facto plattform-übergreifende Archivwerkzeug ist zip. Benutzen Sie es in der Art "zip -rX", um maximal mögliche Kompatibilität zu erreichen. Verwenden Sie auch die Option "-s", wenn die maximale Dateigröße bei Ihnen relevant ist. 10.1.2. Kopier- und Synchronisationswerkzeuge     Hier eine Zusammenfassung von einfachen Kopier- und Backup-Werkzeugen im Debian-System: Tabelle 10.2. Liste von Kopier- und Synchronisationswerkzeugen +---------------------------------------------------------------+ | Paket |Popcon|Größe|Werkzeug| Funktion | |--------------+------+-----+--------+--------------------------| | | | | |Dateien und Verzeichnisse | |coreutils |V:880,|18307|GNU cp |lokal kopieren (verwenden | | |I:999 | | |Sie "-a" für rekursive | | | | | |Operationen) | |--------------+------+-----+--------+--------------------------| | | | | |Dateien und Verzeichnisse | |openssh-client|V:866,|4959 |scp |von fern kopieren (Client,|     | |I:996 | | |verwenden Sie "-r" für | | | | | |rekursive Operationen) | |--------------+------+-----+--------+--------------------------| | |V:730,| | |Dateien und Verzeichnisse | |openssh-server|I:814 |1804 |sshd |von fern kopieren (ferner | | | | | |Server) | |--------------+------+-----+--------+--------------------------| |rsync |V:246,|781 | |1-Weg-Synchronisation und | | |I:552 | | |-Backup von fern | |--------------+------+-----+--------+--------------------------| |unison |V:3, |14 | |2-Wege-Synchronisation und| | |I:15 | | |-Backup von fern | +---------------------------------------------------------------+     Das Kopieren von Dateien mit rsync(8) bietet mehr Funktionalitäten als mit anderen Werkzeugen: * Delta-Transfer-Algorithmus, der nur die Unterschiede zwischen Quelle und Ziel überträgt; * schneller Prüf-Algorithmus, der (standardmäßig) nach Dateien sucht, die sich in Größe oder Änderungs-Zeitstempel verändert haben;     * die Optionen "--exclude" und "--exclude-from", vergleichbar mit denen von tar(1); * die Syntax des Schrägstrichs hinter dem Quellverzeichnis, die verhindert, dass eine zusätzliche Verzeichnisebene auf dem Zielort erstellt wird. Tipp     Versionskontrollsysteme (VCS) wie die in Tabelle 10.14, „Liste anderer Versionskontrollsystem-Werkzeuge“ können ebenfalls als Mehrwege-Kopier- und Synchronisationswerkzeuge dienen. 10.1.3. Aufrufe für Archivierungsoperationen Hier finden Sie mehrere Wege, um den kompletten Inhalt des     Verzeichnisses "./source" mit verschiedenen Werkzeugen zu archivieren oder dearchivieren.     GNU tar(1):     $ tar -cvJf archive.tar.xz ./source $ tar -xvJf archive.tar.xz     Alternativ auch:     $ find ./source -xdev -print0 | tar -cvJf archive.tar.xz --null -T -     cpio(1):     $ find ./source -xdev -print0 | cpio -ov --null > archive.cpio; xz archive.cpio $ zcat archive.cpio.xz | cpio -i 10.1.4. Aufrufe für Kopieroperationen Hier finden Sie mehrere Wege, um den kompletten Inhalt des     Verzeichnisses "./source" mit verschiedenen Werkzeugen zu kopieren. * Lokale Kopie: "./source"-Verzeichnis → "/dest"-Verzeichnis     * Kopie auf einen fernen Rechner: "./source"-Verzeichnis auf dem lokalen Rechner → "/dest"-Verzeichnis auf dem Rechner "user@host.dom"     rsync(8):     # cd ./source; rsync -aHAXSv . /dest # cd ./source; rsync -aHAXSv . user@host.dom:/dest     Sie können auch die Syntax mit Schrägstrich am Ende des Zielverzeichnisses nutzen:     # rsync -aHAXSv ./source/ /dest # rsync -aHAXSv ./source/ user@host.dom:/dest     Alternativ auch:     # cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . /dest # cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . user@host.dom:/dest     GNU cp(1) und openSSH scp(1):     # cd ./source; cp -a . /dest # cd ./source; scp -pr . user@host.dom:/dest     GNU tar(1):     # (cd ./source && tar cf - . ) | (cd /dest && tar xvfp - ) # (cd ./source && tar cf - . ) | ssh user@host.dom '(cd /dest && tar xvfp - )'     cpio(1):     # cd ./source; find . -print0 | cpio -pvdm --null --sparse /dest Sie können in allen Beispielen, die einen "." enthalten, diesen     "." durch "foo" ersetzen, um Dateien aus dem Verzeichnis "./ source/foo" in das Verzeichnis "/dest/foo" zu kopieren. Auch kann in allen Beispielen, die einen "." enthalten, dieser "." durch einen absoluten Pfad wie "/pfad/zu/source/foo" ersetzt     werden, damit kann dann auf "cd ./source;" verzichtet werden. Dadurch werden, abhängig von den verwendeten Werkzeugen, die Dateien an unterschiedliche Orte kopiert: * bei rsync(8), GNU cp(1) und scp(1): nach "/dest/foo";     * bei GNU tar(1) und cpio(1): nach "/dest/pfad/zu/source/foo". Tipp     rsync(8) und GNU cp(1) unterstützen die Option "-u", um Dateien zu überspringen, die am Zielort neuer sind als im Quellverzeichnis. 10.1.5. Aufrufe für die Auswahl von Dateien find(1) wird verwendet, um Dateien für Archivierungs- und Kopierbefehle auszuwählen (lesen Sie Abschnitt 10.1.3, „Aufrufe für Archivierungsoperationen“ und Abschnitt 10.1.4, „Aufrufe für     Kopieroperationen“) oder xargs(1) (Näheres in Abschnitt 9.4.9, „Einen Befehl wiederholt mit einer Schleife über verschiedene Dateien ausführen“). Dies kann mit deren Befehlsargumenten noch erweitert werden.     Die grundsätzliche Syntax von find(1) kann wie folgt zusammengefasst werden: * Seine bedingten Argumente werden von links nach rechts ausgewertet. * Die Auswertung wird beendet, sobald ihr Resultat ermittelt wurde. * Ein "logisches ODER" (definiert über "-o" zwischen den Bedingungen) hat eine niedrigere Priorität als ein "logisches UND" (das über "-a" oder nichts zwischen den Bedingungen definiert wird). * Ein "logisches NICHT" (definiert über "!" vor der Bedingung) hat eine höhere Priorität als ein "logisches UND". * "-prune" liefert immer ein logisches WAHR zurück und, falls es ein Verzeichnis ist, wird die Suche nach Dateien an diesem Punkt beendet.     * "-name" findet Dateien über den Anfang des Dateinamens mittels Shell-Glob-Suchmuster (lesen Sie dazu Abschnitt 1.5.6, „Shell-Glob“), findet sie aber über Metazeichen wie "*" und "?" auch bei einem führenden "." (neue POSIX-Funktionalität). * "-regex" findet Dateien mit vollständigem Pfad standardmäßig über Emacs-artige reguläre Ausdrücke (BRE, nähere Infos finden Sie in Abschnitt 1.6.2, „Reguläre Ausdrücke“). * "-size" findet Dateien basierend auf der Dateigröße (mit einem "+" vor dem Wert für größer, mit einem "-" für kleiner). * "-newer" findet Dateien, die neuer sind als in dem Argument angegeben. * "-print0" liefert immer ein logisches WAHR zurück und gibt den kompletten Dateinamen (abgeschlossen durch ein Nullzeichen) auf der Standardausgabe aus.     find(1) wird oft in einem idiomatischen Stil verwendet, wie hier: # find /path/to \ -xdev -regextype posix-extended \     -type f -regex ".*\.cpio|.*~" -prune -o \ -type d -regex ".*/\.git" -prune -o \ -type f -size +99M -prune -o \ -type f -newer /path/to/timestamp -print0     Das bedeutet folgendes: 1. nach allen Dateien suchen, beginnend in "/pfad/zu"; 2. die Suche global auf das Dateisystem beschränken, in dem sie begonnen wurde, und stattdessen reguläre Ausdrücke (ERE, lesen Sie dazu Abschnitt 1.6.2, „Reguläre Ausdrücke“) verwenden; 3. Dateien ausschließen, auf die die regulären Ausdrücke ".* \.cpio" oder ".*~" zutreffen, indem die Suche abgebrochen     wird; 4. Verzeichnisse ausschließen, auf die der reguläre Ausdruck ".* /\.git" zutrifft, indem die Suche abgebrochen wird; 5. Dateien ausschließen, die größer als 99 Megabyte (1048576 Byte) sind, indem die Suche abgebrochen wird; 6. Dateinamen ausgeben, die obige Suchkriterien erfüllen und neuer als "/path/to/timestamp" sind.     Bitte beachten Sie die idiomatische Verwendung von "-prune -o", um in obigen Beispielen Dateien auszuschließen. Anmerkung Auf Unix-artigen Nicht-Debian-Systemen werden einige Optionen von     find(1) unter Umständen nicht unterstützt. Versuchen Sie in diesem Fall, die Suchmethoden anzupassen und "-print0" durch "-print" zu ersetzen. Unter Umständen müssen Sie auch zugehörige Befehle anpassen. 10.1.6. Archivierungsmedien Wenn Sie Speichermedien für die Sicherung wichtiger Daten suchen, sollten Sie sorgfältig deren Einschränkungen abwägen. Für eine kleine persönliche Datensicherung verwende ich CD-R und DVD-R von     einem Markenhersteller und lagere die Disks in einer kühlen, dunklen, trockenen und sauberen Umgebung. (Für die professionelle Nutzung scheinen Tapes (Speicherbänder) zur Archivierung sehr beliebt zu sein.) Anmerkung Ein feuerbeständiger Tresor ist gedacht für Dokumente in     Papierform. Jedoch haben die meisten Speichermedien eine niedrigere Temperaturtoleranz als Papier. Ich baue auf mehrere sicher verschlüsselte Kopien, die an verschiedenen sicheren Orten aufbewahrt werden.     Optimistische Angabe der Lebensdauer von Speichermedien, gefunden im Internet (überwiegend Herstellerangaben): * 100 Jahre und mehr: säurefreies Papier mit Tinte; * 100 Jahre: Optische Speichermedien (CD/DVD, CD-R/DVD-R);     * 30 Jahre: Magnetische Speichermedien (Bänder, Disketten); * 20 Jahre: Optische Medien basierend auf Phasenänderung (CD-RW).     Hierbei sind keine mechanischen Ausfälle durch Handhabung usw. berücksichtigt.     Optimistische Angabe von Schreibzyklen der Speichermedien, gefunden im Internet (überwiegend Herstellerangaben): * 250000 Zyklen und mehr: Festplattenlaufwerk; * 10000 Zyklen und mehr: Flash-Speicher;     * 1000 Zyklen: CD-RW/DVD-RW; * 1 Zyklus: CD-R/DVD-R, Papier. Achtung     Die obigen Angaben zu Lebensdauer und Schreibzyklen sollten nicht für Entscheidungen bezüglich kritischer Datenspeicherung herangezogen werden. Bitte konsultieren Sie in diesem Fall die spezifischen Produktinformationen des Herstellers. Tipp     Da CD-R/DVD-R und Papier nur einmal beschrieben werden können, schützen sie von Natur aus vor dem versehentlichen Datenverlust durch Überschreiben. Dies ist ein Vorteil! Tipp     Wenn Sie eine schnelle und wiederholte Sicherung großer Datenmengen benötigen, könnte eine Festplatte in einem fernen Rechner, verbunden über eine schnelle Internetverbindung, die einzige realistische Option sein. Tipp     Wenn Sie wiederbeschreibbare Medien für Ihre Backups verwenden, könnte es eine gute Idee sein, Dateisysteme wie btrfs oder zfs zu nutzen, die nur-lesbare Schnappschüsse unterstützen. 10.1.7. Wechseldatenträger     Wechseldatenträger können folgende Geräte sein: * USB-Flash-Speicher (USB-Stick); * Festplattenlaufwerk;     * Optisches Laufwerk (CD/DVD/BD); * Digitalkamera; * Digitaler Mediaplayer.     Sie können über eine dieser Möglichkeiten verbunden sein: * USB;     * IEEE 1394 / FireWire; * PC Card. Moderne Arbeitsplatzumgebungen wie GNOME und KDE können diese     Wechseldatenträger auch ohne einen entsprechenden "/etc/ fstab"-Eintrag automatisiert einbinden. * Das udisks2-Paket enthält einen Daemon und dazugehörige Hilfsprogramme, um diese Datenträger automatisch einzubinden und zu trennen.     * D-bus erzeugt Ereignisse, um automatische Prozesse anzustoßen. * PolicyKit stellt die erforderlichen Berechtigungen bereit. Tipp     Automatisch eingebundene Geräte haben eventuell die mount-Option "uhelper=", die von umount(8) genutzt wird. Tipp     In modernen Arbeitsplatzumgebungen funktioniert das automatische Einbinden von Laufwerken nur, wenn diese Geräte nicht in "/etc/ fstab" aufgelistet sind. Der Einbindungspunkt wird in modernen Umgebungen in der Form "/     media/benutzername/laufwerksname" abgebildet; die Laufwerksbezeichnung (manchmal auch als Disk-Label bezeichnet) kann wie folgt angepasst werden: * mlabel(1) bei FAT-Dateisystemen;     * genisoimage(1) mit der Option "-V" bei ISO9660-Dateisystemen; * tune2fs(1) mit der Option "-L" bei ext2-/ext3-/ ext4-Dateisystemen. Tipp     Die verwendete Zeichenkodierung muss unter Umständen als mount-Option angegeben werden (lesen Sie dazu Abschnitt 8.1.3, „Dateinamenkodierung“). Tipp Die Verwendung des grafischen GUI-Menüs zur Trennung eines     eingebundenen Dateisystems könnte auch dessen dynamisch erzeugte Gerätedatei (z.B. "/dev/sdc" entfernen. Falls Sie diese Gerätedatei erhalten möchten, trennen Sie die Einbindung mit dem umount(8)-Befehl von einem Shell-Prompt. 10.1.8. Dateisystemauswahl für den Datenaustausch Um Daten mit anderen Systemen über Wechseldatenträger     auszutauschen, sollten Sie diese mit einem Dateisystem formatieren, das von beiden Systemen unterstützt wird. Tabelle 10.3. Liste von Dateisystemen für Wechseldatenträger mit typischen Anwendungsszenarien +---------------------------------------------------------------+ |Dateisystemname| Typisches Anwendungsszenario | |---------------+-----------------------------------------------| |FAT12 |Plattformübergreifender Datenaustausch mittels | | |Diskette (<32 MiB) | |---------------+-----------------------------------------------| |FAT16 |Plattformübergreifender Datenaustausch mittels | | |kleiner festplatten-ähnlicher Geräte (<2 GiB) | |---------------+-----------------------------------------------| | |Plattformübergreifender Datenaustausch mittels | |FAT32 |großer festplatten-ähnlicher Geräte (<8 TiB, | | |unterstützt von Systemen neuer als MS Windows95| | |OSR2) | |---------------+-----------------------------------------------| | |Plattformübergreifender Datenaustausch mittels | |exFAT |großer festplatten-ähnlicher Geräte (<512 TiB, | | |unterstützt von WindowsXP, Mac OS X Snow | | |Leopard 10.6.5 und Linux-Kernel ab 5.4) | |---------------+-----------------------------------------------| | |Plattformübergreifender Datenaustausch mittels | | |großer festplatten-ähnlicher Geräte (nativ | |NTFS |unterstützt von MS Windows NT und späteren |     | |Versionen; auch unterstützt durch NTFS-3G via | | |FUSE unter Linux) | |---------------+-----------------------------------------------| |ISO9660 |Plattformübergreifender Austausch statischer | | |Daten mittels CD-R und DVD+/-R | |---------------+-----------------------------------------------| |UDF |inkrementelles Schreiben von Daten auf CD-R und| | |DVD+/-R (neu) | |---------------+-----------------------------------------------| |MINIX |platzsparendes Speichern von Unix-Daten auf | | |Diskette | |---------------+-----------------------------------------------| |ext2 |Datenaustausch mit älteren Linux-Systemen auf | | |festplatten-ähnlichen Geräten | |---------------+-----------------------------------------------| |ext3 |Datenaustausch mit älteren Linux-Systemen auf | | |festplatten-ähnlichen Geräten | |---------------+-----------------------------------------------| |ext4 |Datenaustausch mit aktuellen Linux-Systemen auf| | |festplatten-ähnlichen Geräten | |---------------+-----------------------------------------------| | |Datenaustausch mit aktuellen Linux-Systemen auf| |btrfs |festplatten-ähnlichen Geräten mit nur-lesbaren | | |Schnappschüssen | +---------------------------------------------------------------+ Tipp     Details zum plattformübergreifenden Datenaustausch mit Verschlüsselung auf Geräteebene finden Sie in Abschnitt 9.9.1, „Verschlüsselung von Wechseldatenträgern mit dm-crypt/LUKS“. Das FAT-Dateisystem wird von nahezu allen modernen Dateisystemen     unterstützt und ist für den Datenaustausch über Wechseldatenträger sehr nützlich. Wenn Sie Geräte wie externe Festplatten für den     plattformübergreifenden Datenaustausch mit dem FAT-Dateisystem formatieren, sollten die folgenden Varianten eine sichere Wahl sein: * Partitionieren Sie das Medium mit fdisk(8), cfdisk(8) oder parted(8) (lesen Sie dazu Abschnitt 9.6.2, „Konfiguration der Festplattenpartitionen“) mit einer einzigen primären Partition und markieren Sie sie wie folgt: + Typ "6" (FAT16) für Medien kleiner als 2 GB;     + Typ "c" (FAT32, LBA) für größere Medien. * Formatieren der primären Partition mit mkfs.vfat(8) wie folgt: + einfach über den Gerätenamen, z.B. "/dev/sda1" für FAT16; + über die explizite Option und den Gerätenamen, z.B. "-F 32 /dev/sda1" für FAT32.     Wenn das FAT- oder ISO9660-Dateisystem für den Dateiaustausch verwendet wird, sollte folgendes eine sichere Variante sein: * archivieren der Dateien in eine Archivdatei mittels tar(1) oder cpio(1), um die langen Dateinamen, symbolischen Links, originalen Unix-Dateiberechtigungen und Benutzerinformationen zu erhalten;     * splitten der Archivdatei in Stücke kleiner als 2 GiB mittels split(1), um so die Beschränkung der Dateigröße umgehen zu können; * verschlüsseln der Archivdatei, um den Inhalt vor unberechtigtem Zugriff zu schützen. Anmerkung Bei dem FAT-Dateisystem liegt - begründet durch sein Design - die     maximale Dateigröße bei (2^32 - 1) Byte = (4 GiB - 1 Byte). Bei einigen Anwendungen auf älteren 32-Bit-Betriebssystemen war die maximale Dateigröße sogar noch kleiner: (2^31 - 1) Byte = (2 GiB - 1 Byte). Debian ist von letzterem nicht betroffen. Anmerkung Microsoft selbst empfiehlt FAT nicht für Laufwerke oder     Partitionen über 200 MB Größe. Microsoft hebt die Nachteile wie ineffiziente Speicherplatznutzung in seiner "Übersicht über die Dateisysteme FAT, HPFS und NTFS" hervor. Natürlich sollten wir für Linux normalerweise das ext4-Dateisystem nutzen. Tipp     Mehr Informationen über Dateisysteme und Dateisystemzugriffe finden Sie im "Filesystems HOWTO" (Englisch). 10.1.9. Datenaustausch über das Netzwerk Wenn Sie Daten mit anderen Systemen über das Netzwerk     austauschen, sollten Sie allgemein gängige Dienste verwenden. Hier einige Hinweise: Tabelle 10.4. Liste von Netzwerkdiensten mit typischen Anwendungsszenarien +---------------------------------------------------------------+ | Netzwerkdienst | Beschreibung des typischen | | | Anwendungsszenarios | |----------------------+----------------------------------------| |SMB/CIFS - über |Datenaustausch über "Microsoft Windows | |Netzwerk mit Samba |Network", Näheres in smb.conf(5) und The| |eingebundenes |Official Samba 3.x.x HOWTO and Reference| |Dateisystem |Guide oder im samba-doc-Paket | |----------------------+----------------------------------------| |NFS - über Netzwerk |Datenaustausch über "Unix/Linux | |mittels Linux-Kernel |Network", Näheres in exports(5) und im |     |eingebundenes |Linux NFS-HOWTO | |Dateisystem | | |----------------------+----------------------------------------| |HTTP-Dienst |Datenaustausch zwischen Web-Server/ | | |-Client | |----------------------+----------------------------------------| | |Datenaustausch zwischen Web-Server/ | |HTTPS-Dienst |-Client mit verschlüsseltem Secure | | |Sockets Layer (SSL) oder Transport Layer| | |Security (TLS) | |----------------------+----------------------------------------| |FTP-Dienst |Datenaustausch zwischen FTP-Server/ | | |-Client | +---------------------------------------------------------------+ Obwohl Dateisysteme, die über solche Netzwerk-gestützten     Transfermethoden eingebunden sind, für den Datenaustausch sehr praktisch sind, könnten Sie unsicher sein. Die genutzte Netzwerkverbindung muss wie folgt abgesichert sein: * verschlüsseln Sie sie mit SSL/TLS; * tunneln Sie sie via SSH;     * tunneln Sie sie via VPN; * schränken Sie den Zugriff über eine Firewall ein.     Lesen Sie auch Abschnitt 6.5, „Weitere Netzwerkanwendungs-Server“ und Abschnitt 6.6, „Weitere Netzwerkanwendungs-Clients“. 10.2. Datensicherung und -wiederherstellung Wir alle wissen, dass Computer manchmal defekt sein können oder menschliche Fehler System- und Datenausfälle verursachen.     Aktionen zur Datensicherung und -wiederherstellung sind unverzichtbarer Teil einer erfolgreichen Systemadministration. Alle möglichen Fehlervarianten werden Sie eines Tages ereilen. Tipp     Halten Sie Ihr Datensicherungssystem einfach und führen Sie häufig Sicherungen durch. Aktuelle Sicherungen von seinen Daten zu haben ist wichtiger als die technische Qualität der Sicherungsmethodik. 10.2.1. Richtlinien für Datensicherung und -wiederherstellung     Es gibt drei Schlüsselfaktoren, die letztendig die Sicherungs- und Wiederherstellungsstrategie bestimmen: 1. Zu wissen, was man sichern und wiederherstellen muss: + Daten, die direkt von Ihnen selbst erstellt wurden: Daten in "~/"; + Daten, die von Anwendungen, die Sie verwenden, erstellt wurden: Daten in "/var/" (außer "/var/cache/", "/var/run/ " und "/var/tmp/"); + Systemkonfigurationsdateien: Daten in "/etc/"; + Lokale Programme: Daten in "/usr/local/" oder "/opt/"; + Informationen zur Systeminstallation: Aufzeichnungen über wichtige Schritte (Partitionierung, …) in einfacher Textform; + Daten, von denen Sie wissen, dass sie wichtig sind, bestätigt durch im Vornherein versuchsweise durchgeführte Wiederherstellungsoperationen. o Cron-Job als Benutzerprozess: Dateien im Verzeichnis "/var/spool/cron/crontabs"; anschließend cron(8) neu starten. Informationen über cron(8) und crontab(1) in Abschnitt 9.4.14, „Regelmäßige Aufgaben planen“. o Systemd Timer-Jobs als Benutzerprozess: Dateien im Verzeichnis "~/.config/systemd/user". Näheres in systemd.timer(5) und systemd.service(5). o Autostart-Jobs als Benutzerprozess: Dateien im Verzeichnis "~/.config/autostart". Siehe Desktop Application Autostart Specification (Englisch). 2. Wissen, wie Sie Daten sichern und wiederherstellen: + Sicheres Speichern von Daten: geschützt vor Überschreiben und Systemausfällen; + Häufige Datensicherungen: Sicherungen planen; + Redundante Datensicherungen: Spiegeln der Sicherungsdateien; + Idiotensicheres Vorgehen: Sicherung durch einen einfachen Befehl.     3. Bewertung der entstehenden Risiken und Kosten: + Risiko, falls die Daten verloren gehen; o Daten sollten zumindest auf verschiedenen Festplattenpartitionen, besser sogar auf unterschiedlichen Laufwerken und Maschinen liegen, um unanfällig gegen Dateisystembeschädigungen zu sein. Wichtige Daten sollten am besten auf einem schreibgeschützten Dateisystem abgelegt werden. ^[4] + Risiko, falls die Daten öffentlich werden; o Sensible Identitätsdaten wie "/etc/ssh/ ssh_host_*_key", "~/.gnupg/*", "~/.ssh/*", "~/.local/ share/keyrings/*", "/etc/passwd", "/etc/shadow", "popularity-contest.conf", "/etc/ppp/pap-secrets" oder "/etc/exim4/passwd.client" sollten nur verschlüsselt gesichert werden. ^[5] (Siehe auch Abschnitt 9.9, „Tipps zur Datenverschlüsselung“.) o Fügen Sie niemals System-Login-Passwörter oder Verschlüsselungs-Passphrasen in ein Skript ein, nicht einmal auf einem System, dem Sie vertrauen. (Siehe dazu Abschnitt 10.3.6, „Passwort-Schlüsselbund“.) + Mögliche Ausfälle und deren Wahrscheinlichkeit. o Hardware-Defekte (speziell bei Festplatten) sind wahrscheinlich o Dateisysteme könnten beschädigt werden und enthaltene Daten gehen verloren o Fernen Speichersystemen (Cloud, ...) können Sie aufgrund von Sicherheitslücken nicht trauen o Ein schwacher Passwortschutz kann leicht kompromittiert werden o Systeme zur Festlegung von Dateiberechtigungen können kompromittiert werden + Für die Sicherung benötigte Ressourcen: Personen, Hardware, Software, …; o Automatisch ablaufende Backups über cron-Jobs oder systemd-timer-Jobs Tipp     Sie können die debconf-Konfigurationsdaten mit "debconf-set-selections debconf-selections" wiederherstellen und die dpkg-Paketauswahl mit "dpkg --set-selection &2 ; exit 1     fi MSGID=$(notify-send -p "bkup.sh $DSTSV" "in progress ...") if [ ! -d "$DSTFS/$DSTSV" ]; then btrfs subvolume create "$DSTFS/$DSTSV" mkdir -p "$DSTSS" fi rsync -aHxS --delete --mkpath "${SRC}/" "${DSTFS}/${DSTSV}" btrfs subvolume snapshot -r "${DSTFS}/${DSTSV}" ${DSTSS}/$(date -u --iso=min) notify-send -r "$MSGID" "bkup.sh $DSTSV" "finished!"     Here, only the basic tool rsync(1) is used to facilitate system backup and the storage space is efficiently used by Btrfs. Tipp     FYI: This author uses his own similar shell script "bss: Btrfs Subvolume Snapshot Utility" for his workstation. 10.2.3.1. GUI backup     Here is an example to setup the single GUI click backup. * Prepare a USB storage device to be used for backup. + Format a USB storage device with one partition in btrfs with its label name as "BKUP". This can be encrypted (see Abschnitt 9.9.1, „Verschlüsselung von Wechseldatenträgern mit dm-crypt/LUKS“). + Plug this in to your system. The desktop system should automatically mount it as "/media/penguin/BKUP".     + Execute "sudo chown penguin:penguin /media/penguin/BKUP" to make it writable by the user. * Create "~/.local/share/applications/BKUP.desktop" following techniques written in Abschnitt 9.4.10, „Ein Programm aus der grafischen Oberfläche heraus starten“ as: [Desktop Entry] Name=bkss Comment=Backup and snapshot of ~/Documents Exec=/usr/local/bin/bkss.sh /home/penguin/Documents /media/penguin/BKUP Documents Type=Application     For each GUI click, your data is backed up from "~/Documents" to a USB storage device and a read-only snapshot is created. 10.2.3.2. Mount event triggered backup     Here is an example to setup for the automatic backup triggered by the mount event. * Prepare a USB storage device to be used for backup as in Abschnitt 10.2.3.1, „GUI backup“. * Create a systemd service unit file "~/.config/systemd/user/ back-BKUP.service" as: [Unit] Description=USB Disk backup Requires=media-%u-BKUP.mount After=media-%u-BKUP.mount     [Service] ExecStart=/usr/local/bin/bkss.sh %h/Documents /media/%u/BKUP Documents StandardOutput=append:%h/.cache/systemd-snap.log StandardError=append:%h/.cache/systemd-snap.log [Install] WantedBy=media-%u-BKUP.mount * Enable this systemd unit configuration with the following: $ systemctl --user enable bkup-BKUP.service     For each mount event, your data is backed up from "~/Documents" to a USB storage device and a read-only snapshot is created. Here, names of systemd mount units that systemd currently has in     memory can be asked to the service manager of the calling user with "systemctl --user list-units --type=mount". 10.2.3.3. Timer event triggered backup     Here is an example to setup for the automatic backup triggered by the timer event. * Prepare a USB storage device to be used for backup as in Abschnitt 10.2.3.1, „GUI backup“. * Create a systemd timer unit file "~/.config/systemd/user/ snap-Documents.timer" as: [Unit] Description=Run btrfs subvolume snapshot on timer Documentation=man:btrfs(1) [Timer] OnStartupSec=30 OnUnitInactiveSec=900 [Install] WantedBy=timers.target     * Create a systemd service unit file "~/.config/systemd/user/ snap-Documents.service" as: [Unit] Description=Run btrfs subvolume snapshot Documentation=man:btrfs(1) [Service] Type=oneshot Nice=15 ExecStart=/usr/local/bin/bkss.sh %h/Documents /media/%u/BKUP Documents IOSchedulingClass=idle CPUSchedulingPolicy=idle StandardOutput=append:%h/.cache/systemd-snap.log StandardError=append:%h/.cache/systemd-snap.log * Enable this systemd unit configuration with the following: $ systemctl --user enable snap-Documents.timer     For each timer event, your data is backed up from "~/Documents" to a USB storage device and a read-only snapshot is created. Here, names of systemd timer user units that systemd currently     has in memory can be asked to the service manager of the calling user with "systemctl --user list-units --type=timer". For the modern desktop system, this systemd approach can offer     more fine grained control than the traditional Unix ones using at (1), cron(8), or anacron(8). 10.3. Datensicherheits-Infrastruktur Die Sicherheitsinfrastruktur für Ihre Daten wird durch eine     Kombination verschiedener Programme gewährleistet: Verschlüsselungswerkzeug, Message-Digest-Werkzeug und Signaturwerkzeug. Tabelle 10.6. Liste von Werkzeugen für die Datensicherheits-Infrastruktur +----------------------------------------------------------------------+ | Paket |Popcon|Größe| Befehl | Beschreibung | |---------------+------+-----+-----------+-----------------------------| | |V:554,| | |GNU Privacy Guard - OpenPGP | |gnupg |I:906 |885 |gpg(1) |Verschlüsselungs- und | | | | | |Signaturwerkzeug | |---------------+------+-----+-----------+-----------------------------| | |V:893,| | |GNU Privacy Guard - Werkzeug | |gpgv |I:999 |922 |gpgv(1) |zur Verifizierung von | | | | | |Signaturen | |---------------+------+-----+-----------+-----------------------------| | | | | |lediglich die geheimen | |paperkey |V:1, |58 |paperkey(1)|Informationen aus geheimen | | |I:14 | | |OpenPGP-Schlüsseln | | | | | |extrahieren | |---------------+------+-----+-----------+-----------------------------| | | | | |Hilfsprogramme für die | | |V:19, | |cryptsetup |dm-crypt |     |cryptsetup |I:79 |417 |(8), … |Blockgeräte-Verschlüsselung | | | | | |(enthält Unterstützung für | | | | | |LUKS) | |---------------+------+-----+-----------+-----------------------------| | |V:880,| | |MD5-Message-Digest | |coreutils |I:999 |18307|md5sum(1) |(Prüfsummen) berechnen und | | | | | |überprüfen | |---------------+------+-----+-----------+-----------------------------| | |V:880,| | |SHA1-Message-Digest | |coreutils |I:999 |18307|sha1sum(1) |(Prüfsummen) berechnen und | | | | | |überprüfen | |---------------+------+-----+-----------+-----------------------------| |openssl |V:841,|2111 |openssl |Message-Digest mit "openssl | | |I:995 | |(1ssl) |dgst" berechnen (OpenSSL) | |---------------+------+-----+-----------+-----------------------------| |libsecret-tools|V:0, |41 |secret-tool|Speichern und Empfangen von | | |I:10 | |(1) |Passwörtern (CLI) | |---------------+------+-----+-----------+-----------------------------| |seahorse |V:80, |7987 |seahorse(1)|Schlüsselverwaltungs-Werkzeug| | |I:269 | | |(GNOME) | +----------------------------------------------------------------------+ In Abschnitt 9.9, „Tipps zur Datenverschlüsselung“ finden Sie     Infos über dm-crypt und fscrypt, die automatische Datenverschlüsselungs-Infrastrukturen über Linux-Kernelmodule implementieren. 10.3.1. Schlüsselverwaltung für GnuPG     Hier einige Befehle für die grundlegende Schlüsselverwaltung mit GNU Privacy Guard: Tabelle 10.7. Liste von GNU-Privacy-Guard-Befehlen für die Schlüsselverwaltung +---------------------------------------------------------------+ | Befehl | Beschreibung | |--------------------+------------------------------------------| |gpg --gen-key |einen neuen Schlüssel generieren | |--------------------+------------------------------------------| |gpg --gen-revoke |einen Widerrufschlüssel (revoke key) für | |meine_Nutzer_ID |meine_Nutzer_ID generieren | |--------------------+------------------------------------------| |gpg --edit-key |Schlüssel interaktiv editieren, "help" | |Nutzer_ID |eingeben für weitere Hilfe | |--------------------+------------------------------------------| |gpg -o datei |alle Schlüssel in datei exportieren | |--export | | |--------------------+------------------------------------------| |gpg --import datei |alle Schlüssel aus datei importieren | |--------------------+------------------------------------------|     |gpg --send-keys |Schlüssel von Nutzer_ID zum | |Nutzer_ID |Schlüsselserver übertragen | |--------------------+------------------------------------------| |gpg --recv-keys |Schlüssel von Nutzer_ID vom | |Nutzer_ID |Schlüsselserver empfangen | |--------------------+------------------------------------------| |gpg --list-keys |Schlüssel von Nutzer_ID auflisten | |Nutzer_ID | | |--------------------+------------------------------------------| |gpg --list-sigs |Signaturen von Nutzer_ID auflisten | |user_ID | | |--------------------+------------------------------------------| |gpg --check-sigs |Signaturen von Nutzer_ID überprüfen | |Nutzer_ID | | |--------------------+------------------------------------------| |gpg --fingerprint |Fingerabdruck von Nutzer_ID überprüfen | |Nutzer_ID | | |--------------------+------------------------------------------| |gpg --refresh-keys |lokalen Schlüsselring aktualisieren | +---------------------------------------------------------------+     Hier die Bedeutung des Vertrauenscodes: Tabelle 10.8. Liste der Bedeutungen des Vertrauenscodes +-------------------------------------------------------------+ |Code| Beschreibung des Vertrauenscodes | |----+--------------------------------------------------------| |- |Kein Besitzervertrauen zugewiesen / noch nicht berechnet| |----+--------------------------------------------------------| |e |Vertrauensberechnung fehlgeschlagen | |----+--------------------------------------------------------|     |q |nicht genügend Informationen für Berechnung | |----+--------------------------------------------------------| |n |diesem Schlüssel niemals vertrauen | |----+--------------------------------------------------------| |m |gerade noch vertrauenswert | |----+--------------------------------------------------------| |f |voll vertrauenswert | |----+--------------------------------------------------------| |u |absolut vertrauenswert | +-------------------------------------------------------------+     Folgendes lädt meinen Schlüssel "1DD8D791" auf den populären Schlüsselserver "hkp://keys.gnupg.net" hoch:     $ gpg --keyserver hkp://keys.gnupg.net --send-keys 1DD8D791     Ein gutes Standard-Schlüsselserver-Setup in "~/.gnupg/gpg.conf" (oder dem alten Ort "~/.gnupg/options") enthält folgendes:     keyserver hkp://keys.gnupg.net     Mit dem folgenden Befehl beziehen Sie unbekannte Schlüssel vom Schlüsselserver:     $ gpg --list-sigs --with-colons | grep '^sig.*\[User ID not found\]' |\ cut -d ':' -f 5| sort | uniq | xargs gpg --recv-keys Es gab einen Fehler in OpenPGP Public Key Server (Versionen vor 0.9.6), durch den Schlüssel mit mehr als zwei Unterschlüsseln     korrumpiert wurden. Das neue gnupg-Paket (>1.2.1-2) kann mit diesen korrumpierten Unterschlüsseln umgehen. Lesen Sie in gpg(1) den Abschnitt zur Option "--repair-pks-subkey-bug". 10.3.2. Verwendung von GnuPG mit Dateien     Hier einige Beispiele für die Verwendung von GNU Privacy Guard mit Dateien: Tabelle 10.9. Liste von GNU-Privacy-Guard-Befehlen mit Dateien +---------------------------------------------------------------+ | Befehl | Beschreibung | |-----------------------+---------------------------------------| |gpg -a -s datei |Signieren von datei in die | | |ASCII-bewehrte datei.asc | |-----------------------+---------------------------------------| |gpg --armor --sign |" | |datei | | |-----------------------+---------------------------------------| |gpg --clearsign datei |Signieren einer Nachricht mit | | |Klartextsignatur | |-----------------------+---------------------------------------| |gpg --clearsign datei| |Versenden einer Nachricht mit | |mail foo@example.org |Klartextsignatur an foo@example.org | |-----------------------+---------------------------------------| |gpg --clearsign | | |--not-dash-escaped |Klartext-signieren von patch-datei | |patch-datei | | |-----------------------+---------------------------------------| |gpg --verify datei |eine klartextsignierte datei | | |verifizieren | |-----------------------+---------------------------------------| |gpg -o datei.sig -b |Erzeugen einer losgelösten Signatur | |datei | | |-----------------------+---------------------------------------| |gpg -o file.sig |" | |--detach-sign file | | |-----------------------+---------------------------------------|     |gpg --verify datei.sig |Verifizieren von datei mit datei.sig | |datei | | |-----------------------+---------------------------------------| |gpg -o crypt_datei.gpg |Verschlüsselung mit öffentlichem | |-r name -e datei |Schlüssel für name von datei in | | |Binärdatei crypt_datei.pgp | |-----------------------+---------------------------------------| |gpg -o crypt_datei.gpg | | |--recipient name |" | |--encrypt datei | | |-----------------------+---------------------------------------| |gpg -o crypt_datei.asc |Verschlüsselung mit öffentlichem | |-a -r name -e datei |Schlüssel für name von datei in | | |ASCII-bewehrte Datei crypt_datei.pgp | |-----------------------+---------------------------------------| |gpg -o crypt_datei.gpg |symmetrische Verschlüsselung von | |-c datei |"datei" in crypt_datei.gpg | |-----------------------+---------------------------------------| |gpg -o crypt_datei.gpg |" | |--symmetric datei | | |-----------------------+---------------------------------------| |gpg -o crypt_datei.asc |symmetrische Verschlüsselung für name | |-a -c datei |von datei in ASCII-bewehrte Datei | | |crypt_datei.asc | |-----------------------+---------------------------------------| |gpg -o datei -d |Entschlüsselung | |crypt_datei.gpg -r name| | |-----------------------+---------------------------------------| |gpg -o datei --decrypt |" | |crypt_datei.gpg | | +---------------------------------------------------------------+ 10.3.3. Verwendung von GnuPG mit Mutt Fügen Sie Folgendes zu "~/.muttrc" hinzu, um zu verhindern, dass     das langsame GnuPG automatisch gestartet wird, während es durch Drücken von "S" im Indexmenü händisch gestartet werden kann:     macro index S ":toggle pgp_verify_sig\n" set pgp_verify_sig=no 10.3.4. Verwendung von GnuPG mit Vim Das gnupg-Plugin ermöglicht Ihnen, GnuPG für Dateien mit den     Endungen ".gpg", ".asc" und ".pgp" transparent laufen zu lassen: ^[6]     $ sudo aptitude install vim-scripts $ echo "packadd! gnupg" >> ~/.vim/vimrc 10.3.5. Die MD5-Prüfsumme md5sum(1) enthält ein Werkzeug, um über die in RFC1321     beschriebene Methode eine Digest-Datei zu erzeugen und jede Datei darüber zu verifizieren: $ md5sum foo bar >baz.md5 $ cat baz.md5 d3b07384d113edec49eaa6238ad5ff00 foo     c157a79031e1c40f85931829bc5fc552 bar $ md5sum -c baz.md5 foo: OK bar: OK Anmerkung Die Berechnung der MD5-Prüfsumme ist weniger CPU-intensiv als die     für die krypthographische Signatur durch GNU Privacy Guard (GnuPG). Üblicherweise ist nur die Digest-Datei der obersten Ebene (z.B. das Wurzelverzeichnis eines Verzeichnisbaums) kryptographisch signiert, um die Datenintegrität sicherzustellen. 10.3.6. Passwort-Schlüsselbund Im GNOME-System verwaltet das grafische Hilfsprogramm seahorse(1)     Passwörter und speichert sie sicher im Schlüsselbund ~/.local/ share/keyrings/*.     secret-tool(1) kann Passwörter über die Befehslzeile in diesem Schlüsselbund ablegen.     Lassen Sie uns die Passphrase für ein LUKS/ dm-crypt-verschlüsseltes Festplatten-Image speichern:     $ secret-tool store --label='LUKS passphrase for disk.img' LUKS my_disk.img Password: ********     Dieses gespeicherte Passwort kann ausgelesen und an andere Programme wie z.B. cryptsetup(8) übergegeen werden: $ secret-tool lookup LUKS my_disk.img | \     cryptsetup open disk.img disk_img --type luks --keyring - $ sudo mount /dev/mapper/disk_img /mnt Tipp     Wann immer Sie ein Passwort in einem Skript angeben müssen, verwenden Sie secret-tool und vermeiden Sie es, die Passphrase fest in dem Skript zu hinterlegen. 10.4. Werkzeuge zur Quellcode-Zusammenführung (merge)     Es gibt viele Werkzeuge für die Zusammenführung von Quellcode. Folgende Befehle haben meine Aufmerksamkeit erregt: Tabelle 10.10. Liste von Werkzeugen zur Quellcode-Zusammenführung +---------------------------------------------------------------+ | Paket |Popcon|Größe| Befehl | Beschreibung | |----------+------+-----+-----------+---------------------------| |patch |V:97, |248 |patch(1) |eine diff-Datei auf ein | | |I:700 | | |Original anwenden | |----------+------+-----+-----------+---------------------------| |vim |V:95, |3743 |vimdiff(1) |zwei Dateien nebeneinander | | |I:369 | | |in vim vergleichen | |----------+------+-----+-----------+---------------------------| | | | | |interaktives Werkzeug für | |imediff |V:0, |200 |imediff(1) |Zwei-/ | | |I:0 | | |Dreiwege-Zusammenführung | | | | | |mit Vollbildschirmmodus | |----------+------+-----+-----------+---------------------------| | |V:7, | | |vergleichen und | |meld |I:30 |3536 |meld(1) |zusammenführen von Dateien | | | | | |(GTK) | |----------+------+-----+-----------+---------------------------| |wiggle |V:0, |175 |wiggle(1) |zurückgewiesene Patches | | |I:0 | | |anwenden | |----------+------+-----+-----------+---------------------------| |diffutils |V:862,|1735 |diff(1) |Dateien Zeile für Zeile | | |I:996 | | |vergleichen | |----------+------+-----+-----------+---------------------------| | |V:862,| | |drei Dateien Zeile für | |diffutils |I:996 |1735 |diff3(1) |Zeile vergleichen und | | | | | |zusammenführen | |----------+------+-----+-----------+---------------------------| |quilt |V:2, |871 |quilt(1) |Serien von Patches | | |I:22 | | |verwalten | |----------+------+-----+-----------+---------------------------| | |V:7, | | |Wort-für-Wort-Unterschiede | |wdiff |I:51 |648 |wdiff(1) |zwischen Textdateien | | | | | |anzeigen | |----------+------+-----+-----------+---------------------------| | |V:13, | | |eine Grafik der | |diffstat |I:121 |74 |diffstat(1)|Veränderungen für eine | | | | | |diff-Datei erstellen | |----------+------+-----+-----------+---------------------------| | |V:16, | |combinediff|einen kumulativen Patch aus| |patchutils|I:119 |232 |(1) |zwei inkrementellen Patches| | | | | |erzeugen | |----------+------+-----+-----------+---------------------------| |patchutils|V:16, |232 |dehtmldiff |ein Diff aus einer | | |I:119 | |(1) |HTML-Seite extrahieren | |----------+------+-----+-----------+---------------------------| |patchutils|V:16, |232 |filterdiff |Diffs aus einer Diff-Datei | | |I:119 | |(1) |extrahieren oder entfernen |     |----------+------+-----+-----------+---------------------------| | | | | |von CVS erstellte | |patchutils|V:16, |232 |fixcvsdiff |Diff-Dateien, die patch(1) | | |I:119 | |(1) |falsch interpretiert, | | | | | |reparieren | |----------+------+-----+-----------+---------------------------| |patchutils|V:16, |232 |flipdiff(1)|die Reihenfolge zweier | | |I:119 | | |Patches ändern | |----------+------+-----+-----------+---------------------------| | | | | |anzeigen, welche Dateien | | |V:16, | | |von einem Patch | |patchutils|I:119 |232 |grepdiff(1)|entsprechend einem | | | | | |regulären Ausdruck | | | | | |modifiziert werden | |----------+------+-----+-----------+---------------------------| | |V:16, | |interdiff |Unterschiede zwischen zwei | |patchutils|I:119 |232 |(1) |Unified-Diff-Dateien | | | | | |anzeigen | |----------+------+-----+-----------+---------------------------| | |V:16, | | |zeigen, welche Dateien von | |patchutils|I:119 |232 |lsdiff(1) |einem Patch verändert | | | | | |werden | |----------+------+-----+-----------+---------------------------| | |V:16, | |recountdiff|Zähler und Offsets in | |patchutils|I:119 |232 |(1) |vereinheitlichten | | | | | |Context-Diffs neu berechnen| |----------+------+-----+-----------+---------------------------| | |V:16, | | |Offsets und Zähler eines | |patchutils|I:119 |232 |rediff(1) |hand-editierten Diffs | | | | | |bereinigen | |----------+------+-----+-----------+---------------------------| |patchutils|V:16, |232 |splitdiff |inkrementelle Patches | | |I:119 | |(1) |aussortieren | |----------+------+-----+-----------+---------------------------| |patchutils|V:16, |232 |unwrapdiff |Patches von fehlerhaften | | |I:119 | |(1) |Zeilenumbrüchen befreien | |----------+------+-----+-----------+---------------------------| | |V:0, | | |Unterschiede zwischen | |dirdiff |I:1 |167 |dirdiff(1) |Verzeichnissen anzeigen und| | | | | |zusammenführen | |----------+------+-----+-----------+---------------------------| | |V:0, | | |zwei Dateien Wort-für-Wort | |docdiff |I:0 |553 |docdiff(1) |/ Buchstabe-für-Buchstabe | | | | | |vergleichen | |----------+------+-----+-----------+---------------------------| |makepatch |V:0, |100 |makepatch |erweiterte Patch-Dateien | | |I:0 | |(1) |erzeugen | |----------+------+-----+-----------+---------------------------| |makepatch |V:0, |100 |applypatch |erweiterte Patch-Dateien | | |I:0 | |(1) |anwenden | +---------------------------------------------------------------+ 10.4.1. Unterschiede für Quelldateien extrahieren Die folgenden Prozeduren extrahieren die Unterschiede zwischen     zwei Quelldateien und erzeugen vereinheitlichte Diff-Dateien "file.patch0" bzw. "file.patch1", abhängig vom Speicherort der Dateien:     $ diff -u file.old file.new > file.patch0 $ diff -u old/file new/file > file.patch1 10.4.2. Aktualisierungen für Quelldateien zusammenführen Die Diff-Datei (alternativ auch Patch-Datei genannt) wird     genutzt, um eine Programmaktualisierung zu senden. Die Seite, die die Änderungen empfängt, wendet die Aktualisierung wie folgt an:     $ patch -p0 file < file.patch0 $ patch -p1 file < file.patch1 10.4.3. Interaktives Zusammenführen (merge) Wenn Sie zwei Varianten eines Quelltextes haben, können Sie     mittels imediff(1) eine interaktive Zweiwege-Zusammenführung durchführen:     $ imediff -o file.merged file.old file.new     Haben Sie drei Varianten eines Quelltextes, ist mit imediff(1) auch eine interaktive Dreiwege-Zusammenführung möglich:     $ imediff -o file.merged file.yours file.base file.theirs 10.5. Git Git ist derzeit das Werkzeug der Wahl für Versionskontrollsysteme     (VCS), da es alles Nötige sowohl für lokales wie auch für fernes Code-Management erledigen kann.     Debian stellt freie Git-Dienste über Debian Salsa bereit. Dokumentation finden Sie unter https://wiki.debian.org/Salsa.     Hier einige Git-betreffende Pakete: Tabelle 10.11. Liste von zu Git gehörigen Paketen und Befehlen +---------------------------------------------------------------------+ | Paket |Popcon|Größe| Befehl | Beschreibung | |----------------+------+-----+----------------+----------------------| | |V:351,| | |Git, das schnelle, | |git |I:549 |46734|git(7) |skalierbare, verteilte| | | | | |Versionskontrollsystem| |----------------+------+-----+----------------+----------------------| | | | | |grafische | |gitk |V:5, |1838 |gitk(1) |Browser-Oberfläche mit| | |I:33 | | |Historie für | | | | | |Git-Depots | |----------------+------+-----+----------------+----------------------| | |V:1, | | |grafische Oberfläche | |git-gui |I:18 |2429 |git-gui(1) |(ohne Historie) für | | | | | |Git | |----------------+------+-----+----------------+----------------------| | |V:0, | |git-send-email |eine Patch-Sammlung | |git-email |I:10 |1087 |(1) |aus Git als E-Mail | | | | | |versenden | |----------------+------+-----+----------------+----------------------|     |git-buildpackage|V:1, |1988 |git-buildpackage|das Debian-Paketieren | | |I:9 | |(1) |mit Git automatisieren| |----------------+------+-----+----------------+----------------------| |dgit |V:0, |473 |dgit(1) |Git-Interoperabilität | | |I:1 | | |mit dem Debian-Archiv | |----------------+------+-----+----------------+----------------------| | | | | |Interaktives Werkzeug,| | |V:0, | | |das hilft, | |imediff |I:0 |200 |git-ime(1) |umfangreiche | | | | | |Git-Commits weiter | | | | | |aufzusplitten | |----------------+------+-----+----------------+----------------------| |stgit |V:0, |601 |stg(1) |Aufsatz für Git | | |I:0 | | |(Python) | |----------------+------+-----+----------------+----------------------| |git-doc |I:12 |13208|Nicht verfügbar |offizielle | | | | | |Dokumentation für Git | |----------------+------+-----+----------------+----------------------| | | | | |"Git Magic", eine | |gitmagic |I:0 |721 |Nicht verfügbar |einfacher | | | | | |verständliche | | | | | |Anleitung für Git | +---------------------------------------------------------------------+ 10.5.1. Konfiguration eines Git-Clients Sie möchten vielleicht wie folgt verschiedene globale     Konfigurationsoptionen in "~/.gitconfig" zur Verwendung durch Git setzen, z.B. Name und E-Mail-Adresse:     $ git config --global user.name "Name Surname" $ git config --global user.email yourname@example.com     Sie können das Standardverhalten von Git wie folgt auch noch weiter anpassen: $ git config --global init.defaultBranch main     $ git config --global pull.rebase true $ git config --global push.default current     Wenn Sie an CVS- oder Subversion-Befehle gewohnt sind, können Sie wie hier auch folgende Befehls-Alias setzen:     $ git config --global alias.ci "commit -a" $ git config --global alias.co checkout     Sie können mit folgendem Befehl Ihre globale git-Konfiguration kontrollieren:     $ git config --global --list 10.5.2. Grundlegende Git-Befehle     An Vorgängen mit Git sind verschiedene Datenbereiche beteiligt: * The working tree which holds user facing files and to which you make changes. + Änderungen müssen explizit ausgewählt und dem Index hingefügt werden, um aufgezeichnet zu werden. Dies erledigen die Befehle git add und git rm. * Der Index, der hinzugefügte Dateien enthält. + Dem Index hinzugefügte Dateien werden auf Anfrage in das lokale Depot übernommen. Dies erledigt der Befehl git commit. * Das lokale Depot, das übernommene Dateien enthält. + Git zeichnet die Historie der übernommenen Daten auf und bereitet diese in Form von Zweigen (Branches) im Depot auf. + Das lokale Depot kann über den git push-Befehl Daten an das ferne Depot senden.     + Das lokale Depot kann über die Befehle git fetch und git pull Daten vom fernen Depot empfangen. o Der Befehl git pull führt git merge oder git rebase nach dem git fetch-Befehl aus. o Dabei führt git merge zwei separate Zweige (Branches) zu einem Stand zusammen. (Dies ist das Standardverhalten von git pull - solange es nicht bewusst angepasst wurde - und sollte passend sein für Upstream-Entwickler, die Zweige (Branches) an viele Leute verteilen.) o Dabei erstellt git rebase einen einzigen Zweig (Branch) aus der aufeinander folgenden Historie des fernen Zweigs, dem der lokale Zweig folgt. (Dies entspricht der Anpassung pull.rebase true, und ist vermutlich passend für den Rest von uns.) * Das ferne Depot, das übernommene Dateien enthält. + Für die Kommunikation zum fernen Depot wird ein sicheres Protokoll wie SSH oder HTTPS verwendet. Als Arbeitsbereich gilt der Bereich außerhalb des .git/     -Verzeichnisses. Zu den Dateien innerhalb von .git/ gehören der Index, die lokalen Depotdaten und einige Textdateien für die Git-Konfiguration.     Hier ein Überblick über die wichtigsten Git-Befehle: Tabelle 10.12. Wichtige Git-Befehle +---------------------------------------------------------------+ | Git-Befehl | Funktion | |-------------+-------------------------------------------------| |git init |ein (lokales) Depot erstellen | |-------------+-------------------------------------------------| |git clone URL|duplizieren des fernen Depots in ein lokales | | |Depot mit einem Arbeitsverzeichnis | |-------------+-------------------------------------------------| |git pull |aktualisieren des lokalen main-Zweigs von dem | |origin main |fernen Depot origin | |-------------+-------------------------------------------------| | |Änderungen in Dateien des Arbeitsbereichs zum | |git add . |Index hinzufügen - aber nur für Dateien, die | | |bereits im Index existieren | |-------------+-------------------------------------------------| | |Änderungen in Dateien des Arbeitsbereichs zum | |git add -A . |Index hinzufügen - für alle Dateien; betrifft | | |auch Entfernungen von Dateien | |-------------+-------------------------------------------------| |git rm |Datei(en) aus dem Arbeitsbereich und dem Index |     |dateiname |entfernen | |-------------+-------------------------------------------------| |git commit |dem Index hinzugefügte Änderungen in das lokale | | |Depot übernehmen (Commit) | |-------------+-------------------------------------------------| | |alle Änderungen im Arbeitsbereich zum Index | |git commit -a|hinzufügen und in das lokale Depot übernehmen | | |(vereint git add und git commit) | |-------------+-------------------------------------------------| |git push -u |das ferne Depot origin vom lokalen Depot namens | |origin |zweig_name aktualisieren (erstmaliger Aufruf) | |zweig_name | | |-------------+-------------------------------------------------| |git push |das ferne Depot origin vom lokalen Depot namens | |origin |zweig_name aktualisieren (nachfolgende Aufrufe) | |zweig_name | | |-------------+-------------------------------------------------| |git diff |Unterschiede anzeigen zwischen Commit baum1 und | |baum1 baum2 |Commit baum2 | |-------------+-------------------------------------------------| |gitk |grafische GUI-Anzeige der Historie eines Zweigs | | |(Branch) von einem VCS-Depot | +---------------------------------------------------------------+ 10.5.3. Git-Tipps     Hier einige Tipps zu Git: Tabelle 10.13. Git-Tipps +---------------------------------------------------------------+ | Git-Befehlszeile | Funktion | |---------------------+-----------------------------------------| | |vollständige Git-Historie anzeigen und | | |weiterverarbeiten, wie z.B. Zurücksetzen | |gitk --all |des HEAD auf einen anderen Commit, | | |Herauspicken von einzelnen Änderungen, | | |Erzeugen von Tags und Branches, ... | |---------------------+-----------------------------------------| |git stash |einen sauberen Arbeitsbereich erhalten, | | |ohne Daten zu verlieren | |---------------------+-----------------------------------------| |git remote -v |Einstellung für ferne Depots anzeigen | |---------------------+-----------------------------------------| |git branch -vv |Einstellung für Zweig (Branch) anzeigen | |---------------------+-----------------------------------------| |git status |Status des Arbeitsbereichs anzeigen | |---------------------+-----------------------------------------| |git config -l |Git-Einstellungen auflisten | |---------------------+-----------------------------------------| |git reset --hard |alle Änderungen im Arbeitsbereich | |HEAD; git clean -x -d|zurücksetzen und vollständig bereinigen | |-f | | |---------------------+-----------------------------------------| |git rm --cached |bereits über git add dateiname zum Index | |dateiname |hinzugefügte Änderungen zurücknehmen | |---------------------+-----------------------------------------| | |Git-Referenz-Log anzeigen (nützlich, um | |git reflog |Commits von gelöschten Zweigen (Branches)| | |wiederherzustellen) | |---------------------+-----------------------------------------| |git branch |einen neuen Zweig aus | |neuer_zweig_name |reflog-Informationen erzeugen | |HEAD@{6} | | |---------------------+-----------------------------------------| |git remote add |ein fernes Depot new_remote mit | |new_remote URL |angegebener URL hinzufügen | |---------------------+-----------------------------------------| |git remote rename |den Namen des fernen Depots origin in | |origin upstream |upstream umbenennen | |---------------------+-----------------------------------------| |git branch -u |das Remote-Tracking auf das ferne Depot | |upstream/branch_name |upstream und seinen Zweig namens | | |branch_name setzen. | |---------------------+-----------------------------------------| |git remote set-url | | |origin https://foo/ |URL von origin ändern | |bar.git | | |---------------------+-----------------------------------------| |git remote set-url |push zu upstream deaktivieren (passen Sie| |--push upstream |.git/config an, um dies wieder zu |     |DISABLED |aktivieren) | |---------------------+-----------------------------------------| |git remote update |fetch updates of all remote branches in | |upstream |the upstream repository | |---------------------+-----------------------------------------| |git fetch upstream |create a local (possibly orphan) | |foo:upstream-foo |upstream-foo branch as a copy of foo | | |branch in the upstream repository | |---------------------+-----------------------------------------| |git checkout -b |einen neuen Zweig namens topic_branch | |topic_branch ; git |erzeugen und nach origin aktualisieren | |push -u topic_branch |(push) | |origin | | |---------------------+-----------------------------------------| |git branch -m |den Namen eines lokalen Zweigs umbenennen| |alter-name neuer-name| | |---------------------+-----------------------------------------| |git push -d origin |einen fernen Zweig (Branch) löschen (neue| |zu-loeschender-zweig |Methode) | |---------------------+-----------------------------------------| |git push origin |einen fernen Zweig (Branch) löschen (alte| |:zu-loeschender-zweig|Methode) | |---------------------+-----------------------------------------| |git checkout --orphan|einen neuen unconnected-Zweig erzeugen | |unconnected | | |---------------------+-----------------------------------------| |git rebase -i origin/|Neuordnen/Löschen/Verdichten der Commits | |main |von origin/main, um eine saubere | | |Branch-Historie zu bekommen | |---------------------+-----------------------------------------| |git reset HEAD^; git |Verdichten der letzten 2 Commits in einen| |commit --amend |einzigen | |---------------------+-----------------------------------------| |git checkout | | |topic_branch ; git |Verdichten eines kompletten Zweigs | |merge --squash |topic_branch in einen Commit | |topic_branch | | |---------------------+-----------------------------------------| |git fetch --unshallow| | |--update-head-ok |einen shallow-Clone in einen Clone aller | |origin '+refs/heads/ |Zweige konvertieren | |*:refs/heads/*' | | |---------------------+-----------------------------------------| | |den letzten Commit in eine Serie von | |git ime |kleineren Datei-für-Datei-Commits | | |konvertieren (imediff-Paket wird | | |benötigt) | |---------------------+-----------------------------------------| | |Neupacken des lokalen Depots in ein | |git repack -a -d; git|einzelnes Pack (dies könnte dazu führen, | |prune |dass die Wiederherstellung verlorener | | |Daten aus gelöschten Zweigen nicht mehr | | |möglich ist, usw.) | +---------------------------------------------------------------+ Warnung     Nutzen Sie in der Tag-Zeichenkette keine Leerzeichen, auch wenn Werkzeuge wie gitk(1) dies ermöglichen. Andere git-Befehle könnten dadurch ins Stocken geraten. Achtung Wenn für einen lokalen Zweig, der bereits über push in das ferne Depot übergeben wurde, ein rebase oder squash durchgeführt wird,     könnte ein erneuter push gewisse Risiken beinhalten und die Option --force erfordern. Dies ist für den main-Zweig ein normalerweise unerwünschter Vorgang, könnte aber für einen topic-Zweig akzeptabel sein, bevor dieser in den main-Zweig integriert wird. Achtung     Der direkte Aufruf eines git-Unterbefehls mittels "git-xyz" über die Befehlszeile ist seit dem Frühjahr 2006 veraltet. Tipp Wenn eine ausführbare Datei namens git-foo in dem durch $PATH     definierten Pfad existiert, wird dieser git-foo-Befehl ausgeführt, indem man "git foo" (ohne Bindestrich!) auf der Befehlszeile aufruft. Dies ist eine Funktionalität des git-Befehls. 10.5.4. Weitere Referenzen zu Git     Hier finden Sie weitere Informationen: * Handbuchseite: git(1) (/usr/share/doc/git-doc/git.html) * git-Benutzerhandbuch (engl.) (/usr/share/doc/git-doc/ user-manual.html) * gittutorial: Einführung in git (engl.) (/usr/share/doc/ git-doc/gittutorial.html)     * gittutorial-2: Einführung in git - Teil 2 (engl.) (/usr/share /doc/git-doc/gittutorial-2.html) * Anleitung für die alltägliche git-Nutzung mit ungefähr 20 Befehlen (engl.) (/usr/share/doc/git-doc/giteveryday.html) * Git Magic (/usr/share/doc/gitmagic/html/index.html) 10.5.5. Andere Versionskontrollsysteme Versionskontrollsysteme (VCS) sind auch teilweise bekannt als     Revision Control System (RCS) oder Software Configuration Management (SCM).     Hier eine Zusammenfassung von VCS-Systemen im Debian-System abseits von Git: Tabelle 10.14. Liste anderer Versionskontrollsystem-Werkzeuge +---------------------------------------------------------------+ | Paket |Popcon|Größe| Werkzeug |VCS-Typ | Erläuterung | |----------+------+-----+----------+--------+-------------------| |mercurial |V:5, |2019 |Mercurial |verteilt|DVCS in Python und | | |I:32 | | | |ein bisschen C | |----------+------+-----+----------+--------+-------------------| | |V:0, | | | |DVCS mit schlauer | |darcs |I:5 |34070|Darcs |verteilt|Algebra von Patches| | | | | | |(langsam) | |----------+------+-----+----------+--------+-------------------| | | | | | |von tla | |bzr |I:8 |28 |GNU Bazaar|verteilt|beeinflußtes DVCS, | | | | | | |geschrieben in | | | | | | |Python (historisch)| |----------+------+-----+----------+--------+-------------------| | |V:0, | | | |DVCS hauptsächlich | |tla |I:1 |1022 |GNU arch |verteilt|von Tom Lord | | | | | | |(historisch) | |----------+------+-----+----------+--------+-------------------|     | | | | | |"CVS done right" | | |V:13, | | | |(CVS richtig | |subversion|I:72 |4837 |Subversion|fern |gemacht), neuerer | | | | | | |Standard für fernes| | | | | | |VCS (historisch) | |----------+------+-----+----------+--------+-------------------| | |V:4, | | | |früherer Standard | |cvs |I:30 |4753 |CVS |fern |für fernes VCS | | | | | | |(historisch) | |----------+------+-----+----------+--------+-------------------| | |V:0, | | | |GUI-Oberfläche von | |tkcvs |I:1 |1498 |CVS, … |fern |VCS-Depots (CVS, | | | | | | |Subversion, RCS) | |----------+------+-----+----------+--------+-------------------| | | | | | |"Unix SCCS done | |rcs |V:2, |564 |RCS |lokal |right" (Unix SCCS | | |I:13 | | | |richtig gemacht; | | | | | | |historisch) | |----------+------+-----+----------+--------+-------------------| |cssc |V:0, |2044 |CSSC |lokal |Klon von Unix SCCS | | |I:1 | | | |(historisch) | +---------------------------------------------------------------+ --------------------------------------------------------------------- ^[4] Medien zu verwenden, die nur einmal beschrieben werden können (wie CD-R/DVD-R), schützt vor versehentlichem Überschreiben. (In Abschnitt 9.8, „Binärdaten“ lesen Sie, wie Sie     von der Befehlszeile aus auf die Speichermedien schreiben können. Die grafische Oberfläche der GNOME-Arbeitsplatzumgebung bietet Ihnen auch einen einfachen Weg über das Menü: "Orte→CD/ DVD-Ersteller".)     ^[5] Einige dieser Daten kann nicht wieder hergestellt werden, selbst wenn die exakt gleichen Eingaben erneut getätigt werden.     ^[6] Falls Sie "~/.vimrc" statt "~/.vim/vimrc" verwenden, passen Sie diese bitte entsprechend an. Kapitel 11. Datenkonvertierung     Hier werden Werkzeuge und Tipps für die Umwandlung von Dateien in andere Formate beschrieben. Bei Werkzeugen für auf Standards basierende Formate ist die     Situation sehr gut, aber bei proprietären Formaten sind die Möglichkeiten eingeschränkt. 11.1. Werkzeuge für Textkonvertierung     Folgende Pakete zur Textkonvertierung sind mir aufgefallen: Tabelle 11.1. Liste von Textkonvertierungs-Werkzeugen +---------------------------------------------------------------+ | Paket |Popcon|Größe|Schlüsselwort| Beschreibung | |--------+------+-----+-------------+---------------------------| | | | | |Konvertierung der | | |V:917,| | |Textkodierung zwischen | |libc6 |I:999 |12988|charset |verschiedenen | | | | | |Gebietsschemata (Locales) | | | | | |mit iconv(1) (elementar) | |--------+------+-----+-------------+---------------------------| | | | | |Konvertierung der | | | | | |Textkodierung zwischen | | |V:2, | | |verschiedenen | |recode |I:18 |602 |charset+eol |Gebietsschemata (Locales) | | | | | |(vielfältig, mehr | | | | | |Alias-Befehle und | | | | | |Funktionalitäten) | |--------+------+-----+-------------+---------------------------| | | | | |Konvertierung der | | |V:1, | | |Textkodierung zwischen | |konwert |I:48 |134 |charset |verschiedenen |     | | | | |Gebietsschemata (Locales) | | | | | |(extravagant) | |--------+------+-----+-------------+---------------------------| |nkf |V:0, |360 |charset |Zeichensatzkonvertierer für| | |I:9 | | |Japanisch | |--------+------+-----+-------------+---------------------------| |tcs |V:0, |518 |charset |Zeichensatzkonvertierer | | |I:0 | | | | |--------+------+-----+-------------+---------------------------| | | | | |akzentuierte Buchstaben | |unaccent|V:0, |35 |charset |durch ihre nicht | | |I:0 | | |akzentuierten Pendants | | | | | |ersetzen | |--------+------+-----+-------------+---------------------------| | |V:1, | | |Konvertiert Textformate | |tofrodos|I:17 |51 |eol |zwischen DOS und Unix: | | | | | |fromdos(1) und todos(1) | |--------+------+-----+-------------+---------------------------| | | | | |Konvertiert Textformate | |macutils|V:0, |312 |eol |zwischen Macintosh und | | |I:0 | | |Unix: frommac(1) und tomac | | | | | |(1) | +---------------------------------------------------------------+ 11.1.1. Konvertieren einer Textdatei mit iconv Tipp     iconv(1) ist Teil des libc6-Pakets und immer auf nahezu allen Unix-artigen Systemen für die Änderung der Zeichenkodierung verfügbar.     Sie können die Kodierung einer Textdatei wie folgt mit iconv(1) ändern:     $ iconv -f encoding1 -t encoding2 input.txt >output.txt Bei den Werten für die Kodierung ist die Groß-/Kleinschreibung     nicht relevant, "-" und "_" werden ignoriert. Mit "iconv -l" können Sie überprüfen, welche Kodierungen unterstützt werden. Tabelle 11.2. Liste von Werten für die Zeichenkodierung und deren Verwendung +---------------------------------------------------------------+ | Wert für | Verwendung | |Zeichenkodierung| | |----------------+----------------------------------------------| | |American Standard Code for Information | |ASCII |Interchange, 7-Bit-Code ohne akzentuierte | | |Zeichen | |----------------+----------------------------------------------| |UTF-8 |aktueller multilingualer Standard für alle | | |modernen Betriebssysteme | |----------------+----------------------------------------------| |ISO-8859-1 |alter Standard für westeuropäische Sprachen; | | |ASCII + akzentuierte Zeichen | |----------------+----------------------------------------------| |ISO-8859-2 |alter Standard für osteuropäische Sprachen; | | |ASCII + akzentuierte Zeichen | |----------------+----------------------------------------------| |ISO-8859-15 |alter Standard für westeuropäische Sprachen; | | |ISO-8859-1 + Euro-Zeichen | |----------------+----------------------------------------------| | |Codepage 850, Microsoft-DOS-Zeichen mit | |CP850 |Grafiken für westeuropäische Sprachen, | | |Variante von ISO-8859-1 | |----------------+----------------------------------------------| |CP932 |Codepage 932, Shift-JIS-Variante für Japanisch| | |(angelehnt an Microsoft Windows) | |----------------+----------------------------------------------|     | |Codepage 936, GB2312-, GBK- oder | |CP936 |GB18030-Variante für vereinfachtes Chinesisch | | |(angelehnt an Microsoft Windows) | |----------------+----------------------------------------------| | |Codepage 949, EUC-KR- oder | |CP949 |Unified-Hangul-Code-Variante für Koreanisch | | |(angelehnt an Microsoft Windows) | |----------------+----------------------------------------------| |CP950 |Codepage 950, Big5-Variante für traditionelles| | |Chinesisch (angelehnt an Microsoft Windows) | |----------------+----------------------------------------------| |CP1251 |Codepage 1251, Kodierung für das kyrillische | | |Alphabet (angelehnt an Microsoft Windows) | |----------------+----------------------------------------------| | |Codepage 1252, ISO-8859-15-Variante für | |CP1252 |westeuropäische Sprachen (angelehnt an | | |Microsoft Windows) | |----------------+----------------------------------------------| |KOI8-R |alter russischer UNIX-Standard für das | | |kyrillische Alphabet | |----------------+----------------------------------------------| |ISO-2022-JP |Standard-Kodierung für japanische E-Mails, die| | |nur 7-Bit-Codes verwenden | |----------------+----------------------------------------------| |eucJP |alter japanischer UNIX-Standard-Code (8-Bit), | | |völlig verschieden von Shift-JIS | |----------------+----------------------------------------------| |Shift-JIS |Standard für Japanisch gemäß JIS X 0208 Anhang| | |1 (siehe auch CP932) | +---------------------------------------------------------------+ Anmerkung     Einige der obigen Kodierungen werden nur für die Konvertierung unterstützt und nicht als Wert für das Gebietsschema (Locale) ( Abschnitt 8.1, „Das Gebietsschema (Locale)“). Bei Zeichensätzen, die nur ein einziges Byte benötigen (wie ASCII     und ISO-8859), entspricht die Zeichenkodierung nahezu dem Zeichensatz. Bei Zeichensätzen mit vielen Zeichen (wie JIS X 0213 für Japanisch oder Universal Character Set (UCS, Unicode,     ISO-10646-1) für praktisch alle Sprachen) gibt es viele Kodierungsschemata, die in die Sequenz der Byte-Daten eingepasst werden: * EUC und ISO/IEC 2022 (auch bekannt als JIS X 0202) für     Japanisch; * UTF-8, UTF-16/UCS-2 und UTF-32/UCS-4 für Unicode.     Bei diesen gibt es klare Differenzierungen zwischen Zeichensatz und Zeichenkodierung.     Die Codepage wird als Synonym für einige hersteller-spezifische Zeichenkodierungstabellen verwendet. Anmerkung Bitte beachten Sie, dass die meisten Kodierungssysteme sich bei den 7-Bit-Zeichen identischen Code mit ASCII teilen, aber es gibt     einige Ausnahmen. Wenn Sie alte japanische C-Programme und URLs aus dem Shift-JIS genannten Kodierungsformat nach UTF-8 konvertieren, müssen Sie "CP932" als Kodierungsname statt "shift-JIS" verwenden, um die erwarteten Resultate zu bekommen: 0x5C → "\" und 0x7E → "~". Andernfalls werden diese falsch konvertiert. Tipp     recode(1) kann ebenfalls verwendet werden und bietet mehr als die kombinierte Funktionalität von iconv(1), fromdos(1), todos(1), frommac(1) und tomac(1). Weitere Informationen finden Sie unter "info recode". 11.1.2. Prüfen mit iconv, ob eine Datei UTF-8-kodiert ist     Sie können mit iconv(1) wie folgt überprüfen, ob eine Textdatei in UTF-8 kodiert ist:     $ iconv -f utf8 -t utf8 input.txt >/dev/null || echo "non-UTF-8 found" Tipp     Verwenden Sie die Option "--verbose" in obigem Beispiel, um das erste nicht in UTF-8 kodierte Zeichen zu finden. 11.1.3. Dateinamen konvertieren mit iconv Hier ein Beispielskript, um die Kodierung für alle Dateinamen in     einem Verzeichnis von einer auf einem älteren Betriebssystem erzeugten Form in das moderne UTF-8 zu konvertieren: #!/bin/sh ENCDN=iso-8859-1     for x in *; do mv "$x" "$(echo "$x" | iconv -f $ENCDN -t utf-8)" done Die "$ENCDN"-Variable gibt dabei die Original-Kodierung (gemäß     Tabelle 11.2, „Liste von Werten für die Zeichenkodierung und deren Verwendung“) an, die in dem älteren Betriebssystem für die Dateinamen verwendet wurde. In komplizierteren Fällen binden Sie bitte ein Dateisystem, das solche Dateinamen enthält (z.B. eine Festplattenpartition), mit korrekter Angabe der Dateinamenkodierung als Option zum mount(8)     -Befehl ein (lesen Sie dazu Abschnitt 8.1.3, „Dateinamenkodierung“), und kopieren Sie mit "cp -a" den vollständigen Inhalt der Partition in ein anderes Dateisystem, das als UTF-8 eingebunden ist. 11.1.4. EOL-Konvertierung     Das Format einer Textdatei, speziell der EOL-Code (end-of-line, Zeilenende), ist abhängig von der Systemplattform. Tabelle 11.3. Liste der EOL-Codes für verschiedene Plattformen +--------------------------------------------------------+ | Plattform |EOL-Code|Steuerung|dezimal|hexadezimal| |-----------------+--------+---------+-------+-----------|     |Debian (Unix) |LF |^J |10 |0A | |-----------------+--------+---------+-------+-----------| |MSDOS und Windows|CR-LF |^M^J |13 10 |0D 0A | |-----------------+--------+---------+-------+-----------| |Apples Macintosh |CR |^M |13 |0D | +--------------------------------------------------------+ Die Programme fromdos(1), todos(1), frommac(1) und tomac(1) zur     Konvertierung des EOL-Formats sind ziemlich praktisch. recode(1) ist ebenfalls sehr nützlich. Anmerkung     Einige Daten im Debian-System, wie z.B. die Daten zur Wiki-Seite für das python-moinmoin-Paket, nutzen CR-LF gemäß MSDOS-Art als EOL-Code. Daher sind obige Aussagen nur als allgemeiner Grundsatz zu verstehen. Anmerkung     Die meisten Editoren (wie vim, emacs, gedit, …) können mit Dateien mit EOL-Code im MSDOS-Stil transparent umgehen, ohne dass Sie es merken. Tipp Um eine Mischung aus MSDOS- und Unix-artigem EOL-Stil (z.B. nach     der Zusammenführung von zwei Dateien im MSDOS-Stil mit diff3(1)) in einen einheitlichen MSDOS-Stil umzuwandeln, ist die Verwendung von "sed -e '/\r$/!s/$/\r/'" der von todos(1) vorzuziehen. Der Grund hierfür ist, dass todos jeder Zeile ein CR hinzufügt. 11.1.5. TAB-Konvertierung     Es gibt ein paar bekannte spezialisierte Programme für die Konvertierung der TAB-Codes: Tabelle 11.4. Liste der Befehle zur TAB-Konvertierung aus den Paketen bsdmainutils und coreutils +-------------------------------------------------+ | Funktion |bsdmainutils|coreutils|     |--------------------------+------------+---------| |TAB in Leerzeichen wandeln|"col -x" |expand | |--------------------------+------------+---------| |Leerzeichen in TAB wandeln|"col -h" |unexpand | +-------------------------------------------------+     indent(1) aus dem indent-Paket formatiert alle Whitespaces (Leerraumzeichen) in einem C-Programm neu. Auch Editoren wie vim und emacs können zur TAB-Konvertierung genutzt werden. Bei vim z.B. verwenden Sie die Befehlssequenz     ":set expandtab" + ":%retab", um ein TAB zum Leerzeichen zu expandieren. Den umgekehrten Fall erreichen Sie mit ":set noexpandtab" + ":%retab!". 11.1.6. Editoren mit automatischer Konvertierung Moderne Editoren wie vim sind sehr clever und können mit     jeglichen Kodierungssystemen und Dateiformaten umgehen. Für beste Kompatibilität sollten Sie diese Editoren mit einem UTF-8-Gebietsschema in einer UTF-8-tauglichen Konsole verwenden. Eine alte westeuropäische Unix-Textdatei "u-datei.txt",     gespeichert in der alten latin1-Kodierung (ISO-8859-1), kann mit vim einfach wie folgt bearbeitet werden:     $ vim u-file.txt Dies ist möglich, da die automatische Erkennung der     Dateikodierung in vim zunächst von einer UTF-8-Kodierung ausgeht und, falls dies fehlschlägt, latin1 verwendet. Eine alte polnische Unix-Textdatei "pu-datei.txt", gespeichert in     der alten latin2-Kodierung (ISO-8859-2), kann mit vim wie folgt bearbeitet werden:     $ vim '+e ++enc=latin2 pu-file.txt'     Eine alte japanische Unix-Textdatei "ju-datei.txt", gespeichert in der eucJP-Kodierung, kann mit vim wie folgt bearbeitet werden:     $ vim '+e ++enc=eucJP ju-file.txt' Eine alte japanische MS-Windows-Textdatei "jw-datei.txt",     gespeichert in der sogenannten Shift-JIS-Kodierung (präziser: CP932), kann mit vim wie folgt bearbeitet werden:     $ vim '+e ++enc=CP932 ++ff=dos jw-file.txt' Wenn eine Datei mit den Optionen "++enc" und "++ff" geöffnet wird, speichert ":w" in der Vim-Befehlszeile sie im     Originalformat ab und überschreibt die Originaldatei. Sie können auch das zum Speichern zu nutzende Format und den Dateinamen mit angeben, z.B. ":w ++enc=utf8 neu.txt". Bitte lesen Sie den Abschnitt zum "Multi-byte text support" (mbyte.txt) in der vim-Online-Hilfe sowie Tabelle 11.2, „Liste     von Werten für die Zeichenkodierung und deren Verwendung“ für Infos, welche Locale-Werte mit der "++enc"-Option genutzt werden können.     Die emacs-Programmfamilie bietet ähnliche Funktionalitäten. 11.1.7. Extrahieren von reinem Text Folgender Befehl liest eine Webseite in eine Textdatei ein. Das     ist sehr nützlich, wenn Sie Konfigurationsbeispiele aus dem Web kopieren oder grundlegende Unix-Textbearbeitungswerkzeuge wie grep(1) auf den Inhalt der Webseite anwenden möchten.     $ w3m -dump https://www.remote-site.com/help-info.html >textfile     Ähnlich dazu können Sie reine Textdaten wie folgt aus anderen Formaten extrahieren: Tabelle 11.5. Liste von Werkzeugen zum Extrahieren von reinen Textdaten +---------------------------------------------------------------+ | Paket |Popcon|Größe|Schlüsselwort| Funktion | |---------+------+-----+-------------+--------------------------| |w3m |V:15, |2837 |html → text |HTML-zu-Text-Konvertierung| | |I:187 | | |mit dem Befehl "w3m -dump"| |---------+------+-----+-------------+--------------------------| | |V:3, | | |fortgeschrittener | |html2text|I:53 |243 |html → text |HTML-zu-Text-Konvertierer | | | | | |(ISO 8859-1) | |---------+------+-----+-------------+--------------------------| | |V:25, | | |HTML-zu-Text-Konvertierung| |lynx |I:344 |1948 |html → text |mit dem Befehl "lynx | | | | | |-dump" | |---------+------+-----+-------------+--------------------------| | |V:3, | | |HTML-zu-Text-Konvertierung| |elinks |I:20 |1654 |html → text |mit dem Befehl "elinks | | | | | |-dump" | |---------+------+-----+-------------+--------------------------| | |V:3, | | |HTML-zu-Text-Konvertierung|     |links |I:28 |2314 |html → text |mit dem Befehl "links | | | | | |-dump" | |---------+------+-----+-------------+--------------------------| | |V:1, | | |HTML-zu-Text-Konvertierung| |links2 |I:12 |5492 |html → text |mit dem Befehl "links2 | | | | | |-dump" | |---------+------+-----+-------------+--------------------------| | |V:14, | |MSWord → |Konvertierung von | |catdoc |I:155 |686 |text,TeX |MSWord-Dateien in reinen | | | | | |Text oder TeX | |---------+------+-----+-------------+--------------------------| | |V:1, | |MSWord → |Konvertierung von | |antiword |I:7 |589 |text,ps |MSWord-Dateien in reinen | | | | | |Text oder PostScript | |---------+------+-----+-------------+--------------------------| | |V:0, | | |Entfernen der Markups | |unhtml |I:0 |40 |html → text |(Markierungen) aus einer | | | | | |HTML-Datei | |---------+------+-----+-------------+--------------------------| | |V:2, | | |Konvertierung von | |odt2txt |I:40 |60 |odt → text |OpenDocument-Text in | | | | | |reinen Text | +---------------------------------------------------------------+ 11.1.8. Hervorheben und Formatieren von reinen Textdaten     Reine Textdaten können mit folgenden Befehlen hervorgehoben und formatiert werden: Tabelle 11.6. Liste von Werkzeugen für Hervorhebung/Formatierung von Textdaten +----------------------------------------------------------------------------------+ | Paket |Popcon|Größe |Schlüsselwort| Beschreibung | |----------------+------+------+-------------+-------------------------------------| | |V:18, | | |Vim-Macro zur Konvertierung von | |vim-runtime |I:395 |36525 |Hervorheben |Quellcode nach HTML (mit ":source | | | | | |$VIMRUNTIME/syntax/html.vim") | |----------------+------+------+-------------+-------------------------------------| |cxref |V:0, |1190 |c → html |Konvertierung eines C-Programms nach | | |I:0 | | |Latex und HTML (C-Sprache) | |----------------+------+------+-------------+-------------------------------------| | |V:0, | | |Konvertierung von vielen | |src2tex |I:0 |622 |Hervorheben |Quellcode-Formaten nach TeX | | | | | |(C-Sprache) | |----------------+------+------+-------------+-------------------------------------| | | | | |Konvertierung von vielen | | | | | |Quellcode-Formaten nach HTML, XHTML, | |source-highlight|V:0, |2114 |Hervorheben |LaTeX, Texinfo, | | |I:5 | | |ANSI-Color-Escape-Sequenzen und | | | | | |DocBook-Dateien mit Hervorhebung | | | | | |(C++) | |----------------+------+------+-------------+-------------------------------------| | | | | |Konvertierung von vielen |     |highlight |V:0, |1371 |Hervorheben |Quellcode-Formaten nach HTML, XHTML, | | |I:5 | | |RTF, LaTeX, TeX oder XSL-FO-Dateien | | | | | |mit Hervorhebung (C++) | |----------------+------+------+-------------+-------------------------------------| |grc |V:0, |208 |text → color |grundlegender Einfärber für alles | | |I:5 | | |(Python) | |----------------+------+------+-------------+-------------------------------------| |pandoc |V:9, |194495|text → any |grundlegender Markup-Konvertierer | | |I:45 | | |(Haskell) | |----------------+------+------+-------------+-------------------------------------| |python3-docutils|V:14, |1804 |text → any |reStructuredText-Dokument-Formatierer| | |I:51 | | |nach XML (Python) | |----------------+------+------+-------------+-------------------------------------| |markdown |V:0, |58 |text → html |Markdown: Textdokument-Konvertierer | | |I:9 | | |in (X)HTML (Perl) | |----------------+------+------+-------------+-------------------------------------| |asciidoctor |V:0, |98 |text → any |AsciiDoc: Textdokument-Konvertierer | | |I:7 | | |in XML/HTML (Ruby) | |----------------+------+------+-------------+-------------------------------------| | |V:6, | | |auf reStructured Text basierendes | |python3-sphinx |I:24 |2756 |text → any |Dokumenten-Publikationssystem | | | | | |(Python) | |----------------+------+------+-------------+-------------------------------------| |hugo |V:0, |78678 |text → html |auf Markdown basierendes Static-Site | | |I:5 | | |Publikationssystem (Go) | +----------------------------------------------------------------------------------+ 11.2. XML-Daten     Die Extensible Markup Language (XML) ist eine Markup-Sprache für Dokumente mit Strukturinformationen.     Einführende Informationen finden Sie unter XML.COM: * "Was ist XML? (englisch)" * "Was ist XSLT? (englisch)"     * "Was ist XSL-FO? (englisch)" * "Was ist XLink? (englisch)" 11.2.1. Grundlegende Hinweise für XML Ein XML-Text sieht ein wenig wie HTML aus. XML ermöglicht es uns,     verschiedene Ausgabeformate für ein und dasselbe Dokument zu verwalten. Ein einfaches XML-System ist docbook-xsl,das auch für dieses Dokument verwendet wird.     Jede XML-Datei beginnt mit einer Standard-XML-Deklaration wie der folgenden:         Die grundlegende Syntax für ein XML-Element ist wie folgt gekennzeichnet:     content     Die Kurzform für ein XML-Element mit leerem Inhalt ist wie folgt:         Das "attribute="Wert"" in obigen Beispielen ist optional.     Ein Kommentar-Abschnitt wird in XML wie folgt gekennzeichnet:     Anders als beim Hinzufügen von Markierungen (Markups) erfordert     XML minimale Konvertierungen am Inhalt, um vordefinierte Entitäten für die folgenden Zeichen zu nutzen: Tabelle 11.7. Liste von vordefinierten Entitäten für XML +-------------------------------------------------------------+ |vordefinierte Entität|Zeichen, in das konvertiert werden soll| |---------------------+---------------------------------------| |" |" (Anführungszeichen) | |---------------------+---------------------------------------|     |' |' (Apostroph) | |---------------------+---------------------------------------| |< |< (kleiner-als) | |---------------------+---------------------------------------| |> |> (größer-als) | |---------------------+---------------------------------------| |& |& (kaufmännisches Und) | +-------------------------------------------------------------+ Achtung     "<" oder "&" können nicht in Attributen oder Elementen verwendet werden. Anmerkung     Wenn anwenderdefinierte Entitäten im SGML-Stil verwendet werden, wie z.B. "&irgendein-begriff;", wird die erste Definition gegenüber darauffolgenden bevorzugt. Die Entität wird in Form von "" definiert. Anmerkung Solange die XML-Markierungen konsistent mit einer bestimmten Art     von Namen für diese Markierungen (entweder Daten als Inhalt oder Attributwert) ausgeführt sind, ist die Konvertierung in eine andere XML-Form mittels Extensible Stylesheet Language Transformations (XSLT) eine banale Aufgabe. 11.2.2. XML-Verarbeitung     Es gibt viele Werkzeuge zur Verarbeitung von XML-Dateien, wie z.B. die Extensible Stylesheet Language (XSL). Grundsätzlich ist es so, dass Sie eine korrekt formatierte     XML-Datei mittels Extensible Stylesheet Language Transformation (XSLT) in jegliches Format umwandeln können. Extensible Stylesheet Language for Formatting Objects (XSL-FO) ist eine Lösung zur Formatierung. Das fop-Paket ist (aufgrund     seiner Abhängigkeit zur Java-Programmiersprache) neu in Debians main-Archiv. Daher wird im Allgemeinen LaTEX-Code mittels XSLT aus XML erstellt und das LaTEX-System dann verwendet, um druckfähige Dateien wie DVI, PostScript oder PDF zu erzeugen. Tabelle 11.8. Liste von XML-Werkzeugen +-------------------------------------------------------------------------+ | Paket |Popcon|Größe|Schlüsselwort| Beschreibung | |-----------+------+-----+-------------+----------------------------------| |docbook-xml|I:403 |2134 |xml |XML-Dokumententyp-Definition (DTD)| | | | | |für DocBook | |-----------+------+-----+-------------+----------------------------------| | | | | |XSL-Stylesheets (Stilvorlagen), um| |docbook-xsl|V:13, |14851|xml/xslt |DocBook-XML mittels XSLT in | | |I:146 | | |verschiedene Ausgabeformate | | | | | |umzuwandeln | |-----------+------+-----+-------------+----------------------------------| |xsltproc |V:16, |162 |xslt |XSLT-Befehlszeilen-Prozessor (XML→|     | |I:79 | | |XML, HTML, reinen Text usw.) | |-----------+------+-----+-------------+----------------------------------| |xmlto |V:1, |130 |xml/xslt |XML-nach-alles-Konvertierer mit | | |I:14 | | |XSLT | |-----------+------+-----+-------------+----------------------------------| |fop |V:0, |284 |xml/xsl-fo |Docbook-XML-Dateien nach PDF | | |I:11 | | |konvertieren | |-----------+------+-----+-------------+----------------------------------| | |V:2, | | |DocBook-Dateien mittels XSLT nach | |dblatex |I:10 |4636 |xml/xslt |DVI, PostScript und PDF | | | | | |konvertieren | |-----------+------+-----+-------------+----------------------------------| |dbtoepub |V:0, |37 |xml/xslt |DocBook-XML-nach-epub-Konvertierer| | |I:0 | | | | +-------------------------------------------------------------------------+ Da XML eine Untermenge der Standard Generalized Markup Language     (SGML) ist, kann es mit den umfangreichen Werkzeugen, die für SGML verfügbar sind (wie der Document Style Semantics and Specification Language (DSSSL)) verarbeitet werden. Tabelle 11.9. Liste von DSSSL-Werkzeugen +---------------------------------------------------------------+ | Paket |Popcon|Größe|Schlüsselwort| Beschreibung | |-------------+------+-----+-------------+----------------------| | | | | |ISO/IEC 10179:1996 - | |openjade |V:1, |1061 |dsssl |standardkonformer | | |I:26 | | |DSSSL-Prozessor | | | | | |(aktuell) | |-------------+------+-----+-------------+----------------------| | | | | |DSSSL-Stylesheets | | | | | |(Stilvorlagen), um | |docbook-dsssl|V:0, |2605 |xml/dsssl |DocBook-XML mittels | | |I:13 | | |DSSSL in verschiedene | | | | | |Ausgabeformate |     | | | | |umzuwandeln | |-------------+------+-----+-------------+----------------------| | | | | |Werkzeuge für | | | | | |DocBook-Dateien | | | | | |(inklusive | |docbook-utils|V:0, |287 |xml/dsssl |Konvertierung in | | |I:9 | | |andere Formate (HTML, | | | | | |RTF, PS, man, PDF) mit| | | | | |DSSSL mittels | | | | | |docbook2*-Befehlen) | |-------------+------+-----+-------------+----------------------| | | | | |Konvertierer von SGML | |sgml2x |V:0, |90 |SGML/dsssl |und XML mittels | | |I:0 | | |DSSSL-Stylesheets | | | | | |(Stilvorlagen) | +---------------------------------------------------------------+ Tipp     GNOMEs yelp ist manchmal praktisch, da es DocBook-XML-Dateien ohne Konvertierung direkt vernünftig darstellen kann. 11.2.3. Extrahierung von XML-Daten     Sie können HTML- oder XML-Daten mit folgenden Programmen aus anderen Formaten extrahieren: Tabelle 11.10. Liste von Werkzeugen zur Extrahierung von XML-Daten +---------------------------------------------------------------+ | Paket |Popcon|Größe|Schlüsselwort| Beschreibung | |---------+------+-----+-------------+--------------------------| | | | | |Konvertierer von | |man2html |V:0, |142 |manpage → |Handbuchseite (manpage) | | |I:1 | |html |nach HTML | | | | | |(CGI-Unterstützung) | |---------+------+-----+-------------+--------------------------| |doclifter|I:0 |472 |troff→xml |Konvertierer von troff | | | | | |nach DocBook XML | |---------+------+-----+-------------+--------------------------| |texi2html|V:0, |1847 |texi → html |Konvertierer von Texinfo | | |I:5 | | |nach HTML |     |---------+------+-----+-------------+--------------------------| | |V:1, | | |Konvertierer von GNU info | |info2www |I:2 |74 |info → html |nach HTML | | | | | |(CGI-Unterstützung) | |---------+------+-----+-------------+--------------------------| | |V:0, | | |Dokumentenkonvertierer von| |wv |I:4 |733 |MSWord → alle|Microsoft Word nach HTML, | | | | | |LaTeX usw. | |---------+------+-----+-------------+--------------------------| |unrtf |V:0, |148 |rtf → html |Dokumentenkonvertierer von| | |I:3 | | |RTF nach HTML usw. | |---------+------+-----+-------------+--------------------------| | | | | |WordPerfect-5.0- und | |wp2x |V:0, |200 |WordPerfect →|-5.1-Dateien nach TeX, | | |I:0 | |any |LaTeX, troff, GML und HTML| | | | | |konvertieren | +---------------------------------------------------------------+ 11.2.4. XML Lint HTML-Dateien (nicht-XML) können Sie nach XHTML konvertieren, was     eine Instanz von korrekt formatiertem XML ist. XHTML kann von XML-Werkzeugen verarbeitet werden.     Die Syntax von XML-Dateien und die Gültigkeit von enthaltenen URLs können geprüft werden. Tabelle 11.11. Liste von XML-Druck-Werkzeugen +------------------------------------------------------------------+ | Paket |Popcon|Größe| Funktion | Beschreibung | |-------------+------+-----+------------+--------------------------| | | | | |Befehlszeilen-XML-Werkzeug| |libxml2-utils|V:21, |180 |xml ↔ html ↔|mit xmllint(1) | | |I:213 | |xhtml |(Syntaxüberprüfung, | | | | | |Neuformatierung, …) | |-------------+------+-----+------------+--------------------------|     |tidy |V:1, |75 |xml ↔ html ↔|HTML-Syntaxüberprüfung und| | |I:9 | |xhtml |Neuformatierung | |-------------+------+-----+------------+--------------------------| |weblint-perl |V:0, |32 |lint |Ein Syntax- und (Minimal-)| | |I:1 | | |Stil-Prüfprogramm für HTML| |-------------+------+-----+------------+--------------------------| | |V:0, | | |Schneller Linkchecker und | |linklint |I:0 |343 |Link-Prüfung|Werkzeug für die | | | | | |Webseitenpflege | +------------------------------------------------------------------+ Sobald eine saubere XML-Basis generiert wurde, können Sie die     XSLT-Technologie nutzen, um Daten basierend auf dem Markup-Kontext zu extrahieren usw. 11.3. Textsatz Das Unix-Programm troff, ursprünglich von AT&T entwickelt, kann     für einfachen Textsatz verwendet werden. Es wird normalerweise genutzt, um Handbuchseiten (manpages) zu erzeugen. TeX, entwickelt von Donald Knuth, ist ein sehr leistungsfähiges     Textsatz-Werkzeug und der De-Facto-Standard. LaTeX (ursprünglich geschrieben von Leslie Lamport) ermöglicht einen sehr hochentwickelten Zugriff auf die Fähigkeiten von TeX. Tabelle 11.12. Liste von Textsatz-Werkzeugen +---------------------------------------------------------------+ | Paket |Popcon|Größe|Schlüsselwort| Beschreibung | |-------+------+-----+-------------+----------------------------|     |texlive|V:2, |56 |(La)TeX |TeX-System für Textsatz, | | |I:35 | | |Vorschau und Druck | |-------+------+-----+-------------+----------------------------| |groff |V:2, |20720|troff |GNU troff | | |I:36 | | |Textformatierungs-System | +---------------------------------------------------------------+ 11.3.1. roff-Textsatz Traditionell ist roff das Haupt-Unix-System zur Textverarbeitung.     Lesen Sie roff(7), groff(7), groff(1), grotty(1), troff(1), groff_mdoc(7), groff_man(7), groff_ms(7), groff_me(7), groff_mm (7) und "info groff". Sie bekommen eine gute Einführung und Referenz zum "-me"-Makro in     "/usr/share/doc/groff/", wenn Sie das groff-Paket installiert haben. Tipp     "groff -Tascii -me -" erzeugt reinen Text mit ANSI-Escape-Sequenzen. Wenn Sie eine Ausgabe ähnlich zu den Handbuchseiten mit vielen "^H" und "_" möchten, verwenden Sie stattdessen "GROFF_NO_SGR=1 groff -Tascii -me -". Tipp     Um "^H" und "_" aus einer mit groff erzeugten Textdatei zu entfernen, filtern Sie diese mit "col -b -x". 11.3.2. TeX/LaTeX Die TeX Live-Software-Distribution stellt ein vollständiges     TeX-System bereit. Das texlive-Metapaket enthält eine sinnvolle Auswahl von TeX Live-Paketen, die für die meisten Aufgaben ausreichend sein sollten.     Es gibt viele Ressourcen für TeX und LaTeX: * The teTeX HOWTO: The Linux-teTeX Local Guide; * tex(1); * latex(1); * texdoc(1);     * texdoctk(1); * "The TeXbook", von Donald E. Knuth (Addison-Wesley); * "LaTeX - A Document Preparation System", von Leslie Lamport (Addison-Wesley); * "The LaTeX Companion", von Goossens, Mittelbach, Samarin (Addison-Wesley). TeX/LaTeX ist die leistungsfähigste Textsatz-Umgebung. Viele SGML-Prozessoren nutzen es im Hintergrund zur Textverarbeitung.     Lyx aus dem lyx-Paket sowie GNU TeXmacs aus dem texmacs-Paket bieten eine nette WYSIWYG-Umgebung zum Editieren von LaTeX-Dokumenten, zu der viele Leute Emacs oder Vim als Quelltext-Editor wählen.     Es sind viele Online-Ressourcen verfügbar: * The TEX Live Guide - TEX Live 2007 ("/usr/share/doc/ texlive-doc-base/english/texlive-en/live.html" aus dem texlive-doc-base-Paket);     * A Simple Guide to Latex/Lyx; * Word Processing Using LaTeX; Wenn die Dokumente größer werden, kann TeX eventuell Fehler verursachen. Sie müssen dann die Pool-Größe in "/etc/texmf/     texmf.cnf" erhöhen (oder editieren Sie besser "/etc/texmf/texmf.d /95NonPath" und führen update-texmf(8) aus), um dieses Problem zu beheben. Anmerkung The TeX source of "The TeXbook" is available at www.ctan.org tex-archive site for texbook.tex. This file contains most of the     required macros. I heard that you can process this document with tex(1) after commenting lines 7 to 10 and adding "\input manmac \ proofmodefalse". It's strongly recommended to buy this book (and all other books from Donald E. Knuth) instead of using the online version but the source is a great example of TeX input! 11.3.3. Schöner Ausdruck einer Handbuchseite     Sie können eine Handbuchseite (manpage) in PostScript mit einem der folgenden Befehle schön ausdrucken:     $ man -Tps some_manpage | lpr 11.3.4. Erstellen einer Handbuchseite Obwohl es möglich ist, eine Handbuchseite (manpage) in reinem     troff-Format zu schreiben, gibt es auch einige Pakete mit Hilfsprogrammen zur Erstellung einer Handbuchseite: Tabelle 11.13. Liste von Paketen, die bei der Erstellung einer Handbuchseite helfen +---------------------------------------------------------------+ | Paket |Popcon|Größe|Schlüsselwort| Beschreibung | |--------------+------+-----+-------------+---------------------| | |V:0, | |SGML → |Konvertierer vom | |docbook-to-man|I:8 |191 |manpage |DocBook-SGML-Format | | | | | |in roff-man-Makros | |--------------+------+-----+-------------+---------------------| | | | | |Automatisch |     |help2man |V:0, |542 |text → |Handbuchseiten aus | | |I:7 | |manpage |--help-Ausgabe | | | | | |generieren | |--------------+------+-----+-------------+---------------------| | |V:0, | |info → |Konvertierer von | |info2man |I:0 |134 |manpage |GNU-info-Dateien nach| | | | | |POD oder Manpage | |--------------+------+-----+-------------+---------------------| | |V:0, | |text → |Einfachen ASCII-Text | |txt2man |I:0 |112 |manpage |in das Manpage-Format| | | | | |umwandeln | +---------------------------------------------------------------+ 11.4. Druckfähige Daten Druckfähige Daten werden im Debian-System im PostScript-Format     dargestellt. CUPS (Common Unix Printing System) verwendet Ghostscript als Rasterizer-Backend-Programm für Drucker, die selbst kein PostScript interpretieren können.     Printable data may also be expressed in the PDF format on the recent Debian system. PDF files can displayed and its form entries may be filled using     GUI viewer tools such as Evince and Okular (see Abschnitt 7.4, „GUI-Anwendungen“); and modern browsers such as Chromium. PDF files can be edited using some graphics tools such as     LibreOffice, Scribus, and Inkscape (see Abschnitt 11.6, „Werkzeuge für Grafikdaten“). Tipp     You can read a PDF file with GIMP and convert it into PNG format using higher than 300 dpi resolution. This may be used as a background image for LibreOffice to produce a desirable altered printout with minimum efforts. 11.4.1. Ghostscript Der Kern der Verarbeitung von druckfähigen Daten ist ein     Ghostscript-PostScript (PS)-Interpreter, der ein Raster-Image erzeugt. Tabelle 11.14. Liste von Ghostscript-PostScript-Interpretern +---------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |----------------+------+-----+---------------------------------| |ghostscript |V:161,|179 |der GPL Ghostscript-PostScript/ | | |I:583 | |PDF-Interpreter | |----------------+------+-----+---------------------------------| | |V:2, | |GPL Ghostscript-PostScript/ | |ghostscript-x |I:38 |87 |PDF-Interpreter - Unterstützung | | | | |für Anzeige unter X | |----------------+------+-----+---------------------------------|     | |V:16, | |Bibliothek zur PDF-Darstellung, | |libpoppler102 |I:129 |4274 |Abspaltung von dem | | | | |PDF-Anzeigeprogramm xpdf | |----------------+------+-----+---------------------------------| | |V:260,| |Bibliothek zur PDF-Darstellung | |libpoppler-glib8|I:485 |484 |(Laufzeitbibliothek auf Basis von| | | | |GLib) | |----------------+------+-----+---------------------------------| | |V:134,| |CMaps für Bibliothek zur | |poppler-data |I:607 |13086|PDF-Darstellung (für | | | | |CJK-Unterstützung: Adobe-*) | +---------------------------------------------------------------+ Tipp     "gs -h" zeigt die Konfiguration von Ghostscript an. 11.4.2. Zwei PS- oder PDF-Dateien zusammenführen Sie können zwei PostScript (PS)- oder Portable Document Format     (PDF)-Dateien mit dem gs(1)-Befehl von Ghostscript zusammenführen:     $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite -sOutputFile=bla.ps -f foo1.ps foo2.ps $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=bla.pdf -f foo1.pdf foo2.pdf Anmerkung     PDF, ein plattform-unabhängiges Datenformat für druckfähige Daten, ist im Grunde ein komprimiertes PS-Format mit einigen zusätzlichen Funktionalitäten und Erweiterungen. Tipp     Auf der Befehlszeile sind psmerge(1) und andere Befehle aus dem psutils-Paket sehr nützlich zur Bearbeitung von PostScript-Dokumenten. pdftk(1) aus dem pdftk-Paket ist ebenfalls praktisch, um PDF-Dokumente zu bearbeiten. 11.4.3. Werkzeuge für druckfähige Daten     Folgende Pakete mit Werkzeugen für druckfähige Daten sind mir ins Auge gestochen: Tabelle 11.15. Liste von Werkzeugen für druckfähige Daten +--------------------------------------------------------------------------+ | Paket |Popcon|Größe|Schlüsselwort| Beschreibung | |-------------+------+-----+-------------+---------------------------------| | |V:152,| |pdf → |PDF-Hilfsprogramme: pdftops, | |poppler-utils|I:471 |728 |ps,text,… |pdfinfo, pdfimages, pdftotext, | | | | | |pdffonts | |-------------+------+-----+-------------+---------------------------------| |psutils |V:4, |219 |ps → ps |Werkzeuge zur Konvertierung von | | |I:67 | | |PostScript-Dokumenten | |-------------+------+-----+-------------+---------------------------------| |poster |V:0, |57 |ps → ps |Erzeugen großer Poster aus | | |I:3 | | |PostScript-Seiten | |-------------+------+-----+-------------+---------------------------------| | |V:1, | |text → |Konvertieren von ASCII-Text nach | |enscript |I:14 |2130 |ps,html,rtf |PostScript, HTML, RTF oder | | | | | |Pretty-Print | |-------------+------+-----+-------------+---------------------------------| | | | | |'Anything to | |a2ps |V:0, |3979 |text → ps |PostScript'-Konvertierer | | |I:10 | | |(jegliches nach PostScript) und | | | | | |Pretty-Printer | |-------------+------+-----+-------------+---------------------------------| |pdftk |I:37 |28 |pdf → pdf |Werkzeug zur Konvertierung von | | | | | |PDF-Dokumenten: pdftk | |-------------+------+-----+-------------+---------------------------------| |html2ps |V:0, |261 |html → ps |Konvertierer von HTML nach | | |I:2 | | |PostScript |     |-------------+------+-----+-------------+---------------------------------| |gnuhtml2latex|V:0, |27 |html → latex |Konvertierer von HTML nach LaTeX | | |I:0 | | | | |-------------+------+-----+-------------+---------------------------------| | |V:0, | | |Konvertieren von Dokumenten von | |latex2rtf |I:4 |495 |latex → rtf |LaTeX nach RTF, die dann von MS | | | | | |Word gelesen werden können | |-------------+------+-----+-------------+---------------------------------| |ps2eps |V:2, |95 |ps → eps |Konvertierer von PostScript nach | | |I:42 | | |EPS (Encapsulated PostScript) | |-------------+------+-----+-------------+---------------------------------| | |V:0, | | |Text-nach-PostScript-Konvertierer| |e2ps |I:0 |109 |text → ps |mit Unterstützung für japanische | | | | | |Zeichenkodierung | |-------------+------+-----+-------------+---------------------------------| |impose+ |V:0, |118 |ps → ps |PostScript-Hilfsprogramme | | |I:0 | | | | |-------------+------+-----+-------------+---------------------------------| | | | | |Viele Quellformate (C, C++, Java,| | |V:0, | | |Pascal, Perl, Pike, Sh und | |trueprint |I:0 |149 |text → ps |Verilog) nach PostScript | | | | | |konvertieren mittels Pretty-Print| | | | | |(C-Sprache) | |-------------+------+-----+-------------+---------------------------------| |pdf2svg |V:0, |32 |pdf→svg |Konvertierer von PDF in das | | |I:3 | | |Scalable Vector Graphics-Format | |-------------+------+-----+-------------+---------------------------------| |pdftoipe |V:0, |65 |pdf→ipe |Konvertierer von PDF in IPE's | | |I:0 | | |XML-Format | +--------------------------------------------------------------------------+ 11.4.4. Drucken mit CUPS Die beiden vom Common Unix Printing System (CUPS) angebotenen     Befehle lp(1) und lpr(1) bieten Optionen, um das Drucken von druckfähigen Daten spezifisch anzupassen.     Mit einem der folgenden Befehle können Sie drei Kopien einer Datei auf einmal ausdrucken:     $ lp -n 3 -o Collate=True filename     $ lpr -#3 -o Collate=True filename Druckoperationen können über Optionen für den Drucker noch weitgehender angepasst werden, z.B. mit "-o number-up=2", "-o     page-set=even", "-o page-set=odd", "-o scaling=200", "-o natural-scaling=200" usw. Diese Optionen sind dokumentiert unter Command-Line Printing and Options (wenn Sie CUPS installiert haben). 11.5. Konvertierung von Mail-Daten     Folgende Pakete für die Konvertierung von Mail-Daten sind mir aufgefallen: Tabelle 11.16. Liste von Paketen zur Konvertierung von Mail-Daten +---------------------------------------------------------------+ | Paket |Popcon|Größe|Schlüsselwort| Beschreibung | |---------+------+-----+-------------+--------------------------| |sharutils|V:2, |1415 |mail |shar(1), unshar(1), | | |I:36 | | |uuencode(1), uudecode(1) | |---------+------+-----+-------------+--------------------------| | |V:1, | | |Kodieren und Dekodieren | |mpack |I:11 |108 |MIME |von MIME-Nachrichten: | | | | | |mpack(1) und munpack(1) | |---------+------+-----+-------------+--------------------------|     | | | | |Auspacken von | | |V:0, | | |MIME-Anhängen des Typs | |tnef |I:6 |110 |ms-tnef |"application/ms-tnef" (ein| | | | | |nur von Microsoft | | | | | |verwendetes Format) | |---------+------+-----+-------------+--------------------------| | | | | |Kodieren und Dekodieren | | |V:0, | | |folgender Formate: | |uudeview |I:3 |105 |mail |uuencode, xxencode, | | | | | |BASE64, quoted printable | | | | | |und BinHex | +---------------------------------------------------------------+ Tipp Ein Internet Message Access Protocol-Server der Version 4 (IMAP4)     kann verwendet werden, um Mails von proprietären Mail-Systemen zu exportieren; dazu muss der Mail-Client (z.B. unter Windows) so konfiguriert werden, dass er den auf dem Debian-System laufenden IMAP4-Server nutzt. 11.5.1. Grundlagen zu Mail-Daten Mail-Daten (SMTP) sollten auf eine Abfolge von 7-Bit-Zeichen beschränkt werden. Daher werden Binärdaten und 8-Bit-Textdaten     über Multipurpose Internet Mail Extensions (MIME) und die Auswahl des Zeichensatzes (lesen Sie dazu Tabelle 11.2, „Liste von Werten für die Zeichenkodierung und deren Verwendung“) im 7-Bit-Format kodiert. Das Standardformat zum Speichern von Mails ist mbox gemäß RFC2822     (aktualisiertes RFC822). Näheres dazu in mbox(5) (aus dem mutt-Paket). Für europäische Sprachen wird normalerweise "Content-Transfer-Encoding: quoted-printable" mit dem     ISO-8859-1-Zeichensatz bei Mails verwendet, da es dabei nicht viele 8-Bit-Zeichen gibt. Wenn europäischer Text in UTF-8 kodiert ist, wird dabei voraussichtlich "Content-Transfer-Encoding: quoted-printable" benutzt, da es überwiegend 7-Bit-Zeichen sind. Für Japanisch wird gewöhnlich "Content-Type: text/plain; charset= ISO-2022-JP" bei Mails verwendet, um den Text im 7-Bit-Format zu halten. Ältere Microsoft-Systeme könnten jedoch Mail-Daten in     Shift-JIS versenden, ohne dies korrekt zu deklarieren. Wenn japanischer Text in UTF-8 kodiert ist, wird dabei voraussichtlich Base64 benutzt, da dabei viele 8-Bit-Zeichen enthalten sind. Die Situation bei anderen asiatischen Sprachen ist ähnlich. Anmerkung Falls Sie mit einer Debian-fremden Client-Software auf Ihre     nicht-Unix-Mail-Daten zugreifen können und dieser Client auch mit einem IMAP4-Server kommunizieren kann, können Sie die Mails von dem Fremdsystem herunterholen, indem Sie einen eigenen IMAP4-Server laufen lassen. Anmerkung     Nutzen Sie andere Formate zur Speicherung Ihrer Mails, ist die Umstellung auf das mbox-Format ein guter erster Schritt. Ein vielseitiges Client-Programm wie z.B. mutt(1) kann dabei nützlich sein.     Sie können den Inhalt einer Mailbox auf einzelne Nachrichten aufsplitten, indem Sie procmail(1) und formail(1) verwenden. Jede Mail kann mittels munpack(1) aus dem mpack-Paket (oder mit     anderen spezialisierten Werkzeugen) entpackt werden, um die MIME-kodierten Inhalte zu erhalten. 11.6. Werkzeuge für Grafikdaten Obwohl grafische GUI-Programme wie gimp(1) sehr leistungsfähig     sind, können auch Befehlszeilenwerkzeuge wie imagemagick(1) nützlich sein, um automatisierte Bildbearbeitung über Skripte durchzuführen. Der De-Facto-Standard für Bilddateien von Digitalkameras ist das     Exchangeable Image File Format (EXIF); dies entspricht dem JPEG-Dateiformat mit zusätzlichen Metainformationen. Es kann auch Informationen wie Datum, Zeit und Kameraeinstellungen speichern. Das Patent zur verlustlosen Datenkompression mit dem Lempel-Ziv-Welch-(LZW-)Algorithmus ist abgelaufen. Graphics     Interchange Format (GIF)-Werkzeuge, die die LZW-Kompressionsmethode nutzen, sind jetzt frei im Debian-System verfügbar. Tipp Alle Digitalkameras oder Scanner mit Wechseldatenträgern als     Speichermedium funktionieren unter Linux über USB-Speicher-Lesegeräte, da sie die Design-Regeln für Kamera-Dateisysteme befolgen und FAT als Dateisystem verwenden. Näheres finden Sie in Abschnitt 10.1.7, „Wechseldatenträger“. 11.6.1. Graphic data tools (metapackage) The following metapackages are good starting points for searching     graphics data tools using aptitude(8). "Packages overview for Debian PhotoTools Maintainers" can be another starting point. Tabelle 11.17. List of graphics data tools (metapackage) +--------------------------------------------------------------------+ | Paket |Popcon|Größe|Schlüsselwort| Beschreibung | |------------------------+------+-----+-------------+----------------| | | | | |metapackage for | |design-desktop-graphics |I:0 |13 |svg, jpeg, … |graphics | | | | | |designers |     |------------------------+------+-----+-------------+----------------| | | | | |metapackage for | |education-graphics |I:0 |30 |svg, jpeg, … |teaching | | | | | |graphics and | | | | | |pictural art. | |------------------------+------+-----+-------------+----------------| |open-font-design-toolkit|I:0 |9 |ttf, ps, … |Metapaket für | | | | | |Open-font-Design| +--------------------------------------------------------------------+ Tipp     Weitere Werkzeuge zur Bildbearbeitung finden Sie mit dem regulären Ausdruck "~Gworks-with::image" in aptitude(8) (lesen Sie dazu Abschnitt 2.2.6, „Optionen für Suchmethoden mit aptitude“). 11.6.2. Graphic data tools (GUI)     The following packages for the GUI graphics data conversion, editing, and organization tools caught my eyes. Tabelle 11.18. List of graphics data tools (GUI) +------------------------------------------------------------------+ | Paket |Popcon|Größe|Schlüsselwort| Beschreibung | |----------------+------+-----+-------------+----------------------| |gimp |V:50, |19304|image(bitmap)|GNU Image Manipulation| | |I:252 | | |Program (GIMP) | |----------------+------+-----+-------------+----------------------| | | | | |GTK-basierte | | |V:12, | | |X11-Oberfläche für das| |xsane |I:144 |2339 |image(bitmap)|Scanner-Programm SANE | | | | | |(Scanner Access Now | | | | | |Easy) | |----------------+------+-----+-------------+----------------------| |scribus |V:1, |31345|ps/pdf/SVG/… |Scribus DTP-Editor | | |I:16 | | | | |----------------+------+-----+-------------+----------------------| | |V:72, | | |LibreOffice | |libreoffice-draw|I:430 |10312|image(vector)|Office-Programm - | | | | | |Zeichnen | |----------------+------+-----+-------------+----------------------| |inkscape |V:15, |99800|image(vector)|SVG (Scalable Vector | | |I:112 | | |Graphics)-Editor | |----------------+------+-----+-------------+----------------------| |dia |V:2, |3741 |image(vector)|Diagramm-Editor (Gtk) | | |I:22 | | | | |----------------+------+-----+-------------+----------------------| | |V:0, | | |Programm zur | |xfig |I:11 |7849 |image(vector)|interaktiven Erzeugung| | | | | |von Objekten in X11 | |----------------+------+-----+-------------+----------------------| |gocr |V:0, |540 |image → text |freie OCR-Software | | |I:7 | | | | |----------------+------+-----+-------------+----------------------| |eog |V:64, |7770 |image(Exif) |Bildbetrachter Eye of | | |I:277 | | |GNOME | |----------------+------+-----+-------------+----------------------| |gthumb |V:3, |5032 |image(Exif) |Bildbetrachter und | | |I:16 | | |-browser (GNOME) | |----------------+------+-----+-------------+----------------------| |geeqie |V:4, |2522 |image(Exif) |Bildbetrachter, der |     | |I:15 | | |GTK verwendet | |----------------+------+-----+-------------+----------------------| |shotwell |V:17, |6263 |image(Exif) |Digitalfoto-Organizer | | |I:255 | | |(GNOME) | |----------------+------+-----+-------------+----------------------| |gwenview |V:33, |11755|image(Exif) |Bildbetrachter (KDE) | | |I:106 | | | | |----------------+------+-----+-------------+----------------------| | | | | |Unterstützung von | |kamera |I:105 |998 |image(Exif) |Digitalkameras für | | | | | |KDE-Anwendungen | |----------------+------+-----+-------------+----------------------| |digikam |V:1, |293 |image(Exif) |Digitalfoto-Verwaltung| | |I:9 | | |für KDE | |----------------+------+-----+-------------+----------------------| | |V:4, | | |virtual lighttable and| |darktable |I:13 |30554|image(Exif) |darkroom for | | | | | |photographers | |----------------+------+-----+-------------+----------------------| |hugin |V:0, |5208 |image(Exif) |panorama photo | | |I:8 | | |stitcher | |----------------+------+-----+-------------+----------------------| |librecad |V:1, |8963 |DXF, ... |2D CAD data editor | | |I:15 | | | | |----------------+------+-----+-------------+----------------------| |freecad |I:18 |36 |DXF, ... |3D CAD data editor | |----------------+------+-----+-------------+----------------------| |blender |V:3, |84492|blend, TIFF, |Editor für 3D-Inhalte | | |I:28 | |VRML, … |(Animationen usw.) | |----------------+------+-----+-------------+----------------------| |mm3d |V:0, |3881 |ms3d, obj, |3D-Modell-Editor auf | | |I:0 | |dxf, … |Basis von OpenGL | |----------------+------+-----+-------------+----------------------| | |V:0, | | |Editor für PS-, | |fontforge |I:6 |3993 |ttf, ps, … |TrueType- und | | | | | |OpenType-Schriften | |----------------+------+-----+-------------+----------------------| | | | | |Programm zum | |xgridfit |V:0, |806 |ttf |Gridfitting und | | |I:0 | | |Hinting von | | | | | |TrueType-Schriften | +------------------------------------------------------------------+ 11.6.3. Graphic data tools (CLI)     The following packages for the CLI graphics data conversion, editing, and organization tools caught my eyes. Tabelle 11.19. List of graphics data tools (CLI) +------------------------------------------------------------------------+ | Paket |Popcon|Größe|Schlüsselwort| Beschreibung | |-----------------+------+-----+-------------+---------------------------| |imagemagick |I:317 |74 |image(bitmap)|Programme zur | | | | | |Bildbearbeitung | |-----------------+------+-----+-------------+---------------------------| | |V:1, | | |Programme zur | |graphicsmagick |I:11 |5565 |image(bitmap)|Bildbearbeitung (Abspaltung| | | | | |von imagemagick) | |-----------------+------+-----+-------------+---------------------------| |netpbm |V:28, |8526 |image(bitmap)|Werkzeuge zur | | |I:326 | | |Grafikkonvertierung | |-----------------+------+-----+-------------+---------------------------| | | | | |convert High Efficiency | | |V:0, | |heif→jpeg |Image File Format (HEIF) to| |libheif-examples |I:2 |191 |(bitmap) |JPEG, PNG, or Y4M formats | | | | | |with heif-convert(1) | | | | | |command | |-----------------+------+-----+-------------+---------------------------| | | | | |Konvertieren von | |icoutils |V:7, |221 |png ↔ ico |MS-Windows-Icons und | | |I:50 | |(bitmap) |-Cursor in das und vom | | | | | |PNG-Format (Favicons) | |-----------------+------+-----+-------------+---------------------------| | | | | |PostScript- und PDF-Dateien| |pstoedit |V:2, |1011 |ps/pdf → |in editierbare | | |I:52 | |image(vector)|Vector-Grafiken (SVG) | | | | | |konvertieren | |-----------------+------+-----+-------------+---------------------------| | |V:7, | |Windows/image|Konvertierungswerkzeuge für| |libwmf-bin |I:119 |151 |(vector) |Windows-Metadaten | | | | | |(Vector-Grafiken) | |-----------------+------+-----+-------------+---------------------------| | |V:0, | |fig → sxd |XFig-Dateien in das | |fig2sxd |I:0 |151 |(vector) |OpenOffice.org-Draw-Format | | | | | |konvertieren | |-----------------+------+-----+-------------+---------------------------| | |V:2, | | |Werkzeug zum Nachbearbeiten| |unpaper |I:17 |412 |image → image|von eingescannten Seiten | | | | | |für OCR | |-----------------+------+-----+-------------+---------------------------| | |V:7, | | |freie OCR-Software | |tesseract-ocr |I:33 |2228 |image → text |basierend auf HPs | | | | | |kommerzieller OCR-Engine | |-----------------+------+-----+-------------+---------------------------| | |V:7, | | |OCR-Engine-Daten: | |tesseract-ocr-eng|I:34 |4032 |image → text |tesseract-ocr-Sprachdateien| | | | | |für englischen Text |     |-----------------+------+-----+-------------+---------------------------| |ocrad |V:0, |587 |image → text |freie OCR-Software | | |I:3 | | | | |-----------------+------+-----+-------------+---------------------------| | |V:2, | | |Befehlszeilen-Werkzeug, um | |exif |I:42 |339 |image(Exif) |EXIF-Informationen von | | | | | |JPEG-Dateien anzuzeigen | |-----------------+------+-----+-------------+---------------------------| |exiv2 |V:2, |275 |image(Exif) |Werkzeug zur Bearbeitung | | |I:27 | | |von Exif-/IPTC-Metadaten | |-----------------+------+-----+-------------+---------------------------| | |V:1, | | |Programm für die Umwandlung| |exiftran |I:14 |69 |image(Exif) |der JPEG-Bilder von | | | | | |Digitalkameras | |-----------------+------+-----+-------------+---------------------------| | | | | |Werkzeug, um | |exiftags |V:0, |292 |image(Exif) |Exif-Informationen aus | | |I:3 | | |Digitalkamera-JPEG-Dateien | | | | | |auszulesen | |-----------------+------+-----+-------------+---------------------------| |exifprobe |V:0, |499 |image(Exif) |Metadaten aus | | |I:3 | | |Digitalbildern auslesen | |-----------------+------+-----+-------------+---------------------------| | |V:1, | |image(Raw) → |Dekodierer für | |dcraw |I:12 |583 |ppm |Digitalkamerabilder im | | | | | |RAW-Format | |-----------------+------+-----+-------------+---------------------------| |findimagedupes |V:0, |77 |image → |Visuell ähnliche oder | | |I:1 | |fingerprint |doppelte Bilder finden | |-----------------+------+-----+-------------+---------------------------| | | | | |Bilder zusammenfügen, um | |ale |V:0, |839 |image → image|die Wiedergabetreue zu | | |I:0 | | |erhöhen oder Mosaike zu | | | | | |erzeugen | |-----------------+------+-----+-------------+---------------------------| |imageindex |V:0, |145 |image(Exif) →|Erzeugen von statischen | | |I:1 | |html |HTML-Galerien aus Bildern | |-----------------+------+-----+-------------+---------------------------| |outguess |V:0, |230 |jpeg,png |universelles | | |I:1 | | |Steganographie-Werkzeug | |-----------------+------+-----+-------------+---------------------------| |jpegoptim |V:0, |59 |jpeg |optimize JPEG files | | |I:7 | | | | |-----------------+------+-----+-------------+---------------------------| |optipng |V:3, |213 |png |optimize PNG files, | | |I:43 | | |lossless compression | |-----------------+------+-----+-------------+---------------------------| |pngquant |V:0, |61 |png |optimize PNG files, lossy | | |I:9 | | |compression | +------------------------------------------------------------------------+ 11.7. Verschiedene Datenkonvertierungen Es gibt viele andere Programme zum Konvertieren von Daten.     Folgende Pakete habe ich über den regulären Ausdruck "~Guse::converting" in aptitude(8) gefunden (Näheres dazu in Abschnitt 2.2.6, „Optionen für Suchmethoden mit aptitude“): Tabelle 11.20. Liste verschiedener Werkzeuge zur Datenkonvertierung +---------------------------------------------------------------+ | Paket |Popcon|Größe|Schlüsselwort| Beschreibung | |---------+------+-----+-------------+--------------------------| | | | | |Programm zur Konvertierung| |alien |V:1, |163 |rpm/tgz → deb|von fremden | | |I:19 | | |Software-Paketen in das | | | | | |Debian-Paketformat |     |---------+------+-----+-------------+--------------------------| | | | | |Konvertierer von "Electric| | |V:0, | | |Book" (beliebt in Japan) | |freepwing|I:0 |424 |EB → EPWING |in ein separates JIS X | | | | | |4081-Format (eine | | | | | |Untermenge von EPWING V1) | |---------+------+-----+-------------+--------------------------| |calibre |V:6, |63385|alle → EPUB |E-Book-Konvertierer und | | |I:28 | | |Bibliotheksverwaltung | +---------------------------------------------------------------+     Sie können die Daten aus einem RPM-Archiv auch mit folgendem Befehl extrahieren:     $ rpm2cpio file.src.rpm | cpio --extract Kapitel 12. Programmierung Ich gebe hier einige Startimpulse, um Programmierung im Debian-System zumindest so weit zu erlernen, dass der     Programmcode aus Debian-Quellpaketen zwecks Fehlersuche nachverfolgt werden kann. Hier einige erwähnenswerte Pakete und dazugehörige Dokumentation: Handbuchseiten (manpages) sind verfügbar, indem Sie nach Installation der manpages- und manpages-dev-Pakete "man programmname" eingeben. Informationen über GNU-Werkzeuge erhalten     Sie über "info programmname" nach Installation der entsprechenden Dokumentationspakete. Sie müssen unter Umständen die Bereiche contrib und non-free des Archivs zusätzlich zu main freigeben, da einige GFDL-Dokumentation als nicht DFSG-frei angesehen wird.     Ziehen Sie bitte die Nutzung eines Versionskontrollsystems in Erwägung, siehe Abschnitt 10.5, „Git“. Warnung     Verwenden Sie nicht "test" als Namen für eine ausführbare Testdatei. "test" ist ein fest integrierter Shell-Builtin. Achtung     Sie sollten Software, die direkt aus den Quellen kompiliert wurden, in "/usr/local" oder "/opt" installieren, um Kollisionen mit Systemprogrammen zu vermeiden. Tipp     Die Code-Beispiele zum Erzeugen des Songs "99 Bottles of Beer" sollten Ihnen gute Ideen zu nahezu allen Programmiersprachen liefern. 12.1. Das Shell-Skript     Das Shell-Skript ist eine Textdatei mit gesetztem Ausführungsbit und enthält Befehle in der folgenden Form:     #!/bin/sh ... command lines     Die erste Zeile spezifiziert den Shell-Interpreter, der den Inhalt dieser Datei liest und ausführt. Das Lesen von Shell-Skripten ist der beste Weg, um zu verstehen, wie ein Unix-artiges System arbeitet. Ich gebe hier einige     Hinweise zur Shell-Programmierung. Lesen Sie "Shell Mistakes" (https://www.greenend.org.uk/rjk/2001/04/shell.html), um aus Fehlern zu lernen. Anders als der interaktive Shell-Modus (lesen Sie Abschnitt 1.5,     „Der einfache Shell-Befehl“ und Abschnitt 1.6, „Unix-ähnliche Textverarbeitung“) verwenden Shell-Skripte häufig Parameter, bedingte Ausdrücke und Schleifen. 12.1.1. POSIX-Shell-Kompatibilität Viele Systemskripte können von jeder POSIX-konformen Shell (lesen     Sie Tabelle 1.13, „Liste von Shell-Programmen“) interpretiert werden. * Die nicht-interaktive Standard-POSIX-Shell "/usr/bin/sh" ist ein symbolischer Link auf /usr/bin/dash und wird von vielen     Systemprogrammen genutzt. * Die interaktive Standard-POSIX-Shell ist /usr/bin/bash. Vermeiden Sie, in Shell-Skripten Bashisms oder Zshisms (speziell     für Bash oder Zsh angepasste Shell-Befehle) zu verwenden, damit sie auf alle POSIX-Shells portierbar sind. Sie können dies mittels checkbashisms(1) überprüfen. Tabelle 12.1. Liste typischer Bashisms +---------------------------------------------------------------+ | Gut: POSIX | Vermeiden: Bashism | |-------------------------------+-------------------------------| |if [ "$foo" = "$bar" ] ; then …|if [ "$foo" == "$bar" ] ; then | | |… | |-------------------------------+-------------------------------|     |diff -u datei.c.orig datei.c |diff -u datei.c{.orig,} | |-------------------------------+-------------------------------| |mkdir /foobar /foobaz |mkdir /foo{bar,baz} | |-------------------------------+-------------------------------| |funktionsname() { … } |function funktionsname() { … } | |-------------------------------+-------------------------------| |Oktalformat: "\377" |Hexadezimalformat: "\xff" | +---------------------------------------------------------------+ Der Befehl "echo" muss mit Vorsicht verwendet werden, da seine     Implementierung sich zwischen Shell-Builtins und externen Befehlen unterscheidet: * vermeiden Sie die Verwendung jeglicher Befehlsoptionen außer "-n";     * vermeiden Sie die Verwendung von Escape-Sequenzen in Zeichenketten, da deren Handhabung unterschiedlich ist. Anmerkung     Obwohl die Option "-n" nicht wirklich der POSIX-Syntax entspricht, ist sie grundsätzlich akzeptiert. Tipp     Nutzen Sie den "printf"-Befehl statt "echo", wenn Sie Escape-Sequenzen in auszugebenen Zeichenketten einbetten möchten. 12.1.2. Shell-Parameter     Einige spezielle Shell-Parameter werden oft in Shell-Skripten verwendet: Tabelle 12.2. Liste von Shell-Parametern +---------------------------------------------------------------+ |Shell-Parameter| Wert | |---------------+-----------------------------------------------| |$0 |Name der Shell oder des Shell-Skripts | |---------------+-----------------------------------------------| |$1 |erstes (1.) Shell-Argument | |---------------+-----------------------------------------------| |$9 |neuntes (9.) Shell-Argument | |---------------+-----------------------------------------------| |$# |Anzahl der Parameter |     |---------------+-----------------------------------------------| |"$*" |"$1 $2 $3 $4 … " | |---------------+-----------------------------------------------| |"$@" |"$1" "$2" "$3" "$4" … | |---------------+-----------------------------------------------| |$? |Beendigungs-Status des zuletzt ausgeführten | | |Befehls | |---------------+-----------------------------------------------| |$$ |Prozessnummer (PID) des Shell-Skripts | |---------------+-----------------------------------------------| |$! |PID des zuletzt ausgeführten Hintergrundbefehls| +---------------------------------------------------------------+     Grundlegende Parameterauswertungen, die Sie sich einprägen sollten: Tabelle 12.3. Liste von Parameterauswertungen +---------------------------------------------------------------+ | | Wert, falls |Wert, falls var nicht gesetzt| |Parameterauswertung| var gesetzt | ist | | | ist | | |-------------------+-------------+-----------------------------| |${var:-string} |"$var" |"string" | |-------------------+-------------+-----------------------------|     |${var:+string} |"string" |"null" | |-------------------+-------------+-----------------------------| |${var:=string} |"$var" |"string" (und ausführen von | | | |"var=string") | |-------------------+-------------+-----------------------------| | | |Ausgabe von "string" auf | |${var:?string} |"$var" |stderr (und mit Fehlerstatus | | | |beenden) | +---------------------------------------------------------------+     Hierbei ist der Doppelpunkt ":" in allen Operatoren optional: * mit ":" = Operatortest für existiert und nicht Null;     * ohne ":" = Operatortest nur für existiert. Tabelle 12.4. Liste von Shell-Parameterersetzungen +---------------------------------------------------+ |Parameterersetzung| Ergebnis | |------------------+--------------------------------| |${var%suffix} |entferne kleinstes Suffix-Muster|     |------------------+--------------------------------| |${var%%suffix} |entferne größtes Suffix-Muster | |------------------+--------------------------------| |${var#prefix} |entferne kleinstes Prefix-Muster| |------------------+--------------------------------| |${var##prefix} |entferne größtes Prefix-Muster | +---------------------------------------------------+ 12.1.3. Bedingte Ausdrücke in der Shell     Jeder Befehl gibt einen Beendigungs-Status (Exit-Status) zurück, der für einen bedingten Ausdruck verwendet werden kann: * Erfolg: 0 ("Wahr/True")     * Fehler: nicht 0 ("Falsch/False") Anmerkung     "0" im Kontext eines bedingten Ausdrucks für die Shell bedeutet "Wahr", während "0" im Kontext eines bedingten Ausdrucks für ein C-Programm "Falsch" bedeutet. Anmerkung     "[" ist das Äquivalent des test-Befehls; Argumente bis zum "]" werden als bedingter Ausdruck gewertet.     Grundlegende Ausdrucksformen für bedingte Ausdrücke, die Sie sich einprägen sollten: * "befehl && bei_erfolg_auch_diesen_befehl_ausführen || true"     * "befehl || falls_kein_erfolg_auch_diesen_befehl_ausführen || true" * ein mehrzeiliger Skriptschnipsel wie dieser: if [ conditional_expression ]; then if_success_run_this_command     else if_not_success_run_this_command fi Hierbei ist das "|| true" am Ende erforderlich, um     sicherzustellen, dass das Shell-Skript sich bei dieser Zeile nicht fälschlicherweise beendet, wenn die Shell mit der "-e"-Option aufgerufen wird. Tabelle 12.5. Liste von Dateivergleichsoperatoren in bedingten Ausdrücken +---------------------------------------------------------------+ | Gleichung | Wahr wenn … | |--------------+------------------------------------------------| |-e datei |datei existiert | |--------------+------------------------------------------------| |-d datei |datei existiert und ein Verzeichnis ist | |--------------+------------------------------------------------| |-f datei |datei existiert und eine reguläre Datei ist | |--------------+------------------------------------------------|     |-w datei |datei existiert und schreibbar ist | |--------------+------------------------------------------------| |-x datei |datei existiert und ausführbar ist | |--------------+------------------------------------------------| |datei1 -nt |datei1 neuer als datei2 ist (Änderungszeitpunkt)| |datei2 | | |--------------+------------------------------------------------| |datei1 -ot |datei1 älter als datei2 ist (Änderungszeitpunkt)| |datei2 | | |--------------+------------------------------------------------| |datei1 -ef |datei1 und datei2 die gleiche Device- und | |datei2 |Inode-Nummer haben | +---------------------------------------------------------------+ Tabelle 12.6. Liste von String-Vergleichsoperatoren im bedingten Ausdruck +---------------------------------------------------------------+ |Gleichung | Wahr wenn … | |----------+----------------------------------------------------| |-z str |die Länge von str gleich Null ist | |----------+----------------------------------------------------| |-n str |die Länge von str nicht Null ist | |----------+----------------------------------------------------| |str1 = |str1 und str2 gleich sind |     |str2 | | |----------+----------------------------------------------------| |str1 != |str1 und str2 ungleich sind | |str2 | | |----------+----------------------------------------------------| |str1 < |str1 in der Sortierung vor str2 erscheint | |str2 |(Locale-abhängig) | |----------+----------------------------------------------------| |str1 > |str1 in der Sortierung hinter str2 erscheint | |str2 |(Locale-abhängig) | +---------------------------------------------------------------+     Arithmetische Ganzzahlvergleicher in bedingten Ausdrücken sind "-eq", "-ne", "-lt", "-le", "-gt" und "-ge". 12.1.4. Shell-Schleifen     Es gibt mehrere Ausdrucksweisen für Schleifen, die in POSIX-Shells genutzt werden können: * "for x in foo1 foo2 … ; do befehl ; done" führt Schleifen aus, indem Einträge aus der Liste "foo1 foo2 …" der Variable "x" zugewiesen werden und dann "befehl" ausgeführt wird. * "while bedingung ; do befehl ; done" wiederholt "befehl", solange "bedingung" wahr ist.     * "until bedingung ; do befehl ; done" wiederholt "befehl", solange "bedingung" nicht wahr ist. * "break" ermöglicht, die Bearbeitung der Schleife zu beenden. * "continue" ermöglicht, den nächsten Umlauf der Schleife fortzusetzen. Tipp     Die der C-Sprache ähnliche nummerische Wiederholung (Iteration) kann realisiert werden, indem seq(1) für die Erzeugung der "foo1 foo2 …"-Liste genutzt wird. Tipp     Lesen Sie auch Abschnitt 9.4.9, „Einen Befehl wiederholt mit einer Schleife über verschiedene Dateien ausführen“. 12.1.5. Shell-Umgebungsvariablen Einige populäre Umgebungsvariablen für den normalen     Shell-Befehlsprompt könnten in der Ausführungsumgebung Ihres Skriptes nicht verfügbar ein. * Statt "$USER" nutzen Sie besser "$(id -un)" * Statt "$UID" nutzen Sie besser "$(id -u)"     * Statt "$HOME" nutzen Sie besser "$(getent passwd "$(id -u)"| cut -d ":" -f 6)" (dies funktioniert auch für Abschnitt 4.5.2, „Modernes zentralisiertes Systemmanagement“ ). 12.1.6. Befehlsabfolge auf der Shell     Die Shell verarbeitet ein Skript im Prinzip in der folgenden Abfolge: * Die Shell liest eine Zeile. * Die Shell gruppiert Teile der Zeile zu zusammengehörigen Ausdrücken (Token) zusammen, wenn diese sich innerhalb von "…" oder '…' befinden. * Die Shell splittet andere Teile der Zeile in einzelne Ausdrücke (Token) auf, wenn diese wie folgt von einander getrennt sind: + Whitespace-Zeichen: Leerzeichen Tabulator newline + Metazeichen: < > | ; & ( ) * Die Shell prüft jeden Ausdruck auf Schlüsselworte (wenn nicht innerhalb von "…" oder '…'), um deren Verhalten anzupassen. + Schlüsselwörter sind: if then elif else fi for in while unless do done case esac * Die Shell expandiert Alias-Befehle (wenn nicht innerhalb von "…" oder '…'). * Die Shell expandiert eine Tilde (wenn nicht innerhalb von "…" oder '…'): + "~" → Heimatverzeichnis des aktuellen Benutzers + "~benutzer" → Heimatverzeichnis von benutzer     * Die Shell expandiert Parameter in deren Wert (wenn nicht innerhalb von '…'): + Parameter: "$PARAMETER" oder "${PARAMETER}" * Die Shell expandiert Befehlsersetzungen / command substitutions (wenn nicht innerhalb von '…'): + "$( befehl )" → die Ausgabe von "befehl" + "` befehl `" → die Ausgabe von "befehl" * Die Shell expandiert Pfadnamenmuster in die passenden Dateinamen (wenn nicht innerhalb von "…" oder '…'): + * → jegliche Zeichen (eins oder mehrere) + ? → irgendein (nur ein) Zeichen + […] → jegliche Zeichen von denen in "…" * Die Shell sucht befehl in folgenden Definitionen und führt ihn aus: + Funktions-Definition + Builtin (integrierter Befehl) + ausführbare Datei in "$PATH" * Die Shell geht zur nächsten Zeile und wiederholt diesen kompletten Ablauf vom Anfang.     Einfache Anführungszeichen innerhalb von doppelten Anführungszeichen haben keine Wirkung. Das Ausführen von "set -x" in der Shell oder das Aufrufen einer     Shell mit der Option "-x" veranlasst die Shell, alle ausgeführten Befehle auch auf dem Bildschirm auszugeben. Dies ist sehr nützlich zur Fehlersuche. 12.1.7. Hilfsprogramme für Shell-Skripte Um Ihr Shell-Programm innerhalb des Debian-Systems möglichst weit     portierbar zu machen, ist es eine gute Idee, die zu nutzenden Hilfsprogramme auf diejenigen einzuschränken, welche durch die essential-Pakete bereitgestellt werden: * "aptitude search ~E" listet alle essential-Pakete auf;     * "dpkg -L paketname |grep '/man/man.*/'" listet Handbuchseiten (manpages) derjenigen Befehle auf, die von dem Paket paketname bereitgestellt werden. Tabelle 12.7. Liste der Pakete, die kleine Hilfsprogramme für Shell-Skripte enthalten +---------------------------------------------------------------+ | Paket | Popcon |Größe| Beschreibung | |-------------+--------+-----+----------------------------------| |dash |V:884, |191 |kleine und schnelle, fast | | |I:997 | |POSIX-kompatible Shell für sh | |-------------+--------+-----+----------------------------------| |coreutils |V:880, |18307|Grundlegende GNU-Werkzeuge | | |I:999 | | | |-------------+--------+-----+----------------------------------| |grep |V:782, |1266 |GNU grep, egrep und fgrep | | |I:999 | | | |-------------+--------+-----+----------------------------------| |sed |V:790, |987 |GNU sed |     | |I:999 | | | |-------------+--------+-----+----------------------------------| |mawk |V:442, |285 |kleine und schnelle Alternative zu| | |I:997 | |awk | |-------------+--------+-----+----------------------------------| |debianutils |V:907, |224 |verschiedene Hilfsprogramme | | |I:999 | |speziell für Debian | |-------------+--------+-----+----------------------------------| |bsdutils |V:519, |356 |grundlegende Kommandos aus | | |I:999 | |4.4BSD-Lite | |-------------+--------+-----+----------------------------------| |bsdextrautils|V:596, |339 |weitere Kommandos aus 4.4BSD-Lite | | |I:713 | | | |-------------+--------+-----+----------------------------------| |moreutils |V:15, |231 |zusätzliche Unix-Hilfsprogramme | | |I:38 | | | +---------------------------------------------------------------+ Tipp     Obwohl moreutils außerhalb von Debian unter Umständen nicht verfügbar ist, bietet es interessante kleine Programme. Das erwähnenswerteste ist sponge(8); es ist sehr nützlich, wenn Sie eine Originaldatei überschreiben möchten.     Beispiele finden Sie in Abschnitt 1.6, „Unix-ähnliche Textverarbeitung“. 12.2. Skriptverarbeitung in Interpreter-Sprachen Tabelle 12.8. Liste von Interpreter-betreffenden Paketen +---------------------------------------------------------------+ | Paket |Popcon|Größe| Dokumentation | |-------------------------+------+-----+------------------------| | |V:884,| |sh: kleine und schnelle | |dash |I:997 |191 |POSIX-kompatible Shell | | | | |für sh | |-------------------------+------+-----+------------------------| |bash |V:838,|7175 |sh: "info bash" aus dem | | |I:999 | |bash-doc-Paket | |-------------------------+------+-----+------------------------| |mawk |V:442,|285 |AWK: kleine und schnelle| | |I:997 | |Alternative zu awk | |-------------------------+------+-----+------------------------| |gawk |V:285,|2906 |AWK: "info gawk" aus dem| | |I:349 | |gawk-doc-Paket | |-------------------------+------+-----+------------------------| | | | |Perl: perl(1) bzw. die | |perl |V:707,|673 |HTML-Seiten aus dem | | |I:989 | |perl-doc- oder | | | | |perl-doc-html-Paket | |-------------------------+------+-----+------------------------| | | | |Perl-Erweiterung für die| |libterm-readline-gnu-perl|V:2, |380 |GNU ReadLine/ |     | |I:29 | |History-Bibliothek: | | | | |perlsh(1) | |-------------------------+------+-----+------------------------| |libreply-perl |V:0, |171 |REPL für Perl: reply(1) | | |I:0 | | | |-------------------------+------+-----+------------------------| |libdevel-repl-perl |V:0, |237 |REPL für Perl: re.pl(1) | | |I:0 | | | |-------------------------+------+-----+------------------------| | |V:718,| |Python: python3(1) bzw. | |python3 |I:953 |81 |die HTML-Seiten aus dem | | | | |python3-doc-Paket | |-------------------------+------+-----+------------------------| | | | |Tcl: tcl(3) und | |tcl |V:25, |21 |detaillierte | | |I:218 | |Handbuchseiten aus dem | | | | |tcl-doc-Paket | |-------------------------+------+-----+------------------------| | | | |Tk: tk(3) und | |tk |V:20, |21 |detaillierte | | |I:211 | |Handbuchseiten aus dem | | | | |tk-doc-Paket | |-------------------------+------+-----+------------------------| |ruby |V:86, |29 |Ruby: ruby(1), erb(1), | | |I:208 | |irb(1), rdoc(1), ri(1) | +---------------------------------------------------------------+ Wenn Sie auf einem Debian-System eine Aufgabe automatisieren     möchten, sollten Sie es zunächst mit einer Interpreter-Sprache versuchen. Eine Richtschnur für die Auswahl der passenden Sprache ist: * Verwenden Sie dash, wenn die Aufgabe einfach ist und CLI-Programme mit einem Shell-Programm kombiniert werden. * Verwenden Sie python3, wenn es keine einfache Aufgabe ist und     Sie alles von Grund auf neu schreiben. * Verwenden Sie perl, tcl, ruby, ... falls bereits vorhandener Code in einer dieser Sprachen existiert, der übernommen werden muss, um die Aufgabe erledigen zu können. Falls der resultierende Code zu langsam ist, können Sie den     kritischen Teil zwecks Ausführung in einer kompilierten Sprache neu schreiben und diesen von der Interpreter-Sprache aus aufrufen. 12.2.1. Fehlersuche im Code für Interpreter-Sprachen     Die meisten Interpreter bieten eine grundlegende Syntaxprüfung und Funktionalitäten zur Code-Nachverfolgung. * “dash -n script.sh” - Syntaxprüfung eines Shell-Skripts * “dash -x script.sh” - Nachverfolgung (Trace) eines Shell-Skripts * “python -m py_compile script.py” - Syntaxprüfung eines Python-Skripts     * “python -mtrace --trace script.py” - Nachverfolgung (Trace) eines Python-Skripts * “perl -I ../libpath -c script.pl” - Syntaxprüfung eines Perl-Skripts * “perl -d:Trace script.pl” - Nachverfolgung (Trace) eines Perl-Skripts Um Code für dash zu testen, versuchen Sie Abschnitt 9.1.4,     „Readline-Wrapper“, um eine bash-ähnliche interaktive Umgebung zu erhalten. Um Code für perl zu testen, versuchen Sie eine REPL-Umgebung für     Perl; sie bietet Ihnen eine Python-ähnliche REPL (=READ + EVAL + PRINT + LOOP)-Umgebung für Perl. 12.2.2. Grafisches GUI-Programm und Shell-Skripte Ein Shell-Skript kann aufgewertet werden, um ein attraktives     GUI-Programm zu erzeugen. Der Trick ist, eines der sogenannten Dialog-Programme zu verwenden, statt der stumpfen Interaktion über echo- und read-Befehle. Tabelle 12.9. Liste von Dialog-Programmen +---------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |---------+------+-----+----------------------------------------| |x11-utils|V:192,|651 |xmessage(1): eine Nachricht oder Abfrage| | |I:566 | |in einem Fenster anzeigen (X) | |---------+------+-----+----------------------------------------| |whiptail |V:284,|56 |nutzerfreundliche Dialogboxen von | | |I:996 | |Shell-Skripten anzeigen (newt) | |---------+------+-----+----------------------------------------| |dialog |V:11, |1227 |nutzerfreundliche Dialogboxen von |     | |I:99 | |Shell-Skripten anzeigen (ncurses) | |---------+------+-----+----------------------------------------| |zenity |V:76, |183 |grafische Dialogboxen von Shell-Skripten| | |I:363 | |anzeigen (GTK) | |---------+------+-----+----------------------------------------| | |V:0, | |Werkzeug für Shell-Skript-Oberflächen | |ssft |I:0 |75 |(Aufrufprogramm für zenity, kdialog und | | | | |dialog mit gettext) | |---------+------+-----+----------------------------------------| |gettext |V:56, |5818 |"/usr/bin/gettext.sh": Meldungen | | |I:259 | |übersetzen | +---------------------------------------------------------------+     Hier ein Beispiel für ein GUI-Programm, um zu demonstrieren, wie einfach es sein kann mit nur einem Shell-Skript.     Dieses Skript nutzt zenity, um eine Datei auszuwählen (Standardvorwahl ist /etc/motd) und sie anzuzeigen. Ein grafischer Starter für dieses Skript kann erstellt werden     gemäß Abschnitt 9.4.10, „Ein Programm aus der grafischen Oberfläche heraus starten“. #!/bin/sh -e # Copyright (C) 2021 Osamu Aoki , Public Domain # vim:set sw=2 sts=2 et: DATA_FILE=$(zenity --file-selection --filename="/etc/motd" --title="Select a file to check") || \ ( echo "E: File selection error" >&2 ; exit 1 ) # Check size of archive     if ( file -ib "$DATA_FILE" | grep -qe '^text/' ) ; then zenity --info --title="Check file: $DATA_FILE" --width 640 --height 400 \ --text="$(head -n 20 "$DATA_FILE")" else zenity --info --title="Check file: $DATA_FILE" --width 640 --height 400 \ --text="The data is MIME=$(file -ib "$DATA_FILE")" fi Dieser Ansatz eines grafischen Programms mit einem Shell-Skript     ist nur für einfache Auswahlen sinnvoll. Wenn Sie komplexere Programme schreiben, sollten Sie die Nutzung von geeigneten Plattformen in Erwägung ziehen. 12.2.3. Eigene Aktionen im Dateimanager Grafische Dateimanager können erweitert werden, um einige populäre Aktionen für ausgewählte Dateien ausführen zu können;     dazu müssen eventuell zusätzliche Erweiterunspakete installiert werden. Auch können spezielle eigene Aktionen ausführt werden, indem Sie selbst erstellte Skripte hinzufügen. * Für GNOME lesen Sie dazu NautilusScriptsHowto. * Für KDE finden Sie weitere Details in Creating Dolphin Service Menus.     * Für Xfce sollten Sie Thunar - Custom Actions und https:// help.ubuntu.com/community/ThunarCustomActions besuchen. * Für LXDE schauen Sie unter Custom Actions. 12.2.4. Verrücktes bei kurzen Perl-Skripten Um Prozessdaten zu verarbeiten, muss sh Unterprozesse generieren, um cut, grep, sed usw. aufrufen zu können; und es ist langsam.     Auf der anderen Seite enthält perl interne Funktionalitäten zur Verarbeitung von Prozessdaten, und es ist schnell. Daher nutzen viele Wartungsskripte in Debian perl.     Denken wir an folgendes einzeilige AWK-Skript und sein Äquivalent in Perl:     awk '($2=="1957") { print $3 }' |     Es ist äquivalent zu jeder der folgenden Zeilen:     perl -ne '@f=split; if ($f[1] eq "1957") { print "$f[2]\n"}' |     perl -ne 'if ((@f=split)[1] eq "1957") { print "$f[2]\n"}' |     perl -ne '@f=split; print $f[2] if ( $f[1]==1957 )' |     perl -lane 'print $F[2] if $F[1] eq "1957"' |     perl -lane 'print$F[2]if$F[1]eq+1957' |     Das letzte ist eine Knobelaufgabe. Es nutzt die Vorteile folgender Perl-Funktionen: * Der Whitespace ist optional. * Es existiert eine automatische Konvertierung von Zahlen zu Zeichenketten.     * Perl's Befehlsausführungstricks über Befehlszeilen-Optionen: perlrun(1) * Perl's spezielle Variablen: perlvar(1) Diese Flexibilität ist die Stärke von Perl. Gleichzeitig erlaubt     sie aber auch die Erstellung von kryptischem und verwinkeltem Code. Seien Sie vorsichtig. 12.3. Programmieren in kompilierten Sprachen Tabelle 12.10. Liste von Compiler-betreffenden Paketen +---------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |----------------+------+-----+---------------------------------| |gcc |V:167,|36 |GNU-C-Compiler | | |I:550 | | | |----------------+------+-----+---------------------------------| | |V:248,| |GNU-C-Bibliothek: | |libc6-dev |I:567 |12053|Entwicklungsbibliotheken und | | | | |Header-Dateien | |----------------+------+-----+---------------------------------| |g++ |V:56, |13 |GNU-C++-Compiler | | |I:501 | | | |----------------+------+-----+---------------------------------| |libstdc++-10-dev|V:14, |17537|GNU Standard-C++-Bibliothek | | |I:165 | |Version 3 (Entwicklungsdateien) | |----------------+------+-----+---------------------------------| |cpp |V:334,|18 |GNU-C-Preprozessor | | |I:727 | | | |----------------+------+-----+---------------------------------| |gettext |V:56, |5818 |GNU-Werkzeuge für die | | |I:259 | |Internationalisierung | |----------------+------+-----+---------------------------------| |glade |V:0, |1204 |Builder für die | | |I:5 | |GTK-Bedienoberfläche | |----------------+------+-----+---------------------------------| |valac |V:0, |725 |C#-ähnliche Sprache für das | | |I:4 | |GObject-System |     |----------------+------+-----+---------------------------------| |flex |V:7, |1243 |LEX-kompatibler schneller | | |I:73 | |lexikalischer Analysegenerator | |----------------+------+-----+---------------------------------| |bison |V:7, |3116 |YACC-kompatibler Parser-Generator| | |I:80 | | | |----------------+------+-----+---------------------------------| |susv2 |I:0 |16 |die "Single UNIX Specifications | | | | |v2" | |----------------+------+-----+---------------------------------| |susv3 |I:0 |16 |die "Single UNIX Specifications | | | | |v3" | |----------------+------+-----+---------------------------------| |susv4 |I:0 |16 |die "Single UNIX Specifications | | | | |v4" | |----------------+------+-----+---------------------------------| |golang |I:20 |11 |Compiler für die | | | | |Programmiersprache Go | |----------------+------+-----+---------------------------------| |rustc |V:3, |8860 |Rust System-Programmiersprache | | |I:14 | | | |----------------+------+-----+---------------------------------| |haskell-platform|I:1 |12 |Standard-Haskell-Bibliothek und | | | | |zugehörige Werkzeuge | |----------------+------+-----+---------------------------------| |gfortran |V:6, |15 |GNU-Fortran-95-Compiler | | |I:62 | | | |----------------+------+-----+---------------------------------| |fpc |I:2 |103 |Free Pascal | +---------------------------------------------------------------+ Hierbei sind flex (siehe Abschnitt 12.3.3, „Flex - ein besseres Lex“) und bison (siehe Abschnitt 12.3.4, „Bison - ein besseres     Yacc“) mit aufgeführt, um zu zeigen, wie Compiler-ähnliche Programme in der Sprache C erstellt werden können, indem höherwertige Beschreibungssprachen in C kompiliert werden. 12.3.1. C     Sie können wie folgt eine korrekte Umgebung zum Kompilieren von in der C-Programmiersprache geschriebenen Programmen einrichten:     # apt-get install glibc-doc manpages-dev libc6-dev gcc build-essential Das Paket libc6-dev (d.h. die GNU-C-Bibliothek) bietet als     C-Standard-Bibliothek eine Sammlung von Header-Dateien und Bibliotheksroutinen, die von der C-Sprache genutzt werden.     Referenzen für C finden Sie über: * "info libc" (Referenz für Funktionen der C-Bibliothek) * gcc(1) und "info gcc"     * jeglicher_funktionsname_aus_der_c_bibliothek(3) * Kernighan & Ritchie, "The C Programming Language", 2. Ausgabe (Prentice Hall) 12.3.2. Ein einfaches C-Programm (gcc)     Hier ein einfaches Beispiel zum Kompilieren von "example.c" mit der Bibliothek "libm" in eine ausführbare Datei "run_example": $ cat > example.c << EOF #include #include #include int main(int argc, char **argv, char **envp){ double x; char y[11]; x=sqrt(argc+7.5);     strncpy(y, argv[0], 10); /* prevent buffer overflow */ y[10] = '\0'; /* fill to make sure string ends with '\0' */ printf("%5i, %5.3f, %10s, %10s\n", argc, x, y, argv[1]); return 0; } EOF $ gcc -Wall -g -o run_example example.c -lm $ ./run_example 1, 2.915, ./run_exam, (null) $ ./run_example 1234567890qwerty 2, 3.082, ./run_exam, 1234567890qwerty Hierbei wird "-lm" benötigt, um die Bibliothek "/usr/lib/libm.so"     aus dem libc6-Paket für sqrt(3) zu verlinken. Die eigentliche Bibliothek liegt in "/lib/" und hat den Dateinamen "libm.so.6", was ein symbolischer Link auf "libm-2.7.so" ist. Schauen Sie sich den letzten Parameter im ausgegebenen Text an.     Dort werden mehr als 10 Zeichen ausgegeben, obwohl "%10s" angegeben wurde. Die Verwendung von Funktionen, die Zeiger auf Speicherbereiche ohne Bereichsüberprüfung nutzen (wie sprintf(3) und strcpy(3)),     wird missbilligt, um das Ausnutzen von Pufferüberläufen zu verhindern, die obige Überlaufeffekte in Gang bringen. Verwenden Sie stattdessen snprintf(3) und strncpy(3). 12.3.3. Flex - ein besseres Lex     Flex ist ein Lex-kompatibler schneller lexikalischer Analysegenerator.     Eine Einführung zu flex(1) finden Sie in "info flex".     Many simple examples can be found under "/usr/share/doc/flex/ examples/". ^[7] 12.3.4. Bison - ein besseres Yacc     Einige Pakete stellen Yacc-kompatible LR-Parser- oder LALR-Parser-Generatoren in Debian bereit: Tabelle 12.11. Liste Yacc-kompatibler LALR-Parser-Generatoren +---------------------------------------------------------------+ |Paket |Popcon |Größe| Beschreibung | |------+-------+-----+------------------------------------------| |bison |V:7, |3116 |GNU LALR-Parser-Generator | | |I:80 | | |     |------+-------+-----+------------------------------------------| |byacc |V:0, |258 |Berkeley LALR-Parser-Generator | | |I:4 | | | |------+-------+-----+------------------------------------------| |btyacc|V:0, |243 |rückverfolgender Parser-Generator | | |I:0 | |basierend auf byacc | +---------------------------------------------------------------+     Eine Einführung zu bison(1) finden Sie in "info bison". Sie müssen Ihre eigenen "main()"- und "yyerror()"-Funktionen     bereitstellen. "main()" ruft "yyparse()" auf, das wiederum "yylex ()" aufruft, was gewöhnlich von FleX erzeugt wird.     Here is an example to create a simple terminal calculator program.     Let's create example.y: /* calculator source for bison */ %{ #include extern int yylex(void); extern int yyerror(char *); %} /* declare tokens */ %token NUMBER %token OP_ADD OP_SUB OP_MUL OP_RGT OP_LFT OP_EQU %% calc: | calc exp OP_EQU { printf("Y: RESULT = %d\n", $2); } ; exp: factor | exp OP_ADD factor { $$ = $1 + $3; } | exp OP_SUB factor { $$ = $1 - $3; }     ; factor: term | factor OP_MUL term { $$ = $1 * $3; } ; term: NUMBER | OP_LFT exp OP_RGT { $$ = $2; } ; %% int main(int argc, char **argv) { yyparse(); } int yyerror(char *s) { fprintf(stderr, "error: '%s'\n", s); }     Let's create, example.l: /* calculator source for flex */ %{ #include "example.tab.h" %} %% [0-9]+ { printf("L: NUMBER = %s\n", yytext); yylval = atoi(yytext); return NUMBER; }     "+" { printf("L: OP_ADD\n"); return OP_ADD; } "-" { printf("L: OP_SUB\n"); return OP_SUB; } "*" { printf("L: OP_MUL\n"); return OP_MUL; } "(" { printf("L: OP_LFT\n"); return OP_LFT; } ")" { printf("L: OP_RGT\n"); return OP_RGT; } "=" { printf("L: OP_EQU\n"); return OP_EQU; } "exit" { printf("L: exit\n"); return YYEOF; } /* YYEOF = 0 */ . { /* ignore all other */ } %%     Then execute as follows from the shell prompt to try this: $ bison -d example.y $ flex example.l $ gcc -lfl example.tab.c lex.yy.c -o example $ ./example 1 + 2 * ( 3 + 1 ) = L: NUMBER = 1 L: OP_ADD L: NUMBER = 2 L: OP_MUL     L: OP_LFT L: NUMBER = 3 L: OP_ADD L: NUMBER = 1 L: OP_RGT L: OP_EQU Y: RESULT = 9 exit L: exit 12.4. Werkzeuge zur statischen Code-Analyse     Lint-ähnliche Werkzeuge können bei der automatisierten statischen Code-Analyse helfen.     Werkzeuge wie Indent können Menschen bei Code-Überprüfungen helfen, indem Quellcode einheitlich formatiert wird. Ctags-ähnliche Werkzeuge können Menschen bei Code-Überprüfungen     helfen, indem eine Index- (oder Tag-)Datei mit im Quellcode gefundenen Namen erzeugt wird. Tipp Konfigurieren Sie Ihren Lieblingseditor (z.B. emacs oder vim), so dass er asynchrone Lint-Engine-Plugins nutzt und Sie so beim     Schreiben von Code unterstützt. Diese Plugins werden sehr mächtig, indem Sie die Vorteile des Language-Server-Protokolls nutzen. Da sie sich sehr schnell ändern, könnte es eine gute Option sein, die Software von Upstream zu verwenden statt des entsprechenden Debian-Pakets. Tabelle 12.12. Liste von Werkzeugen für die statische Code-Analyse +---------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |---------------+------+-----+----------------------------------| |vim-ale |I:0 |2591 |Asynchrone Lint-Engine für Vim 8 | | | | |und NeoVim | |---------------+------+-----+----------------------------------| |vim-syntastic |I:3 |1379 |Syntaxprüfungen für Vim | |---------------+------+-----+----------------------------------| |elpa-flycheck |V:0, |808 |moderne on-the-fly Syntaxprüfung | | |I:1 | |für Emacs | |---------------+------+-----+----------------------------------| |elpa-relint |V:0, |147 |Fehlersuche mittels Regexp für | | |I:0 | |Emacs-Lisp-Dateien | |---------------+------+-----+----------------------------------| |cppcheck-gui |V:0, |7224 |Werkzeug für die statische C/ | | |I:1 | |C++-Code-Analyse (GUI) | |---------------+------+-----+----------------------------------| |shellcheck |V:2, |18987|Lint-Werkzeug für Shell-Skripte | | |I:13 | | | |---------------+------+-----+----------------------------------| |pyflakes3 |V:2, |20 |passive Prüfung von | | |I:15 | |Python3-Programmen | |---------------+------+-----+----------------------------------| |pylint |V:4, |2018 |Statisches Prüfprogramm für | | |I:20 | |Python-Code | |---------------+------+-----+----------------------------------| | |V:707,| |Interpreter mit internem | |perl |I:989 |673 |statischen Code-Prüfmechanismus: | | | | |B::Lint(3perl) | |---------------+------+-----+----------------------------------| |rubocop |V:0, |3247 |statischer Code-Analyser für Ruby | | |I:0 | | | |---------------+------+-----+----------------------------------|     |clang-tidy |V:2, |21 |clang-basiertes | | |I:11 | |C++-Linter-Werkzeug | |---------------+------+-----+----------------------------------| | |V:0, | |Werkzeug zur statischen | |splint |I:2 |2320 |Überprüfung von C-Programmen auf | | | | |Programmfehler | |---------------+------+-----+----------------------------------| |flawfinder |V:0, |205 |Werkzeug zur Durchsuchung von | | |I:0 | |Quellcode auf Sicherheitsschwächen| |---------------+------+-----+----------------------------------| |black |V:3, |660 |kompromissloser | | |I:13 | |Python-Code-Formatierer | |---------------+------+-----+----------------------------------| |perltidy |V:0, |2493 |Einrücker und Neuformatierer für | | |I:4 | |Perl-Skripte | |---------------+------+-----+----------------------------------| |indent |V:0, |431 |Code-Formatierer für C | | |I:7 | | | |---------------+------+-----+----------------------------------| |astyle |V:0, |785 |Quelltextformatierer für C, C++, | | |I:2 | |Objective-C, C# und Java | |---------------+------+-----+----------------------------------| |bcpp |V:0, |111 |C(++)-Code schön machen | | |I:0 | | | |---------------+------+-----+----------------------------------| |xmlindent |V:0, |53 |Neuformatierung von | | |I:1 | |XML-Datenströmen | |---------------+------+-----+----------------------------------| |global |V:0, |1908 |Werkzeuge zum Suchen und Browsen | | |I:2 | |in Quelltext | |---------------+------+-----+----------------------------------| |exuberant-ctags|V:2, |341 |Erzeugen von Indexdateien aus | | |I:20 | |Quelltextdefinitionen | |---------------+------+-----+----------------------------------| |universal-ctags|V:1, |3386 |Erzeugen von Indexdateien aus | | |I:11 | |Quelltextdefinitionen | +---------------------------------------------------------------+ 12.5. Fehlersuche (Debugging) Debugging ist ein wichtiger Teil der Programmieraktivitäten. Das     Wissen darüber, wie man in Programmen einen Fehler sucht, macht Sie zu einem guten Debian-Nutzer, der aussagekräftige Fehlerberichte erstellen kann. Tabelle 12.13. Liste von Debugging-Paketen +-------------------------------------------------------+ |Paket| Popcon |Größe| Dokumentation |     |-----+----------+-----+--------------------------------| |gdb |V:14, I:96|11637|"info gdb" aus dem gdb-doc-Paket| |-----+----------+-----+--------------------------------| |ddd |V:0, I:7 |4105 |"info ddd" aus dem ddd-doc-Paket| +-------------------------------------------------------+ 12.5.1. Grundlegende Ausführung von gdb Das primäre Programm zur Fehlersuche (Debugger) im Debian-System     ist gdb(1), welches Ihnen erlaubt, ein Programm zu inspizieren, während es läuft.     Wir installieren gdb und zugehörige Programme wie folgt:     # apt-get install gdb gdb-doc build-essential devscripts     Gute Einführungen zu gdb finden Sie unter: * “info gdb”     * “Debugging with GDB” in /usr/share/doc/gdb-doc/html/gdb/ index.html * “Einführungen im Netz” Hier ein einfaches Beispiel zur Verwendung von gdb(1) bei einem     Programm namens "program", kompiliert mit der Option "-g", um Debugging-Informationen auszugeben. $ gdb program (gdb) b 1 # set break point at line 1 (gdb) run args # run program with args (gdb) next # next line ...     (gdb) step # step forward ... (gdb) p parm # print parm ... (gdb) p parm=12 # set value to 12 ... (gdb) quit Tipp     Viele gdb(1)-Befehle können abgekürzt werden. Vervollständigungen funktionieren wie in der Shell mit der Tabulator-Taste. 12.5.2. Fehlersuche (Debugging) in einem Debian-Paket Da installierte Binärdateien auf einem Debian-System normalerweise nicht unnötig aufgebläht sein sollten, werden Debugging-Symbole in normalen Paketen meistens entfernt. Um bei solchen Paketen Debugging mit gdb(1) durchführen zu können,     müssen *-dbgsym-Pakete installiert werden (z.B. coreutils-dbgsym für das coreutils-Paket). Die Quellpakete erzeugen diese *-dbgsym-Debug-Pakete automatisch mit den normalen Binärpaketen und sie werden in dem separaten Archiv debian-debug abgelegt. Bitte lesen Sie die entsprechenden Artikel im Debian Wiki, wenn Sie weitere Informationen benötigen. Falls ein Paket, bei dem eine Fehlersuche durchgeführt werden     soll, kein *-dbgsym-Paket anbietet, müssen Sie es händisch neu bauen und dann installieren, wie hier: $ mkdir /path/new ; cd /path/new $ sudo apt-get update $ sudo apt-get dist-upgrade     $ sudo apt-get install fakeroot devscripts build-essential $ apt-get source package_name $ cd package_name* $ sudo apt-get build-dep ./     Beheben Sie die Fehler, falls erforderlich. Erhöhen Sie die Paketversion auf eine Versionsnummer, die nicht mit offiziellen Debian-Versionen kollidiert (Sie können z.B. ein     "+debug1" anhängen, wenn Sie eine existierende Paketversion neu kompilieren, oder Sie hängen "~pre1" an, wenn Sie eine noch nicht veröffentlichte Paketversion selbst kompilieren). Verwenden Sie dazu:     $ dch -i     Kompilieren und installieren Sie ein Paket mit Debugging-Symbolen wie folgt: $ export DEB_BUILD_OPTIONS="nostrip noopt"     $ debuild $ cd .. $ sudo debi package_name*.changes Sie müssen die Build-Skripte des Pakets überprüfen und     sicherstellen, dass "CFLAGS=-g -Wall" zum Kompilieren der Binärdateien verwendet wird. 12.5.3. Gewinnen von Backtrace-Informationen Wenn Sie einen Programmabsturz erlitten haben, ist es eine gute Idee, einen Fehlerbericht einzureichen und an diesen zusätzliche     Backtrace-Informationen (Daten zur Rückverfolgung von Vorgängen in Programmen zwecks Fehleranalyse) anzuhängen, die Sie mittels Kopieren-und-Einfügen erhalten.     Solche Backtrace-Informationen lassen sich mittels gdb(1) über einen der folgenden Ansätze gewinnen: * der Ansatz "Absturz in GDB": + ein Programm über GDB starten + einen Absturz des Programms herbeiführen + "bt" am GDB-Prompt eingeben * der Ansatz "Zunächst den Absturz herbeiführen": + Aktualisieren der Datei “/etc/security/limits.conf”, so dass sie folgendes enthält:     * soft core unlimited + Eingabe von "ulimit -c unlimited" in der Shell + Aufruf des Programms aus dieser Shell + einen Absturz des Programms herbeiführen, um eine Dump-Datei zu erzeugen + Laden der Dump-Datei in GDB mit "gdb gdb ./program_binary core" + "bt" am GDB-Prompt eingeben Im Falle einer Endlosschleife oder bei eingefrorener Tastatur     können Sie einen Absturz des Programms mit Strg-\ oder Strg-C herbeiführen, oder indem Sie “kill -ABRT PID” ausführen (Näheres dazu in Abschnitt 9.4.12, „Einen Prozess beenden (kill)“). Tipp Oft stellt man fest, dass in den Backtrace-Informationen eine oder mehrere der ersten Zeilen "malloc()" oder "g_malloc()" enthalten. Wenn dies passiert, besteht eine hohe     Wahrscheinlichkeit, dass Ihr Backtrace nicht sehr nützlich sein wird. Der einfachste Weg nützliche Informationen zu bekommen ist, die Umgebungsvariable "$MALLOC_CHECK_" auf einen Wert von 2 zu setzen (Näheres in malloc(3)). Sie können dies wie folgt erledigen, während gdb läuft: $ MALLOC_CHECK_=2 gdb hello 12.5.4. Erweiterte gdb-Befehle Tabelle 12.14. Liste erweiterter gdb-Befehle +---------------------------------------------------------------+ | Befehl | Beschreibung | |----------------+----------------------------------------------| |(gdb) thread |Backtrace für alle Threads eines | |apply all bt |Multi-Thread-Programms auslesen | |----------------+----------------------------------------------| |(gdb) bt full |Parameter auslesen, die auf dem Aufruf-Stack | | |der Funktionsaufrufe aufgelaufen sind | |----------------+----------------------------------------------|     |(gdb) thread |Backtrace und Parameter als Kombination der | |apply all bt |vorangegangenen Optionen auslesen | |full | | |----------------+----------------------------------------------| |(gdb) thread |Backtrace und Parameter für die ersten 10 | |apply all bt |Aufrufe auslesen, um irrelevante Ausgaben | |full 10 |abzuschneiden | |----------------+----------------------------------------------| |(gdb) set |Protokoll der Ausgabe von gdb in eine Datei | |logging on |schreiben (Standard ist "gdb.txt") | +---------------------------------------------------------------+ 12.5.5. Überprüfen der Abhängigkeiten von Bibliotheken     Verwenden Sie ldd(1) wie hier, um zu ermitteln, von welchen Bibliotheken ein Programm abhängt: $ ldd /usr/bin/ls librt.so.1 => /lib/librt.so.1 (0x4001e000)     libc.so.6 => /lib/libc.so.6 (0x40030000) libpthread.so.0 => /lib/libpthread.so.0 (0x40153000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)     Damit ls(1) in einer "chroot"-Umgebung funktioniert, müssen die obigen Bibliotheken in der "chroot"-Umgebung vorhanden sein.     Lesen Sie dazu Abschnitt 9.4.6, „Programmaktivitäten verfolgen“. 12.5.6. Werkzeuge zur dynamischen Aufrufverfolgung Es gibt verschiedene Werkzeuge zur dynamischen Aufrufverfolgung     in Debian. Schauen Sie in Abschnitt 9.4, „Überwachen, Steuern und Starten von Programmaktivitäten“. 12.5.7. Fehleranalyse bei X-Fehlern     Wenn ein GNOME-Programm preview1 einen X-Fehler empfangen hat, sollten Sie eine Meldung wie diese sehen:     The program 'preview1' received an X Window System error. Sollte dies der Fall sein, können Sie versuchen, das Programm mit     der Option "--sync" zu starten und einen Haltepunkt für die Funktion "gdk_x_error" zu setzen, um einen Backtrace zu bekommen. 12.5.8. Werkzeuge zur Erkennung von Speicherlecks     Es gibt verschiedene Werkzeuge zur Erkennung von Speicherlecks in Debian: Tabelle 12.15. Liste von Werkzeugen zur Erkennung von Speicherlecks +---------------------------------------------------------------+ | Paket |Popcon|Größe| Beschreibung | |--------------+------+-----+-----------------------------------| | |V:248,| |mtrace(1): | |libc6-dev |I:567 |12053|malloc-Debugging-Funktionalität in | | | | |glibc | |--------------+------+-----+-----------------------------------| |valgrind |V:6, |78191|Speicher-Debugging- und | | |I:37 | |Analyse-Programm | |--------------+------+-----+-----------------------------------|     |electric-fence|V:0, |73 |malloc(3)-Debugging-Programm | | |I:3 | | | |--------------+------+-----+-----------------------------------| |libdmalloc5 |V:0, |390 |Bibliothek zur Fehlersuche bei | | |I:2 | |Speicherzuweisungen | |--------------+------+-----+-----------------------------------| | |V:0, | |Bibliothek zur Detektierung von | |duma |I:0 |296 |Pufferüber- oder -unterläufen in C-| | | | |und C++-Programmen | |--------------+------+-----+-----------------------------------| |leaktracer |V:0, |56 |Werkzeug zur Verfolgung von | | |I:1 | |Speicherlecks in C++-Programmen | +---------------------------------------------------------------+ 12.5.9. Disassemblieren von Binärdateien     Sie können Binär-Code wie folgt mit objdump(1) disassemblieren:     $ objdump -m i386 -b binary -D /usr/lib/grub/x86_64-pc/stage1 Anmerkung     gdb(1) kann verwendet werden, um Code interaktiv zu disassemblieren. 12.6. Bauwerkzeuge Tabelle 12.16. Liste von Paketen mit Bauwerkzeugen +---------------------------------------------------------------+ | Paket |Popcon |Größe| Dokumentation | |-----------+-------+-----+-------------------------------------| |make |V:151, |1592 |"info make" aus dem make-doc-Paket | | |I:555 | | | |-----------+-------+-----+-------------------------------------| |autoconf |V:31, |2025 |"info autoconf" aus dem | | |I:230 | |autoconf-doc-Paket | |-----------+-------+-----+-------------------------------------| |automake |V:30, |1837 |"info automake" aus dem | | |I:228 | |automake1.10-doc-Paket | |-----------+-------+-----+-------------------------------------|     |libtool |V:25, |1213 |"info libtool" aus dem | | |I:212 | |libtool-doc-Paket | |-----------+-------+-----+-------------------------------------| |cmake |V:17, |36607|cmake(1) - plattformübergreifendes, | | |I:115 | |quelloffenes Make-System | |-----------+-------+-----+-------------------------------------| |ninja-build|V:6, |428 |ninja(1) - kleines Bausystem nah am | | |I:41 | |Geiste von Make | |-----------+-------+-----+-------------------------------------| |meson |V:3, |3759 |meson(1) - hochproduktives Bausystem,| | |I:22 | |aufbauend auf ninja | |-----------+-------+-----+-------------------------------------| |xutils-dev |V:0, |1484 |imake(1), xmkmf(1) usw. | | |I:9 | | | +---------------------------------------------------------------+ 12.6.1. Make Make ist ein Werkzeug, um Gruppen von Programmen zu betreuen. Bei Ausführung des Befehls make(1) liest make die Regeldatei "Makefile" und aktualisiert ein Ziel (Target), falls sich     Dateien, von denen das Makefile abhängt, seit der letzten Modifizierung des Targets verändert haben oder falls das Target nicht existiert. Die Ausführungen dieser Aktualisierungen können zeitgleich erfolgen.     Die Syntax der Regeldatei ist folgende: target: [ prerequisites ... ]     [TAB] command1 [TAB] -command2 # ignore errors [TAB] @command3 # suppress echoing Hierbei ist "[TAB]" ein TAB-Code. Jede Zeile wird nach Ersetzung der Variablen durch die Shell interpretiert. Verwenden Sie "\" am     Ende einer Zeile, um den Befehl in der nächsten Zeile fortzusetzen. Zur Angabe von Umgebungsvariablen müssen Sie statt "$" hier "$$" schreiben.     Implizite Regeln für das Target und Voraussetzungen können z.B. wie folgt angegeben werden:     %.o: %.c header.h Hier enthält das Target das Zeichen "%" (exakt eines davon). Das "%" passt auf jeden nicht leeren Teil-String in den eigentlichen     Dateinamen des Targets. Auch die Voraussetzungen nutzen auf ähnliche Art ein "%", um den Bezug zum Namen des Targets anzuzeigen. Tabelle 12.17. Liste von automatischen make-Variablen +---------------------------------------------------------------+ | automatische | Wert | | Variable | | |--------------------+------------------------------------------| |$@ |Ziel | |--------------------+------------------------------------------|     |$< |erste Voraussetzung | |--------------------+------------------------------------------| |$? |alle neueren Voraussetzungen | |--------------------+------------------------------------------| |$^ |alle Voraussetzungen | |--------------------+------------------------------------------| |$* |"%" trifft auf den Stamm im Target-Muster | | |zu | +---------------------------------------------------------------+ Tabelle 12.18. Liste von make-Variablenexpandierungen +--------------------------------------------+ |Variablenexpandierung| Beschreibung | |---------------------+----------------------|     |foo1 := bar |einmalige Expandierung| |---------------------+----------------------| |foo2 = bar |rekursive Expandierung| |---------------------+----------------------| |foo3 += bar |anhängen | +--------------------------------------------+     Führen Sie "make -p -f/dev/null" aus, um alle internen automatischen Regeln zu sehen. 12.6.2. Autotools Autotools ist eine Sammlung von Programmierwerkzeugen,     entwickelt, um dabei zu helfen, Quellcode-Pakete auf viele Unix-artige Systeme portierbar zu machen. * Autoconf ist ein Werkzeug, das ein "configure"-Shell-Skript aus einer "configure.ac"-Datei erzeugt. + "configure" wird dann später verwendet, um aus der Vorlage "Makefile.in" die "Makefile"-Datei zu generieren.     * Automake erstellt aus einer "Makefile.am" eine "Makefile.in". * Libtool ist ein Shell-Skript für die Problematik der Portabilität beim Kompilieren dynamischer Bibliotheken aus Quellcode. 12.6.2.1. Kompilieren und Installieren eines Programms Warnung     Überschreiben Sie keine Systemdateien, wenn Sie Ihre selbst kompilierten Programme installieren. Debian verändert keine Dateien unter "/usr/local/" oder "/opt".     Wenn Sie also ein Programm aus den Quellen kompilieren, sollten Sie es in "/usr/local/" installieren, damit es nicht mit Debian kollidiert. $ cd src     $ ./configure --prefix=/usr/local $ make # this compiles program $ sudo make install # this installs the files in the system 12.6.2.2. Deinstallation eines Programms Wenn Sie noch den Original-Quellcode haben, dieser autoconf(1)/     automake(1) nutzt und Sie noch wissen, wie Sie es konfiguriert haben, verfahren Sie wie folgt, um das Programm zu deinstallieren:     $ ./configure all-of-the-options-you-gave-it $ sudo make uninstall Wenn Sie sich absolut sicher sind, dass der Installationsprozess     Dateien nur unter "/usr/local/" abgelegt hat und und es nichts Wichtiges mehr dort gibt, können Sie alternativ auch alles löschen, wie hier:     # find /usr/local -type f -print0 | xargs -0 rm -f Falls Sie nicht sicher sind, wo die Dateien installiert sind, sollten Sie einen Blick auf checkinstall(8) aus dem     checkinstall-Paket werfen, das einen leeren Pfad für die Deinstallation liefert. Es unterstützt jetzt auch die Erzeugung eines Debian-Pakets mit der Option "-D". 12.6.3. Meson     Das Software-Bausystem hat sich weiterentwickelt: * Autotools als Aufsatz für Make war seit den 1990'ern der De-Facto-Standard für portable Bauinfrastruktur. Es ist sehr langsam. * CMake initially released in 2000 improved speed significantly but was originally built on the top of inherently slow Make. (Now Ninja can be its backend.)     * Ninja initially released in 2012 is meant to replace Make for the further improved build speed and is designed to have its input files generated by a higher-level build system. * Meson - erstmals veröffentlicht 2013 - ist das neue populäre und schnelle, hochwertige Bausystem; es verwendet Ninja als Backend.     Sie finden Dokumente hierzu unter "The Meson Build system" and "The Ninja build system". 12.7. Web     Einfache interaktive dynamische Webseiten können wie folgt erstellt werden: * Abfragen werden mittels HTML-Formularen dem Browser-Nutzer präsentiert. * Das Ausfüllen und Anklicken von Formulareinträgen sendet einen URL-String mit kodierten Parametern vom Browser zum Webserver: + "https://www.foo.dom/cgi-bin/program.pl?WERT1=WERT1&WERT2 =WERT2&WERT3=WERT3" + "https://www.foo.dom/cgi-bin/program.py?VAR1=WERT1&VAR2= WERT2&VAR3=WERT3" + "https://www.foo.dom/program.php?VAR1=WERT1&VAR2=WERT2&     VAR3=WERT3" * "%nn" in einer URL wird durch ein Zeichen mit hexadezimalem nn-Wert ersetzt. * Die Umgebungsvariable wird gesetzt als: "ABFRAGE_STRING="VAR1 =WERT1 VAR2=WERT2 VAR3=WERT3"". * Ein CGI-Programm (irgendeines von "program.*") auf dem Webserver führt sich selbst mit der Umgebungsvariable "$ABFRAGE_STRING" aus. * Die Standardausgabe (stdout) eines CGI-Programms wird zum Webbrowser gesandt und dort als interaktive dynamische Webseite angezeigt. Aus Sicherheitsgründen wird empfohlen, keinen eigenen zusammengebastelten Code zum Parsen von CGI-Parametern zu verwenden. Es gibt dafür etablierte Module in Perl und Python.     PHP unterstützt diese Funktionalitäten. Wenn eine Speicherung der Daten auf dem Client nötig ist, werden HTTP-Cookies verwendet. Ist eine Verarbeitung der Daten auf dem Client erforderlich, wird häufig Javascript genutzt.     Für weitere Informationen wird auf das Common Gateway Interface, die Apache Software Foundation und JavaScript verwiesen. Die Suche nach "CGI tutorial" auf Google durch Eingabe der kodierten URL https://www.google.com/search?hl=en&ie=UTF-8&q=     CGI+tutorial direkt in der Adresszeile des Browsers ist eine gute Möglichkeit, das CGI-Skript auf dem Google-Server in Aktion zu beobachten. 12.8. Die Quellcode-Übersetzung     Es gibt verschiedene Programme zur Übersetzung von Quellcode: Tabelle 12.19. Liste von Programmen zur Übersetzung von Quellcode +---------------------------------------------------------------+ | Paket |Popcon|Größe|Schlüsselwort| Beschreibung | |---------+------+-----+-------------+--------------------------| |perl |V:707,|673 |AWK → PERL |Quellcode von AWK nach | | |I:989 | | |PERL konvertieren: a2p(1) | |---------+------+-----+-------------+--------------------------|     | |V:0, | | |Quellcode von FORTRAN 77 | |f2c |I:3 |442 |FORTRAN → C |nach C/C++ konvertieren: | | | | | |f2c(1) | |---------+------+-----+-------------+--------------------------| | |V:0, | | |Konvertierer von NASM | |intel2gas|I:0 |178 |intel → gas |(Intel-Format) nach GNU | | | | | |Assembler (GAS) | +---------------------------------------------------------------+ 12.9. Erstellen von Debian-Paketen     Wenn Sie ein Debian-Paket erstellen möchten, lesen Sie folgendes: * Kapitel 2, Debian-Paketmanagement, um die Grundlagen des Paketsystems zu verstehen; * Abschnitt 2.7.13, „Ein Paket auf das Stable-System portieren“ , um den grundlegenden Portierungsprozess zu verstehen; * Abschnitt 9.11.4, „Chroot-System“, um die grundlegenden chroot-Techniken zu verstehen; * debuild(1) und sbuild(1)     * Abschnitt 12.5.2, „Fehlersuche (Debugging) in einem Debian-Paket“ für Informationen zum Rekompilieren von Quellcode zwecks Fehlersuche (Debugging); * Handbuch für Debian-Paketbetreuer (aus dem debmake-doc-Paket). * Debian-Entwicklerreferenz (aus dem developers-reference-Paket); * Debian Policy-Handbuch (aus dem debian-policy-Paket);     Es gibt auch Pakete wie debmake, dh-make, dh-make-perl usw., die beim Paketieren helfen. ---------------------------------------------------------------------     ^[7] Some tweaks may be required to get them work under the current system. Anhang A. Anhang     Hier einige Hintergrundinformationen zu diesem Dokument. A.1. Das Debian-Labyrinth Das Linux-System ist eine sehr leistungsfähige Computer-Plattform für einen mit dem Netzwerk verbundenen Rechner. Allerdings ist es nicht einfach, zu erlernen, wie man all dessen Fähigkeiten nutzen     kann. Die Einrichtung der LPR-Drucker-Warteschlange mit einem nicht PostScript-fähigen Drucker war ein gutes Beispiel für die möglichen Stolpersteine. (Es gibt mittlerweile keine solchen Probleme mehr, da neue Installationen jetzt das CUPS-System nutzen). Es gibt eine vollständige Quelle für detaillierte Informationen, genannt der "QUELLCODE". Dieser ist sehr exakt, aber auch sehr schwer zu verstehen. Es gibt auch andere Quellen wie HOWTOs oder     mini-HOWTOs. Diese sind leichter verständlich, neigen aber dazu, zu viele Details zu liefern und den großen Überblick zu verlieren. Ich habe manchmal ein Problem, den richtigen Abschnitt in einem langen HOWTO zu finden, wenn ich nur ein paar Befehle, die ich aufrufen muss, suche. Ich hoffe, diese "Debian-Referenz (Version 2.122)" (2024-04-10     23:08:27 UTC) bietet eine gute Starthilfe für Leute im Debian-Labyrinth. A.2. Copyright-Vergangenheit Die Debian Reference wurde initiert von mir, Osamu Aoki als persönliches Memo zur Systemadministration.     Viele Inhalte entstammen dem Wissen, das ich von der debian-user-Mailingliste und anderen Debian-Ressourcen bezogen habe. Einem Vorschlag von Josip Rodin folgend, der sehr aktiv im Debian     Documentation Project (DDP) war, wurde die "Debian Reference (version 1, 2001-2007)" als Teil der DDP-Dokumente erstellt. Nach sechs Jahren stellte ich fest, dass die originale "Debian     Reference (version 1)" veraltet war und begann, viele Inhalte neu zu schreiben. Die neue "Debian Reference (version 2)" wurde 2008 veröffentlicht. Ich habe die "Debian Reference (version 2)" aktualisiert, um neuen Themen (wie Systemd, Wayland, IMAP, PipeWire, Linux-Kernel     5.10) Rechnung zu tragen sowie veraltete (SysV init, CVS, Subversion, SSH-Protokoll 1, Linux-Kernel vor 2.5) zu entfernen. Referenzen zur Situation während Jessie 8 (2015-2020) oder älter wurden überwiegend gelöscht. Diese "Debian-Referenz (Version 2.122)" (2024-04-10 23:08:27 UTC)     deckt zum Großteil die Debian-Veröffentlichungen Bookworm (= stable) und Trixie (=testing) ab.     Die Lehrinhalte haben ihren Ursprung und ihre Inspiration in folgenden Quellen: * "Linux User's Guide" von Larry Greenfield (Dezember 1996) + abgelöst durch das "Debian Tutorial" * "Debian Tutorial" von Havoc Pennington (11. Dezember 1998) + teilweise geschrieben von Oliver Elphick, Ole Tetlie,     James Treacy, Craig Sawyer und Ivan E. Moore II + abgelöst durch "Debian GNU/Linux: Guide to Installation and Usage" * "Debian GNU/Linux: Guide to Installation and Usage" von John Goerzen und Ossama Othman (1999) + abgelöst durch die "Debian Reference (version 1)"     Die Paket- und Archivbeschreibungen habe ihren Ursprung und ihre Inspiration in folgenden Quellen:     * "Debian FAQ" (Version von März 2002, zu dieser Zeit betreut durch Josip Rodin)     Andere Inhalte haben ihren Ursprung und ihre Inspiration in folgenden Quellen: * "Debian Reference (version 1)" von Osamu Aoki (2001-2007)     + abgelöst durch die neuere "Debian Referenz (Version 2)" in 2008.     Die vorherige "Debian Reference (version 1)" wurde unter Mithilfe von vielen Beteiligten erstellt: * ein Großteil der Beiträge zur Netzwerkkonfiguration von Thomas Hood; * erhebliche Beiträge zu X- und VCS-bezogenen Themen von Brian Nelson;     * Hilfe bei den Build-Scripten und viele Korrekturen des Inhaltes durch Jens Seidel; * ausgiebige Korrekturlesung durch David Sewell; * viele Beiträge von Übersetzern und Leuten, die Inhalte beigetragen oder Fehler berichtet haben. Viele Handbuch- und Infoseiten im Debian-System sowie Upstream-Webseiten und Wikipedia-Dokumente wurden als primäre Referenzen verwendet, um dieses Dokument zu schreiben. Bis zu     einem gewissen Maß, das Osamu Aoki im Sinne von Fair Use als angemessen angesehen hat, wurden viele Teile davon, speziell Befehlsdefinitionen, in die Debian Reference übernommen (nach sorgfältiger Überarbeitung zwecks Anpassung an Stil und Zielvorgabe dieses Dokuments). Die Beschreibung des Debuggers gdb wurde unter Verwendung von     Inhalten aus dem Debian Wiki über backtrace in Konsens mit Ari Pollak, Loïc Minier und Dafydd Harries erweitert. Die Inhalte der derzeitigen "Debian Referenz (Version 2.122)" (2024-04-10 23:08:27 UTC) sind überwiegend meine eigene Arbeit,     mit Ausnahme der oben genannten. Diese wurden auch durch diejenigen, die damals die Inhalte beigetragen haben, aktualisiert.     Die "Debian Referenz (Version 1)" wurde ins Deutsche übersetzt von Jens Seidel und anderen. Die "Debian Referenz (Version 2)" wurde ins Deutsche übersetzt     von Holger Wansing sowie (teilweise) von Florian Rehnisch und anderen Mitgliedern des debian-l10n-german-Übersetzerteams.     Der Autor Osamu Aoki dankt allen, die geholfen haben, dieses Dokument möglich zu machen. A.3. Dokumentenformat Der Quelltext des englischen Originaldokuments wird derzeit in     DocBook-XML-Dateien geschrieben. Diese Quellen werden in HTML, reine Textdateien, PostScript und PDF konvertiert. (Einige Formate könnten für die Verteilung ausgelassen werden.)