Capítulo 9. Dicas do sistema

Índice

9.1. As dicas da consola
9.1.1. Gravar as atividades da shell de modo limpo
9.1.2. O programa screen
9.1.3. Navegando nos diretórios
9.1.4. Revestimento da linha de leitura
9.1.5. Verificação da árvore de código-fonte
9.2. Personalizar o vim
9.2.1. Personalizando o vim com recursos internos
9.2.2. Personalizando o vim com pacotes externos
9.3. Gravação de dados e apresentação
9.3.1. O daemon de log
9.3.2. Analisador de relatório (Log)
9.3.3. Amostragem personalizada de dados em texto
9.3.4. Amostragem personalizada de hora e data
9.3.5. Echo de shell colorido
9.3.6. Comandos coloridos
9.3.7. Recordar as atividades do editor para repetições complexas
9.3.8. Gravar a imagem gráfica de uma aplicação X
9.3.9. Gravar alterações em ficheiros de configuração
9.4. Monitorizar, controlar e iniciar as atividades de programas
9.4.1. Temporizar um processo
9.4.2. A prioridade de agendamento
9.4.3. O comando ps
9.4.4. O comando top
9.4.5. Listar ficheiros abertos por um processo
9.4.6. Rastear as atividades de programas
9.4.7. Identificação de um processo a usar ficheiros ou sockets
9.4.8. Repetir um comando com um intervalo constante
9.4.9. Repetir um ciclo de comandos sobre ficheiros
9.4.10. Arrancar um programa a partir da GUI
9.4.11. Personalizar o programa a ser iniciado
9.4.12. Matar um processo
9.4.13. Agendar tarefas uma vez
9.4.14. Agendar tarefas regularmente
9.4.15. Programação de tarefas em eventos
9.4.16. Tecla Alt-SysRq
9.5. Dicas de manutenção do sistema
9.5.1. Quem está no sistema?
9.5.2. Avisar todos
9.5.3. Identificação do hardware
9.5.4. Configuração do hardware
9.5.5. Hora do sistema e do hardware
9.5.6. A configuração do terminal
9.5.7. A infraestrutura de som
9.5.8. desativar o protector de ecrã (screensaver)
9.5.9. desativar os sons de beep
9.5.10. Utilização da memória
9.5.11. Segurança do sistema e verificação de integridade
9.6. Dicas de armazenamento de dados
9.6.1. Utilização do espaço em disco
9.6.2. Configuração das partições do disco
9.6.3. Aceder a partição a usar UUID
9.6.4. LVM2
9.6.5. Configuração do sistema de ficheiros
9.6.6. Criação do sistema de ficheiros e verificação de integridade
9.6.7. Optimização do sistema de ficheiros por opções de montagem
9.6.8. Optimização do sistema de ficheiros através do superblock
9.6.9. Optimização do disco rígido
9.6.10. Optimização de disco de estado sólido (SSD)
9.6.11. Usar SMART para prever falhas no disco rígido
9.6.12. Especifique o diretório de armazenamento temporário através de $TMPDIR
9.6.13. Expandir o espaço de armazenamento utilizável via LVM
9.6.14. Expandir o espaço de armazenamento utilizável ao montar outra partição
9.6.15. Expandir o espaço de armazenamento utilizável ao fazer bind-mount para outro diretório
9.6.16. Expansão do espaço de armazenamento utilizável ao fazer overlay-mounting para outro diretório
9.6.17. Expandir o espaço de armazenamento utilizável a usar ligações simbólicas
9.7. A imagem de disco
9.7.1. Criar o ficheiro de imagem de disco
9.7.2. Escrever directamente no disco
9.7.3. Montar o ficheiro de imagem de disco
9.7.4. Limpar um ficheiro de imagem de disco
9.7.5. Criar um ficheiro de imagem de disco vazio
9.7.6. Criar o ficheiro de imagem ISO9660
9.7.7. Escrever directamente ao CD/DVD-R/RW
9.7.8. Montar o ficheiro de imagem ISO9660
9.8. Os dados binários
9.8.1. Ver e editar dados binários
9.8.2. Manipular ficheiros sem montar o disco
9.8.3. Redundância de dados
9.8.4. Recuperação de ficheiros e dados e análise forense
9.8.5. Dividir um ficheiro grande em ficheiros pequenos
9.8.6. Limpar conteúdo de ficheiro
9.8.7. Ficheiros dummy
9.8.8. apagar um disco rígido inteiro
9.8.9. Apagar uma área não utilizada do disco rígido
9.8.10. Recuperar ficheiros apagados mas ainda abertos
9.8.11. Procurar todas as ligações rígidas
9.8.12. Consumo invisível do espaço do disco
9.9. Dicas de encriptação de dados
9.9.1. Encriptação de discos amovíveis com dm-crypt/LUKS
9.9.2. Montar discos encriptados com dm-crypt/LUKS
9.10. O kernel
9.10.1. Parâmetros do kernel
9.10.2. Cabeçalhos do kernel
9.10.3. Compilar o kernel e módulos relacionados
9.10.4. Compilar código-fonte do kernel: a recomendação da equipa do kernel de Debian
9.10.5. Controladores de hardware e firmware
9.11. Sistema virtualizado
9.11.1. Ferramentas de virtualização e emulação
9.11.2. Fluxo de trabalho da virtualização
9.11.3. Montar o ficheiro de imagem de disco virtual
9.11.4. Sistema chroot
9.11.5. Sistemas de vários ambientes de trabalho

Aqui, descrevo dicas básicas para configurar e gerir sistemas, a maioria a partir da consola.

Existem alguns programas utilitários para ajudar as atividades da consola.


O uso simples de script(1) (veja Secção 1.4.9, “Gravar as atividades da shell”) para gravar a atividade da shell produz um ficheiro com caracteres de controle. Isto pode ser evitado ao usar o col(1) como o seguinte.

$ script
Script started, file is typescript

Faça o que tem a fazer ... e carregue em Ctrl-D para terminar o script.

$ col -bx < typescript > cleanedfile
$ vim cleanedfile

Existem métodos alternativos para registar as atividades da shell:

  • Use tee (utilizável durante o processo de arranque no initramfs):

    $ sh -i 2>&1 | tee typescript
  • Use o gnome-terminal com a memória intermédia de linha estendida para conseguir rolar para trás.

  • Utilize o ecrã com "^A H" (ver Secção 9.1.2, “O programa screen”) para efetuar a gravação da consola.

  • Utilize o vim com ":terminal" para entrar no modo de terminal. Use "Ctrl-W N" para sair do modo terminal para o modo normal. Utilize ":w typescript" para escrever a memória intermédia num ficheiro.

  • Use o emacs com "M-x shell", "M-x eshell", ou "M-x term" para entrar na consola de gravação. Use"C-x C-w" para escrever a memória intermédia para um ficheiro.

