Kapitel 9. Tips för systemet

Innehållsförteckning

9.1. Tips för konsolen
9.1.1. Spela in skalaktiviteterna på ett rent sätt
9.1.2. Skärmprogrammet
9.1.3. Navigera runt i kataloger
9.1.4. Omslag för läslinje
9.1.5. Skanna källkodsträdet
9.2. Anpassa vim
9.2.1. Anpassa vim med interna funktioner
9.2.2. Anpassa vim med externa paket
9.3. Registrering och presentation av data
9.3.1. Loggdaemon
9.3.2. Logganalysator
9.3.3. Anpassad visning av textdata
9.3.4. Anpassad visning av tid och datum
9.3.5. Färgat skal eko
9.3.6. Färgade kommandon
9.3.7. Registrering av redaktörsaktiviteter för komplexa upprepningar
9.3.8. Inspelning av grafikbilden för en X-applikation
9.3.9. Registrering av ändringar i konfigurationsfiler
9.4. Övervakning, kontroll och start av programaktiviteter
9.4.1. Tidsinställning av en process
9.4.2. Prioritet för schemaläggning
9.4.3. Kommandot ps
9.4.4. Det högsta kommandot
9.4.5. Listning av filer som öppnats av en process
9.4.6. Spårning av programaktiviteter
9.4.7. Identifiering av processer som använder filer eller uttag
9.4.8. Upprepa ett kommando med ett konstant intervall
9.4.9. Upprepa ett kommando loopa över filer
9.4.10. Starta ett program från GUI
9.4.11. Anpassning av program som ska startas
9.4.12. Döda en process
9.4.13. Schemaläggning av uppgifter en gång
9.4.14. Regelbunden schemaläggning av arbetsuppgifter
9.4.15. Schemaläggning av uppgifter på evenemang
9.4.16. Alt-SysRq-tangenten
9.5. Tips för underhåll av systemet
9.5.1. Vem är med i systemet?
9.5.2. Varning för alla
9.5.3. Identifiering av hårdvara
9.5.4. Konfiguration av hårdvara
9.5.5. System- och hårdvarutid
9.5.6. Terminalens konfiguration
9.5.7. Den sunda infrastrukturen
9.5.8. Inaktivera skärmsläckaren
9.5.9. Avaktivera ljudsignaler
9.5.10. Använt minne
9.5.11. Kontroll av systemsäkerhet och -integritet
9.6. Tips om datalagring
9.6.1. Användning av diskutrymme
9.6.2. Konfiguration av diskpartitioner
9.6.3. Åtkomst till partition med hjälp av UUID
9.6.4. LVM2
9.6.5. Konfiguration av filsystem
9.6.6. Skapande av filsystem och kontroll av dess integritet
9.6.7. Optimering av filsystem med hjälp av mount-alternativ
9.6.8. Optimering av filsystemet via superblock
9.6.9. Optimering av hårddisken
9.6.10. Optimering av solid state-enhet
9.6.11. Använda SMART för att förutsäga hårddiskfel
9.6.12. Ange katalog för temporär lagring via $TMPDIR
9.6.13. Utökning av användbart lagringsutrymme via LVM
9.6.14. Utökning av användbart lagringsutrymme genom montering av ytterligare en partition
9.6.15. Utökning av användbart lagringsutrymme genom bind-mounting av en annan katalog
9.6.16. Utökning av användbart lagringsutrymme genom overlay-mounting av en annan katalog
9.6.17. Utökning av användbart lagringsutrymme med hjälp av symlänk
9.7. Diskavbildningen
9.7.1. Skapa en diskavbildningsfil
9.7.2. Skriva direkt till hårddisken
9.7.3. Montering av diskavbildningsfilen
9.7.4. Rengöring av en diskavbildningsfil
9.7.5. Skapa en tom diskavbildningsfil
9.7.6. Skapa ISO9660-bildfilen
9.7.7. Skriva direkt till CD/DVD-R/RW
9.7.8. Montering av ISO9660-bildfilen
9.8. De binära uppgifterna
9.8.1. Visa och redigera binära data
9.8.2. Manipulera filer utan att montera disk
9.8.3. Redundans av data
9.8.4. Återställning av datafiler och kriminalteknisk analys
9.8.5. Dela upp en stor fil i små filer
9.8.6. Rensning av filinnehåll
9.8.7. Dummy-filer
9.8.8. Radering av en hel hårddisk
9.8.9. Radera oanvänt område på en hårddisk
9.8.10. Återskapa raderade men fortfarande öppna filer
9.8.11. Söker alla hårda länkar
9.8.12. Osynlig förbrukning av diskutrymme
9.9. Tips om datakryptering
9.9.1. Kryptering av flyttbara diskar med dm-crypt/LUKS
9.9.2. Montering av krypterad disk med dm-crypt/LUKS
9.10. Kärnan
9.10.1. Kernel-parametrar
9.10.2. Kernel-rubriker
9.10.3. Kompilering av kärnan och relaterade moduler
9.10.4. Kompilering av kärnkällan: Rekommendation från Debian Kernel Team
9.10.5. Drivrutiner för hårdvara och firmware
9.11. Virtualiserat system
9.11.1. Virtualiserings- och emuleringsverktyg
9.11.2. Arbetsflöde för virtualisering
9.11.3. Montering av avbildningsfilen för den virtuella disken
9.11.4. Chroot-system
9.11.5. Flera skrivbordssystem

Här beskriver jag grundläggande tips för att konfigurera och hantera system, mestadels från konsolen.

Det finns några verktygsprogram som hjälper dig med konsolaktiviteterna.


En enkel användning av script(1) (se Avsnitt 1.4.9, ”Registrering av skalets aktiviteter”) för att registrera aktiviteten i skalet ger en fil med kontrolltecken. Detta kan undvikas genom att använda col(1) på följande sätt.

$ script
Script started, file is typescript

Gör vad som helst ... och tryck på Ctrl-D för att avsluta skriptet.

$ col -bx < typescript > cleanedfile
$ vim cleanedfile

Det finns alternativa metoder för att registrera skalaktiviteterna:

  • Använd tee (kan användas under startprocessen i initramfs):

    $ sh -i 2>&1 | tee typescript
  • Använd gnome-terminal med utökad radbuffert för scrollback.

  • Använd skärmen med "^A H" (se Avsnitt 9.1.2, ”Skärmprogrammet”) för att spela in konsolen.

  • Använd vim med ":terminal" för att gå till terminalläget. Använd "Ctrl-W N" för att gå från terminalläge till normalläge. Använd ":w typescript" för att skriva bufferten till en fil.

  • Använd emacs med "M-xshell", "M-x eshell" eller "M-xterm" för att komma till inspelningskonsolen. Använd "C-x C-w" för att skriva bufferten till en fil.

