Kapitel 9. Tips för systemet

# Kapitel 9. Tips för systemet

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

## 9.1. Tips för konsolen

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

Tabell 9.1. Lista över program för att stödja konsolaktiviteter

paket | popcon | storlek | beskrivning
--- | --- | --- | ---
`mc` | V:43, I:183 | 1590 | Se Avsnitt 1.3, ”Midnight Commander (MC)”
`bsdutils` | V:439, I:999 | 335 | `script`(1)-kommando för att spela in en terminalsession
`screen` | V:54, I:199 | 1006 | terminalmultiplexer med VT100/ANSI-terminalemulering
`tmux` | V:79, I:153 | 1292 | terminal multiplexer alternativ (Använd "Control-B" istället)
`fzf` | V:8, I:31 | 4651 | fuzzy text sökare
`fzy` | V:0, I:0 | 59 | fuzzy text sökare
`rlwrap` | V:1, I:12 | 328 | readline-funktion kommandoradsinklädnad
`ledit` | V:0, I:8 | 375 | readline-funktion kommandoradsinklädnad
`rlfe` | V:0, I:0 | 45 | readline-funktion kommandoradsinklädnad
`ripgrep` | V:9, I:30 | 5342 | snabb rekursiv strängsökning i källkodsträdet med automatisk filtrering

### 9.1.1. Spela in skalaktiviteterna på ett rent sätt

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-x`shell`", "`M-x eshell`" eller "M-x`term`" för att komma till inspelningskonsolen. Använd "`C-x C-w`" för att skriva bufferten till en fil.

### 9.1.2. Skärmprogrammet

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

Tabell 9.2. Lista över tangentbindningar för skärm

nyckelbindning | betydelse
--- | ---
`^A ?` | visa en hjälpskärm (visa tangentbindningar)
`^A c` | skapa ett nytt fönster och växla till det
`^A n` | gå till nästa fönster
`^A p` | gå till föregående fönster
`^A 0` | gå till fönster nummer 0
`^A 1` | gå till fönster nummer 1
`^A w` | visa en lista över fönster
`^A a` | skicka ett Ctrl-A till aktuellt fönster som tangentbordsinmatning
`^A h` | skriva en papperskopia av det aktuella fönstret till filen
`^A H` | påbörja/avsluta loggning av aktuellt fönster till fil
`^A ^X` | låsa terminalen (lösenordsskyddad)
`^A d` | koppla loss skärmsessionen från terminalen
`^A DD` | koppla bort skärmsessionen och logga ut

Se `screen`(1) för mer information.

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

### 9.1.3. Navigera runt i kataloger

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.

### 9.1.4. Omslag för läslinje

Vissa kommandon, t.ex. `/usr/bin/dash`, som saknar möjlighet att redigera kommandoradshistorik kan lägga till sådan funktionalitet på ett transparent sätt genom att köra under `rlwrap` eller dess motsvarigheter.

     $ rlwrap dash -i

Detta ger en bekväm plattform för att testa subtila punkter för `dash` med vänlig `bash-liknande` miljö.

### 9.1.5. Skanna källkodsträdet

Kommandot `rg`(1) i paketet `ripgrep` erbjuder ett snabbare alternativ till kommandot `grep`(1) för att skanna källkodsträdet för typiska situationer. Det drar nytta av moderna flerkärniga processorer och tillämpar automatiskt rimliga filter för att hoppa över vissa filer.

## 9.2. Anpassa vim

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.

### 9.2.1. Anpassa vim med interna funktioner

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
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\+\%#\@<!$/

### 9.2.2. Anpassa vim med externa paket

Intressanta externa plugin-paket kan hittas:

- Vim - den allestädes närvarande textredigeraren -- Den officiella uppströmswebbplatsen för Vim och vim-skript

- VimAwsome -- En lista över Vim-plugins

- vim-scripts -- Debian-paket: en samling vim-skript

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.

Tabell 9.3. Information om initialiseringen av `vim`

tangenttryckningar | information
--- | ---
`:hjälp paket` | förklaring av paketmekanismen vim
`:hjälp runtimepath` | förklaring av mekanismen för `runtimepath`
`:version` | interna stater inklusive kandidater för vimrc-filen
`:echo $VIM` | miljövariabeln "`$VIM`" som används för att hitta vimrc-filen
`:set runtimepath?` | lista över kataloger som ska genomsökas efter alla runtime-stödfiler
`:echo $VIMRUNTIME` | miljövariabeln "`$VIMRUNTIME`" som används för att hitta olika systemtillhandahållna runtime-stödfiler

## 9.3. Registrering och presentation av data

### 9.3.1. Loggdaemon

Många traditionella program registrerar sina aktiviteter i textfilformat under katalogen "`/var/log/`".

`logrotate`(8) används för att förenkla administrationen av loggfiler på ett system som genererar många loggfiler.

Många nya program registrerar sina aktiviteter i det binära filformatet med hjälp av `systemd-journald`(8) Journaltjänst under katalogen "`/var/log/journal`".

Du kan logga data till journalen `systemd-journald`(8) från ett skalskript med kommandot `systemd-cat`(1).

Se Avsnitt 3.5, ”Systemets meddelande” och Avsnitt 3.4, ”Kärnans meddelande”.

### 9.3.2. Logganalysator

Här är anmärkningsvärda logganalysatorer ( "`~Gsecurity::log-analyzer`" i `aptitude`(8)).

Tabell 9.4. Lista över systemlogganalysatorer

paket | popcon | storlek | beskrivning
--- | --- | --- | ---
`logwatch` | V:9, I:10 | 2435 | logganalysator med snygg utdata skriven i Perl
`fail2ban` | V:95, I:106 | 2191 | förbjuda IP-adresser som orsakar flera autentiseringsfel
`analog` | V:3, I:88 | 3739 | logganalysator för webbserver
`awstats` | V:5, I:8 | 6935 | kraftfull och funktionell analysator för webbserverloggar
`sarg` | V:0, I:0 | 863 | generator för bläckfiskanalysrapport
`pflogsumm` | V:1, I:3 | 170 | Postfix sammanfattning av loggposter
`fwlogwatch` | V:0, I:0 | 487 | analysator för brandväggsloggar
`squidview` | V:0, I:0 | 189 | övervaka och analysera squid access.log-filer
`swatch` | V:0, I:0 | 99 | loggfilsgranskare med regexp-matchning, markering och krokar
`crm114` | V:0, I:0 | 1371 | Kontrollerbart regex- och skräppostfilter (CRM114)
`icmpinfo` | V:0, I:0 | 42 | tolka ICMP-meddelanden

| Notera
CRM114 tillhandahåller språkinfrastruktur för att skriva fuzzy-filter med TRE regex-biblioteket. Det används ofta som spamfilter men kan även användas som logganalysator.

### 9.3.3. Anpassad visning av textdata

Ä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
För `vim`(1) och dess alias `view`(1) i personsökarläget aktiverar "`:set hls`" markerad sökning.

### 9.3.4. Anpassad visning av tid och datum

Standardformatet för visning av tid och datum med kommandot "`ls -l`" beror på locale (se Avsnitt 1.2.6, ”Tidsstämplar” för värde). Variabeln "`$LANG`" anges först och den kan åsidosättas av de exporterade miljövariablerna "`$LC_TIME`" eller "`$LC_ALL`".

Det faktiska standardformatet för varje lokal beror på vilken version av standardbiblioteket för C ( paketet `libc6` ) som används. D.v.s. olika versioner av Debian har olika standardformat. För isoformat, se ISO 8601.

Om du verkligen vill anpassa detta visningsformat för tid och datum utöver locale, bör du ställa in tidsformatvärdet med argumentet "`--time-style`” eller med värdet ”`$TIME_STYLE`” (se `ls`(1), `date`(1), ”`info coreutils ’ls invocation’`").

Tabell 9.5. Visa exempel på tid och datum för kommandot "`ls -l`" med värdet för tidstyp

tid stil värde | lokal | visning av tid och datum
--- | --- | ---
`iso` | någon | `01-19 00:15`
`lång-iso` | någon | `2009-01-19 00:15`
`full-iso` | någon | `2009-01-19 00:15:16.000000000 +0900`
`lokal` | `C` | `19 januari 00:15`
`lokal` | `en_US.UTF-8` | `19 januari 00:15`
`lokal` | `es_ES.UTF-8` | `ene 19 00:15`
`+%d.%m.%y %H:%M` | någon | `19.01.09 00:15`
`+%d.%b.%y %H:%M` | `C` eller `en_US.UTF-8` | `19.09 januari 00:15`
`+%d.%b.%y %H:%M` | `es_ES.UTF-8` | `19.ene.09 00:15`

| Tips

Du kan slippa skriva långa alternativ på kommandoraden med hjälp av kommandonas alias (se Avsnitt 1.5.9, ”Kommando alias”):

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