O screen(1) não apenas permite que uma janela terminal funcione com múltiplos processos, mas também permite que os processos de shell remota sobrevivam a ligações interrompidas. Aqui está um cenário típico de utilização do screen(1).

  1. Faz login numa máquina remota.

  2. Arranca o screen numa consola única.

  3. Executa múltiplos programas na janela criada do screen com ^A c ("Ctrl-A" seguido de "c").

  4. Muda entre as múltiplas janelas do screen com ^A n ("Ctrl-A" seguido de "n").

  5. Subitamente precisa de abandonar o seu terminal, mas não quer perder o seu trabalho ativo a manter a ligação.

  6. Pode separar a sessão do screen por quaisquer métodos.

    • Desligar a sua ligação de rede à bruta

    • Escrever ^A d ("Ctrl-A" seguido de "d") e manualmente terminar a sessão da ligação remota

    • Escrever ^A DD ("Ctrl-A" seguido de "DD") para separar o screen e terminar a sua sessão

  7. Faz login de novo à mesma máquina remota (mesmo a partir de um terminal diferente).

  8. Inicia o screen como "screen -r".

  9. O screen magicamente reagrupa todas as janelas screen anteriores com todos os programas a funcionar activamente.

[Dica] Dica

Pode poupar despesas de ligação com o screen em ligações de rede medidas 'a metro' como as dial-up, porque pode deixar um processo ativo enquanto desligado e depois lhe re-ligar-se mais tarde quando ligar de novo.

Numa sessão do screen, todas as entradas do teclado são enviadas à sua janela atual excepto as teclas de comandos. Todas as teclas de comando do screen são inseridas ao escrever ^A ("Control-A") mais uma única tecla [mais quaisquer parâmetros]. Aqui estão alguns importantes para fazer lembrar.


Veja screen(1) para detalhes.

Veja tmux(1) para as funcionalidades do comando alternativo.

Em Secção 1.4.2, “Personalizar bash”, são descritas 2 dicas para permitir uma navegação rápida pelos diretórios: $CDPATH e mc.

Se utilizar o programa de filtragem de texto fuzzy, pode fazê-lo sem escrever o caminho exato. Para o fzf, inclua o seguinte em ~/.bashrc.

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

Por exemplo:

  • Pode saltar para um sub-diretório muito profundo com esforço mínimo. Primeiro, escreva"cd **" e prima Tab. Em seguida, ser-lhe-ão solicitados os caminhos candidatos. Escrever uma sequência de caminhos parciais, e.g., s/d/b foo, irá reduzir os caminhos candidatos. Você seleciona o caminho a ser utilizado por cd com o cursor e as teclas de retorno.

  • É possível selecionar um comando do histórico de comandos de forma mais eficiente e com o mínimo de esforço. Prima Ctrl-R na linha de comandos. Em seguida, ser-lhe-ão apresentados os comandos candidatos. Escrever cadeias de comandos parciais, e.g., vim d, irá reduzir os candidatos. Seleciona o comando a ser utilizado com as teclas de cursor e de retorno.

Depois de aprender as noções básicas do vim(1) através do Secção 1.4.8, “Utilizando o vim”, por favor leia o livro de Bram Moolenaar "Seven habits of effective text editing (2000)" para compreender como o vim deve ser utilizado.

O comportamento do vim pode ser alterado significativamente ativando as suas caraterísticas internas através dos comandos do modo Ex tais como "set ..." para definir as opções do vim.

