Cap. 9. Sfaturi privind sistemul

Cuprins

9.1. Sfaturi pentru consolă
9.1.1. Înregistrarea activităților shell în mod curat
9.1.2. Programul «screen»
9.1.3. Navigarea între directoare
9.1.4. Readline wrapper (învăluitorul «readline»)
9.1.5. Scanarea arborelui codului sursă
9.2. Personalizarea vim
9.2.1. Personalizarea vim cu caracteristicile interne
9.2.2. Personalizarea vim cu pachete externe
9.3. Înregistrarea și prezentarea datelor
9.3.1. Demonul de jurnalizare
9.3.2. Analizator de jurnale
9.3.3. Afișarea personalizată a datelor textuale
9.3.4. Afișare personalizată a orei și datei
9.3.5. Ecou colorat al shell-ului
9.3.6. Comenzi colorate
9.3.7. Înregistrarea activităților editorului pentru repetări complexe
9.3.8. Înregistrarea imaginii grafice a unei aplicații X
9.3.9. Înregistrarea modificărilor din fișierele de configurare
9.4. Monitorizarea, controlul și inițierea activităților programului
9.4.1. Cronometrarea unui proces
9.4.2. Prioritatea de planificare
9.4.3. Comanda «ps»
9.4.4. Comanda «top»
9.4.5. Listarea fișierelor deschise de un proces
9.4.6. Urmărirea activităților programului
9.4.7. Identificarea proceselor care utilizează fișiere sau socluri
9.4.8. Repetarea unei comenzi la intervale constante
9.4.9. Repetarea unei comenzi care parcurge fișierele
9.4.10. Pornirea unui program din interfața grafică
9.4.11. Personalizarea programului care urmează să fie pornit
9.4.12. Omorârea unui proces
9.4.13. Programarea sarcinilor o singură dată
9.4.14. Programarea regulată a sarcinilor
9.4.15. Programarea sarcinilor la eveniment
9.4.16. Tasta Alt-SysRq
9.5. Sfaturi pentru întreținerea sistemului
9.5.1. Cine este în sistem?
9.5.2. Avertisment pentru toată lumea
9.5.3. Identificarea hardware-ului
9.5.4. Configurația hardware
9.5.5. Ora sistemului și ora hardware-ului
9.5.6. Configurația terminalului
9.5.7. Infrastructura de sunet
9.5.8. Dezactivarea protectorului de ecran
9.5.9. Dezactivarea bipurilor sonore
9.5.10. Utilizare memorie
9.5.11. Verificarea securității și integrității sistemului
9.6. Sfaturi pentru stocarea datelor
9.6.1. Utilizarea spațiului pe disc
9.6.2. Configurarea partițiilor de disc
9.6.3. Accesarea partiției folosind UUID
9.6.4. LVM2
9.6.5. Configurarea sistemului de fișiere
9.6.6. Crearea sistemului de fișiere și verificarea integrității
9.6.7. Optimizarea sistemului de fișiere prin opțiuni de montare
9.6.8. Optimizarea sistemului de fișiere prin super-bloc
9.6.9. Optimizarea discului dur
9.6.10. Optimizarea discului cu stare solidă
9.6.11. Utilizarea SMART pentru a prezice defectarea discului dur
9.6.12. Specificați directorul de stocare temporară prin $TMPDIR
9.6.13. Extinderea spațiului de stocare utilizabil prin LVM
9.6.14. Extinderea spațiului de stocare utilizabil prin montarea unei alte partiții
9.6.15. Extinderea spațiului de stocare utilizabil prin montarea unui alt director
9.6.16. Extinderea spațiului de stocare utilizabil prin montarea suprapusă a unui alt director
9.6.17. Extinderea spațiului de stocare utilizabil folosind legături simbolice
9.7. Imaginea discului
9.7.1. Crearea fișierului imagine de disc
9.7.2. Scrierea direct pe disc
9.7.3. Montarea fișierului imagine disc
9.7.4. Curățarea unui fișier imagine de disc
9.7.5. Crearea fișierului imagine de disc gol
9.7.6. Crearea fișierului imagine ISO9660
9.7.7. Scrierea în mod direct pe CD/DVD-R/RW
9.7.8. Montarea fișierului imagine ISO9660
9.8. Datele binare
9.8.1. Vizualizarea și editarea datelor binare
9.8.2. Manipularea fișierelor fără montarea discului
9.8.3. Redundanța datelor
9.8.4. Recuperarea fișierelor de date și analiza tehnico-criminalistică
9.8.5. Împărțirea unui fișier mare în fișiere mici
9.8.6. Ștergerea conținutului fișierului
9.8.7. Fișiere fictive
9.8.8. Ștergerea întregului disc dur
9.8.9. Ștergerea zonei neutilizate a unui disc dur
9.8.10. Recuperarea fișierelor șterse, dar încă deschise
9.8.11. Căutarea tuturor legăturilor dure
9.8.12. Consum invizibil de spațiu pe disc
9.9. Sfaturi pentru criptarea datelor
9.9.1. Criptarea discurilor amovibile cu dm-crypt/LUKS
9.9.2. Montarea discului criptat cu dm-crypt/LUKS
9.10. Nucleul
9.10.1. Parametrii nucleului
9.10.2. Antetele nucleului
9.10.3. Compilarea nucleului și a modulelor aferente
9.10.4. Compilarea sursei nucleului: Recomandarea echipei Debian Kernel
9.10.5. Controlori hardware și firmware
9.11. Sistem virtualizat
9.11.1. Instrumente de virtualizare și emulare
9.11.2. Fluxul de lucru pentru virtualizare
9.11.3. Montarea fișierului imagine al discului virtual
9.11.4. Sistemul chroot
9.11.5. Mai multe sisteme de medii de birou

Aici, descriu sfaturi de bază pentru configurarea și gestionarea sistemelor, în principal din consolă.

Există câteva programe utilitare care vă ajută în activitățile cu consola.


Utilizarea simplă a script(1) (vezi Secțiune 1.4.9, „Înregistrarea activităților shell-ului”) pentru a înregistra activitatea shell-ului produce un fișier cu caractere de control. Acest lucru poate fi evitat utilizând col(1) după cum urmează.

$ script
Script started, file is typescript

Faceți orice ... și apăsați Ctrl-D pentru a ieși din script.

$ col -bx < typescript > cleanedfile
$ vim cleanedfile

Există metode alternative pentru înregistrarea activităților din shell:

  • Utilizați tee (utilizabil în timpul procesului de pornire din initramfs):

    $ sh -i 2>&1 | tee typescript
  • Utilizați gnome-terminal cu tamponul de linie extins pentru derulare înapoi.

  • Utilizați screen cu „^A H” (consultați Secțiune 9.1.2, „Programul «screen»”) pentru a efectua înregistrarea consolei.

  • Utilizați vim cu „:terminal” pentru a intra în modul terminal. Utilizați „Ctrl-W N” pentru a ieși din modul terminal și a reveni la modul normal. Utilizați „:w typescript” pentru a scrie conținutul memoriei tampon într-un fișier.

  • Utilizați emacs cu „M-x shell”, „M-x eshell” sau „M-x term” pentru a intra în consola de înregistrare. Utilizați „C-x C-w” pentru a scrie conținutul memoriei tampon într-un fișier.

