Chapitre 9. Astuces du système

Table des matières

9.1. The console tips
9.1.1. Enregistrer proprement l’activité de la console
9.1.2. Le programme screen
9.1.3. Navigating around directories
9.1.4. Readline wrapper
9.1.5. Scanning the source code tree
9.2. Personnaliser vim
9.2.1. Customizing vim with internal features
9.2.2. Customizing vim with external packages
9.3. Enregistrer et présenter des données
9.3.1. Le démon de journal
9.3.2. Analyseur de journaux
9.3.3. Affichage personnalisé des données de texte
9.3.4. Affichage personnalisé de la date et de l’heure
9.3.5. Écho colorisé de l’interpréteur de commandes
9.3.6. Commandes colorisées
9.3.7. Enregistrer l’activité de l’éditeur pour des répétitions complexes
9.3.8. Enregistrer l’image graphique d’une application X
9.3.9. Enregistrer les modifications dans des fichiers de configuration
9.4. Surveiller, contrôler et démarrer l’activité des programmes
9.4.1. Temps d’un processus
9.4.2. La priorité d’ordonnancement
9.4.3. La commande ps
9.4.4. La commande top
9.4.5. Afficher les fichier ouverts par un processus
9.4.6. Tracer l’activité d’un programme
9.4.7. Identification des processus qui utilisent des fichiers ou des sockets
9.4.8. Répéter une commande avec un intervalle constant
9.4.9. Répéter une commande en bouclant entre des fichiers
9.4.10. Lancer un programme depuis l’interface graphique
9.4.11. Personnaliser le programme à lancer
9.4.12. Tuer un processus
9.4.13. Planifier des tâches qui s’exécutent une fois
9.4.14. Planifier des tâches qui s’exécutent régulièrement
9.4.15. touche Alt-SysRq
9.5. Astuces de maintenance du système
9.5.1. Qui se trouve sur le système ?
9.5.2. Prévenir tout le monde
9.5.3. Identification du matériel
9.5.4. Configuration matérielle
9.5.5. Heure système et matérielle
9.5.6. Configuration du terminal
9.5.7. L’infrastructure de gestion du son
9.5.8. Désactiver l’économiseur d’écran
9.5.9. Désactiver les bips
9.5.10. Utilisation de la mémoire
9.5.11. Vérification de la sécurité et de l’intégrité du système
9.6. Astuces relatives au stockage des données
9.6.1. Utilisation de l’espace disque
9.6.2. Configuration de la partition du disque
9.6.3. Accès à une partition en utilisant l’UUID
9.6.4. LVM2
9.6.5. Configuration de systèmes de fichiers
9.6.6. Création et vérification de l’intégrité d’un système de fichiers
9.6.7. Optimisation du système de fichiers à l’aide des options de montage
9.6.8. Optimisation du système de fichiers à l’aide du superbloc
9.6.9. Optimisation du disque dur
9.6.10. Optimisation du SSD
9.6.11. Utiliser SMART pour prédire les défaillances des disques durs
9.6.12. Indication du répertoire de stockage temporaire à l’aide de $TMPDIR
9.6.13. Étendre l’espace de stockage utile à l’aide de LVM
9.6.14. Extension de l’espace de stockage en montant une autre partition
9.6.15. Extension de l’espace de stockage en remontant un autre répertoire
9.6.16. Expansion of usable storage space by overlay-mounting another directory
9.6.17. Extension de l’espace utilisable à l’aide de liens symboliques
9.7. Le fichier image du disque
9.7.1. Créer le fichier image du disque
9.7.2. Écrire directement sur le disque
9.7.3. Monter le fichier image du disque
9.7.4. Nettoyage d’un fichier image du disque
9.7.5. Réaliser le fichier image d’un disque vide
9.7.6. Créer un fichier image ISO9660
9.7.7. Écriture directe sur CD/DVD-R/RW
9.7.8. Monter le fichier image ISO9660
9.8. Les données binaires
9.8.1. Afficher et éditer des données binaires
9.8.2. Manipulation des fichiers sans monter le disque
9.8.3. Redondance des données
9.8.4. Récupération de fichiers de données et analyse par autopsie
9.8.5. Éclater un gros fichier en petits fichiers
9.8.6. Effacer le contenu d’un fichier
9.8.7. Fichiers fictifs
9.8.8. Effacer l’ensemble du disque dur
9.8.9. Effacer l’ensemble du disque dur
9.8.10. Récupérer des fichiers supprimés mais encore ouverts
9.8.11. Rechercher tous les liens physiques
9.8.12. Consommation d’espace disque invisible
9.9. Astuces de chiffrement des données
9.9.1. Chiffrement des disques amovibles à l’aide de dm-crypt/LUKS
9.9.2. Monter des disques amovibles chiffrés à l’aide de dm-crypt/LUKS
9.10. Le noyau
9.10.1. Paramètres du noyau
9.10.2. En-têtes du noyau
9.10.3. Compiler le noyau et les modules associés
9.10.4. Compiler les sources du noyau : recommandations de l’équipe en charge du noyau Debian
9.10.5. Pilotes de matériel et microprogramme
9.11. Système virtualisé
9.11.1. Virtualization and emulation tools
9.11.2. Étapes de la virtualisation
9.11.3. Monter le fichier image du disque virtuel
9.11.4. Système protégé (chroot)
9.11.5. Systèmes de bureaux multiples

