Kapitel 9. Systemtipps

Inhaltsverzeichnis

9.1. The console tips
9.1.1. Shell-Aktivitäten sauber aufzeichnen
9.1.2. Das Programm screen
9.1.3. Navigating around directories
9.1.4. Readline wrapper
9.1.5. Scanning the source code tree
9.2. Anpassen von vim
9.2.1. Customizing vim with internal features
9.2.2. Customizing vim with external packages
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 Zeit
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. 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 Plattenpartitionen
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. Virtualization and emulation tools
9.11.2. Arbeitsablauf bei Virtualisierung
9.11.3. Einbinden des virtuellen Festplatten-Images
9.11.4. Chroot-System
9.11.5. System mit mehrfachen Arbeitsplatzumgebungen

Hier beschreibe ich einige grundlegende Tipps zur Konfiguration und Verwaltung des Systems, überwiegend für die Konsole.

There are some utility programs to help your console activities.


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

There are alternative methods to record the shell activities:

  • Use tee (usable during the boot process in the initramfs):

    $ sh -i 2>&1 | tee typescript
  • Use gnome-terminal with the extend line buffer for scrollback.

  • Use screen with "^A H" (see Abschnitt 9.1.2, „Das Programm screen“) to perform recording of console.

  • Use vim with ":terminal" to enter the terminal mode. Use "Ctrl-W N" to exit from terminal mode to normal mode. Use ":w typescript" to write the buffer to a file.

  • Use emacs with "M-x shell", "M-x eshell", or "M-x term" to enter recording console. Use "C-x C-w" to write the buffer to a file.

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] 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:


Lesen Sie screen(1) bezüglich weiterer Details.

See tmux(1) for functionalities of the alternative command.

In Abschnitt 1.4.2, „Anpassen der bash“, 2 tips to allow quick navigation around directories are described: $CDPATH and mc.

If you use fuzzy text filter program, you can do without typing the exact path. For fzf, include following in ~/.bashrc.

FZF_KEYBINDINGS_PATH=/usr/share/doc/fzf/examples/key-bindings.bash
if [ -f $FZF_KEYBINDINGS_PATH ]; then
  . $FZF_KEYBINDINGS_PATH
fi
FZF_COMPLETION_PATH=/usr/share/doc/fzf/examples/completion.bash
if [ -f $FZF_COMPLETION_PATH ]; then
  . $FZF_COMPLETION_PATH
fi

For example:

  • You can jump to a very deep subdirectory with minimal efforts. You first type "cd **" and press Tab. Then you will be prompted with candidate paths. Typing in partial path strings, e.g., s/d/b foo, will narrow down candidate paths. You select the path to be used by cd with cursor and return keys.

  • You can select a command from the command history more efficiently with minimal efforts. You press Ctrl-R at the command prompt. Then you will be prompted with candidate commands. Typing in partial command strings, e.g., vim d, will narrow down candidates. You select the one to be used with cursor and return keys.

After you learn basics of vim(1) through Abschnitt 1.4.8, „Using vim“, please read Bram Moolenaar's "Seven habits of effective text editing (2000)" to understand how vim should be used.

[Achtung] Achtung

Don't try to change the default key bindings without very good reasons.

The behavior of vim can be changed significantly by enabling its internal features through the Ex-mode commands such as "set ..." to set vim options.

These Ex-mode commands can be included in user's vimrc file, traditional "~/.vimrc" or git-friendly "~/.vim/vimrc". Here is a very simple example [2]:

colorscheme murphy             " from /usr/share/vim/vim??/colors/*.vim
filetype plugin indent on      " filetype aware behavior
syntax enable                  " Syntax highlight
"set spelllang=en_us            " Spell check language as en_us
"set spell                      " Enable spell check
set autoindent                 " Copy indent from current line
set smartindent                " More than autoindent (Drop/Pop after {/})
set nosmarttab                 " <Tab>-key always inserts blanks
set backspace=indent,eol,start " Back space through everything
set laststatus=2               " Always show status line
set statusline=%<%f%m%r%h%w%=%y[U+%04B]%2l/%2L=%P,%2c%V