screen(1) nu numai că permite unei ferestre de terminal să lucreze cu mai multe procese, dar permite și procesului shell de la distanță să supraviețuiască conexiunilor întrerupte. Iată un scenariu tipic de utilizare a screen(1).

  1. Vă conectați la o mașină de la distanță.

  2. Porniți screen pe o singură consolă.

  3. Executați mai multe programe în ferestrele screen create cu ^A c («Control-A» urmat de «c»).

  4. Comutați între mai multe ferestre screen folosind comanda ^A n («Control-A» urmat de «n»).

  5. Dintr-o dată trebuie să părăsiți terminalul, dar nu doriți să pierdeți munca activă menținând conexiunea.

  6. Puteți detașa sesiunea screen prin orice metodă.

    • Deconectați brutal conexiunea la rețea

    • Tastați ^A d («Control-A» urmat de «d») și deconectați-vă manual de la conexiunea de la distanță

    • Tastați ^A DD («Control-A» urmat de «DD») pentru a detașa screen și a vă deconecta

  7. Vă conectați din nou la aceeași mașină de la distanță (chiar și de la un terminal diferit).

  8. Porniți screen ca „screen -r”.

  9. screen reatașează în mod magic toate ferestrele screen anterioare cu toate programele care rulează în mod activ.

[Indicație] Indicație

Puteți economisi costurile de conectare cu screen pentru conexiunile de rețea contorizate, cum ar fi cele dial-up și cele pe pachete, deoarece puteți lăsa un proces activ în timp ce sunteți deconectat și apoi îl puteți reatașa mai târziu, când vă conectați din nou.

Într-o sesiune screen, toate introducerile de la tastatură sunt trimise către fereastra curentă, cu excepția tastelor de comandă. Toate tastele de comandă screen sunt introduse tastând ^A («Control-A») plus o singură tastă [plus orice parametri]. Iată câteva dintre cele mai importante de reținut.


Pentru detalii, consultați screen(1).

Consultați tmux(1) pentru funcționalitățile comenzii alternative.

În Secțiune 1.4.2, „Personalizarea bash” sunt descrise două sfaturi care permit navigarea rapidă între directoare: $CDPATH și mc.

Dacă utilizați un program de filtrare a textului aproximativ, puteți renunța la introducerea rutei exacte. Pentru fzf, includeți următoarele în ~/.bashrc.

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

De exemplu:

  • Puteți salta într-un subdirector foarte adânc cu eforturi minime. Mai întâi tastați „cd **” și apăsați Tab. Apoi vi se vor afișa rutele candidate. Tastând șiruri parțiale de rută, de exemplu, s/d/b foo, veți restrânge rutele candidate. Selectați ruta care va fi utilizată de cd cu ajutorul tastelor cursor și «Enter».

  • Puteți selecta o comandă din istoricul comenzilor mai eficient, cu eforturi minime. Apăsați Ctrl-R la promptul de comandă. Apoi vi se vor afișa comenzile candidate. Tastând șiruri parțiale de comenzi, de exemplu vim d, veți restrânge numărul de comenzi candidate. Selectați comanda dorită cu ajutorul cursorului și tastelor de returnare.

După ce învățați noțiunile de bază ale vim(1) prin Secțiune 1.4.8, „Utilizarea editorului vim”, vă rugăm să citiți articolul lui Bram Moolenaar „Seven habits of effective text editing (2000)” (Șapte obiceiuri pentru o editare eficientă a textului) pentru a înțelege cum trebuie utilizat vim.

Comportamentul vim poate fi modificat semnificativ prin activarea caracteristicilor sale interne prin intermediul comenzilor Ex-mode, cum ar fi „set ...” pentru a defini opțiunile vim.