Je décris ici les astuces de base pour configurer et gérer les systèmes, la plupart depuis la console.

There are some utility programs to help your console activities.


La simple utilisation de script(1) (consultez Section 1.4.9, « Enregistrer les actions de l’interpréteur de commandes ») pour enregistrer l’activité de l’interpréteur de commandes produit un fichier avec des caractères de contrôle. Cela peut être évité en utilisant col(1) comme suit :

$ script
Script started, file is typescript

faites quelque chose… et pressez Ctrl-D pour quitter script.

$ 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 Section 9.1.2, « Le programme 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) ne permet pas uniquement de faire tourner plusieurs processus dans une fenêtre de terminal, mais aussi à un processus de l’interpréteur de commandes distant de survivre à d’éventuelles interruptions de la connexion. Voici un scénario typique de screen(1) :

  1. vous-vous connectez à une machine distante ;

  2. vous démarrez screen sur une seule console ;

  3. vous exécutez plusieurs programmes dans les fenêtres screen créées avec ^A c (« Ctrl-A » suivi de « c ») ;

  4. vous passez d’une des fenêtres multiples de screen à l’autre avec ^A n (« Ctrl-A » suivi de « n ») ;

  5. vous avez alors besoin de quitter votre terminal, mais vous ne voulez pas perdre votre travail en cours perdant la connexion.

  6. vous pouvez détacher la session screen par différentes méthodes :

    • débrancher brutalement votre connexion réseau ;

    • entrer ^A d (« Ctrl-A » suivi de « d ») et en quittant manuellement la connexion distante :

    • entrer ^A DD (« Ctrl-A » suivi de « DD ») pour détacher screen et vous déconnecter.

  7. Vous vous reconnectez à la même machine distante (même depuis un autre terminal) ;

  8. Vous lancez screen avec « screen -r » ;

  9. screen réattache magiquement toutes les fenêtres screen précédentes avec tous les programmes qui y tournent.

[Astuce] Astuce

Avec screen, vous pouvez économiser des frais de connexion pour les connexions limitées, telles que les connexion commutées ou par paquets, parce que vous laissez un processus actif alors que vous êtes déconnecté. Vous pouvez le ré-attacher plus tard, lorsque vous vous reconnectez.

Dans une session screen, toutes les entrées clavier sont envoyées vers votre fenêtre actuelle sauf les séquences de touche de commande. Toutes les séquences de touche de commande screen sont entrées par ^A (« Ctrl-A ») suivi d’un seule touche [plus les paramètres]. Voici celles dont il est important de se souvenir.


Consultez screen(1) pour davantage d’informations.

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

In Section 1.4.2, « Personnaliser 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 Section 1.4.8, « Using vim », please read Bram Moolenaar's "Seven habits of effective text editing (2000)" to understand how vim should be used.

[Attention] Attention

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 <C-?> for moving to another window
nnoremap <C-H>         <C-W>h
nnoremap <C-J>         <C-W>j
nnoremap <C-K>         <C-W>k
nnoremap <C-L>         <C-W>l

In order for the above keybindings to function properly, the terminal program needs to be configured to generate "ASCII DEL" for Backspace-key and "Escape sequence" for Delete-key.

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.