screen(1) gör inte bara att ett terminalfönster kan arbeta med flera processer, utan gör också att fjärrskalprocessen kan överleva avbrutna anslutningar. Här är ett typiskt användningsscenario för screen(1).

  1. Du loggar in på en fjärrmaskin.

  2. Du startar skärmen på en enda konsol.

  3. Du kör flera program i skärmfönster som skapats med ^A c ("Control-A" följt av "c").

  4. Du växlar mellan de olika fönstren med ^A n ("Control-A" följt av "n").

  5. Plötsligt måste du lämna din terminal, men du vill inte förlora ditt aktiva arbete genom att behålla anslutningen.

  6. Du kan ta bort skärmsessionen på valfritt sätt.

    • Brutalt koppla bort din nätverksanslutning

    • Skriv ^A d ("Control-A" följt av "d") och logga ut manuellt från fjärranslutningen

    • Skriv ^A DD ("Control-A" följt av "DD") för att få skärmen att lossna och logga ut dig

  7. Du loggar in igen på samma fjärrmaskin (även från en annan terminal).

  8. Du startar screen som "screen -r".

  9. screen återför på ett magiskt sätt alla tidigare skärmfönster med alla aktivt pågående program.

[Tips] Tips

Du kan spara anslutningsavgifter med screen för nätverksanslutningar med mätning, t.ex. uppringda och paketanslutna, eftersom du kan låta en process vara aktiv medan du är frånkopplad och sedan koppla upp den igen senare när du ansluter igen.

I en skärmsession skickas alla tangentbordsinmatningar till det aktuella fönstret utom kommandotangenttryckningen. Alla kommandotangenttryckningar på skärmen anges genom att skriva ^A ("Control-A") plus en enda tangent [plus eventuella parametrar]. Här är några som är viktiga att komma ihåg.


Se screen(1) för mer information.

Se tmux(1) för funktionaliteten hos det alternativa kommandot.

I Avsnitt 1.4.2, ”Anpassa bash” beskrivs 2 tips för att snabbt kunna navigera i kataloger: $CDPATH och mc.

Om du använder textfilterprogrammet fuzzy kan du slippa skriva den exakta sökvägen. För fzf, inkludera följande i ~/.bashrc.

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

Till exempel:

  • Du kan hoppa till en mycket djup underkatalog med minimal ansträngning. Du skriver först "cd **" och trycker på Tab. Sedan får du en fråga om möjliga sökvägar. Om du skriver in delsträngar av sökvägen, t.ex. s/d/b foo, begränsas antalet sökvägar. Du väljer den sökväg som ska användas av cd med hjälp av markör- och returtangenterna.

  • Du kan välja ett kommando från kommandohistoriken på ett mer effektivt sätt med minimal ansträngning. Du trycker på Ctrl-R vid kommandotolken. Då kommer du att uppmanas med kandidatkommandon. Om du skriver in delar av kommandosträngar, t.ex. vim d, begränsas antalet kandidater. Du väljer det som ska användas med markör- och returtangenterna.

När du har lärt dig grunderna i vim(1) via Avsnitt 1.4.8, ”Använda vim”, läs Bram Moolenaars"Seven habits of effective text editing (2000)" för att förstå hur vim ska användas.

Beteendet hos vim kan ändras avsevärt genom att aktivera dess interna funktioner genom Ex-mode-kommandon som "set ..." för att ställa in vim-alternativ.

Dessa Ex-mode-kommandon kan inkluderas i användarens vimrc-fil, traditionell "~/.vimrc" eller git-vänlig "~/.vim/vimrc". Här är ett mycket enkelt exempel [2]:

""" Generic baseline Vim and Neovim configuration (~/.vimrc)
"""   - For NeoVim, use "nvim -u ~/.vimrc [filename]"
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
let mapleader = ' '             " :h mapleader
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set nocompatible                " :h 'cp -- sensible (n)vim mode
syntax on                       " :h :syn-on
filetype plugin indent on       " :h :filetype-overview
set encoding=utf-8              " :h 'enc (default: latin1) -- sensible encoding
""" current vim option value can be verified by :set encoding?
set backspace=indent,eol,start  " :h 'bs (default: nobs) -- sensible BS
set statusline=%<%f%m%r%h%w%=%y[U+%04B]%2l/%2L=%P,%2c%V
set listchars=eol:¶,tab:⇄\ ,extends:↦,precedes:↤,nbsp:␣
set viminfo=!,'100,<5000,s100,h " :h 'vi -- bigger copy buffer etc.
""" Pick "colorscheme" from blue darkblue default delek desert elflord evening
""" habamax industry koehler lunaperche morning murphy pablo peachpuff quiet ron
""" shine slate torte zellner
colorscheme industry
""" don't pick "colorscheme" as "default" which may kill SpellUnderline settings
set scrolloff=5                 " :h 'scr -- show 5 lines around cursor
set laststatus=2                " :h 'ls (default 1)  k
""" boolean options can be unset by prefixing "no"
set ignorecase                  " :h 'ic
set smartcase                   " :h 'scs
set autoindent                  " :h 'ai
set smartindent                 " :h 'si
set nowrap                      " :h 'wrap
"set list                        " :h 'list (default nolist)
set noerrorbells                " :h 'eb
set novisualbell                " :h 'vb
set t_vb=                       " :h 't_vb -- termcap visual bell
set spell                       " :h 'spell
set spelllang=en_us,cjk         " :h 'spl -- english spell, ignore CJK
set clipboard=unnamedplus       " :h 'cb -- cut/copy/paste with other app
set hidden                      " :h 'hid
set autowrite                   " :h 'aw
set timeoutlen=300              " :h 'tm

Keymapen för vim kan ändras i användarens vimrc-fil. T.ex:

[Observera] Observera

Försök inte att ändra standardtangentbindningarna utan mycket goda skäl.

""" Popular mappings (imitating LazyVim etc.)
""" Window moves without using CTRL-W which is dangerous in INSERT mode
nnoremap <C-H> <C-W>h
nnoremap <C-J> <C-W>j
nnoremap <C-K> <C-W>k
silent! nnoremap <C-L> <C-W>l
""" Window resize
nnoremap <C-LEFT> <CMD>vertical resize -2<CR>
nnoremap <C-DOWN> <CMD>resize -2<CR>
nnoremap <C-UP> <CMD>resize +2<CR>
nnoremap <C-RIGHT> <CMD>vertical resize +2<CR>
""" Clear hlsearch with <ESC> (<C-L> is mapped as above)
nnoremap <ESC> <CMD>noh<CR><ESC>
inoremap <ESC> <CMD>noh<CR><ESC>
""" center after jump next
nnoremap n nzz
nnoremap N Nzz
""" fast "jk" to get out of INSERT mode (<ESC>)
inoremap  jk <CMD>noh<CR><ESC>
""" fast "<ESC><ESC>" to get out of TERM mode (CTRL-\ CTRL-N)
tnoremap <ESC><ESC> <C-\><C-N>
""" fast "jk" to get out of TERM mode (CTRL-\ CTRL-N)
tnoremap jk <C-\><C-N>
""" previous/next trouble/quickfix item
nnoremap [q <CMD>cprevious<CR>
nnoremap ]q <CMD>cnext<CR>
""" buffers
nnoremap <S-H> <CMD>bprevious<CR>
nnoremap <S-L> <CMD>bnext<CR>
nnoremap [b <CMD>bprevious<CR>
nnoremap ]b <CMD>bnext<CR>
""" Add undo break-points
inoremap  , ,<C-G>u
inoremap  . .<C-G>u
inoremap  ; ;<C-G>u
""" save file
inoremap <C-S> <CMD>w<CR><ESC>
xnoremap <C-S> <CMD>w<CR><ESC>
nnoremap <C-S> <CMD>w<CR><ESC>
snoremap <C-S> <CMD>w<CR><ESC>
""" better indenting
vnoremap < <gv
vnoremap > >gv
""" terminal (Somehow under Linux, <C-/> becomes <C-_> in Vim)
nnoremap <C-_> <CMD>terminal<CR>
"nnoremap <C-/> <CMD>terminal<CR>
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if ! has('nvim')
""" Toggle paste mode with <SPACE>p for Vim (no need for Nvim)
set pastetoggle=<leader>p
""" nvim default mappings for Vim.  See :h default-mappings in nvim
""" copy to EOL (no delete) like D for d
noremap Y y$
""" sets a new undo point before deleting
inoremap <C-U> <C-G>u<C-U>
inoremap <C-W> <C-G>u<C-W>
""" <C-L> is re-purposed as above
""" execute the previous macro recorded with Q
nnoremap Q @@
""" repeat last substitute and *KEEP* flags
nnoremap & :&&<CR>
""" search visual selected string for visual mode
xnoremap * y/\V<C-R>"<CR>
xnoremap # y?\V<C-R>"<CR>
endif