Estes comandos em modo Ex podem ser incluídos no ficheiro vimrc do utilizador, no tradicional "~/.vimrc" ou no git-friendly "~/.vim/vimrc". Aqui está um exemplo muito simples [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

O mapa de teclas do vim pode ser alterado no ficheiro vimrc do utilizador. Por exemplo:

[Cuidado] Cuidado

Não tente alterar os atalhos de teclas predefinidos sem ter boas razões para o fazer.

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

Para que as combinações de teclas acima funcionem corretamente, o programa do terminal tem de ser configurado para gerar "ASCII DEL" para a tecla Backspace e "Escape sequence" para a tecla Delete.

Outras configurações diversas podem ser alteradas no ficheiro vimrc do utilizador. Por exemplo:

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

Podem ser encontrados pacotes de plug-ins externos interessantes:

Os pacotes de plugins no pacote vim-scripts podem ser ativados usando o ficheiro vimrc do utilizador. Por exemplo:

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

O novo sistema de pacotes nativo do Vim funciona muito bem com "git" e "git submodule". Um exemplo de configuração pode ser encontrado no meu repositório git: dot-vim. Isto faz essencialmente o seguinte:

  • Ao utilizar "git" e "git submodule", os pacotes externos mais recentes, tais como "name", são colocados em ~/.vim/pack/*/opt/name e similares.

  • Ao adicionar :packadd! name ao ficheiro vimrc do utilizador, estes pacotes são colocados no runtimepath.

  • O Vim carrega estes pacotes no runtimepath durante a sua inicialização.

  • No final da sua inicialização, as etiquetas dos documentos instalados são atualizadas com "helptags ALL".

Para mais, por favor inicie o vim com"vim --startuptime vimstart.log" para verificar a sequência de execução atual e o tempo gasto em cada passo.

É bastante confuso ver demasiadas formas[3] de gerir e carregar estes pacotes externos para o vim. Verificar a informação original é a melhor solução.


Apesar de ferramentas paginadoras com o more(1) e less(1) (veja Secção 1.4.5, “O pager”) e ferramentas personalizadas para destaque e formatação (veja Secção 11.1.8, “Destacar e formatar dados de texto simples”) poderem mostrar dados de texto muito bem, os editores de objetivos gerais (veja Secção 1.4.6, “O editor de texto”) são mais versáteis e personalizáveis.

[Dica] Dica

Para o vim(1) e o aliás de modo paginador dele view(1), ":set hls" ativa pesquisas destacadas.

O formato de apresentação predefinido da hora e da data pelo comando "ls -l" depende do configuração regional (consulte Secção 1.2.6, “Marcas temporais (Timestamps)” para obter o valor). A variável "$LANG" é referida em primeiro lugar e pode ser substituída pelas variáveis de ambiente exportadas "$LC_TIME" ou "$LC_ALL".

O atual formato de apresentação por omissão para cada configuração regional depende da versão da biblioteca C standard (o pacote libc6 ) utilizada. Isto é, diferentes lançamentos Debian têm diferentes predefinições. Para formatos iso, veja ISO 8601.

Se deseja realmente personalizar este formato de amostragem da hora e data para além do locale, deve definir o valor de estilo de hora com o argumento "--time-style" ou com o valor "$TIME_STYLE" (veja ls(1), date(1), "info coreutils 'ls invocation'").


[Dica] Dica

Pode eliminar a digitação de uma opção longa na linha de comando utilizando um alias de comando (ver Secção 1.5.9, “Comando alias”):

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

A escrita da shell nos terminais mais modernos pode ser colorida a usar código de escape de ANSI (veja "/usr/share/doc/xterm/ctlseqs.txt.gz").

Por exemplo, tente o seguinte:

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

Pode recordar as atividades do editor para repetições complexas.

Para o Vim, como a seguir.

  • "qa": inicia a gravação de caracteres teclados no registo nomeado "a".

  • ... atividades do editor

  • "q": termina a gravação de caracteres escritos.

  • "@a": executa o conteúdo do registo "a".

Para Emacs, como a seguir.

  • "C-x (": começa a definir uma macro de teclado.

  • ... atividades do editor

  • "C-x )": termina de definir uma macro de teclado.

  • "C-x e": executa uma macro de teclado.

As atividades de programas podem ser monitorizadas e controladas a usar ferramentas especiais.

Tabela 9.8. Lista de ferramentas para monitorizar e controlar as atividades de programas

pacote popcon tamanho descrição
coreutils V:880, I:999 18307 nice(1): correr um programa com prioridade de agendamento modificada
bsdutils V:519, I:999 356 renice(1): modifica a prioridade de agendamento de um processo em execução
procps V:766, I:999 2389 "/proc" utilitários de sistema de ficheiros: ps(1), top(1), kill(1) , watch(1), …
psmisc V:420, I:775 908 "/proc" utilitários de sistema de ficheiros: killall(1), fuser(1), peekfd(1), pstree(1)
time V:7, I:132 129 time(1): corre um programa para reportar as utilizações de recursos do sistema no que respeita a tempo
sysstat V:148, I:170 1904 sar(1), iostat(1), mpstat(1), …: ferramentas de performance do sistema para Linux
isag V:0, I:3 109 Interactive System Activity Grapher para sysstat
lsof V:422, I:945 482 lsof(8): lista os ficheiro abertos por um processo em execução a usar a opção "-p"
strace V:12, I:119 2897 strace(1): rastreia chamadas e sinais do sistema
ltrace V:0, I:16 330 ltrace(1): rastreia chamadas de bibliotecas
xtrace V:0, I:0 353 xtrace(1): rastreia a comunicação entre cliente X11 e servidor
powertop V:18, I:217 677 powertop(1): informação sobre a utilização do sistema de energia
cron V:872, I:995 244 corre processos de acordo com uma agenda nos bastidores a partir do daemon cron(8)
anacron V:396, I:479 93 agenda de comandos tipo cron para sistemas que não funcionam 24 horas por dia
at V:101, I:154 158 at(1) ou batch(1): executam um trabalho a uma hora especificada ou abaixo de um certo nível de carga

[Dica] Dica

Os pacotes procps disponibilizam as bases de monitorizar, controlar e iniciar atividades de programas. Deve aprendê-las todas.

Existem várias maneiras de repetir um ciclo de comandos sobre ficheiros que correspondem a alguma condição, ex. que correspondem ao modelo glob "*.ext".

for x in *.ext; do if [ -f "$x"]; then command "$x" ; fi; done
  • combinação do find(1) e do xargs(1):

find . -type f -maxdepth 1 -name '*.ext' -print0 | xargs -0 -n 1 command
  • find(1) com a opção "-exec" com um comando:

find . -type f -maxdepth 1 -name '*.ext' -exec command '{}' \;
  • find(1) com a opção "-exec" com um script de shell curto:

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

Os exemplos em cima foram escritos para assegurar o lidar apropriado dos nomes de ficheiros esquisitos como os que contêm espaços. Veja Secção 10.1.5, “Idiomas para a seleção de ficheiros” para utilizações mais avançadas do find(1).

Para a interface de linha de comandos (CLI), é executado o primeiro programa com o nome correspondente encontrado nos diretórios especificados na variável de ambiente $PATH. Veja Secção 1.5.3, “A variável "$PATH"”.

Para a interface gráfica do utilizador (GUI) compatível com as normas freedesktop.org, os ficheiros *.desktop no diretório /usr/share/applications/ fornecem os atributos necessários para a apresentação do menu GUI de cada programa. Cada pacote que é compatível com o sistema de menu xdg do Freedesktop.org instala os seus dados de menu fornecidos por "*.desktop" em "/usr/share/applications/". Os ambientes de trabalho modernos que são compatíveis com a norma Freedesktop.org utilizam estes dados para gerar o seu menu utilizando o pacote xdg-utils. Veja "/usr/share/doc/xdg-utils/README".

Por exemplo, os atributos do ficheiro chromium.desktop para o "Navegador Web Chromium" tais como "Nome" para o nome do programa, "Exec" para o caminho de execução do programa e argumentos, "Icon" para o ícone usado, etc. (veja Desktop Entry Specification) como a seguir:

[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

Esta é uma descrição muito simplificada. Os ficheiros *.desktop são examinados como a seguir:

O ambiente de trabalho define as variáveis de ambiente $XDG_DATA_HOME e $XDG_DATA_DIR. Por exemplo, sob o GNOME 3:

  • $XDG_DATA_HOME é desconfigurada. (É usado o valor predefinido de $HOME/.local/share.)

  • $XDG_DATA_DIRS é definida para /usr/share/gnome:/usr/local/share/:/usr/share/.

Para que os diretórios base (veja Especificação de Diretório Base XDG) e os diretórios applications sejam como a seguir:

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

Os ficheiros *.desktop são examinados nestes diretórios applications por esta ordem.

[Dica] Dica

Pode ser criada uma entrada personalizada no menu da GUI ao adicionar um ficheiro *.desktop no diretório $HOME/.local/share/applications/.

[Dica] Dica

A linha "Exec=..." não é analisada pela shell. Utilize o comando env(1) se for necessário definir variáveis de ambiente.

[Dica] Dica

Se modo semelhante, se um ficheiro *.desktop for criado no diretório autostart sob esses diretórios base, o programa especificado no ficheiro *.desktop é executado automaticamente quando o ambiente de trabalho é iniciado. Veja Especificação de Arranque Automático de Aplicações do Ambiente de Trabalho.

[Dica] Dica

De modo semelhante, se um ficheiro *.desktop for criado no diretório $HOME/Desktop e o ambiente de trabalho estiver configurado para suportar funcionalidade de lançamento por ícones do ambiente de trabalho, o programa especificado nele é executado ao se clicar no ícone. Por favor note que o nome real do diretório $HOME/Desktop é dependente da localização. Veja xdg-user-dirs-update(1).

Alguns programas iniciam outros programas automaticamente. Aqui estão alguns pontos de controle para personalizar este processo.

[Dica] Dica

update-mime(8) atualiza o ficheiro "/etc/mailcap" a usar o ficheiro "/etc/mailcap.order" (veja mailcap.order(5)).

[Dica] Dica

O pacote debianutils disponibiliza sensible-browser(1), sensible-editor(1) e sensible-pager(1) que fazem decisões sensíveis sobre qual editor, paginador e explorador web chamar, respectivamente. Recomendo-lhe a leitura destes scripts de shell.

[Dica] Dica

De modo a correr uma aplicação de consola como o mutt sob o GUI como a sua aplicação preferida, deve criar uma aplicação GUI como a seguir e definir "/usr/local/bin/mutt-term" como a sua aplicação preferida a ser iniciada como descrito.

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

Use cron(8) para agendar tarefas regularmente. Veja crontab(1) e crontab(5).

Pode agendar a execução de processos como um utilizador normal, ex. foo ao criar um ficheiro crontab(5) como "/var/spool/cron/crontabs/foo" com o comando "crontab -e".

Aqui está um exemplo de um ficheiro 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
[Dica] Dica

Para o sistema que não corre continuamente, instale o pacote anacron para agendar comandos periódicos a intervalos especificados o mais próximo que os tempos de ligação de máquina permitem. Veja anacron(8) e anacrontab(5).

[Dica] Dica

Para scripts agendados de manutenção do sistema, pode executá-los periodicamente a partir da conta root ao pôr tais scripts em "/etc/cron.hourly/", "/etc/cron.daily/", "/etc/cron.weekly/", ou "/etc/cron.monthly/". Os tempos de execução destes scripts podem ser personalizados pelo "/etc/crontab" e "/etc/anacrontab".

O Systemd tem capacidade de baixo nível para agendar programas para correr sem o daemon cron. Por exemplo, /lib/systemd/system/apt-daily.timer e /lib/systemd/system/apt-daily.service configuram actividades diárias de download do apt. Veja systemd.timer(5) .

Premir Alt-SysRq (PrtScr) seguido de uma tecla faz a magia de recuperar o controlo do sistema.


Veja mais em Guia do utilizador e do administrador do kernel Linux » Linux Magic System Request Key Hacks

[Dica] Dica

A partir de um terminal SSH etc., pode usar a funcionalidade Alt-SysRq ao escrever para o "/proc/sysrq-trigger". Por exemplo, "echo s > /proc/sysrq-trigger; echo u > /proc/sysrq-trigger" a partir do aviso da shell de root ssincroniza e umounts (desmonta) todos os sistemas de ficheiros montados.

O kernel Linux Debian amd64 atual (2021) tem /proc/sys/kernel/sysrq=438=0b110110110:

  • 2 = 0x2 - permite o controlo do nível de registo da consola (ON)

  • 4 = 0x4 - ativar o controlo do teclado (SAK, unraw) (ON)

  • 8 = 0x8 - ativar depuração de processos, etc. (OFF)

  • 16 = 0x10 - ativar comando de sincronização (ON)

  • 32 = 0x20 - ativar remontagem só de leitura (ON)

  • 64 = 0x40 - ativa a sinalização de processos (term, kill, oom-kill) (OFF)

  • 128 = 0x80 - permitir o reinício/desligar(ON)

  • 256 = 0x100 - permite iniciar todas as tarefas RT (ON)

Apesar da maioria da configuração de hardware nos sistemas de ambiente de trabalho GUI modernos como o GNOME e KDE poder ser gerida através de acompanhamento por ferramentas de configuração com GUI, é uma boa ideia conhecer alguns métodos básicos de o configurar.


Aqui, o ACPI é uma estrutura mais recente para o sistema de gestão de energia que o APM.

[Dica] Dica

O escalar de frequências da CPU em sistemas modernos é governado por módulos do kernel como o acpi_cpufreq.

O seguinte define a hora do sistema e hardware para MM/DD hh:mm, AAAA.

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

A horas são mostradas normalmente na hora local no sistema Debian mas o hardware e a hora do sistema geralmente usam UTC(GMT).

Se a hora do hardware estiver definida para UTC, mude a definição para "UTC=yes" em "/etc/default/rcS".

O seguinte reconfigura a zona horária usada pelo sistema Debian.

# dpkg-reconfigure tzdata

Se desejar atualizar a hora do sistema através da rede, considere usar o serviço NTP como pacotes como os ntp, ntpdate e chrony.

[Dica] Dica

Sob systemd, use systemd-timesyncd para a sincronização da hora com a rede. Veja systemd-timesyncd(8).

Veja o seguinte.

[Dica] Dica

O ntptrace(8) no pacote ntp pode rastrear uma cadeia de servidores NTP até à sua fonte principal.

As drivers para placas de som para o Linux atual são disponibilizadas pelo Advanced Linux Sound Architecture (ALSA). ALSA disponibiliza um modo de emulação para o anterior Open Sound System (OSS) para compatibilidade.

Os softwares aplicativos podem ser configurados não apenas para acessar dispositivos de som diretamente, mas também para acessá-los através de algum sistema de servidor de som padronizado. Atualmente, PulseAudio, JACK, e PipeWire são usados como sistemas de servidores de som. Veja a página wiki do Debian sobre Som para a situação mais recente.

Existe normalmente um motor de som comum para cada ambiente de trabalho popular. Cada motor de som usado pela aplicação pode escolher ligar a diferentes servidores de som.

[Dica] Dica

Use "cat /dev/urandom > /dev/audio" ou speaker-test(1) para testar os altifalantes (^C para parar).

[Dica] Dica

Se não conseguir obter som, os seus altifalantes podem estar ligados a uma saída silenciada (mute). Os sistemas de som modernos têm muitas saídas. O alsamixer(1) no pacote alsa-utils é útil para configurar as definições de volume e mute.


Uma manutenção pobre do sistema pode expor o seu sistema à exploração externa.

Para segurança do sistema e verificação de integridade, deve começar com o seguinte.


Aqui está um script simples para verificar as típicas permissões de ficheiros escritas incorrectamente.

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

Como o pacote debsums usa sumários de verificação MD5 armazenados localmente, não pode ser de total confiança como ferramenta de auditoria à segurança do sistema contra ataques maliciosos.

Arrancar o seu sistema com live CDs de Linux ou CDs de instalação de debian em modo de recuperação torna fácil para si reconfigurar o armazenamento de dados no seu aparelho de arranque.

Poderá ser necessário desmontar(8) alguns dispositivos manualmente a partir da linha de comandos antes de os operar, caso sejam montados automaticamente pelo sistema de ambiente de trabalho GUI.

Para configuração de partições de disco, apesar do fdisk(8) ser considerado o standard, o parted(8) merece alguma atenção. "Dados de particionamento do disco", "Tabela de partições", "Mapa de partições" e "Etiqueta do disco" são todos sinónimos.

PCs antigos usam o esquema clássico do Master Boot Record (MBR) para manter os dados de partições do disco no primeiro sector, isto é, LBA sector 0 (512 bytes).

PCs novos com Unified Extensible Firmware Interface (UEFI), incluindo os Macs baseados em Intel, usam o esquema GUID Partition Table (GPT) para manter os dados de partições do disco não no primeiro sector.

Apesar do fdisk(8) ter sido o standard como ferramenta de particionamento de disco, o parted(8) está a substituí-lo.


[Cuidado] Cuidado

Apesar do parted(8) afirmar também criar e redimensionar sistemas de ficheiros, é mais seguro fazer tais coisas a usar ferramentas especializadas e com melhor manutenção como as ferramentas mkfs(8) (mkfs.msdos(8), mkfs.ext2(8), mkfs.ext3(8), mkfs.ext4(8), …) e resize2fs(8).

[Nota] Nota

De modo a mudar entre GPT e MBR, precisa de apagar os primeiros blocos de conteúdo do disco directamente (veja Secção 9.8.6, “Limpar conteúdo de ficheiro”) e usar "parted /dev/sdx mklabel gpt" ou "parted /dev/sdx mklabel msdos" para o definir. Por favor note que "msdos" é usado aqui para o MBR.

LVM2 é um gestor de volumes lógicos para o kernel Linux. Com o LVM2, podem ser criadas partições de disco em volumes lógicos em vez de discos rijos físicos.

O LVM requer o seguinte.

  • suporte a device-mapper no kernel Linux (predefinido para os kernels Debian)

  • a biblioteca de suporte a device-mapper no espaço de utilizador (pacote (libdevmapper*)

  • as ferramentas LVM2 do espaço de utilizador (pacote lvm2)

Por favor comece a aprender LVM2 a partir dos seguintes manuais.

  • lvm(8): Bases do mecanismo LVM2 (lista de todos os comandos LVM2)

  • lvm.conf(5): Ficheiro de configuração para LVM2

  • lvs(8): Reporta informação acerca de volumes lógicos

  • vgs(8): Reporta informação acerca de grupos de volumes

  • pvs(8): Reporta informação acerca de volumes físicos

Para o sistema de ficheiro ext4, o pacote e2fsprogs disponibiliza o seguinte.

  • mkfs.ext4(8) para criar um novo sistema de ficheiros ext4

  • fsck.ext4(8) para verificar e reparar um sistema de ficheiros ext4 existente

  • tune2fs(8) para configurar o super-bloco do sistema de ficheiros ext4

  • debugfs(8) para depurar um sistema de ficheiros ext4 interativamente. (Era o comando undel para recuperar ficheiros apagados.)

Os comandos mkfs(8) e fsck(8) são disponibilizados pelo pacote e2fsprogs como frontends para vários programas dependentes do sistema de ficheiros (mkfs.fstype e fsck.fstype). Para o sistema de ficheiros ext4 existem os mkfs.ext4(8) e o fsck.ext4(8) (estão ligados simbolicamente ao mke2fs(8) and e2fsck(8)).

Estão disponíveis comandos semelhantes para cada sistema de ficheiros suportado pelo Linux.


[Dica] Dica

O sistema de ficheiros Ext4 é o sistema de ficheiros predefinido para o sistema Linux e a utilização é fortemente recomendada a menos que tenha razões especificas para não o fazer.

O estado do Btrfs pode ser encontrado em Debian wiki on btrfs e kernel.org wiki on btrfs. Espera-se que seja o próximo sistema de ficheiros padrão depois do sistema de ficheiros ext4.

Algumas ferramentas permitem acesso a sistemas de ficheiros sem suporte do kernel do Linux (veja Secção 9.8.2, “Manipular ficheiros sem montar o disco”).

A unidade de estado sólido (SSD) é agora automaticamente detetada.

Reduza os acessos desnecessários ao disco para evitar o desgaste do disco, montando "tmpfs" no caminho de dados volátil em /etc/fstab.

Pode monitorizar e registar em log o seu disco rígido que é compatível com SMART com o daemon smartd(8).

  1. ativar a função SMART na BIOS.

  2. Instalar o pacote smartmontools.

  3. Identificar os seus discos rígidos ao listá-los com df(1).

    • Vamos assumir uma drive de disco rígido a ser monitorizada como "/dev/hda".

  4. Verifique o resultado de "smartctl -a /dev/hda" para ver se a funcionalidade SMART está atualmente ligada.

    • Se não, active-o com "smartctl -s on -a /dev/hda".

  5. Active o daemon smartd(8) ao correr o seguinte.

    • retire a marca de comentário na linha "start_smartd=yes" no ficheiro "/etc/default/smartmontools".

    • reiniciar o daemon smartd(8) com "sudo systemctl restart smartmontools".

[Dica] Dica

O daemon smartd(8) pode ser personalizado com o ficheiro /etc/smartd.conf incluindo em como ser notificado dos avisos.

Para partições criadas em Logical Volume Manager (LVM) (funcionalidade do Linux) durante a instalação, elas podem ser redimensionadas facilmente ao concatenar extensões nelas ou ao truncar extensões delas sobre múltiplos aparelhos de armazenamento sem grandes reconfigurações do sistema.

Se tem espaço utilizável noutra partição (ex. "/path/to/empty") e "/path/to/work"), pode criar um diretório nela e empilhá-lo no diretório antigo (ex, "/path/to/old") onde precisa de espaço a usar o OverlayFS para Linux kernel 3.18 ou mais recente (Debian Stretch 9.0 ou posterior).

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

Aqui, "/path/to/empty" e "/path/to/work" devem estar na partição com Escrita-Leitura activa a escrever em "/path/to/old".

Aqui discutimos manipulações da imagem do disco.

O ficheiro de imagem de disco, "disco.img", de um aparelho não montado, ex., a segunda drive SCSI ou serial ATA "/dev/sdb", pode ser feito a usar o cp(1) ou o dd(1) com o seguinte.

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

O master boot record (MBR) da imagem de disco dos PC's tradicionais (veja Secção 9.6.2, “Configuração das partições do disco”) que reside no primeiro sector no disco IDE primário pode ser feito a usar o dd(1) com o seguinte.

# dd if=/dev/hda of=mbr.img bs=512 count=1
# dd if=/dev/hda of=mbr-nopart.img bs=446 count=1
# dd if=/dev/hda of=mbr-part.img skip=446 bs=1 count=66
  • "mbr.img": O MBR com a tabela de partições

  • "mbr-nopart.img": O MBR sem a tabela de partições

  • "mbr-part.img": A tabela de partições apenas do MBR

Se tem um aparelho SCSI ou serial ATA como disco de arranque, substitua "/dev/hda" por "/dev/sda".

Se está a criar uma imagem de uma partição de disco do disco original, substitua "/dev/hda" por "/dev/hda1" etc.

A imagem de disco "partition.img" que contém uma partição única pode ser montada e desmontada ao usar o aparelho loop como a seguir.

# 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

Isto pode ser simplificado como a seguir.

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

Cada partição da imagem de disco "disk.img" que contém múltiplas partições pode ser montada a usar o aparelho loop.

# 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

Alternativamente, podem-se fazer efeitos semelhantes ao usar os aparelhos device mapper criados pelo kpartx(8) do pacote kpartx como a seguir.

# 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

A imagem de disco vazia "disk.img" que pode crescer até aos 5GiB pode ser feita a usar o dd(1) como a seguir.

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

Em vez de utilizar dd(1), pode ser utilizado aqui o fallocate especializado (8).

Pode criar um sistema de ficheiros ext4 nesta imagem de disco "disk.img" a usar o aparelho loop como a seguir.

# 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

Para "disk.img", o tamanho de ficheiro dele é 5.0 Gb e a utilização real do disco dele é apenas 83 Mb. Esta discrepância é possível porque o ext4 pode manter o ficheiro sparse.

[Dica] Dica

A utilização de disco real do ficheiro sparse cresce com os dados que são escritos nele.

A usar uma operação semelhante em aparelhos criados pelo aparelho loop ou o mapeador de aparelhos como Secção 9.7.3, “Montar o ficheiro de imagem de disco”, pode particionar esta imagem de disco "disk.img" a usar o parted(8) ou o fdisk(8) e pode criar um sistema de ficheiros nela a usar mkfs.ext4(8), mkswap(8), etc.

O ficheiro de imagem ISO9660, "cd.iso", a partir da árvore de diretórios fonte em "source_diretory" pode ser feito a usar o genisoimage(1) disponibilizado pelo cdrkit com o seguinte.

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

De modo semelhante, o ficheiro de imagem ISO9660 de arranque, "cdboot.iso", pode ser feito a partir do instalador-debian como árvore de diretórios em "source_diretory" com o seguinte.

#  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

Aqui é usado para arranque o boot loader Isolinux (veja Secção 3.1.2, “Estágio 2: o gestor de arranque”).

Pode calcular o valor md5sum e fazer a imagem ISO9660 directamente a partir do aparelho CD-ROM como a seguir.

$ 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
[Atenção] Atenção

Tem de ter o cuidado de evitar o bug de leitura antecipada do sistema de ficheiros ISO9660 do Linux como em cima para obter o resultado correcto.

Aqui, discutimos manipulação directa de dados binários em meios de armazenamento.

Existem ferramentas para recuperação de ficheiros e dados e análise forense.


[Dica] Dica

Pode recuperar ficheiros apagados no sistema de ficheiros ext2 a usar os comandos list_deleted_inodes e undel de debugfs(8) no pacote e2fsprogs.

Com acesso físico ao seu PC, qualquer um pode facilmente ganhar privilégios de root e aceder a todos os ficheiros no seu PC (veja Secção 4.6.4, “Tornar a palavra-passe do root segura”). Isto significa que o sistema de palavra passe no login não pode proteger os seus dados privados e sensíveis contra um possível roubo do seu PC. Tem que implementar uma tecnologia de encriptação de dados para o fazer. Apesar do GNU privacy guard (veja Secção 10.3, “Infraestrutura da segurança de dados”) poder encriptar ficheiro,consome alguns esforços do utilizador.

Dm-crypt facilitam a encriptação de dados automática nativamente através de módulos do kernel Linux com o mínimo de esforço do utilizador utilizando device-mapper.


[Cuidado] Cuidado

A encriptação de dados custa tempo de CPU, etc. Os dados encriptados ficam inacessíveis se a palavra-passe for perdida. Pondere as suas vantagens e custos.

[Nota] Nota

O sistema Debian inteiro pode ser instalado num disco encriptado pelo instalador debian (lenny ou mais recente) a usar dm-crypt/LUKS e initramfs.

[Dica] Dica

Veja Secção 10.3, “Infraestrutura da segurança de dados” para utilitário de encriptação do espaço de utilizador: GNU Privacy Guard.

Pode encriptar o conteúdo de aparelhos de massa amovíveis, por exemplo, uma pen USB em "/dev/sdx", a usar dm-crypt/LUKS. Simplesmente formate-a como a seguir.

# 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

Depois, pode ser montado normalmente em "/media/username/disk_label", exceto para pedir a password (veja Secção 10.1.7, “Aparelho de armazenamento amovível”) no ambiente de trabalho moderno utilizando o pacote udisks2. A diferença é que todos os dados escritos nele são encriptados. A introdução da palavra-passe pode ser automatizada utilizando um porta-chaves (ver Secção 10.3.6, “Gestor de palavras-passe”).

Pode, em alternativa, formatar os media num sistema de ficheiros diferente, por exemplo, ext4 com "mkfs.ext4 /dev/mapper/sdx1". Se em vez disso for utilizado o btrfs, o pacote udisks2-btrfs precisa de ser instalado. Para estes sistemas de ficheiros, a propriedade do ficheiro e as permissões podem ter de ser configuradas.

Debian distribui o kernel Linux organizado em módulos como pacotes para as arquitecturas suportadas.

Se está a ler esta documentação, provavelmente não precisa de compilar o kernel Linux por si próprio.

O Debian tem método próprio dele para compilar o kernel e os módulos relacionados.


Se usa initrd em Secção 3.1.2, “Estágio 2: o gestor de arranque”, certifique-se de ler a informação relacionada em initramfs-tools(8), update-initramfs(8), mkinitramfs(8) e initramfs.conf(5).

[Atenção] Atenção

Não ponha ligações simbólicas aos diretórios na árvore fonte (ex. "/usr/src/linux*") a partir de "/usr/include/linux" e "/usr/include/asm" quando compilar a fonte do kernel Linux. (Alguns documentos antigos sugerem isto.)

[Nota] Nota

Quando compilar o kernel Linux mais recente no sistema Debian stable, pode ser necessário o uso das ferramentas backport mais recentes do Debian unstable.

module-assistant(8) (ou a sua forma curta m-a) ajuda os utilizadores a construir e instalar facilmente pacote(s) de módulos para um ou mais kernels personalizados.

O suporte dinâmico a módulos do kernel (DKMS) é uma nova infraestrutura independente da distribuição desenhada para permitir que módulos de kernel individuais sejam atualizados sem se alterar todo o kernel. Isto é usado para a manutenção de módulos de fora-da-árvore. Isto também facilita a reconstrução de módulos quando se atualiza os kernels.

O driver de hardware é o código que corre nos CPUs principais do sistema alvo. A maioria dos drivers de hardware estão agora disponíveis como software livre e estão incluídos nos pacotes normais do kernel Debian na área main.

  • Controlador de GPU

    • Controlador de GPU Intel (main)

    • Controlador de GPU AMD/ATI (main)

    • Controlador de GPU NVIDIA (main nouveau e em non-free controladores binários, sem código fonte, suportados pelo fabricante.)

O firmware é o código ou os dados carregados no dispositivo ligado ao sistema de destino (por exemplo, micro-código da CPU, código de renderização executado na GPU, ou dados FPGA / CPLD, ...). Alguns pacotes de firmware estão disponíveis como software livre, mas muitos pacotes de firmware não estão disponíveis como software livre, uma vez que contêm dados binários sem fonte. A instalação destes dados de firmware é essencial para que o dispositivo funcione como esperado.

  • Os pacotes de dados do firmware que contêm dados carregados na memória volátil do dispositivo de destino.

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

  • Os pacotes de programas de atualização do firmware que actualizam os dados na memória não volátil do dispositivo alvo.

    • fwupd (principal): Daemon de atualização de firmware que descarrega dados de firmware do Linux Vendor Firmware Service.

    • gnome-firmware (main): Interface GTK para o fwupd

    • plasma-discover-backend-fwupd (main): Interface Qt para fwupd

Por favor note que o acesso aos pacotes non-free-firmware são disponibilizados pelo meio de instalação oficial para oferecer uma experiência de instalação funcional ao utilizador desde Debian 12 Bookworm. A área non-free-firmware é descrita em Secção 2.1.5, “Básico do arquivos Debian”.

Tenha também em atenção que os dados de firmware descarregados pelo fwupd a partir do Linux Vendor Firmware Service e carregados para o kernel Linux em execução podem não ser livres.

O uso de sistema virtualizado permite-nos correr várias instâncias do sistema simultâneamente num único hardware.

Existem várias plataformas de ferramentas de virtualização e emulação.

  • Pacotes completos de emulação de hardware, como os instalados pelo meta-pacote games-emulator

  • Principalmente emulação de nível de CPU com algumas emulações de dispositivos de E/S, como o QEMU

  • Principalmente virtualização no nível da CPU com algumas emulações de dispositivos de E/S, como a Máquina Virtual baseada em Kernel (KVM)

  • Virtualização de contentores ao nível do SO com suporte ao nível do kernel, como LXC (Linux Containers), Docker, systemd-nspawn(1), ...

  • Virtualização do acesso ao sistema de ficheiros ao nível do SO com a substituição da chamada da biblioteca do sistema no caminho do ficheiro, como o chroot

  • Virtualização do acesso ao sistema de ficheiros ao nível do SO com a substituição da chamada da biblioteca do sistema sobre a propriedade do ficheiro, como o fakeroot

  • Emulação da API do SO, como o Wine

  • Virtualização ao nível do interpretador com a sua seleção de executáveis e substituições de bibliotecas em tempo de execução, tais como virtualenv e venv para Python

A virtualização de contentores utiliza Secção 4.7.5, “Caraterísticas de segurança do Linux” e é a tecnologia por trás de Secção 7.7, “Sandbox”.

Aqui estão alguns pacotes para o ajudar a configurar o sistema virtualizado.

Tabela 9.27. Lista de ferramentas de virtualização

pacote popcon tamanho descrição
coreutils V:880, I:999 18307 Utilitários do núcleo GNU que contêm chroot(8)
systemd-container V:53, I:61 1330 ferramentas de contentor/nspawn do systemd que contêm systemd-nspawn(1)
schroot V:5, I:7 2579 ferramenta especializada para executar pacotes binários Debian em chroot
sbuild V:1, I:3 243 ferramenta para construir pacotes binários Debian a partir de fontes Debian
debootstrap V:5, I:54 314 bootstrap um sistema Debian básico (escrito em sh)
cdebootstrap V:0, I:1 115 bootstrap um sistema Debian (escrito em C)
cloud-image-utils V:1, I:17 66 utilitários de gestão de imagens na nuvem
cloud-guest-utils V:3, I:13 71 utilitários para hóspedes na nuvem
virt-manager V:11, I:44 2296 Virtual Machine Manager: aplicação de ambiente de trabalho para gerir máquinas virtuais
libvirt-clients V:46, I:65 1241 programas para a biblioteca libvirt
incus V:0, I:0 56209 Incus: contentor de sistema e gestor de máquinas virtuais (para Debian 13 "Trixie")
lxd V:0, I:0 52119 LXD: contentor de sistema e gestor de máquinas virtuais (para Debian 12 "Bookworm")
podman V:14, I:16 41948 podman: motor para executar contentores baseados em OCI em Pods
podman-docker V:0, I:0 249 motor para executar contentores baseados em OCI em Pods - revestimento para docker
docker.io V:41, I:43 150003 docker: tempo de execução do contentor Linux
games-emulator I:0 21 emulador de jogos: Emuladores Debian para jogos
bochs V:0, I:0 6956 Bochs: emulador PC IA-32
qemu I:14 97 QEMU: emulador de processador genérico rápido
qemu-system I:22 66 QEMU: binários de emulação de sistema completo
qemu-user V:1, I:6 93760 QEMU: binários de emulação em modo de utilizador
qemu-utils V:12, I:106 10635 QEMU: utilitários
qemu-system-x86 V:33, I:91 58140 KVM: virtualização completa em hardware x86 com virtualização assistida por hardware
virtualbox V:6, I:8 130868 VirtualBox: solução de virtualização x86 em i386 e amd64
gnome-boxes V:1, I:7 6691 Boxes: Aplicativo GNOME simples para acessar sistemas virtuais
xen-tools V:0, I:2 719 ferramentas para gerir o servidor virtual XEN do debian
wine V:13, I:60 132 Wine: Windows API Implementation (suite standard)
dosbox V:1, I:15 2696 DOSBox: emulador x86 com gráficos Tandy/Herc/CGA/EGA/VGA/SVGA, som e DOS
lxc V:9, I:12 25890 Ferramentas de espaço do utilizador de contentores Linux
python3-venv I:88 6 venv para criar ambientes virtuais python (biblioteca de sistema)
python3-virtualenv V:9, I:50 356 virtualenv para criar ambientes python virtuais isolados
pipx V:3, I:19 3324 pipx para instalar aplicações python em ambientes isolados

Veja o artigo da Wikipedia Comparação de plataformas de máquinas virtuais para uma comparação detalhada das diferentes soluções de plataformas de virtualização.

[Nota] Nota

Os kernels predefinidos de Debian suportam KVM desde lenny.

O fluxo e trabalho típico para virtualização envolve vários passos.

Para o ficheiro de imagem de disco raw, veja Secção 9.7, “A imagem de disco”.

Para outros ficheiros de imagem de disco virtual, pode usar o qemu-nbd para exportá-los pelo protocolo aparelho de bloco de rede e montá-los a usar o módulo de kernel nbd.

O qemu-nbd(8) suporta os formatos de disco suportados pelo QEMU: raw, qcow2, qcow, vmdk, vdi, bochs, cow (modo-de-utilizador de Linux de copiar-ao-escrever), parallels, dmg, cloop, vpc, vvfat (VFAT virtual) e aparelho_máquina.

O aparelho de bloco em rede pode suportar partições do mesmo modo que o aparelho de loop (veja Secção 9.7.3, “Montar o ficheiro de imagem de disco”). Pode montar a primeira partição de "disk.img" como a seguir.

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

Pode exportar apenas a primeira partição de "disk.img" a usar a opção "-P 1" para qemu-nbd(8).

Se deseja experimentar um novo ambiente Debian a partir de uma consola terminal, eu recomendo que use chroot. Isto permite-lhe correr aplicações de consola em Debian unstable e testing sem os riscos habituais associados e sem reiniciar. chroot(8) é a forma mais básica.

[Cuidado] Cuidado

Os exemplos abaixo assumem que tanto o sistema base como o sistema chroot partilham a mesma arquitetura de CPU amd64.

Embora possa criar manualmente um ambiente chroot(8) utilizando o debootstrap(1), isto requer esforços não triviais.

O pacote sbuild para construir pacotes Debian a partir da fonte usa o ambiente chroot gerido pelo pacote schroot. Vem com o script auxiliar sbuild-createchroot(1). Vamos aprender como ele funciona, executando-o da seguinte forma.

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

Pode ver como debootstrap(8) preenche os dados do sistema para o ambiente unstable em "/srv/chroot/unstable-amd64-sbuild" para um sistema de compilação mínimo.

Pode iniciar sessão neste ambiente utilizando schroot(1).

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

Veja como é criada uma shell de sistema a correr num ambiente unstable.

[Nota] Nota

O ficheiro "/usr/sbin/policy-rc.d" que sai sempre com 101 impede que os programas daemon sejam iniciados automaticamente no sistema Debian. Veja "/usr/share/doc/init-system-helpers/README.policy-rc.d.gz".

[Nota] Nota

Alguns programas sob chroot podem requerer acesso a mais ficheiros do sistema pai para funcionarem do que o sbuild-createchroot disponibiliza como acima. Por exemplo, "/sys", "/etc/passwd", "/etc/group", "/var/run/utmp", "/var/log/wtmp", etc. podem precisar de ser montados em união ou copiados.

[Dica] Dica

O pacote sbuild ajuda a construir um sistema chroot e constrói um pacote dentro do chroot usando schroot como seu backend. É um sistema ideal para verificar dependências de construção. Veja mais sobre o sbuild na wiki Debian e um exemplo de configuração do sbuild em "Guia para administradores Debian".

[Dica] Dica

O comando systemd-nspawn(1) ajuda a executar um comando ou SO num contentor leve de forma semelhante ao chroot. Ele é mais poderoso, pois usa namespaces para virtualizar completamente a árvore de processos, IPC, nome de host, nome de domínio e, opcionalmente, rede e bancos de dados de usuários. Veja systemd-nspawn.

Se deseja experimentar um novo ambiente de trabalho GUI de qualquer SO, eu recomendo que use QEMU ou KVM num sistema Debian stable para correr múltiplos sistemas de desktop de forma segura usando virtualização. Estes permitem-lhe correr quaisquer aplicações de área de trabalho incluindo as da Debian unstable e testing sem os riscos habituais associados a elas e sem reiniciar.

Como o QEMU puro é muito lento, é recomendado acelerá-lo com KVM quando o sistema da máquina o suporta.

Virtual Machine Manager, também conhecido como virt-manager, é uma ferramenta GUI conveniente para gerir máquinas virtuais KVM através da libvirt.

A imagem de disco virtual "virtdisk.qcow2" que contem um sistema Debian para o QEMU pode ser criada a usar o instalador de debian em pequenos CDs como a seguir.

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

Correr outras distribuições de GNU/Linux como o Ubuntu e o Fedora sob virtualização é um bom modo de aprender dicas de configuração. Também outros SOs proprietários podem correr muito bem sob esta virtualização do GNU/Linux.

Veja mais dicas em Debian wiki: SystemVirtualization.



[2] Exemplos de personalização mais elaborados: "Vim Galore","sensible.vim", ...

[3] vim-pathogen foi popular.