### 9.3.5. Färgat skal eko

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

### 9.3.6. Färgade kommandon

Färgade kommandon är praktiska för att inspektera deras utdata i den interaktiva miljön. Jag inkluderar följande i min "`~/.bashrc`".

    if [ "$TERM" != "dumb" ]; then
        eval "`dircolors -b`"
        alias ls='ls --color=always'
        alias ll='ls --color=always -l'
        alias la='ls --color=always -A'
        alias less='less -R'
        alias ls='ls --color=always'
        alias grep='grep --color=always'
        alias egrep='egrep --color=always'
        alias fgrep='fgrep --color=always'
        alias zgrep='zgrep --color=always'
    else
        alias ll='ls -l'
        alias la='ls -A'
    fi

Användningen av alias begränsar färgeffekterna till den interaktiva kommandoanvändningen. Det har en fördel jämfört med att exportera miljövariabeln "`export GREP_OPTIONS='--color=auto'`" eftersom färg kan ses under pager-program som `less`(1). Om du vill undertrycka färgen vid piping till andra program, använd "`--color=auto`" istället i exemplet ovan för "`~/.bashrc`".

| Tips
Du kan stänga av dessa färgläggande alias i den interaktiva miljön genom att anropa shell med "`TERM=dumb bash`".

### 9.3.7. Registrering av redaktörsaktiviteter för komplexa upprepningar

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.

### 9.3.8. Inspelning av grafikbilden för en X-applikation

Det finns några olika sätt att spela in grafikbilden för ett X-program, inklusive en `xterm-display`.

Tabell 9.6. Lista över grafiska bildmanipuleringsverktyg

paket | popcon | storlek | skärm | kommando
--- | --- | --- | --- | ---
`gnome-screenshot` | V:13, I:111 | 1115 | Wayland | skärmdumpsprogram för GNOME
`flameshot` | V:7, I:17 | 3532 | Wayland | skärmdump ansökan på steroid
`gimp` | V:35, I:229 | 31748 | Wayland + X | skärmdump i GUI-meny
`x11-apps` | V:33, I:464 | 2461 | X | `xwd`(1)
`imagemagick` | I:290 | 77 | X | `import`(1)
`scrot` | V:4, I:53 | 141 | X | `scrot`(1)

### 9.3.9. Registrering av ändringar i konfigurationsfiler

Det finns specialiserade verktyg för att registrera ändringar i konfigurationsfiler med hjälp av DVCS och för att göra ögonblicksbilder av systemet på Btrfs.

Tabell 9.7. Lista över paket som kan registrera konfigurationshistorik

paket | popcon | storlek | beskrivning
--- | --- | --- | ---
`etckeeper` | V:24, I:27 | 157 | lagra konfigurationsfiler och deras metadata med Git (standard), Mercurial eller GNU Bazaar
`timeshift` | V:7, I:13 | 4481 | verktyg för systemåterställning med hjälp av rsync eller BTRFS-snapshots
`snapper` | V:6, I:8 | 2410 | Verktyg för hantering av ögonblicksbilder av Linux-filsystem

Du kan också tänka dig att använda det lokala skriptet Avsnitt 10.2.3, ”Tips för säkerhetskopiering”.

## 9.4. Övervakning, kontroll och start av programaktiviteter

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

Tabell 9.8. Förteckning över verktyg för övervakning och kontroll av programaktiviteter

paket | popcon | storlek | beskrivning
--- | --- | --- | ---
`coreutils` | V:892, I:999 | 18457 | `nice`(1): kör ett program med ändrad schemaläggningsprioritet
`bsdutils` | V:439, I:999 | 335 | `renice`(1): ändra schemaläggningsprioriteten för en process som körs
`procps` | V:818, I:998 | 2404 | "`/proc`" filsystemverktyg: `ps`(1), `top`(1), `kill`(1), `watch`(1), …
`psmisc` | V:410, I:742 | 950 | verktyg för filsystemet "`/proc`": `killall`(1), `fuser`(1), `peekfd`(1), `pstree`(1)
`time` | V:5, I:85 | 129 | `time`(1): kör ett program för att rapportera hur systemresurser används med avseende på tid
`sysstat` | V:123, I:162 | 1904 | `sar`(1), `iostat`(1), `mpstat`(1), ...: verktyg för systemprestanda för Linux
`isag` | V:0, I:3 | 109 | Interactive System Activity Grapher för sysstat
`lsof` | V:443, I:949 | 492 | `lsof`(8): lista filer som öppnats av en pågående process med alternativet "`-p`"
`strace` | V:10, I:103 | 3253 | `strace`(1): spåra systemanrop och signaler
`ltrace` | V:0, I:11 | 420 | `ltrace`(1): spåra anrop till bibliotek
`xtrace` | V:0, I:0 | 353 | `xtrace`(1): spåra kommunikationen mellan X11-klient och server
`powertop` | V:33, I:232 | 696 | `powertop`(1): information om systemets strömförbrukning
`cron` | V:901, I:996 | 250 | kör processer enligt ett schema i bakgrunden från `cron`(8)-daemon
`anacron` | V:418, I:493 | 112 | cron-liknande kommandoschemaläggare för system som inte körs 24 timmar om dygnet
`at` | V:74, I:102 | 158 | `at`(1) eller `batch`(1): kör ett jobb vid en angiven tidpunkt eller under en viss belastningsnivå

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

### 9.4.1. Tidsinställning av en process

Visar tid som använts av den process som anropas av kommandot.

    # time some_command >/dev/null
    real    0m0.035s       # time on wall clock (elapsed real time)
    user    0m0.000s       # time in user mode
    sys     0m0.020s       # time in kernel mode

### 9.4.2. Prioritet för schemaläggning

Ett fint värde används för att styra schemaläggningsprioriteten för processen.

Tabell 9.9. Lista med bra värden för schemaläggningsprioritet

bra värde | prioritet för schemaläggning
--- | ---
19 | process med lägst prioritet (nice)
0 | mycket högprioriterad process för användaren
-20 | mycket högprioriterad process för rot (inte trevligt)

    # nice  -19 top                                      # very nice
    # nice --20 wodim -v -eject speed=2 dev=0,0 disk.img # very fast

Ibland gör ett extremt nice-värde mer skada än nytta för systemet. Använd detta kommando med försiktighet.

### 9.4.3. Kommandot ps

Kommandot `ps`(1) på ett Debian-system har stöd för både BSD- och SystemV-funktioner och hjälper till att identifiera processaktiviteten statiskt.

Tabell 9.10. Lista över stilar för kommandot ps

stil | typiskt kommando | funktion
--- | --- | ---
BSD | `ps aux` | visa %CPU %MEM
System V | `ps -efH` | visa PPID

När det gäller zombieprocesser kan du döda dem med hjälp av det ID för den överordnade processen som anges i fältet "`PPID`".

Kommandot `pstree`(1) visar ett träd med processer.

### 9.4.4. Det högsta kommandot

`top`(1) på Debian-systemet har rika funktioner och hjälper till att identifiera vilken process som agerar roligt dynamiskt.

Det är ett interaktivt fullskärmsprogram. Du kan få hjälp med användningen genom att trycka på "h"-tangenten och avsluta det genom att trycka på "q"-tangenten.

### 9.4.5. Listning av filer som öppnats av en process

Du kan lista alla filer som öppnats av en process med ett process-ID (PID), t.ex. 1, på följande sätt.

    $ sudo lsof -p 1

PID=1 är vanligtvis `init-programmet`.

### 9.4.6. Spårning av programaktiviteter

Du kan spåra programaktivitet med `strace`(1), `ltrace`(1) eller `xtrace`(1) för systemanrop och signaler, biblioteksanrop eller kommunikation mellan X11-klient och -server.

Du kan spåra systemanrop med kommandot `ls` på följande sätt.

    $ sudo strace ls

| Tips
Använd skriptet strace-graph som finns i /usr/share/doc/strace/examples/ för att skapa en snygg trädvy

### 9.4.7. Identifiering av processer som använder filer eller uttag

Du kan också identifiera processer med hjälp av filer genom `fuser`(1), t.ex. för "`/var/log/mail.log`" på följande sätt.

    $ sudo fuser -v /var/log/mail.log
                         USER        PID ACCESS COMMAND
    /var/log/mail.log:   root       2946 F.... rsyslogd

Du ser att filen "`/var/log/mail.log`" är öppen för skrivning av kommandot `rsyslogd`(8).

Du kan också identifiera processer som använder uttag med `fuser`(1), t.ex. för ”`smtp/tcp`” med följande.

    $ sudo fuser -v smtp/tcp
                         USER        PID ACCESS COMMAND
    smtp/tcp:            Debian-exim   3379 F.... exim4