Bien que des outils de visualisation de texte (« pager » tels que more(1) et less(1) (consultez Section 1.4.5, « Le visualisateur de fichiers ») et des outils personnalisés de mise en évidence et de formatage (consultez Section 11.1.8, « Mettre en évidence et formater des données en texte brut ») peuvent afficher des données textuelles de manière agréable, les éditeurs généralistes (consultez Section 1.4.6, « L’éditeur de texte ») sont plus souples et paramétrables.

[Astuce] Astuce

Pour vim(1) et ses alias de visualisation de texte view(1), « :set hls » active la recherche avec mise en évidence.

The default display format of time and date by the "ls -l" command depends on the locale (see Section 1.2.6, « Horodatage » 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.

Si vous désirez vraiment personnaliser ce format d’affichage de la date et de l’heure plus loin que ne le fait locale, vous pouvez définir la valeur de style d’heure avec le paramètre « --time-style » ou par la valeur de « $TIME_STYLE » (consultez ls(1), date(1), « info coreutils 'ls invocation' »).


[Astuce] Astuce

You can eliminate typing long option on commandline using command alias (see Section 1.5.9, « Alias de commande »):

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

L’écho de l’interpréteur de commandes sur la plupart des terminaux peut être colorisé en utilisant le code ANSI d’échappement (consultez « /usr/share/doc/xterm/ctlseqs.txt.gz »).

Essayez, par exemple, ce qui suit :

$ RED=$(printf "\x1b[31m")
$ NORMAL=$(printf "\x1b[0m")
$ REVERSE=$(printf "\x1b[7m")
$ echo "${RED}RED-TEXT${NORMAL} ${REVERSE}REVERSE-TEXT${NORMAL}"

Vous pouvez enregistrer l’activité de l’éditeur pour des répétitions complexes.

Pour Vim, de la manière suivante :

  • « qa » : démarre l’enregistrement des caractères entrés dans le registre appelé « a ».

  • … activité de l’éditeur

  • « q » : termine l’enregistrement des caractères entrés.

  • « @a » : exécute le contenu du registre « a ».

Pour Emacs, de la manière suivante :

  • « :C-x ( » : commencer la définition d’une macro clavier.

  • … activité de l’éditeur

  • « C-x ) » : terminer la définition d’une macro clavier.

  • « C-x e » : exécuter une macro clavier.

L’activité des programmes peut être surveillée et contrôlée à l’aide d’outils spécialisés.

Tableau 9.8. Liste des outils de surveillance et de contrôle de l’activité des programmes

paquet popcon taille description
coreutils V:908, I:999 18062 nice(1) : lancer un programme avec une priorité d’ordonnancement modifiée
bsdutils V:610, I:999 355 renice(1) : modifier la priorité d’ordonnancement d’un programme en cours d’exécution
procps V:753, I:999 2091 utilitaires du système de fichiers « /proc » : ps(1), top(1), kill(1), watch(1), …
psmisc V:426, I:798 909 utilitaires du système de fichiers « /proc » : killall(1), fuser(1), peekfd(1), pstree(1)
time V:10, I:181 129 time(1) : lancer un programme qui indique l’utilisation des ressources du système en fonction du temps
sysstat V:162, I:185 1785 sar(1), iostat(1), mpstat(1), … : outils de mesure des performances du système pour Linux
isag V:0, I:3 106 Générateur interactif de graphes de l’activité système pour sysstat
lsof V:393, I:942 482 lsof(8) : afficher la liste des fichiers ouverts par un processus en cours d’utilisation en utilisant l’option « -p
strace V:14, I:135 2839 strace(1) : tracer les appels système et les signaux
ltrace V:0, I:18 338 ltrace(1) : tracer les appels de bibliothèque
xtrace V:0, I:0 353 xtrace(1) : tracer la communication entre un client X11 et le serveur
powertop V:10, I:197 650 powertop(1) : information concernant la puissance électrique utilisée
cron V:853, I:996 220 faire tourner des processus en arrière plan selon un calendrier depuis le démon cron(8)
anacron V:374, I:455 91 ordonnanceur de type cron pour les systèmes qui ne tournent pas 24 heures sur 24
at V:126, I:205 159 at(1) ou batch(1) : lancer un travail à une heure déterminée ou en dessous d’un niveau de charge donné

[Astuce] Astuce

Le paquet procps fournit des fonctions très basiques de surveillance, de contrôle et de lancement des activités du programme. Vous devriez toutes les apprendre.

Il existe plusieurs manières de répéter une boucle de commande entre des fichiers correspondant à une condition, par exemple, correspondant au motif « glob » « *.ext ».

for x in *.ext; do if [ -f "$x"]; then command "$x" ; fi; done
  • combinaison de find(1) et de xargs(1) :

find . -type f -maxdepth 1 -name '*.ext' -print0 | xargs -0 -n 1 command
  • find(1) avec l’option « -exec » avec une commande :

find . -type f -maxdepth 1 -name '*.ext' -exec command '{}' \;
  • find(1) avec l’option « -exec » avec un court script de l’interpréteur :

find . -type f -maxdepth 1 -name '*.ext' -exec sh -c "command '{}' && echo 'successful'" \;

Les exemple ci-dessus ont été écrits afin d’assurer une prise en compte correcte de noms de fichiers étranges tels que ceux qui comportent des espaces. Consultez Section 10.1.5, « Idiomes pour la sélection de fichiers » pour une utilisation avancée de find(1).

Pour l'interface en ligne de commande (CLI), le premier programme trouvé dans les répertoires spécifiés dans la variable d'environnement $PATH, et dont le nom correspond, est exécuté. Voir Section 1.5.3, « La variable « $PATH » »

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

Par exemple, le fichier chromium.desktop définit les attributs pour le "Navigateur Web Chromium" tel que "Name" pour le nom du programme, "Exec" pour le chemin et les paramètres d'exécution du programme, "Icon" pour l'icône utilisée, etc. (voir la Spécification d'Entrée de fichier Desktop) comme suit :

[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

Ceci est une description extrêmement simplifiée. Les fichiers *.desktop sont analysés comme suit:

L'environnement de bureau définit les variables d'environnement $XDG_DATA_HOME et $XDG_DATA_DIR. Par exemple, sous GNOME 3 :

  • « $XDG_DATA_HOME » n'est pas paramétré. (La valeur par défaut de « $HOME/.local/share » est utilisée.)

  • « $XDG_DATA_DIRS » est paramétré à « /usr/share/gnome:/usr/local/share/:/usr/share/ ».

Les répertoires de base (voir Spécification du répertoire de base XDG et les répertoires des « applications » sont donc les suivants :

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

Les fichiers *.desktop sont parcourus dans ces répertoires applications dans cet ordre.

[Astuce] Astuce

Une entrée de menu « graphique » personnalisée peut être créée en ajoutant un fichier « *.desktop » dans le dossier « $HOME/.local/share/applications/ ».

[Astuce] Astuce

De la même façon, si un fichier « *.desktop » est créé dans le répertoire « autostart » dans ces répertoires de base, le programme spécifié dans le fichier « *.desktop » est exécuté automatiquement lorsque l'environnement de bureau est démarré. Consultez la Spécification de démarrage automatique d'applications.;

[Astuce] Astuce

De la même façon, si un fichier « *.desktop » est créé dans le répertoire « $HOME/Desktop » et que l'environnement de bureau est configuré afin de prendre en charge l'exécution depuis une icône de bureau, le programme qui y est spécifié est exécuté lorsqu'on clique sur l'icône. Veuillez noter que le nom du répertoire « $HOME/Desktop » est dépendant de la localisation. Consultez xdg-user-dirs-update(1).

Certains programmes lancent automatiquement d’autres programmes. Voici des points-clés pour la personnalisation de ce processus :

[Astuce] Astuce

update-mime(8) met à jour le fichier ≤ /etc/mailcap » en utilisant le fichier « /etc/mailcap.order » (consultez mailcap.order(5)).

[Astuce] Astuce

Le paquet debianutils fournit sensible-browser(1), sensible-editor(1), et sensible-pager(1) qui prennent des décisions raisonnables concernant l’éditeur, le visualisateur, le navigateur à appeler respectivement. Je vous recommande de lire ces scripts de l’interpréteur de commandes.

[Astuce] Astuce

In order to run a console application such as mutt under GUI as your preferred application, you should create an GUI application as following and set "/usr/local/bin/mutt-term" as your preferred application to be started as described.

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

GUI application can be executed easily under specific environment variables if the program for "Exec" in its corresponding *.desktop file doesn't specify the full execution path. You can enable non-English keyboard input to kitty using an input method framework ibus or fcitx5 by installing required input method packages and creating a shell script "/usr/local/bin/kitty" as follows.

# cat /usr/local/bin/kitty <<EOF
#!/bin/sh
GLFW_IM_MODULE=ibus exec /usr/bin/kitty "\$@"
EOF
# chmod 755 /usr/local/bin/kitty

This kitty script can alternatively be stored in "~/bin/" or "~/.local/bin/" directories as long as they are defined earlier than "/usr/bin/" in "$PATH".

Utilisez cron(8) pour planifier des tâches qui s’exécutent régulièrement. Consultez crontab(1) et crontab(5).

Vous pouvez planifier le lancement des processus en tant qu’utilisateur normal, par exemple toto en créant un fichier crontab(5) file comme « /var/spool/cron/crontabs/toto » avec la commande « crontab -e ».

Voici un exemple de fichier crontab(5).

# 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
[Astuce] Astuce

Sur un système qui ne tourne pas en permanence, installez le paquet anacron afin de planifier les tâches périodiques à des intervalles particulier dès que le temps de fonctionnement « uptime » de la machine le permet. Consultez anacron(8) et anacrontab(5).

[Astuce] Astuce

Vous pouvez lancer périodiquement les scripts de maintenance planifiée du système, depuis le compte de l’administrateur en les plaçant dans « /etc/cron.hourly/ », « /etc/cron.daily/ », « /etc/cron.weekly/ » ou « /etc/cron.monthly/ ». L"échéancier d’exécution de ces scripts peut être personnalisé dans « /etc/crontab » et « /etc/anacrontab ».

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

[Astuce] Astuce

Depuis un terminal SSH, etc., vous pouvez utiliser la fonctionnalité Alt-SysRq en écrivant vers « /proc/sysrq-trigger ». Par exemple;, « echo s > /proc/sysrq-trigger; echo u > /proc/sysrq-trigger » depuis l’invite de l’interpréteur de commandes de l’administrateur syncs (synchronise) et umount (démonte) tous les systèmes de fichiers montés.

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)

Bien que l'essentiel de la configuration du matériel puisse être gérée au moyen des outils graphiques qui accompagnent les environnements de bureau graphiques modernes comme GNOME ou KDE, c’est une bonne idée de connaître certaines méthodes de base permettant de le configurer.


Ici, ACPI est une infrastructure de gestion de l’alimentation électrique du système plus récente qu’APM.

[Astuce] Astuce

L’ajustement de la fréquence d’horloge des processeurs modernes est gérée par des modules du noyaux tels que acpi_cpufreq.

Ce qui suit permet de définir l’heure du système et du matériel à MM/DD hh:mm, CCYY :

# date MMDDhhmmCCYY
# hwclock --utc --systohc
# hwclock --show

Sur un système Debian, l’heure est normalement affichée en heure locale mais l’heure système et matérielle utilisent habituellement l’heure TUC(GMT).

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

La commande suivante relance la configuration du fuseau horaire utilisé par le système Debian.

# dpkg-reconfigure tzdata

Si vous désirez ajuster l’heure de votre système par l’intermédiaire du réseau, vous pouvez envisager l’utilisation du service NTP avec un paquet tel que ntp, ntpdate ou chrony.

[Astuce] Astuce

Sous systemd, utilisez plutôt systemd-timesyncdpour la synchronisation avec l'heure du réseau. Voir systemd-timesyncd(8).

Consultez ce qui suit.

[Astuce] Astuce

ntptrace(8) du paquet ntp peut suivre la trace d’une chaîne de serveurs NTP jusqu’à la source primaire.

Les pilotes de périphériques des cartes sons pour les versions actuelles de Linux sont fournies par Advanced Linux Sound Architecture (ALSA). ALSA fournit un mode d’émulation du système précédent Open Sound System (OSS) pour des raisons de compatibilité.

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.

Il y a habituellement un moteur de son commun pour chacun des environnements de bureau les plus courants. Chaque moteur de son utilisé par l’application peut choisir de se connecter à un serveur de son différent.

[Astuce] Astuce

Utilisez « cat /dev/urandom > /dev/audio » ou speaker-test(1) pour tester les hauts-parleurs (^C pour arrêter).

[Astuce] Astuce

Si vous n’arrivez pas à obtenir de sons, il est possible que votre haut-parleur soit connecté à une sortie muette (« muted »). Les systèmes de son modernes ont de nombreuses sorties. alsamixer(1) du paquet alsa-utils est pratique pour configurer les paramètres de volume et de coupure son


Une mauvaise maintenance du système peut rendre votre système vulnérable à une attaque externe.

Pour la vérification de la sécurité et de l’intégrité du système, vous pouvez démarrer avec ce qui suit :


Voici un script simple pour rechercher des fichiers typiques ayant des permissions incorrectes d’écriture pour tout le monde.

# find / -perm 777 -a \! -type s -a \! -type l -a \! \( -type d -a -perm 1777 \)
[Attention] Attention

Comme le paquet debsums utilise des sommes de contrôle MD5 enregistrées de manière statique, on ne peut pas lui faire entièrement confiance comme outil d’audit de la sécurité envers des attaques malveillantes.

Démarrer votre système avec un CD autonome de Linux ou avec un CD de l’installateur debian en mode secours (rescue) vous facilite la reconfiguration de l’enregistrement des données sur votre disque de démarrage.

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.

Bien que fdisk(8) ait été considéré comme un standard pour la configuration de la partition du disque dur, il mérite une certaine attention. « Données de partition du disque », « table de partition » et « Étiquette de disque » sont tous des synonymes.

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.

Alors que fdisk(8) a été l’outil standard de partitionnement de disque, parted(8) le remplace maintenant.


[Attention] Attention

Bien que parted(8) prétend pouvoir créer et redimensionner aussi les systèmes de fichiers, il est plus sûr de toucher à ces choses-là en utilisant des outils spécialisés et bien maintenus tels que mkfs(8) (mkfs.msdos(8), mkfs.ext2(8), mkfs.ext3(8), mkfs.ext4(8), …) et resize2fs(8).

[Note] Note

De manière à passer de GPT à MBR, il vous faut d’abord effacer les premiers blocs du disque directement (consultez Section 9.8.6, « Effacer le contenu d’un fichier ») et utiliser « parted /dev/sdx mklabel gpt » ou « parted /dev/sdx mklabel msdos » afin de le mettre en place. Vous remarquerez que « msdos » est utilisé ici pour MBR.

LVM2 est un gestionnaire de volume logique pour le noyau Linux. Avec LVM2, les partitions peuvent être créées sur des volumes logiques plutôt que sur des disques durs physiques.

LVM requiert ce qui suit :

  • le support « device-mapper » dans le noyau Linux (présent par défaut sur les noyaux Debian)

  • La bibliothèque de support du « device-mapper » en espace utilisateur (du paquet libdevmapper*)

  • le paquet des outils LVM2 en espace utilisateur (lvm2)

Démarrez l’apprentissage de LVM2 par la lecture des pages de manuel suivantes :

  • lvm(8): les bases du mécanisme de LVM2 (liste de toutes les commandes LVM2) 

  • lvm.conf(5): le fichier de configuration pour LVM2 

  • lvs(8): information sur les rapports relatifs aux volumes logiques 

  • vgs(8): information sur les rapports relatifs aux groupes de volumes

  • pvs(8): information sur les rapports relatifs aux volumes physiques.

Pour le système de fichiers ext4, le paquet e2fsprogs fournit les éléments suivants :

  • mkfs.ext4(8) pour créer un nouveau système de fichiers ext4

  • fsck.ext4(8) pour vérifier et réparer un système de fichiers ext4 existant

  • tune2fs(8) pour configurer le superbloc d’un système de fichiers ext4

  • debugfs(8) pour un débogage interactif du système de fichiers ext4. (Il possède la commande undel permettant de récupérer des fichiers effacés.)

Les commandes mkfs(8) et fsck(8) font partie du paquet e2fsprogs en tant que frontal à de nombreux programmes dépendant du système de fichiers (mkfs.fstype etfsck.fstype). Pour le système de fichiers ext4, il y a mkfs.ext4(8) et fsck.ext4(8) (ils sont liés par un lié symboliquement à mke2fs(8) ete2fsck(8)).

Des commandes semblables sont disponibles pour chaque système de fichiers pris en charge par Linux.


[Astuce] Astuce

Le système de fichiers ext4 est le système de fichiers par défaut pour les systèmes Linux. Son utilisation est fortement recommandée, sauf cas spécifiques.

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.

Certains outils permettent l’accès au système de fichiers sans prise en charge par le noyau Linux (consultez Section 9.8.2, « Manipulation des fichiers sans monter le disque »).

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.

Vous pouvez surveiller et enregistrer les disques durs conformes à SMART à l’aide du démon smartd(8).

  1. Activez la fonctionnalité SMART dans le BIOS.

  2. Installez le paquet smartmontools.

  3. Identifiez vos disques durs en en affichant la liste avec df(1).

    • Supposons que le disque dur à surveiller soit « /dev/hda ».

  4. Contrôlez la sortie de « smartctl -a /dev/hda » pour voir si la fonctionnalité SMART est effectivement activée.

    • Si elle ne l’est pas, activez-la avec « smartctl -s on -a /dev/hda ».

  5. Autorisez le fonctionnement du démon smartd(8) par l’action suivante :

    • décommentez « start_smartd=yes » dans le fichier « /etc/default/smartmontools » ;

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

[Astuce] Astuce

Le démon smartd(8) peut être personnalisé par l’intermédiaire du fichier /etc/smartd.conf y compris pour la manière d’être informé des avertissements.

Les partitions créées sur le gestionnaire de volumes logiques (LVM) (« Logical Volume Manager ») (fonctionnalité de Linux) au moment de l’installation peuvent être facilement redimensionnées en y concaténant des extensions (« extents ») ou en en tronquant les extensions sur plusieurs périphériques de stockage sans reconfiguration majeure du système.

If you have usable space in another partition (e.g., "/path/to/empty" and "/path/to/work"), you can create a directory in it and stack that on to an old directory (e.g., "/path/to/old") where you need space using the OverlayFS for Linux kernel 3.18 or newer (Debian Stretch 9.0 or newer).

$ sudo mount -t overlay overlay \
  -olowerdir=/path/to/old-dir,upperdir=/path/to/empty,workdir=/path/to/work

Here, "/path/to/empty" and "/path/to/work" should be on the RW-enabled partition to write on "/path/to/old".

Nous discutons ici des manipulations sur l’image disque.

Le fichier image du disque, « disk.img » d’un périphérique non monté, par exemple, le second périphérique SCSI ou Serial ATA « /dev/sdb » peut être créé en utilisant cp(1) ou dd(1) comme suit :

# cp /dev/sdb disk.img
# dd if=/dev/sdb of=disk.img

L’image disque du master boot record (MBR) (secteur principal d’amorçage) (consultez Section 9.6.2, « Configuration de la partition du disque ») qui se trouve sur le premier secteur du disque primaire IDE peut être faite en utilisant dd(1) comme suit :

# 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 » : MBR avec la table des partitions

  • « mbr-nopart.img » : MBR sans la table des partitions

  • « mbr-part.img » : table de partition du MBR seul

Si vous avez un périphérique SCSI ou Serial ATA comme disque d’amorçage, remplacez « /dev/hda » avec « /dev/sda ».

Si vous réalisez une image d’une partition du disque d’origine, remplacez « /dev/hda » par « /dev/hda1 », etc.

L’image disque « partition.img », qui contient une partition image unique, peut être monté et démonté en utilisant le périphérique de rebouclage (loop device) de la manière suivante :

# 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

Cela peut être simplifié de la manière suivante :

# mkdir -p /mnt/loop0
# mount -t auto -o loop partition.img /mnt/loop0
...hack...hack...hack
# umount partition.img

Chaque partition de l’image disque « disk.img » contenant plusieurs partitions peut être montée en utilisant le périphérique de rebouclage (loop device). Étant donné que le périphérique de rebouclage ne gère pas, par défaut, les partitions, il faut le réinitialiser de la manière suivante :

# 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

Maintenant, le périphérique de rebouclage peut gérer jusqu’à 16 partitions.

# 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

En remplacement, des effets similaires peuvent être obtenus en utilisant les périphériques device mapper créés par kpartx(8) du paquet kpartx de la manière suivante :

# 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
[Note] Note

Vous pouvez monter une partition unique d’une telle image de disque avec le périphérique de rebouclage en utilisant un décalage pour sauter le MBR ou autre. Mais c’est susceptible d’induire des erreurs.

Le fichier image du disque vide « disk.img », qui pourra s’étendre jusqu’à 5Gio peut être fait en utilisant dd(1) comme suit :

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

Vous pouvez créer un système de fichiers ext4 sur cette image disque « disk.img » en utilisant le périphérique de rebouclage (loop device) de la manière suivante :

# 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

Pour « disk.img », sa taille de fichier est de 5.0 Gio et son utilisation disque est uniquement de 83Mio. Cette discordance est possible car ext4 sait maintenir un fichier creux (sparse).

[Astuce] Astuce

L’utilisation réelle sur le disque du fichier creux croît au fur et à mesure qu’on y écrit des données .

En utilisant des opérations similaires sur les périphériques créés par loop device ou les périphériques device mapper comme dans Section 9.7.3, « Monter le fichier image du disque », vous pouvez partitionner cette image disque « disk.img » en utilisant parted(8) ou fdisk(8), et y créer un système de fichiers en utilisant mkfs.ext4(8), mkswap(8), etc.

On peut faire le fichier image ISO9660, « cd.iso », depuis l’arborescence de répertoire source située à « répertoire_source », en utilisant genisoimage(1) fourni parcdrkit de la manière suivante :

#  genisoimage -r -J -T -V volume_id -o cd.iso source_directory

De la même manière, on peut créer le fichier image ISO9660 amorçable « cdboot.iso » depuis une arborescence comme celle de debian-installer située en « source_directory », de la manière suivante :

#  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

Ici, le chargeur d’amorçage Isolinux (consultez Section 3.1.2, « Étage 2 : le chargeur initial ») est utilisé pour l’amorçage.

Vous pouvez calculer la valeur de la somme md5 (md5sum) et construire des image ISO9660 directement depuis un lecteur de CD-ROM de la manière suivante :

$ 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
[Avertissement] Avertissement

Vous devrez prendre garde d’éviter le bogue de lecture anticipée du système de fichiers ISO9660 de Linux comme ci-dessus afin d’obtenir les résultats corrects.

Nous allons ici discuter de la manipulation directe des données binaires sur le support d’enregistrement.

Il y a des outils pour la récupération des données et l’analyse par autopsie.


[Astuce] Astuce

Vous pouvez annuler l'effacement de fichiers sur un système de fichiers ext2 en utilisant les commandes list_deleted_inodes et undel de debugfs(8) dans le paquet e2fsprogs.

Avec un accès physique à votre PC, n’importe qui peut facilement obtenir les privilèges de l’administrateur et accéder à tous les fichiers de votre PC (consultez Section 4.6.4, « sécuriser le mot de passe de l’administrateur »). Cela signifie qu’un système avec un mot de passe de connexion ne permet pas de sécuriser vos données personnelles ou sensibles en cas de vol de votre PC. Vous devez déployer des technologies de chiffrements des données pour assurer cette protection. Bien que GNU privacy guard (consultez Section 10.3, « Infrastructure de sécurité des données ») puisse chiffrer des fichiers, il demande quelques efforts de la part de l’utilisateur.

Dm-crypt facilitates automatic data encryption via native Linux kernel modules with minimal user efforts using device-mapper.


[Attention] Attention

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

[Note] Note

Le système Debian dans son ensemble peut être installé sur un disque chiffré par l’installateur debian (lenny ou plus récent) en utilisant dm-crypt/LUKS et initramfs.

[Astuce] Astuce

Consultez Section 10.3, « Infrastructure de sécurité des données » pour un utilitaire de chiffrement de l’espace utilisateur : GNU Privacy Guard.

Vous pouvez chiffrer le contenu des périphériques de masse amovible, par exemple, une clé USB sur « /dev/sdx » en utilisant dm-crypt/LUKS. Il suffit de le formater de la manière suivante :

# 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 Section 10.1.7, « Périphériques d’enregistrement amovibles ») 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 Section 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 distribue des noyaux Linux modulaires sous forme de paquets pour les architectures prises en compte.

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

Debian a sa propre manière de compiler le noyau et les modules associés.


Si vous utilisez un initrd dans Section 3.1.2, « Étage 2 : le chargeur initial », veuillez lire les informations correspondantes dans initramfs-tools(8), update-initramfs(8), mkinitramfs(8) et initramfs.conf(5).

[Avertissement] Avertissement

Ne mettez pas de liens symboliques vers le répertoire de l’arborescence des source (par exemple « /usr/src/linux* ») depuis « /usr/include/linux » et « /usr/include/asm » lors de la compilation des sources du noyau de Linux. (Certains documents périmés le suggèrent).

[Note] Note

Lors de la compilation du dernier noyau de Linux sous un système Debian stable, l’utilisation des derniers outils rétroportés depuis la distribution Debian unstable peuvent être nécessaires.

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.

Le gestionnaire de modules dynamique du noyau (« dynamic kernel module support (DKMS) » est une nouvelle architecture indépendante de la distribution conçue pour permettre la mise à jour de modules individuels du noyau sans modifier l’ensemble du noyau. Cela est utilisé pour la maintenance de modules hors arborescence. Cela rend aussi très facile la reconstruction des modules après la mise à niveau des noyaux.

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.

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)

    • firmware-linux-* (non-free-firmware)

    • *-firmware (non-free-firmware)

    • intel-microcode (non-free-firmware)

    • amd64-microcode (non-free-firmware)

  • 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

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 Section 2.1.4, « Bases concernant l’archive Debian ».

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.

L’utilisation d’un système virtualisé permet de faire tourner simultanément plusieurs instances du système sur une plateforme unique.

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 Section 4.7.4, « Linux security features » and it is the backend technology of Section 7.6, « Sandbox ».

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

Tableau 9.27. Liste des outils de virtualisation

paquet popcon taille description
schroot V:6, I:8 2508 outil spécialisé pour l’exécution d’un paquet binaire de Debian dans un chroot
sbuild V:1, I:4 242 outil pour construire des paquets binaires de Debian depuis les sources Debian
debootstrap V:5, I:59 279 amorcer un système Debian de base (écrit en sh)
cdebootstrap V:0, I:2 111 amorcer un système Debian (écrit en C)
virt-manager V:11, I:42 2296 Gestionnaire de machine virtuelle : application du gestionnaire de bureau pour la gestion des machines virtuelles
libvirt-clients V:43, I:62 1311 programmes pour la bibliothèque libvirt
games-emulator I:0 26 games-emulator: Debian's emulators for games
bochs V:0, I:1 6956 Bochs : émulateur PC IA-32
qemu I:25 97 QEMU : émulateur de processeur générique rapide
qemu-system I:21 59 QEMU : binaires pour l’émulation d’un système complet
qemu-user V:1, I:8 100502 QEMU : binaires pour l’émulation en mode utilisateur
qemu-utils V:12, I:107 6875 QEMU : utilitaires
qemu-kvm V:2, I:19 107 KVM : virtualisation complète sur les plateformes x86 ayant une virtualisation assistée par le matériel
virtualbox V:9, I:11 126370 VirtualBox : solution de virtualisation x86 sur i386 et amd64
xen-tools V:0, I:3 727 outils pour gérer le serveur virtuel XEN de Debian
wine V:13, I:64 134 Wine : implémentation de l’API Windows (suite standard)
dosbox V:2, I:16 2671 DOSBox : émulateur x86 avec graphisme Tandy/Herc/CGA/EGA/VGA/SVGA, son et DOS
lxc V:9, I:13 25643 Conteneurs Linux outils de l’espace utilisateur
python3-venv I:60 6 venv for creating virtual python environments (system library)
python3-virtualenv V:9, I:53 406 virtualenv for creating isolated virtual python environments
pipx V:0, I:1 887 pipx for installing python applications in isolated environments

Consultez l’article de Wikipedia Comparaison de machines pour plateforme virtuelle pour une comparaison détaillée entre les différentes solutions de plateformes de virtualisation.

[Note] Note

Les noyaux par défaut de Debian prennent en charge KVM depuis lenny.

La virtualisation met en œuvre plusieurs étapes :

Pour le fichier image disque brut, consultez Section 8.1, « Les paramètres linguistiques (« locale ») ».

Pour d’autres fichiers d’images disques virtuels, vous pouvez utiliser qemu-nbd(8) pour les exporter en utilisant le protocole network block device et en les montant à l’aide du module nbd du noyau.

qemu-nbd(8) gère les formats de disques pris en compte par QEMU : QEMU gère les formats de disques suivants  raw, qcow2, qcow, vmdk, vdi, bochs, cow (mode utilisateur de Linux copy-on-write), parallels, dmg, cloop, vpc, vvfat (VFAT virtuelle) et host_device.

Le network block device peut gérer des partitions de la même manière que le périphérique de rebouclage (« loop device » (consultez Section 9.7.3, « Monter le fichier image du disque »). Vous pouvez monter la première partition de « disk.img » de la manière suivante :

# modprobe nbd max_part=16
# qemu-nbd -v -c /dev/nbd0 disk.img
...
# mkdir /mnt/part1
# mount /dev/nbd0p1 /mnt/part1
[Astuce] Astuce

Vous ne pouvez exporter que la première partition de « disk.img » en utilisant l’option « -P 1 » de qemu-nbd(8).

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.

[Attention] Attention

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

[Note] Note

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

[Note] Note

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.

[Astuce] Astuce

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 or KVM 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.

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

Virtual Machine Manager also known as virt-manager is a convenient GUI tool for managing KVM virtual machines via libvirt.

L’image disque virtuelle « virtdisk.qcow2 » qui contient un système Debian pour QEMU peut être créée en utilisant un CD minimal de debian-installer de la manière suivante :

$ 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
...
[Astuce] Astuce

Faire tourner d’autres distributions de GNU/Linux comme Ubuntu et Fedora sous une virtualisation est une bonne manière d’en étudier les astuces de configuration. D’autres systèmes d’exploitation propriétaires peuvent aussi tourner de manière agréable sous la virtualisation GNU/Linux.

See more tips at Debian wiki: SystemVirtualization.



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

[3] vim-pathogen was popular.