För att ovanstående tangentbindningar ska fungera korrekt måste terminalprogrammet konfigureras så att det genererar "ASCII DEL" för Backspace-tangenten och "Escape-sekvens" för Delete-tangenten.

Andra diverse konfigurationer kan ändras i användarens vimrc-fil. T.ex:

""" Use faster 'rg' (ripgrep package) for :grep
if executable("rg")
  set grepprg=rg\ --vimgrep\ --smart-case
  set grepformat=%f:%l:%c:%m
endif
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""" Retain last cursor position :h '"
augroup RetainLastCursorPosition
  autocmd!
  autocmd BufReadPost *
    \ if line("'\"") > 0 && line ("'\"") <= line("$") |
    \   exe "normal! g'\"" |
    \ endif
augroup END
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""" Force to use underline for spell check results
augroup SpellUnderline
  autocmd!
  autocmd ColorScheme * highlight SpellBad term=Underline gui=Undercurl
  autocmd ColorScheme * highlight SpellCap term=Underline gui=Undercurl
  autocmd ColorScheme * highlight SpellLocal term=Underline gui=Undercurl
  autocmd ColorScheme * highlight SpellRare term=Underline gui=Undercurl
augroup END
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""" highlight tailing spaces except when typing as red (set after colorscheme)
highlight TailingWhitespaces ctermbg=red guibg=red
""" \s\+     1 or more whitespace character: <Space> and <Tab>
""" \%#\@<!  Matches with zero width if the cursor position does NOT match.
match TailingWhitespaces /\s\+\%#\@<!$/

Intressanta externa plugin-paket kan hittas:

Plugin-paket i paketet vim-scripts kan aktiveras med hjälp av användarens vimrc-fil. T.ex:

packadd! secure-modelines
packadd! winmanager
" IDE-like UI for files and buffers with <space>w
nnoremap <leader>w         :WMToggle<CR>