Simple customization to enable secure-modelines and classical IDE can be enabled by installing vim-scripts package and appending the following to user's vimrc file.

packadd! secure-modelines
packadd! winmanager
let mapleader = ' '
" Toggle paste mode with <SPACE>p
set pastetoggle=<leader>p
" IDE-like UI for files and buffers with <space>w
nnoremap <leader>w         :WMToggle<CR>
" Use safer keys <SPACE>? for moving to another window
nnoremap <leader>h         <C-W>h
nnoremap <leader>j         <C-W>j
nnoremap <leader>k         <C-W>k
nnoremap <leader>l         <C-W>l

The new native Vim package system works nicely with "git" and "git submodule". One such example configuration can be found at my git repository: dot-vim. This does essentially:

  • By using "git" and "git submodule", latest external packages, such as "name", are placed into ~/.vim/pack/*/opt/name and similar.

  • By adding :packadd! name line to user's vimrc file, these packages are placed on runtimepath.

  • Vim loads these packages on runtimepath during its initialization.

  • At the end of its initialization, tags for the installed documents are updated with "helptags ALL".

For more, please start vim with "vim --startuptime vimstart.log" to check actual execution sequence and time spent for each step.

Interesting external plugin packages can be found:

It is quite confusing to see too many ways[3] to manage and load these external packages to vim. Checking the original information is the best cure.


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] Tipp

Bei vim(1) und seinem Pager-Modus alias view(1) wird über ":set hls" die Suche mit Hervorhebung aktiviert.

The default display format of time and date by the "ls -l" command depends on the locale (see Abschnitt 1.2.6, „Zeitstempel“ for value). The "$LANG" variable is referred first and it can be overridden by the "$LC_TIME" or "$LC_ALL" exported environment variables.

The actual default display format for each locale depends on the version of the standard C library (the libc6 package) used. I.e., different releases of Debian had different defaults. For iso-formats, see ISO 8601.

Wenn Sie das Anzeigeformat von Datum und Zeit wirklich über die locale-Einstellung hinaus anpassen möchten, sollten Sie die Option time style value entweder über das "--time-style"-Argument oder über den Wert der Variable "$TIME_STYLE" setzen (Näheres unter ls(1), date(1) und "info coreutils 'ls invocation'").


[Tipp] Tipp

You can eliminate typing long option on commandline using command alias (see Abschnitt 1.5.9, „Befehls-Alias“):

alias ls='ls --time-style=+%d.%m.%y %H:%M'

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}"

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.

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:895, I:999 17372 nice(1): ein Programm mit veränderter Ablaufpriorität ausführen
bsdutils V:666, I:999 402 renice(1): die Ablaufpriorität eines laufenden Prozess verändern
procps V:740, I:999 1648 Werkzeuge für das "/proc"-Dateisystem: ps(1), top(1), kill(1), watch(1), …
psmisc V:408, I:827 793 Werkzeuge für das "/proc"-Dateisystem: killall(1), fuser(1), peekfd(1), pstree(1)
time V:12, I:226 129 time(1): ein Programm ausführen und die Zeit ausgeben, während der Ressourcen verbraucht wurden
sysstat V:160, I:183 1923 sar(1), iostat(1), mpstat(1), …: Werkzeuge zur Messung der System-Performance unter Linux
isag V:0, I:3 117 Interaktive grafische Darstellung der Systemaktivität, basierend auf sysstat
lsof V:386, I:946 451 lsof(8): mit der Option "-p" diejenigen Dateien auflisten, die von einem gerade laufenden Prozess geöffnet wurden
strace V:15, I:143 2367 strace(1): Systemaufrufe und -signale verfolgen
ltrace V:1, I:20 363 ltrace(1): Bibliotheksaufrufe verfolgen
xtrace V:0, I:0 353 xtrace(1): Kommunikation zwischen X11-Client und -Server verfolgen
powertop V:11, I:211 680 powertop(1): Informationen über verbrauchte Systemleistung
cron V:799, I:996 263 Prozesse laut dem Ablaufplan des cron(8)-Daemons im Hintergrund ausführen
anacron V:408, I:481 107 cron-ähnlicher Programmablauf-Planer für Systeme, die nicht 24 Stunden am Tag laufen
at V:140, I:252 161 at(1) oder batch(1): einen Prozess zu einer bestimmten Zeit oder unterhalb einer bestimmten Systembelastung ausführen

[Tipp] Tipp

Das procps-Paket enthält sehr grundlegende Werkzeuge zum Überwachen, Steuern und Starten von Programmaktivitäten. Sie sollten sich mit diesen vertraut machen.

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.

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

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

For the graphical user interface (GUI) compliant to the freedesktop.org standards, the *.desktop files in the /usr/share/applications/ directory provide necessary attributes for the GUI menu display of each program. Each package which is compliant to Freedesktop.org's xdg menu system installs its menu data provided by "*.desktop" under "/usr/share/applications/". Modern desktop environments which are compliant to Freedesktop.org standard use these data to generate their menu using the xdg-utils package. See "/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] 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] 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] 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).

Einige Programme starten automatisch weitere Programme. Hier einige Punkte bezüglich der Anpassung dieses Prozesses.

[Tipp] Tipp

update-mime(8) aktualisiert die "/etc/mailcap"-Datei unter Verwendung von "/etc/mailcap.order" (Näheres in mailcap.order(5)).

[Tipp] 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 Shellskripte lesen.

[Tipp] Tipp

Um eine Konsolen-Applikation (hier mutt) unter X als bevorzugte Anwendung aufzurufen, sollten Sie wie folgt eine X-Anwendung erzeugen (in diesem Fall z.B. "/usr/local/bin/mutt-term") und diese als bevorzugt zu startende Anwendung konfigurieren:

# cat /usr/local/bin/mutt-term <<EOF
#!/bin/sh
gnome-terminal -e "mutt \$@"
EOF
chmod 755 /usr/local/bin/mutt-term

Verwenden Sie cron(8), um regelmäßig wiederkehrende Aufgaben zu planen. Lesen Sie dazu crontab(1) and crontab(5).

Sie können Prozesse zur Ausführung durch einen normalen Benutzer, z.B. den Benutzer foo, einplanen, indem Sie mit dem Befehl "crontab -e" eine crontab(5)-Datei namens "/var/spool/cron/crontabs/foo" erstellen.

Hier ein Beispiel einer crontab(5)-Datei:

# use /bin/sh to run commands, no matter what /etc/passwd says
SHELL=/bin/sh
# mail any output to paul, no matter whose crontab this is
MAILTO=paul
# Min Hour DayOfMonth Month DayOfWeek command (Day... are OR'ed)
# run at 00:05, every day
5  0  *  * *   $HOME/bin/daily.job >> $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] 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] 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 has low level capability to schedule programs to run without cron daemon. For example, /lib/systemd/system/apt-daily.timer and /lib/systemd/system/apt-daily.service set up daily apt download activities. See systemd.timer(5) .

Pressing Alt-SysRq (PrtScr) followed by one keys does the magic of rescuing control of the system.


See more on Linux kernel user’s and administrator’s guide » Linux Magic System Request Key Hacks

[Tipp] Tipp

Von einem SSH-Terminal u.ä. können Sie die Alt-SysRq-Funktionalität nutzen, indem Sie nach "/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.

The current (2021) Debian amd64 Linux kernel has /proc/sys/kernel/sysrq=438=0b110110110:

  • 2 = 0x2 - enable control of console logging level (ON)

  • 4 = 0x4 - enable control of keyboard (SAK, unraw) (ON)

  • 8 = 0x8 - enable debugging dumps of processes etc. (OFF)

  • 16 = 0x10 - enable sync command (ON)

  • 32 = 0x20 - enable remount read-only (ON)

  • 64 = 0x40 - enable signaling of processes (term, kill, oom-kill) (OFF)

  • 128 = 0x80 - allow reboot/poweroff (ON)

  • 256 = 0x100 - allow nicing of all RT tasks (ON)

Obwohl der größte Teil der Hardware-Konfiguration auf modernen GUI-Arbeitsplatz-Systemen 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.


ACPI ist ein neueres Rahmenwerk für das Power Management und der Nachfolger für das ältere APM.

[Tipp] Tipp

Die Skalierung der CPU-Frequenz wird auf modernen Systemen durch Kernel-Module wie acpi_cpufreq abgewickelt.

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

If the hardware time is set to UTC, change the setting to "UTC=yes" in the "/etc/default/rcS".

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] 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:

[Tipp] Tipp

ntptrace(8) aus dem ntp-Paket kann eine Hintereinanderschaltung mehrerer NTP-Server zu deren primärer Quelle zurückverfolgen.

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

Application softwares may be configured not only to access sound devices directly but also to access them via some standardized sound server system. Currently, PulseAudio, JACK, and PipeWire are used as sound server system. See Debian wiki page on Sound for the latest situation.

Es gibt normalerweise für jede populäre Arbeitsplatz-Umgebung 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] Tipp

Verwenden Sie "cat /dev/urandom > /dev/audio" oder speaker-test(1), um die Lautsprecher zu testen (^C zum stoppen).

[Tipp] 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.


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:


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

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.

You may need to umount(8) some devices manually from the command line before operating on them if they are automatically mounted by the GUI desktop system.

Bei der Konfiguration von Laufwerkspartitionen können Sie erwägen, parted(8) zu verwenden (obwohl fdisk(8) lange als Standard angesehen wurde). Die Begriffe "Disk partitioning data", "Partitionstabelle", "Partition map" und "Disk label" werden alle gleichbedeutend verwendet.

Older PCs use the classic Master Boot Record (MBR) scheme to hold disk partitioning data in the first sector, i.e., LBA sector 0 (512 bytes).

Recent PCs with Unified Extensible Firmware Interface (UEFI), including Intel-based Macs, use GUID Partition Table (GPT) scheme to hold disk partitioning data not in the first sector.

Obwohl fdisk(8) lange Zeit das Standardwerkzeug zur Laufwerkspartitionierung war, ist parted(8) dabei, ihm den Rang abzulaufen.


[Achtung] 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] 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.

Although reconfiguration of your partition or activation order of removable storage media may yield different names for partitions, you can access them consistently. This is also helpful if you have multiple disks and your BIOS/UEFI doesn't give them consistent device names.

[Tipp] Tipp

Sie können die UUID eines blockorientierten Gerätes mit blkid(8) abfragen.

You can also probe it and other information with "lsblk -f".

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.

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.


[Tipp] 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.

Btrfs status can be found at Debian wiki on btrfs and kernel.org wiki on btrfs. It is expected to be the next default filesystem after the ext4 filesystem.

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

Die Charakteristik eines Dateisystems kann über seinen Superblock optimiert werden; verwenden Sie dazu den Befehl tune2fs(8):

[Tipp] Tipp

Ungeachtet seines Namens funktioniert tune2fs(8) nicht nur für ext2-Dateisysteme, sondern auch für ext3 und ext4.

Solid state drive (SSD) is auto detected now.

Reduce unnecessary disk accesses to prevent disk wear out by mounting "tmpfs" on volatile data path in /etc/fstab.

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

    • restart the smartd(8) daemon by "sudo systemctl restart smartmontools".

[Tipp] 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.

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.

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.

Hier wird die Veränderung eines Festplatten-Abbilds behandelt.

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 Plattenpartitionen“) 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".

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 -v -f partition.img
Loop device is /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. Da das loop device standardmäßig keine Partitionen verwaltet, muss es wie folgt zurückgesetzt werden:

# modinfo -p loop # verify kernel capability
max_part:Maximum number of partitions per loop device
max_loop:Maximum number of loop devices
# losetup -a # verify nothing using the loop device
# rmmod loop
# modprobe loop max_part=16

Jetzt kann das loop device bis zu 16 Partitionen verwalten.

# losetup -v -f disk.img
Loop device is /dev/loop0
# fdisk -l /dev/loop0

Disk /dev/loop0: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x452b6464

      Device Boot      Start         End      Blocks   Id  System
/dev/loop0p1               1         600     4819468+  83  Linux
/dev/loop0p2             601         652      417690   83  Linux
# mkdir -p /mnt/loop0p1
# mount -t ext4 /dev/loop0p1 /mnt/loop0p1
# mkdir -p /mnt/loop0p2
# mount -t ext4 /dev/loop0p2 /mnt/loop0p2
...hack...hack...hack
# umount /dev/loop0p1
# umount /dev/loop0p2
# 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
...
# mkdir -p /mnt/loop0p2
# mount -t ext4 /dev/mapper/loop0p2 /mnt/loop0p2
...
...hack...hack...hack
# umount /dev/mapper/loop0p2
...
# kpartx -d /mnt/loop0
[Anmerkung] Anmerkung

Sie können auch eine einzelne Partition eines solchen Festplatten-Abbilds mit einem loop device einbinden, indem Sie ein Offset verwenden, um den MBR usw. zu überspringen. Dies ist allerdings fehleranfälliger.

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

Instead of using dd(1), specialized fallocate(8) may be used here.

Mittels eines loop device erstellen Sie auf diesem Festplatten-Abbild "disk.img" wie folgt ein ext4-Dateisystem:

# losetup -f -v disk.img
Loop device is /dev/loop1
# mkfs.ext4 /dev/loop1
...hack...hack...hack
# losetup -d /dev/loop1
$ 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] 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.

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

Hier behandeln wir das Bearbeiten von Binärdaten auf einem Speichermedium.

Hier einige Programme für Datenwiederherstellung und forensische Analysen:


[Tipp] 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.

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 facilitates automatic data encryption via native Linux kernel modules with minimal user efforts using device-mapper.


[Achtung] Achtung

Data encryption costs CPU time etc. Encrypted data becomes inaccessible if its password is lost. Please weigh its benefits and costs.

[Anmerkung] 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] Tipp

In Abschnitt 10.3, „Datensicherheits-Infrastruktur“ finden Sie Infos über eine Verschlüsselungslösung, die komplett auf Benutzerebene abläuft: GNU Privacy Guard.

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

Then, it can be mounted just like normal one on to "/media/username/disk_label", except for asking password (see Abschnitt 10.1.7, „Wechseldatenträger“) under modern desktop environment using the udisks2 package. The difference is that every data written to it is encrypted. The password entry may be automated using keyring (see Abschnitt 10.3.6, „Password keyring“).

You may alternatively format media in different filesystem, e.g., ext4 with "mkfs.ext4 /dev/mapper/sdx1". If btrfs is used instead, the udisks2-btrfs package needs to be installed. For these filesystems, the file ownership and permissions may need to be configured.

Debian stellt für unterstützte Architekturen modulare Linux-Kernel als Pakete bereit.

If you are reading this documentation, you probably don't need to compile Linux kernel by yourself.

Debian hat seine eigene Methode zur Kompilierung des Kernels und zugehöriger Module.


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] 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] 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) (or its short form m-a) helps users to build and install module package(s) easily for one or more custom kernels.

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.

The hardware driver is the code running on the main CPUs of the target system. Most hardware drivers are available as free software now and are included in the normal Debian kernel packages in the main area.

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

  • Softmodem-Treiber

    • martian-modem- und sl-modem-dkms-Pakete (non-free)

The firmware is the code or data loaded on the device attach to the target system (e.g., CPU microcode, rendering code running on GPU, or FPGA / CPLD data, …). Some firmware packages are available as free software but many firmware packages are not available as free software since they contain sourceless binary data. Installing these firmware data is essential for the device to function as expected.

  • The firmware data packages containing data loaded to the volatile memory on the target device.

    • firmware-linux-free (main)

    • firmware-linux-nonfree (non-free)

    • firmware-linux-* (non-free)

    • *-firmware (non-free)

    • intel-microcode (non-free)

    • amd64-microcode (non-free)

  • The firmware update program packages which update data on the non-volatile memory on the target device.

    • fwupd (main): Firmware update daemon which downloads firmware data from Linux Vendor Firmware Service.

    • gnome-firmware (main): GTK front end for fwupd

    • plasma-discover-backend-fwupd (main): Qt front end for fwupd

Bitte beachten Sie, dass Pakete aus non-free und contrib nicht Teil des Debian-Systems sind. Die Konfiguration, um den Zugriff auf die Bereiche non-free und contrib zu aktivieren oder zu deaktivieren, ist in Abschnitt 2.1.4, „Grundlagen über das Debian-Archiv“ beschrieben. Sie sollten sich etwaiger negativer Auswirkungen bei der Verwendung von Paketen aus non-free und contrib bewußt sein; lesen Sie hierzu auch Abschnitt 2.1.5, „Debian ist zu 100% freie Software“.

Please also note that the firmware data downloaded by fwupd from Linux Vendor Firmware Service and loaded to the running Linux kernel may be non-free.

Die Verwendung eines virtualisierten Systems ermöglicht es uns, mehrere Instanzen eines Systems gleichzeitig auf einer einzigen Hardware laufen zu lassen.

There are several virtualization and emulation tool platforms.

  • Complete hardware emulation packages such as ones installed by the games-emulator metapackage

  • Mostly CPU level emulation with some I/O device emulations such as QEMU

  • Mostly CPU level virtualization with some I/O device emulations such as Kernel-based Virtual Machine (KVM)

  • OS level container virtualization with the kernel level support such as LXC (Linux Containers), Docker, ...

  • OS level filesystem access virtualization with the system library call override on the file path such as chroot

  • OS level filesystem access virtualization with the system library call override on the file ownership such as fakeroot

  • OS API emulation such as Wine

  • Interpreter level virtualization with its executable selection and run-time library overrides such as virtualenv and venv for Python

The container virtualization uses Abschnitt 4.7.4, „Linux security features“ and it is the backend technology of Abschnitt 7.6, „Sandbox“.

Here are some packages to help you to setup the virtualized system.

Tabelle 9.27. Liste von Virtualisierungswerkzeugen

Paket Popcon Größe Beschreibung
schroot V:7, I:9 2708 spezialisiertes Werkzeug, um Debian-Binärpakete in chroot-Umgebungen auszuführen
sbuild V:1, I:4 271 Werkzeug, um Debian-Binärpakete aus Debian-Quellen zu bauen
debootstrap V:5, I:61 308 Programm zum Bootstrap eines grundlegenden Debian-Systems (geschrieben in sh)
cdebootstrap V:0, I:2 116 Programm zum Bootstrap eines Debian-Systems (geschrieben in C)
virt-manager V:11, I:42 2298 Virtual Machine Manager: Arbeitsplatz-Anwendung zur Verwaltung von virtuellen Maschinen
libvirt-clients V:43, I:62 1185 Programme für die libvirt-Bibliothek
games-emulator I:0 26 games-emulator: Debian's emulators for games
bochs V:0, I:1 6999 Bochs: IA-32 PC-Emulator
qemu I:29 100 QEMU: schneller generischer Prozessor-Emulator
qemu-system I:22 101 QEMU: Binärdateien zur Emulation eines vollständigen Systems
qemu-user V:0, I:10 106589 QEMU: Binärdateien für User-Mode-Emulation
qemu-utils V:12, I:105 6471 QEMU: Hilfsprogramme
qemu-kvm V:5, I:36 107 KVM: vollständige Virtualisierungslösung auf x86-Hardware mit hardware-unterstützter Virtualisierung
virtualbox V:11, I:14 106967 VirtualBox: x86-Virtualisierungslösung auf i386 und amd64
xen-tools V:0, I:3 727 Werkzeuge zur Verwaltung von virtuellen Debian-XEN-Servern
wine V:17, I:73 191 Wine: Windows-API-Implementierung (Standard-Programm-Suite)
dosbox V:2, I:17 2718 DOSBox: x86-Emulator mit Tandy-/Herc-/CGA-/EGA-/VGA-/SVGA-Grafik, Audioausgabe und DOS
lxc V:10, I:14 21166 Linux-Container verwenden Werkzeuge im User-Space-Bereich
python3-venv I:52 6 venv for creating virtual python environments (system library)
python3-virtualenv V:10, I:59 415 virtualenv for creating isolated virtual python environments
pipx V:0, I:1 885 pipx for installing python applications in isolated environments

Der Wikipedia-Artikel Comparison of platform virtual machines enthält detaillierte Gegenüberstellungen der verschiedenen Plattform-Virtualisierungslösungen.

[Anmerkung] Anmerkung

Standard-Debian-Kernel unterstützen KVM seit Lenny.

Ein typischer Arbeitsablauf für eine Virtualisierung enthält folgende Schritte:

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

If you wish to try a new Debian environment from a terminal console, I recommend you to use chroot. This enables you to run console applications of Debian unstable and testing without usual risks associated and without rebooting. chroot(8) is the most basic way.

[Achtung] Achtung

Examples below assumes both parent system and chroot system share the same amd64 CPU architecture.

Although you can manually create a chroot(8) environment using debootstrap(1). But 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 under script(1) 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

You see how debootstrap(8) populates system data for unstable environment under "/srv/chroot/unstable-amd64-sbuild" for a minimal build system.

You can login to this environment using schroot(1).

$ sudo schroot -v -c chroot:unstable-amd64-sbuild

You see how a system shell running under unstable environment is created.

[Anmerkung] Anmerkung

The "/usr/sbin/policy-rc.d" file which always exits with 101 prevents daemon programs to be started automatically on the Debian system. See "/usr/share/doc/sysv-rc/README.policy-rc.d.gz".

[Anmerkung] Anmerkung

Some programs under chroot may require access to more files from the parent system to function than sbuild-createchroot provides as above. For example, "/sys", "/etc/passwd", "/etc/group", "/var/run/utmp", "/var/log/wtmp", etc. may need to be bind-mounted or copied.

[Tipp] Tipp

The sbuild package helps to construct a chroot system and builds a package inside the chroot using schroot as its backend. It is an ideal system to check build-dependencies. See more on sbuild at Debian wiki and sbuild configuration example in "Guide for Debian Maintainers".

If you wish to try a new GUI Desktop environment of any OS, I recommend you to use QEMU, KVM, or VirtualBox on a Debian stable system to run multiple desktop systems safely using virtualization. These enable you to run any desktop applications including ones of Debian unstable and testing without usual risks associated with them and without rebooting. The configuration of these tools are relatively straight forward.

Since pure QEMU is very slow, it is recommended to accelerate it with KVM when the host system supports it.

Ein Image einer virtuellen Festplatte "virtdisk.qcow2", das ein Debian-System für QEMU enthält, kann mittels debian-installer: Kleine CDs wie folgt erzeugt werden:

$ wget http://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
...

Weitere Tipps finden Sie unter Debian Wiki: QEMU.

VirtualBox enthält grafische, Qt-basierte Werkzeuge und ist ziemlich intuitiv. Seine Benutzeroberfläche und die Befehlszeilenwerkzeuge sind im VirtualBox User Manual (html) bzw. VirtualBox User Manual (PDF) beschrieben.

[Tipp] 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.



[2] More elaborate customization examples: "Vim Galore", "sensible.vim", "#vim Recommendations" ...

[3] vim-pathogen was popular.