Kapitel 9. Tips för systemet

InnehÄllsförteckning

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

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

Det finns nÄgra verktygsprogram som hjÀlper dig med konsolaktiviteterna.


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

$ script
Script started, file is typescript

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

$ col -bx < typescript > cleanedfile
$ vim cleanedfile

Det finns alternativa metoder för att registrera skalaktiviteterna:

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

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

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

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

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

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

  1. Du loggar in pÄ en fjÀrrmaskin.

  2. Du startar skÀrmen pÄ en enda konsol.

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

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

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

  6. Du kan ta bort skÀrmsessionen pÄ valfritt sÀtt.

    • Brutalt koppla bort din nĂ€tverksanslutning

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

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

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

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

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

[Tips] Tips

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

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


Se screen(1) för mer information.

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

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

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

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

Till exempel:

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

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

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

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

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

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

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

[Observera] Observera

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

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

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

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

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

Intressanta externa plugin-paket kan hittas:

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

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

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

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

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

  • Vim laddar dessa paket pĂ„ runtimepath under initialiseringen.

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

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

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


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

[Tips] Tips

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

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


[Tips] 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'

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

Försök till exempel med följande

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

Du kan spela in redigeringsaktiviteterna för komplexa upprepningar.

För Vim, enligt följande.

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

  • ... redaktörsverksamhet

  • "q": avsluta inspelning av skrivna tecken.

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

För Emacs, enligt följande.

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

  • ... redaktörsverksamhet

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

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

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

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

paket popcon storlek beskrivning
coreutils V:897, I:1000 17994 nice(1): kör ett program med Àndrad schemalÀggningsprioritet
bsdutils V:443, I:999 335 renice(1): Àndra schemalÀggningsprioriteten för en process som körs
procps V:822, 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:6, I:85 129 time(1): kör ett program för att rapportera hur systemresurser anvÀnds med avseende pÄ tid
sysstat V:124, I:163 1904 sar(1), iostat(1), mpstat(1), ...: verktyg för systemprestanda för Linux
isag V:0.1, I:3.3 109 Interactive System Activity Grapher för sysstat
lsof V:445, I:950 492 lsof(8): lista filer som öppnats av en pÄgÄende process med alternativet "-p"
strace V:10, I:104 3253 strace(1): spÄra systemanrop och signaler
ltrace V:1, I:12 420 ltrace(1): spÄra anrop till bibliotek
xtrace V:0.06, I:0.69 353 xtrace(1): spÄra kommunikationen mellan X11-klient och server
powertop V:34, I:231 696 powertop(1): information om systemets strömförbrukning
cron V:907, I:997 250 kör processer enligt ett schema i bakgrunden frÄn cron(8)-daemon
anacron V:421, I:492 112 cron-liknande kommandoschemalÀggare för system som inte körs 24 timmar om dygnet
at V:74, I:101 158 at(1) eller batch(1): kör ett jobb vid en angiven tidpunkt eller under en viss belastningsnivÄ

[Tips] Tips

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

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

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

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

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

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

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

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

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

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

[Desktop Entry]
Version=1.0
Name=Chromium Web Browser
GenericName=Web Browser
Comment=Access the Internet
Comment[fr]=Explorer le Web
Exec=/usr/bin/chromium %U
Terminal=false
X-MultipleArgs=false
Type=Application
Icon=chromium
Categories=Network;WebBrowser;
MimeType=text/html;text/xml;application/xhtml_xml;x-scheme-handler/http;x-scheme-handler/https;
StartupWMClass=Chromium
StartupNotify=true

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

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

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

  • /usr/share/ → /usr/share/applications/

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

[Tips] Tips

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

[Tips] Tips

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

[Tips] Tips

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

[Tips] Tips

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

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

[Tips] Tips

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

[Tips] Tips

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

[Tips] Tips

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

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

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

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

HÀr Àr ett exempel pÄ en crontab(5)-fil.

# use /usr/bin/sh to run commands, no matter what /etc/passwd says
SHELL=/bin/sh
# mail any output to paul, no matter whose crontab this is
MAILTO=paul
# Min Hour DayOfMonth Month DayOfWeek command (Day... are OR'ed)
# run at 00:05, every day
5  0  *  * *   $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# run at 14:15 on the first of every month -- output mailed to paul
15 14 1  * *   $HOME/bin/monthly
# run at 22:00 on weekdays(1-5), annoy Joe. % for newline, last % for cc:
0 22 *   * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%.%%
23 */2 1 2 *   echo "run 23 minutes after 0am, 2am, 4am ..., on Feb 1"
5  4 *   * sun echo "run at 04:05 every Sunday"
# run at 03:40 on the first Monday of each month
40 3 1-7 * *   [ "$(date +%a)" == "Mon" ] && command -args
[Tips] Tips

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

[Tips] Tips

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

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

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


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

[Tips] Tips

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

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

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

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

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

  • 16 = 0x10 - aktivera synkroniseringskommando (ON)

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

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

  • 128 = 0x80 - TillĂ„t omstart/avstĂ€ngning (ON)

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

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


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

[Tips] Tips

Skalning av CPU-frekvens pÄ moderna system styrs av kÀrnmoduler som t.ex. acpi_cpufreq.

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

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

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

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

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

# dpkg-reconfigure tzdata

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

[Tips] Tips

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

Se följande.

[Tips] Tips

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

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

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

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

[Tips] Tips

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

[Tips] Tips

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


DÄligt systemunderhÄll kan utsÀtta ditt system för extern exploatering.

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


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

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

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

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.

[Notera] Notera