Nu vet du att ditt system kör `exim4`(8) för att hantera TCP-anslutningar till SMTP-porten (25).

### 9.4.8. Upprepa ett kommando med ett konstant intervall

`watch`(1) kör ett program upprepade gånger med ett konstant intervall och visar dess resultat i helskärm.

    $ watch w

Visar vem som är inloggad på systemet och uppdateras varannan sekund.

### 9.4.9. Upprepa ett kommando loopa över filer

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

- Shell for loop-metoden (se Avsnitt 12.1.4, ”Öglor i skalet”):

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

### 9.4.10. Starta ett program från GUI

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.

The desktop environment sets `$XDG_DATA_HOME` and `$XDG_DATA_DIR` environment variables. For example, under the GNOME:

- `$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
En användaranpassad GUI-menypost kan skapas genom att lägga till en `*.desktop-fil` i katalogen `$HOME/.local/share/applications/`.

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

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

### 9.4.11. Anpassning av program som ska startas

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

- Meny för programkonfiguration:

  - GNOME desktop: "Settings" → "Apps" → "Default Apps"

  - KDE desktop: "Application Launcher" → "System Settings" → "Default Applications"

  - Iceweasel webbläsare: "Redigera" → "Inställningar" → "Program"

  - `mc`(1): "`/etc/mc/mc.ext`"

- Miljövariabler som "`$BROWSER`", "`$EDITOR`", "`$VISUAL`" och "`$PAGER`" (se `environ`(7))

- Systemet `update-alternatives`(1) för program som "`editor`", "`view`", "`x-www-browser`", "`gnome-www-browser`" och "`www-browser`" (se Avsnitt 1.4.7, ”Ange en standardtextredigerare”)

- filinnehållet i "`~/.mailcap`" och "`/etc/mailcap`" som associerar MIME-typ med program (se `mailcap`(5))

- Filinnehållet i "`~/.mime`.types" och "`/etc/mime`.types" som associerar filnamnstillägg med MIME-typ (se `run-mailcap`(1))

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

| 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

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

### 9.4.12. Döda en process

Använd `kill`(1) för att döda (eller skicka en signal till) en process med process-ID.

Använd `killall`(1) eller `pkill`(1) för att göra samma sak med processens kommandonamn och andra attribut.

Tabell 9.11. Lista över ofta använda signaler för kill-kommando

signalvärde | signalens namn | åtgärd | notering
--- | --- | --- | ---
0 | --- | ingen signal skickas (se `kill`(2)) | kontrollera om processen är igång
1 | SIGHUP | avsluta processen | frånkopplad terminal (signal upphängd)
2 | SIGINT | avsluta processen | avbrott från tangentbordet`(CTRL-C)`
3 | SIGQUIT | avsluta processen och dumpa kärnan | avsluta från tangentbordet`(CTRL-\\`)
9 | SIGKILL | avsluta processen | oblockerbar dödssignal
15 | SIGTERM | avsluta processen | blockerbar avslutningssignal

### 9.4.13. Schemaläggning av uppgifter en gång

Kör kommandot `at`(1) för att schemalägga ett engångsjobb på följande sätt.

    $ echo 'command -args'| at 3:40 monday

### 9.4.14. Regelbunden schemaläggning av arbetsuppgifter

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

### 9.4.15. Schemaläggning av uppgifter på evenemang

Systemd kan schemalägga program inte bara på timerhändelsen utan även på mount-händelsen. Se Avsnitt 10.2.3.3, ”Timerhändelseutlöst säkerhetskopiering” och Avsnitt 10.2.3.2, ”Montera händelsestyrd säkerhetskopiering” för exempel.

### 9.4.16. Alt-SysRq-tangenten

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

Tabell 9.12. Lista över anmärkningsvärda SAK-kommandotangenter

tangent efter Alt-SysRq | beskrivning av åtgärden
--- | ---
`k` | dödaalla processer på den aktuella virtuella konsolen(SAK)
`s` | synkroniseraalla monterade filsystem för att undvika datakorruption
`u` | återmontera alla monterade filsystem skrivskyddade(umount)
`r` | återställa tangentbordet från raw-lägeefter X-krasch

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

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

## 9.5. Tips för underhåll av systemet

### 9.5.1. Vem är med i systemet?

Du kan kontrollera vem som är inne i systemet på följande sätt.

- `who`(1) visar vem som är inloggad.

- `w`(1) visar vem som är inloggad och vad de gör.

- `last`(1) visar en lista över den senast inloggade användaren.

- `lastb`(1) visar en lista över de senaste dåliga inloggade användarna.

| Tips
"`/var/run/utmp`" och "`/var/log/wtmp`" innehåller sådan användarinformation. Se `login`(1) och `utmp`(5).

### 9.5.2. Varning för alla

Du kan skicka ett meddelande till alla som är inloggade i systemet med `wall`(1) på följande sätt.

    $ echo "We are shutting down in 1 hour" | wall

### 9.5.3. Identifiering av hårdvara

För PCI-liknande enheter(AGP, PCI-Express, CardBus, ExpressCard etc.) är `lspci`(8) (förmodligen med alternativet "`-nn`") en bra början för identifiering av maskinvaran.

Alternativt kan du identifiera maskinvaran genom att läsa innehållet i "`/proc/bus/pci/devices`" eller bläddra i katalogträdet under "`/sys/bus/pci`" (se Avsnitt 1.2.12, ”procfs och sysfs”).

Tabell 9.13. Lista över verktyg för identifiering av hårdvara

paket | popcon | storlek | beskrivning
--- | --- | --- | ---
`pciutils` | V:254, I:992 | 280 | Linux PCI-verktyg: `lspci`(8)
`usbutils` | V:80, I:887 | 322 | USB-verktyg för Linux: `lsusb`(8)
`nvme-cli` | V:22, I:30 | 2222 | NVMe-verktyg för Linux: `nvme`(1)
`pcmciautils` | V:4, I:7 | 92 | PCMCIA-verktyg för Linux: `pccardctl`(8)
`scsitools` | V:0, I:2 | 261 | samling verktyg för hantering av SCSI-maskinvara: `lsscsi`(8)
`procinfo` | V:0, I:6 | 149 | systeminformation hämtad från "`/proc`": `lsdev`(8)
`lshw` | V:13, I:90 | 971 | information om maskinvarukonfiguration: `lshw`(1)
`discover` | V:27, I:685 | 81 | system för identifiering av hårdvara: `discover`(8)

### 9.5.4. Konfiguration av hårdvara

Även om det mesta av maskinvarukonfigurationen på moderna GUI-skrivbordssystem som GNOME och KDE kan hanteras via medföljande GUI-konfigurationsverktyg, är det en bra idé att känna till några grundläggande metoder för att konfigurera dem.

Tabell 9.14. Lista över verktyg för hårdvarukonfiguration

paket | popcon | storlek | beskrivning
--- | --- | --- | ---
`console-setup` | V:77, I:973 | 420 | Font och keytable-verktyg för Linux-konsolen
`x11-xserver-utils` | V:312, I:542 | 559 | Verktyg för X-server: `xset`(1), `xmodmap`(1)
`acpid` | V:58, I:90 | 158 | daemon för att hantera händelser som levereras av ACPI (Advanced Configuration and Power Interface)
`acpi` | V:7, I:85 | 49 | verktyg för att visa information om ACPI-enheter
`sleepd` | V:0, I:0 | 84 | daemon för att sätta en bärbar dator i viloläge under inaktivitet
`hdparm` | V:117, I:222 | 246 | optimering av hårddiskåtkomst (se Avsnitt 9.6.9, ”Optimering av hårddisken”)
`smartmontools` | V:229, I:264 | 2455 | styra och övervaka lagringssystem med hjälp av S.M.A.R.T.
`setserial` | V:3, I:5 | 104 | samling av verktyg för hantering av serieportar
`memtest86+` | V:0, I:19 | 12473 | samling av verktyg för hantering av minneshårdvara
`scsitools` | V:0, I:2 | 261 | samling av verktyg för hantering av SCSI-hårdvara
`setcd` | V:0, I:0 | 33 | optimering av åtkomst till cd-läsare
`big-cursor` | I:0 | 26 | större muspekare för X

ACPI är ett nyare ramverk för energihanteringssystemet än APM.

| Tips
Skalning av CPU-frekvens på moderna system styrs av kärnmoduler som t.ex. `acpi_cpufreq`.

### 9.5.5. System- och hårdvarutid

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
Under systemd ska du istället använda `systemd-timesyncd` för synkronisering av nätverkstiden. Se `systemd-timesyncd`(8).

Se följande.

- Hantera korrekt datum och tid HOWTO

- NTP Projekt för offentliga tjänster

- Paketet `ntp-doc`

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

### 9.5.6. Terminalens konfiguration

Det finns flera komponenter för att konfigurera teckenkonsol- och `ncurses`(3)-systemfunktioner.

- Filen "`/etc/terminfo/*/*`"`(terminfo`(5))

- Miljövariabeln "`$TERM`"`(term`(7))

- `setterm`(1), `stty`(1), `tic`(1) och `toe`(1)

Om `terminfo-posten` för `xterm` inte fungerar med en `xterm` som inte är från Debian, ändra din terminaltyp, "`$TERM`", från "`xterm`" till en av de funktionsbegränsade versionerna som "`xterm-r6`" när du loggar in på ett Debiansystem på distans. Se "`/usr/share/doc/libncurses5/FAQ`" för mer information. "`dumb`" är den minsta gemensamma nämnaren för "`$TERM`".

### 9.5.7. Den sunda infrastrukturen

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

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

Tabell 9.15. Lista över ljudpaket

paket | popcon | storlek | beskrivning
--- | --- | --- | ---
`alsa-utils` | V:341, I:475 | 2702 | verktyg för att konfigurera och använda ALSA
`oss-compat` | V:0, I:10 | 18 | OSS-kompatibilitet under ALSA förhindrar "`/dev/dsp hittades inte"`-fel
`pipewire` | V:316, I:373 | 142 | multimedia server för ljud- och videobearbetning - metapaket
`pipewire-bin` | V:324, I:373 | 2094 | multimedia-server för ljud- och videobearbetningsmotor - ljudserver och CLI-program
`pipewire-alsa` | V:168, I:238 | 197 | ljud- och videobehandlingsmotor multimediaserver - ljudserver som ersätter ALSA
`pipewire-pulse` | V:280, I:340 | 64 | multimedia-server med ljud- och videobearbetningsmotor - ljudserver som ersätter PulseAudio
`pulseaudio` | V:166, I:197 | 6606 | PulseAudio-server
`libpulse0` | V:439, I:587 | 977 | PulseAudio klientbibliotek
`jackd` | V:2, I:15 | 8 | JACK Audio Connection Kit. (JACK) server (låg latens)
`libjack0` | V:2, I:9 | 330 | JACK Audio Connection Kit. (JACK) bibliotek (låg latens)
`libgstreamer1.0-0` | V:465, I:602 | 5280 | GStreamer: GNOME-ljudmotor
`libphonon4qt5-4` | V:28, I:64 | 572 | Phonon: KDE:s ljudmotor

### 9.5.8. Inaktivera skärmsläckaren

Använd följande kommandon för att inaktivera skärmsläckaren.

Tabell 9.16. Lista över kommandon för att inaktivera skärmsläckaren

miljö | kommando
--- | ---
Linux-konsolen | `setterm -powersave av`
X-fönstret (stänga av skärmsläckaren) | `xset s off`
X-fönstret (inaktivera dpms) | `xset -dpms`
X-fönstret (GUI-konfiguration av skärmsläckare) | `xscreensaver-kommando -prefs`

### 9.5.9. Avaktivera ljudsignaler

Man kan alltid koppla ur datorns högtalare för att inaktivera pipljud. Att ta bort `pcspkr-kärnmodulen` gör detta åt dig.

Följande förhindrar att programmet `readline`(3) som används av `bash`(1) piper när det stöter på ett alert-tecken (ASCII=7).

    $ echo "set bell-style none">> ~/.inputrc

### 9.5.10. Använt minne

Det finns 2 resurser tillgängliga för dig för att få information om minnesanvändningssituationen.

- Kärnans startmeddelande i "`/var/log/dmesg`" innehåller den totala exakta storleken på tillgängligt minne.

- `free`(1) och `top`(1) visar information om minnesresurser i det system som körs.

Här är ett exempel.

    # grep '\] Memory' /var/log/dmesg
    [    0.004000] Memory: 990528k/1016784k available (1975k kernel code, 25868k reserved, 931k data, 296k init)
    $ free -k
                 total       used       free     shared    buffers     cached
    Mem:        997184     976928      20256          0     129592     171932
    -/+ buffers/cache:     675404     321780
    Swap:      4545576          4    4545572

Du kanske undrar "dmesg säger att jag har 990 MB ledigt, och free -k säger att 320 MB är ledigt. Mer än 600 MB saknas ...".

Bry dig inte om det stora "`used`" och det lilla "`free`" i raden "`Mem:`", utan läs det som står under dem (675404 och 321780 i exemplet ovan) och slappna av.

För min MacBook med 1GB=1048576k DRAM (videosystemet stjäl en del av detta), ser jag följande.

Tabell 9.17. Lista över rapporterade minnesstorlekar

felanmalan | storlek
--- | ---
Total storlek i dmesg | 1016784k = 1GB - 31792k
Gratis i dmesg | 990528k
Totalt under skal | 997184k
Fri under skal | 20256k (men i praktiken 321780k)

### 9.5.11. Kontroll av systemsäkerhet och -integritet

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.

- `Debsums-paketet`, se `debsums`(1) och Avsnitt 2.5.2, ”"Release"-fil på högsta nivå och äkthet”.

- Paketet `chkrootkit`, se `chkrootkit`(1).

- Paketfamiljen `clamav`, se `clamscan`(1) och `freshclam`(1).

- FAQ om Debians säkerhet.

- Säkra Debian Manual.

Tabell 9.18. Förteckning över verktyg för kontroll av systemsäkerhet och systemintegritet

paket | popcon | storlek | beskrivning
--- | --- | --- | ---
`logcheck` | V:5, I:6 | 120 | daemon för att skicka avvikelser i systemets loggfiler till administratören
`debsums` | V:4, I:30 | 107 | verktyg för att verifiera installerade paketfiler mot MD5-kontrollsummor
`chkrootkit` | V:9, I:14 | 966 | rootkit-detektor
`clamav` | V:8, I:39 | 33154 | antivirusprogram för Unix - kommandoradsgränssnitt
`tiger` | V:1, I:1 | 7800 | rapportera sårbarheter i systemsäkerheten
`tripwire` | V:1, I:1 | 5050 | kontroll av fil- och katalogintegritet
`john` | V:1, I:7 | 469 | aktivt verktyg för att knäcka lösenord
`aide` | V:1, I:2 | 331 | Avancerad miljö för intrångsdetektering - statisk binär
`integrit` | V:0, I:0 | 2939 | program för verifiering av filintegritet
`crack` | V:0, I:0 | 153 | program för lösenordsgissning

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

## 9.6. Tips om datalagring

Booting your system as the Linux live system (see Avsnitt 3.2.2, ”Linux live rescue system on USB” and Avsnitt 3.2.3, ”Linux live rescue system from GRUB”) makes it easy for you to reconfigure data storage on the installed system.

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.

### 9.6.1. Användning av diskutrymme

Diskutrymmesanvändningen kan utvärderas med hjälp av program som tillhandahålls av paketen `mount`, `coreutils` och `xdu`:

- `mount`(8) rapporterar alla monterade filsystem (= diskar).

- `df`(1) rapporterar hur mycket diskutrymme som används för filsystemet.

- `du`(1) rapporterar hur mycket diskutrymme som används för katalogträdet.

| Tips
Du kan mata utdata från `du`(8) till `xdu`(1x) för att skapa en grafisk och interaktiv presentation med ”`du -k . |xdu`”, ”`sudo du -k -x / |xdu`”, etc.

### 9.6.2. Konfiguration av diskpartitioner

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.

Tabell 9.19. Lista över paket för hantering av diskpartitioner

paket | popcon | storlek | beskrivning
--- | --- | --- | ---
`util-linux` | V:897, I:999 | 4384 | diverse systemverktyg inklusive `fdisk`(8) och `cfdisk`(8)
`parted` | V:445, I:579 | 126 | GNU Parted program för att ändra storlek på diskpartitioner
`gparted` | V:13, I:92 | 2313 | GNOME-partitionsredigerare baserad på `libparted`
`gdisk` | V:20, I:309 | 940 | partition editor för GPT/MBR hybriddisk
`kpartx` | V:17, I:27 | 78 | program för att skapa enhetsmappningar för partitioner

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

### 9.6.3. Åtkomst till partition med hjälp av UUID

Även om omkonfigurering av partitioner eller aktiveringsordning för flyttbara lagringsmedia kan ge olika namn på partitioner, kan du komma åt dem på ett konsekvent sätt. Detta är också användbart om du har flera diskar och ditt BIOS/UEFI inte ger dem enhetsnamn som är konsekventa.

- `mount`(8) med alternativet "`-U`" kan montera en blockenhet med hjälp av UUID, istället för att använda dess filnamn, t.ex. "`/dev/sda3`".

- "`/etc/fstab`" (se `fstab`(5)) kan använda UUID.

- Boot loaders (Avsnitt 3.1.2, ”Steg 2: startladdaren”) kan också använda UUID.

| Tips
Du kan undersöka UUID för en blockspecifik enhet med `blkid`(8). Du kan också undersöka UUID och annan information med "`lsblk -f`".

### 9.6.4. LVM2

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

### 9.6.5. Konfiguration av filsystem

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.

Tabell 9.20. Lista över paket för hantering av filsystem

paket | popcon | storlek | beskrivning
--- | --- | --- | ---
`e2fsprogs` | V:796, I:997 | 1549 | verktyg för filsystemen ext2/ext3/ext4
`btrfs-progs` | V:48, I:76 | 5204 | verktyg för filsystemet Btrfs
`reiserfsprogs` | V:9, I:21 | 473 | verktyg för Reiserfs-filsystemet
`zfsutils-linux` | V:31, I:32 | 1891 | verktyg för OpenZFS-filsystemet
`dosfstools` | V:247, I:572 | 310 | verktyg för FAT-filsystemet. (Microsoft: MS-DOS, Windows)
`exfatprogs` | V:36, I:467 | 352 | verktyg för exFAT-filsystemet som underhålls av Samsung.
`exfat-fuse` | V:2, I:50 | 73 | läs/skriv exFAT-filsystem (Microsoft) drivrutin för FUSE.
`xfsprogs` | V:36, I:86 | 4386 | verktyg för XFS-filsystemet. (SGI: IRIX)
`ntfs-3g` | V:193, I:527 | 1500 | läs/skriv NTFS-filsystem (Microsoft: Windows NT, ...) drivrutin för FUSE.
`jfsutils` | V:0, I:7 | 1104 | verktyg för JFS-filsystemet. (IBM: AIX, OS/2)
`xorriso` | V:14, I:63 | 347 | utilities for the ISO-9660 filesystem and CD/DVD writing from libburnia
`wodim` | V:8, I:96 | 898 | command line CD/DVD writing tool from cdrkit
`genisoimage` | V:18, I:167 | 1567 | command line ISO-9660 filesystem tool from cdrkit
`reiser4progs` | V:0, I:1 | 1367 | verktyg för Reiser4-filsystemet
`hfsprogs` | V:0, I:3 | 394 | verktyg för filsystemet HFS och HFS Plus. (Apple: Mac OS)
`zerofree` | V:5, I:119 | 30 | program för att nollställa fria block från ext2/3/4-filsystem

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

### 9.6.6. Skapande av filsystem och kontroll av dess integritet

Kommandot `mkfs`(8) skapar filsystemet på ett Linux-system. Med kommandot `fsck`(8) kan du kontrollera och reparera filsystemets integritet på ett Linux-system.

Debian använder nu som standard ingen periodisk `fsck` efter skapande av filsystem.

| Observera
Det är i allmänhet inte säkert att köra `fsck` på monterade filsystem.

| Tips
Du kan köra kommandot `fsck`(8) säkert på alla filsystem inklusive rotfilsystemet vid omstart genom att ange "`enable_periodic_fsck`" i "`/etc/mke2fs.conf`" och max mount count till 0 med "`tune2fs -c0 /dev/partition_name`". Se `mke2fs.conf`(5) och `tune2fs`(8). Kontrollera filerna i "`/var/log/fsck/`" för resultatet av kommandot `fsck`(8) som körs från startskriptet.

### 9.6.7. Optimering av filsystem med hjälp av mount-alternativ

Den grundläggande konfigurationen av ett statiskt filsystem anges i "`/etc/fstab`". Till exempel,

    «file system»                   «mount point» «type» «options»    «dump» «pass»
    proc                                      /proc proc   defaults          0 0
    UUID=709cbe4c-80c1-56db-8ab1-dbce3146d2f7 /     ext4   errors=remount-ro 0 1
    UUID=817bae6b-45d2-5aca-4d2a-1267ab46ac23 none  swap   sw                0 0
    /dev/scd0                        /media/cdrom0  udf,iso9660 user,noauto  0 0

| Tips
UUID (se Avsnitt 9.6.3, ”Åtkomst till partition med hjälp av UUID”) kan användas för att identifiera en blockenhet i stället för normala blockenhetsnamn som "`/dev/sda1`", "`/dev/sda2`", …

Sedan Linux 2.6.30 använder kärnan som standard det beteende som anges i alternativet "`relatime`".

Se `fstab`(5) och `mount`(8).

### 9.6.8. Optimering av filsystemet via superblock

Egenskaperna hos ett filsystem kan optimeras via dess superblock med hjälp av kommandot `tune2fs`(8).

- När "`sudo tune2fs -l /dev/sda1`" körs visas innehållet i filsystemets superblock på "`/dev/sda1`".

- Genom att köra "`sudo tune2fs -c 50 /dev/sda1`" ändras frekvensen för filsystemkontroller`(fsck` körs under uppstart) till var 50:e uppstart på "`/dev/sda1`".

- Genom att köra "`sudo tune2fs -j /dev/sda1`" läggs journaliseringskapacitet till filsystemet, dvs. filsystemet konverteras från ext2 till ext3 på "`/dev/sda1`". (Gör detta på det omonterade filsystemet.)

- Utförandet av "`sudo tune2fs -O extents,uninit_bg,dir_index /dev/sda1 && fsck -pf /dev/sda1`" konverterar det från ext3 till ext4 på "`/dev/sda1`". (Gör detta på det omonterade filsystemet.)

| Tips
Trots sitt namn fungerar `tune2fs`(8) inte bara på ext2-filsystemet utan även på ext3- och ext4-filsystemen.

### 9.6.9. Optimering av hårddisken

| Varning
Kontrollera din maskinvara och läs manpage för `hdparm`(8) innan du leker med hårddiskkonfigurationen eftersom detta kan vara ganska farligt för dataintegriteten.

Du kan testa diskåtkomsthastigheten för en hårddisk, t.ex. "`/dev/sda`", med "`hdparm -tT /dev/sda`". För vissa hårddiskar som är anslutna till (E)IDE kan du snabba upp den med "`hdparm -q -c3 -d1 -u1 -m16 /dev/sda`" genom att aktivera "(E)IDE 32-bitars I/O-stöd", aktivera "using_dma-flaggan", ställa in "interrupt-unmask-flaggan" och ställa in "multiple 16 sector I/O" (farligt!).

Du kan testa skrivcache-funktionen på en hårddisk, t.ex. "`/dev/sda`", med "`hdparm -W /dev/sda`". Du kan inaktivera dess skrivcachefunktion med "`hdparm -W 0 /dev/sda`".

Du kanske kan läsa dåligt pressade CDROM-skivor på en modern CD-ROM-enhet med hög hastighet genom att sakta ner den med "`setcd -x 2`".

### 9.6.10. Optimering av solid state-enhet

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

### 9.6.11. Använda SMART för att förutsäga hårddiskfel

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/sda`".

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

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

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
`Smartd`(8)-daemon kan anpassas med filen `/etc/smartd.conf`, bland annat hur man vill bli meddelad om varningar.

### 9.6.12. Ange katalog för temporär lagring via $TMPDIR

Program skapar normalt temporära filer under den temporära lagringskatalogen "`/tmp`". Om "`/tmp`" inte ger tillräckligt med utrymme kan du ange en sådan katalog för tillfällig lagring via variabeln `$TMPDIR` för väluppfostrade program.

### 9.6.13. Utökning av användbart lagringsutrymme via LVM

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.

### 9.6.14. Utökning av användbart lagringsutrymme genom montering av ytterligare en partition

Om du har en tom partition (t.ex. "`/dev/sdx`") kan du formatera den med `mkfs.ext4`(1) och `mount`(8) den till en katalog där du behöver mer utrymme. (Du måste kopiera det ursprungliga datainnehållet.)

    $ sudo mv work-dir old-dir
    $ sudo mkfs.ext4 /dev/sdx
    $ sudo mount -t ext4 /dev/sdx work-dir
    $ sudo cp -a old-dir/* work-dir
    $ sudo rm -rf old-dir

| Tips
Alternativt kan du montera en tom diskavbildningsfil (se Avsnitt 9.7.5, ”Skapa en tom diskavbildningsfil”) som en loop-enhet (se Avsnitt 9.7.3, ”Montering av diskavbildningsfilen”). Den faktiska diskanvändningen växer med de faktiska data som lagras.

### 9.6.15. Utökning av användbart lagringsutrymme genom bind-mounting av en annan katalog

Om du har en tom katalog (t.ex. "`/path/to/emp-dir`") på en annan partition med användbart utrymme kan du montera(8) den med alternativet "`--bind`" till en katalog (t.ex. "`work-dir`") där du behöver mer utrymme.

    $ sudo mount --bind /path/to/emp-dir work-dir

### 9.6.16. Utökning av användbart lagringsutrymme genom overlay-mounting av en annan katalog

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

### 9.6.17. Utökning av användbart lagringsutrymme med hjälp av symlänk

| Observera
Detta är en föråldrad metod. Vissa program kanske inte fungerar bra med "symlänk till en katalog". Använd istället "mounting"-metoderna som beskrivs i avsnittet ovan.

Om du har en tom katalog (t.ex. "`/path/to/emp-dir`") i en annan partition med användbart utrymme kan du skapa en symlänk till katalogen med `ln`(8).

    $ sudo mv work-dir old-dir
    $ sudo mkdir -p /path/to/emp-dir
    $ sudo ln -sf /path/to/emp-dir work-dir
    $ sudo cp -a old-dir/* work-dir
    $ sudo rm -rf old-dir

| Varning
Använd inte "symlänk till en katalog" för kataloger som hanteras av systemet, t.ex. "`/opt`". En sådan symlänk kan skrivas över när systemet uppgraderas.

## 9.7. Diskavbildningen

Här diskuterar vi manipuleringar av diskavbildningen.

### 9.7.1. Skapa en diskavbildningsfil

The disk image file, "`disk.img`", of an unmounted device, e.g., the second SCSI or serial ATA drive "`/dev/sdb`", can be made by one of the following.

    # dd if=/dev/sdb of=disk.img; sync

    # cp /dev/sdb disk.img ; sync

    # cat /dev/sdb > disk.img ; sync

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/sda of=mbr.img bs=512 count=1
    # dd if=/dev/sda of=mbr-nopart.img bs=446 count=1
    # dd if=/dev/sda 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 gör en avbildning av en diskpartition på originaldisken ersätter du "`/dev/sda`" med "`/dev/sda1`" osv.

### 9.7.2. Skriva direkt till hårddisken

The disk image file, "`disk.img`" can be written to an unmounted device, e.g., the second SCSI drive "`/dev/sdb`" with matching size, by one of the following.

    # dd if=disk.img of=/dev/sdb ; sync

    # cp disk.img /dev/sdb ; sync

    # cat disk.img >/dev/sdb ; sync

På samma sätt kan diskpartitionsbildfilen "partition`.img`" skrivas till en omonterad partition, t.ex. den första partitionen i den andra SCSI-enheten "`/dev/sdb1`" med matchande storlek, på följande sätt.

    # dd if=partition.img of=/dev/sdb1 ; sync

### 9.7.3. Montering av diskavbildningsfilen

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

### 9.7.4. Rengöring av en diskavbildningsfil

En diskavbildningsfil, "`disk.img`", kan rensas från alla borttagna filer till en ren, gles avbildning, "`new.img`", på följande sätt.

    # mkdir old; mkdir new
    # mount -t auto -o loop disk.img old
    # dd bs=1 count=0 if=/dev/zero of=new.img seek=5G
    # mount -t auto -o loop new.img new
    # cd old
    # cp -a --sparse=always ./ ../new/
    # cd ..
    # umount new.img
    # umount disk.img

Om "`disk.img`" är i ext2, ext3 eller ext4 kan du också använda `zerofree`(8) från `zerofree-paketet` enligt följande.

    # losetup --show -f disk.img
    /dev/loop0
    # zerofree /dev/loop0
    # cp --sparse=always disk.img new.img
    # losetup -d /dev/loop0

### 9.7.5. Skapa en tom diskavbildningsfil

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

### 9.7.6. Skapa ISO9660-bildfilen

| Tips
Both `genisoimage`(1) provided by cdrkit and `xorrisofs`(1) provided by Libburnia share the same command syntax except for the command name.

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
Du måste noggrant undvika ISO9660 filsystem read ahead bug i Linux enligt ovan för att få rätt resultat.

### 9.7.7. Skriva direkt till CD/DVD-R/RW

| Tips
DVD is only a large CD to `wodim`(1) provided by cdrkit and `xorrecord`(1) provided by Libburnia. These commands share the same command syntax except for the command name.

Du kan hitta en användbar enhet genom att göra följande.

    # wodim --devices

Sedan sätts den tomma CD-R:n i CD-enheten och ISO9660-bildfilen "`cd.iso`" skrivs till den här enheten, t.ex. "`/dev/sda`", med `wodim`(1) på följande sätt.

    # wodim -v -eject dev=/dev/sda cd.iso

Om CD-RW används i stället för CD-R, gör du i stället på följande sätt.

    # wodim -v -eject blank=fast dev=/dev/sda cd.iso

| Tips
Om ditt skrivbordssystem monterar CD-skivor automatiskt ska du avmontera dem genom att "`sudo umount /dev/sda`" från konsolen innan du använder `wodim`(1).

### 9.7.8. Montering av ISO9660-bildfilen

Om "`cd.iso`" innehåller en ISO9660-avbildning, monteras den manuellt till "`/cdrom`" på följande sätt.

    # mount -t iso9660 -o ro,loop cd.iso /cdrom

| Tips
Moderna skrivbordssystem kan automatiskt montera flyttbara media, t.ex. ISO9660-formaterade CD-skivor (se Avsnitt 10.1.7, ”Flyttbar lagringsenhet”).

## 9.8. De binära uppgifterna

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

### 9.8.1. Visa och redigera binära data

Den mest grundläggande visningsmetoden för binära data är att använda kommandot "`od -t x1`".

Tabell 9.21. Lista över paket som visar och redigerar binära data

paket | popcon | storlek | beskrivning
--- | --- | --- | ---
`coreutils` | V:892, I:999 | 18457 | grundläggande paket som har `od`(1) för att dumpa filer (HEX, ASCII, OCTAL, ...)
`bsdmainutils` | V:4, I:152 | 17 | verktygspaket som har `hd`(1) för att dumpa filer (HEX, ASCII, OCTAL, ...)
`hexedit` | V:1, I:8 | 70 | binär editor och viewer (HEX, ASCII)
`bless` | V:0, I:1 | 924 | fullfjädrad hexadecimalredigerare (GNOME)
`okteta` | V:1, I:12 | 1590 | fullfjädrad hexadecimal editor (KDE4)
`ncurses-hexedit` | V:0, I:1 | 130 | binär editor och viewer (HEX, ASCII, EBCDIC)
`beav` | V:0, I:0 | 137 | binär editor och viewer (HEX, ASCII, EBCDIC, OCTAL, ...)

| Tips
HEX används som en förkortning för hexadecimalt format med radix 16. OCTAL används för oktalt format med radix 8. ASCII används för American Standard Code for Information Interchange, dvs. normal engelsk textkod. EBCDIC är för Extended Binary Coded Decimal Interchange Code som används på IBM mainframe operativsystem.

### 9.8.2. Manipulera filer utan att montera disk

Det finns verktyg för att läsa och skriva filer utan att montera disken.

Tabell 9.22. Lista över paket för att manipulera filer utan att montera disk

paket | popcon | storlek | beskrivning
--- | --- | --- | ---
`mtools` | V:7, I:54 | 400 | verktyg för MSDOS-filer utan att montera dem
`hfsutils` | V:0, I:3 | 178 | verktyg för HFS och HFS+ filer utan att montera dem

### 9.8.3. Redundans av data

RAID-system för programvara som erbjuds av Linux-kärnan ger dataredundans på filsystemnivå för att uppnå höga nivåer av lagringstillförlitlighet.

Det finns också verktyg för att lägga till dataredundans i filer på applikationsprogramnivå för att uppnå höga nivåer av lagringstillförlitlighet.

Tabell 9.23. Lista över verktyg för att lägga till dataredundans i filer

paket | popcon | storlek | beskrivning
--- | --- | --- | ---
`par2` | V:10, I:119 | 298 | Parity Archive Volume Set, för kontroll och reparation av filer
`dvdisaster` | V:0, I:1 | 1422 | skydd mot dataförlust/skrap/åldring för CD/DVD-media
`dvbackup` | V:0, I:0 | 413 | backupverktyg som använder MiniDV-videokameror (tillhandahåller `rsbep`(1))

### 9.8.4. Återställning av datafiler och kriminalteknisk analys

Det finns verktyg för återställning av datafiler och kriminalteknisk analys.

Tabell 9.24. Lista över paket för återställning av datafiler och kriminalteknisk analys

paket | popcon | storlek | beskrivning
--- | --- | --- | ---
`testdisk` | V:2, I:26 | 1495 | verktyg för partitionsskanning och diskåterställning
`magicrescue` | V:0, I:2 | 257 | verktyg för att återställa filer genom att leta efter magiska byte
`scalpel` | V:0, I:2 | 89 | sparsam, högpresterande filhuggare
`myrescue` | V:0, I:2 | 83 | rädda data från skadade hårddiskar
`extundelete` | V:0, I:7 | 152 | verktyg för att återställa filer på ext3/4-filsystemet
`ext4magic` | V:0, I:3 | 235 | verktyg för att återställa filer på ext3/4-filsystemet
`ext3grep` | V:0, I:2 | 299 | verktyg som hjälper till att återställa raderade filer på ext3-filsystemet
`scrounge-ntfs` | V:0, I:1 | 49 | program för dataåterställning för NTFS-filsystem
`gzrt` | V:0, I:0 | 33 | verktyg för gzip-återställning
`sleuthkit` | V:2, I:23 | 1729 | verktyg för kriminalteknisk analys. (Sleuthkit)
`autopsy` | V:0, I:1 | 1026 | grafiskt gränssnitt till SleuthKit
`foremost` | V:0, I:4 | 102 | kriminalteknisk applikation för att återställa data
`guymager` | V:0, I:0 | 1047 | verktyg för kriminalteknisk avbildning baserat på Qt
`dcfldd` | V:0, I:2 | 113 | förbättrad version av `dd` för kriminalteknik och säkerhet

| Tips
Du kan återställa filer i ext2-filsystemet med hjälp av kommandona `list_deleted_inodes` och `undel` i `debugfs`(8) i paketet `e2fsprogs`.

### 9.8.5. Dela upp en stor fil i små filer

När en data är för stor för att säkerhetskopiera som en enda fil kan du säkerhetskopiera innehållet efter att ha delat upp det i t.ex. 2000MiB bitar och slå samman dessa bitar tillbaka till originalfilen senare.

    $ split -b 2000m large_file
    $ cat x* >large_file

| Observera
Se till att du inte har några filer som börjar med "`x`" för att undvika namnkrascher.

### 9.8.6. Rensning av filinnehåll

Om du vill rensa innehållet i en fil, t.ex. en loggfil, ska du inte använda `rm`(1) för att radera filen och sedan skapa en ny tom fil, eftersom filen fortfarande kan nås under tiden mellan kommandona. Följande är det säkra sättet att rensa innehållet i filen.

    $ :>file_to_be_cleared

### 9.8.7. Dummy-filer

Följande kommandon skapar dummyfiler eller tomma filer.

    $ dd if=/dev/zero    of=5kb.file bs=1k count=5
    $ dd if=/dev/urandom of=7mb.file bs=1M count=7
    $ touch zero.file
    $ : > alwayszero.file

Du bör hitta följande filer.

- "`5kb.file`" är 5KB med nollor.

- "`7mb.file`" är 7MB slumpmässig data.

- "`zero.file`" kan vara en fil på 0 byte. Om den existerade uppdateras dess `mtime` medan dess innehåll och längd behålls.

- "`alwayszero.file`" är alltid en fil med 0 byte. Om den existerade uppdateras dess `mtime` och dess innehåll nollställs.

### 9.8.8. Radering av en hel hårddisk

There are several ways to completely erase data from an entire hard disk like device, e.g., USB flash drive at "`/dev/sda`".

| Observera
Check your USB flash drive location with `mount`(8) first before executing commands here. The device pointed by "`/dev/sda`" may be SCSI hard disk or serial-ATA hard disk where your entire system resides.

Radera allt innehåll på hårddisken genom att återställa data till 0 med följande.

    # dd if=/dev/zero of=/dev/sda

Radera allt genom att skriva över med slumpmässiga data enligt följande.

    # dd if=/dev/urandom of=/dev/sda

Radera allt genom att skriva över med slumpmässiga data på ett mycket effektivt sätt enligt följande.

    # shred -v -n 1 /dev/sda

Alternativt kan du använda `badblocks`(8) med flaggan `-t random`.

Eftersom `dd`(1) finns tillgänglig i skalet på många startbara Linux-CD-skivor, t.ex. Debians installations-CD, kan du radera ditt installerade system helt genom att köra ett raderingskommando från ett sådant media på systemets hårddisk, t.ex. "`/dev/sda`", "`/dev/sda`", etc.

### 9.8.9. Radera oanvänt område på en hårddisk

Unused area on an hard disk (or USB flash drive), e.g. "`/dev/sdb1`" may still contain erased data themselves since they are only unlinked from the filesystem. These can be cleaned by overwriting them.

    # mount -t auto /dev/sdb1 /mnt/foo
    # cd /mnt/foo
    # dd if=/dev/zero of=junk
    dd: writing to `junk': No space left on device
    ...
    # sync
    # umount /dev/sdb1

| Varning
This is usually good enough for your USB flash drive. But this is not perfect. Most parts of erased filenames and their attributes may be hidden and remain in the filesystem.

### 9.8.10. Återskapa raderade men fortfarande öppna filer

Även om du av misstag har raderat en fil, så länge filen fortfarande används av något program (läs- eller skrivläge), är det möjligt att återställa en sådan fil.

Försök till exempel med följande

    $ echo foo > bar
    $ less bar
    $ ps aux | grep ' less[ ]'
    bozo    4775  0.0  0.0  92200   884 pts/8    S+   00:18   0:00 less bar
    $ rm bar
    $ ls -l /proc/4775/fd | grep bar
    lr-x------ 1 bozo bozo 64 2008-05-09 00:19 4 -> /home/bozo/bar (deleted)
    $ cat /proc/4775/fd/4 >bar
    $ ls -l
    -rw-r--r-- 1 bozo bozo 4 2008-05-09 00:25 bar
    $ cat bar
    foo

Gör så här på en annan terminal (när du har `lsof-paketet` installerat).

    $ ls -li bar
    2228329 -rw-r--r-- 1 bozo bozo 4 2008-05-11 11:02 bar
    $ lsof |grep bar|grep less
    less 4775 bozo 4r REG 8,3 4 2228329 /home/bozo/bar
    $ rm bar
    $ lsof |grep bar|grep less
    less 4775 bozo 4r REG 8,3 4 2228329 /home/bozo/bar (deleted)
    $ cat /proc/4775/fd/4 >bar
    $ ls -li bar
    2228302 -rw-r--r-- 1 bozo bozo 4 2008-05-11 11:05 bar
    $ cat bar
    foo

### 9.8.11. Söker alla hårda länkar

Filer med hårda länkar kan identifieras med "`ls -li`".

    $ ls -li
    total 0
    2738405 -rw-r--r-- 1 root root 0 2008-09-15 20:21 bar
    2738404 -rw-r--r-- 2 root root 0 2008-09-15 20:21 baz
    2738404 -rw-r--r-- 2 root root 0 2008-09-15 20:21 foo

Både "`baz`" och "`foo`" har länkantal på "2" (>1) vilket visar att de har hårda länkar. Deras inodnummer är gemensamma "2738404". Detta betyder att de är samma hårdlänkade fil. Om du inte råkar hitta alla hårdlänkade filer av en slump kan du söka efter inode, t.ex. "2738404" enligt följande.

    # find /path/to/mount/point -xdev -inum 2738404

### 9.8.12. Osynlig förbrukning av diskutrymme

Alla raderade men öppna filer förbrukar diskutrymme även om de inte är synliga från normal `du`(1). De kan listas med sin storlek på följande sätt.

    # lsof -s -X / |grep deleted

## 9.9. Tips om datakryptering

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.

Tabell 9.25. Lista över verktyg för datakryptering

paket | popcon | storlek | beskrivning
--- | --- | --- | ---
`cryptsetup` | V:30, I:80 | 465 | verktyg för krypterad blockenhet(dm-crypt / LUKS)
`cryptmount` | V:2, I:2 | 231 | verktyg för krypterade blockenheter(dm-crypt / LUKS) med fokus på montering/avmontering av vanliga användare
`fscrypt` | V:0, I:1 | 6471 | verktyg för kryptering av Linux-filsystem(fscrypt)
`libpam-fscrypt` | V:0, I:0 | 5589 | PAM-modul för kryptering av Linux-filsystem(fscrypt)

| 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
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
Se Avsnitt 10.3, ”Infrastruktur för datasäkerhet” för verktyg för kryptering av användarutrymme: GNU Privacy Guard.

### 9.9.1. Kryptering av flyttbara diskar med dm-crypt/LUKS

You can encrypt contents of removable mass devices, e.g. USB flash drive on "`/dev/sdx`", using dm-crypt/LUKS. You simply format it as the following.

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

### 9.9.2. Montering av krypterad disk med dm-crypt/LUKS

En krypterad diskpartition som skapats med dm-crypt/LUKS på "`/dev/sdc5`" av Debian Installer kan t.ex. monteras på "`/mnt`" enligt följande:

    $ sudo cryptsetup open /dev/sdc5 ninja --type luks
    Enter passphrase for /dev/sdc5: ****
    $ sudo lvm
    lvm> lvscan
      inactive          '/dev/ninja-vg/root' [13.52 GiB] inherit
      inactive          '/dev/ninja-vg/swap_1' [640.00 MiB] inherit
      ACTIVE            '/dev/goofy/root' [180.00 GiB] inherit
      ACTIVE            '/dev/goofy/swap' [9.70 GiB] inherit
    lvm> lvchange -a y /dev/ninja-vg/root
    lvm> exit
      Exiting.
    $ sudo mount /dev/ninja-vg/root /mnt

## 9.10. Kärnan

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.

### 9.10.1. Kernel-parametrar

Många Linux-funktioner är konfigurerbara via kärnparametrar enligt följande.

- Kärnparametrar som initieras av bootloader (se Avsnitt 3.1.2, ”Steg 2: startladdaren”)

- Kärnparametrar som ändras av `sysctl`(8) vid körning för de som är tillgängliga via sysfs (se Avsnitt 1.2.12, ”procfs och sysfs”)

- Modulparametrar som ställs in med argument från `modprobe`(8) när en modul aktiveras (se Avsnitt 9.7.3, ”Montering av diskavbildningsfilen”)

Se"Linux-kärnans användar- och administratörshandbok " " Kärnans kommandoradsparametrar" för mer information.

### 9.10.2. Kernel-rubriker

De flesta normala program behöver inte kärnhuvuden och kan i själva verket gå sönder om du använder dem direkt för kompilering. De bör kompileras mot headern i "`/usr/include/linux`" och "`/usr/include/asm`" som tillhandahålls av `libc6-dev-paketet` (skapat från källkodspaketet `glibc` ) på Debian-systemet.

| Notera
För att kompilera vissa kärnspecifika program, t.ex. kärnmoduler från extern källa och automounter-daemon`(amd)`, måste du inkludera sökvägen till motsvarande kärnhuvud, t.ex. "`-I/usr/src/linux-particular-version/include/`", på kommandoraden.

### 9.10.3. Kompilering av kärnan och relaterade moduler

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

Tabell 9.26. Lista över viktiga paket som ska installeras för omkompilering av kärnan på Debian-systemet

paket | popcon | storlek | beskrivning
--- | --- | --- | ---
`build-essential` | I:504 | 17 | nödvändiga paket för att bygga Debian-paket: `make`, `gcc`, …
`bzip2` | V:168, I:972 | 114 | verktyg för komprimering och dekomprimering av bz2-filer
`libncurses5-dev` | I:40 | 6 | utvecklares bibliotek och dokument för ncurses
`git` | V:382, I:597 | 50172 | git: distribuerat revisionskontrollsystem som används av Linux-kärnan
`fakeroot` | V:31, I:507 | 225 | tillhandahålla fakeroot-miljö för att bygga paket som icke-root
`initramfs-tools` | V:479, I:988 | 52 | verktyg för att bygga en initramfs (Debian-specifikt)
`dkms` | V:74, I:146 | 235 | dKMS (dynamiskt stöd för kärnmoduler) (generisk)
`module-assistant` | V:0, I:14 | 391 | hjälpverktyg för att skapa modulpaket (Debian-specifikt)
`devscripts` | V:5, I:33 | 2770 | hjälpskript för en underhållare av Debian-paket (Debian-specifikt)

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

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.

### 9.10.4. Kompilering av kärnkällan: Rekommendation från Debian Kernel Team

För att bygga anpassade binära kärnpaket från uppströms kärnkälla bör du använda "`deb-pkg`"-målet som tillhandahålls av den.

    $ sudo apt-get build-dep linux
    $ cd /usr/src
    $ wget https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-version.tar.xz
    $ tar --xz -xvf linux-version.tar.xz
    $ cd linux-version
    $ cp /boot/config-version .config
    $ make menuconfig
     ...
    $ make deb-pkg

| Tips
Paketet linux-source-version tillhandahåller Linux-kärnkällan med Debian-patchar som "`/usr/src/linux-version.tar.bz2`".

För att bygga specifika binära paket från Debian-kärnans källkodspaket bör du använda målen "`binary-arch_arkitektur_featureset_variant`" i `debian/rules.gen`".

    $ sudo apt-get build-dep linux
    $ apt-get source linux
    $ cd linux-3.*
    $ fakeroot make -f debian/rules.gen binary-arch_i386_none_686

Se ytterligare information:

- Debian Wiki: KernelFAQ

- Debian Wiki: DebianKernel

- Handbok för Debians Linuxkärnor: https://kernel-handbook.debian.net

### 9.10.5. Drivrutiner för hårdvara och firmware

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

## 9.11. Virtualiserat system

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

| Tips
Se Debians wiki om SystemVirtualization.

### 9.11.1. Virtualiserings- och emuleringsverktyg

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:892, I:999 | 18457 | GNU core-verktyg som innehåller `chroot`(8)
`util-linux` | V:897, I:999 | 4384 | miscellaneous system utilities which contain `unshare`(1)
`systemd-container` | V:72, I:76 | 2276 | 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:46 | 330 | starta upp ett grundläggande Debian-system (skrivet i sh)
`mmdebstrap` | V:5, I:10 | 574 | bootstrappa ett Debian-system (skrivet i Perl)
`cdebootstrap` | V:0, I:1 | 114 | bootstrappa ett Debian-system (skrivet i C)
`cloud-image-utils` | V:0, I:14 | 66 | verktyg för bildhantering i molnet
`cloud-guest-utils` | V:4, I:18 | 71 | verktyg för molngäster
`virt-manager` | V:12, I:49 | 2310 | Virtual Machine Manager: skrivbordsprogram för hantering av virtuella maskiner
`libvirt-clients` | V:49, I:72 | 1155 | program för libvirt-biblioteket
`incus` | V:0, I:2 | 21 | Incus: systembehållare och virtuell maskinhanterare
`podman` | V:25, I:29 | 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:44, 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:22 | 80 | QEMU: binärfiler för fullständig systememulering
`qemu-user` | V:5, I:9 | 464225 | QEMU: binärfiler för emulering i användarläge
`qemu-utils` | V:14, I:109 | 12157 | QEMU: verktyg
`qemu-system-x86` | V:53, I:93 | 67511 | KVM: full virtualisering på x86-hårdvara med hårdvaruassisterad virtualisering
`virtualbox` | V:3, I:4 | 151525 | VirtualBox: lösning för x86-virtualisering på i386 och amd64
`gnome-boxes` | V:1, I:6 | 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:14, 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` | V:8, I:136 | 6 | venv för att skapa virtuella pythonmiljöer (systembibliotek)
`python3-virtualenv` | V:8, I:41 | 417 | virtualenv för att skapa isolerade virtuella pythonmiljöer
`pipx` | V:7, I:43 | 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.

### 9.11.2. Arbetsflöde för virtualisering

| Notera
Debians standardkärnor stöder KVM sedan `Lenny`.

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

- Skapa ett tomt filsystem (ett filträd eller en diskavbildning).

  - Filträdet kan skapas genom "`mkdir -p /path/to/chroot`".

  - Den obearbetade diskavbildningsfilen kan skapas med `dd`(1) (se Avsnitt 9.7.1, ”Skapa en diskavbildningsfil” och Avsnitt 9.7.5, ”Skapa en tom diskavbildningsfil”).

  - `qemu-img`(1) kan användas för att skapa och konvertera diskavbildningsfiler som stöds av QEMU.

  - Filformaten raw och VMDK kan användas som gemensamma format bland virtualiseringsverktyg.

- Montera diskavbildningen med `mount`(8) till filsystemet (valfritt).

  - För den råa diskavbildningsfilen, montera den som loop-enhet eller enhetsmappningsenheter (se Avsnitt 9.7.3, ”Montering av diskavbildningsfilen”).

  - För diskavbildningar som stöds av QEMU, montera dem som nätverksblockenheter (se Avsnitt 9.11.3, ”Montering av avbildningsfilen för den virtuella disken”).

- Fyll på målfilsystemet med nödvändiga systemdata.

  - Användningen av program som `debootstrap` och `cdebootstrap` hjälper till med denna process (se Avsnitt 9.11.4, ”Chroot-system”).

  - Använd installatörer av operativsystem under fullständig systememulering.

- Kör ett program i en virtualiserad miljö.

  - chroot ger en grundläggande virtualiserad miljö som är tillräcklig för att kompilera program, köra konsolprogram och köra daemoner i den.

  - QEMU tillhandahåller CPU-emulering över flera plattformar.

  - QEMU med KVM ger fullständig systememulering genom maskinvaruassisterad virtualisering.

  - VirtualBox tillhandahåller fullständig systememulering på i386 och amd64 med eller utan maskinvarustödd virtualisering.

### 9.11.3. Montering av avbildningsfilen för den virtuella disken

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
Du kan exportera endast den första partitionen i "`disk.img`" genom att använda alternativet "`-P 1`" i `qemu-nbd`(8).

### 9.11.4. Chroot-system

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

### 9.11.5. Flera skrivbordssystem

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

Kapitel 8. I18N och L10N |  | Kapitel 10. Datahantering