Aceste comenzi în modul Ex pot fi incluse în fișierul vimrc al utilizatorului, tradiționalul „~/.vimrc” sau „~/.vim/vimrc”, compatibil cu git. Iată un exemplu foarte simplu [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

Harta tastelor din vim poate fi modificată în fișierul vimrc al utilizatorului. De exemplu:

[Atenție] Atenție

Nu încercați să modificați combinațiile de taste implicite fără motive întemeiate.

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

Pentru ca combinațiile de taste de mai sus să funcționeze corect, programul de terminal trebuie configurat să genereze „ASCII DEL” pentru tasta Backspace și „Secvență de eludare” pentru tasta Delete.

Alte configurații diverse pot fi modificate în fișierul vimrc al utilizatorului. De exemplu:

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

Se pot găsi pachete de module de extensii externe interesante:

Pachetele de module de extensie din pacheul vim-scripts pot fi activate folosind fișierul vimrc al utilizatorului. De exemplu:

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

Noul sistem nativ de pachete Vim funcționează bine cu „git” și „git submodule”. Un astfel de exemplu de configurare poate fi găsit în depozitul meu git: dot-vim. Acesta face în esență următoarele:

  • Folosind „git” și „git submodule”, cele mai recente pachete externe, precum „nume”, sunt plasate în ~/.vim/pack/*/opt/nume și similare.

  • Prin adăugarea liniei :packadd! nume în fișierul vimrc al utilizatorului, aceste pachete sunt plasate în runtimepath.

  • Vim încarcă aceste pachete în runtimepath în timpul inițializării.

  • La finalul inițializării, etichetele pentru documentele instalate sunt actualizate cu „helptags ALL”.

Pentru mai multe informații, porniți vim cu „vim --startuptime vimstart.log” pentru a verifica secvența reală de execuție și timpul utilizat pentru fiecare etapă.

Este destul de confuz să vezi prea multe modalități[3] de a gestiona și încărca aceste pachete externe în vim. Verificarea informațiilor originale este cea mai bună soluție.


Deși instrumentele de paginare precum more(1) și less (1) (a se vedea Secțiune 1.4.5, „Paginatorul”) și instrumentele personalizate pentru evidențiere și formatare (a se vedea Secțiune 11.1.8, „Highlighting and formatting plain text data”) pot afișa datele de text într-un mod plăcut, editorii de uz general (a se vedea Secțiune 1.4.6, „Editorul de text”) sunt cei mai versatili și cei care pot fi cel mai mult personalizați.

[Indicație] Indicație

Pentru vim(1) și pseudonimul său pentru modul de paginator view(1), „:set hls” activează căutarea evidențiată.

Formatul implicit de afișare a orei și datei de către comanda „ls -l” depinde de configurația regională (vedeți Secțiune 1.2.6, „Marcaje de timp” pentru valoare). Variabila „$LANG” este consultată prima și poate fi suprascrisă de variabilele de mediu exportate „$LC_TIME” sau „$LC_ALL”.

Formatul de afișare implicit pentru fiecare configurație regională depinde de versiunea bibliotecii standard C (pachetul libc6) utilizată. Adică, versiunile diferite ale Debian aveau configurații implicite diferite. Pentru formatele iso, consultați ISO 8601.

Dacă doriți cu adevărat să personalizați acest format de afișare a datei și orei dincolo de configurația regională, trebuie să definiți valoarea stilului de afișare a datei și orei prin argumentul „ --time-style” sau prin valoarea „$TIME_STYLE” (consultați ls(1), date(1), «info coreutils 'ls invocation'»).


[Indicație] Indicație

Puteți elimina introducerea opțiunilor lungi în linia de comandă utilizând un alias de comandă (consultați Secțiune 1.5.9, „Alias de comandă”):

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

Ecoul Shell pentru majoritatea terminalelor moderne poate fi colorat folosind codul de eludare ANSI (vedeți „/usr/share/doc/xterm/ctlseqs.txt.gz”).

De exemplu, încercați următoarele

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

Puteți înregistra activitățile editorului pentru repetări complexe.

Pentru Vim, procedați după cum urmează.

  • «qa»: începe înregistrarea caracterelor tastate în registrul numit „a”.

  • … activități ale editorului

  • «q»: încheie înregistrarea caracterelor tastate.

  • «@a»: execută conținutul registrului „a”.

Pentru Emacs, procedați după cum urmează.

  • «C-x (»: începe definirea unei macrocomenzi pentru tastatură.

  • … activități ale editorului

  • «C-x )»: încheie definirea macrocomenzii pentru tastatură.

  • «C-x e»: execută o macrocomandă pentru tastatură.

Activitățile programului pot fi monitorizate și controlate folosind instrumente specializate.

Tabel 9.8. Lista instrumentelor pentru monitorizarea și controlul activităților programului

pachet popcon(popularitate) dimensiune descriere
coreutils V:892, I:999 18457 nice(1): rulează un program cu prioritate de planificare modificată
bsdutils V:439, I:999 335 renice(1): modifică prioritatea de planificare a unui proces în execuție
procps V:818, I:998 2404 Utilități ale sistemului de fișiere „/proc”: ps(1), top(1), kill(1), watch(1), …
psmisc V:410, I:742 950 Utilități ale sistemului de fișiere „/proc”: killall(1), fuser(1), peekfd(1), pstree(1)
time V:5, I:85 129 time(1): rulează un program pentru a raporta utilizarea resurselor sistemului în funcție de timp
sysstat V:123, I:162 1904 sar(1), iostat(1), mpstat(1), …: instrumente de performanță a sistemului pentru Linux
isag V:0, I:3 109 Grafic interactiv al activității sistemului pentru sysstat
lsof V:443, I:949 492 lsof(8): listează fișierele deschise de un proces în execuție folosind opțiunea „-p
strace V:10, I:103 3253 strace(1): urmărește apelurile de sistem și semnalele
ltrace V:0, I:11 420 ltrace(1): trasează apelurile către bibliotecă
xtrace V:0, I:0 353 xtrace(1): trasează comunicarea între clientul X11 și server
powertop V:33, I:232 696 powertop(1): informații despre consumul de energie al sistemului
cron V:901, I:996 250 rulează procesele conform unei programări în fundal din cron(8) daemon
anacron V:418, I:493 112 programator de comenzi de tip cron pentru sisteme care nu funcționează 24 de ore pe zi
at V:74, I:102 158 at(1) sau batch(1): execută o sarcină la o oră specificată sau sub un anumit nivel de încărcare

[Indicație] Indicație

Pachetele procps oferă elementele de bază pentru monitorizarea, controlul și pornirea activităților programelor. Ar trebui să le învățați pe toate.

Există mai multe moduri de a repeta o comandă care parcurge fișierele care corespund unei anumite condiții, de exemplu, care corespund modelului global (cu caracter joker) „*.ext”.

for x in *.ext; do if [ -f "$x"]; then command "$x" ; fi; done
  • combinația find(1) și xargs(1):

find . -type f -maxdepth 1 -name '*.ext' -print0 | xargs -0 -n 1 command
  • find(1) cu opțiunea „-exec” cu o comandă:

find . -type f -maxdepth 1 -name '*.ext' -exec command '{}' \;
  • find(1) cu opțiunea „-exec” cu un script shell scurt:

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

Exemplele de mai sus sunt scrise pentru a asigura gestionarea corectă a numelor de fișiere ciudate, cum ar fi cele care conțin spații. Consultați Secțiune 10.1.5, „Idioms for the selection of files” pentru utilizări mai avansate ale find(1).

Pentru interfața de linie de comandă („command-line interface”: CLI), se execută primul program cu numele corespunzător găsit în directoarele specificate în variabila de mediu $PATH. Consultați Secțiune 1.5.3, „Variabila „$PATH””.

Pentru interfața grafică cu utilizatorul („graphical user interface”: GUI) conformă cu standardele freedesktop.org, fișierele *.desktop din directorul /usr/share/applications/ furnizează atributele necesare pentru afișarea meniului GUI al fiecărui program. Fiecare pachet care este compatibil cu sistemul de meniuri xdg al Freedesktop.org instalează datele de meniu furnizate de „*.desktop” în „/usr/share/applications/”. Mediile grafice de birou moderne care sunt compatibile cu standardul Freedesktop.org utilizează aceste date pentru a genera meniul lor folosind pachetul xdg-utils. Consultați „/usr/share/doc/xdg-utils/README”.

De exemplu, fișierul chromium.desktop definește atributele pentru „Navigatorul Web Chromium”, cum ar fi „Name” pentru numele programului, „Exec” pentru ruta de execuție și argumentele programului, „Icon” pentru pictograma utilizată etc. (consultați Descriptorul de intrare desktop) după cum urmează:

[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

Aceasta este o descriere simplificată. Fișierele *.desktop sunt scanate după cum urmează.

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

  • variabila $XDG_DATA_HOME nu este definită; (se utilizează valoarea implicită $HOME/.local/share)

  • variabila $XDG_DATA_DIRS este definită ca /usr/share/gnome:/usr/local/share/:/usr/share/

Astfel, directoarele de bază (a se vedea XDG Base Directory Specification) și directoarele de aplicații sunt următoarele.

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

Fișierele *.desktop sunt scanate în aceste directoare de aplicații în această ordine.

[Indicație] Indicație

O intrare personalizată în meniul GUI poate fi creată prin adăugarea unui fișier *.desktop în directorul $HOME/.local/share/applications/.

[Indicație] Indicație

Linia „Exec=...” nu este analizată de shell. Utilizați comanda env(1) dacă trebuie să fie definite variabile de mediu.

[Indicație] Indicație

În mod similar, dacă un fișier *.desktop este creat în directorul autostart din aceste directoare de bază, programul specificat în fișierul *.desktop este executat automat la pornirea mediului de birou. Consultați Desktop Application Autostart Specification.

[Indicație] Indicație

În mod similar, dacă un fișier *.desktop este creat în directorul $HOME/Desktop și mediul grafic de birou este configurat să accepte funcția de lansare a pictogramelor de pe birou, programul specificat în acesta este executat la efectuarea unui clic cu mouse-ul pe pictogramă. Rețineți că numele real al directorului $HOME/Desktop depinde de configurația regională. Consultați xdg-user-dirs-update(1).

Unele programe pornesc automat un alt program. Iată câteva puncte de verificare pentru personalizarea acestui proces.

[Indicație] Indicație

update-mime(8) actualizează fișierul „/etc/mailcap” folosind fișierul „/etc/mailcap.order” (a se vedea mailcap.order(5)).

[Indicație] Indicație

Pachetul debianutils oferă sensible-browser(1), sensible-editor(1) și sensible-pager(1), care iau decizii rezonabile cu privire la editorul, paginatorul și navigatorul web care trebuie apelate. Vă recomand să citiți aceste scripturi shell.

[Indicație] Indicație

Pentru a rula o aplicație de consolă precum mutt sub GUI ca aplicație preferată, trebuie să creați o aplicație cu interfață grafică după cum urmează și să definiți „/usr/local/bin/mutt-term” ca aplicație preferată care să fie pornită conform descrierii.

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

Utilizați cron(8) pentru a programa sarcini în mod regulat. Consultați crontab(1) și crontab(5).

Puteți programa rularea proceselor ca utilizator normal, de exemplu foo, creând un fișier crontab(5) ca „/var/spool/cron/crontabs/foo” cu comanda „crontab -e”.

Iată un exemplu de fișier crontab(5).

# 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
[Indicație] Indicație

Pentru ca sistemul să nu funcționeze continuu, instalați pachetul anacron pentru a programa comenzi periodice la intervale specificate, pe cât posibil în funcție de timpul de funcționare al mașinii. Consultați anacron(8) și anacrontab(5).

[Indicație] Indicație

Pentru scripturile de întreținere programată a sistemului, le puteți rula periodic din contul root, plasând astfel de scripturi în „/etc/cron.hourly/”, „/etc/cron.daily/”, „/etc/cron.weekly/” sau „/etc/cron.monthly/”. Momentele de execuție ale acestor scripturi pot fi personalizate prin „/etc/crontab” și „/etc/anacrontab”.

Systemd are capacitatea de nivel inferior de a programa rularea programelor fără demonul cron. De exemplu, /lib/systemd/system/apt-daily.timer și /lib/systemd/system/apt-daily.service configurează activitățile zilnice de descărcare apt. Consultați systemd.timer(5) .

Systemd poate programa programul nu numai pe evenimentul cronometrat, ci și pe evenimentul de montare. Consultați Secțiune 10.2.3.3, „Timer event triggered backup” și Secțiune 10.2.3.2, „Mount event triggered backup” pentru exemple.

Apăsarea tastelor Alt-SysRq (PrtScr) urmată de o singură tastă face minunea de a recupera controlul asupra sistemului.


Vedeți mai multe în Linux kernel user’s and administrator’s guide » Linux Magic System Request Key Hacks

[Indicație] Indicație

Din terminalul SSH etc., puteți utiliza funcția Alt-SysRq scriind în „/proc/sysrq-trigger”. De exemplu, „echo s > /proc/sysrq-trigger; echo u > /proc/sysrq-trigger” din promptul shell-ului root sincronizează și udemontează toate sistemele de fișiere montate.

Nucleul Linux Debian amd64 actual (2021) are /proc/sys/kernel/sysrq=438=0b110110110:

  • 2 = 0x2 - activează controlul nivelului de înregistrare în jurnalul consolei (ACTIVAT)

  • 4 = 0x4 - activează controlul tastaturii (SAK, unraw) (ACTIVAT)

  • 8 = 0x8 - activează dump-urile de depanare ale proceselor etc. (DEZACTIVAT)

  • 16 = 0x10 - activează comanda de sincronizare (ACTIVAT)

  • 32 = 0x20 - activează remontarea numai pentru citire (ACTIVAT)

  • 64 = 0x40 - activează semnalizarea proceselor (term, kill, oom-kill) (dezactivat)

  • 128 = 0x80 - permite repornirea/oprirea (ACTIVAT)

  • 256 = 0x100 - permite optimizarea tuturor sarcinilor RT (ACTIVAT)

Deși majoritatea configurațiilor hardware ale sistemelor grafice de birou moderne, precum GNOME și KDE, pot fi gestionate prin intermediul instrumentelor de configurare grafice însoțitoare, este recomandabil să cunoașteți câteva metode de bază pentru configurarea acestora.


Aici, ACPI este un cadru mai nou pentru sistemul de gestionare a energiei decât APM.

[Indicație] Indicație

Scalarea frecvenței procesorului pe sistemele moderne este controlată de module ale nucleului, precum acpi_cpufreq.

Următoarele stabilesc ora sistemului și a hardware-ului la MM/DD hh:mm, CCYY.

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

Ora este afișată în mod normal în ora locală pe sistemul Debian, dar hardware-ul și ora sistemului utilizează de obicei UTC(GMT).

Dacă ora hardware este stabilită la UTC, modificați configurația la „UTC=yes” în „/etc/default/rcS”.

Următoarele reconfigurează fusul orar utilizat de sistemul Debian.

# dpkg-reconfigure tzdata

Dacă doriți să actualizați ora sistemului prin rețea, luați în considerare utilizarea serviciului NTP cu pachete precum ntp, ntpdate și chrony.

[Indicație] Indicație

În systemd, utilizați în schimb systemd-timesyncd pentru sincronizarea orei în rețea. Consultați systemd-timesyncd(8).

Consultați următoarele.

[Indicație] Indicație

ntptrace(8) din pachetul ntp poate urmări un lanț de servere NTP până la sursa primară.

Controlorii pentru plăcile de sunet pentru versiunea actuală de Linux sunt furnizați de Advanced Linux Sound Architecture (ALSA). ALSA oferă modul de emulare pentru Open Sound System (OSS) anterior, pentru compatibilitate.

Aplicațiile software pot fi configurate nu numai pentru a accesa direct dispozitivele audio, ci și pentru a le accesa prin intermediul unui sistem standardizat de servere audio. În prezent, PulseAudio, JACK și PipeWire sunt utilizate ca sisteme de servere audio. Consultați Debian wiki page on Sound -- pagina wiki Debian despre sunet pentru a afla ultimele noutăți.

De obicei, există un motor de sunet comun pentru fiecare mediu grafic de birou popular. Fiecare motor de sunet utilizat de aplicație poate alege să se conecteze la diferite servere de sunet.

[Indicație] Indicație

Utilizați „cat /dev/urandom > /dev/audio” sau speaker-test(1) pentru a testa difuzorul (^C pentru a opri).

[Indicație] Indicație

Dacă nu auziți sunetul, este posibil ca difuzorul să fie conectat la o ieșire mută. Sistemele audio moderne au mai multe ieșiri. alsamixer(1) din pachetul alsa-utils este util pentru configurarea volumului și a opțiunilor de dezactivare a sunetului.


O întreținere deficitară a sistemului poate expune sistemul la exploatare externă.

Pentru verificarea securității și integrității sistemului, ar trebui să începeți cu următoarele.


Iată un script simplu pentru a verifica permisiunile incorecte tipice ale fișierelor care pot fi scrise de oricine.

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

Deoarece pachetul debsums utilizează sumele de control MD5 stocate local, acesta nu poate fi considerat pe deplin fiabil ca instrument de auditare a securității sistemului împotriva atacurilor rău intenționate.

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

Este posibil să fie necesar să demontați cu umount(8) unele dispozitive manual din linia de comandă înainte de a le utiliza, dacă acestea sunt montate automat de sistemul grafic de birou.

Pentru configurarea partiției discului, deși fdisk(8) a fost considerat standard, parted(8) merită o anumită atenție. „Date de partiționare a discului”, „tabel de partiții”, „hartă de partiții” și „etichetă de disc” sunt toate sinonime.

PC-urile mai vechi utilizează schema clasică Master Boot Record (MBR) pentru a stoca datele de partiționare a discului în primul sector, adică sectorul 0 LBA (512 octeți).

PC-urile recente cu Unified Extensible Firmware Interface (UEFI), inclusiv Mac-urile bazate pe Intel, utilizează schema GUID Partition Table (GPT) pentru a stoca datele de partiționare a discului care nu se află în primul sector.

Deși fdisk(8) a fost standardul pentru instrumentul de partiționare a discurilor, parted(8) îl înlocuiește.


[Atenție] Atenție

Deși parted(8) pretinde că creează și redimensionează sistemul de fișiere, este mai sigur să faceți astfel de lucruri folosind instrumente specializate bine întreținute, cum ar fi mkfs (8) (mkfs.msdos(8), mkfs.ext2(8), mkfs.ext3(8), mkfs.ext4(8), …) și resize2fs(8).

[Notă] Notă

Pentru a comuta între GPT și MBR, trebuie să ștergeți direct primele câteva blocuri din conținutul discului (consultați Secțiune 9.8.6, „Ștergerea conținutului fișierului”) și să utilizați „parted /dev/sdx mklabel gpt” sau „parted /dev/sdx mklabel msdos” pentru a-l pune în loc. Rețineți că „msdos” este utilizat aici pentru MBR.

LVM2 este un manager de volume logice pentru nucleul Linux. Cu LVM2, partițiile de disc pot fi create pe volume logice în loc de discuri dure fizice.

LVM necesită următoarele.

  • suport pentru «device-mapper» în nucleul Linux (implicit pentru nucleele Debian)

  • biblioteca de suport pentru cartografierea dispozitivelor în spațiul utilizatorului (pachetul libdevmapper*)

  • instrumentele LVM2 din spațiul utilizatorului (pachetul lvm2)

Vă rugăm să începeți să învățați LVM2 din următoarele pagini de manual.

  • lvm(8): noțiuni de bază despre mecanismul LVM2 (lista tuturor comenzilor LVM2)

  • lvm.conf(5): fișierul de configurare pentru LVM2

  • lvs(8): raportează informații despre volumele logice

  • vgs(8): raportează informații despre grupurile de volume

  • pvs(8): raportează informații despre volumele fizice

Pentru sistemul de fișiere ext4, pachetul e2fsprogs oferă următoarele.

  • mkfs.ext4(8) pentru a crea un nou sistem de fișiere ext4

  • fsck.ext4(8) pentru a verifica și repara sistemul de fișiere ext4 existent

  • tune2fs(8) pentru a configura superblocul sistemului de fișiere ext4

  • debugfs(8) pentru a depana interactiv sistemul de fișiere ext4; acesta are comanda undel pentru a recupera fișierele șterse).

Comenzile mkfs(8) și fsck(8) sunt furnizate de pachetul e2fsprogs ca interfețe pentru diverse programe dependente de sistemul de fișiere (mkfs.fstype și fsck.fstype). Pentru sistemul de fișiere ext4, acestea sunt mkfs.ext4(8) și fsck.ext4(8) (acestea sunt legate simbolic de mke2fs(8) și e2fsck(8)).

Comenzi similare sunt disponibile pentru fiecare sistem de fișiere acceptat de Linux.

Tabel 9.20. Lista pachetelor de gestionare a sistemului de fișiere

pachet popcon(popularitate) dimensiune descriere
e2fsprogs V:796, I:997 1549 ustensie pentru sistemele de fișiere ext2/ext3/ext4
btrfs-progs V:48, I:76 5204 ustensile pentru sistemul de fișiere Btrfs
reiserfsprogs V:9, I:21 473 ustensile pentru sistemul de fișiere Reiserfs
zfsutils-linux V:31, I:32 1891 ustensile pentru sistemul de fișiere OpenZFS
dosfstools V:247, I:572 310 ustensile pentru sistemul de fișiere FAT (Microsoft: MS-DOS, Windows)
exfatprogs V:36, I:467 352 ustensile pentru sistemul de fișiere exFAT menținut de Samsung.
exfat-fuse V:2, I:50 73 citește/scrie sistemul de fișiere exFAT controlor (Microsoft) pentru FUSE.
xfsprogs V:36, I:86 4386 ustensile pentru sistemul de fișiere XFS (SGI: IRIX)
ntfs-3g V:193, I:527 1500 citește/scrie sistemul de fișiere NTFS (Microsoft: Windows NT, …) controlor pentru FUSE.
jfsutils V:0, I:7 1104 ustensile pentru sistemul de fișiere JFS. (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 ustensile pentru sistemul de fișiere Reiser4
hfsprogs V:0, I:3 394 ustensile pentru sistemul de fișiere HFS și HFS Plus (Apple: Mac OS)
zerofree V:5, I:119 30 program pentru a șterge blocurile libere din sistemele de fișiere ext2/3/4

[Indicație] Indicație

Sistemul de fișiere Ext4 este sistemul de fișiere implicit pentru sistemul Linux și se recomandă insistent utilizarea acestuia, cu excepția cazului în care aveți motive specifice pentru a nu o face.

Starea Btrfs poate fi găsită la Debian wiki on btrfs și kernel.org wiki on btrfs. Se preconizează că acesta va fi următorul sistem de fișiere implicit după sistemul de fișiere ext4.

Unele instrumente permit accesul la sistemul de fișiere fără suportulasigurat de nucleul Linux (a se vedea Secțiune 9.8.2, „Manipularea fișierelor fără montarea discului”).

Discul/unitatea cu stare solidă („Solid State Drive”: SSD) este detectată automat acum.

Reduceți accesările inutile la disc pentru a preveni uzura discului prin montarea „tmpfs” în ruta de date volatile din /etc/fstab.

Puteți monitoriza și înregistra discul dvs. dur compatibil cu SMART cu ajutorul demonului smartd(8).

  1. Activați funcția SMART în BIOS.

  2. Instalați pachetul smartmontools.

  3. Identificați unitățile de disc dur listându-le cu df(1).

    • Să presupunem că unitatea de disc dur care trebuie monitorizată este „/dev/sda”.

  4. Verificați rezultatul comenzii „smartctl -a /dev/sda” pentru a vedea dacă funcția SMART este activată.

    • Dacă nu, activați-o cu „smartctl -s on -a /dev/sda”.

  5. Activați demonul smartd(8) pentru a rula astfel.

    • decomentați „start_smartd=yes” din fișierul „/etc/default/smartmontools”.

    • reporniți demonul smartd(8) cu comanda „sudo systemctl restart smartmontools”.

[Indicație] Indicație

Demonul smartd(8) poate fi personalizat cu ajutorul fișierului /etc/smartd.conf, inclusiv modul în care se pot primi notificări de avertizare.

Partițiile create cu ajutorul Managerul de volume logice („Logical Volume Manager”: LVM) (funcționalitate Linux) în momentul instalării pot fi redimensionate cu ușurință prin concatenarea extinderilor pe acestea sau prin trunchierea extinderilor de pe acestea pe mai multe dispozitive de stocare, fără a fi necesară o reconfigurare majoră a sistemului.

Dacă aveți spațiu utilizabil într-o altă partiție (de exemplu, „/path/to/empty” și „/path/to/work”), puteți crea un director în aceasta și îl puteți stivui pe un director vechi (de exemplu, „/path/to/old ”) unde aveți nevoie de spațiu, utilizând OverlayFS pentru nucleul Linux 3.18 sau mai recent (Debian Stretch 9.0 sau mai recent).

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

Aici, „/path/to/empty” și „/path/to/work” ar trebui să se afle pe partiția cu acces RW pentru a scrie pe „/path/to/old”.

Aici discutăm despre manipulările imaginii discului.

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

Imaginea discului master boot record (MBR) (a se vedea Secțiune 9.6.2, „Configurarea partițiilor de disc”) al unui PC tradițional, care se află în primul sector al discului IDE primar, poate fi creată folosind dd(1) după cum urmează.

# 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-ul cu tabelul de partiții

  • "mbr-nopart.img": MBR-ul fără tabelul de partiții

  • "mbr-part.img": Doar tabelul de partiții al MBR

Dacă creați o imagine a unei partiții a discului original, înlocuiți „/dev/sda” cu „/dev/sda1” etc.

Imaginea de disc „partition.img” care conține o singură imagine de partiție poate fi montată și demontată utilizând dispozitivul de buclă loop device după cum urmează.

# 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

Acest lucru poate fi simplificat după cum urmează.

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

Fiecare partiție a imaginii discului „disk.img” care conține mai multe partiții poate fi montată utilizând dispozitivul de buclă loop device.

# 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

Alternativ, efecte similare pot fi obținute utilizând dispozitivele device mapper create de kpartx(8) din pachetul kpartx, după cum urmează.

# 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

Imaginea de disc goală „disk.img”, care poate crește până la 5 Gio, poate fi creată folosind dd(1) după cum urmează.

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

În loc să se utilizeze dd(1), aici se poate utiliza fallocate(8) specializat.

Puteți crea un sistem de fișiere ext4 pe această imagine de disc „disk.img” utilizând dispozitivul de buclă loop device după cum urmează.

# 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

Pentru „disk.img”, dimensiunea fișierului este de 5,0 Gio, iar utilizarea efectivă a discului este de doar 83 Mio. Această discrepanță este posibilă deoarece ext4 poate stoca fișiere disperse.

[Indicație] Indicație

Utilizarea efectivă a discului de către fișierul dispers crește odată cu datele care sunt scrise pe acesta.

Folosind o operație similară pe dispozitivele create de dispozitivul de buclă loop device sau device mapper ca în Secțiune 9.7.3, „Montarea fișierului imagine disc”, puteți partiționa această imagine de disc „disk.img” folosind parted(8) sau fdisk(8) și puteți crea un sistem de fișiere pe acesta folosind mkfs.ext4(8), mkswap(8) etc.

[Indicație] Indicație

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

Fișierul imagine ISO9660cd.iso” din arborele directorului sursă „source_directory” poate fi creată folosind genisoimage(1) furnizat de cdrkit după cum urmează.

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

În mod similar, fișierul imagine ISO9660 ce poate fi pornit, „cdboot.iso”, poate fi creat din debian-installer, ca arbore de directoare în „source_directory”, prin următoarele.

#  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

Aici încărcătorul de pornire Isolinux Isolinux boot loader (a se vedea Secțiune 3.1.2, „Etapa 2: încărcătorul de pornire”) este utilizat pentru pornire.

Puteți calcula valoarea md5sum și crea imaginea ISO9660 direct de pe dispozitivul CD-ROM, după cum urmează.

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

Pentru a obține rezultatul corect, trebuie să evitați cu atenție eroarea de citire anticipată a sistemului de fișiere ISO9660 din Linux, așa cum este descris mai sus.

Aici discutăm despre manipularea directă a datelor binare pe suporturile de stocare.

Există instrumente pentru recuperarea fișierelor de date și analiza tehnico-criminalistică.


[Indicație] Indicație

Puteți recupera fișierele șterse din sistemul de fișiere ext2 folosind comenzile list_deleted_inodes și undel din debugfs(8) din pachetul e2fsprogs.

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

[Atenție] Atenție

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.

Ștergeți tot conținutul discului punând datele la 0 cu următoarea comandă.

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

Ștergeți totul suprascriind cu date aleatorii, ca mai jos.

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

Ștergeți totul suprascriind cu date aleatorii în mod foarte eficient, în felul următor.

# shred -v -n 1 /dev/sda

Alternativ, puteți utiliza badblocks(8) cu opțiunea -t random.

Deoarece dd(1) este disponibil din shell-ul multor CD-uri Linux care pot fi pornite, cum ar fi CD-ul de instalare Debian, puteți șterge complet sistemul instalat executând o comandă de ștergere de pe un astfel de suport pe discul dur al sistemului, de exemplu, „/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
[Avertisment] Avertisment

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.

Având acces fizic la calculatorul dvs., oricine poate obține cu ușurință privilegii de root și acces la toate fișierele de pe calculatorul dvs. (consultați Secțiune 4.6.4, „Securizarea parolei root”). Aceasta înseamnă că sistemul de parole de autentificare nu poate proteja datele dvs. private și sensibile împotriva unui eventual furt al calculatorului. Pentru a face acest lucru, trebuie să implementați tehnologia de criptare a datelor. Deși GNU privacy guard (a se vedea Secțiune 10.3, „Data security infrastructure”) poate cripta fișiere, acest lucru necesită eforturi din partea utilizatorului.

Dm-crypt facilitează criptarea automată a datelor prin intermediul modulelor native ale nucleului Linux, cu eforturi minime din partea utilizatorului, utilizând device-mapper.


[Atenție] Atenție

Criptarea datelor costă timp CPU etc. Datele criptate devin inaccesibile în cazul în care parola lor este pierdută. Vă rugăm să evaluați beneficiile și costurile.

[Notă] Notă

Întregul sistem Debian poate fi instalat pe un disc criptat de debian-installer (lenny sau mai nou) folosind dm-crypt/LUKS și initramfs.

[Indicație] Indicație

Consultați Secțiune 10.3, „Data security infrastructure” pentru instrumentul utilitar de criptare a spațiului utilizatorului: 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

Apoi, acesta poate fi montat la fel ca unul normal pe „/media/username/disk_label”, cu excepția solicitării parolei (a se vedea Secțiune 10.1.7, „Removable storage device”) în mediul grafic de birou modern utilizând pachetul udisks2. Diferența este că toate datele scrise pe acesta sunt criptate. Introducerea parolei poate fi automatizată folosind «keyring» (a se vedea Secțiune 10.3.6, „Password keyring”).

În mod alternativ, puteți formata suportul în alt tip de sistem de fișiere, de exemplu, ext4 cu „mkfs.ext4 /dev/mapper/sdx1”. Dacă se utilizează în schimb btrfs, trebuie instalat pachetul udisks2-btrfs. Pentru aceste sisteme de fișiere, este posibil să fie necesară configurarea drepturilor de proprietate și a permisiunilor pentru fișiere.

Debian distribuie Nucleul Linux modularizat ca pachete pentru arhitecturile acceptate.

Dacă citiți această documentație, probabil că nu trebuie să compilați singur nucleul Linux.

Debian are propria sa metodă de compilare a nucleului și a modulelor aferente.


Dacă utilizați initrd în Secțiune 3.1.2, „Etapa 2: încărcătorul de pornire”, asigurați-vă că citiți informațiile aferente în initramfs-tools(8), update-initramfs(8), mkinitramfs(8) și initramfs.conf(5).

[Avertisment] Avertisment

Nu puneți legături simbolice către directoarele din arborele sursă (de exemplu, „/usr/src/linux*”) din „/usr/include/linux” și „/usr/include/asm” atunci când compilați sursa nucleului Linux; (unele documente învechite sugerează acest lucru).

[Notă] Notă

La compilarea celui mai recent nucleu Linux pe sistemul Debian stable, poate fi necesară utilizarea celor mai recente instrumente retro-adaptate din Debian unstable.

module-assistant(8) (sau forma sa scurtă m-a) ajută utilizatorii să construiască și să instaleze cu ușurință pachetul (pachetele) de module pentru unul sau mai multe nuclee personalizate.

dynamic kernel module support (DKMS) este un nou cadru independent de distribuție conceput pentru a permite actualizarea modulelor individuale ale nucleului fără schimbarea întregului nucleu. Acest lucru este utilizat pentru întreținerea modulelor din afara arborelui. De asemenea, acest lucru facilitează foarte mult reconstruirea modulelor pe măsură ce actualizați nucleele.

Controlorul hardware este codul care rulează pe CPU-urile principale ale sistemului țintă. Majoritatea controlorilor hardware sunt disponibili acum ca software liber și sunt incluși în pachetele normale de nucleu Debian în zona main.

  • Controlor GPU

    • Controlor GPU Intel (main)

    • Controlor GPU AMD/ATI (main)

    • Controlor GPU NVIDIA (main pentru controlorul nouveau și non-free pentru controlorii numai-binari asigurați de producător.)

Firmware-ul este codul sau datele încărcate pe dispozitivul atașat sistemului țintă (de exemplu, microcode CPU, codul de redare care rulează pe GPU sau FPGA / CPLD date, ...). Unele pachete firmware sunt disponibile ca software gratuit, dar multe pachete firmware nu sunt disponibile ca software gratuit deoarece conțin date binare fără sursă. Instalarea acestor date de firmware este esențială pentru ca dispozitivul să funcționeze conform așteptărilor.

  • Pachetele de date firmware care conțin date încărcate în memoria volatilă a dispozitivului țintă.

    • firmware-linux-free (main)

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

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

    • *-firmware (non-free-firmware)

    • intel-microcode (non-free-firmware)

    • amd64-microcode (non-free-firmware)

  • Pachetele de programe de actualizare a firmware-ului care actualizează datele din memoria nevolatilă a dispozitivului țintă.

    • fwupd (main): Demon de actualizare a firmware-ului care descarcă datele firmware de la Linux Vendor Firmware Service.

    • gnome-firmware (main): interfață grafică GTK pentru «fwupd»

    • plasma-discover-backend-fwupd (main): interfață grafică Qt pentru «fwupd»

Vă rugăm să rețineți că accesul la pachetele non-free-firmware sunt furnizate de mediile de instalare oficiale pentru a oferi utilizatorului o experiență de instalare funcțională începând cu Debian 12 Bookworm. Zona non-free-firmware este descrisă în Secțiune 2.1.5, „Noțiuni de bază despre arhiva Debian”.

Vă rugăm să rețineți, de asemenea, că datele firmware descărcate de fwupd de la Linux Vendor Firmware Service și încărcate în nucleul Linux care rulează pot fi non-free.

Utilizarea sistemului virtualizat ne permite să rulăm mai multe instanțe ale sistemului simultan pe un singur hardware.

[Indicație] Indicație

Consultați Debian wiki on SystemVirtualization.

Există mai multe platforme de virtualizare și instrumente de emulare.

  • Pachete complete de emulare a hardware-ului „hardware emulation” precum cele instalate de metapachetul games-emulator

  • În principal emulație la nivel de CPU cu unele emulări de dispozitive de In/Ieș, cum ar fi QEMU

  • În principal virtualizare la nivel de CPU cu unele emulări de dispozitive de In/Ieș, cum ar fi Kernel-based Virtual Machine (KVM)

  • Virtualizarea containerelor la nivel de sistem de operare cu suport la nivel de nucleu, cum ar fi LXC (Linux Containers), Docker, systemd-nspawn(1), ...

  • Virtualizarea accesului la sistemul de fișiere la nivel de sistem de operare cu suprascrierea apelului bibliotecii de sistem pe ruta fișierului, cum ar fi chroot

  • Virtualizarea accesului la sistemul de fișiere la nivel de sistem de operare cu suprascrierea apelului bibliotecii de sistem privind proprietatea asupra fișierului, cum ar fi fakeroot

  • Emularea API a sistemului de operare, cum ar fi Wine

  • Virtualizarea la nivel de interpret cu selectarea executabilului și suprascrierea bibliotecilor în timp de execuție, cum ar fi virtualenv și venv pentru Python

Virtualizarea containerelor utilizează Secțiune 4.7.5, „Caracteristici de securitate Linux” și este tehnologia de bază a Secțiune 7.7, „Cutia cu nisip (sandbox)”.

Iată câteva pachete care vă vor ajuta să configurați sistemul virtualizat.

Tabel 9.27. Lista instrumentelor de virtualizare

pachet popcon(popularitate) dimensiune descriere
coreutils V:892, I:999 18457 Instrumente GNU de bază care conțin chroot(8)
util-linux V:897, I:999 4384 utiități de sistem diverse care conțin unshare(1)
systemd-container V:72, I:76 2276 instrumente systemd container/nspawn care conțin systemd-nspawn(1)
schroot V:5, I:7 2627 instrument specializat pentru executarea pachetelor binare Debian în chroot
sbuild V:1, I:4 157 instrument pentru construirea de pachete binare Debian din surse Debian
debootstrap V:4, I:46 330 creează și pornește un sistem Debian de bază (scris în sh)
mmdebstrap V:5, I:10 574 creează și pornește un sistem Debian (scris în Perl)
cdebootstrap V:0, I:1 114 creează și pornește un sistem Debian (scris în C)
cloud-image-utils V:0, I:14 66 utilități de gestionare a imaginilor în cloud
cloud-guest-utils V:4, I:18 71 utilități pentru invitați în cloud
virt-manager V:12, I:49 2310 Gestionar mașină virtuală: aplicație de mediu grafic de birou pentru gestionarea mașinilor virtuale
libvirt-clients V:49, I:72 1155 programe pentru biblioteca libvirt
incus V:0, I:2 21 Incus: container de sistem și gestionar de mașini virtuale
podman V:25, I:29 81828 podman: motor pentru a rula containere bazate pe OCI în Pods
podman-docker V:2, I:2 275 motor pentru a rula containere bazate pe OCI în Pods - învăluitor pentru docker
docker.io V:44, I:47 95958 docker: mediu de execuție de containere Linux
games-emulator I:0 21 games-emulator: emulatoare Debian pentru jocuri
bochs V:0, I:0 8180 Bochs: emulator PC IA-32
qemu-system I:22 80 QEMU: binare de emulare completă a sistemului
qemu-user V:5, I:9 464225 QEMU: binare de emulare în modul utilizator
qemu-utils V:14, I:109 12157 QEMU: utilități
qemu-system-x86 V:53, I:93 67511 KVM: virtualizare completă pe hardware x86 cu hardware-assisted virtualization
virtualbox V:3, I:4 151525 VirtualBox: soluție de virtualizare x86 pe i386 și amd64
gnome-boxes V:1, I:6 6847 Boxes: aplicație GNOME simplă pentru accesarea sistemelor virtuale
xen-tools V:0, I:1 719 instrumente pentru gestionarea serverului virtual debian XEN
wine V:14, I:57 204 Wine: implementarea API Windows (suita standard)
dosbox V:1, I:13 2697 DOSBox: emulator x86 cu grafică Tandy/Herc/CGA/EGA/VGA/SVGA, sunet și DOS
lxc V:9, I:12 1626 Linux containers user space tools
python3-venv V:8, I:136 6 venv pentru crearea de medii virtuale python (biblioteca de sistem)
python3-virtualenv V:8, I:41 417 virtualenv pentru crearea de medii python virtuale izolate
pipx V:7, I:43 3613 pipx pentru instalarea aplicațiilor python în medii izolate

Consultați articolul Wikipedia Compararea platformelor de mașini virtuale pentru o comparație detaliată a diferitelor soluții de virtualizare a platformelor.

[Notă] Notă

Nucleele Debian implicite acceptă KVM de la lenny.

Fluxul de lucru tipic pentru virtualizare implică mai multe etape.

Pentru fișierul imagine de disc brut, vedeți Secțiune 9.7, „Imaginea discului”.

Pentru alte fișiere imagine de disc virtual, puteți utiliza qemu-nbd(8) pentru a le exporta utilizând protocolul network block device (dispozitiv de blocuri din rețea) și a le monta utilizând modulul nucleului nbd.

qemu-nbd(8) acceptă formatele de disc acceptate de QEMU: raw, qcow2, qcow, vmdk, vdi, bochs, cow (user-mode Linux copy-on-write), parallels, dmg, cloop, vpc, vvfat (VFAT virtual) și host_device.

Dispozitivul network block device poate accepta partiții în același mod ca dispozitivul loop device (consultați Secțiune 9.7.3, „Montarea fișierului imagine disc”). Puteți monta prima partiție din „disk.img” după cum urmează.

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

Puteți exporta numai prima partiție din „disk.img” utilizând opțiunea „-P 1” la qemu-nbd(8).

Dacă doriți să încercați un nou mediu Debian de la o consolă terminal, vă recomand să utilizați chroot. Acest lucru vă permite să rulați aplicații de consolă Debian unstable și testing fără riscurile obișnuite asociate și fără repornire. chroot(8) este cea mai de bază modalitate.

[Atenție] Atenție

Exemplele de mai jos presupun că atât sistemul părinte, cât și sistemul chroot au aceeași arhitectură CPU amd64.

Deși puteți crea manual un mediu chroot(8) utilizând debootstrap(1), acest lucru necesită eforturi netriviale.

Pachetul sbuild pentru a construi pachete Debian din sursă utilizează mediul chroot gestionat de pachetul schroot. Acesta vine cu scriptul ajutător sbuild-createchroot(1). Să învățăm cum funcționează executându-l după cum urmează.

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

Vedeți cum debootstrap(8) completează datele sistemului pentru mediul unstable sub „/srv/chroot/unstable-amd64-sbuild” pentru un sistem de compilare minim.

Vă puteți conecta la acest mediu utilizând schroot(1).

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

Vedeți cum este creat un shell de sistem care rulează în mediul unstable.

[Notă] Notă

Fișierul „/usr/sbin/policy-rc.d” care iese întotdeauna cu 101 împiedică pornirea automată a programelor demon pe sistemul Debian. Consultați „/usr/share/doc/init-system-helpers/README.policy-rc.d.gz”.

[Notă] Notă

Unele programe sub chroot pot necesita acces la mai multe fișiere din sistemul părinte pentru a funcționa decât oferă sbuild-createchroot conform celor de mai sus. De exemplu, „/sys”, „/etc/passwd”, „/etc/group”, „/var/run/utmp”, „/var/log/wtmp” etc. pot necesita să fie montatecu opțiunea „--bind” sau copiate.

[Indicație] Indicație

Pachetul sbuild ajută la construirea unui sistem chroot și construiește un pachet în chroot folosind schroot ca sistem de gestionare și manipulare a datelor. Este un sistem ideal pentru a verifica dependențele de construcție. Vedeți mai multe despre sbuild la Debian wiki și sbuild exemplu de configurare în „Guide for Debian Maintainers”.

[Indicație] Indicație

Comanda systemd-nspawn(1) ajută la rularea unei comenzi sau a unui sistem de operare într-un container de dimensiuni reduse în moduri similare cu chroot. Este mai puternic deoarece utilizează spații de nume pentru a virtualiza complet arborele de procese, IPC, numele de gazdă, numele de domeniu și, opțional, bazele de date de rețea și de utilizator. Consultați systemd-nspawn.

Dacă doriți să încercați un nou mediu grafic de birou al oricărui sistem de operare, vă recomand să utilizați QEMU sau KVM pe un sistem Debian stable pentru a rula mai multe sisteme de mediu de birou în siguranță utilizând virtualizare. Acestea vă permit să rulați orice aplicații de mediu de birou, inclusiv cele din Debian unstable și testing, fără riscurile obișnuite asociate cu acestea și fără repornire.

Deoarece QEMU pur este foarte lent, se recomandă accelerarea acestuia cu KVM atunci când sistemul gazdă îl acceptă.

Gestionarul de mașini virtuale cunoscut și ca virt-manager este un instrument cu interfață grafică, convenabil pentru gestionarea mașinilor virtuale KVM prin libvirt.

Imaginea discului virtual „virtdisk.qcow2” care conține un sistem Debian pentru QEMU poate fi creată utilizând debian-installer: Small CDs după cum urmează.

$ 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
...
[Indicație] Indicație

Rularea altor distribuții GNU/Linux precum Ubuntu și Fedora sub virtualizare este o modalitate excelentă de a învăța sfaturi de configurare. Alte sisteme de operare proprietare pot fi rulate foarte bine și sub această virtualizare GNU/Linux.

Vedeți mai multe sfaturi la Debian wiki: SystemVirtualization.



[2] Exemple de personalizare mai elaborate: „Vim Galore”, „sensible.vim”, ...

[3] vim-pathogen a fost popular.