Statements on hard disk (HDD) are applicable to other storage devices such as SSD / USB flash drive / Memory card / ... . Replace device names in examples such as /dev/sda with applicable device names /dev/nvme0, /dev/mmcblk0, ... .

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

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

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

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

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


[Observera] Observera

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

[Notera] Notera

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

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

LVM krÀver följande.

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

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

  • lVM2-verktygen i anvĂ€ndarutrymmet(lvm2-paketet)

Börja med att lÀra dig LVM2 frÄn följande manpages.

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

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

  • lvs(8): Rapportera information om logiska volymer

  • vgs(8): Rapportera information om volymgrupper

  • pvs(8): Rapportera information om fysiska volymer

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

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

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

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

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

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

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


[Tips] Tips

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

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

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

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

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

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

  1. Aktivera SMART-funktionen i BIOS.

  2. Installera paketet smartmontools.

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

    • LĂ„t oss anta att en hĂ„rddisk som ska övervakas heter "/dev/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] Tips

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

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

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

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

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

HĂ€r diskuterar vi manipuleringar av diskavbildningen.

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.

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

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

Detta kan förenklas pÄ följande sÀtt.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[Tips] Tips

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

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

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

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

HÀr diskuterar vi direkta manipulationer av binÀrdata pÄ lagringsmedia.

Det finns verktyg för ÄterstÀllning av datafiler och kriminalteknisk analys.


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

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

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

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

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

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


[Observera] Observera

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

[Notera] Notera

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

[Tips] Tips

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

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.

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

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

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


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

[Varning] Varning

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

[Notera] Notera

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

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

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

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

  • GPU-drivrutin

    • Intel GPU-drivrutin (main)

    • AMD/ATI GPU-drivrutin (main)

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

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

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

    • firmware-linux-free (main)

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

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

    • *-firmware(icke-fri-firmware)

    • intel-mikrokod(icke-fri firmware)

    • amd64-mikrokod(icke-fri firmware)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • OS API-emulering som till exempel Wine

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

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

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

Tabell 9.27. Lista över virtualiseringsverktyg

paket popcon storlek beskrivning
coreutils V:897, I:1000 17994 GNU core-verktyg som innehÄller chroot(8)
util-linux V:902, I:1000 4384 miscellaneous system utilities which contain unshare(1)
systemd-container V:74, I:77 2458 systemd container/nspawn verktyg som innehÄller systemd-nspawn(1)
schroot V:5.6, I:7.2 2222 specialiserat verktyg för att köra Debians binÀra paket i chroot
sbuild V:1.3, I:4.4 157 verktyg för att bygga binÀra Debian-paket frÄn Debian-kÀllor
debootstrap V:5, I:46 330 starta upp ett grundlÀggande Debian-system (skrivet i sh)
mmdebstrap V:6, I:11 574 bootstrappa ett Debian-system (skrivet i Perl)
cdebootstrap V:0.1, I:1.4 114 bootstrappa ett Debian-system (skrivet i C)
cloud-image-utils V:1, I:15 66 verktyg för bildhantering i molnet
cloud-guest-utils V:4, I:19 71 verktyg för molngÀster
virt-manager V:13, I:50 2310 Virtual Machine Manager: skrivbordsprogram för hantering av virtuella maskiner
libvirt-clients V:50, I:72 1155 program för libvirt-biblioteket
docker.io V:46, I:49 98998 docker: Körprogram för Linux-containrar
podman V:27, I:30 81828 podman: motor för att köra OCI-baserade behÄllare i Pods
podman-docker V:2.3, I:2.8 275 motor för att köra OCI-baserade containrar i Pods - wrapper för docker
incus V:0.7, I:2.6 21 Incus: systembehÄllare och virtuell maskinhanterare
games-emulator I:0.20 21 spel-emulator: Debians emulatorer för spel
bochs V:0.06, I:0.74 8180 Bochs: IA-32 PC-emulator
qemu-system I:22 80 QEMU: binÀrfiler för fullstÀndig systememulering
qemu-user V:5.5, I:9.2 464225 QEMU: binÀrfiler för emulering i anvÀndarlÀge
qemu-utils V:14, I:110 12157 QEMU: verktyg
qemu-system-x86 V:54, I:94 67511 KVM: full virtualisering pÄ x86-hÄrdvara med hÄrdvaruassisterad virtualisering
virtualbox V:3.9, I:4.7 151525 VirtualBox: lösning för x86-virtualisering pÄ i386 och amd64
gnome-boxes V:1.4, I:7.1 6847 LÄdor: Enkel GNOME-app för Ätkomst till virtuella system
xen-tools V:0.1, I:1.6 719 verktyg för att hantera debian XEN virtuell server
wine V:14, I:58 204 Vin: Implementering av Windows API (standardpaket)
dosbox V:2, I:13 2697 DOSBox: x86-emulator med Tandy/Herc/CGA/EGA/VGA/SVGA-grafik, ljud och DOS
lxc V:10, I:12 1627 Linux-containrar verktyg för anvÀndarutrymme
python3-venv V:9, I:139 6 venv för att skapa virtuella pythonmiljöer (systembibliotek)
python3-virtualenv V:8, I:42 417 virtualenv för att skapa isolerade virtuella pythonmiljöer
pipx V:7, I:44 3613 pipx för installation av python-program i isolerade miljöer

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

[Notera] Notera

Debians standardkÀrnor stöder KVM sedan Lenny.

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

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

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

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

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

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

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

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

[Observera] Observera

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

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

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

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

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

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

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

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

[Notera] Notera

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

[Notera] Notera

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

[Tips] Tips

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

[Tips] Tips

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

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

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

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

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

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

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

Se fler tips pÄ Debians wiki: SystemVirtualisering.



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

[3] vim-pathogen var populÀr.