Det nya inbyggda Vim-paketsystemet fungerar fint med "git" och "git submodule". Ett sådant exempel på konfiguration finns i mitt git-arkiv: dot-vim. Detta gör i huvudsak:

  • Genom att använda "git" och "git submodule" kan de senaste externa paketen, till exempel "namn", placeras i ~/.vim/pack/*/opt/name och liknande.

  • Genom att lägga till namnraden:packadd! i användarens vimrc-fil placeras dessa paket på runtimepath.

  • Vim laddar dessa paket på runtimepath under initialiseringen.

  • I slutet av initialiseringen uppdateras taggarna för de installerade dokumenten med "helptags ALL".

För mer information, starta vim med ”vim --startuptime vimstart.log” för att kontrollera den faktiska exekveringssekvensen och tiden som åtgår för varje steg.

Det är ganska förvirrande att se alltför många sätt[3] att hantera och ladda dessa externa paket till vim. Att kontrollera den ursprungliga informationen är det bästa botemedlet.


Även om pager-verktyg som more(1) och less(1) (se Avsnitt 1.4.5, ”Personsökaren”) och anpassade verktyg för markering och formatering (se Avsnitt 11.1.8, ”Markera och formatera data i klartext”) kan visa textdata på ett snyggt sätt, är generella editorer (se Avsnitt 1.4.6, ”Textredigeraren”) mest mångsidiga och anpassningsbara.

[Tips] Tips

För vim(1) och dess alias view(1) i personsökarläget aktiverar ":set hls" markerad sökning.

Shell-eko till de flesta moderna terminaler kan färgläggas med hjälp av ANSI escape code (se "/usr/share/doc/xterm/ctlseqs.txt.gz").

Försök till exempel med följande

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

Du kan spela in redigeringsaktiviteterna för komplexa upprepningar.

För Vim, enligt följande.

  • "qa": börja registrera skrivna tecken i ett namngivet register "a".

  • ... redaktörsverksamhet

  • "q": avsluta inspelning av skrivna tecken.

  • "@a": kör innehållet i register "a".

För Emacs, enligt följande.

  • "C-x (": Börja definiera ett tangentbordsmakro.

  • ... redaktörsverksamhet

  • "C-x )": Avsluta definitionen av ett tangentbordsmakro.

  • "C-x e": Utför ett tangentbordsmakro.

Programaktiviteter kan övervakas och styras med hjälp av specialiserade verktyg.


[Tips] Tips

Paketen procps innehåller grundläggande information om övervakning, kontroll och start av programaktiviteter. Du bör lära dig dem alla.

Det finns flera sätt att upprepa ett kommando som loopar över filer som uppfyller ett visst villkor, t.ex. att matcha globmönstret "*.ext".

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

find . -type f -maxdepth 1 -name '*.ext' -print0 | xargs -0 -n 1 command
  • find(1) med alternativet "-exec" med ett kommando:

find . -type f -maxdepth 1 -name '*.ext' -exec command '{}' \;
  • find(1) med alternativet "-exec" med ett kort shell-skript:

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

Exemplen ovan är skrivna för att säkerställa korrekt hantering av konstiga filnamn, t.ex. sådana som innehåller mellanslag. Se Avsnitt 10.1.5, ”Idiom för urval av filer” för mer avancerade användningsområden för find(1).

För kommandoradsgränssnittet (CLI) körs det första programmet med samma namn som finns i de kataloger som anges i miljövariabeln $PATH. Se Avsnitt 1.5.3, ”Variabeln "$PATH"”.

För det grafiska användargränssnittet (GUI) som följer freedesktop.org-standarderna tillhandahåller *.desktop-filerna i katalogen /usr/share/applications/ nödvändiga attribut för GUI-menyvisningen i varje program. Varje paket som är kompatibelt med Freedesktop.org:s xdg-menysystem installerar sina menydata som tillhandahålls av "*.desktop" under "/usr/share/applications/". Moderna skrivbordsmiljöer som följer Freedesktop.org-standarden använder dessa data för att generera sin meny med hjälp av paketet xdg-utils. Se "/usr/share/doc/xdg-utils/README".

Till exempel definierar filen chromium.desktop attribut för "Chromium Web Browser", såsom "Name" för programnamnet, "Exec" för sökvägen och argumenten för programkörning, "Icon" för den ikon som används, etc. (se Desktop Entry Specification) enligt följande:

[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

Detta är en alltför förenklad beskrivning. *.desktop-filerna skannas enligt följande.

Skrivbordsmiljön ställer in miljövariablerna $XDG_DATA_HOME och $XDG_DATA_DIR. Till exempel, under GNOME 3:

  • $XDG_DATA_HOME är inte inställt. (Standardvärdet $HOME/.local/share används)

  • $XDG_DATA_DIRS är inställd på /usr/share/gnome:/usr/local/share/:/usr/share/.

Baskatalogerna (se XDG Base Directory Specification) och applikationskatalogerna är alltså följande.

  • $HOME/.local/share/$HOME/.local/share/applications/

  • /usr/share/gnome//usr/share/gnome/tillämpningar/

  • /usr/local/share//usr/local/share/applications/

  • /usr/share//usr/share/applikationer/

*.desktop-filerna skannas i dessa programkataloger i denna ordning.

[Tips] Tips

En användaranpassad GUI-menypost kan skapas genom att lägga till en *.desktop-fil i katalogen $HOME/.local/share/applications/.

[Tips] Tips

"Exec=..."-raden tolkas inte av skalet. Använd kommandot env(1) om miljövariabler behöver ställas in.

[Tips] Tips

På samma sätt, om en *.desktop-fil skapas i autostartkatalogen under dessa baskataloger, körs det angivna programmet i *.desktop -filen automatiskt när skrivbordsmiljön startas. Se Autostart-specifikation för skrivbordsprogram.

[Tips] Tips

På samma sätt, om en *.desktop-fil skapas i katalogen $HOME/Desktop och Desktop-miljön är konfigurerad för att stödja funktionen för ikonstart på skrivbordet, körs det angivna programmet i den när du klickar på ikonen. Observera att det faktiska namnet på katalogen $HOME/Desktop är lokalt beroende. Se xdg-user-dirs-update(1).

Vissa program startar ett annat program automatiskt. Här följer kontrollpunkter för att anpassa denna process.

[Tips] Tips

update-mime(8) uppdaterar filen "/etc/mailcap" med hjälp av filen "/etc/mailcap.order" (se mailcap.order(5)).

[Tips] Tips

Paketet debianutils innehåller sensible-browser(1), sensible-editor(1) och sensible-pager(1) som fattar förnuftiga beslut om vilken editor, pager respektive webbläsare som ska anropas. Jag rekommenderar att du läser dessa skalskript.

[Tips] Tips

För att kunna köra en konsolapplikation som mutt under GUI som din föredragna applikation, bör du skapa en GUI-applikation enligt följande och ange "/usr/local/bin/mutt-term" som din föredragna applikation som ska startas enligt beskrivningen.

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

Använd cron(8) för att schemalägga uppgifter regelbundet. Se crontab(1) och crontab(5).

Du kan schemalägga att köra processer som en vanlig användare, t.ex. foo, genom att skapa en crontab(5)-fil som "/var/spool/cron/crontabs/foo" med kommandot "crontab -e".

Här är ett exempel på en crontab(5)-fil.

# use /usr/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
[Tips] Tips

Om systemet inte körs kontinuerligt kan du installera paketet anacron för att schemalägga periodiska kommandon med de angivna intervallen så nära maskinens drifttid som möjligt. Se anacron(8) och anacrontab(5).

[Tips] Tips

Skript för schemalagt systemunderhåll kan du köra regelbundet från root-kontot genom att placera dem i "/etc/cron.hourly/", "/etc/cron.daily/", "/etc/cron.weekly/" eller "/etc/cron.monthly/". Exekveringstiderna för dessa skript kan anpassas med "/etc/crontab" och "/etc/anacrontab".

Systemd har kapacitet på låg nivå för att schemalägga program som ska köras utan cron-daemon. Till exempel ställer /lib/systemd/system/apt-daily.timer och /lib/systemd/system/apt-daily.service in dagliga apt-hämtningsaktiviteter. Se systemd.timer(5) .

Genom att trycka på Alt-SysRq (PrtScr) följt av en knapptryckning återfår du kontrollen över systemet.


Se mer på Linux-kärnans användar- och administratörshandbok " Linux Magic System Request Key Hacks

[Tips] Tips

Från SSH-terminaler etc. kan du använda Alt-SysRq-funktionen genom att skriva till "/proc/sysrq-trigger". Till exempel, "echo s > /proc/sysrq-trigger; echo u > /proc/sysrq-trigger" från root shell-prompten synkroniseraroch umountaralla monterade filsystem.

Den aktuella (2021) Debian amd64 Linux-kärnan har /proc/sys/kernel/sysrq=438=0b110110110:

  • 2 = 0x2 - aktivera kontroll av konsolloggningsnivå (ON)

  • 4 = 0x4 - aktivera styrning av tangentbord (SAK, unraw) (ON)

  • 8 = 0x8 - aktivera felsökningsdumpar av processer etc. (OFF)

  • 16 = 0x10 - aktivera synkroniseringskommando (ON)

  • 32 = 0x20 - aktivera återmontering skrivskyddad (ON)

  • 64 = 0x40 - aktivera signalering av processer (term, kill, oom-kill) (OFF)

  • 128 = 0x80 - Tillåt omstart/avstängning (ON)

  • 256 = 0x100 - Tillåt nikning av alla RT-uppgifter (ON)

I det följande ställs system- och maskinvarutid in på MM/DD hh:mm, CCYY.

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

Tiderna visas normalt i lokal tid på Debian-systemet, men maskinvaru- och systemtiden använder vanligtvis UTC(GMT).

Om maskinvarans tid är inställd på UTC ska du ändra inställningen till "UTC=yes" i "/etc/default/rcS".

Följande omkonfigurerar den tidszon som används av Debiansystemet.

# dpkg-reconfigure tzdata

Om du vill uppdatera systemtiden via nätverket kan du överväga att använda NTP-tjänsten med paket som ntp, ntpdate och chrony.

[Tips] Tips

Under systemd ska du istället använda systemd-timesyncd för synkronisering av nätverkstiden. Se systemd-timesyncd(8).

Se följande.

[Tips] Tips

ntptrace(8) i ntp-paketet kan spåra en kedja av NTP-servrar tillbaka till den primära källan.

Drivrutiner för ljudkort för nuvarande Linux tillhandahålls av Advanced Linux Sound Architecture (ALSA). ALSA tillhandahåller emuleringsläge för tidigare Open Sound System (OSS) för kompatibilitet.

Programvarorna kan konfigureras så att de inte bara har direkt tillgång till ljudenheterna utan också till dem via ett standardiserat ljudserversystem. För närvarande används PulseAudio, JACK och PipeWire som ljudserversystem. Se Debians wikisida om ljud för den senaste situationen.

Det finns vanligtvis en gemensam ljudmotor för varje populär skrivbordsmiljö. Varje ljudmotor som används av programmet kan välja att ansluta till olika ljudservrar.

[Tips] Tips

Använd "cat /dev/urandom > /dev/audio" eller speaker-test(1) för att testa högtalaren (^C för att stoppa).

[Tips] Tips

Om du inte får något ljud kan högtalaren vara ansluten till en utgång som är avstängd. Moderna ljudsystem har många utgångar. alsamixer(1) i paketet alsa-utils är användbart för att konfigurera volym- och mute-inställningar.


Dåligt systemunderhåll kan utsätta ditt system för extern exploatering.

För att kontrollera systemets säkerhet och integritet bör du börja med följande.


Här är ett enkelt skript för att kontrollera om filbehörigheterna för skrivbara filer är felaktiga.

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

Eftersom debsums-paketet använder MD5-kontrollsummor som lagras lokalt, kan det inte fullt ut användas som ett verktyg för att kontrollera systemsäkerheten mot skadliga attacker.

Om du startar ditt system med Linux live-CD-skivor eller Debian-installer-CD-skivor i räddningsläge kan du enkelt konfigurera om datalagringen på din startenhet.

Du kan behöva umount(8) vissa enheter manuellt från kommandoraden innan du kör på dem om de monteras automatiskt av GUI-skrivbordssystemet.

För diskpartitionskonfiguration, även om fdisk(8) har ansetts vara standard, förtjänar parted(8) viss uppmärksamhet. "Diskpartitionsdata", "partitionstabell", "partitionskarta" och "disketikett" är synonymer.

Äldre datorer använder det klassiska MBR-schemat (Master Boot Record) för att lagra diskpartitioneringsdata i den första sektorn, dvs. LBA-sektorn 0 (512 byte).

Nya datorer med UEFI (Unified Extensible Firmware Interface), inklusive Intel-baserade Mac-datorer, använder GPT (GUID Partition Table) för att lagra diskpartitioneringsdata som inte finns i den första sektorn.

Även om fdisk(8) har varit standard för diskpartitioneringsverktyget håller parted(8) på att ersätta det.


[Observera] Observera

Även om parted(8) påstår sig kunna skapa och ändra storlek på filsystem är det säkrare att göra sådana saker med hjälp av specialverktyg som mkfs(8) (mkfs.msdos(8), mkfs.ext2(8), mkfs .ext3(8), mkfs .ext4(8), ...) och resize2fs(8).

[Notera] Notera

För att kunna växla mellan GPT och MBR måste du radera de första blocken av diskinnehållet direkt (se Avsnitt 9.8.6, ”Rensning av filinnehåll”) och använda "parted /dev/sdx mklabel gpt" eller "parted /dev/sdx mklabel msdos" för att ställa in det. Observera att "msdos" används här för MBR.

LVM2 är en logisk volymhanterare för Linux-kärnan. Med LVM2 kan diskpartitioner skapas på logiska volymer i stället för på de fysiska hårddiskarna.

LVM kräver följande.

  • stöd för enhetsmappare i Linux-kärnan (standard för Debian-kärnor)

  • stödbibliotek för enhet-mappare i användarutrymmet(libdevmapper*-paketet)

  • lVM2-verktygen i användarutrymmet(lvm2-paketet)

Börja med att lära dig LVM2 från följande manpages.

  • lvm(8): Grunderna i LVM2-mekanismen (lista över alla LVM2-kommandon)

  • lvm.conf(5): Konfigurationsfil för LVM2

  • lvs(8): Rapportera information om logiska volymer

  • vgs(8): Rapportera information om volymgrupper

  • pvs(8): Rapportera information om fysiska volymer

För ext4-filsystem tillhandahåller paketet e2fsprogs följande.

  • mkfs.ext4(8) för att skapa ett nytt ext4-filsystem

  • fsck.ext4(8) för att kontrollera och reparera ett befintligt ext4-filsystem

  • tune2fs(8) för att konfigurera superblock i ext4-filsystem

  • debugfs(8) för att felsöka ext4-filsystem interaktivt. (Det har kommandot undel för att återställa raderade filer)

Kommandona mkfs(8) och fsck(8) tillhandahålls av paketet e2fsprogs som front-ends till olika filsystemberoende program (mkfs.fstype och fsck.fstype). För ext4-filsystemet är det mkfs.ext4(8) och fsck.ext4(8) (de är symlänkade till mke2fs(8) och e2fsck(8)).

Liknande kommandon finns tillgängliga för alla filsystem som stöds av Linux.


[Tips] Tips

Ext4-filsystemet är standardfilsystemet för Linux-systemet och rekommenderas starkt att använda det om du inte har några specifika skäl att inte göra det.

Status för btrfs finns på Debian wiki on btrfs och kernel.org wiki on btrfs. Det förväntas bli nästa standardfilsystem efter ext4-filsystemet.

Vissa verktyg ger åtkomst till filsystem utan stöd från Linux-kärnan (se Avsnitt 9.8.2, ”Manipulera filer utan att montera disk”).

SSD-enheten (Solid State Drive) upptäcks automatiskt nu.

Minska onödiga diskåtkomster för att förhindra att disken slits ut genom att montera "tmpfs" på den flyktiga datasökvägen i /etc/fstab.

Du kan övervaka och logga din SMART-kompatibla hårddisk med hjälp av daemon smartd(8).

  1. Aktivera SMART-funktionen i BIOS.

  2. Installera paketet smartmontools.

  3. Identifiera dina hårddiskar genom att lista dem med df(1).

    • Låt oss anta att en hårddisk som ska övervakas heter "/dev/hda".

  4. Kontrollera utdata från "smartctl -a /dev/hda" för att se om SMART-funktionen faktiskt är aktiverad.

    • Om inte, aktivera den genom att "smartctl -s on -a /dev/hda".

  5. Aktivera smartd(8) daemon att köras genom att göra följande.

    • kommentera bort "start_smartd=yes" i filen "/etc/default/smartmontools".

    • starta om daemon smartd(8) med "sudo systemctl restart smartmontools".

[Tips] Tips

Smartd(8)-daemon kan anpassas med filen /etc/smartd.conf, bland annat hur man vill bli meddelad om varningar.

För partitioner som skapas med LVM (Logical Volume Manager) (Linux-funktion) vid installationstillfället kan storleken enkelt ändras genom att sammanlänka extenter till dem eller avkorta extenter från dem över flera lagringsenheter utan större omkonfigurering av systemet.

Om du har användbart utrymme i en annan partition (t.ex. "/path/to/empty" och "/path/to/work") kan du skapa en katalog i den och stapla den på en gammal katalog (t.ex. "/path/to/old") där du behöver utrymme med hjälp av OverlayFS för Linux-kärnan 3.18 eller nyare (Debian Stretch 9.0 eller nyare).

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

Här bör "/path/to/empty" och "/path/to/work" finnas på den RW-aktiverade partitionen för att skriva på "/path/to/old".

Här diskuterar vi manipuleringar av diskavbildningen.

Diskavbildningsfilen "disk.img" för en omonterad enhet, t.ex. den andra SCSI- eller seriella ATA-enheten "/dev/sdb", kan skapas med hjälp av cp(1) eller dd(1) på följande sätt.

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

Skivavbildningen av den traditionella datorns Master Boot Record (MBR) (se Avsnitt 9.6.2, ”Konfiguration av diskpartitioner”) som finns i den första sektorn på den primära IDE-disken kan skapas med dd(1) på följande sätt.

# 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 med partitionstabellen

  • "mbr-nopart.img": MBR utan partitionstabell

  • "mbr-part.img": Endast partitionstabellen för MBR

Om du har en SCSI- eller seriell ATA-enhet som startdiskett ersätter du "/dev/hda" med "/dev/sda".

Om du gör en avbildning av en diskpartition på originaldisken ersätter du "/dev/hda" med "/dev/hda1" osv.

Diskavbildningen "partition.img" som innehåller en enda partitionsavbildning kan monteras och avmonteras med hjälp av loop-enheten på följande sätt.

# losetup --show -f partition.img
/dev/loop0
# mkdir -p /mnt/loop0
# mount -t auto /dev/loop0 /mnt/loop0
...hack...hack...hack
# umount /dev/loop0
# losetup -d /dev/loop0

Detta kan förenklas på följande sätt.

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

Varje partition i diskavbildningen "disk.img" som innehåller flera partitioner kan monteras med hjälp av loop-enheten.

# losetup --show -f -P disk.img
/dev/loop0
# ls -l /dev/loop0*
brw-rw---- 1 root disk   7,  0 Apr  2 22:51 /dev/loop0
brw-rw---- 1 root disk 259, 12 Apr  2 22:51 /dev/loop0p1
brw-rw---- 1 root disk 259, 13 Apr  2 22:51 /dev/loop0p14
brw-rw---- 1 root disk 259, 14 Apr  2 22:51 /dev/loop0p15
# fdisk -l /dev/loop0
Disk /dev/loop0: 2 GiB, 2147483648 bytes, 4194304 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 6A1D9E28-C48C-2144-91F7-968B3CBC9BD1

Device         Start     End Sectors  Size Type
/dev/loop0p1  262144 4192255 3930112  1.9G Linux root (x86-64)
/dev/loop0p14   2048    8191    6144    3M BIOS boot
/dev/loop0p15   8192  262143  253952  124M EFI System

Partition table entries are not in disk order.
# mkdir -p /mnt/loop0p1
# mkdir -p /mnt/loop0p15
# mount -t auto /dev/loop0p1 /mnt/loop0p1
# mount -t auto /dev/loop0p15 /mnt/loop0p15
# mount |grep loop
/dev/loop0p1 on /mnt/loop0p1 type ext4 (rw,relatime)
/dev/loop0p15 on /mnt/loop0p15 type vfat (rw,relatime,fmask=0002,dmask=0002,allow_utime=0020,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro)
...hack...hack...hack
# umount /dev/loop0p1
# umount /dev/loop0p15
# losetup -d /dev/loop0

Alternativt kan liknande effekter åstadkommas genom att använda device mapper-enheter som skapats av kpartx(8) från kpartx-paketet enligt följande.

# kpartx -a -v disk.img
add map loop0p1 (253:0): 0 3930112 linear 7:0 262144
add map loop0p14 (253:1): 0 6144 linear 7:0 2048
add map loop0p15 (253:2): 0 253952 linear 7:0 8192
# fdisk -l /dev/loop0
Disk /dev/loop0: 2 GiB, 2147483648 bytes, 4194304 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 6A1D9E28-C48C-2144-91F7-968B3CBC9BD1

Device         Start     End Sectors  Size Type
/dev/loop0p1  262144 4192255 3930112  1.9G Linux root (x86-64)
/dev/loop0p14   2048    8191    6144    3M BIOS boot
/dev/loop0p15   8192  262143  253952  124M EFI System

Partition table entries are not in disk order.
# ls -l /dev/mapper/
total 0
crw------- 1 root root 10, 236 Apr  2 22:45 control
lrwxrwxrwx 1 root root       7 Apr  2 23:19 loop0p1 -> ../dm-0
lrwxrwxrwx 1 root root       7 Apr  2 23:19 loop0p14 -> ../dm-1
lrwxrwxrwx 1 root root       7 Apr  2 23:19 loop0p15 -> ../dm-2
# mkdir -p /mnt/loop0p1
# mkdir -p /mnt/loop0p15
# mount -t auto /dev/mapper/loop0p1 /mnt/loop0p1
# mount -t auto /dev/mapper/loop0p15 /mnt/loop0p15
# mount |grep loop
/dev/loop0p1 on /mnt/loop0p1 type ext4 (rw,relatime)
/dev/loop0p15 on /mnt/loop0p15 type vfat (rw,relatime,fmask=0002,dmask=0002,allow_utime=0020,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro)
...hack...hack...hack
# umount /dev/mapper/loop0p1
# umount /dev/mapper/loop0p15
# kpartx -d disk.img

Den tomma diskavbildningen "disk.img" som kan växa upp till 5GiB kan skapas med dd(1) på följande sätt.

$ dd bs=1 count=0 if=/dev/zero of=disk.img seek=5G

Istället för att använda dd(1) kan den specialiserade fallocate(8) användas här.

Du kan skapa ett ext4-filsystem på den här diskavbildningen "disk.img" med hjälp av loop-enheten på följande sätt.

# losetup --show -f disk.img
/dev/loop0
# mkfs.ext4 /dev/loop0
...hack...hack...hack
# losetup -d /dev/loop0
$ du  --apparent-size -h disk.img
5.0G  disk.img
$ du -h disk.img
83M disk.img

För "disk.img" är filstorleken 5,0 GiB och den faktiska diskanvändningen är bara 83MiB. Denna avvikelse är möjlig eftersom ext4 kan hålla glesa filer.

[Tips] Tips

Den faktiska diskanvändningen för sparse file växer med data som skrivs till den.

Genom att använda liknande åtgärder på enheter som skapats av loop-enheten eller enhetsmappningsenheterna som Avsnitt 9.7.3, ”Montering av diskavbildningsfilen” kan du partitionera diskavbildningen "disk.img" med hjälp av parted(8) eller fdisk(8) och skapa filsystem på den med hjälp av mkfs.ext4(8), mkswap(8), etc.

ISO9660-bildfilen, "cd.iso", från källkatalogträdet i "source_directory" kan skapas med hjälp av genisoimage(1) från cdrkit på följande sätt.

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

På samma sätt kan den startbara ISO9660-bildfilen, "cdboot.iso", skapas från debian-installer-liknande katalogträd i "source_directory" genom följande.

#  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

Här används Isolinux boot loader (se Avsnitt 3.1.2, ”Steg 2: startladdaren”) för uppstart.

Du kan beräkna md5sum-värdet och skapa ISO9660-bilden direkt från CD-ROM-enheten på följande sätt.

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

Du måste noggrant undvika ISO9660 filsystem read ahead bug i Linux enligt ovan för att få rätt resultat.

Här diskuterar vi direkta manipulationer av binärdata på lagringsmedia.

Med fysisk tillgång till din dator kan vem som helst enkelt få root-behörighet och komma åt alla filer på din dator (se Avsnitt 4.6.4, ”Säkra lösenordet för root”). Det innebär att ett system med inloggningslösenord inte kan skydda dina privata och känsliga data mot eventuell stöld av din dator. Du måste använda datakrypteringsteknik för att göra det. GNU privacy guard (se Avsnitt 10.3, ”Infrastruktur för datasäkerhet”) kan visserligen kryptera filer, men det kräver en del arbete av användaren.

Dm-crypt underlättar automatisk datakryptering via inbyggda Linux-kärnmoduler med minimal användarinsats med hjälp av device-mapper.


[Observera] Observera

Datakryptering kostar CPU-tid etc. Krypterad data blir oåtkomlig om lösenordet förloras. Vänligen väga dess fördelar och kostnader.

[Notera] Notera

Hela Debian-systemet kan installeras på en krypterad disk med debian-installer (lenny eller nyare) med hjälp av dm-crypt/LUKS och initramfs.

[Tips] Tips

Se Avsnitt 10.3, ”Infrastruktur för datasäkerhet” för verktyg för kryptering av användarutrymme: GNU Privacy Guard.

Du kan kryptera innehållet i flyttbara massmediaenheter, t.ex. ett USB-minne på "/dev/sdx", med hjälp av dm-crypt/LUKS. Du formaterar den helt enkelt enligt följande.

# 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

Sedan kan den monteras precis som en vanlig disk på "/media/användarnamn/disk_label", förutom att man måste fråga efter lösenordet (se Avsnitt 10.1.7, ”Flyttbar lagringsenhet”) i en modern skrivbordsmiljö med hjälp av udisks2-paketet. Skillnaden är att alla data som skrivs till den är krypterade. Lösenordsinmatningen kan automatiseras med hjälp av keyring (se Avsnitt 10.3.6, ”Nyckelring för lösenord”).

Alternativt kan du formatera media i ett annat filsystem, t.ex. ext4 med "mkfs.ext4 /dev/mapper/sdx1". Om btrfs används i stället måste paketet udisks2-btrfs installeras. För dessa filsystem kan filägande och behörigheter behöva konfigureras.

Debian distribuerar den modulariserade Linuxkärnan som paket för de arkitekturer som stöds.

Om du läser den här dokumentationen behöver du förmodligen inte kompilera Linux-kärnan själv.

Debian har sin egen metod för att kompilera kärnan och relaterade moduler.


Om du använder initrd i Avsnitt 3.1.2, ”Steg 2: startladdaren”, se till att läsa relaterad information i initramfs-tools(8), update-initramfs(8), mkinitramfs(8) och initramfs.conf(5).

[Varning] Varning

Lägg inte in symlinks till katalogerna i källträdet (t.ex. "/usr/src/linux*") från "/usr/include/linux" och "/usr/include/asm" när du kompilerar Linux-kärnkällan. (Vissa föråldrade dokument föreslår detta.)

[Notera] Notera

Vid kompilering av den senaste Linux-kärnan på Debian stable-systemet kan det vara nödvändigt att använda bakåtporterade senaste verktyg från Debian unstable.

module-assistant(8) (eller dess kortform m-a) hjälper användare att enkelt bygga och installera modulpaket för en eller flera anpassade kärnor.

DKMS (Dynamic Kernel Module Support) är ett nytt distributionsoberoende ramverk som gör det möjligt att uppgradera enskilda kernelmoduler utan att ändra hela kerneln. Detta används för underhåll av out-of-tree-moduler. Det gör det också mycket enkelt att bygga om moduler när man uppgraderar kärnan.

Maskinvarudrivrutinen är den kod som körs på målsystemets huvudprocessorer. De flesta maskinvarudrivrutiner finns nu tillgängliga som fri programvara och ingår i de normala Debian-kärnpaketen i main.

  • GPU-drivrutin

    • Intel GPU-drivrutin (main)

    • AMD/ATI GPU-drivrutin (main)

    • NVIDIA GPU-drivrutin (main för drivrutinen nouveau och non-free för binära drivrutiner som stöds av tillverkaren.)

Den fasta programvaran är den kod eller de data som laddas på den enhet som är kopplad till målsystemet (t.ex. CPU:ns mikrokod, renderingskod som körs på GPU, eller FPGA / CPLD, ...). Vissa paket med fast programvara är tillgängliga som fri programvara, men många paket för fast programvara är inte tillgängliga som fri programvara eftersom de innehåller binära data utan källa. Installation av dessa datapaket med fast programvara är nödvändig för att enheten ska fungera som förväntat.

  • Datapaket för fast programvara som innehåller data som laddats till det flyktiga minnet på målenheten.

    • firmware-linux-free (main)

    • firmware-linux-nonfree(icke-fri-firmware)

    • firmware-linux-*(icke-fri firmware)

    • *-firmware(icke-fri-firmware)

    • intel-mikrokod(icke-fri firmware)

    • amd64-mikrokod(icke-fri firmware)

  • Programpaket för uppdatering av fast programvara som uppdaterar data i det icke-flyktiga minnet på målenheten.

    • fwupd (main): Demon för uppdatering av fast programvara som hämtar data om fast programvara från Linux Vendor Firmware Service.

    • gnome-firmware (main): GTK-frontend för fwupd

    • plasma-discover-backend-fwupd (main): Qt-frontend för fwupd

Observera att åtkomst till icke-firmware-paket tillhandahålls av det officiella installationsmediet för att erbjuda en funktionell installationsupplevelse för användaren sedan Debian 12 Bookworm. Området för non-free programvaror beskrivs i Avsnitt 2.1.5, ”Grunderna i Debian-arkivet”.

Observera också att de data om fast programvara som hämtas av fwupd från Linux Vendor Firmware Service och laddas till den Linux-kärna som körs kan vara non-free.

Genom att använda ett virtualiserat system kan vi köra flera instanser av systemet samtidigt på en enda maskinvara.

Det finns flera olika plattformar för virtualiserings- och emuleringsverktyg.

  • Kompletta hårdvaruemuleringspaket, t.ex. de som installeras av metapaketet games-emulator

  • Mestadels emulering på CPU-nivå med vissa emuleringar av I/O-enheter, t.ex. QEMU

  • Mestadels virtualisering på CPU-nivå med vissa emuleringar av I/O-enheter, t.ex. Kernel-based Virtual Machine (KVM)

  • Containervirtualisering på OS-nivå med stöd på kärnnivå, t.ex. LXC (Linux Containers), Docker, systemd-nspawn(1), ...

  • Virtualisering av filsystemåtkomst på OS-nivå med åsidosättande av systembiblioteksanrop på filsökvägen, t.ex. chroot

  • Virtualisering av filsystemåtkomst på OS-nivå med systembiblioteksanrop som åsidosätter filägandet, t.ex. fakeroot

  • OS API-emulering som till exempel Wine

  • Virtualisering på tolkningsnivå med dess val av körbar fil och åsidosättande av körtidsbibliotek, t.ex. virtualenv och venv för Python

Containervirtualisering använder Avsnitt 4.7.5, ”Säkerhetsfunktioner i Linux” och är backend-tekniken för Avsnitt 7.7, ”Sandlåda”.

Här följer några paket som hjälper dig att konfigurera det virtualiserade systemet.

Tabell 9.27. Lista över virtualiseringsverktyg

paket popcon storlek beskrivning
coreutils V:897, I:999 18457 GNU core-verktyg som innehåller chroot(8)
systemd-container V:72, I:76 2264 systemd container/nspawn verktyg som innehåller systemd-nspawn(1)
schroot V:5, I:7 2627 specialiserat verktyg för att köra Debians binära paket i chroot
sbuild V:1, I:4 157 verktyg för att bygga binära Debian-paket från Debian-källor
debootstrap V:4, I:48 330 starta upp ett grundläggande Debian-system (skrivet i sh)
cdebootstrap V:0, I:1 114 bootstrappa ett Debian-system (skrivet i C)
cloud-image-utils V:1, I:15 66 verktyg för bildhantering i molnet
cloud-guest-utils V:2, I:18 71 verktyg för molngäster
virt-manager V:11, I:49 2310 Virtual Machine Manager: skrivbordsprogram för hantering av virtuella maskiner
libvirt-clients V:48, I:72 1154 program för libvirt-biblioteket
incus V:0, I:2 21 Incus: systembehållare och virtuell maskinhanterare (för Debian 13 "Trixie")
lxd V:0, I:0 55606 LXD: systembehållare och hantering av virtuella maskiner (för Debian 12 "Bookworm")
podman V:24, I:27 81828 podman: motor för att köra OCI-baserade behållare i Pods
podman-docker V:2, I:2 275 motor för att köra OCI-baserade containrar i Pods - wrapper för docker
docker.io V:45, I:47 95958 docker: Körprogram för Linux-containrar
games-emulator I:0 21 spel-emulator: Debians emulatorer för spel
bochs V:0, I:0 8180 Bochs: IA-32 PC-emulator
qemu-system I:23 80 QEMU: binärfiler för fullständig systememulering
qemu-user V:5, I:9 472779 QEMU: binärfiler för emulering i användarläge
qemu-utils V:13, I:110 12161 QEMU: verktyg
qemu-system-x86 V:53, I:94 67511 KVM: full virtualisering på x86-hårdvara med hårdvaruassisterad virtualisering
virtualbox V:4, I:5 154064 VirtualBox: lösning för x86-virtualisering på i386 och amd64
gnome-boxes V:1, I:7 6847 Lådor: Enkel GNOME-app för åtkomst till virtuella system
xen-tools V:0, I:1 719 verktyg för att hantera debian XEN virtuell server
wine V:13, I:57 204 Vin: Implementering av Windows API (standardpaket)
dosbox V:1, I:13 2697 DOSBox: x86-emulator med Tandy/Herc/CGA/EGA/VGA/SVGA-grafik, ljud och DOS
lxc V:9, I:12 1626 Linux-containrar verktyg för användarutrymme
python3-venv I:132 6 venv för att skapa virtuella pythonmiljöer (systembibliotek)
python3-virtualenv V:8, I:43 379 virtualenv för att skapa isolerade virtuella pythonmiljöer
pipx V:6, I:42 3613 pipx för installation av python-program i isolerade miljöer

Se Wikipedia-artikeln Comparison of platform virtual machines för en detaljerad jämförelse av olika lösningar för plattformsvirtualisering.

[Notera] Notera

Debians standardkärnor stöder KVM sedan Lenny.

Ett typiskt arbetsflöde för virtualisering omfattar flera steg.

För den råa diskavbildningsfilen, se Avsnitt 9.7, ”Diskavbildningen”.

För andra virtuella diskavbildningsfiler kan du använda qemu-nbd(8) för att exportera dem med hjälp av network block device protocol och montera dem med hjälp av nbd-kärnmodulen.

qemu-nbd(8) stöder diskformat som stöds av QEMU: raw, qcow2, qcow, vmdk, vdi, bochs, cow (Linux copy-on-write i användarläge), parallels, dmg, cloop, vpc, vvfat (virtuell VFAT) och host_device.

Nätverksblockenheten kan stödja partitioner på samma sätt som loop-enheten (se Avsnitt 9.7.3, ”Montering av diskavbildningsfilen”). Du kan montera den första partitionen på "disk.img" på följande sätt.

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

Du kan exportera endast den första partitionen i "disk.img" genom att använda alternativet "-P 1" i qemu-nbd(8).

Om du vill prova en ny Debian-miljö från en terminalkonsol rekommenderar jag att du använder chroot. Detta gör att du kan köra konsolprogram för Debian unstable och testing utan de vanliga risker som är förknippade med detta och utan att starta om. chroot(8) är det mest grundläggande sättet.

[Observera] Observera

Exemplen nedan förutsätter att både det överordnade systemet och chroot-systemet har samma amd64 CPU-arkitektur.

Även om du manuellt kan skapa en chroot(8)-miljö med hjälp av debootstrap(1), kräver det en del arbete.

Paketet sbuild för att bygga Debian-paket från källkod använder chroot-miljön som hanteras av paketet schroot. Det levereras med hjälpskriptet sbuild-createchroot(1). Låt oss lära oss hur det fungerar genom att köra det på följande sätt.

$ sudo mkdir -p /srv/chroot
$ sudo sbuild-createchroot -v --include=eatmydata,ccache unstable /srv/chroot/unstable-amd64-sbuild http://deb.debian.org/debian
 ...

Du ser hur debootstrap(8) fyller i systemdata för unstable miljö under "/srv/chroot/unstable-amd64-sbuild" för ett minimalt byggsystem.

Du kan logga in i den här miljön med hjälp av schroot(1).

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

Du ser hur ett systemskal som körs i en unstable miljö skapas.

[Notera] Notera

Filen "/usr/sbin/policy-rc.d", som alltid avslutas med 101, förhindrar att daemonprogram startas automatiskt i Debiansystemet. Se "/usr/share/doc/init-system-helpers/README.policy-rc.d.gz".

[Notera] Notera

Vissa program under chroot kan behöva tillgång till fler filer från det överordnade systemet för att fungera än vad sbuild-createchroot ger enligt ovan. Till exempel kan "/sys", "/etc/passwd", "/etc/group", "/var/run/utmp", "/var/log/wtmp", etc. behöva bind-monteras eller kopieras.

[Tips] Tips

Paketet sbuild hjälper till att konstruera ett chroot-system och bygger ett paket inuti chroot med hjälp av schroot som backend. Det är ett idealiskt system för att kontrollera byggberoenden. Se mer om sbuild på Debians wiki och exempel på sbuild-konfiguration i "Guide for Debian Maintainers".

[Tips] Tips

Kommandot systemd-nspawn(1) hjälper till att köra ett kommando eller operativsystem i en lättviktscontainer på liknande sätt som chroot. Det är mer kraftfullt eftersom det använder namnrymder för att helt virtualisera processträdet, IPC, värdnamn, domännamn och, valfritt, nätverks- och användardatabaser. Se systemd-nspawn.

Om du vill prova en ny GUI-skrivbordsmiljö för något operativsystem rekommenderar jag att du använder QEMU eller KVM på ett stable Debian-system för att köra flera skrivbordssystem på ett säkert sätt med hjälp av virtualisering. Dessa gör att du kan köra alla skrivbordsprogram, inklusive Debian unstable och testing, utan de vanliga risker som är förknippade med dem och utan att behöva starta om.

Eftersom ren QEMU är mycket långsam rekommenderas det att accelerera den med KVM när värdsystemet stöder det.

Administrerare av virtuella maskiner, även känd som virt-manager, är ett bekvämt grafiskt gränssnittsverktyg för hantering av KVM-virtuella maskiner via libvirt.

Den virtuella diskavbildningen "virtdisk.qcow2" som innehåller ett Debian-system för QEMU kan skapas med debian-installer: Små CD-skivor enligt följande.

$ wget https://cdimage.debian.org/debian-cd/5.0.3/amd64/iso-cd/debian-503-amd64-netinst.iso
$ qemu-img create -f qcow2 virtdisk.qcow2 5G
$ qemu -hda virtdisk.qcow2 -cdrom debian-503-amd64-netinst.iso -boot d -m 256
...
[Tips] Tips

Att köra andra GNU/Linux-distributioner som Ubuntu och Fedora under virtualisering är ett bra sätt att lära sig konfigurationstips. Andra proprietära operativsystem kan också köras snyggt under denna GNU/Linux-virtualisering.

Se fler tips på Debians wiki: SystemVirtualisering.



[2] Mer detaljerade exempel på anpassning:"Vim Galore","sensible.vim", ...

[3] vim-pathogen var populär.