Referência Debian Osamu Aoki Copyright © 2013-2024 Osamu Aoki Esta Referência Debian (versão 2.125) (2024-11-15 13:32:55 UTC) pretende fornecer uma visão geral do sistema Debian como um guia     do utilizador pós-instalação. Cobre muitos aspetos da administração do sistema através de exemplos shell-command para não programadores. Resumo Este livro é livre; pode redistribuí-lo e/ou modificá-lo sob os termos da Licença Pública Geral GNU de qualquer versão compatível com a Definição Debian de Software Livre (DFSG). --------------------------------------------------------------------- Índice Prefácio 1. Aviso Legal 2. O que é Debian 3. Acerca deste documento 3.1. Regras orientadoras 3.2. Pré-requisitos 3.3. Convenções 3.4. popcon 3.5. O tamanho do pacote 3.6. Relatórios de bugs deste documento 4. Memorandos para novos utilizadores 5. Algumas citações para os novos utilizadores 1. Manuais de GNU/Linux 1.1. Básico da consola 1.1.1. A linha de comandos da shell 1.1.2. The shell prompt under GUI 1.1.3. A conta root 1.1.4. A linha de comandos shell do root 1.1.5. GUI de ferramentas de administração do sistema 1.1.6. Consolas virtuais 1.1.7. Como abandonar a linha de comandos 1.1.8. Como desligar o sistema 1.1.9. Recuperar uma consola sã 1.1.10. Sugestões de pacotes adicionais para o novato 1.1.11. Uma conta de utilizador extra 1.1.12. Configuração do sudo 1.1.13. Hora de brincar 1.2. Sistema de ficheiros tipo Unix 1.2.1. Noções básicas de ficheiros Unix 1.2.2. Internos do sistema de ficheiros 1.2.3. Permissões do sistema de ficheiros 1.2.4. Controlo de permissões para ficheiros acabados de criar: umask 1.2.5. Permissões para grupos de utilizadores (group) 1.2.6. Marcas temporais (Timestamps) 1.2.7. Links (ligações) 1.2.8. Pipes com nome (FIFOs) 1.2.9. Sockets 1.2.10. Ficheiros de aparelho 1.2.11. Ficheiros de aparelhos especiais 1.2.12. procfs e sysfs 1.2.13. tmpfs 1.3. Midnight Commander (MC) 1.3.1. Personalização do MC 1.3.2. Iniciar o MC 1.3.3. Gestor de ficheiros no MC 1.3.4. Truques de linha de comandos no MC 1.3.5. O editor interno em MC 1.3.6. O visualizador interno no MC 1.3.7. Funcionalidades de auto-arranque do MC 1.3.8. Virtual filesystem of MC 1.4. O ambiente de trabalho estilo Unix básico 1.4.1. A shell de login 1.4.2. Personalizar bash 1.4.3. Teclas especiais 1.4.4. Mouse operations 1.4.5. O pager 1.4.6. O editor de texto 1.4.7. Definir um editor de texto predefinido 1.4.8. Using vim 1.4.9. Gravar as atividades da shell 1.4.10. Comandos básicos de Unix 1.5. O comando simples da shell 1.5.1. Execução do comando e variável de ambiente 1.5.2. A variável "$LANG" 1.5.3. A variável "$PATH" 1.5.4. A variável "$HOME" 1.5.5. Opções da linha de comandos 1.5.6. Glob da shell 1.5.7. Valor de retorno do comando 1.5.8. Sequências de comandos típicas e redireccionamento da shell 1.5.9. Comando alias 1.6. Processamento de texto estilo Unix 1.6.1. Ferramentas de texto de Unix 1.6.2. Expressões regulares 1.6.3. Expressões de substituição 1.6.4. Substituição global com expressões regulares 1.6.5. Extrair dados de tabela de ficheiro de texto 1.6.6. Trechos de script para canalizar comandos em pipe 2. Gestão de pacotes Debian 2.1. Pré-requisitos da gestão de pacotes Debian 2.1.1. Debian package management system 2.1.2. Configuração de pacotes 2.1.3. Precauções básicas 2.1.4. A vida com atualizações eternas 2.1.5. Básico do arquivos Debian 2.1.6. Debian é 100% software livre 2.1.7. Dependências de pacote 2.1.8. O fluxo de eventos da gestão de pacotes 2.1.9. Primeira resposta a problemas com a gestão de pacotes 2.1.10. Como escolher os pacotes Debian 2.1.11. How to cope with conflicting requirements 2.2. Operações básicas de gestão de pacotes 2.2.1. apt vs. apt-get / apt-cache contra o aptitude 2.2.2. Operações básicas de gestão de pacotes com a linha de comandos 2.2.3. Uso interativo do aptitude 2.2.4. Teclas de atalho do aptitude 2.2.5. Vistas de pacote no aptitude 2.2.6. Opções do método de pesquisa com o aptitude 2.2.7. A fórmula regex do aptitude 2.2.8. Resolução de dependências do aptitude 2.2.9. Relatórios (logs) de atividade de pacotes 2.3. Exemplos de operações do aptitude 2.3.1. Seeking interesting packages 2.3.2. Listagem de pacotes com correspondência por expressão regular nos nomes de pacotes 2.3.3. Explorar com a correspondência de expressão regular 2.3.4. Purgar pacotes removidos definitivamente 2.3.5. Acertar o estado auto/manual de instalação 2.3.6. atualização total ao sistema 2.4. Operações de gestão avançada de pacotes 2.4.1. Operações de gestão avançada de pacotes com linha de comandos 2.4.2. Verificação dos ficheiros pacotes instalados 2.4.3. Salvaguardar para problemas de pacotes 2.4.4. Procurar nos meta-dados do pacote 2.5. Os interiores da gestão de pacotes Debian 2.5.1. Meta dados do arquivo 2.5.2. Ficheiro "Release" de nível de topo e autenticidade: 2.5.3. Ficheiros "Release" do nível de arquivo 2.5.4. Obter os meta dados do pacote 2.5.5. O estado dos pacote para o APT 2.5.6. O estado de pacotes para o aptitude 2.5.7. Copias locais dos pacotes obtidos 2.5.8. Nomes de ficheiros de pacotes Debian 2.5.9. O comando dpkg 2.5.10. O comando update-alternatives 2.5.11. O comando dpkg-statoverride 2.5.12. O comando dpkg-divert 2.6. Recuperação de um sistema danificado 2.6.1. Failed installation due to missing dependencies 2.6.2. Caching errors of the package data 2.6.3. Incompatibilidade com configurações antigas de utilizador 2.6.4. Pacotes diferentes com ficheiros sobrepostos 2.6.5. Corrigir script problemático de pacote 2.6.6. Recuperação com o comando dpkg 2.6.7. Recuperar dados de seleção de pacotes 2.7. Dicas para a gestão de pacotes 2.7.1. Quem fez o upload do pacote? 2.7.2. Limitar a largura de banda de descarga para o APT 2.7.3. Descarga e atualização automática de pacotes 2.7.4. atualizações e Backports 2.7.5. External package archives 2.7.6. Packages from mixed source of archives without apt-pinning 2.7.7. Tweaking candidate version with apt-pinning 2.7.8. Bloquear pacotes instalados por "Recomendados" 2.7.9. Acompanhar testing com alguns pacotes de unstable 2.7.10. Acompanhar unstable com alguns pacotes de experimental 2.7.11. Downgrade de emergência 2.7.12. O pacote equivs 2.7.13. Portar um pacote ao sistema stable 2.7.14. Servidor proxy para o APT 2.7.15. Mais leituras sobre a gestão de pacotes 3. A inicialização do sistema 3.1. Uma visão geral do processo de arranque 3.1.1. Stage 1: the UEFI 3.1.2. Estágio 2: o gestor de arranque 3.1.3. Estágio 3: o mini-sistema Debian 3.1.4. Estágio 4: o sistema Debian normal 3.2. Systemd 3.2.1. init do Systemd 3.2.2. Systemd login 3.3. A mensagem do kernel 3.4. A mensagem do sistema 3.5. System management 3.6. Other system monitors 3.7. System configuration 3.7.1. O nome da máquina 3.7.2. O sistema de ficheiros 3.7.3. Inicialização da interface de rede 3.7.4. Cloud system initialization 3.7.5. Customization example to tweak sshd service 3.8. O sistema udev 3.9. A inicialização de módulos do kernel 4. Authentication and access controls 4.1. Autenticação normal de Unix 4.2. Gerir informação de conta e palavra-passe 4.3. Boa palavra-passe 4.4. Criar palavra-passe encriptada 4.5. PAM e NSS 4.5.1. Ficheiros de configuração acedidos pelo PAM e NSS 4.5.2. O moderno sistema de gestão centralizado 4.5.3. "Porque o su do GNU não suporta o grupo wheel" 4.5.4. Regras de palavra-passe rigorosas 4.6. Segurança da autenticação 4.6.1. Palavra-passe segura na Internet 4.6.2. Shell Segura 4.6.3. Medidas de segurança extra para a Internet 4.6.4. Tornar a palavra-passe do root segura 4.7. Outros controles de acesso 4.7.1. Access control lists (ACLs) 4.7.2. sudo 4.7.3. PolicyKit 4.7.4. Recadeiair acesso a alguns serviços de servidor 4.7.5. Linux security features 5. Configuração de rede 5.1. A infra-estrutura de rede básica 5.1.1. A resolução de nome de máquina 5.1.2. O nome da interface de rede 5.1.3. A gama de endereços de rede para a LAN 5.1.4. O suporte a aparelhos de rede 5.2. A configuração moderna de rede para desktop 5.2.1. Ferramentas GUI de configuração de rede 5.3. A moderna configuração de rede sem GUI 5.4. The modern network configuration for cloud 5.4.1. The modern network configuration for cloud with DHCP 5.4.2. The modern network configuration for cloud with static IP 5.4.3. The modern network configuration for cloud with Network Manager 5.5. A configuração de rede de baixo nível 5.5.1. Comandos iproute2 5.5.2. Operações de rede seguras de baixo nível 5.6. Optimização da rede 5.6.1. Encontrar o MTU óptimo 5.6.2. Optimização WAN TCP 5.7. Infraestrutura netfilter 6. Aplicações de rede 6.1. Navegadores web 6.1.1. Spoofing the User-Agent string 6.1.2. Browser extension 6.2. O sistema de correio electrónico (mail) 6.2.1. Noções básicas de mail 6.2.2. Modern mail service limitation 6.2.3. Historic mail service expectation 6.2.4. Agente de transporte de mail (MTA) 6.3. O servidor de acesso remoto e utilitários (SSH) 6.3.1. Bases do SSH 6.3.2. User name on the remote host 6.3.3. Ligar sem palavras-passe remotas 6.3.4. Lidar com clientes SSH alienígenas 6.3.5. Configurar o ssh-agent 6.3.6. Sending a mail from a remote host 6.3.7. Reencaminhamento de portos para SMTP/POP3 em túnel 6.3.8. Como desligar o sistema remoto em SSH 6.3.9. Depurar problemas no SSH 6.4. O servidor de impressão e utilitários 6.5. Outras aplicações de servidor de rede 6.6. Outros clientes de aplicação de rede 6.7. Os diagnósticos dos daemons do sistema 7. GUI System 7.1. GUI desktop environment 7.2. GUI communication protocol 7.3. GUI infrastructure 7.4. GUI applications 7.5. User directories 7.6. Fonts 7.6.1. Fontes (tipos de letra) básicas 7.6.2. Font rasterization 7.7. Sandbox 7.8. Remote desktop 7.9. X server connection 7.9.1. X server local connection 7.9.2. X server remote connection 7.9.3. X server chroot connection 7.10. Área de transferência (Clipboard) 8. I18N e L10N 8.1. O locale 8.1.1. Fundamentos para o locale UTF-8 8.1.2. A reconfiguração do locale 8.1.3. Codificação de nomes de ficheiros 8.1.4. Mensagens localizadas e documentação traduzida 8.1.5. Efeitos do locale 8.2. A entrada do teclado 8.2.1. The keyboard input for Linux console and X Window 8.2.2. The keyboard input for Wayland 8.2.3. O suporte a método de entrada com IBus 8.2.4. Um exemplo para Japonês 8.3. O ecrã de resultados 8.4. Caracteres Asiáticos de Leste de Altura Ambígua 9. Dicas do sistema 9.1. The console tips 9.1.1. Gravar as atividades da shell de modo limpo 9.1.2. O programa screen 9.1.3. Navigating around directories 9.1.4. Readline wrapper 9.1.5. Scanning the source code tree 9.2. Personalizar o vim 9.2.1. Customizing vim with internal features 9.2.2. Customizing vim with external packages 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. Scheduling tasks on event 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. Virtualization and emulation tools 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 10. Gestão de dados 10.1. Partilhar, copiar e arquivar 10.1.1. Ferramentas de arquivo e compressão 10.1.2. Ferramentas de cópia de sincronização 10.1.3. Idiomas para o arquivo 10.1.4. Idiomas para a cópia 10.1.5. Idiomas para a seleção de ficheiros 10.1.6. Meio de arquivo 10.1.7. Aparelho de armazenamento amovível 10.1.8. Escolha de sistema de ficheiros para partilhar dados 10.1.9. Partilhar dados via a rede 10.2. Salvaguarda (backup) e recuperação 10.2.1. Backup and recovery policy 10.2.2. Suites de utilitários de backup 10.2.3. Backup tips 10.3. Infraestrutura da segurança de dados 10.3.1. Gestão de chaves para GnuPG 10.3.2. Usa GnuPG em ficheiros 10.3.3. Usar GnuPG com o Mutt 10.3.4. Usar GnuPG com o Vim 10.3.5. O valor de controlo MD5 10.3.6. Password keyring 10.4. Ferramentas de fusão de código fonte 10.4.1. Extrair as diferenças para ficheiros fonte 10.4.2. Fundir atualizações para ficheiros de fonte 10.4.3. Interactive merge 10.5. Git 10.5.1. Configuração do cliente Git 10.5.2. Basic Git commands 10.5.3. Git tips 10.5.4. Referências do Git 10.5.5. Other version control systems 11. Conversão de dados 11.1. Ferramentas de conversão de dados em texto 11.1.1. Converter um ficheiro de texto com o iconv 11.1.2. Verifica ficheiro se é UTF-8 com o iconv 11.1.3. Converter os nomes dos ficheiros com o iconv 11.1.4. conversão EOL 11.1.5. Conversão de TAB 11.1.6. Editores com auto-conversão 11.1.7. Extracção de texto simples 11.1.8. Destacar e formatar dados de texto simples 11.2. Dados XML 11.2.1. Dicas básicas para XML 11.2.2. Processamento de XML 11.2.3. A extracção de dados de XML 11.2.4. The XML data lint 11.3. Formatação de texto 11.3.1. formatação de texto roff 11.3.2. TeX/LaTeX 11.3.3. Impressão bonita de um manual 11.3.4. Criar um manual 11.4. Dados imprimíveis 11.4.1. Ghostscript 11.4.2. Juntar dois ficheiros PS ou PDF 11.4.3. Utilitários de dados imprimíveis 11.4.4. Imprimir com o CUPS 11.5. A conversão de dados de mail 11.5.1. Noções básicas de dados de mail 11.6. Ferramentas de dados gráficos 11.6.1. Graphic data tools (metapackage) 11.6.2. Graphic data tools (GUI) 11.6.3. Graphic data tools (CLI) 11.7. Conversão de dados variados 12. Programação 12.1. O script de shell 12.1.1. Compatibilidade da shell do POSIX 12.1.2. Parâmetros da shell 12.1.3. Condicionais da shell 12.1.4. Ciclos (loops) da shell 12.1.5. Shell environment variables 12.1.6. A sequência de processamento da linha de comandos da shell 12.1.7. Programas utilitários para script de shell 12.2. Scripting in interpreted languages 12.2.1. Debugging interpreted language codes 12.2.2. GUI program with the shell script 12.2.3. Custom actions for GUI filer 12.2.4. A loucura dos scripts curtos de Perl 12.3. Coding in compiled languages 12.3.1. C 12.3.2. Programa C simples (gcc) 12.3.3. Flex — um Lex melhor 12.3.4. Bison — um Yacc melhor 12.4. Ferramentas de análise de código estático 12.5. Depuração 12.5.1. Execução gdb básica 12.5.2. Depurar o pacote Debian 12.5.3. Obter um backtrace 12.5.4. Comandos gdb avançados 12.5.5. Verificar a dependência em bibliotecas 12.5.6. Dynamic call tracing tools 12.5.7. Depurar Erros do X 12.5.8. Ferramentas de detecção de fugas de memória 12.5.9. Desassemblar binário 12.6. Build tools 12.6.1. Make 12.6.2. Autotools 12.6.3. Meson 12.7. Web 12.8. A tradução do código-fonte 12.9. Criar um pacote Debian A. Apêndice A.1. o labirinto Debian A.2. História do Copyright A.3. Formato do documento Lista de Tabelas 1.1. Lista de pacotes de programas interessantes em modo de texto 1.2. Lista de pacotes de documentação informativa 1.3. Lista de utilização de diretórios chave 1.4. Lista do primeiro caractere da saída de "ls -l" 1.5. O modo numérico para permissões de ficheiros em comandos chmod (1) 1.6. Exemplos do valor umask 1.7. Lista de grupos notáveis disponibilizados pelo sistema para acesso a ficheiros 1.8. Lista de grupos notáveis disponibilizados pelo sistema para execuções de comandos particulares 1.9. Lista dos tipos de marcas temporais 1.10. Lista de ficheiros de aparelhos especiais 1.11. As teclas de atalho do MC 1.12. A reacção à tecla enter no MC 1.13. Lista de programas da shell 1.14. Lista de teclas de atalho para bash 1.15. List of mouse operations and related key actions on Debian 1.16. Lista de teclas básicas do Vim 1.17. lista dos comandos Unix básicos 1.18. As 3 partes do valor locale 1.19. Lista de recomendações de locale 1.20. Lista de valores "$HOME" 1.21. Padrões glob da shell 1.22. Códigos de saída do comando 1.23. Idiomas de comandos de shell 1.24. Descritores de ficheiro predefinido 1.25. Meta-caracteres para BRE e ERE 1.26. A expressão de substituição 1.27. Lista de trechos de script para canalizar comandos em pipe 2.1. Lista de ferramentas de gestão de pacotes Debian 2.2. Lista de sites de arquivos Debian 2.3. Lista de área de arquivo Debian 2.4. A relação entre suite e nome de código 2.5. Lista de sites web chave para resolver problemas com um pacote específico 2.6. Operações básicas de gestão de pacotes com a linha de comandos a utilizar apt(8), aptitude(8) e apt-get(8) /apt-cache(8) 2.7. Opções de comando notáveis para o aptitude(8) 2.8. Lista de teclas de atalho do aptitude 2.9. Lista de vistas para o aptitude 2.10. A categorização das vista de pacotes standard 2.11. Lista da fórmula regex do aptitude 2.12. Os ficheiros log para atividades de pacotes 2.13. Lista de operações de gestão avançada de pacotes 2.14. O conteúdo dos meta dados do arquivo Debian 2.15. A estrutura de nomes dos pacotes Debian 2.16. Os caracteres utilizáveis para cada componente nos nomes de pacotes Debian 2.17. Ficheiros notáveis criados pelo dpkg 2.18. Lista de valores notáveis de Pin-Priority para a técnica de apt-pinning. 2.19. Lista de ferramentas proxy especiais para arquivos Debian 3.1. Lista de gestores de arranque 3.2. The meaning of the menu entry of the above part of /boot/grub/ grub.cfg 3.3. Lista de utilitários de arranque para o sistema Debian 3.4. Lista de níveis de erro do kernel 3.5. List of typical journalctl command snippets 3.6. List of typical systemctl command snippets 3.7. List of other monitoring command snippets under systemd 4.1. 3 ficheiros de configuração importantes para pam_unix(8) 4.2. A segunda entrada no conteúdo de "/etc/passwd" 4.3. Lista de comandos para gerir informação de conta 4.4. Lista de ferramentas para gerar palavras-passe 4.5. Lista de sistemas PAM e NSS notáveis 4.6. Lista de ficheiros de configuração acedidos pelo PAM e NSS 4.7. Lista de serviços e portos inseguros e seguros 4.8. Lista de ferramentas para disponibilizar medidas de segurança extra 5.1. Lista de ferramentas de configuração de rede 5.2. Lista de gamas de endereços de rede 5.3. Tabela de tradução dos comandos obsoletos net-tools para os novos comandos iproute2 5.4. Lista de comandos de rede de baixo nível 5.5. Lista de ferramentas de optimização de rede 5.6. Regras básicas para o valor MTU óptimo 5.7. Lista de ferramentas de firewall 6.1. Lista de exploradores web 6.2. Lista de agentes utilizador de mail (MUA) 6.3. List of basic mail transport agent related packages 6.4. Lista dos manuais importantes do postfix 6.5. Lista de ficheiros de configuração relacionados com endereços de mail 6.6. Lista de operações MTA básicas 6.7. Lista de servidores de acesso remoto e utilitários 6.8. Lista de ficheiros de configuração do SSH 6.9. Lista de exemplos de arranque do cliente SSH 6.10. Lista de clientes SSH para outras plataformas 6.11. Lista de servidores de impressoras e utilitários 6.12. Lista de outras aplicações de servidor de rede 6.13. Lista de clientes de aplicação de rede 6.14. Lista de RFCs populares 7.1. List of desktop environment 7.2. List of notable GUI infrastructure packages 7.3. List of notable GUI applications 7.4. List of notable TrueType and OpenType fonts 7.5. List of notable font environment and related packages 7.6. List of notable sandbox environment and related packages 7.7. List of notable remote access server 7.8. Lista de métodos de ligação ao servidor X 7.9. List of programs related to manipulating character clipboard 8.1. List of IBus and its engine packages 9.1. List of programs to support console activities 9.2. Lista de ligações de teclas para o screen 9.3. Information on the initialization of vim 9.4. Lista de analisadores de log do sistema 9.5. Display examples of time and date for the "ls -l" command with the time style value 9.6. Lista de ferramentas gráficas de manipulação de imagens 9.7. List of packages which can record configuration history 9.8. Lista de ferramentas para monitorizar e controlar as atividades de programas 9.9. Lista de valores nice para a prioridade de agendamento 9.10. Lista dos estilos do comando ps 9.11. Lista dos sinais frequentemente usados para o comando kill 9.12. List of notable SAK command keys 9.13. Lista de ferramenta de identificação de hardware 9.14. Lista de ferramentas de configuração do hardware 9.15. Lista de pacotes de som 9.16. Lista de comandos para desativar o protector de ecrã 9.17. Lista dos tamanhos de memória reportados 9.18. Lista de ferramentas para segurança do sistema e verificação de integridade 9.19. Lista de pacotes de gestão de partições do disco 9.20. Lista de pacotes de gestão de sistemas de ficheiros 9.21. Lista de pacote para ver e editar dados binários 9.22. Lista de pacotes para ler e escrever ficheiros sem montar o disco 9.23. Lista de ferramentas para adicionar redundância de dados a ficheiros 9.24. Lista de pacotes para recuperação de ficheiros e dados e análise forense 9.25. Lista de utilitários de encriptação de dados 9.26. Lista de pacotes chave a serem instalados para a recompilação do kernel no sistema Debian 9.27. Lista de ferramentas de virtualização 10.1. Lista de ferramentas de arquivo e compressão 10.2. Lista de ferramentas de cópia e sincronização 10.3. Lista de hipóteses de sistemas de ficheiros para aparelhos de armazenamento amovíveis com cenários de utilização típica 10.4. Lista de serviços de rede para escolher com o cenário de utilização típico 10.5. Lista de suites utilitárias de salvaguarda 10.6. Lista de ferramentas de infraestrutura da segurança de dados 10.7. Lista de comandos do GNU Privacy Guard para gestão de chaves 10.8. Lista do significado do código de confiança 10.9. Lista de comandos do GNU Privacy Guard em ficheiros 10.10. Lista de ferramentas de fusão de código fonte 10.11. Lista de pacotes e comandos relacionados com o git 10.12. Main Git commands 10.13. Git tips 10.14. List of other version control system tools 11.1. Lista de ferramentas de conversão de dados em texto 11.2. Lista de valores de codificação e a utilização deles 11.3. Lista de estilos EOL para diferentes plataformas 11.4. Lista de comandos de conversão de TAB dos pacotes bsdmainutils e coreutils 11.5. Lista de ferramentas para extracção de dados de texto simples 11.6. Lista de ferramentas para destacar dados em texto simples 11.7. Lista de entidades predefinidas para XML 11.8. Lista de ferramentas XML 11.9. Lista de ferramentas DSSSL 11.10. Lista de ferramentas de extracção de dados de XML 11.11. Lista de ferramentas de impressão bonita de XML 11.12. Lista de ferramentas de formatação de texto 11.13. Lista de pacotes para ajudar a criar o manual (manpage) 11.14. Lista de interpretadores PostScript Ghostscript 11.15. Lista de utilitários de dados imprimíveis 11.16. Lista de pacotes para ajudar na conversão de dados de mail 11.17. List of graphics data tools (metapackage) 11.18. List of graphics data tools (GUI) 11.19. List of graphics data tools (CLI) 11.20. Lista de ferramentas de conversão de dados variados 12.1. Lista dos 'bashisms' típicos 12.2. Lista de parâmetros da shell 12.3. Lista de expansões de parâmetros de shell 12.4. Lista de substituições de parâmetros de shell chave 12.5. Lista de operadores de comparação de ficheiros na expressão condicional 12.6. Lista de operadores de comparação de cadeias na expressão condicional 12.7. Lista de pacotes que contém programas utilitários pequenos para scripts de shell 12.8. List of interpreter related packages 12.9. List of dialog programs 12.10. List of compiler related packages 12.11. Lista de geradores de análise LALR compatíveis com Yacc 12.12. Lista de ferramentas para análise de código estático 12.13. List of debug packages 12.14. Lista de comandos gdb avançados 12.15. Lista de ferramentas de detecção de fugas de memória 12.16. List of build tool packages 12.17. Lista de variáveis automáticas do make 12.18. Lista de expansões da variável do make 12.19. Lista de ferramentas de tradução de código-fonte Prefácio Índice 1. Aviso Legal 2. O que é Debian 3. Acerca deste documento 3.1. Regras orientadoras 3.2. Pré-requisitos 3.3. Convenções 3.4. popcon 3.5. O tamanho do pacote 3.6. Relatórios de bugs deste documento 4. Memorandos para novos utilizadores 5. Algumas citações para os novos utilizadores Esta Referência Debian (version 2.125) (2024-11-15 13:32:55 UTC) destina-se a fornecer uma visão geral da administração do sistema Debian como um guia do utilizador pós-instalação. O leitor alvo é quem está disposto a aprender scripts shell, mas que não está pronto para ler todas as fontes C para descobrir como o sistema GNU/Linux funciona. Para instruções de instalação, veja: * Guia de Instalação de Debian GNU/Linux para o sistema atualmente stable * Guia de Instalação de Debian GNU/Linux para o sistema atualmente stable 1. Aviso Legal Todas as garantias são recusadas. Todas as marcas registadas são     propriedade dos respetivos proprietários de marcas registadas deles. O próprio sistema Debian é um alvo em movimento. O que torna a sua documentação difícil de ser correta e atual. Embora a versão     atual testing do sistema Debian foi utilizado como base para escrever isto, alguns conteúdos podem já estar ultrapassados pelo tempo que você ler isto. Por favor, trate este documento como a referência secundária.     Este documento não substitui nenhum guia autorizado. O autor e os colaboradores não se responsabilizam por consequências de erros, omissões ou ambiguidade neste documento. 2. O que é Debian O Projeto Debian é uma associação de indivíduos que fizeram causa     comum para criar um sistema operacional livre. A distribuição dele é caracterizada pelo seguinte. * Compromisso com a liberdade do software: Contrato Social Debian e Definição Debian de Software Livre (DFSG) * Esforço distribuído de voluntários não remunerados através da Internet: https://www.debian.org * Grande quantidade de pacotes de softwares pré-compilados de     alta qualidade * Foco em estabilidade e segurança com acesso fácil a atualizações de segurança * Foco na atualização suave para os mais recentes pacotes de software dos arquivos testing * Grande quantidade de arquitecturas de hardware suportadas As peças de Software Livre em Debian vêm de GNU, Linux, BSD, X, ISC, Apache, Ghostscript, Common Unix Printing System , Samba, GNOME, KDE, Mozilla, LibreOffice, Vim, TeX, LaTeX, DocBook, Perl,     Python, Tcl, Java, Ruby, PHP, Berkeley DB, MariaDB, PostgreSQL, SQLite, Exim, Postfix, Mutt, FreeBSD, OpenBSD, Plan 9 e muitos mais projectos de software livre independentes. Debian integra esta diversidade de Software Livre num sistema. 3. Acerca deste documento 3.1. Regras orientadoras     Foram seguidas as seguintes regras de orientação ao compilar este documento. * Dar uma visão geral e saltar casos não comuns. (Imagem Geral) * Manter Curto e Simples. (Principio KISS) * Não reinventar a roda. (Utilizar apontadores para as     referências existentes) * Foco nas ferramentas não-GUI e consolas. (Utilizar exemplos de shell) * Ser objetivo. (Utilizar popcon etc.) Dica     Tentei elucidar aspectos hierárquicos e níveis mais baixos do sistema. 3.2. Pré-requisitos Atenção     Espera-se que se esforce a procurar respostas por si próprio e para além desta documentação. Este documento apenas oferece pontos de arranque eficientes.     Tem de procurar a solução por si a partir de fontes primárias. * O site Debian em https://www.debian.org para informação geral * A documentação sob o diretório "/usr/share/doc/nome_do_pacote " * O manual de estilo Unix: "dpkg -L nome_de_pacote |grep '/man/ man.*/'" * A página info estilo GNU: "dpkg -L nome_do_pacote |grep '/ info/'"     * The bug report: https://bugs.debian.org/package_name * O Debian Wiki em https://wiki.debian.org/ para os tópicos específicos e em movimento * The Single UNIX Specification from the Open Group's The UNIX System Home Page * A enciclopédia livre Wikipedia em https://www.wikipedia.org/ * O Livro de Mão dos Administradores de Debian * The HOWTOs from The Linux Documentation Project (TLDP) Nota     Para documentação detalhada, pode necessitar instalar o correspondente pacote de documentação chamado com o sufixo "-doc". 3.3. Convenções Este documento fornece informação através do seguinte estilo de     apresentação simplificado com exemplos de comandos de shell bash (1).     # command-in-root-account $ command-in-user-account Estas 'prompts' da shell distinguem a conta utilizada e     correspondem a definir variáveis de ambiente como: "PS1='\$'" e "PS2=' '". Estes valores são escolhidos para bem da legibilidade deste documento e não são típicos do sistema instalado. Todos os exemplos de comando são executados na localidade em     inglês "LANG=en_US.UTF8". Por favor, não espere que as strings de espaço reservado, como command-in-root-accout e command-in-user-account sejam traduzidos em exemplos de comando. Nota     Veja o significado das variáveis de ambiente "$PS1" e "$PS2" em bash(1). A ação necessária do administrador do sistema é escrita em     sentido imperativo, p.e. "Carregue na tecla Enter após escrever cada cadeia de comando na shell." A coluna descrição e semelhantes na tabela podem conter um sintagma nominal seguido da convenção de descrição curta do pacote que deixa cair os artigos como "um" e "o". Pode em alternativa conter uma frase no infinitivo tal como um sintagma nominal sem o antecedente "para" a seguir a convenção de     descrição curta de comando das 'manpages'. Isto pode parecer esquisito para algumas pessoas mas são as minhas escolhas intencionais de estilo para manter esta documentação o mais simples possível. Estes sintagmas nominais não começam por maiúscula nem terminam com ponto final a seguir esta convenção de descrição curta. Nota     Substantivos próprios incluindo os nomes de comandos mantêm maiúscula/minúscula sem respeitarem a sua localização. Um bloco de comandos citado num parágrafo de texto é referido     pelo tipo de letra de dactilografia entre aspas, tal como "aptitude safe-upgrade". Os dados em texto de um ficheiro de configuração citados num     parágrafo de texto são referidos em tipo de letra de máquina de escrever entre aspas, tal como "deb-src". Um comando é referenciado pelo seu nome em tipo de letra de     máquina de escrever seguido opcionalmente pelo número de secção da manpage em parêntesis, tal como bash(1). É encorajado a obter informação ao escrever o seguinte.     $ man 1 bash Uma manpage é referida pelo seu nome em tipo de letra de máquina     de escrever seguido pelo número de secção dele da manpage em parêntesis, tal como sources.list(5). É encorajado a obter informação ao escrever o seguinte.     $ man 5 sources.list Uma página info é referenciada pelo seu comando em tipo de letra     de máquina de escrever entre aspas, tal como "info make". É encorajado a obter informação ao escrever o seguinte.     $ info make Um nome de ficheiro é referenciado em tipo de letra de máquina de     escrever entre aspas, tal como "/etc/passwd". Para os ficheiros de configuração, é encorajado a obter informação ao escrever o seguinte.     $ sensible-pager "/etc/passwd" Um nome de diretório é referenciado em tipo de letra de máquina     de escrever entre aspas, tal como "/etc/apt/". É encorajado a explorar o conteúdo dele ao escrever o seguinte.     $ mc "/etc/apt/" Um nome de pacote é referenciado pelo nome dele em tipo de letra     de máquina de escrever, tal como vim. É encorajado a obter informação ao escrever o seguinte. $ dpkg -L vim     $ apt-cache show vim $ aptitude show vim Uma documentação pode indicar a localização dela pelo nome de ficheiro em tipo de letra de dactilografia entre aspas, tal como     "/usr/share/doc/base-passwd/users-and-groups.txt.gz" e "/usr/ share/doc/base-passwd/users-and-groups.html"; ou pelo seu URL, tal como https://www.debian.org. É encorajado a ler a documentação ao escrever o seguinte. $ zcat "/usr/share/doc/base-passwd/users-and-groups.txt.gz" | sensible-pager     $ sensible-browser "/usr/share/doc/base-passwd/users-and-groups.html" $ sensible-browser "https://www.debian.org" Uma variável de ambiente é referenciada pelo seu nome com um "$"     inicial em tipo de letra de máquina de escrever, entre aspas, tal como "$TERM". É encorajado a obter o valor atual dele ao escrever o seguinte.     $ echo "$TERM" 3.4. popcon Os dados popcon são apresentados como a medida objectiva da     popularidade de cada pacote. Foi descarregado em 2024-03-03 11:51:37 UTC e contém a submissão total de 237734 relatórios sobre 198687 pacotes binários e 27 arquitecturas. Nota     Por favor note que o arquivo amd64 unstable contém atualmente apenas 74165 pacotes. Os dados popcon contém relatórios de muitas instalações de sistemas antigos. O número de popcon precedido de "V:" para "votos" é calculado por     "1000 * (as submissões popcon para o pacote executado recentemente no PC) / (o total de submissões de popcon)". O número de popcon precedido de "I:" para "instalações" é     calculado por "1000 * (as submissões popcon para o pacote instalado no PC) / (o total de submissões de popcon)". Nota As figuras do popcon não devem ser consideradas como medidas     absolutas da importância dos pacotes. Existem muitos factores que podem desviar as estatísticas. Por exemplo, um sistema que participa no popcon pode ter diretórios montados como o "/usr/ bin" com a opção "noatime" para melhoria da performance do sistema e efectivamente desativar os "votos" de tal sistema. 3.5. O tamanho do pacote Os dados de tamanho do pacote são também apresentados como a medida objectiva para cada pacote. São baseados no     "Installed-Size:" reportado pelo comando "apt-cache show" ou pelo "aptitude show" (atualmente na amd64 arquitectura para o lançamento unstable). O tamanho reportado está em KB (Kilobyte = unidade para 1024 bytes). Nota Um pacote com um tamanho de pacote numericamente pequeno pode     indicar que o pacote no lançamento unstable é um pacote dummy que instala outros pacotes com conteúdos significativos por dependência. O pacote dummy activa uma transição suave ou divisão do pacote. Nota     Um tamanho de pacote seguido por "(*)" indica que o pacote no lançamento unstable está em falta e em vez dele é usado o tamanho do pacote para o lançamento experimental. 3.6. Relatórios de bugs deste documento Se encontrar quaisquer problemas neste documento por favor     preencha um relatório de bug contra o pacote debian-reference a utilizar o reportbug(1) . Por favor inclua sugestões de correção com "diff -u" sobre a versão de texto ou código-fonte. 4. Memorandos para novos utilizadores     Aqui estão alguns memorandos para os novos utilizadores: * Faça salvaguardas dos seus dados + Veja Secção 10.2, “Salvaguarda (backup) e recuperação”. * Mantenha a sua palavra-passe e chaves de segurança seguras * KISS (keep it simple stupid- manté-lo simples estupido) + Não exageres na engenharia do teu sistema * Leia os seus ficheiros log + O PRIMEIRO erro é aquele que conta * RTFM (read the fine manual - leia o manual)     * Pesquise na Internet antes de fazer perguntas * Não seja root quando não precisa de o ser * Não brinque com o sistema de gestão de pacotes * Não escreve nada que não compreenda * Não altere as permissões do ficheiro (antes da revisão de segurança completa) * Não abandones a shell de root antes de TESTARES as tuas alterações * Tem sempre uma media de arranque alternativa (caneta USB, CD, ...) 5. Algumas citações para os novos utilizadores     Aqui estão algumas citações interessantes da lista de email Debian que podem ajudar a elucidar novos utilizadores. * "Isto é Unix. Dá-lhe corda suficiente para se enforcar." --- Miquel van Smoorenburg     * "Unix É amigo do utilizador... Apenas é selectivo sobre quem são os seus amigos." --- Tollef Fog Heen     A Wikipedia tem o artigo "Unix philosophy" que lista citações interessantes. Capítulo 1. Manuais de GNU/Linux Acho que aprender um sistema de computador é como aprender uma     nova língua estrangeira. Apesar dos livros e documentação darem ajuda, tem que praticar também. De modo a ajudá-lo a iniciar suavemente, elaborei alguns pontos básicos. O design poderoso da Debian GNU/Linux vem do sistema operativo     Unix, isto é, um sistema operativo multi-utilizador e multi-tarefa. Necessita aprender a tirar vantagem do poder destas funcionalidades e semelhanças entre Unix e GNU/Linux. Não se esconda dos textos orientados ao Unix e não se guie     somente nos textos de GNU/Linux, por isto rouba-lhe muita informação útil. Nota     Se tem usado qualquer sistema de tipo Unix com ferramentas de linha de comandos, provavelmente já sabe tudo o que explico aqui. Por favor use isto como um teste de realidade e refrescamento. 1.1. Básico da consola 1.1.1. A linha de comandos da shell Upon starting the system, you are presented with the character     based login screen if you did not install any GUI environment such as GNOME or KDE desktop system. Suppose your hostname is foo, the login prompt looks as follows. If you installed a GUI environment, then you can still get to the     character based login prompt by Ctrl-Alt-F3, and you can return to the GUI environment via Ctrl-Alt-F2 (see Secção 1.1.6, “Consolas virtuais” below for more).     foo login: Na prompt de login, escreva o seu nome de utilizador, p.e.     penguin e carregue na tecla Enter, depois escreva a sua palavra-passe e carregue novamente na tecla Enter. Nota A seguir a tradição do Unix, o nome de utilizador e palavra-passe     do sistema Debian são sensíveis a maiúsculas/minúsculas. O nome de utilizador é geralmente escolhido apenas em minúsculas. A primeira conta de utilizador é normalmente criada durante a instalação. Podem ser criadas contas de utilizador adicionais com adduser(8) pelo root.     O sistema inicia com a mensagem de boas vindas armazenada em "/ etc/motd" (Mensagem do Dia) e apresenta uma prompt de comandos. Debian GNU/Linux 12 foo tty3 foo login: penguin Password: Linux foo 6.5.0-0.deb12.4-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.5.10-1~bpo12+1 (2023-11-23) x86_64     The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Wed Dec 20 09:39:00 JST 2023 on tty3 foo:~$     Está agora na shell. A shell interpreta os seus comandos. 1.1.2. The shell prompt under GUI If you installed a GUI environment during the installation, you are presented with the graphical login screen upon starting your     system. You type your username and your password to login to the non-privileged user account. Use tab to navigate between username and password, or use the primary click of the mouse. You can gain the shell prompt under GUI environment by starting a x-terminal-emulator program such as gnome-terminal(1), rxvt(1) or     xterm(1). Under the GNOME desktop environment, press SUPER-key (Windows-key) and typing in "terminal" to the search prompt does the trick. Em alguns Ambientes de Trabalho (como o fluxbox), pode não     existir um ponto de partida óbvio para o menu. Se isto acontecer, tente clicar (botão direito) no fundo do ambiente de trabalho e espere que apareça um menu. 1.1.3. A conta root A conta root também é chamada como de super utilizador ou de     utilizador privilegiado. A partir desta conta, pode executar as seguintes tarefas de administração do sistema: * Ler, escrever e remover quaisquer ficheiros no sistema independentemente das permissões deles * Definir o dono e permissões de quaisquer ficheiros no sistema     * Definir a palavra-passe de quaisquer utilizadores não privilegiados do sistema * Iniciar sessão (Login) em qualquer conta sem a palavra-passe deles     Este poder ilimitado da conta root requer que você seja atento e responsável quando a utilizar. Atenção     Nunca partilhe a palavra-passe de root com outros. Nota As permissões de um ficheiro (incluindo aparelhos de hardware como CD-ROM etc. os quais são apenas outros ficheiros para o     sistema Debian) podem torná-lo não-utilizável ou inacessível para utilizadores não-root. Apesar da utilização da conta root ser um modo rápido de testar este tipo de situação, a resolução dela deve ser feita através da definição correcta das permissões do ficheiro e membros dos grupos de utilizadores. (veja Secção 1.2.3, “Permissões do sistema de ficheiros”). 1.1.4. A linha de comandos shell do root     Aqui estão alguns métodos básicos de obter o prompt da shell de root ao utilizar a palavra-passe do root: * Escreva root na prompt de login baseada em caracteres. * Escreva "su -l" na prompt da shell de qualquer utilizador.     + Isto não preserva o ambiente do utilizador atual. * Escreva "su" na prompt de shell de qualquer utilizador. + Isto preserva algum do ambiente do utilizador atual. 1.1.5. GUI de ferramentas de administração do sistema When your desktop menu does not start GUI system administration tools automatically with the appropriate privilege, you can start     them from the root shell prompt of the terminal emulator, such as gnome-terminal(1), rxvt(1), or xterm(1). See Secção 1.1.4, “A linha de comandos shell do root” and Secção 7.9, “X server connection”. Atenção Never start the GUI display/session manager under the root account by typing in root to the prompt of the display manager     such as gdm3(1). Nunca execute programas GUI remotos que não sejam confiáveis no X Window quando é mostrada informação critica porque pode "espiar" o seu ecrã X. 1.1.6. Consolas virtuais Por omissão no sistema Debian existem disponíveis seis consolas de caracteres alternáveis tipo VT100 para arrancar a shell de comandos directamente na máquina Linux. A menos queesteja num ambiente GUI, pode mudar entre consolas virtuais ao pressionar     Left-Alt-key e simultaneamente numa das teclas F1 — F6. Cada consola de caracteres permite um login independente à conta e oferece um ambiente multi-utilizador. Este ambiente multi-utilizador é uma funcionalidade excelente do Unix e muito viciante. If you are in the GUI environment, you gain access to the character console 3 by pressing Ctrl-Alt-F3 key, i.e., the     left-Ctrl-key, the left-Alt-key, and the F3-key are pressed together. You can get back to the GUI environment, normally running on the virtual console 2, by pressing Alt-F2.     You can alternatively change to another virtual console, e.g. to the console 3, from the commandline.     # chvt 3 1.1.7. Como abandonar a linha de comandos Escreva Ctrl-D, isto é, a tecla-Ctrl-esquerda e a tecla d pressionadas ao mesmo tempo, na linha de comandos para fechar a atividade da shell. Se estiver na consola de caracteres, com     isto, retorna ao aviso de login. Mesmo que estes caracteres de controle sejam referidos como "control D" com letra maiúscula, não precisa de pressionar a tecla Shift. A expressão curta, ^D, também é usada para Ctrl-D. Em alternativa pode escrever "exit".     Se estiver no x-terminal-emulator(1), com isto pode fechar a janela do x-terminal-emulator. 1.1.8. Como desligar o sistema Tal como qualquer outro SO moderno onde operar ficheiros involve pôr dados em cache em memória para melhorar a performance, o sistema Debian precisa de um processo apropriado de desligar antes que a energia possa ser, em segurança, desligada. Isto é     para manter a integridade dos ficheiros, ao forçar todas as alterações em memória a serem escritas no disco. Se estiver disponível software de controle de energia, o processo de desligar desliga automaticamente a energia do sistema. (Caso contrário, pode ter de pressionar o botão de energia por alguns segundos após o procedimento de desligar.)     Pode desligar o sistema sob o modo normal de multi-utilizador a partir da linha de comandos.     # shutdown -h now     Pode desligar o sistema sob o modo único-utilizador a partir da linha de comandos.     # poweroff -i -f     Veja a Secção 6.3.8, “Como desligar o sistema remoto em SSH”. 1.1.9. Recuperar uma consola sã Quando o ecrã fica estranho após fazer coisas estranhas tal como     "cat qualquer-ficheiro-binário", escreva "reset" na linha de comandos. Poderá não ver o comando a aparecer quando o escreve. Também pode utilizar "clear" para limpar o ecrã. 1.1.10. Sugestões de pacotes adicionais para o novato Apesar de mesmo uma instalação mínima do sistema Debian sem quaisquer tarefas de ambiente de trabalho disponibilizar as     funcionalidades básicas do Unix, é uma boa ideia instalar alguns pacotes baseados em linha de comandos e terminais de caracteres baseados em curses tais como o mc e o vim com o apt-get(8) para os iniciantes começarem, pelo seguinte: # apt-get update     ... # apt-get install mc vim sudo aptitude ...     Se já tiver estes pacotes instalados, não serão instalados novos pacotes. Tabela 1.1. Lista de pacotes de programas interessantes em modo de texto +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |---------+------+-------+--------------------------------------| |mc |V:50, |1542 |Um gestor de ficheiro de ecrã completo| | |I:209 | |em modo de texto | |---------+------+-------+--------------------------------------| |sudo |V:688,|6550 |Um programa para permitir privilégios | | |I:841 | |de root limitados aos utilizadores | |---------+------+-------+--------------------------------------| | |V:95, | |O editor de texto de Unix Vi IMproved,| |vim |I:369 |3743 |um editor de texto para programadores |     | | | |(versão standard) | |---------+------+-------+--------------------------------------| | |V:58, | |O editor de texto de Unix Vi IMproved,| |vim-tiny |I:975 |1722 |um editor de texto para programadores | | | | |(versão compacta) | |---------+------+-------+--------------------------------------| |emacs-nox|V:4, |39647 |Emacs do Projecto GNU, o editor de | | |I:16 | |texto extensível baseado em Lisp | |---------+------+-------+--------------------------------------| |w3m |V:15, |2837 |Navegadores de WWW de modo de texto | | |I:187 | | | |---------+------+-------+--------------------------------------| |gpm |V:10, |521 |O cortar-e-colar estilo Unix na | | |I:12 | |consola de texto (daemon) | +---------------------------------------------------------------+     Pode ser uma boa ideia ler algumas documentações informativas. Tabela 1.2. Lista de pacotes de documentação informativa +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |--------------------+------+-------+---------------------------| | | | |Documentação do Projecto | |doc-debian |I:867 |187 |Debian, (FAQ do Debian) e | | | | |outros documentos | |--------------------+------+-------+---------------------------| |debian-policy |I:14 |4659 |Manual de Políticas Debian | | | | |e documentos relacionados |     |--------------------+------+-------+---------------------------| |developers-reference|V:0, |2601 |Guias e informação para | | |I:5 | |programadores de Debian | |--------------------+------+-------+---------------------------| |debmake-doc |I:0 |11701 |Guide for Debian | | | | |Maintainers | |--------------------+------+-------+---------------------------| |debian-history |I:0 |4692 |História do Projecto Debian| |--------------------+------+-------+---------------------------| |debian-faq |I:865 |790 |FAQ do Debian | +---------------------------------------------------------------+     Pode instalar alguns destes pacotes com o seguinte.     # apt-get install package_name 1.1.11. Uma conta de utilizador extra Se não deseja usar a sua conta de utilizador principal para as     seguintes atividades de treino, pode criar uma conta de utilizador para treinos, por exemplo, fish, a fazer o seguinte:     # adduser fish     Responder a todas as questões. Isto cria uma conta chamada fish. Após praticar, pode remover     esta conta de utilizador e o diretório home dele a fazer o seguinte:     # deluser --remove-home fish On non-Debian and specialized Debian systems, above activities     need to use lower level useradd(8) and userdel(8) utilities, instead. 1.1.12. Configuração do sudo Para a típica estação de trabalho de um único utilizador como o ambiente de trabalho do sistema Debian no PC portátil, é comum     implementar uma configuração simples do sudo(8) como a seguir para permitir ao utilizador não-privilegiado, ex. penguin, ganhar privilégios administrativos apenas com a sua palavra-passe de utilizador mas sem a palavra-passe do root.     # echo "penguin ALL=(ALL) ALL" >> /etc/sudoers Em alternativa, é também comum fazer como a seguir para permitir     a um utilizador não privilegiado, ex. penguin, ganhar privilégios administrativos sem qualquer palavra-passe.     # echo "penguin ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers     Este truque só deve ser usado na estação de trabalho de um único utilizador que administra e onde é o único utilizador. Atenção     Não configure assim as contas de utilizadores normais numa estação de trabalho multi-utilizador porque seria muito mau para a segurança do sistema. Cuidado A palavra-passe e a conta penguin no exemplo em cima requer tanta protecção como a palavra-passe do root e a conta do root.     O privilégio administrativo neste contexto pertence a alguém autorizado a executar as tarefas de administração do sistema numa estação de trabalho. Nunca dê tais privilégios a um gestor do departamento Administrativo da sua firma ou ao seu chefe a menos que eles sejam autorizados e capazes. Nota Para disponibilizar privilégios de acesso a aparelhos limitados e ficheiros limitados, deve considerar usar o group para disponibilizar acesso limitado em vez de usar os privilégios do root via sudo(8).     Com uma configuração melhor pensada e cuidada, o sudo(8) pode garantir privilégios administrativos limitados a outros utilizadores num sistema partilhado sem partilhar a palavra-passe do root. Isto pode ajudar com as responsabilidades com máquinas com múltiplos administradores para que possa saber quem fez o quê. Por outro lado, pode querer que mais ninguém tenha tais privilégios. 1.1.13. Hora de brincar     Agora está pronto para brincar com o sistema Debian sem riscos desde que use a conta de utilizador sem-privilégios. Isto porque o sistema Debian é, mesmo após uma instalação predefinida, configurado com permissões de ficheiros apropriadas que previne os utilizadores não privilegiados de danificarem o     sistema. É claro, podem ainda existir alguns buracos que possam ser explorados mas aqueles que se preocupam com estes problemas não deveriam ler esta secção e deveriam ler o Manual de Segurança Debian.     Aprendemos o sistema Debian como um sistema tipo Unix com o seguinte: * Secção 1.2, “Sistema de ficheiros tipo Unix” (conceitos básicos) * Secção 1.3, “Midnight Commander (MC)” (método de sobrevivência)     * Secção 1.4, “O ambiente de trabalho estilo Unix básico” (método básico) * Secção 1.5, “O comando simples da shell” (mecanismo da shell) * Secção 1.6, “Processamento de texto estilo Unix” (método de processamento de texto) 1.2. Sistema de ficheiros tipo Unix No GNU/Linux e noutros sistemas operativos tipo Unix, os ficheiros estão organizados em diretórios. Todos os ficheiros e     diretórios estão organizados numa grande árvore que nasce em "/". É chamada uma árvore porque se desenhar o sistema de ficheiros, parece-se com uma árvore mas está de cabeça para baixo. Estes ficheiros e diretórios podem estar espalhados por vários aparelhos. mount(8) serve para anexar o sistema de ficheiros encontrado num aparelho à grande árvore de ficheiros. Reciprocamente, umount(8) desanexa-os novamente. Nos kernel Linux     recentes, o mount(8) com algumas opções pode unir parte de uma árvore de ficheiros noutro lugar ou pode montar um sistema de ficheiros como partilhado, privado, escravo ou não-unível. As opções do mount suportadas para cada sistema de ficheiros estão disponíveis em "/usr/share/doc/linux-doc-*/Documentation/ filesystems/". Os diretórios no sistema Unix são chamados pastas nalguns outros sistemas. Por favor note também que não existe conceito para     drive tal como "A:" em qualquer sistema Unix. Existe um sistema de ficheiros e tudo está incluído nele. Esta é uma enorme vantagem em comparação com o Windows. 1.2.1. Noções básicas de ficheiros Unix     Aqui estão algumas noções básicas de ficheiros Unix: * Os nomes de ficheiro são sensíveis a maiúsculas/minúsculas. Isto é, "MEUFICHEIRO" e "MeuFicheiro" são ficheiros diferentes. * O diretório raiz significa a raiz do sistema de ficheiros e é referido simplesmente como "/". Não confundir isto com o diretório pessoal do utilizador root: "/root". * Todos os diretórios têm um nome que pode conter quaisquer letras ou símbolos excepto "/". O diretório raiz é uma excepção. O nome dele é "/" (pronuncia-se "slash" ou "o diretório raiz") e não pode ser renomeado. * Cada ficheiro ou diretório é designado por um nome de ficheiro totalmente qualificado, nome de ficheiro absoluto, ou caminho, que fornece a sequência de diretórios que têm de ser percorridos para o alcançar. Estes três termos são sinónimos. * Todos os nomes de ficheiro totalmente qualificados começam com o diretório "/" e existe um "/" entre cada diretório ou ficheiro no nome do ficheiro. O primeiro "/" é o diretório de nível de topo e os outros "/"' separam sucessivamente os sub-diretórios, até que se chegue à última entrada que é o nome real do ficheiro. As palavras utilizadas aqui conseguem ser confusas. Veja o seguinte nome de ficheiro completamente qualificado como um exemplo: "/usr/share/keytables/     us.map.gz". No entanto, as pessoas também se referem ao seu nome base sozinho "us.map.gz" como um nome de ficheiro. * O diretório raiz tem algumas ramificações, tais como "/etc/" e "/usr/". Estes sub-diretórios por sua vez ramificam-se em mais sub-diretórios, tais como "/etc/systemd/" e "/usr/local/ ". O todo, visto em conjunto, é a chamada árvore de diretórios. Pode pensar num nome de ficheiro absoluto como um caminho desde a base da árvore ("/") até ao fim de um ramo (um ficheiro). Também pode ouvir pessoas falar da árvore de diretórios como se fosse uma árvore de família a juntar todos os descendentes diretos numa única figura chamada de diretório raiz ("/"): assim, os sub-diretórios têm pais e um caminho mostra a linhagem completa de um ficheiro. Existem também caminhos relativos que começam algures noutro ponto que não o diretório raiz. Deve lembrar-se que o diretório ".. /" refere-se ao diretório pai. Esta terminologia também se aplica a outras estruturas semelhantes a diretórios, como estruturas hierárquicas de dados. * Não existe componente especial no nome de caminho que corresponde a um aparelhos físico, tal como o seu disco rígido. Isto difere de RT-11, CP/M, OpenVMS, MS-DOS, AmigaOS e Microsoft Windows, onde o caminho contém um nome de aparelho tal como "C:\". (No entanto, existem entradas nos diretórios que referem-se a aparelhos físicos como parte do sistema de ficheiros normal. Veja Secção 1.2.2, “Internos do sistema de ficheiros”.) Nota Apesar de poder usar quase todas as letras ou símbolos num nome de ficheiro, na prática é má ideia fazê-lo. É melhor evitar quaisquer caracteres que geralmente têm significados especiais na     linha de comandos, incluindo espaços, tabs, novas linhas e outros caracteres especiais: { } ( ) [ ] ' ` " \ / > < | ; ! # & ^ * % @ $ . Se deseja separar palavras num nome, as boas escolhas são o ponto, traço e underscore. Também pode capitalizar cada palavra assim "ComoEsteExemplo". Os utilizadores avançados de Linux procuram evitar espaços nos nomes de ficheiros. Nota     A palavra "root" pode significar o "utilizador root" ou o "diretório raiz (root)". O contexto da utilização deles deve torná-lo claro. Nota     A palavra caminho (path) é usada não apenas para o nome-de-ficheiro totalmente qualificado como em cima mas também para o caminho de busca de comandos. O significado pretendido é geralmente claro a partir do contexto. As melhores práticas detalhadas para a hierarquia de ficheiros     estão descritas no Filesystem Hierarchy Standard ("/usr/share/doc /debian-policy/fhs/fhs-2.3.txt.gz" e hier(7)). Deve lembrar-se dos seguintes factos como princípio: Tabela 1.3. Lista de utilização de diretórios chave +---------------------------------------------------------------+ |diretório| utilização do diretório | |---------+-----------------------------------------------------| |/ |o diretório raiz | |---------+-----------------------------------------------------|     |/etc/ |ficheiros de configuração de todo o sistema | |---------+-----------------------------------------------------| |/var/log/|ficheiros log do sistema | |---------+-----------------------------------------------------| |/home/ |todos os diretórios home de todos os utilizadores não| | |privilegiados | +---------------------------------------------------------------+ 1.2.2. Internos do sistema de ficheiros A seguir a tradição do Unix, o sistema Debian GNU/Linux disponibiliza o sistema de ficheiros sob o qual residem os dados     físicos em discos rígidos e outros aparelhos de armazenamento e a interacção com os aparelhos de hardware como ecrãs de consola e consolas série remotas são representados num modo unificado sob " /dev/". Cada ficheiro, diretório, 'named pipe' (um modo de dois programas partilharem dados), ou aparelho físico num sistema Debian GNU/ Linux tem uma estrutura de dados chamada inode que descreve os seus atributos associados como o utilizador que o possui (o     dono), o grupo a que pertence, a hora do último acesso, etc. A ideia de representar praticamente tudo no sistema de ficheiros foi uma inovação do Unix e os modernos kernel Linux desenvolveram esta ideia ainda mais. Atualmente, até informação sobre os processos que correm no computador encontra-se no sistema de ficheiros. Esta representação abstracta e unificada de entidades físicas e processos internos é muito poderosa porque permite-nos utilizar o     mesmo comando para o mesmo tipo de operação em muitos aparelhos totalmente diferentes. É mesmo possível alterar o modo como o kernel funciona ao escrever dados em ficheiros especiais que estão ligados a processos em execução. Dica     Se necessitar identificar a correspondência entre a árvore de ficheiros e a entrada física, execute mount(8) sem argumentos. 1.2.3. Permissões do sistema de ficheiros     As Permissões de sistemas de ficheiros de sistemas tipo-Unix são definidas por três categorias de utilizadores afetados: * O utilizador que é dono do ficheiro (u)     * Outros utilizadores no grupo ao qual o ficheiro pertence (g) * Todos os outros utilizadores (o) também referido como "mundo" e "todos"     Para o ficheiro, cada permissão correspondente permite as seguintes ações: * A permissão read (r) permite ao dono examinar o conteúdo do ficheiro.     * A permissão write (w) permite ao dono modificar o ficheiro. * A permissão execute (x) permite ao dono correr o ficheiro como um comando.     Para o diretório, cada permissão correspondente permite as seguintes ações: * A permissão read (r) permite ao dono listar o conteúdo do diretório.     * A permissão write (w) permite ao dono adicionar ou remover ficheiros no diretório. * A permissão execute (x) permite ao dono aceder aos ficheiro no diretório. Aqui, a permissão execute num diretório significa não só permitir     a leitura dos ficheiros nesse diretório mas também permitir visualizar os seus atributos, tais como o tamanho e a hora de modificação. ls(1) é utilizado para mostrar informação de permissões (e mais)     para ficheiros e diretórios. Quando é invocado com a opção "-l", mostra a seguinte informação na ordem apresentada: * Tipo de ficheiro (primeiro caractere) * Permissão de acesso do ficheiro (nove caracteres, a consistir em três caracteres cada para utilizador, grupo e outros por esta ordem) * Quantidade de ligações rígidas ao ficheiro     * Nome do utilizador dono do ficheiro * Nome do grupo ao qual o ficheiro pertence * Tamanho do ficheiro em caracteres (bytes) * Data e hora do ficheiro (mtime) * Nome do ficheiro Tabela 1.4. Lista do primeiro caractere da saída de "ls -l" +-------------------------------------+ |caractere| significado | |---------+---------------------------| |- |ficheiro normal | |---------+---------------------------| |d |diretório | |---------+---------------------------|     |l |ligação simbólica | |---------+---------------------------| |c |nó de aparelho de caractere| |---------+---------------------------| |b |nó de aparelho de bloco | |---------+---------------------------| |p |named pipe | |---------+---------------------------| |s |socket | +-------------------------------------+ chown(1) é utilizado a partir da conta de root para alterar o dono do ficheiro. chgrp(1) é utilizado a partir da conta do dono do ficheiro ou da conta root para alterar o grupo do ficheiro.     chmod(1) é usado a partir da conta do dono do ficheiro ou da conta root para alterar as permissões de acesso ao ficheiro ou diretório. A sintaxe básica para manipular o ficheiro foo é a seguinte: # chown newowner foo     # chgrp newgroup foo # chmod [ugoa][+-=][rwxXst][,...] foo Por exemplo, pode fazer com que uma árvore de diretórios tenha     como dono o utilizador foo e seja partilhada pelo grupo bar pelo seguinte: # cd /some/location/     # chown -R foo:bar . # chmod -R ug+rwX,o=rX .     Existem mais três bits especiais de permissões. * O bit set user ID (s ou S em vez do x do utilizador)     * O bit set group ID (s ou S em vez do x do grupo) * O bit sticky (t ou T em vez do x dos outros) Aqui o resultado de "ls -l" para estes bits é capitalizado se a     execução de bits escondidos por estes resultados estiverem não definidos. Definir set user ID num ficheiro executável permite a um utilizador executar o ficheiro executável com o ID do dono do ficheiro (por exemplo root). De modo semelhante, definir set     group ID num ficheiro executável permite a um utilizador executar o ficheiro executável com o ID de grupo do ficheiro (por exemplo root). Porque estas definições podem causar riscos de segurança, activá-las requer precauções extra. Definir set group ID num diretório activa o esquema de criação de     ficheiros ao estilo BSD onde todos os ficheiros criados no diretório pertencem ao grupo do diretório. Definir o sticky bit num diretório previne que um ficheiro nesse diretório seja removido por um utilizador que não seja o dono do ficheiro. De modo a tornar o conteúdo de um ficheiro seguro em diretórios onde todos têm acesso de escrita, como o "/tmp" ou em     diretórios onde um grupo tem acesso de escrita, não basta reiniciar a permissão de escrita do ficheiro mas também definir o sticky bit no diretório. Caso contrário, o ficheiro pode ser removido e pode ser criado um novo ficheiro com o mesmo nome por qualquer utilizador que tenha acesso de escrita no diretório.     Aqui estão alguns exemplos interessantes de permissões de ficheiros: $ ls -l /etc/passwd /etc/shadow /dev/ppp /usr/sbin/exim4 crw------T 1 root root 108, 0 Oct 16 20:57 /dev/ppp -rw-r--r-- 1 root root 2761 Aug 30 10:38 /etc/passwd -rw-r----- 1 root shadow 1695 Aug 30 10:38 /etc/shadow -rwsr-xr-x 1 root root 973824 Sep 23 20:04 /usr/sbin/exim4     $ ls -ld /tmp /var/tmp /usr/local /var/mail /usr/src drwxrwxrwt 14 root root 20480 Oct 16 21:25 /tmp drwxrwsr-x 10 root staff 4096 Sep 29 22:50 /usr/local drwxr-xr-x 10 root root 4096 Oct 11 00:28 /usr/src drwxrwsr-x 2 root mail 4096 Oct 15 21:40 /var/mail drwxrwxrwt 3 root root 4096 Oct 16 21:20 /var/tmp Existe um modo numérico alternativo para descrever as permissões     do ficheiro com o chmod(1). Este modo numérico utiliza 3 ou 4 dígitos em numeração octal (radix=8). Tabela 1.5. O modo numérico para permissões de ficheiros em comandos chmod(1) +---------------------------------------------------------------+ | digito | significado | |-----------+---------------------------------------------------| |1º digito |soma de set user ID (=4), set group ID (=2) e | |opcional |sticky bit (=1) |     |-----------+---------------------------------------------------| |2º digito |soma das permissões leitura (=4), escrita (=2) e | | |executável (=1) para o utilizador | |-----------+---------------------------------------------------| |3º digito |idem para grupo | |-----------+---------------------------------------------------| |4º digito |idem para outros | +---------------------------------------------------------------+ Isto parece complicado mas na verdade é bastante simples. Se observar as primeiras colunas (2-10) do resultado do comando "ls -l" e lê-las como uma representação binária (radix=2) das     permissões do ficheiros ("-" a ser "0" e "rwx" a ser "1"), os últimos três dígitos do valor de modo numérico para si deverão fazer sentido como uma representação octal (radix=8) das permissões do ficheiro.     Por exemplo, tente o seguinte: $ touch foo bar $ chmod u=rw,go=r foo     $ chmod 644 bar $ ls -l foo bar -rw-r--r-- 1 penguin penguin 0 Oct 16 21:39 bar -rw-r--r-- 1 penguin penguin 0 Oct 16 21:35 foo Dica     Se necessitar aceder a informação mostrada por "ls -l" num script da shell, deve utilizar comandos pertinentes como test(1), stat (1) e readlink(1). Os comandos da própria shell como "[" ou "test" também podem ser utilizados. 1.2.4. Controlo de permissões para ficheiros acabados de criar: umask As permissões que são aplicadas ao criar ficheiros e diretórios     novos é restringida pelo comando embutido da shell umask. Veja dash(1), bash(1) e builtins(7).     (file permissions) = (requested file permissions) & ~(umask value) Tabela 1.6. Exemplos do valor umask +---------------------------------------------------------------+ |umask| permissões do | permissões do | utilização | | |ficheiro criadas |diretório criadas| | |-----+-----------------+-----------------+---------------------|     | | | |apenas pode ser | |0022 |-rw-r--r-- |-rwxr-xr-x |escrito pelo | | | | |utilizador | |-----+-----------------+-----------------+---------------------| |0002 |-rw-rw-r-- |-rwxrwxr-x |pode ser escrito pelo| | | | |grupo | +---------------------------------------------------------------+ O sistema Debian usa um esquema de grupo privado de utilizadores (UPG). Um UPG é criado sempre que um novo utilizador é adicionado ao sistema. Um UPG tem o mesmo nome que o utilizador para o qual foi criado e esse utilizador é o único membro do UPG. O esquema     UPG torna seguro definir a umask para 0002 já que cada utilizador tem o próprio grupo privado dele. (Em algumas variantes de Unix, é bastante comum configurar os utilizadores normais a pertencerem a um único grupo users e por segurança é uma boa ideia definir a umask para 0022 nesses casos.) Dica     Active UPG ao pôr "umask 002" no ficheiro ~/.bashrc. 1.2.5. Permissões para grupos de utilizadores (group) Atenção     Please make sure to save unsaved changes before doing reboot or similar actions.     You can add a user penguin to a group bird in two steps: * Change group configuration using one of following: + Execute "sudo usermod -aG bird penguin". + Execute "sudo adduser penguin bird". (only on typical Debian systems) + Execute "sudo vigr" for /etc/group and "sudo vigr -s" for     /etc/gshadow to append penguin in the line for bird. * Apply configuration using one of following: + Cold reboot and login. (Best option) + Execute "kill -TERM -1" and do some fix-up actions such as "systemctl restart NetworkManager.service". + Logout via GUI menu and login.     You can remove a user penguin from a group bird in two steps: * Change group configuration using one of following: + Execute "sudo usermod -rG bird penguin". + Execute "sudo deluser penguin bird". (only on typical Debian systems) + Execute "sudo vigr" for /etc/group and "sudo vigr -s" for     /etc/gshadow to remove penguin in the line for bird. * Apply configuration using one of following: + Cold reboot and login. (Best option) + Execute "kill -TERM -1" and do some fix-up actions such as "systemctl restart NetworkManager.service". + Logout via GUI menu is not an option for Gnome Desktop.     Any warm reboot attempts are fragile replacements of the real cold reboot under the modern desktop system. Nota Em alternativa, pode adicionar dinamicamente utilizadores aos     grupos durante o processo de autenticação ao adicionar a linha "auth optional pam_group.so" a "/etc/pam.d/common-auth" e configurar "/etc/security/group.conf". (Veja Capítulo 4, Authentication and access controls.) Os aparelhos de hardware são apenas outro tipo de ficheiros no     sistema Debian. Se tiver problemas a aceder a aparelhos como o CD-ROM e memórias USB a partir de uma conta de utilizador, deve tornar esse utilizador um membro do grupo relevante. Alguns grupos notáveis disponibilizados pelo sistema permitem aos     seus membros aceder a ficheiros e aparelhos particulares sem privilégios de root. Tabela 1.7. Lista de grupos notáveis disponibilizados pelo sistema para acesso a ficheiros +---------------------------------------------------------------+ | grupo | descrição para ficheiros e aparelhos acessíveis | |-------+-------------------------------------------------------| |dialout|acesso completo e direto a portas série ("/dev/ttyS | | |[0-3]") | |-------+-------------------------------------------------------| |dip |Acesso limitado a portas série para ligação Dialup IP a| | |peers de confiança | |-------+-------------------------------------------------------|     |cdrom |drives CD-ROM, DVD+/-RW | |-------+-------------------------------------------------------| |audio |aparelho de áudio | |-------+-------------------------------------------------------| |video |aparelho de vídeo | |-------+-------------------------------------------------------| |scanner|scanner(es) | |-------+-------------------------------------------------------| |adm |logs (relatórios) de monitorização do sistema | |-------+-------------------------------------------------------| |staff |alguns diretórios para trabalho administrativo júnior: | | |"/usr/local", "/home" | +---------------------------------------------------------------+ Dica Necessita pertencer ao grupo dialout para reconfigurar o modem,     ligar para qualquer lado, etc. Mas se o root criar ficheiros de configuração pré-definidos para peers de confiança em "/etc/ppp/ peers/", apenas precisa de pertencer ao grupo dip para criar uma ligação Dialup IP para esses peers de confiança a utilizar os comandos pppd(8), pon(1) e poff(1). Alguns grupos notáveis disponibilizados pelo sistema permitem aos     seus membros executar comandos particulares sem privilégios de root. Tabela 1.8. Lista de grupos notáveis disponibilizados pelo sistema para execuções de comandos particulares +---------------------------------------------------------------+ | grupo | comandos acessíveis |     |-------+-------------------------------------------------------| |sudo |executar sudo sem a palavra-passe deles | |-------+-------------------------------------------------------| |lpadmin|executar comandos para adicionar, modificar e remover | | |impressoras das bases de dados de impressoras | +---------------------------------------------------------------+ Para a listagem completa dos utilizadores e grupos     disponibilizados pelo sistema, veja a versão recente do documento "Utilizadores e Grupos" em "/usr/share/doc/base-passwd/ users-and-groups.html" disponibilizado pelo pacote base-passwd. Para comandos de gestão para o sistema de utilizador e grupo veja     passwd(5), group(5), shadow(5), newgrp(1), vipw(8), vigr(8) e pam_group(8). 1.2.6. Marcas temporais (Timestamps)     Existem três tipos de marcas temporais para um ficheiro de GNU/ Linux. Tabela 1.9. Lista dos tipos de marcas temporais +--------------------------------------------------------+ |tipo | significado (definição Unix histórica) | |-----+--------------------------------------------------|     |mtime|a hora de modificação do ficheiro (ls -l) | |-----+--------------------------------------------------| |ctime|a hora de alteração de estado do ficheiro (ls -lc)| |-----+--------------------------------------------------| |atime|a hora do último acesso ao ficheiro (ls -lu) | +--------------------------------------------------------+ Nota     ctime não é o tempo de criação do ficheiro. Nota     O valor atual de atime num sistema GNU/Linux pode ser diferente daquele da definição Unix histórica. * Sobrescrever um ficheiro altera todos os atributos mtime, ctime e atime do ficheiro. * Alterar o dono ou as permissões de um ficheiro altera os atributos ctime e atime do ficheiro. * Ler um ficheiro altera o atributo atime do ficheiro.no sistema Unix histórico. * Ler um ficheiro altera o atributo atime do ficheiro no     sistema GNU/Linux se o sistema de ficheiros dele estiver montado com "strictatime". * Ler um ficheiro pela primeira vez ou após um dia altera o atributo atime do ficheiro no sistema GNU/Linux se o sistema de ficheiros dele for montado com relatime". (comportamento predefinido desde Linux 2.6.30) * Ler um ficheiro não altera o atributo atime do ficheiro no sistema GNU/Linux se o sistema de ficheiros dele for montado com "noatime". Nota As opções de montagem "noatime" e "relatime" são introduzidas para melhorar a performance de leitura do sistema de ficheiros     sob casos de utilização normal. Operações simples de leitura de ficheiros sob a opção "strictatime" acompanha a operação de escrita que consome tempo para atualizar o atributo atime. Mas o atributo atime é raramente usado excepto para ficheiro mbox(5). Veja mount(8).     Utilize o comando touch(1) para alterar as marcas temporais de ficheiros existentes.     For timestamps, the ls command outputs localized strings under non-English locale ("fr_FR.UTF-8"). $ LANG=C ls -l foo -rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo     $ LANG=en_US.UTF-8 ls -l foo -rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo $ LANG=fr_FR.UTF-8 ls -l foo -rw-rw-r-- 1 penguin penguin 0 oct. 16 21:35 foo Dica     Veja Secção 9.3.4, “Amostragem personalizada de hora e data” para personalizar a saída do "ls -l". 1.2.7. Links (ligações)     Existem dois métodos de associar um ficheiro "foo" com um nome de ficheiro diferente "bar". * Ligação rígida + Duplicar nome para um ficheiro existente + "ln foo bar"     * Ligação simbólica ou symlink + Ficheiro especial que aponta para outro ficheiro pelo nome + "ln -s foo bar"     Veja o seguinte exemplo para alterações nas contagens da ligação e as diferenças subtis nos resultados do comando rm. $ umask 002 $ echo "Original Content" > foo $ ls -li foo 1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 foo $ ln foo bar # hard link $ ln -s foo baz # symlink $ ls -li foo bar baz 1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 bar 1450180 lrwxrwxrwx 1 penguin penguin 3 Oct 16 21:47 baz -> foo     1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 foo $ rm foo $ echo "New Content" > foo $ ls -li foo bar baz 1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 bar 1450180 lrwxrwxrwx 1 penguin penguin 3 Oct 16 21:47 baz -> foo 1450183 -rw-rw-r-- 1 penguin penguin 12 Oct 16 21:48 foo $ cat bar Original Content $ cat baz New Content     The hardlink can be made within the same filesystem and shares the same inode number which the "-i" option with ls(1) reveals. A ligação simbólica tem sempre permissões nominais de acesso ao     ficheiro "rwxrwxrwx", conforme mostrado no exemplo acima, com as permissões de acesso efectivas ditadas pelas permissões do ficheiro para o qual aponta. Cuidado     Geralmente é boa ideia, de todo, não criar ligações simbólicas complicadas ou ligação rígidas a menos que tenha uma boa razão. Podem causar pesadelos onde a combinação lógica das ligações simbólicas resulta em círculos viciosos no sistema de ficheiros. Nota     Geralmente é preferível utilizar ligações simbólicas em vez de ligação rígidas, a menos que tenha boas razões para usar uma ligação rígida. O diretório "." liga ao diretório onde ele aparece, assim a contagem de ligações de qualquer novo diretório começa em 2. O     diretório ".." liga ao diretório pai, assim a contagem de ligações do diretório aumenta com a adição de novos sub-diretórios. Se está a mudar do Windows para Linux, em breve irá ficar claro o quão bem desenhado está a ligação de nomes de ficheiros em Unix, comparada com o equivalente mais próximo em Windows de "atalhos".     Devido a estar implementado no sistema de ficheiros, aplicações não conseguem ver nenhuma diferença entre um ficheiro ligado e o original. No caso de ligações rígidas, não há realmente nenhuma diferença. 1.2.8. Pipes com nome (FIFOs) Um pipe com nome é um ficheiro que age como um pipe. Coloca algo     no ficheiro e sai pelo outro lado. Por isso é chamado um FIFO, ou Primeiro-a-Entrar-Primeiro-a-Sair: a primeira coisa que pôe no pipe é a primeira coisa a sair pelo outro lado. Se escrever para um pipe com nome, o processo que escreve à pipe não termina até que a informação que está a ser escrita para o pipe seja lida a partir do pipe. Se ler de um pipe com nome, o processo que lê espera até que não haja mais nada para ler antes de terminar. O tamanho do pipe é sempre zero -- não armazena     dados, apenas faz a ligação entre dois processos como a funcionalidade oferecida pelo "|" na sintaxe da shell. No entanto, como este pipe tem um nome, os dois processos não têm de estar na mesma linha de comando ou mesmo serem executados pelo mesmo utilizador. Os pipes foram uma inovação de muita influência do Unix.     Por exemplo, tente o seguinte: $ cd; mkfifo mypipe $ echo "hello" >mypipe & # put into background [1] 8022 $ ls -l mypipe prw-rw-r-- 1 penguin penguin 0 Oct 16 21:49 mypipe     $ cat mypipe hello [1]+ Done echo "hello" >mypipe $ ls mypipe mypipe $ rm mypipe 1.2.9. Sockets Os sockets são usados extensivamente por toda a comunicação da Internet, bases de dados e pelo próprio sistema operativo. São semelhantes a pipes com nome (FIFO) e permitem aos processos trocarem informação mesmo entre computadores diferentes. Para o     socket, esses processos não precisam de estar a correr ao mesmo tempo, nem correrem como filhos do mesmo processo pai. Isto é o destino da comunicação inter-processo (IPC). A troca de informação pode ocorrer sobre a rede entre máquinas diferentes. Os dois mais comuns são o socket de Internet e o socket de domínio Unix. Dica     "netstat -an" dá uma visão geral, muito útil, dos sockets que estão abertos num determinado sistema. 1.2.10. Ficheiros de aparelho Os ficheiros de Aparelhos referem-se a aparelhos físicos ou     virtuais no seu sistema, como o seu disco rígido, placa gráfica, monitor ou teclado. Um exemplo de aparelho virtual é a consola, que é representada por "/dev/console".     Existem 2 tipos de ficheiros de aparelho. * Aparelho de Caractere + Acedido por um caractere de cada vez + 1 caractere = 1 byte + Por exemplo, aparelho de teclado, porta serial, …     * Aparelho de Bloco + acedido em unidades maiores chamadas blocos + 1 bloco > 1 byte + Por exemplo, o disco rígido, … Pode ler e escrever nos ficheiros de aparelho, embora o ficheiro possa muito bem conter dados binários que podem ser uma salada incompreensível para humanos. Escrever dados directamente nestes ficheiros é por vezes útil para diagnosticar problemas com     ligações de hardware. Por exemplo, pode despejar um ficheiro de texto para um aparelho de impressora "/dev/lp0" ou enviar comandos de modem à porta serial apropriada "/dev/ttyS0". Mas, a menos que isto seja feito com cuidado, pode causar problemas maiores. Portanto seja cauteloso. Nota     Para o acesso normal a uma impressora, use lp(1).     Os números de nós de aparelho são mostrados ao executar ls(1) como a seguir. $ ls -l /dev/sda /dev/sr0 /dev/ttyS0 /dev/zero brw-rw---T 1 root disk 8, 0 Oct 16 20:57 /dev/sda     brw-rw---T+ 1 root cdrom 11, 0 Oct 16 21:53 /dev/sr0 crw-rw---T 1 root dialout 4, 64 Oct 16 20:57 /dev/ttyS0 crw-rw-rw- 1 root root 1, 5 Oct 16 20:57 /dev/zero * "/dev/sda" tem o número maior de aparelho 8 e o número menor de aparelho 0. Isto é acessível para leitura e escrita aos utilizadores que pertencem ao grupo disk. * "/dev/sr0" tem o número maior de aparelho 11 e o número menor de aparelho 0. Isto é acessível para leitura e escrita aos utilizadores que pertencem ao grupo cdrom.     * "/dev/ttyS0" tem o número maior de aparelho 4 e o número menor de aparelho 64. Isto é acessível para leitura e escrita aos utilizadores que pertencem ao grupo dialout. * "/dev/zero" tem o número 1 no aparelho maior e o número 5 no número de aparelho menor. Isto é acessível para leitura/ escrita a todos.     No sistema Linux moderno, o sistema de ficheiros sob "/dev/" é povoado automaticamente pelo mecanismo udev(7). 1.2.11. Ficheiros de aparelhos especiais     Existem alguns ficheiros de aparelhos especiais. Tabela 1.10. Lista de ficheiros de aparelhos especiais +---------------------------------------------------------------+ |ficheiro| | | | de | acção | descrição da resposta | |aparelho| | | |--------+--------+---------------------------------------------| |/dev/ |ler |retorna o "caractere de fim-de-ficheiro (EOF)| |null | |" | |--------+--------+---------------------------------------------| |/dev/ |escrever|retorna nada (um poço de despejo de dados sem| |null | |fundo) | |--------+--------+---------------------------------------------|     |/dev/ |ler |retorna "o caractere \0 (NULO)" (não é o | |zero | |mesmo que o número zero em ASCII) | |--------+--------+---------------------------------------------| |/dev/ | |retorna caracteres aleatórios a partir de um | |random |ler |verdadeiro gerador de números aleatórios, a | | | |entregar entropia real (lento) | |--------+--------+---------------------------------------------| |/dev/ | |retorna caracteres aleatórios a partir de um | |urandom |ler |gerador de números pseudo-aleatórios | | | |criptograficamente seguros | |--------+--------+---------------------------------------------| |/dev/ |escrever|retorna o erro de disco cheio (ENOSPC) | |full | | | +---------------------------------------------------------------+ Estes são usados frequentemente em conjunto com o     redireccionamento da shell (veja Secção 1.5.8, “Sequências de comandos típicas e redireccionamento da shell”). 1.2.12. procfs e sysfs Os procfs e sysfs montados em "/proc" e "/sys" são os pseudo-sistemas-de-ficheiros e expõem estruturas de dados     internas do kernel ao espaço de utilizador. Por outras palavras, estas entradas são virtuais, a significar que elas agem como uma janela de conveniência às operações do sistema operativo. O diretório "/proc" contém (entre outras coisas) um sub-diretório para cada processo em execução no sistema, o qual tem o nome do     ID do processo (PID). Os utilitários do sistema que acedem à informação de processos, como o ps(1), obtêm a informação deles de esta estrutura de diretórios. Os diretórios sob "/proc/sys/" contêm interfaces para alterar     certos parâmetros do kernel durante o funcionamento. (Pode fazer o mesmo através do comando especializado sysctl(8) ou do ficheiro de configuração/pré-carregamento dele "/etc/sysctl.conf".) As pessoas frequentemente assustam-se quando notam num ficheiro em particular - "/proc/kcore" - o qual é geralmente enorme. Isto     é (mais ou menos) uma cópia do conteúdo da memória do seu computador. É usado para depuração do kernel. É um ficheiro virtual que aponta à memória do computador, portanto não se preocupe com o tamanho dele. O diretório em "/sys" contém estruturas de dados do kernel     exportadas, os seus atributos e as suas ligações entre eles. Também contém interfaces para alterar certos parâmetros do kernel durante o funcionamento. Veja "proc.txt(.gz)", "sysfs.txt(.gz)" e outros documentos     relacionados na documentação do kernel Linux ("/usr/share/doc/ linux-doc-*/Documentation/filesystems/*") disponibilizados pelo pacote linux-doc-*. 1.2.13. tmpfs O tmpfs é um sistema de ficheiros temporário o qual mantém todos     os ficheiros na memória virtual. Os dados de tmpfs na cache de páginas na memória pode ser ir ao espaço swap no disco, conforme necessário. O diretório "/run" é montado como tmpfs no inicio do processo de arranque. Isto ativa a escrita mesmo que o diretório "/ esteja     montado como apenas-leitura. Esta é a nova localização para o armazenamento de ficheiros de estado transitório e substitui várias outras localizações descritas na Filesystem Hierarchy Standard, versão 2.3: * "/var/run" → "/run"     * "/var/lock" → "/run/lock" * "/dev/shm" → "/run/shm" Veja "tmpfs.txt(.gz)" na documentação do kernel Linux ("/usr/     share/doc/linux-doc-*/Documentation/filesystems/*") disponibilizada pelo pacote linux-doc-*. 1.3. Midnight Commander (MC) Midnight Commander (MC) é um "Canivete Suíço" GNU para a consola     Linux e para outros ambientes de terminal. Isto oferece aos novatos uma experiência de consola movida por menus o que é mais fácil de aprender do que os comandos standard do Unix.     Pode necessitar instalar o pacote Midnight Commander que é intitulado de "mc" com o seguinte:     $ sudo apt-get install mc Utilize o comando mc(1) para explorar o sistema Debian. Esta é a     melhor maneira de aprender. Por favor explore algumas localizações interessantes apenas a usar as teclas do cursor e Enter. * "/etc" e os seus sub-diretórios * e"/var/log" os seus sub-diretórios     * "/usr/share/doc" os seus sub-diretórios * "/usr/sbin" e "/usr/bin" 1.3.1. Personalização do MC De modo a fazer o MC mudar o diretório de trabalho ao sair e cd     para o diretório, sugiro modificar o "~/.bashrc" para incluir um script disponibilizado pelo pacote mc.     . /usr/lib/mc/mc.sh Veja mc(1) (sob a opção "-P") para a razão. (Se não compreende     exatamente do que estou a falar aqui, pode fazer isto mais tarde.) 1.3.2. Iniciar o MC     O MC pode ser iniciado com o seguinte:     $ mc O MC toma conta de operações de ficheiros através do menu dele, a     requerer esforços mínimos do utilizador. Carregue em F1 para obter ajuda. Pode brincar com o MC apenas com as teclas de cursor e teclas de função. Nota     In some consoles such as gnome-terminal(1), key strokes of function-keys may be stolen by the console program. You can disable these features in "Preferences" → "General" and "Shortcuts" menu for gnome-terminal. Se encontrar problemas com a codificação de caracteres que     mostram caracteres com lixo, adicionar "-a" à linha de comandos do MC pode ajudar a prevenir problemas.     Se isto não limpar os seus problemas no ecrã com o MC, veja Secção 9.5.6, “A configuração do terminal”. 1.3.3. Gestor de ficheiros no MC O predefinido são dois painéis de diretórios que contêm listas de ficheiros. Outro modo útil é definir a janela da direita para "informação" para ver informações de privilégios de acesso a     ficheiros, etc. De seguida existem algumas teclas de atalho essenciais. Com o daemon gpm(8) em execução, também se pode usar um rato em consolas de caracteres no Linux. (Certifique-se que carrega na tecla shift para obter o comportamento normal de cortar e colar no MC.) Tabela 1.11. As teclas de atalho do MC +---------------------------------------------------------------+ | tecla | tecla de atalho | |-----------+---------------------------------------------------| |F1 |menu de ajuda | |-----------+---------------------------------------------------| |F3 |visualizador interno de ficheiros | |-----------+---------------------------------------------------| |F4 |editor interno | |-----------+---------------------------------------------------| |F9 |ativar o menu de desenrolar | |-----------+---------------------------------------------------|     |F10 |sair do Midnight Commander | |-----------+---------------------------------------------------| |Tab |mover entre duas janelas | |-----------+---------------------------------------------------| |Insert ou |marcar o ficheiro para uma operação de múltiplos | |Ctrl-T |ficheiros como uma cópia | |-----------+---------------------------------------------------| |Del |apagar o ficheiro (tenha cuidado -- configure o MC | | |para modo de apagar seguro) | |-----------+---------------------------------------------------| |Teclas do |auto-explicativo | |cursor | | +---------------------------------------------------------------+ 1.3.4. Truques de linha de comandos no MC * O comando cd altera o diretório mostrado no ecrã selcionado. * Ctrl-Enter ou Alt-Enter copia um nome de ficheiro para a linha de comandos. Utilize isto com os comandos cp(1) e mv(1) em conjunto com a edição de linha de comandos. * Alt-Tab mostra escolhas de expansão de nomes de ficheiros da shell.     * Pode-se especificar os diretórios de inicio para ambas janelas como argumentos ao MC; por exemplo, "mc /etc /root". * Esc + n-key → Fn (i.e., Esc + 1 → F1, etc.; Esc + 0 → F10) * Carregar em Esc antes da tecla tem o mesmo efeito que carregar em Alt e na tecla em conjunto; isto é, carregar em Esc + c para Alt-C. Esc é chamada uma meta-tecla e por vezes mencionada como "M-". 1.3.5. O editor interno em MC O editor interno tem um esquema de cortar-e-colar interessante. Pressionar F3 marca o inicio da seleção, um segundo F3 marca o final da seleção e destaca a seleção. Depois pode mover o cursor.     Se pressionar F6, a área selcionada é movida à localização do cursor. Se pressionar F5, a área selcionada é copiada e inserida na localização do cursor. F2 salva o ficheiro. F10 fá-lo sair. A maioria das teclas do cursor funcionam de modo intuitivo.     Este editor pode ser iniciado directamente num ficheiro a usar um dos seguintes comandos.     $ mc -e filename_to_edit     $ mcedit filename_to_edit Este não é um editor de várias janelas, mas podem-se utilizar várias consolas de Linux para se conseguir o mesmo efeito. Para     copiar entre janelas, utilize as teclas Alt-Fn para mudar entre consolas virtuais utilize "Ficheiro→Inserir ficheiro" ou "Ficheiro→Copiar para ficheiro" para mover uma porção de um ficheiro para outro ficheiro.     Este editor interno pode ser substituído por qualquer editor externo à escolha. Além disso, muitos programas utilizam as variáveis de ambiente     "$EDITOR" ou "$VISUAL" para decidir que editor utilizar. Se não está confortável com o vim(1) ou com o nano(1), pode definir a "mcedit" a adicionar as seguintes linhas ao "~/.bashrc".     export EDITOR=mcedit export VISUAL=mcedit     Recomendo definir isto para "vim" se possível.     Se não está confortável com o vim(1), pode continuar a utilizar o mcedit(1) para a maioria das tarefas de manutenção do sistema. 1.3.6. O visualizador interno no MC MC é um visualizador muito inteligente. Esta é uma grande ferramenta para procurar palavras em documentos. Uso sempre isto     para ficheiros no diretório "/usr/share/doc". Esta é a maneira mais rápida para navegar por entre grandes quantidades de informação de Linux. Este visualizador pode ser iniciado diretamente a usar um dos seguintes comandos:     $ mc -v path/to/filename_to_view     $ mcview path/to/filename_to_view 1.3.7. Funcionalidades de auto-arranque do MC Carregue em Enter num ficheiro e o programa apropriado lida com o     conteúdo do ficheiro (veja Secção 9.4.11, “Personalizar o programa a ser iniciado”). Esta é uma funcionalidade muito conveniente do MC. Tabela 1.12. A reacção à tecla enter no MC +---------------------------------------------------------------+ | tipo de ficheiro | reacção à tecla enter | |----------------------+----------------------------------------| |ficheiro executável |executa comando | |----------------------+----------------------------------------|     |ficheiro man |canaliza o conteúdo para software de | | |visualização | |----------------------+----------------------------------------| |ficheiro html |canaliza o conteúdo para explorador web | |----------------------+----------------------------------------| |ficheiros "*.tar.gz" e|explora o conteúdo dele como se fosse um| |"*.deb" |sub-diretório | +---------------------------------------------------------------+ De modo a permitir esta visualização e funcionalidades de     ficheiros virtuais , os ficheiros a visualizar não devem ser definidos como executáveis. Mude o estado deles com o chmod(1) ou via menu ficheiro do MC. 1.3.8. Virtual filesystem of MC MC can be used to access files over the Internet. Go to the menu by pressing F9, "Enter" and "h" to activate the Shell filesystem.     Enter a URL in the form "sh://[user@]machine[:options]/ [remote-dir]", which retrieves a remote directory that appears like a local one using ssh. 1.4. O ambiente de trabalho estilo Unix básico Apesar do MC lhe permitir fazer quase tudo, é muito importante     aprender a utilizar as ferramentas de linha de comandos invocadas a partir da prompt da shell e familiarizar-se com o ambiente de trabalho do tipo Unix. 1.4.1. A shell de login Since the login shell may be used by some system initialization     programs, it is prudent to keep it as bash(1) and avoid switching the login shell with chsh(1). If you want to use a different interactive shell prompt, set it     from GUI terminal emulator configuration or start it from ~ /.bashrc, e.g., by placing "exec /usr/bin/zsh -i -l" or "exec / usr/bin/fish -i -l" in it. Tabela 1.13. Lista de programas da shell +---------------------------------------------------------------+ | | | |Shell| | | pacote |popcon|tamanho| do | descrição | | | | |POSIX| | |---------------+------+-------+-----+--------------------------| | |V:838,| | |Bash: a GNU Bourne Again | |bash |I:999 |7175 |Sim |SHell (o standard de | | | | | |facto) | |---------------+------+-------+-----+--------------------------| |bash-completion|V:32, |1454 |N/D |programmable completion | | |I:933 | | |for the bash shell | |---------------+------+-------+-----+--------------------------| |dash |V:884,|191 |Sim |Shell Almquist, bom para | | |I:997 | | |scripts da shell | |---------------+------+-------+-----+--------------------------| |zsh |V:40, |2463 |Sim |Z shell: a shell standard | | |I:73 | | |com muitas melhorias | |---------------+------+-------+-----+--------------------------| |tcsh |V:6, |1355 |Não |Shell TENEX C: uma versão |     | |I:20 | | |melhorada de Berkeley csh | |---------------+------+-------+-----+--------------------------| |mksh |V:6, |1579 |Sim |Uma versão de Korn shell | | |I:11 | | | | |---------------+------+-------+-----+--------------------------| |csh |V:1, |339 |Não |OpenBSD shell C, uma | | |I:6 | | |versão do Berkeley csh | |---------------+------+-------+-----+--------------------------| | | | | |shell Stand-alone com | |sash |V:0, |1157 |Sim |comandos embutidos (Não se| | |I:5 | | |destina a "/usr/bin/sh" | | | | | |standard) | |---------------+------+-------+-----+--------------------------| |ksh |V:1, |61 |Sim |a real, versão AT&T da | | |I:10 | | |Korn shell | |---------------+------+-------+-----+--------------------------| |rc |V:0, |178 |Não |implementação da rc shell | | |I:1 | | |AT&T Plan 9 | |---------------+------+-------+-----+--------------------------| |posh |V:0, |190 |Sim |Policy-compliant Ordinary | | |I:0 | | |SHell (deriva da pdksh) | +---------------------------------------------------------------+ Dica     Apesar das shells tipo POSIX partilharem a sintaxe básica, podem diferir no comportamento em coisas tão básicas como variáveis de shell e expansões glob. Por favor verifique as suas documentações para detalhes.     Neste capítulo do tutorial, a shell interactiva significa sempre bash. 1.4.2. Personalizar bash     Pode personalizar o comportamento da bash(1) em "~/.bashrc".     Por exemplo, tente o seguinte. # enable bash-completion if ! shopt -oq posix; then if [ -f /usr/share/bash-completion/bash_completion ]; then . /usr/share/bash-completion/bash_completion elif [ -f /etc/bash_completion ]; then . /etc/bash_completion fi fi # CD upon exiting MC . /usr/lib/mc/mc.sh     # set CDPATH to a good one CDPATH=.:/usr/share/doc:~:~/Desktop:~ export CDPATH PATH="${PATH+$PATH:}/usr/sbin:/sbin" # set PATH so it includes user's private bin if it exists if [ -d ~/bin ] ; then PATH="~/bin${PATH+:$PATH}" fi export PATH EDITOR=vim export EDITOR Dica     Pode encontrar mais dicas de personalização da bash, como os Secção 9.3.6, “Comandos coloridos”, em Capítulo 9, Dicas do sistema. Dica     O pacote bash-completion activa preenchimento automático programável para bash. 1.4.3. Teclas especiais No ambiente do tipo Unix, existem algumas combinações de teclas que têm significados especiais. Por favor note que numa consola     de caracteres normal do Linux, apenas as teclas Ctrl e Alt do lado esquerdo funcionam como se espera. Aqui estão algumas combinações de teclas notáveis para se lembrar. Tabela 1.14. Lista de teclas de atalho para bash +---------------------------------------------------------------+ | tecla | descrição do atalho da tecla | |------------------------+--------------------------------------| |Ctrl-U |apagar a linha antes do cursor | |------------------------+--------------------------------------| |Ctrl-H |apagar um caractere antes do cursor | |------------------------+--------------------------------------| |Ctrl-D |termina a entrada (sai da shell se | | |estiver a usar uma shell) | |------------------------+--------------------------------------| |Ctrl-C |termina um programa em funcionamento | |------------------------+--------------------------------------| |Ctrl-Z |pára temporariamente o programa ao | | |movê-lo para segundo plano | |------------------------+--------------------------------------| |Ctrl-S |pára a saída ao ecrã | |------------------------+--------------------------------------| |Ctrl-Q |reactiva a saída para o ecrã |     |------------------------+--------------------------------------| |Ctrl-Alt-Del |reinicia/pára o sistema, veja inittab | | |(5) | |------------------------+--------------------------------------| |Left-Alt-key |meta-tecla para o Emacs e a UI | |(opcionalmente, |semelhante | |tecla-do-Windows) | | |------------------------+--------------------------------------| |Seta-para-cima |inicia a busca no histórico de | | |comandos em bash | |------------------------+--------------------------------------| |Ctrl-R |inicia o histórico de comandos | | |incremental em bash | |------------------------+--------------------------------------| |Tab |completa a entrada do nome de ficheiro| | |para a linha de comandos em bash | |------------------------+--------------------------------------| |Ctrl-V Tab |entrada Tab sem expansão para a linha | | |de comandos em bash | +---------------------------------------------------------------+ Dica     A funcionalidade do terminal de Ctrl-S pode ser desactivada a usar stty(1). 1.4.4. Mouse operations     Mouse operations for text on Debian system mix 2 styles with some twists: * Traditional Unix style mouse operations: + use 3 buttons (click) + use PRIMARY + used by X applications such as xterm and text     applications in Linux console * Modern GUI style mouse operations: + use 2 buttons (drag + click) + use PRIMARY and CLIPBOARD + used in Modern GUI applications such as gnome-terminal Tabela 1.15. List of mouse operations and related key actions on Debian +---------------------------------------------------------------+ | acção | resposta | |--------------------------+------------------------------------| |Clique-esquerdo-e-arrastar|select range as PRIMARY selection | |do rato | | |--------------------------+------------------------------------| |Clique-esquerdo |select the start of range for | | |PRIMARY selection | |--------------------------+------------------------------------| |Right-click (traditional) |select the end of range for PRIMARY | | |selection |     |--------------------------+------------------------------------| |Right-click (modern) |context dependent menu (cut/copy/ | | |paste) | |--------------------------+------------------------------------| |Middle-click or Shift-Ins |insert PRIMARY selection at the | | |cursor | |--------------------------+------------------------------------| |Ctrl-X |cut PRIMARY selection to CLIPBOARD | |--------------------------+------------------------------------| |Ctrl-C (Shift-Ctrl-C in |copy PRIMARY selection to CLIPBOARD | |terminal) | | |--------------------------+------------------------------------| |Ctrl-V |paste CLIPBOARD at the cursor | +---------------------------------------------------------------+ Here, the PRIMARY selection is the highlighted text range. Within     the terminal program, Shift-Ctrl-C is used instead to avoid terminating a running program. The center wheel on the modern wheel mouse is considered middle     mouse button and can be used for middle-click. Clicking left and right mouse buttons together serves as the middle-click under the 2 button mouse system situation.     In order to use a mouse in Linux character consoles, you need to have gpm(8) running as daemon. 1.4.5. O pager O comando less(1) é o paginador avançado (navegador de conteúdo de ficheiros). Ele lê o ficheiro especificado pelo seu argumento de comando ou pela sua entrada standard. Carregue em "h" se precisar de ajuda enquanto explora com o comando less. Pode fazer     muito mais do que o more(1) e pode ser ampliado ao executar "eval $(lesspipe)" ou "eval $(lessfile)" no script de arranque de shell. Veja mais em "/usr/share/doc/less/LESSOPEN". A opção "-R" permite saída em caracteres em bruto e activa sequências de escape de cores ANSI. Veja less(1). Dica     In the less command, type "h" to see the help screen, type "/" or "?" to search a string, and type "-i" to the change case sensitivity. 1.4.6. O editor de texto     Deve tornar-se conhecedor de uma das variantes dos programas Vim ou Emacs que são populares em sistemas tipo Unix. Acho que habituar-se aos comandos do Vim é a coisa certa a fazer, pois o editor Vim está sempre presente no mundo Linux/Unix. (Na     verdade, o vi original ou o novo nvi são programas que vai encontrar em todo o lado. Escolho o Vim para novatos porque é bastante semelhante e mais poderoso já que lhe oferece ajuda através da tecla F1 .) Pode escolher o Emacs ou o XEmacs como o seu editor favorito, que é realmente uma outra boa escolha, particularmente para a programação. O Emacs tem também um leque de outras funcionalidades, incluindo funcionar como um leitor de news, editor de diretório, programa de mail, etc. Quando é usado para     programação ou edição de scripts de shell, é inteligente para reconhecer o formato daquilo em que está a trabalhar e tenta disponibilizar assistência. Algumas pessoas afirmam que o único programa que necessitam em Linux é o Emacs. 10 minutos a aprender Emacs agora pode poupar-lhe horas mais tarde. Ter o manual do Emacs GNU para referência quando se aprende Emacs é altamente recomendado. Todos estes programas vêm normalmente com um programa tutor para queaprenda a usá-los pela prática. Arranque o Vim ao escrever     "vim" e carregue an tecla F1. Deverá ler pelo menos as primeiras 35 linhas. Depois faça o curso de treino online ao mover o cursor para "|tutor|" e pressionar Ctrl-]. Nota Good editors, such as Vim and Emacs, can handle UTF-8 and other     exotic encoding texts correctly. It is a good idea to use the GUI environment in the UTF-8 locale and to install required programs and fonts to it. Editors have options to set the file encoding independent of the GUI environment. Please refer to their documentation on multibyte text. 1.4.7. Definir um editor de texto predefinido     Debian vem com uma quantia de editores diferentes. Recomendamos instalar o pacote vim, como mencionado anteriormente. Debian disponibiliza acesso unificado ao editor predefinido do     sistema através do comando "/usr/bin/editor" para que outros programas (p.e., reportbug(1)) possam invocá-lo. Pode alterá-lo com o seguinte:     $ sudo update-alternatives --config editor A escolha de "/usr/bin/vim.basic" em vez de "/usr/bin/vim.tiny" é     uma recomendação minha para novatos pois suporta destaque de sintaxe. Dica Muitos programas utilizam as variáveis de ambiente "$EDITOR" ou     "$VISUAL" para decidir qual o editor que vai utilizar (veja Secção 1.3.5, “O editor interno em MC” e Secção 9.4.11, “Personalizar o programa a ser iniciado”). Para consistência no sistema Debian, defina estas para "/usr/bin/editor". (Historicamente, "$EDITOR" era "ed" e "$VISUAL" era "vi".) 1.4.8. Using vim     The recent vim(1) starts itself in the sane "nocompatible" option and enters into the NORMAL mode.^[1] Tabela 1.16. Lista de teclas básicas do Vim +---------------------------------------------------------------+ | modo | key strokes | acção | |---------------+-----------------+-----------------------------| |NORMAL |:help|only |display the help file | |---------------+-----------------+-----------------------------| |NORMAL |:e filename.ext |open new buffer to edit | | | |filename.ext | |---------------+-----------------+-----------------------------| |NORMAL |:w |overwrite current buffer to | | | |the original file | |---------------+-----------------+-----------------------------| |NORMAL |:w filename.ext |write current buffer to | | | |filename.ext | |---------------+-----------------+-----------------------------| |NORMAL |:q |quit vim | |---------------+-----------------+-----------------------------| |NORMAL |:q! |force to quit vim | |---------------+-----------------+-----------------------------| |NORMAL |:only |close all other split open | | | |windows | |---------------+-----------------+-----------------------------| |NORMAL |:set |check if vim is in the sane | | |nocompatible? |nocompatible mode | |---------------+-----------------+-----------------------------| |NORMAL |:set nocompatible|set vim to the sane |     | | |nocompatible mode | |---------------+-----------------+-----------------------------| |NORMAL |i |enter the INSERT mode | |---------------+-----------------+-----------------------------| |NORMAL |R |enter the REPLACE mode | |---------------+-----------------+-----------------------------| |NORMAL |v |enter the VISUAL mode | |---------------+-----------------+-----------------------------| |NORMAL |V |enter the linewise VISUAL | | | |mode | |---------------+-----------------+-----------------------------| |NORMAL |Ctrl-V |enter the blockwise VISUAL | | | |mode | |---------------+-----------------+-----------------------------| |except |ESC-key |enter the NORMAL mode | |TERMINAL-JOB | | | |---------------+-----------------+-----------------------------| |NORMAL |:term |enter the TERMINAL-JOB mode | |---------------+-----------------+-----------------------------| |TERMINAL-NORMAL|i |enter the TERMINAL-JOB mode | |---------------+-----------------+-----------------------------| |TERMINAL-JOB |Ctrl-W N (or |enter the TERMINAL-NORMAL | | |Ctrl-\ Ctrl-N) |mode | |---------------+-----------------+-----------------------------| |TERMINAL-JOB |Ctrl-W : |enter the Ex-mode in | | | |TERMINAL-NORMAL mode | +---------------------------------------------------------------+     Please use the "vimtutor" program to learn vim through an interactive tutorial course. The vim program changes its behavior to typed key strokes based on mode. Typing in key strokes to the buffer is mostly done in     INSERT-mode and REPLACE-mode. Moving cursor is mostly done in NORMAL-mode. Interactive selection is done in VISUAL-mode. Typing ":" in NORMAL-mode changes its mode to Ex-mode. Ex-mode accepts commands. Dica     The Vim comes with the Netrw package. Netrw supports reading files, writing files, browsing directories over a network, and local browsing! Try Netrw with "vim ." (a period as the argument) and read its manual at ":help netrw".     For the advanced configuration of vim, see Secção 9.2, “Personalizar o vim”. 1.4.9. Gravar as atividades da shell O resultado do comando na shell pode sair fora do seu ecrã e ficar perdido para sempre. É uma boa prática registar as     atividades da shell num ficheiro para rever mais tarde. Este tipo de registo é essencial quando executa quaisquer tarefas de administração do sistema. Dica     The new Vim (version>=8.2) can be used to record the shell activities cleanly using TERMINAL-JOB-mode. See Secção 1.4.8, “Using vim”.     O método básico de gravar a atividade da shell é corrê-la sob script(1).     Por exemplo, tente o seguinte:     $ script Script started, file is typescript     Faz quaisquer comandos de shell sob script.     Carregue em Ctrl-D para terminar o script.     $ vim typescript     Veja Secção 9.1.1, “Gravar as atividades da shell de modo limpo” . 1.4.10. Comandos básicos de Unix Vamos aprender comandos básicos do Unix. Aqui Uso "Unix" no sentido genérico dele. Geralmente qualquer SO clone do Unix oferece comandos equivalentes. O sistema Debian não é excepção.     Não se preocupe se alguns comandos não funcionarem como deseja por agora. Se for utilizado alias na shell, as saídas dos comandos correspondentes serão diferentes. Estes exemplos não se destinam a ser executados por esta ordem.     Tente os seguintes comandos a partir da conta de utilizador não-privilegiado. Tabela 1.17. lista dos comandos Unix básicos +---------------------------------------------------------------+ | comando | descrição | |---------------+-----------------------------------------------| |pwd |mostrar o nome do diretório atual | |---------------+-----------------------------------------------| |whoami |mostrar o nome do utilizador atual | |---------------+-----------------------------------------------| |id |mostrar a identidade do utilizador atual (nome,| | |uid, gid e grupos associados) | |---------------+-----------------------------------------------| |file foo |mostrar o tipo de ficheiro para o ficheiro "foo| | |" | |---------------+-----------------------------------------------| |type -p |mostrar a localização de um ficheiro do comando| |nome_do_comando|"nome_do_comando" | |---------------+-----------------------------------------------| |which |, , | |nome_do_comando| | |---------------+-----------------------------------------------| |type |mostrar informação do comando "nome_do_comando"| |nome_do_comando| | |---------------+-----------------------------------------------| |apropos |mostrar comandos relacionados com a " | |palavra_chave |palavra_chave" | |---------------+-----------------------------------------------| |man -k |, , | |palavra_chave | | |---------------+-----------------------------------------------| |whatis |mostrar a explicação de uma linha para o | |nome_do_comando|comando "nome_do_comando" | |---------------+-----------------------------------------------| |man -a |mostrar a explicação do comando " | |nome_do_comando|nome_do_comando" (estilo Unix) | |---------------+-----------------------------------------------| |info |mostrar uma explicação longa do comando " | |nome_do_comando|nome_do_comando" (estilo GNU) | |---------------+-----------------------------------------------| |ls |listar o conteúdo do diretório (ficheiros e | | |diretórios não escondidos) | |---------------+-----------------------------------------------| |ls -a |listar o conteúdo do diretório (todos os | | |ficheiros e diretórios) | |---------------+-----------------------------------------------| | |listar o conteúdo do diretório (quase todos os | |ls -A |ficheiros e diretórios, isto é, salta o ".." e | | |".") | |---------------+-----------------------------------------------| |ls -la |listar todo o conteúdo do diretório com | | |informação detalhada | |---------------+-----------------------------------------------| |ls -lai |listar todo o conteúdo do diretório com número | | |de inode e informação detalhada | |---------------+-----------------------------------------------| |ls -d |listar todos os diretórios sob o diretório | | |atual | |---------------+-----------------------------------------------| |tree |mostrar o conteúdo da árvore de ficheiros | |---------------+-----------------------------------------------| |lsof foo |listar o estado aberto do ficheiro "foo" | |---------------+-----------------------------------------------| |lsof -p pid |listar ficheiros abertos pelo processo de ID: "| | |pid" | |---------------+-----------------------------------------------| |mkdir foo |criar um novo diretório "foo" no diretório | | |atual | |---------------+-----------------------------------------------| |rmdir foo |remover um diretório "foo" no diretório atual | |---------------+-----------------------------------------------| | |mudar o diretório para o diretório "foo" no | |cd foo |diretório atual ou no diretório listado na | | |variável "$CDPATH" | |---------------+-----------------------------------------------| |cd / |mudar o diretório para o diretório raiz | |---------------+-----------------------------------------------| |cd |mudar ao diretório home do utilizador atual | |---------------+-----------------------------------------------| |cd /foo |mudar para o diretório de caminho absoluto "/ | | |foo" | |---------------+-----------------------------------------------| |cd .. |mudar ao diretório pai | |---------------+-----------------------------------------------| |cd ~foo |mudar ao diretório home do utilizador "foo" | |---------------+-----------------------------------------------| |cd - |mudar ao diretório anterior | |---------------+-----------------------------------------------| | foo |descomprimido de "README.gz" | |---------------+-----------------------------------------------| |zcat README.gz |acrescentar o conteúdo descomprimido de | |>> foo |"README.gz" ao final do ficheiro "foo" (se ele | | |não existir, é primeiro criado) | +---------------------------------------------------------------+ Nota Unix tem a tradição de esconder os nomes de ficheiros que começam por ".". Eles são tradicionalmente ficheiros que contêm informação de configuração e preferências do utilizador. Para o comando cd, veja builtins(7). O paginador predefinido da vastidão do sistema Debian é o more (1), o qual não pode deslocar para trás. A instalar o pacote less     a usar o comando "apt-get install less", o less(1) torna-se o paginador predefinido e pode deslocar para trás com as teclas do cursor. O "[" e "]" na expressão regular do comando "ps aux | grep -e " [e]xim4*"" em cima activam grep para evitar a correspondência consigo próprio. O "4*" na expressão regular significa 0 ou mais repetições do caractere "4" assim activa o grep a corresponder a ambos "exim" e "exim4". Apesar de "*" ser usado no glob de nome de ficheiro da shell e na expressão regular, os seus significados são diferentes. Aprenda a expressão regular a partir do grep(1). Por favor percorra os diretórios e espreite no sistema a usar os     comandos em cima como treino. Se tiver questões sobre qualquer comando de consola, por favor certifique-se de ler o manual dele.     Por exemplo, tente o seguinte: $ man man $ man bash     $ man builtins $ man grep $ man ls Pode ser um pouco difícil de habituar-se ao estilo dos manuais,     porque são bastante concisos, particularmente os mais antigos, muito tradicionais. Mas assim que se habituar a eles, vai apreciar a brevidade deles. Por favor note que muitos comandos do tipo Unix incluindo os GNU     e BSD mostram informação breve de ajuda se os invocar numa das seguintes formas (ou sem argumentos nalguns casos).     $ commandname --help $ commandname -h 1.5. O comando simples da shell Agora tem alguma prática de como utilizar o sistema Debian. Vamos     ver mais fundo no mecanismo da execução de comandos no sistema Debian. Aqui simplifiquei a realidade para o novato. Veja bash(1) para a explicação exata.     Um comando simples é uma sequência de componentes. 1. Atribuições de variáveis (opcional) 2. Nome do comando     3. Argumentos (opcional) 4. Re-direcções (opcional: > , >> , < , << , etc.) 5. Operador de controle (opcional: && , || , nova-linha , ; , & , ( , ) ) 1.5.1. Execução do comando e variável de ambiente     Os valores de algumas variáveis de ambiente modificam o comportamento de alguns comandos de Unix. Os valores predefinidos das variáveis de ambiente são definidos     inicialmente pelo sistema PAM e depois alguns deles podem ser redefinidos por alguns programas. * The PAM system such as pam_env may set environment variables by /etc/pam.conf", "/etc/environment" and "/etc/default/ locale".     * The display manager such as gdm3 may reset environment variables for GUI session by "~/.profile". * The user specific program initialization may reset environment variables by "~/.profile", "~/.bash_profile" and "~/.bashrc". 1.5.2. A variável "$LANG" The default locale is defined in the "$LANG" environment variable     and is configured as "LANG=xx_YY.UTF-8" by the installer or by the subsequent GUI configuration, e.g., "Settings" → "Region & Language" → "Language" / "Formats" for GNOME. Nota     I recommend you to configure the system environment just by the "$LANG" variable for now and to stay away from "$LC_*" variables unless it is absolutely needed.     O valor completo do locale dado à variável "$LANG" consiste em 3 partes: "xx_YY.ZZZZ". Tabela 1.18. As 3 partes do valor locale +---------------------------------------------------------------+ | valor | significado | | locale | | |-----------+---------------------------------------------------| |xx |códigos de idioma ISO 639 (minúsculas) como em "en"|     |-----------+---------------------------------------------------| |YY |códigos de idioma ISO 3166 (maiúsculas) como em | | |"US" | |-----------+---------------------------------------------------| |ZZZZ |conjunto de codificação, definido sempre como | | |"UTF-8" | +---------------------------------------------------------------+ Tabela 1.19. Lista de recomendações de locale +-----------------------------------------------------+ |recomendação de locale| Idioma (área) | |----------------------+------------------------------| |en_US.UTF-8 |Inglês (EUA) | |----------------------+------------------------------| |en_GB.UTF-8 |Inglês (Grã-Bretanha) | |----------------------+------------------------------| |fr_FR.UTF-8 |Francês (França) | |----------------------+------------------------------| |de_DE.UTF-8 |Alemão (Alemanha) | |----------------------+------------------------------| |it_IT.UTF-8 |Italiano (Itália) | |----------------------+------------------------------| |es_ES.UTF-8 |Espanhol (Espanha) | |----------------------+------------------------------|     |ca_ES.UTF-8 |Catalão (Espanha) | |----------------------+------------------------------| |sv_SE.UTF-8 |Sueco (Suécia) | |----------------------+------------------------------| |pt_BR.UTF-8 |Português (Brasil) | |----------------------+------------------------------| |ru_RU.UTF-8 |Russo (Rússia) | |----------------------+------------------------------| |zh_CN.UTF-8 |Chinês (Rep. Popular da China)| |----------------------+------------------------------| |zh_TW.UTF-8 |Chinês (Taiwan R.O.C.) | |----------------------+------------------------------| |ja_JP.UTF-8 |Japonês (Japão) | |----------------------+------------------------------| |ko_KR.UTF-8 |Coreano (República da Coreia) | |----------------------+------------------------------| |vi_VN.UTF-8 |Vietnamita (Vietname) | +-----------------------------------------------------+     A execução de comando típica utiliza uma sequência de linha de shell como o seguinte. $ echo $LANG en_US.UTF-8     $ date -u Wed 19 May 2021 03:18:43 PM UTC $ LANG=fr_FR.UTF-8 date -u mer. 19 mai 2021 15:19:02 UTC     Here, the program date(1) is executed with different locale values. * Para o primeiro comando, "$LANG" é definida ao valor locale predefinido do sistema "en_US.UTF-8".     * Para o segundo comando, "$LANG" é definida ao valor locale UTF-8 Francês "fr_FR.UTF-8". A maioria das execuções de comandos geralmente não têm definições     de variáveis de ambiente precedentes. Para o exemplo acima, pode executar em alternativa o seguinte: $ LANG=fr_FR.UTF-8     $ date -u mer. 19 mai 2021 15:19:24 UTC Dica     When filing a bug report, running and checking the command under "en_US.UTF-8" locale is a good idea if you use non-English environment.     Para mais detalhes sobre configuração do locale, veja Secção 8.1, “O locale”. 1.5.3. A variável "$PATH" Quando escreve um comando na shell, a shell procura o comando na     lista de diretórios contida na variável de ambiente "$PATH". O valor da variável de ambiente "$PATH" também é chamado o caminho de procura da shell. Na instalação Debian, por omissão, a variável de ambiente "$PATH" das contas de utilizadores pode não incluir "/usr/sbin" nem "/usr     /sbin". Por exemplo, o comando ifconfig necessita ser chamado com o caminho completo como "/usr/sbin/ifconfig". (De modo idêntico, o comando ip está localizado em "/usr/bin".)     Pode alterar a variável de ambiente "$PATH" da shell Bash pelos ficheiros "~/.bash_profile" ou "~/.bashrc". 1.5.4. A variável "$HOME" Muitos comandos armazenam configurações específicas do utilizador     no diretório home do utilizador e mudam o comportamento dele de acordo com o conteúdo dele. O diretório de utilizador é identificado pela variável de ambiente "$HOME". Tabela 1.20. Lista de valores "$HOME" +---------------------------------------------------------------+ |valor de "$HOME" | situação de execução do programa | |-----------------+---------------------------------------------| |/ |programa executado pelo processo de init | | |(daemon) | |-----------------+---------------------------------------------| |/root |programa executado a partir da shell de root | | |normal | |-----------------+---------------------------------------------|     |/home/ |programa executado a partir da shell de | |utilizador_normal|utilizador normal | |-----------------+---------------------------------------------| |/home/ |programa executado a partir menu do ambiente | |utilizador_normal|GUI do utilizador normal | |-----------------+---------------------------------------------| |/home/ |programa executado como root com o "programa | |utilizador_normal|sudo" | |-----------------+---------------------------------------------| |/root |programa executado como root com o "programa | | |sudo -H" | +---------------------------------------------------------------+ Dica     A shell expande "~/" ao diretório home do utilizador atual, isto é, "$HOME/". A shell expande "~foo/" ao diretório home de foo, isto é, "/home/foo/".     See Secção 12.1.5, “Shell environment variables” if $HOME isn't available for your program. 1.5.5. Opções da linha de comandos Alguns comandos recebem argumentos. Os argumentos que começam com     um "-" ou "--" são chamados opções e controlam o comportamento do comando. $ date     Thu 20 May 2021 01:08:08 AM JST $ date -R Thu, 20 May 2021 01:08:12 +0900     Aqui o argumento de linha de comandos "-R" altera o comportamento de date(1) para gerar uma string da data compatível com RFC2822. 1.5.6. Glob da shell Frequentemente deseja trabalhar com um conjunto de ficheiros sem     os digitar a todos. O modelo de expansão do nome de ficheiro a utilizar a glob da shell , (por vezes referida como wildcards), facilita esta necessidade. Tabela 1.21. Padrões glob da shell +---------------------------------------------------------------+ |modelo glob| descrição de regra de correspondência | | da shell | | |-----------+---------------------------------------------------| |* |nome de ficheiro (segmento) não iniciado por "." | |-----------+---------------------------------------------------| |.* |nome de ficheiro (segmento) iniciado por "." | |-----------+---------------------------------------------------|     |? |exatamente um caractere | |-----------+---------------------------------------------------| |[…] |exatamente um caractere com qualquer caractere | | |envolvido em colchetes | |-----------+---------------------------------------------------| |[a-z] |exatamente um caractere com qualquer caractere | | |entre "a" e "z" | |-----------+---------------------------------------------------| |[^…] |exatamente um caractere que não seja qualquer | | |caractere envolvido em colchetes (a excluir "^") | +---------------------------------------------------------------+     Por exemplo, tente o seguinte: $ mkdir junk; cd junk; touch 1.txt 2.txt 3.c 4.h .5.txt ..6.txt $ echo *.txt 1.txt 2.txt $ echo * 1.txt 2.txt 3.c 4.h $ echo *.[hc]     3.c 4.h $ echo .* . .. .5.txt ..6.txt $ echo .*[^.]* .5.txt ..6.txt $ echo [^1-3]* 4.h $ cd ..; rm -rf junk     Veja glob(7). Nota     Ao contrário da expansão de nome de ficheiro da shell, o modelo de shell "*" testado em find(1) com o teste "-name" etc., corresponde ao "." inicial do nome de ficheiro. (Nova funcionalidade POSIX) Nota     BASH pode ser moldado a alterar o comportamento de glob dele com as opções shopt dele embutidas como as "dotglob", "noglob", "nocaseglob", "nullglob", "extglob", etc. Veja bash(1). 1.5.7. Valor de retorno do comando     Cada comando retorna o estado de saída dele (na variável: "$?") como o valor de retorno. Tabela 1.22. Códigos de saída do comando +---------------------------------------------------------------+ | estado de saída do | valor de retorno | valor de retorno | | comando | numérico | lógico |     |---------------------+---------------------+-------------------| |sucesso |zero, 0 |TRUE | |---------------------+---------------------+-------------------| |erro |não-zero, -1 |FALSE | +---------------------------------------------------------------+     Por exemplo, tente o seguinte. $ [ 1 = 1 ] ; echo $?     0 $ [ 1 = 2 ] ; echo $? 1 Nota     Por favor note que, no contexto lógico da shell, sucesso é tratado como o VERDADEIRO lógico o qual tem 0 (zero) como valor. De certa maneira isto não é intuitivo e necessita ser lembrado aqui. 1.5.8. Sequências de comandos típicas e redireccionamento da shell     Vamos tentar lembrar-nos dos seguintes idiomas de comando de shell escritos numa linha como parte de um comando de shell. Tabela 1.23. Idiomas de comandos de shell +---------------------------------------------------------------+ | idioma do | descrição | | comando | | |-----------+---------------------------------------------------| |comando & |execução em segundo plano do comando na sub-shell | |-----------+---------------------------------------------------| |comando1 | |liga em pipe a saída standard do comando1 à entrada| |comando2 |standard do comando2 (execução concorrente) | |-----------+---------------------------------------------------| |comando1 2>|liga em pipe a saídas standard e o erro standard do| |&1 | |comando1 à entrada standard do comando2 (execução | |comando2 |concorrente) | |-----------+---------------------------------------------------| |comando1 ; |executa o comando1 e o comando2 sequencialmente | |comando2 | | |-----------+---------------------------------------------------| |comando1 &&|executa o comando1; se tiver sucesso, executa o | |comando2 |comando2 sequencialmente (retorna sucesso se ambos | | |comando1 e comando2 tiverem sucesso) | |-----------+---------------------------------------------------| |comando1 |||executa o comando1; se não tiver sucesso, executa o| |comando2 |comando2 sequencialmente (retorna sucesso se o | | |comando1 ou o comando2 tiverem sucesso | |-----------+---------------------------------------------------|     |comando > |redirecciona a saída standard do comando para o | |foo |ficheiro foo (sobrescreve) | |-----------+---------------------------------------------------| |comando 2> |redirecciona o erro standard do comando para o | |foo |ficheiro foo (sobrescreve) | |-----------+---------------------------------------------------| |comando >> |redirecciona a saída standard do comando para o | |foo |ficheiro foo (acrescenta) | |-----------+---------------------------------------------------| |comando 2>>|redireciona o erro standard do comando ao ficheiro | |foo |foo (acrescenta) | |-----------+---------------------------------------------------| |comando > |redirecciona ambos saída standard e erro standard | |foo 2>&1 |do comando para o ficheiro foo | |-----------+---------------------------------------------------| |comando < |redirecciona a entrada standard do comando ao | |foo |ficheiro foo | |-----------+---------------------------------------------------| |comando << |redirecciona a entrada standard do comando para as | |delimitador|seguintes linhas até que o "delimitador" seja | | |atingido (documentar aqui) | |-----------+---------------------------------------------------| | |redirecciona a entrada standard do comando às | |comando <<-|seguintes linhas até que o "delimitador" seja | |delimitador|atingido (aqui documento, os caracteres tab de | | |inicio são retirados das linhas de entrada) | +---------------------------------------------------------------+ O sistema Debian é um sistema de multi-tarefa. Os trabalhos em segundo plano permitem aos utilizadores correrem vários programas     numa única shell. A gestão dos processos em segundo plano envolve os embutidos da shell: jobs, fg, bg e kill. Por favor leia as secções de bash(1) sob "SINAIS", "CONTROLE DE TAREFAS" e builtins (1).     Por exemplo, tente o seguinte:     $ foo $ exec 3bar # open files     $ cat <&3 >&4 # redirect stdin to 3, stdout to 4 $ exec 3<&- 4>&- # close files $ cat bar Hello     O descritores de ficheiro 0-2 são predefinidos. Tabela 1.24. Descritores de ficheiro predefinido +-----------------------------------------------+ |aparelho| descrição |descritor de ficheiro| |--------+----------------+---------------------|     |stdin |entrada standard|0 | |--------+----------------+---------------------| |stdout |saída standard |1 | |--------+----------------+---------------------| |stderr |erro standard |2 | +-----------------------------------------------+ 1.5.9. Comando alias     Pode definir um nome alternativo (alias) para um comando frequentemente utilizado.     Por exemplo, tente o seguinte:     $ alias la='ls -la'     Agora, "la" funciona como atalho para "ls -la" o que lista todos os ficheiros no formato de lista longa.     Pode listar quaisquer nomes alternativos existentes com o alias (veja bash(1) sob "COMANDOS EMBUTIDOS NA SHELL"). $ alias     ... alias la='ls -la'     Pode identificar o caminho exacto ou a identidade do comando com type (veja bash(1) sob "COMANDOS EMBUTIDOS DA SHELL").     Por exemplo, tente o seguinte: $ type ls ls is hashed (/bin/ls) $ type la     la is aliased to ls -la $ type echo echo is a shell builtin $ type file file is /usr/bin/file Aqui o ls foi procurado recentemente enquanto o "file" não foi,     assim o "ls" tem "hash", isto é, a shell tem um registo interno para o acesso rápido à localização do comando "ls". Dica     Veja Secção 9.3.6, “Comandos coloridos”. 1.6. Processamento de texto estilo Unix Em ambientes de trabalho tipo Unix, o processamento de texto é     feito ao canalizar texto por cadeias de ferramentas standard de processamento de texto. Esta foi outra inovação crucial do Unix. 1.6.1. Ferramentas de texto de Unix     Existem algumas ferramentas standard de processamento de texto que são muito usadas nos sistemas tipo Unix. * Não é utilizada nenhuma expressão regular: + cat(1) concatena ficheiros e escreve o conteúdo inteiro. + tac(1) concatena ficheiros e escreve-os em reverso. + cut(1) seleciona partes de linhas e escreve-as. + head(1) escreve a parte inicial de ficheiros. + tail(1) escreve a parte final de ficheiros. + sort(1) organiza as linhas de ficheiros de texto. + uniq(1) remove linhas duplicadas de um ficheiro organizado. + tr(1) traduz ou apaga caracteres. + diff(1) compara ficheiros linha a linha. * Basic regular expression (BRE) is used as default: + ed(1) é um editor de linhas primitivo. + sed(1) é um editor de streams.     + grep(1) faz coincidir texto com padrões. + vim(1) é um editor de ecrã. + emacs(1) é um editor de écran. (BRE de certo modo extensa) * É utilizada uma expressão regular extensa (ERE): + awk(1) faz processamento de texto simples. + egrep(1) faz coincidir texto com padrões. + tcl(3tcl) pode fazer todo o processamento de texto concebível: Veja re_syntax(3). Bastante usado com tk (3tk). + perl(1) pode fazer todo o processamento de texto concebível. Veja perlre(1). + pcregrep(1) do pacote pcregrep corresponde texto com padrões Perl Compatible Regular Expressions (PCRE). + python(1) com o módulo re pode fazer todo o processamento de texto concebível. Veja "/usr/share/doc/python/html/ index.html".     Se não tiver a certeza do que estes comandos fazem, por favor utilize "man comando" para descobri-lo por si. Nota     Sort order and range expression are locale dependent. If you wish to obtain traditional behavior for a command, use C locale or C.UTF-8 locale instead of normal UTF-8 ones (see Secção 8.1, “O locale”). Nota     As expressões regulares Perl (perlre(1)), Perl Compatible Regular Expressions (PCRE) e expressões regulares Python oferecidas pelo módulo re têm muitas extensões comuns ao ERE normal. 1.6.2. Expressões regulares As expressões regulares são utilizadas em muitas ferramentas de     processamento de texto. São análogas aos "globs" da shell, mas são mais complicadas e poderosas.     A expressão regular descreve o modelo de correspondência e é feita de caracteres de texto e de meta-caracteres. Um meta-caractere é apenas um caractere com um significado     especial. Existem 2 estilos principais, BRE e ERE, a depender das ferramentas de texto conforme descrito acima. Tabela 1.25. Meta-caracteres para BRE e ERE +---------------------------------------------------------------+ | BRE | ERE | descrição da expressão regular | |--------+------+-----------------------------------------------| |\ . [ ] |\ . [ | | |^ $ * |] ^ $ |meta-caracteres comuns | | |* | | |--------+------+-----------------------------------------------| |\+ \? \(| | | |\) \{ \}|  |BRE apenas meta-caracteres 'escapados' "\" | |\| | | | |--------+------+-----------------------------------------------| | |+ ? ( | | |  |) { } |ERE apenas meta-caracteres não 'escapados' "\" | | || | | |--------+------+-----------------------------------------------| |c |c |corresponde a não-meta-caractere "c" | |--------+------+-----------------------------------------------| |\c |\c |corresponde a um caractere literal "c" mesmo se| | | |"c" é um meta-caractere por si só | |--------+------+-----------------------------------------------| |. |. |corresponde a qualquer caractere incluindo nova| | | |linha | |--------+------+-----------------------------------------------| |^ |^ |posição no início de uma cadeia | |--------+------+-----------------------------------------------|     |$ |$ |posição no fim de uma cadeia | |--------+------+-----------------------------------------------| |\< |\< |posição no início de uma palavra | |--------+------+-----------------------------------------------| |\> |\> |posição no final de uma palavra | |--------+------+-----------------------------------------------| |[abc…] |[abc…]|corresponde a quaisquer caracteres em "abc…" | |--------+------+-----------------------------------------------| |[^abc…] |[^ |corresponde a quaisquer caracteres excepto em | | |abc…] |"abc…" | |--------+------+-----------------------------------------------| |r* |r* |corresponde a zero ou mais expressões regulares| | | |identificadas por "r" | |--------+------+-----------------------------------------------| |r\+ |r+ |corresponde a uma ou mais expressões regulares | | | |identificadas por "r" | |--------+------+-----------------------------------------------| |r\? |r? |corresponde a zero ou uma expressão regular | | | |identificada por "r" | |--------+------+-----------------------------------------------| |r1\|r2 |r1|r2 |corresponde a uma das expressões regulares | | | |identificadas por "r1" ou "r2" | |--------+------+-----------------------------------------------| |\(r1\|r2|(r1| |corresponde a uma das expressões regulares | |\) |r2) |identificadas por "r1" ou "r2" e trata-as como | | | |uma expressão regular entre colchetes | +---------------------------------------------------------------+ A expressão regular do emacs é basicamente BRE mas foi estendida     para tratar "+" e "?" como meta-caracteres como em ERE. Assim, não há necessidade de os 'escapar' com "\" na expressão regular do emacs.     grep(1) pode ser utilizado para executar a pesquisa de texto com expressão regular.     Por exemplo, tente o seguinte: $ egrep 'GNU.*LICENSE|Yoyodyne' /usr/share/common-licenses/GPL     GNU GENERAL PUBLIC LICENSE GNU GENERAL PUBLIC LICENSE Yoyodyne, Inc., hereby disclaims all copyright interest in the program Dica     Veja Secção 9.3.6, “Comandos coloridos”. 1.6.3. Expressões de substituição     Para a expressão de substituição, alguns caracteres têm significados especiais. Tabela 1.26. A expressão de substituição +---------------------------------------------------------------+ | expressão de |descrição do texto para substituir a expressão | | substituição | de substituição | |---------------+-----------------------------------------------|     |& |que expressão regular corresponde (use \& no | | |emacs) | |---------------+-----------------------------------------------| |\n |que nº entre colchetes da expressão regular | | |correspondeu (a ser "n" um número) | +---------------------------------------------------------------+     Para cadeia de substituição Perl, "$&" é usado em vez de "&" e "$n" é usado em vez de "\n".     Por exemplo, tente o seguinte: $ echo zzz1abc2efg3hij4 | \ sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/=&=/' zzz=1abc2efg3hij4= $ echo zzz1abc2efg3hij4 | \ sed -E -e 's/(1[a-z]*)[0-9]*(.*)$/=&=/' zzz=1abc2efg3hij4= $ echo zzz1abc2efg3hij4 | \ perl -pe 's/(1[a-z]*)[0-9]*(.*)$/=$&=/'     zzz=1abc2efg3hij4= $ echo zzz1abc2efg3hij4 | \ sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/\2===\1/' zzzefg3hij4===1abc $ echo zzz1abc2efg3hij4 | \ sed -E -e 's/(1[a-z]*)[0-9]*(.*)$/\2===\1/' zzzefg3hij4===1abc $ echo zzz1abc2efg3hij4 | \ perl -pe 's/(1[a-z]*)[0-9]*(.*)$/$2===$1/' zzzefg3hij4===1abc Aqui por favor preste atenção extra ao estilo da expressão     regular entre colchetes e como as cadeias correspondentes são utilizadas no processo de substituição de texto nas diferentes ferramentas. Estas expressões regulares também podem ser utilizadas para     movimentos do cursor e acções de substituição de texto em alguns editores. A barra descendente "\" no fim da linha na linha de comandos da     shell 'escapa' a nova linha como um caractere de espaço em branco e continua a entrada na linha de comandos da shell na próxima linha.     Por favor leia todos os manuais relacionados para aprender estes comandos. 1.6.4. Substituição global com expressões regulares     O comando ed(1) pode substituir todas as instâncias de "FROM_REGEX" por "TO_TEXT" em "file". $ ed file < input to main shell Sat 23 Aug 2003 08 30 36 +0200 $ unset IFS # reset IFS to the default $ echo $(date -R) Sat, 23 Aug 2003 08:30:50 +0200 1.6.6. Trechos de script para canalizar comandos em pipe     Os seguintes scripts fazem coisas bonitas como parte de um pipe. Tabela 1.27. Lista de trechos de script para canalizar comandos em pipe +---------------------------------------------------------------+ | trecho de script | efeito do comando | |(escrito numa linha) | | |---------------------+-----------------------------------------| |find /usr -print |encontra todos os ficheiros sob "/usr" | |---------------------+-----------------------------------------| |seq 1 100 |escreve 1 até 100 | |---------------------+-----------------------------------------| || xargs -n 1 command |corre o comando repetidamente com cada | | |item do pipe como seu argumento | |---------------------+-----------------------------------------| || xargs -n 1 echo |divide itens separados por espaços do | | |pipe em linhas | |---------------------+-----------------------------------------| || xargs echo |junta todas as linhas do pipe numa linha | |---------------------+-----------------------------------------| || grep -e |extrai as linhas do pipe que contêm o | |regex_pattern |padrão_da_expressão_regular | |---------------------+-----------------------------------------| || grep -v -e |extrai as linhas do pipe que não contêm o| |regex_pattern |padrão_da_expressão_regular | |---------------------+-----------------------------------------| || cut -d: -f3 - |extrai do pipe o terceiro campo separado | | |por ":" (ficheiro passwd etc.) | |---------------------+-----------------------------------------|     || awk '{ print $3 }' |extrai do pipe o terceiro campo separado | | |por espaços | |---------------------+-----------------------------------------| || awk -F'\t' '{ print|extrai do pipe o terceiro campo separado | |$3 }' |por tab | |---------------------+-----------------------------------------| || col -bx |remove os backspace e expande as tabs | | |para espaços | |---------------------+-----------------------------------------| || expand - |expande separadores | |---------------------+-----------------------------------------| || sort| uniq |organiza e remove duplicados | |---------------------+-----------------------------------------| || tr 'A-Z' 'a-z' |converte maiúsculas para minúsculas | |---------------------+-----------------------------------------| || tr -d '\n' |concatena linhas numa linha | |---------------------+-----------------------------------------| || tr -d '\r' |remove CR | |---------------------+-----------------------------------------| || sed 's/^/# /' |adiciona "#" ao inicio de cada linha | |---------------------+-----------------------------------------| || sed 's/\.ext//g' |remove ".ext" | |---------------------+-----------------------------------------| || sed -n -e 2p |escreve a segunda linha | |---------------------+-----------------------------------------| || head -n 2 - |escreve as primeiras duas linhas | |---------------------+-----------------------------------------| || tail -n 2 - |escreve as últimas duas linhas | +---------------------------------------------------------------+ Um script de shell de uma linha pode fazer ciclos sobre muitos ficheiros a usar o find(1) e xargs(1) para executar tarefas     bastante complicadas. Veja Secção 10.1.5, “Idiomas para a seleção de ficheiros” e Secção 9.4.9, “Repetir um ciclo de comandos sobre ficheiros”. Quando a utilização dos modos interativos da shell se torna muito     complicada, por favor considere escrever um script de shell (veja Secção 12.1, “O script de shell”). ---------------------------------------------------------------------     ^[1] Even the older vim can starts in the sane "nocompatible" mode by starting it with the "-N" option. Capítulo 2. Gestão de pacotes Debian Nota Este capítulo é escrito a assumir que o lançamento estável mais recente tem o nome de código: bookworm.     The data source of the APT system is collectively refered as the source list in this document . This can be defined anywhere in the "/etc/apt/sources.list" file, "/etc/apt/sources.list.d/ *.list" files, or "/etc/apt/sources.list.d/*.source" files. 2.1. Pré-requisitos da gestão de pacotes Debian 2.1.1. Debian package management system Debian é uma organização voluntária que constrói distribuições     consistentes de pacotes binários pré-compilados de software livre e distribui-os a partir do arquivo dele. O arquivo Debian é oferecido por muitos sites mirror remotos para     acesso através de métodos HTTP e FTP. Também está disponível em CD-ROM/DVD.     The current Debian package management system which can utilize all these resources is Advanced Packaging Tool (APT). O sistema de gestão de pacotes Debian, quando utilizado de modo apropriado, oferece ao utilizador o instalar de conjuntos     consistentes de pacotes binários no sistema a partir do arquivo. atualmente, existem 74165 pacotes disponíveis para a arquitectura amd64. O sistema de gestão de pacotes Debian tem um histórico rico e     muitas opções de escolha para o programa cliente do utilizador e de método de acesso ao arquivo. Atualmente, recomendamos o seguinte: * apt(8) for all interactive command line operations, including package installation, removal and dist-upgrades. * apt-get(8) para chamar o sistema de gestão de pacotes Debian     a partir de scripts. É também uma opção regressiva quando o apt não está disponível (comum em sistemas Debian antigos). * aptitude(8) para uma interface de texto interactiva para gerir os pacotes instalados e procurar os pacotes disponíveis. Tabela 2.1. Lista de ferramentas de gestão de pacotes Debian +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |-------------------+------+-------+----------------------------| | |V:912,| |low level package management| |dpkg |I:999 |6388 |system for Debian (file | | | | |based) | |-------------------+------+-------+----------------------------| | |V:865,| |APT front-end to manage | |apt |I:999 |4318 |packages with CLI: apt/ | | | | |apt-get/apt-cache | |-------------------+------+-------+----------------------------| | | | |APT front-end to | |aptitude |V:48, |4389 |interactively manage | | |I:253 | |packages with full screen | | | | |console: aptitude(8) | |-------------------+------+-------+----------------------------| |tasksel |V:34, |347 |APT front-end to install | | |I:980 | |selected tasks: tasksel(8) | |-------------------+------+-------+----------------------------| | | | |pacote de melhoria para o | |unattended-upgrades|V:182,|301 |APT para ativar a instalação| | |I:278 | |automática de atualizações | | | | |de segurança |     |-------------------+------+-------+----------------------------| |gnome-software |V:153,|3085 |Software Center for GNOME | | |I:263 | |(GUI APT front-end) | |-------------------+------+-------+----------------------------| |synaptic |V:46, |7627 |graphical package manager | | |I:375 | |(GTK APT front-end) | |-------------------+------+-------+----------------------------| | | | |Programas utilitários do | |apt-utils |V:379,|1065 |APT: apt-extracttemplates | | |I:998 | |(1), apt-ftparchive(1) e | | | | |apt-sortpkgs(1) | |-------------------+------+-------+----------------------------| | |V:358,| |ferramenta de notificação do| |apt-listchanges |I:872 |398 |histórico de alterações do | | | | |pacote | |-------------------+------+-------+----------------------------| |apt-listbugs |V:6, |477 |lista bugs críticos antes de| | |I:8 | |cada instalação do APT | |-------------------+------+-------+----------------------------| | |V:17, | |Utilitário de busca de | |apt-file |I:67 |89 |pacotes do APT - interface | | | | |de linha de comandos | |-------------------+------+-------+----------------------------| |apt-rdepends |V:0, |39 |lista recursivamente | | |I:5 | |dependências de pacotes | +---------------------------------------------------------------+ 2.1.2. Configuração de pacotes     Aqui estão alguns pontos chave para a configuração de pacotes no sistema Debian. * A configuração manual feita pelo administrador do sistema é respeitada. Por outras palavras, o sistema de configuração de pacotes não faz configurações intrusivas por conveniência. * Cada pacote vem com o próprio script de configuração com a interface de utilizador standard chamada debconf(7) para ajudar no processo inicial de instalação do pacote. * Os Programadores do Debian dão o melhor para tornar a sua experiência de atualização isenta de falhas com scripts de configuração de pacotes.     * As funcionalidades totais do software empacotado estão disponíveis ao administrador do sistema. Mas aquelas com riscos de segurança estão desactivadas na instalação predefinida. * Se manualmente ativou um serviço com alguns riscos de segurança você é o responsável pelo confinamento de risco. * A configuração esotérica pode ser activada manualmente pelo administrador do sistema. Isto pode criar interferência com programas de ajuda genéricos populares para a configuração do sistema. 2.1.3. Precauções básicas Atenção Não instale pacotes de misturas aleatórias de suites.     Provavelmente vai quebrar a consistência do pacote o que requer conhecimentos profundos de gestão do sistema tais como ABI compilador, versão de biblioteca, funcionalidades do interpretador, etc. The newbie Debian system administrator should stay with the     stable release of Debian while applying only security updates. Until you understand the Debian system very well, you should follow the following precautions. * Do not include testing or unstable in the source list. * Do not mix standard Debian with other non-Debian archives such as Ubuntu in the source list . * Não crie "/etc/apt/preferences". * Não altere o comportamento predefinido das ferramentas de gestão de pacotes através de ficheiros de configuração sem conhecer os seus impactos totais.     * Não instale pacotes aleatórios com "dpkg -i qualquer_pacote". * Nunca instale pacotes aleatórios com "dpkg --force-all -i qualquer_pacote". * Não apague ou altere os ficheiros em "/var/lib/dpkg/". * Não sobrescreva ficheiros do sistema ao instalar programas compilados a partir do código-fonte. + Instale-os em "/usr/local" ou "/opt", se necessário. The non-compatible effects caused by violating above precautions     to the Debian package management system may leave your system unusable.     O administrador de sistema Debian sério que corre servidores de missões críticas, deve tomar precauções extra. * Não instale nenhuns pacotes incluindo as atualizações de segurança da Debian sem os testar completamente com as suas configurações particulares sob condições seguras.     + Como o administrador do sistema é o responsável final pelo seu sistema. + A longa história de estabilidade do sistema Debian não é uma garantia por si só. 2.1.4. A vida com atualizações eternas Cuidado     Para o seu servidor de produção a suite stable é recomendada com as atualizações de segurança. O mesmo pode ser dito para PCs de ambiente de trabalho onde pode dispor de esforços limitados de administração.     Despite my warnings above, I know many readers of this document may wish to run the newer testing or unstable suites. O Esclarecimento com o seguinte salva uma pessoa do karma da     eterna luta do inferno das atualizações e permite-lhe alcançar o nirvana de Debian.     This list is targeted for the self-administered Desktop environment. * Use the testing suite since it is practically the rolling release automatically managed by the Debian archive QA infrastructure such as the Debian continuous integration, the source only upload practices, and the library transition tracking. The packages in the testing suite are updated frequently enough to offer all the latest features.     * Set the codename corresponding to the testing suite ("trixie" during the bookworm-as-stable release cycle) in the source list. * Manually update this codename in the source list to the new one only after assessing situation by yourself for about a month after the major suite release. The Debian user and developer mailing list are good sources of information for this, too. The use of the unstable suite isn't recommended. The unstable suite is good for debugging packages as a developer but tends to     expose you to unnecessary risks for the normal Desktop usage. Even though the unstable suite of the Debian system looks very stable for most of the times, there have been some package problems and a few of them were not so trivial to resolve.     Here are some basic precautionary measure ideas to ensure quick and easy recovery from bugs in Debian packages. * Faça um sistema de duplo arranque ao instalar a suite stable do sistema Debian noutra partição * Tenha o CD de instalação 'à mão' para o arranque de recuperação     * Considere instalar o apt-listbugs para verificar informação do Debian Bug Tracking System (BTS) antes das atualizações * Conheça o suficiente da infraestrutura do sistema de pacotes para contornar o problema Cuidado     If you can not do any one of these precautionary actions, you are probably not ready for the testing and unstable suites. 2.1.5. Básico do arquivos Debian Dica     A política oficial do arquivo Debian está definida em Manual de Políticas Debian, Capítulo 2 - O Arquivo Debian.     Vamos olhar ao arquivo Debian a partir da perspectiva do utilizador do sistema.     For a system user, the Debian archive is accessed using the APT system.     The APT system specifies its data source as the source list and it is described in sources.list(5).     For the bookworm system with the typical HTTP access, the source list in one-line-style as the following: deb http://deb.debian.org/debian/ bookworm main non-free-firmware contrib non-free deb-src http://deb.debian.org/debian/ bookworm main non-free-firmware contrib non-free     deb http://security.debian.org/debian-security bookworm-security main non-free-firmware contrib non-free deb-src http://security.debian.org/debian-security bookworm-security main non-free-firmware contrib non-free     Alternatively, the equivalent source list in deb822-style is the following. Types: deb deb-src URIs: http://deb.debian.org/debian/ Suites: bookworm Components: main non-free-firmware contrib non-free     Types: deb deb-src URIs: http://security.debian.org/debian-security/ Suites: bookworm-security Components: main non-free-firmware contrib non-free     Key points of the source list are followings. * One-line-style format + It's definition files are in the "/etc/apt/sources.list" file and "/etc/apt/sources.list.d/*.list" files. + Each line defines the data source for the APT system. + A linha "deb" define os pacotes binários. + A linha "deb-src" define os pacotes fonte. + O 1º argumento é o URL raiz do arquivo Debian. + The 2nd argument is the distribution name using either the suite name or the codename. + O 3º argumento e seguintes são a lista de nomes de área de arquivo válidos do arquivo Debian.     * Deb822-style format + It's definition files are in "/etc/apt/sources.list.d/ *.source" files. + Each block of lines separated by a blank line defines the data source for the APT system. + The "Types:" stanza defines the list of types such as "deb" and "deb-src". + The "URIs:" stanza defines the list of root URIs of the Debian archive. + The "Suites:" stanza defines the list of distribution names using either the suite name or the codename. + The "Components:" stanza defines the list of valid archive area names of the Debian archive. The definition for "deb-src" can safely be omitted if it is just     for aptitude which does not access source related meta data. It speeds up the updates of the archive meta data.     The URL can be "https://", "http://", "ftp://", "file://", ….     Lines starting with "#" are comments and ignored. Here, I tend to use codename "bookworm" or "trixie" instead of     suite name "stable" or "testing" to avoid surprises when the next stable is released. Dica If "sid" is used in the above example instead of "bookworm", the     "deb: http://security.debian.org/ …" line or its deb822 equivalent content for security updates in the source list is not required. This is because there is no security update archive for "sid" (unstable). Here is the list of URL of the Debian archive sites and suite     name or codename used in the configuration file after the bookworm release. Tabela 2.2. Lista de sites de arquivos Debian +---------------------------------------------------------------------------------------------+ | URL do arquivo | suite name | codename | purpose of repository | |-------------------+-----------------------+-------------------------+-----------------------| |http:// | | |Quasi-static stable | |deb.debian.org/ |stable |bookworm |release after extensive| |debian/ | | |checks | |-------------------+-----------------------+-------------------------+-----------------------| |http:// | | |Dynamic testing release| |deb.debian.org/ |testing |trixie |after decent checks and| |debian/ | | |short waits | |-------------------+-----------------------+-------------------------+-----------------------| |http:// | | |Dynamic unstable | |deb.debian.org/ |unstable |sid |release after minimal | |debian/ | | |checks and no waits | |-------------------+-----------------------+-------------------------+-----------------------| |http:// | | |Pre-release experiments| |deb.debian.org/ |experimental |N/D |by developers | |debian/ | | |(optional, only for | | | | |developer) | |-------------------+-----------------------+-------------------------+-----------------------| |http:// | | |Updates for the next |     |deb.debian.org/ |stable-proposed-updates|bookworm-proposed-updates|stable point release | |debian/ | | |(optional) | |-------------------+-----------------------+-------------------------+-----------------------| | | | |Subset of | |http:// | | |stable-proposed-updates| |deb.debian.org/ |stable-updates |bookworm-updates |suite needing urgent | |debian/ | | |updates such as | | | | |timezone data | | | | |(optional) | |-------------------+-----------------------+-------------------------+-----------------------| |http:// | | |Random collection of | |deb.debian.org/ |stable-backports |bookworm-backports |recompiled packages | |debian/ | | |mostly from the testing| | | | |release (optional) | |-------------------+-----------------------+-------------------------+-----------------------| |http:// | | |Security updates for | |security.debian.org|stable-security |bookworm-security |the stable release | |/debian-security/ | | |(important) | |-------------------+-----------------------+-------------------------+-----------------------| |http:// | | |This isn't actively | |security.debian.org|testing-security |trixie-security |supported nor used by | |/debian-security/ | | |the security team | +---------------------------------------------------------------------------------------------+ Cuidado Only pure stable release with security updates provides the best stability. Running mostly stable release mixed with some packages     from testing or unstable release is riskier than running pure unstable release for library version mismatch etc. If you really need the latest version of some programs under stable release, please use packages from stable-updates and backports (see Secção 2.7.4, “atualizações e Backports”) services. These services must be used with extra care. Cuidado Basicamente deve listar apenas uma das suites stable, testing, ou unstable na linha "deb". Se listar qualquer combinação das suites     stable, testing e unstable na linha "deb", os programas do APT abrandam enquanto apenas o arquivo mais recente é efectivo. Faz sentido várias listagens quando o ficheiro "/etc/apt/preferences" é utilizado com objetivos claros (veja Secção 2.7.7, “Tweaking candidate version with apt-pinning”). Dica     For the Debian system with the stable suite, it is a good idea to include the content with "http://security.debian.org/" in the source list to enable security updates as in the example above. Nota The security bugs for the stable archive are fixed by the Debian security team. This activity has been quite rigorous and reliable. Those for the testing archive may be fixed by the Debian testing security team. For several reasons, this activity     is not as rigorous as that for stable and you may need to wait for the migration of fixed unstable packages to the testing archive. Those for the unstable archive are fixed by the individual maintainer. Actively maintained unstable packages are usually in a fairly good shape by leveraging latest upstream security fixes. See Debian security FAQ for how Debian handles security bugs. Tabela 2.3. Lista de área de arquivo Debian +---------------------------------------------------------------+ | área |quantidade| critério do componente do pacote | | |de pacotes| | |-----------------+----------+----------------------------------| |main |72806 |em conformidade com DFSG e nenhuma| | | |dependência a non-free | |-----------------+----------+----------------------------------|     | | |not DFSG compliant, firmware | |non-free-firmware|39 |required for reasonable system | | | |installation experience | |-----------------+----------+----------------------------------| |contrib |356 |em conformidade com DFSG mas com | | | |dependências a non-free | |-----------------+----------+----------------------------------| |non-free |964 |not DFSG compliant and not in | | | |non-free-firmware | +---------------------------------------------------------------+ Aqui a quantidade de pacotes em cima é para a arquitectura amd64.     A área main disponibiliza o sistema Debian (veja Secção 2.1.6, “Debian é 100% software livre”). A organização do arquivo Debian pode ser melhor estudada ao     apontar o seu navegador a cada URL de arquivo seguido de dists ou pool. A distribuição é referida de duas maneiras, a suite ou o     nome-de-código. A palavra distribuição é usada alternativamente como o sinónimo de suite em muitas documentações. A relação entre a suite e o nome de código pode ser resumida ao seguinte. Tabela 2.4. A relação entre suite e nome de código +---------------------------------------------------------------+ | Tempo | suite = stable |suite = testing| suite = | | | | | unstable | |----------------+----------------+---------------+-------------| |após o |nome de código =|nome de código |nome de |     |lançamento |bookworm |= trixie |código = sid | |bookworm | | | | |----------------+----------------+---------------+-------------| |após o |nome de código =|nome de código |nome de | |lançamento |trixie |= forky |código = sid | |trixie | | | | +---------------------------------------------------------------+     A história dos nomes de código está descrita em Debian FAQ: 6.2.1 Que outros nomes de código foram usados no passado? Na terminologia estrita do arquivo Debian, a palavra "secção" é utilizada especialmente para categorizar os pacotes pela área de     aplicação. (Apesar da palavra "secção main" poder por vezes ser utilizada para descrever a área do arquivo Debian com o nome "main".) Cada vez que é feito um novo upload por um programador de Debian (DD) para o arquivo unstable (por processamento do incoming), é     necessário que o DD assegure que os pacotes enviados sejam compatíveis com o conjunto de pacotes mais recente no arquivo unstable mais recente. Se o DD quebrar esta compatibilidade intencionalmente para uma     atualização importante de biblioteca ou etc., geralmente existe um anúncio na lista de email debian-devel etc. Before a set of packages are moved by the Debian archive maintenance script from the unstable archive to the testing archive, the archive maintenance script not only checks the     maturity (about 2-10 days old) and the status of the RC bug reports for the packages but also tries to ensure them to be compatible with the latest set of packages in the testing archive. This process makes the testing archive very current and usable. Através do processo de congelamento gradual do arquivo liderado pela equipa de lançamento, o arquivo testing é amadurecido para o tornar completamente consistente e livre de bugs com algumas     intervenções manuais. Então o novo lançamento stable é criado ao atribuir o nome de código do antigo arquivo testing ao novo arquivo stable e a criar um novo nome de código para o novo arquivo testing. O conteúdo inicial do novo arquivo testing é exatamente o mesmo que o arquivo stable recentemente lançado.     Ambos os arquivos unstable e testing podem sofrer falhas temporárias devido a vários fatores: * Envio de pacotes danificados ao arquivo (maioritariamente para unstable) * Atraso de aceitação dos novos pacotes no arquivo (maioritariamente para unstable)     * Problemas com o tempo de sincronização do arquivo (tanto para testing como unstable) * Intervenção manual no arquivo, tal como remoção de pacotes (mais para testing) etc.     Se alguma vez decidir utilizar estes arquivos, deverá ser capaz de corrigir ou contornar este tipo de problemas. Cuidado For about few months after a new stable release, most desktop users should use the stable archive with its security updates even if they usually use unstable or testing archives. For this transition period, both unstable and testing archives are not     good for most people. Your system is difficult to keep in good working condition with the unstable archive since it suffers surges of major upgrades for core packages. The testing archive is not useful either since it contains mostly the same content as the stable archive without its security support (Debian testing-security-announce 2008-12). After a month or so, unstable or testing archives may become useful if you are careful. Dica     Quando se acompanha o arquivo testing, um problema causado por um pacote removido é geralmente contornado ao instalar o pacote correspondente do arquivo unstable que foi lançado para correcção de bug.     Veja Manual de Políticas Debian para as definições do arquivo. * "Secções" * "Prioridades"     * "Sistema base" * "Pacotes essenciais" 2.1.6. Debian é 100% software livre     Debian é 100% software livre por causa do seguinte: * Por predefinição, Debian instala apenas software livre para respeitar as liberdades dos utilizadores. * Debian disponibiliza apenas software livre no main.     * Debian recomenda correr apenas software livre do main. * No packages in main depend nor recommend packages in non-free nor non-free-firmware nor contrib.     Algumas pessoas pensam se os 2 seguintes factos se contradizem ou não. * "Debian irá manter-se 100% livre". (Primeiro termo do Debian Social Contract)     * Debian servers host some non-free-firmware, non-free and contrib packages.     Estes não se contradizem, devido ao seguinte. * O sistema Debian é 100% livre e os seus pacotes estão alojados em servidores Debian na área main.     * Packages outside of the Debian system are hosted by Debian servers in the non-free, non-free-firmware and contrib areas.     Isto é perfeitamente explicado nos termos 4º e 5º do Debian Social Contract: * As nossas prioridades são os nossos utilizadores e o software livre + Seremos guiados pelas necessidades dos nossos utilizadores e da comunidade de software livre. Iremos pôr o interesse deles no topo das nossas prioridades. Iremos suportar as necessidades dos nossos utilizadores para operação em muitos ambientes de computação distintos. Não nos oporemos a software não-livre que se destine a ser utilizado em sistemas Debian, nem tentaremos cobrar qualquer taxa a pessoas que criem ou utilizem tais trabalhos. Iremos permitir que terceiros criem distribuições a conter o sistema Debian com outros trabalhos, sem qualquer taxa para nós. Para apoio destes objetivos, iremos disponibilizar um sistema integrado de materiais de alta qualidade sem restrições legais que previnam tais utilizações do sistema.     * Trabalhos que não coincidem com os nossos standards de software livre + We acknowledge that some of our users require the use of works that do not conform to the Debian Free Software Guidelines. We have created "non-free", "non-free-firmware" and "contrib" areas in our archive for these works. The packages in these areas are not part of the Debian system, although they have been configured for use with Debian. We encourage CD manufacturers to read the licenses of the packages in these areas and determine if they can distribute the packages on their CDs. Thus, although non-free works are not a part of Debian, we support their use and provide infrastructure for non-free packages (such as our bug tracking system and mailing lists). The Debian official media may include firmware that is otherwise not part of the Debian system to enable use of Debian with hardware that requires such firmware. Nota The actual text of the 5th term in the current Debian Social     Contract 1.2 is slightly different from the above text. This editorial deviation is intentional one to make this user document consistent without changing the real content of the Social Contract.     Users should be aware of the risks of using packages in the non-free, non-free-firmware and contrib areas: * falta de liberdade para tais pacotes de software * falta de suporte Debian em tais pacotes de software (Debian     não pode suportar devidamente software sem ter acesso ao seu código-fonte.) * contaminação do seu sistema Debian 100% livre As Debian Free Software Guidelines são os standards de software livre para Debian. Debian interpreta "software" no âmbito mais     amplo incluindo documentação, firmware, logo e dados artísticos no pacote. Isto torna os standards de software livre de Debian muito rigorosos.     Typical non-free, non-free-firmware and contrib packages include freely distributable packages of following types: * Pacotes de documentação sob a GNU Free Documentation License com secções invariantes tais como as do GCC e do Make. (a maioria encontra-se na secção non-free/doc.) * Firmware packages containing sourceless binary data such as     ones listed in Secção 9.10.5, “Controladores de hardware e firmware” as non-free-firmware. (mostly found in the non-free-firmware/kernel section.) * Pacotes de fontes e jogos com restrições comerciais de utilização e/ou modificação de conteúdo. Please note that the number of non-free, non-free-firmware and contrib packages is less than 2% of that of main packages. Enabling access to the non-free, non-free-firmware and contrib     areas does not obscure the source of packages. Interactive full screen use of aptitude(8) provides you with full visibility and control over what packages are installed from which area to keep your system as free as you wish. 2.1.7. Dependências de pacote O sistema Debian oferece um conjunto consistente de pacotes     binários através do mecanismo de declaração de dependências binárias dele com versões nos campos do ficheiro de controle. Aqui está uma definição deles um pouco simplificada: * "Depends" + Isto declara uma dependência absoluta e todos os pacotes listados neste campo têm de ser instalados ao mesmo tempo ou com antecedência. * "Pre-Depends" + Isto é como o Depends, excepto que requer a instalação completa de todos os pacotes listados com antecedência. * "Recommends" + Isto declara uma dependência forte mas não absoluta. A maioria dos utilizadores não iriam querer o pacote a menos que todos os pacotes listados neste campo estejam instalados. * "Suggests" + Isto declara uma dependência fraca. Muitos utilizadores deste pacote podem beneficiar ao instalar os pacotes listados neste campo mas podem ter as funções razoáveis sem eles.     * "Enhances" + This declares a weak dependency like Suggests but works in the opposite direction. * "Breaks" + Isto declara uma incompatibilidade do pacote normalmente com alguma especificação de versão. Geralmente a resolução é atualizar todos os pacotes listados neste campo. * "Conflicts" + Isto declara uma incompatibilidade absoluta. Todos os pacotes listados neste campo têm de ser removidos para instalar este pacote. * "Replaces" + Isto é declarado quando os ficheiros instalados por este pacote substituem ficheiros nos pacotes listados. * "Provides" + Isto é declarado quando este pacote disponibiliza todos os ficheiros e funcionalidades dos pacotes listados. Nota     Por favor note que definir "Provides", "Conflicts" e "Replaces" em simultâneo a um pacote virtual é a configuração sã. Isto assegura que apenas um pacote real que disponibilize este pacote virtual possa ser instalado de cada vez. A definição oficial incluindo dependências de fonte encontra-se     em O Manual de Políticas: Capítulo 7 - Declarar relações entre pacotes. 2.1.8. O fluxo de eventos da gestão de pacotes     Aqui está um resumo do fluxo de eventos simplificado da gestão de pacotes pelo APT. * Update ("apt update", "aptitude update" ou "apt-get update"): 1. Obtém meta-dados do arquivo a partir do arquivo remoto 2. Re-constrói e atualiza os meta-dados locais para utilização do APT * Upgrade ("apt upgrade" e "apt full-upgrade", ou "aptitude safe-upgrade" e "aptitude full-upgrade", ou "apt-get upgrade" e "apt-get dist-upgrade"): 1. Choose candidate version which is usually the latest available version for all installed packages (see Secção 2.7.7, “Tweaking candidate version with apt-pinning” for exception) 2. Resolve a dependência do pacote 3. Obtém os pacotes binários selecionados do arquivo remoto se a versão candidata diferir da versão instalada 4. Desempacota os pacotes binários obtidos 5. Corre o script preinst 6. Instala os ficheiros binários 7. Corre o script postinst * Instalar ("apt install …", aptitude install …" ou "apt-get install …"): 1. Choose packages listed on the command line 2. Resolve a dependência do pacote     3. Obtém os pacotes binários selecionados a partir do arquivo remoto 4. Desempacota os pacotes binários obtidos 5. Corre o script preinst 6. Instala os ficheiros binários 7. Corre o script postinst * Remover ("apt remove …", "aptitude remove …" ou "apt-get remove …"): 1. Choose packages listed on the command line 2. Resolve a dependência do pacote 3. Corre o script prerm 4. Remove os ficheiros instalados excepto os ficheiros de configuração 5. Corre o script postrm * Purgar ("apt purge", "aptitude purge …" ou "apt-get purge …"): 1. Choose packages listed on the command line 2. Resolve a dependência do pacote 3. Corre o script prerm 4. Remove os ficheiros instalados incluindo os ficheiros de configuração 5. Corre o script postrm     Aqui, saltei intencionalmente detalhes técnicos por causa da visão geral. 2.1.9. Primeira resposta a problemas com a gestão de pacotes Deve ler a boa documentação oficial. O primeiro documento a ler é específico de Debian "/usr/share/doc/package_name/README.Debian".     Também deve ser consultada outra documentação em "/usr/share/doc/ package_name/". Se definir a shell como Secção 1.4.2, “Personalizar bash”, escreva o seguinte. $ cd package_name     $ pager README.Debian $ mc     Pode necessitar instalar o pacote de documentação correspondente, com o sufixo "-doc" no nome, para informações mais detalhadas. Se estiver a ter problemas com um pacote específico,     certifique-se que verifica primeiro o Sistema de acompanhamento de bugs Debian (BTS). Tabela 2.5. Lista de sites web chave para resolver problemas com um pacote específico +---------------------------------------------------------------+ | site web | comando | |---------------------------------+-----------------------------| |Página inicial do Sistema de |sensible-browser "https:// | |acompanhamento de bugs Debian |bugs.debian.org/" | |(BTS) | |     |---------------------------------+-----------------------------| |O relatório de bug de um nome de |sensible-browser "https:// | |pacote conhecido |bugs.debian.org/ | | |nome_do_pacote" | |---------------------------------+-----------------------------| |O relatório de bug de uma |sensible-browser "https:// | |quantidade de bugs conhecida |bugs.debian.org/número_do_bug| | |" | +---------------------------------------------------------------+ Procure no Google com palavras de busca incluindo     "site:debian.org", "site:wiki.debian.org", "site:lists.debian.org", etc.     Quando criar um relatório de bug, por favor use o comando reportbug(1). 2.1.10. Como escolher os pacotes Debian Quando encontrar mais de 2 pacotes semelhantes e não sabe qual     deles instalar sem o esforço de "teste e erro", deve utilizar algum senso comum. Considero os seguintes pontos como boas indicações dos pacotes preferidos: * Essencial: sim > não * Area: main > contrib > non-free * Prioridade: required > important > standard > optional > extra * Tasks: pacotes listados em tarefas como "Ambiente de Trabalho" * Packages selected by the dependency package (e.g., gcc-10 by gcc)     * Popcon: mais alto na votação e número de instalações * Changelog: atualizações regulares feitas pelo responsável do pacote * BTS: Nenhum bug RC (nenhum crítico, nenhum grave e nenhum bug sério) * BTS: manutenção responsável dos relatórios de bugs * BTS: maior quantidade de bugs corrigidos recentemente * BTS: menor quantidade de bugs "não-lista-de-desejos" remanescentes O Debian, que é um projecto voluntário com modelo de     desenvolvimento distribuído, o arquivo dele contém muitos pacotes com diferentes objetivos e qualidade. Tem de tomar as suas próprias decisões sobre o que fazer com eles. 2.1.11. How to cope with conflicting requirements Whatever suite of Debian system you may decide to use, you may still wish to run versions of programs which aren't available in     that suite. Even if you find binary packages of such programs in other Debian suites or in other non-Debian resources, their requirements may conflict with your current Debian system. Although you can tweak package management system with apt-pinning technique etc. as described in Secção 2.7.7, “Tweaking candidate     version with apt-pinning” to instal such out-of-sync binary packages, such tweaking approaches have only limited use cases since they may break those programs and your system. Before brutally installing such out-of-sync packages, you should     seek all available alternative safer technical solutions which are compatible with your current Debian syetem. * Install such programs using corresponding sandboxed upstream binary packages (see Secção 7.7, “Sandbox”). + Many mostly GUI programs such as LibreOffice and GNOME applications are available as Flatpak, Snap, or AppImage packages. * Create a chroot or similar environment and run such programs in it (see Secção 9.11, “Sistema virtualizado”).     + CLI commands can be executed easily under its compatible chroot (see Secção 9.11.4, “Sistema chroot”). + Multiple full desktop environments can be tried easily without reboot (see Secção 9.11.5, “Sistemas de vários ambientes de trabalho”). * Build desired versions of binary packages which are compatible with your current Debian syetem by yourself. + This is a non-trivial task (see Secção 2.7.13, “Portar um pacote ao sistema stable”). 2.2. Operações básicas de gestão de pacotes As operações de gestão de pacotes baseadas em repositório no sistema Debian podem ser executas por muitas ferramentas de     gestão de pacotes baseadas no APT e disponíveis no sistema Debian. Aqui vamos explicar 3 ferramentas de gestão básica de pacotes: apt, apt-get / apt-cache e aptitude. Para as operações de gestão de pacotes que envolvam a instalação     ou atualização de meta-dados do pacote, necessita de ter privilégios de root. 2.2.1. apt vs. apt-get / apt-cache contra o aptitude Apesar do aptitude ser uma ferramenta interactiva muito boa a     qual o autor usa principalmente, deve ser advertido de alguns factos: * O comando aptitude não é recomendado para a atualização de sistema de lançamento-a-lançamento do sistema Debian stable após um novo lançamento. + O uso de "apt full-upgrade" ou "apt-get dist-upgrade" é recomendado para isso. Veja Bug #411280. * O comando aptitude por vezes sugere a remoção em massa de pacotes para a atualização do sistema no sistema Debian testing ou unstable.     + Esta situação já assustou muitos administradores de sistemas. Não entre em pânico. + Isto parece ser causado principalmente pela torção de versões entre os pacotes que são dependências ou recomendações de um meta-pacote tal como o gnome-core. + Isto pode ser resolvido ao selecionar "Cancelar operações pendentes" no menu de comandos do aptitude, a terminar o aptitude e a usar "apt full-upgrade".     Os comandos apt-get e apt-cache são as ferramentas de gestão de pacotes baseadas no APT mais básicas. * O apt-get e o apt-cache oferecem apenas a interface de linha de comandos. * O apt-get é mais apropriado para uma atualização maior ao sistema entre lançamentos, etc. * O apt-get oferece um resolvedor de dependências de pacotes robusto.     * apt-get é menos exigente em recursos de hardware. Consome menos memória e é mais rápido. * O apt-cache oferece uma busca baseada em expressões regulares standard no nome do pacote e na descrição. * O apt-get e o apt-cache podem gerir várias versões de pacotes a utilizar o /etc/apt/preferences mas é um pouco incómodo. O comando apt é uma interface de linha de comandos de alto nível para gestão de pacotes. É basicamente um invólucro dos apt-get,     apt-cache e comandos semelhantes, originalmente destinada a ser uma interface de utilizador final e ativa por predefinição algumas opções melhor apropriadas para utilização interativa. * O apt disponibiliza uma barra de progresso amigável quando se instala pacotes a usar o apt install.     * O apt irá remover por predefinição os pacotes .deb em cache após instalação com sucesso dos pacotes descarregados. Dica     É recomendado aos utilizadores usarem o novo comando apt(8) para uso interativo e usarem os comandos apt-get(8) e apt-cache(8) em script de shell.     O comando aptitude é a ferramenta de gestão de pacotes baseada no APT mais versátil. * O aptitude oferece a interface de utilizador de texto interactiva de ecrã completo. * O aptitude também oferece uma interface de utilizador de linha de comandos. * O aptitude é mais apropriado para a gestão de pacotes interactiva diária como inspecionar os pacotes instalados e     procurar pacotes disponíveis. * O aptitude é mais exigente em recursos de hardware. Consome mais memória e é mais lento. * O aptitude oferece um busca baseada em expressões regulares avançada em todos os meta-dados dos pacotes. * O aptitude pode gerir várias versões de pacotes sem utilizar o /etc/apt/preferences e é bastante intuitivo. 2.2.2. Operações básicas de gestão de pacotes com a linha de comandos Aqui estão algumas operações básicas de gestão de pacotes com a     linha de comandos a usar apt(8), aptitude(8) e apt-get(8) / apt-cache(8). Tabela 2.6. Operações básicas de gestão de pacotes com a linha de comandos a utilizar apt(8), aptitude(8) e apt-get(8) /apt-cache (8) +---------------------------------------------------------------+ | | sintaxe do | sintaxe do | | | sintaxe do apt | aptitude | apt-get/ | descrição | | | | apt-cache | | |------------------+------------+------------+------------------| | |aptitude |apt-get |atualiza os | |apt update |update |update |meta-dados do | | | | |arquivo de pacotes| |------------------+------------+------------+------------------| | | | |instala a versão | | |aptitude |apt-get |candidata do | |apt install foo |install foo |install foo |pacote "foo" com | | | | |as suas | | | | |dependências | |------------------+------------+------------+------------------| | | | |instala as versões| | | | |candidatas dos | |apt upgrade |aptitude |apt-get |pacotes instalados| | |safe-upgrade|upgrade |sem remover | | | | |quaisquer outros | | | | |pacotes | |------------------+------------+------------+------------------| | | | |instala as versões| | | | |candidatas dos | |apt full-upgrade |aptitude |apt-get |pacotes instalados| | |full-upgrade|dist-upgrade|a remover outros | | | | |pacotes caso | | | | |necessário | |------------------+------------+------------+------------------| | | | |remove o pacote | |apt remove foo |aptitude |apt-get |"foo" a deixar os | | |remove foo |remove foo |seus ficheiros de | | | | |configuração | |------------------+------------+------------+------------------| | | | |remove os pacotes | |apt autoremove |N/D |apt-get |auto-instalados | | | |autoremove |que já não sejam | | | | |necessários | |------------------+------------+------------+------------------|     | | | |purga o pacote | |apt purge foo |aptitude |apt-get |"foo" com os seus | | |purge foo |purge foo |ficheiros de | | | | |configuração | |------------------+------------+------------+------------------| | | | |limpa | | |aptitude |apt-get |completamente o | |apt clean |clean |clean |repositório local | | | | |de ficheiros de | | | | |pacotes obtidos | |------------------+------------+------------+------------------| | | | |limpa os pacotes | | |aptitude |apt-get |desatualizados do | |apt autoclean |autoclean |autoclean |repositório local | | | | |dos ficheiros de | | | | |pacotes recebidos | |------------------+------------+------------+------------------| | |aptitude |apt-cache |mostra informação | |apt show foo |show foo |show foo |detalhada acerca | | | | |do pacote "foo" | |------------------+------------+------------+------------------| | |aptitude |apt-cache |procura pacotes | |apt search regex |search regex|search regex|que correspondem à| | | | |expressão-regular | |------------------+------------+------------+------------------| | | | |explica a razão | | | | |porque o pacotes | |N/D |aptitude why|N/D |que correspondem à| | |regex | |expressão_regular | | | | |devem ser | | | | |instalados | |------------------+------------+------------+------------------| | | | |explica a razão | | |aptitude | |porque o pacotes | |N/D |why-not |N/D |que correspondem à| | |regex | |expressão_regular | | | | |não podem ser | | | | |instalados | |------------------+------------+------------+------------------| |apt list |aptitude |apt-mark |lista os pacotes | |--manual-installed|search '~i! |showmanual |instalados | | |~M' | |manualmente | +---------------------------------------------------------------+     apt / apt-get and aptitude can be mixed without major troubles. O "aptitude why expressão_regular" pode listar mais informação     por "aptitude -v why expressão_regular". Informação semelhante pode ser obtida por apt rdepends pacote" ou "apt-cache rdepends pacote". Quando o comando aptitude é arrancado em modo de linha de     comandos e enfrenta alguns problemas como conflitos de pacotes, pode mudar para modo interativo em ecrã total, ao pressionar a tecla "e", mais tarde na linha de comandos. Nota Apesar do comando aptitude vir com ricas funcionalidades como o     resolvedor avançado de pacotes dele, esta complexidade já causou (ou pode ainda causar) algumas regressões como os Bug #411123, Bug #514930 e Bug #570377. Em caso de dúvidas, por favor utilize os comandos apt, apt-get e apt-cache em vez do comando aptitude.     Pode dar opções de comando logo após "aptitude". Tabela 2.7. Opções de comando notáveis para o aptitude(8) +---------------------------------------------------------------+ | opção de | descrição | | comando | | |------------+--------------------------------------------------|     |-s |simula o resultado do comando | |------------+--------------------------------------------------| |-d |apenas descarrega e não instala/atualiza | |------------+--------------------------------------------------| |-D |mostra breves explicações antes das instalações e | | |remoções automáticas | +---------------------------------------------------------------+     Para mais veja aptitude(8) e o "Manual de utilizador do aptitude" em "/usr/share/doc/aptitude/README". 2.2.3. Uso interativo do aptitude Para gestão de pacotes interativa, arranque o aptitude em modo     interativo a partir da linha de comandos da consola conforme o seguinte:     $ sudo aptitude -u Password: Isto atualiza a cópia local da informação do arquivo e mostra a     lista de pacotes em ecrã completo com menu. O aptitude coloca a configuração dele em "~/.aptitude/config". Dica     Se desejar utilizar a configuração do root em vez da do utilizador, utilize "sudo -H aptitude …" em vez de "sudo aptitude …" na expressão acima. Dica     O aptitude define automaticamente as acções pendentes como se fosse arrancado interativamente. Se não gostar disso, pode redefinir isto a partir do menu: "Acção" → "Cancelar acções pendentes". 2.2.4. Teclas de atalho do aptitude As combinações de teclas notáveis para explorar o estado dos     pacotes e definir uma "ação planeada" neles neste modo de ecrã total são as seguintes: Tabela 2.8. Lista de teclas de atalho do aptitude +---------------------------------------------------------------+ | tecla | tecla de atalho | |---------------------+-----------------------------------------| |F10 ou Ctrl-t |menu | |---------------------+-----------------------------------------| |? |mostra a ajuda para teclas (listagem mais| | |completa) | |---------------------+-----------------------------------------| |F10 → Ajuda → Manual |mostra o Manual do Utilizador | |do Utilizador | | |---------------------+-----------------------------------------| |u |atualiza a informação de arquivo do | | |pacote | |---------------------+-----------------------------------------| |+ |marca o pacote para atualização ou | | |instalação | |---------------------+-----------------------------------------| |- |marca o pacote para remoção (manter os | | |ficheiros de configuração) | |---------------------+-----------------------------------------| |_ |marca o pacote para purgar (remover | | |ficheiros de configuração) |     |---------------------+-----------------------------------------| |= |coloca o pacote em retenção (hold) | |---------------------+-----------------------------------------| |U |marca todos os pacotes com atualizações | | |(funciona como full-upgrade) | |---------------------+-----------------------------------------| |g |começa a descarregar e a instalar os | | |pacotes selecionados | |---------------------+-----------------------------------------| |q |sai do ecrã atual e guarda as alterações | |---------------------+-----------------------------------------| |x |sai do ecrã atual e descarta as | | |alterações | |---------------------+-----------------------------------------| |Enter |ver informação acerca de um pacote | |---------------------+-----------------------------------------| |C |ver o relatório de alterações de um | | |pacote | |---------------------+-----------------------------------------| |l |altera o limite dos pacotes mostrados | |---------------------+-----------------------------------------| |/ |procura pela primeira correspondência | |---------------------+-----------------------------------------| |\ |repetir a última pesquisa | +---------------------------------------------------------------+ The file name specification of the command line and the menu prompt after pressing "l" and "//" take the aptitude regex as     described below. Aptitude regex can explicitly match a package name using a string started by "~n" and followed by the package name. Dica Necessita pressionar "U", no interface visual, para ter todos os     pacotes instalados atualizados para a versão candidata. Caso contrário, apenas os pacotes selecionados e certos pacotes com dependências deles, versionadas, são atualizados à versão candidata. 2.2.5. Vistas de pacote no aptitude     No modo de ecrã completo interativo do aptitude(8), os pacotes na lista de pacotes são mostrados como no próximo exemplo.     idA libsmbclient -2220kB 3.0.25a-1 3.0.25a-2     Aqui, esta linha significa desde a esquerda o seguinte: * A flag "estado atual" (a primeira letra) * A flag "acção planeada" (a segunda letra) * A flag "automático" ( a terceira letra)     * O nome do Pacote * A alteração na utilização do espaço do disco atribuída a "acção planeada" * A versão atual do pacote * A versão candidata do pacote Dica     A lista completa de flags é fornecida ao fundo do ecrã de Ajuda mostrada ao pressionar "?". A versão candidata é escolhida de acordo com as preferências     locais atuais (veja apt_preferences(5) e Secção 2.7.7, “Tweaking candidate version with apt-pinning”).     Estão disponíveis vários tipos de vistas de pacotes sob o menu "Vistas". Tabela 2.9. Lista de vistas para o aptitude +---------------------------------------------------------------+ | vista | descrição da vista | |--------------+------------------------------------------------| |Vista de |veja Tabela 2.10, “A categorização das vista de | |Pacote |pacotes standard” (predefinição) | |--------------+------------------------------------------------| |Recomendações |lista pacotes que são recomendados por alguns | |de Auditoria |pacotes instalados mas ainda não estão |     | |instalados | |--------------+------------------------------------------------| |Lista de |lista pacotes sem categorização (para utilizar | |Pacotes Lisa |com expressões regulares) | |--------------+------------------------------------------------| |Explorador de |lista pacotes categorizados de acordo com as | |Debtags |suas entradas debtags | |--------------+------------------------------------------------| |Source Package|list packages grouped by source packages | |View | | +---------------------------------------------------------------+ Nota     Por favor ajude-nos a melhorar a etiquetagem de pacotes com debtags!     A "Vista de Pacotes standard categoriza os pacotes de certo modo como o dselect com algumas funcionalidades extra. Tabela 2.10. A categorização das vista de pacotes standard +---------------------------------------------------------------+ | categoria | descrição da vista | |---------------------+-----------------------------------------| |Pacotes atualizáveis |lista pacotes organizados como secção → | | |área → pacote | |---------------------+-----------------------------------------| |Pacotes Novos |, , | |---------------------+-----------------------------------------| |Pacotes Instalados |, , |     |---------------------+-----------------------------------------| |Pacotes Não |, , | |Instalados | | |---------------------+-----------------------------------------| |Pacotes Obsoletos ou |, , | |Criados Localmente | | |---------------------+-----------------------------------------| |Pacotes Virtuais |lista pacotes com a mesma função | |---------------------+-----------------------------------------| |Tarefas |lista pacotes com diferentes funções | | |geralmente necessárias para uma tarefa | +---------------------------------------------------------------+ Dica     A vista Tarefas pode ser usada para escolher pacotes para a sua tarefa. 2.2.6. Opções do método de pesquisa com o aptitude     O aptitude oferece várias opções para procurar pacotes a utilizar a fórmula de expressões regulares dele. * Linha de comandos da shell: + "aptitude search 'aptitude_regex'" para listar estado de instalação, nome do pacote e descrição curta dos pacotes correspondentes + "aptitude show 'package_name'" para listar a descrição detalhada do pacote * modo de ecrã total interativo:     + "l" para limitar a vista de pacotes aos pacotes correspondentes + "/" para procurar um pacote correspondente + "\" para procurar um pacote correspondente a voltar para trás + "n" para procurar o próximo + "N" para procurar o próximo (a andar para trás) Dica     A cadeia para nome_de_pacote é tratada como a correspondência exata da cadeia para o nome do pacote a menos que seja iniciada explicitamente com "~" para ser uma fórmula de expressão regular. 2.2.7. A fórmula regex do aptitude A fórmula de expressão regular do aptitude é estendida tipo mutt     ERE (veja Secção 1.6.2, “Expressões regulares”) e o significado das extensões de regras de correspondência especial específicas do aptitude são as seguintes: Tabela 2.11. Lista da fórmula regex do aptitude +----------------------------------------------------------------------+ |descrição da regra | | |de correspondência | fórmula da expressão regular | | extensa | | |-------------------+--------------------------------------------------| |corresponde com o |~nregex_name | |nome do pacote | | |-------------------+--------------------------------------------------| |corresponde com a |~dregex_description | |descrição | | |-------------------+--------------------------------------------------| |corresponde com |~tregex_task | |nome da tarefa | | |-------------------+--------------------------------------------------| |corresponde com |~Gregex_debtag | |debtag | | |-------------------+--------------------------------------------------| |corresponde com o |~mregex_maintainer | |maintainer | | |-------------------+--------------------------------------------------| |corresponde com |~sregex_section | |secção do pacote | | |-------------------+--------------------------------------------------| |corresponde com |~Vregex_version | |versão do pacote | | |-------------------+--------------------------------------------------| |corresponde com |~A{bookworm,trixie,sid} | |arquivo | | |-------------------+--------------------------------------------------| |corresponde com |~O{debian,…} | |origem | | |-------------------+--------------------------------------------------| |prioridade da |~p{extra,important,optional,required,standard} | |correspondência | | |-------------------+--------------------------------------------------| |corresponde com |~E | |pacotes essenciais | | |-------------------+--------------------------------------------------| |corresponde com |~v | |pacotes virtuais | | |-------------------+--------------------------------------------------| |corresponde com |~N | |pacotes novos | | |-------------------+--------------------------------------------------| |corresponde com |~a | |acções pendentes |{install,upgrade,downgrade,remove,purge,hold,keep}| |-------------------+--------------------------------------------------| |corresponde com os |~i | |pacotes instalados | | |-------------------+--------------------------------------------------| |corresponde com | | |pacotes instalados | | |com marca A |~M | |(pacotes instalados| | |automaticamente) | | |-------------------+--------------------------------------------------| |corresponde com | | |pacotes instalados | | |sem a marca A |~i!~M | |(pacotes | | |selecionados pelo | | |administrador) | | |-------------------+--------------------------------------------------| |corresponde com | | |pacotes instalados |~U | |e com atualizações | | |disponíveis | | |-------------------+--------------------------------------------------| |corresponde com | | |pacotes removidos |~c | |mas não purgados | | |-------------------+--------------------------------------------------|     |corresponde com | | |pacotes removidos, |~g | |purgados ou que | | |podem-ser-removidos| | |-------------------+--------------------------------------------------| |corresponde com | | |pacotes que | | |declaram |~b | |dependências | | |quebradas | | |-------------------+--------------------------------------------------| |corresponde com | | |pacotes que | | |declaram |~Btype | |dependências | | |quebradas de type | | |-------------------+--------------------------------------------------| |corresponde a | | |pacotes pattern que|~D[type:]pattern | |declaram | | |dependência de type| | |-------------------+--------------------------------------------------| |corresponde a | | |pacotes pattern que| | |declaram |~DB[type:]pattern | |dependência | | |quebrada de type | | |-------------------+--------------------------------------------------| |corresponde a | | |pacotes para os | | |quais o pacote que |~R[type:]pattern | |corresponde a | | |pattern declara o | | |type de dependência| | |-------------------+--------------------------------------------------| |corresponde a | | |pacotes para os | | |quais o pacote que | | |corresponde a |~RB[type:]pattern | |pattern declara o | | |type de dependência| | |quebrada | | |-------------------+--------------------------------------------------| |corresponde com | | |pacotes com os | | |quais alguns |~R~i | |pacotes instalados | | |dependem | | |-------------------+--------------------------------------------------| |corresponde com | | |pacotes com os | | |quais nenhum outro |!~R~i | |pacote instalado | | |depende | | |-------------------+--------------------------------------------------| |corresponde com | | |pacotes com os | | |quais alguns |~R~i|~Rrecommends:~i | |pacotes instalados | | |dependem ou | | |recomendam | | |-------------------+--------------------------------------------------| |corresponde o | | |pacote pattern com |~S filter pattern | |a versão filtrada | | |-------------------+--------------------------------------------------| |corresponde com | | |todos os pacotes |~T | |(true) | | |-------------------+--------------------------------------------------| |não corresponde com| | |nenhum pacote |~F | |(false) | | +----------------------------------------------------------------------+ * A parte da expressão regular é a mesma ERE que aquela utilizada nas típicas ferramentas de texto tipo-Unix que utilizam "^", ".*", "$" etc. como o egrep(1), awk(1) e perl (1).     * A dependência type é uma de (dependências, pré-dependências, recomendações, sugestões, conflitos, substituições, fornecimentos), que específica o inter-relacionamento do pacote. * O type de dependência predefinida é "depends". Dica     Quando regex_pattern for uma string nula, coloca "~T" imediatamente após o comando.     Aqui estão alguns atalhos. * "~Pterm" == "~Dprovides:term"     * "~Cterm" == "~Dconflicts:term" * "…~W term" == "(…|term)" Os utilizadores familiarizados com o mutt aprendem rápido, pois o     mutt foi a inspiração para a sintaxe de expressão. Veja "PROCURAR, LIMITAR E EXPRESSÕES" no "Manual do Utilizador" "/usr/ share/doc/aptitude/README". Nota Com a versão lenny do aptitude(8), a nova sintaxe de formato longo como a "?broken" pode ser utilizada para correspondência de     expressões regulares no lugar da equivalente antiga dele de formato curto "~b". Agora o caractere de espaço " " é considerado como um caractere terminante de expressão regular em adição ao caractere til "~". Veja o "Manual do Utilizador" para a nova sintaxe de formato longo. 2.2.8. Resolução de dependências do aptitude A seleção de um pacote no aptitude não puxa apenas os pacotes definidos na lista de "Dependências:" dele, mas também os     definidos na lista "Recomendados:" se o menu "F10 → Opções → Preferências → Manuseamento de dependências" assim estiver definido. Estes pacotes auto-instalados são removidos automaticamente sob o aptitude se não forem mais necessários. A flag que controla o comportamento "auto install" co comando     aptitude também pode ser manipulada a usar o comando apt-mark(8) do pacote apt. 2.2.9. Relatórios (logs) de atividade de pacotes     Pode verificar o histórico de atividade de pacotes nos ficheiros log. Tabela 2.12. Os ficheiros log para atividades de pacotes +---------------------------------------------------------------+ | ficheiro | conteúdo | |--------------+------------------------------------------------| |/var/log/ |Log da atividade de nível do dpkg para as | |dpkg.log |atividades de todos os pacotes |     |--------------+------------------------------------------------| |/var/log/apt/ |Log da atividade genérica do APT | |term.log | | |--------------+------------------------------------------------| |/var/log/ |Log da atividade de comandos do aptitude | |aptitude | | +---------------------------------------------------------------+ Na realidade, não é muito fácil obter rapidamente uma compreensão     significativa a partir destes logs. Veja Secção 9.3.9, “Gravar alterações em ficheiros de configuração” para um modo mais fácil. 2.3. Exemplos de operações do aptitude     Aqui estão alguns exemplos de operações do aptitude(8). 2.3.1. Seeking interesting packages Pode procurar os pacotes que satisfaçam as suas necessidades com     o aptitude a partir da descrição do pacote ou a partir da lista "Tarefas". 2.3.2. Listagem de pacotes com correspondência por expressão regular nos nomes de pacotes     O seguinte comando lista pacotes com regex a condizer com nomes de pacotes. $ aptitude search '~n(pam|nss).*ldap'     p libnss-ldap - NSS module for using LDAP as a naming service p libpam-ldap - Pluggable Authentication Module allowing LDAP interfaces     Isto dá muito jeito para encontrar o nome exato de um pacote. 2.3.3. Explorar com a correspondência de expressão regular a expressão regular "~dipv6" na vista "Nova Lista de Pacotes     Simples" com o aviso "l", limita a vista aos pacotes com a descrição correspondente e permite-lhe explorar interativamente a informação deles. 2.3.4. Purgar pacotes removidos definitivamente     Pode purgar todos os restantes ficheiros de configuração dos pacotes removidos.     Verifique os resultados do seguinte comando.     # aptitude search '~c'     Se julgar que os pacotes listados podem ser purgados, execute o seguinte comando:     # aptitude purge '~c'     Pode fazer o mesmo no modo interativo para um controle mais preciso. Fornece a expressão regular "~c" na vista "Nova Vista de Pacotes" com a prompt "l". Isto limita a vista de pacotes apenas aos     pacotes correspondentes à expressão regular, isto é, "removidos mas não purgados". Todos estes pacotes correspondentes a expressões regulares podem ser mostrados ao pressionar "[" nos cabeçalhos de nível de topo. Depois pressione "_" em cabeçalhos de nível de topo tal como "Pacotes Não Instalados". Apenas os pacotes correspondentes à     expressão regular sob o cabeçalho são marcados para serem purgados com isto. Pode excluir alguns pacotes a serem purgados ao pressionar "=" interativamente para cada um deles.     Esta técnica é muito útil e funciona com muitas outras teclas de comando. 2.3.5. Acertar o estado auto/manual de instalação Aqui está como acertar o estado auto/manual de instalação dos     pacotes (após usar um instalador de pacotes sem ser o aptitude e etc.). 1. Arranque o aptitude em modo interativo como root. 2. Escreva "u", "U", "f" e "g" para atualizar a lista de pacotes e atualizar os pacotes. 3. Escreva "l" para inserir o limite de visualização de pacotes aos "~i(~R~i|~Recomendados:~i)" e escreva "M" sobre "Pacotes Instalados" como auto-instalado. 4. Escreva "l" para inserir o limite de visualização de pacotes como "~prequired|~pimportant|~pstandard|~E" e escreva "m" sobre "Pacotes Instalados" como instalados manualmente. 5. Escreva "l" para inserir o limite de visualização de pacotes como "~i!~M" e remover pacotes não utilizados ao escrever "-" sobre cada um deles após expô-los ao escrever "[" sobre "Pacotes Instalados".     6. Escreva "l" para inserir o limite de amostragem de pacotes como "~i" depois escreva "m" sobre "Tasks" para marcar esses pacotes como instalados manualmente. 7. Termina o aptitude. 8. Inicie "apt-get -s autoremove|less" como root para verificar os que não são usados. 9. Reinicie o aptitude em modo interativo e marque os pacotes necessários como "m". 10. Reinicie o "apt-get -s autoremove|less" como root para verificar que o REMOVED contém apenas os pacotes esperados. 11. Arranque "apt-get autoremove|less" como root para auto-remover os pacotes não usados.     A opção "m" sobre "Tasks" é uma opção para prevenir situações de remoção de pacotes em massa no futuro. 2.3.6. atualização total ao sistema Nota Quando mover para um novo lançamento etc, deverá considerar fazer uma instalação limpa do novo sistema mesmo a saber que Debian é atualizável como descrito em baixo. Isto dá-lhe a hipótese de     remover os lixos coleccionados e expõe-lhe a melhor combinação do pacotes mais recentes. É claro que deverá fazer uma cópia de segurança do sistema para um lugar seguro (veja Secção 10.2, “Salvaguarda (backup) e recuperação”) antes de fazer isto. Recomendo fazer uma configuração de duplo arranque a usar partições diferentes para ter a transição mais suave. You can perform system wide upgrade to a newer release by     changing contents of the source list pointing to a new release and running the "apt update; apt dist-upgrade" command. To upgrade from stable to testing or unstable during the     bookworm-as-stable release cycle, you replace "bookworm" in the source list example of Secção 2.1.5, “Básico do arquivos Debian” with "trixie" or "sid". Na realidade, pode enfrentar algumas complicações devido a problemas com a transição de alguns pacotes, na maioria devido a dependências desses pacotes. Quanto maior a diferença da     atualização, maior a probabilidade de ter grandes problemas. Para a transição da stable antiga à nova stable após o lançamento dele, pode ler as novas Notas de Lançamento dele e seguir o procedimento exacto descrito lá para minimizar problemas. Quando decidir mover de stable para testing antes do lançamento formal dele, não existem Notas de Lançamento para o ajudar. A     diferença entre stable e testing pode ter crescido bastante após o lançamento stable anterior e complicar a situação da atualização. Deve dar passos de precaução para a atualização total enquanto     recolhe a informação mais recente da lista de mail e a usar senso comum. 1. Leia as "Notas de Lançamento" anteriores. 2. Faça cópia de segurança a todo o sistema (especialmente dados e informação de configuração). 3. Tenha um meio de arranque à mão para o caso do gestor de arranque ficar danificado. 4. Informe os utilizadores do sistema com bastante antecedência. 5. Grave a atividade de atualização com o script(1). 6. Para prevenir a remoção aplique "unmarkauto" aos pacotes necessários, p.e., "aptitude unmarkauto vim", . 7. Minimize a quantidade de pacotes instalados para reduzir a     hipótese de conflitos de pacotes, p.e., remova os pacotes da tarefas de ambiente de trabalho. 8. Remove the "/etc/apt/preferences" file (disable apt-pinning). 9. Tente a atualização em passos inteligentes: oldstable → stable → testing → unstable. 10. Update the source list to point to new archive only and run "aptitude update". 11. Instale, opcionalmente, os novos pacotes de base primeiro, ex., "aptitude install perl". 12. Corra o comando "apt-get -s dist-upgrade" para avaliar o impacto. 13. Corra o comando "apt-get dist-upgrade" em último lugar. Cuidado     Não é sensato saltar grandes lançamentos de Debian quando se atualiza entre lançamentos stable. Cuidado     Nas "Notas de Lançamento" anteriores, GCC, Linux Kernel, initrd-tools, Glibc, Perl, a cadeia de ferramentas do APT, etc. necessitaram de alguma atenção especial para a atualização geral do sistema.     Para atualizações diárias em unstable, veja Secção 2.4.3, “Salvaguardar para problemas de pacotes”. 2.4. Operações de gestão avançada de pacotes 2.4.1. Operações de gestão avançada de pacotes com linha de comandos Aqui está uma lista de outras operações de gestão de pacotes para     as quais o aptitude é de demasiado alto nível ou faltam-lhe funcionalidades necessárias. Tabela 2.13. Lista de operações de gestão avançada de pacotes +-------------------------------------------------------------------+ | comando | acção | |-------------------------------------------------+-----------------| | |lista o estado de| |COLUMNS=120 dpkg -l padrão_do_nome_de_pacote |um pacote | | |instalado para o | | |relatório de bug | |-------------------------------------------------+-----------------| | |lista o conteúdo | |dpkg -L nome_do_pacote |de um pacote | | |instalado | |-------------------------------------------------+-----------------| |dpkg -L nome_do_pacote | egrep '/usr/share/man/ |lista os manuais | |man.*/.+' |para um pacote | | |instalado | |-------------------------------------------------+-----------------| | |lista os pacotes | |dpkg -S padrão_do_nome_de_ficheiro |instalados que | | |condizem com o | | |nome de ficheiro | |-------------------------------------------------+-----------------| | |lista pacotes no | |apt-file search padrão_do_nome_de_ficheiro |arquivo que | | |condizem com o | | |nome de ficheiro | |-------------------------------------------------+-----------------| | |lista os | | |conteúdos dos | |apt-file list padrão_do_nome_de_pacote |pacotes que | | |correspondem no | | |arquivo | |-------------------------------------------------+-----------------| |dpkg-reconfigure nome_do_pacote |reconfigura o | | |pacote exacto | |-------------------------------------------------+-----------------| | |reconfigura o | |dpkg-reconfigure -plow package_name |pacote exacto com| | |as questões mais | | |detalhadas | |-------------------------------------------------+-----------------| | |reconfigura | |configure-debian |pacotes a partir | | |do menu de ecrã | | |completo | |-------------------------------------------------+-----------------| | |faz auditoria ao | | |sistema por | |dpkg --audit |pacotes | | |parcialmente | | |instalados | |-------------------------------------------------+-----------------| | |configura todos | |dpkg --configure -a |os pacotes | | |parcialmente | | |instalados | |-------------------------------------------------+-----------------| | |mostra a versão | | |disponível, a | |apt-cache policy nome_do_pacote_binário |prioridade e | | |informação de | | |arquivo de um | | |pacote binário | |-------------------------------------------------+-----------------| | |mostra a versão | | |disponível e | |apt-cache madison nome_do_pacote |informação de | | |arquivo de um | | |pacote | |-------------------------------------------------+-----------------| | |mostra informação| |apt-cache showsrc nome_do_pacote_binário |do pacote de | | |código-fonte de | | |um pacote binário| |-------------------------------------------------+-----------------| | |instala os | |apt-get build-dep nome_do_pacote |pacotes | | |necessários para |     | |compilar pacote | |-------------------------------------------------+-----------------| | |instala os | |aptitude build-dep nome_do_pacote |pacotes | | |necessários para | | |compilar pacote | |-------------------------------------------------+-----------------| | |descarrega | |apt-get source nome_do_pacote |código-fonte (do | | |arquivo standard)| |-------------------------------------------------+-----------------| | |descarrega um | |dget URL for dsc file |pacote de | | |código-fonte (de | | |outro arquivo) | |-------------------------------------------------+-----------------| | |constrói uma | | |árvore de | | |código-fonte a | | |partir de um | |dpkg-source -x nome_do_pacote_versão- |conjunto de | |versão_debian.dsc |pacotes de | | |código-fonte | | |("*.orig.tar.gz" | | |e | | |"*.debian.tar.gz"| | |/"*.diff.gz") | |-------------------------------------------------+-----------------| | |compila pacote(s)| |debuild binary |a partir de uma | | |árvore fonte | | |local | |-------------------------------------------------+-----------------| | |compila um pacote| | |de kernel a | |make-kpkg imagem_de_kernel |partir de uma | | |árvore fonte de | | |kernel | |-------------------------------------------------+-----------------| | |compila um pacote| | |de kernel a | |make-kpkg --initrd imagem_de_kernel |partir de uma | | |árvore fonte de | | |kernel com | | |initramfs activa | |-------------------------------------------------+-----------------| |dpkg -i nome_pacote_versão-versão_debian_ |instalar um | |arquitectura.deb |pacote local no | | |sistema | |-------------------------------------------------+-----------------| | |instala um pacote| | |local no sistema,| |apt install /path/to/package_filename.deb |entretanto tenta | | |resolver as | | |dependências | | |automaticamente | |-------------------------------------------------+-----------------| |debi nome_pacote_versão-versão_debian_ |instala pacote(s)| |arquitectura.dsc |locais no sistema| |-------------------------------------------------+-----------------| | |guarda a | | |informação de | |dpkg --get-selections '*' >seleção.txt |estado de seleção| | |a nível de | | |pacotes do dpkg | |-------------------------------------------------+-----------------| | |define a | | |informação de | |dpkg --set-selections /etc/alternatives/vi $ sudo update-alternatives --display vi ... $ sudo update-alternatives --config vi     Selection Command ---------------------------------------------- 1 /usr/bin/vim *+ 2 /usr/bin/nvi Enter to keep the default[*], or type selection number: 1 O sistema de alternativas do Debian mantêm a sua seleção como     ligação simbólica em "/etc/alternatives/". O processo de seleção utiliza um ficheiro correspondente em "/var/lib/dpkg/alternatives /". 2.5.11. O comando dpkg-statoverride Stat overrides disponibilizados pelo comando dpkg-statoverride(8) são um modo de dizer ao dpkg(1) para usar um dono ou modo     diferente para um ficheiro quando um pacote for instalado. Se for especificado "--update" e o ficheiro existir é imediatamente definido para o novo dono e modo. Cuidado     A alteração directa do dono ou modo para um ficheiro cujo dono é o pacote a usar os comandos chmod ou chown pelo administrador do sistema é reiniciada pela próxima atualização do pacote. Nota     Uso a palavra ficheiro aqui, mas na verdade pode ser qualquer objecto de sistema de ficheiros com que o dpkg lide, incluindo diretórios, aparelhos, etc. 2.5.12. O comando dpkg-divert As diversões de ficheiros disponibilizadas pelo comando dpkg-divert(8) são um modo de forçar o dpkg(1) a não instalar um     ficheiro na localização predefinida dele, mas para uma localização divergida. Os uso do dpkg-divert destina-se aos scripts do responsável do pacote. A utilização casual dele pelo administrador do sistema está descontinuada. 2.6. Recuperação de um sistema danificado     When running testing or unstable system, the administrator is expected to recover from broken package management situation. Cuidado     Alguns métodos descritos aqui são acções de alto risco. Foi avisado! 2.6.1. Failed installation due to missing dependencies If you force to install a package by "sudo dpkg -i ..." to a     system without all dependency packages installed, the package installation will fail as partially installed.     You should install all dependency packages using APT-system or "sudo dpkg -i ...".     Then, configure all partially installed packages with the following command.     # dpkg --configure -a 2.6.2. Caching errors of the package data     Caching errors of the package data cause intriguing errors, such as "GPG error: ... invalid: BADSIG ..." with APT. You should remove all cached data by "sudo rm -rf /var/lib/apt/*     " and try again. (If apt-cacher-ng is used, you should also run "sudo rm -rf /var/cache/apt-cacher-ng/* ".) 2.6.3. Incompatibilidade com configurações antigas de utilizador If a desktop GUI program experienced instability after significant upstream version upgrade, you should suspect     interference with old local configuration files created by it. If it is stable under a newly created user account, this hypothesis is confirmed. (This is a bug of packaging and usually avoided by the packager.) Para recuperar a estabilidade, deve mover os ficheiros de configuração locais correspondentes e reiniciar o programa GUI.     Poderá ter que ler o conteúdo dos ficheiros de configuração antigos para mais tarde recuperar informação de configuração. (Não os apague muito depressa.) 2.6.4. Pacotes diferentes com ficheiros sobrepostos Os sistemas de gestão de pacotes a nível de arquivo, como o     aptitude(8) ou o apt-get(1), nem tentam instalar pacotes com ficheiros sobrepostos a utilizar as dependências do pacote. (veja Secção 2.1.7, “Dependências de pacote”). Erros do responsável do pacote ou de implantação inconsistente de mistura de fontes de arquivos (veja Secção 2.7.6, “Packages from mixed source of archives without apt-pinning”) pelo administrador do sistema podem criar situações com dependências de pacotes     definidas incorrectamente. Quando instala um pacote com ficheiros sobrepostos a usar o aptitude(8) ou o apt-get(1) sob tal situação, o dpkg(1) que desempacota o pacote certifica-se de retornar um erro ao programa que o chama sem sobrescrever os ficheiros existentes. Cuidado A utilização de pacotes de terceiros introduz riscos     significantes ao sistema através dos scripts do programador do pacote que são executados com privilégios de root e podem fazer o que quiserem ao seu sistema. O comando dpkg(1) apenas protege contra a sobreposição de ficheiros ao desempacotar.     Pode contornar tal problema de instalação ao remover primeiro o pacote ofensivo antigo, pacote_antigo.     $ sudo dpkg -P old-package 2.6.5. Corrigir script problemático de pacote Quando um comando no script do pacote retorna erro por alguma razão e o script termina com erro, o sistema de gestão de pacotes     aborta a acção dele e termina com pacotes parcialmente instalados. Quando um pacote contém bugs nos seus scripts de remoção, o pacote pode tornar-se impossível de remover e isso é bastante desagradável.     Para o problema do script de pacote de "nome_do_pacote", deve observar os seguintes scripts do pacote: * "/var/lib/dpkg/info/nome_do_pacote.preinst" * "/var/lib/dpkg/info/nome_do_pacote.postinst"     * "/var/lib/dpkg/info/nome_do_pacote.prerm" * "/var/lib/dpkg/info/nome_do_pacote.postrm"     Editar o script do pacote ofensivo a partir de root a usar as seguintes técnicas: * desativar a linha ofensiva ao preceder um "#"     * forçar um retorno com sucesso ao acrescentar a linha ofensiva com "|| true"     Then, follow Secção 2.6, “Recuperação de um sistema danificado”. 2.6.6. Recuperação com o comando dpkg Como o dpkg é uma ferramenta de pacotes de muito baixo nível,     pode funcionar sob situações muito más como um sistema que não arranca sem ligação a rede. Vamos assumir que o pacote foo está danificado e precisa de ser substituído. Pode ainda encontrar cópias em cache de uma versão antiga livre de bugs do pacote foo no diretório de cache de pacotes: "/var/     cache/apt/archives/". (se não, pode descarregá-lo do arquivo https://snapshot.debian.org/ ou copiá-lo da cache de pacotes de uma máquina funcional.)     Se puder arrancar o sistema, pode instalá-lo com o seguinte comando.     # dpkg -i /path/to/foo_old_version_arch.deb Dica     Se os danos no sistema forem menores, pode em alternativa fazer um downgrade (regredir a versão) ao sistema completo como em Secção 2.7.11, “Downgrade de emergência” a usar o nível mais alto do sistema APT.     Se o seu sistema não puder arrancar pelo disco rígido, precisa procurar outras maneiras de arrancá-lo. 1. Arranque o sistema a usar o CD de instalação de Debian (debian-installer) em modo de recuperação.     2. Monte o sistema danificado no disco rígido em "/target". 3. Instale uma versão antiga do pacote foo com o seguinte.     # dpkg --root /target -i /path/to/foo_old_version_arch.deb     Este exemplo funciona mesmo se o comando dpkg no disco rígido estiver danificado. Dica     Pode ser utilizado, de modo semelhante, para recuperar um sistema danificado qualquer sistema GNU/Linux arrancado de outro sistema no disco rígido, Live CD de GNU/Linux, por pen USB de arranque ou arranque pela rede. Se a tentativa de instalar um pacote deste modo falha devido a algumas violações de dependências e necessitar realmente de fazer isto como último recurso, pode sobrepor a dependência a utilizar     a "--ignore-depends", "--force-depends" e outras opções do dpkg. Se o fizer, precisa de fazer um sério esforço para restaurar as dependências apropriadas mais tarde. Veja dpkg(8) para mais detalhes. Nota Se o seu sistema estiver seriamente danificado, deve fazer uma     salvaguarda completa para um lugar seguro (veja Secção 10.2, “Salvaguarda (backup) e recuperação”) e deve fazer uma instalação limpa. Isto consome menos tempo e produz melhores resultados no fim. 2.6.7. Recuperar dados de seleção de pacotes Se por qualquer razão o "/var/lib/dpkg/status" ficar corrompido o     sistema Debian perde os dados de seleção de pacotes e sofre severamente. Procure o ficheiro antigo "/var/lib/dpkg/status" em "/var/lib/dpkg/status-old" ou "/var/backups/dpkg.status.*". Manter "/var/backups/" numa partição separada pode ser uma boa     ideia porque este diretório contém muitos dados importantes do sistema . Em caso de sérios danos recomendo fazer uma instalação limpa após     fazer a salvaguarda do sistema. Mesmo que tudo em "/var/" esteja perdido, ainda pode recuperar alguma informação dos diretórios em "/usr/share/doc/" para guiar a sua nova instalação.     Reinstalar o sistema mínimo (ambiente de trabalho).     # mkdir -p /path/to/old/system     Monte o sistema antigo em "/caminho/para/sistema/antigo/". # cd /path/to/old/system/usr/share/doc # ls -1 >~/ls1.txt     # cd /usr/share/doc # ls -1 >>~/ls1.txt # cd # sort ls1.txt | uniq | less     Então ser-lhe-ão apresentados nomes de pacotes para instalar. (Podem existir alguns nomes que não de pacotes como "texmf".) 2.7. Dicas para a gestão de pacotes For simplicity, the source list examples in this section are     presented as "/etc/apt/sources.list" in one-line-style after the bookworm release. 2.7.1. Quem fez o upload do pacote? Apesar do nome do responsável listado em "/var/lib/dpkg/ available" e "/usr/share/doc/package_name/changelog" fornecer     alguma informação sobre "quem está por detrás a atividade de empacotamento", quem faz o upload real do pacote é um tanto obscuro. O who-uploads(1) no pacote devscripts identifica quem foi o uploader real dos pacotes fonte Debian. 2.7.2. Limitar a largura de banda de descarga para o APT Se desejar limitar a largura de banda para o APT a, por exemplo,     800Kib/sec (=100kiB/sec), deve configurar o APT e o parâmetro de configuração dele conforme o seguinte.     APT::Acquire::http::Dl-Limit "800"; 2.7.3. Descarga e atualização automática de pacotes O pacote apt vem com um script de cron próprio "/etc/cron.daily/ apt" para suportar a descarga automática de pacotes. Este script pode ser melhorado para executar a atualização automática de     pacotes ao instalar o pacote unattended-upgrades. Esta pode ser personalizada por parâmetros em "/etc/apt/apt.conf.d/02backup" e "/etc/apt/apt.conf.d/50unattended-upgrades" conforme descrito em "/usr/share/doc/unattended-upgrades/README". O pacote unattended-upgrades destina-se principalmente às atualizações de segurança do sistema stable. Se o risco de danificar um sistema stable existente pelas atualizações     automáticas for menor que ser danificado por um intruso que usa buracos de segurança que foram fechados por atualizações de segurança, deve considerar usar estas atualizações automáticas com parâmetros de configuração como os a seguir. APT::Periodic::Update-Package-Lists "1";     APT::Periodic::Download-Upgradeable-Packages "1"; APT::Periodic::Unattended-Upgrade "1"; If you are running an testing or unstable system, you do not want to use the automatic upgrade since it certainly breaks system     some day. Even for such testing or unstable case, you may still want to download packages in advance to save time for the interactive upgrade with configuration parameters as the following. APT::Periodic::Update-Package-Lists "1";     APT::Periodic::Download-Upgradeable-Packages "1"; APT::Periodic::Unattended-Upgrade "0"; 2.7.4. atualizações e Backports There are stable-updates ("bookworm-updates" during the     bookworm-as-stable release cycle) and backports.debian.org archives which provide upgrade packages for stable.     De modo a utilizar estes arquivos, liste todos os arquivos necessários no ficheiro "/etc/apt/sources.list" como a seguir: deb http://deb.debian.org/debian/ bookworm main non-free-firmware contrib non-free     deb http://security.debian.org/debian-security bookworm-security main non-free-firmware contrib non-free deb http://deb.debian.org/debian/ bookworm-updates main non-free-firmware contrib non-free deb http://deb.debian.org/debian/ bookworm-backports main non-free-firmware contrib non-free Não há necessidade de definir valores específicos de Pin-Priority no ficheiro "/etc/apt/preferences". Quando os novos pacotes ficam     disponíveis, a configuração predefinida disponibiliza as atualizações mais razoáveis (veja Secção 2.5.3, “Ficheiros "Release" do nível de arquivo”). * Todos os pacotes antigos instalados são atualizados para mais recentes a partir de bookworm-updates.     * Apenas os pacotes antigos instalados manualmente a partir de bookworm-backports são atualizados para mais recentes a partir de bookworm-backports. Sempre que desejar instalar um pacote chamado "nome-do-pacote"     com as suas dependências a partir do arquivo bookworm-backports manualmente, utilize o seguinte comando enquanto muda o lançamento alvo com a opção "-t".     $ sudo apt-get install -t bookworm-backports package-name Atenção     Do not install too many packages from backports.debian.org archives. It may cause package dependency complications. See Secção 2.1.11, “How to cope with conflicting requirements” for alternative solutions. 2.7.5. External package archives Atenção     You should be aware that the external package gains the root priviledge to your system. You should only use the trusted external package archive. See Secção 2.1.11, “How to cope with conflicting requirements” for alternative solutions. You can use secure APT with Debian-compatible external package     archive by adding it to the source list and its archive key file into the "/etc/apt/trusted.gpg.d/" directory. See sources.list (5), apt-secure(8) and apt-key(8). 2.7.6. Packages from mixed source of archives without apt-pinning Cuidado     Installing packages from mixed source of archives is not supported by the official Debian distribution except for officially supported particular combinations of archives such as stable with security updates and stable-updates. Aqui está um exemplo de operações para incluir, uma vez, pacotes     específicos com novas versões da origem encontrados em unstable enquanto se acompanha a testing. 1. Altere o ficheiro "/etc/apt/sources.list" temporariamente para entrada única "unstable". 2. Corra "aptitude update".     3. Corra "aptitude install nome-do-pacote". 4. Recupere o ficheiro "/etc/apt/sources.list" original para testing. 5. Corra "aptitude update". You do not create the "/etc/apt/preferences" file nor need to     worry about apt-pinning with this manual approach. But this is very cumbersome. Cuidado Quando utiliza fontes misturadas de arquivos, tem que assegurar por si próprio a compatibilidade dos pacotes pois Debian não o     garante. Se existir incompatibilidade de pacotes, pode danificar o seu sistema. Tem que ser capaz de julgar estes requisitos técnicos. A utilização de fontes misturadas de arquivos aleatórios é uma operação completamente opcional e a utilização deles não é algo que o encoraje a utilizar.     As regras gerais para instalar pacotes de arquivos diferentes são as seguintes. * Pacotes não-binários de ("Arquitecture: all") são mais seguro para instalar. + pacotes de documentação: sem requisitos especiais + pacotes de programa interpretador: tem de estar disponível interpretador compatível * Pacotes binários (não "Architecture: all") geralmente enfrentam muitos obstáculos e são inseguros para instalar.     + compatibilidade de versão de biblioteca (incluindo a "libc") + compatibilidade de versão de programa utilitário relacionada + compatibilidade da ABI do Kernel + Compatibilidade ABI C++ + … Nota De modo a tornar um pacote seguro para instalar, alguns pacotes     de programas binários comerciais não-livres podem vir fornecidos com bibliotecas completamente ligadas estaticamente. Mesmo assim deve verificar problemas de compatibilidade da ABI e etc. com eles. Nota Except to avoid broken package for a short term, installing     binary packages from non-Debian archives is generally bad idea. You should seek all available alternative safer technical solutions which are compatible with your current Debian syetem (see Secção 2.1.11, “How to cope with conflicting requirements”). 2.7.7. Tweaking candidate version with apt-pinning Atenção     Use of apt-pinning technique by a novice user is sure call for major troubles. You must avoid using this technique except when you absolutely need it. Sem o ficheiro "/etc/apt/preferences", o sistema APT escolhe a versão disponível mais recente com a versão candidata a utilizar a cadeia de versão. Este é o estado normal e a utilização     recomendada do sistema APT. Todas as combinações de arquivos oficialmente suportadas não necessitam do ficheiro "/etc/apt/ preferences" porque alguns arquivos que não devem ser utilizados como fonte automática de atualizações são marcados como NotAutomatic e são tratados de modo apropriado. Dica     A regra de comparação da string de versão pode ser verificada com, p.e., "dpkg --compare-versions ver1.1 gt ver1.1~1; echo $?" (veja dpkg(1)). Quando instala regularmente pacotes de uma mistura de fontes de arquivos (veja Secção 2.7.6, “Packages from mixed source of archives without apt-pinning”), pode automatizar estas operações     complicadas ao criar o ficheiro "/etc/apt/preferences" com entradas apropriadas e a moldar a regra de seleção de pacotes para a versão candidata como descrito em apt_preferences(5). Isto chama-se apt-pinning. When using apt-pinning, you must ensure compatibility of packages     by yourself since the Debian does not guarantee it. The apt-pinning is completely optional operation and its use is not something I encourage you to use. Archive level Release files (see Secção 2.5.3, “Ficheiros "Release" do nível de arquivo”) are used for the rule of apt_preferences(5). Thus apt-pinning works only with "suite" name     for normal Debian archives and security Debian archives. (This is different from Ubuntu archives.) For example, you can do "Pin: release a=unstable" but can not do "Pin: release a=sid" in the "/ etc/apt/preferences" file. When you use non-Debian archive as a part of apt-pinning, you     should check what they are intended for and also check their credibility. For example, Ubuntu and Debian are not meant to be mixed. Nota Even if you do not create the "/etc/apt/preferences" file, you     can do fairly complex system operations (see Secção 2.6.6, “Recuperação com o comando dpkg” and Secção 2.7.6, “Packages from mixed source of archives without apt-pinning”) without apt-pinning.     Aqui está uma explicação simplificada da técnica de apt-pinning. O sistema APT escolhe o pacote de atualização com o Pin-Priority maior das fontes de pacotes disponíveis definidas no ficheiro "/     etc/apt/sources.list" como o pacote de versão candidata. Se o Pin-Priority do pacote for maior que 1000, esta restrição de versão para atualização é abandonada para permitir a regressão (veja Secção 2.7.11, “Downgrade de emergência”). O valor Pin-Priority de cada pacote é definido por entradas     "Pin-Priority" no ficheiro "/etc/apt/preferences" ou utiliza o valor predefinido dele. Tabela 2.18. Lista de valores notáveis de Pin-Priority para a técnica de apt-pinning. +---------------------------------------------------------------+ |Pin-Priority| apt-pinning effects to the package | |------------+--------------------------------------------------| |1001 |instala o pacote mesmo que isto constitua uma | | |regressão na versão (downgrade) do pacote | |------------+--------------------------------------------------| |990 |utilizado como predefinição para o arquivo de | | |lançamento de destino | |------------+--------------------------------------------------|     |500 |utilizado por predefinição para o arquivo normal | |------------+--------------------------------------------------| |100 |utilizado como predefinição para os arquivos | | |NotAutomatic e ButAutomaticUpgrades | |------------+--------------------------------------------------| |100 |utilizado para o pacote instalado | |------------+--------------------------------------------------| |1 |utilizado como predefinição para o arquivo | | |NotAutomatic | |------------+--------------------------------------------------| |-1 |nunca instala o pacote mesmo que este seja | | |recomendado | +---------------------------------------------------------------+     The target release archive can be set by the command line option, e.g., "apt-get install -t testing some-package" Os arquivos NotAutomatic e ButAutomaticUpgrades são definidos pelo servidor de arquivo que contêm no ficheiro Release dele do nível de arquivo (veja Secção 2.5.3, “Ficheiros "Release" do     nível de arquivo”) ambos "NotAutomatic: yes" e "ButAutomaticUpgrades: yes". O arquivo NotAutomatic é definido pelo servidor de arquivo que contém no ficheiro Release de nível de arquivo dele apenas "NotAutomatic: yes".     A situação de apt-pinning do pacote de várias fontes de arquivos é mostrada por "apt-cache policy pacote". * Uma linha começada com "Package pin:" lista a versão do pacote de pin se estiver definida a associação apenas com o pacote p.e., "Package pin: 0.190". * Não existe nenhuma linha com "Package pin:" se não estiver definida nenhuma associação apenas com pacote. * O valor Pin-Priority a associar ao pacote é listado no lado     direito de todas as strings de versão, p.e., "0.181 700". * É listado "0" à direita de todas as strings de versão se nenhuma associação apenas com pacote for definida, ex., "0.181 0". * Os valores Pin-Priority dos arquivos (definidos como "Package: *" no ficheiro "/etc/apt/preferences") são listados à esquerda dos caminhos dos arquivos, ex., "100 http:// deb.debian.org/debian/ bookworm-backports/main Packages". 2.7.8. Bloquear pacotes instalados por "Recomendados" Atenção     Use of apt-pinning technique by a novice user is sure call for major troubles. You must avoid using this technique except when you absolutely need it. Se desejar não puxar determinados pacotes automaticamente através     de "Recommends", tem de criar o ficheiro "/etc/apt/preferences" e listar explicitamente esses pacotes no topo conforme a seguir: Package: package-1 Pin: version * Pin-Priority: -1     Package: package-2 Pin: version * Pin-Priority: -1 2.7.9. Acompanhar testing com alguns pacotes de unstable Atenção     Use of apt-pinning technique by a novice user is sure call for major troubles. You must avoid using this technique except when you absolutely need it. Aqui está um exemplo de técnica de apt-pinning para incluir pacotes específicos de versão original mais recente encontrados     em unstable e atualizados regularmente enquanto de segue o testing. Liste todos os arquivos necessários no ficheiro "/etc/ apt/sources.list" conforme a seguir: deb http://deb.debian.org/debian/ testing main contrib non-free     deb http://deb.debian.org/debian/ unstable main contrib non-free deb http://security.debian.org/debian-security testing-security main contrib     Configure o ficheiro "/etc/apt/preferences" como o seguinte: Package: *     Pin: release a=unstable Pin-Priority: 100 Quando desejar instalar um pacote chamado "nome_do_pacote" com as     suas dependências a partir do arquivo unstable sob esta configuração, invoque o seguinte comando que muda o lançamento alvo com a opção "-t" (o Pin-Priority de unstable torna-se 990).     $ sudo apt-get install -t unstable package-name Com esta configuração, a execução usual de "apt-get upgrade" e "apt-get dist-upgrade" (ou "aptitude safe-upgrade" e "aptitude     full-upgrade") atualiza os pacotes que foram instalados a partir do arquivo testing a usar o arquivo testing atual e os pacotes que foram instalados a partir do arquivo unstable a usar o arquivo unstable atual. Cuidado     Tenha cuidado para não remover a entrada "testing" do ficheiro "/ etc/apt/sources.list". Sem a entrada "testing" lá, o sistema APT atualiza os pacotes do novo arquivo unstable. Dica Geralmente edito o ficheiro "/etc/apt/sources.list" para comentar     a entrada do arquivo "unstable" logo após a operação acima. Isto evita a lentidão do processo de atualização ao ter demasiadas entradas no ficheiro "/etc/apt/sources.list" embora isto impeça a atualização dos pacotes que foram instalados a partir do arquivo unstable a utilizar o arquivo unstable atual. Dica Se for utilizado "Pin-Priority: 1" em vez de "Pin-Priority: 100"     no ficheiro "/etc/apt/preferences", os pacotes já instalados que têm o valor Pin-Priority de 100 não são atualizados pelo arquivo unstable mesmo se a entrada "testing" no ficheiro "/etc/apt/ sources.list" seja removida. Se desejar acompanhar pacotes particulares em unstable     automaticamente sem uma instalação inicial "-t unstable", tem de criar o ficheiro "/etc/apt/preferences" e listar explicitamente todos esses pacotes no topo conforme a seguir: Package: package-1 Pin: release a=unstable Pin-Priority: 700     Package: package-2 Pin: release a=unstable Pin-Priority: 700 Estes definem o valor Pin-Priority para cada pacote específico.     Por exemplo, de modo a acompanhar a versão unstable mais recente deste "Debian Reference" em Português, deve ter as seguintes entradas no ficheiro "/etc/apt/preferences". Package: debian-reference-en Pin: release a=unstable Pin-Priority: 700     Package: debian-reference-common Pin: release a=unstable Pin-Priority: 700 Dica     This apt-pinning technique is valid even when you are tracking stable archive. Documentation packages have been always safe to install from unstable archive in my experience, so far. 2.7.10. Acompanhar unstable com alguns pacotes de experimental Atenção     Use of apt-pinning technique by a novice user is sure call for major troubles. You must avoid using this technique except when you absolutely need it. Aqui está outro exemplo de técnica de apt-pinning para incluir pacotes de versão de origem mais recentes encontrados em     experimental enquanto segue unstable. Lista todos os arquivos necessários no ficheiro "/etc/apt/sources.list" conforme o seguinte: deb http://deb.debian.org/debian/ unstable main contrib non-free     deb http://deb.debian.org/debian/ experimental main contrib non-free deb http://security.debian.org/ testing-security main contrib O valor Pin-Priority predefinido para o arquivo experimental é sempre 1 (<<100) porque é um arquivo NotAutomatic (veja Secção 2.5.3, “Ficheiros "Release" do nível de arquivo”). Não é     necessário definir o valor Pin-Priority explicitamente no ficheiro "/etc/apt/preferences" apenas para usar o arquivo experimental a menos que deseje seguir pacotes particulares nele automaticamente para a próxima atualização. 2.7.11. Downgrade de emergência Atenção     Use of apt-pinning technique by a novice user is sure call for major troubles. You must avoid using this technique except when you absolutely need it. Cuidado O downgrade (regressão de versão) não é suportado oficialmente pelo sistema Debian por design. Deverá ser feito apenas como     parte de um processo de recuperação de emergência. Apesar desta situação, é conhecido por funcionar bem em muitos incidentes. Para sistemas críticos, Deve fazer salvaguardas (backups) de todos os dados importantes após a operação de recuperação e reinstalar um sistema novo a partir da estaca zero. Pode ter sorte ao fazer o downgrade de uma arquivo recente para um arquivo mais antigo para recuperar de uma atualização ao sistema que o deixou danificado ao manipular a versão candidata     (veja Secção 2.7.7, “Tweaking candidate version with apt-pinning” ). Esta é uma alternativa preguiçosa às acções tediosas de muitos comandos "dpkg -i pacote-danificado_versão-antiga.deb" (veja Secção 2.6.6, “Recuperação com o comando dpkg”).     Procure as linhas no ficheiro "/etc/apt/sources.list" que acompanham unstable como a seguir.     deb http://deb.debian.org/debian/ sid main contrib non-free     Substitua-as de modo a acompanharem testing.     deb http://deb.debian.org/debian/ trixie main contrib non-free     Configure o ficheiro "/etc/apt/preferences" como o seguinte: Package: *     Pin: release a=testing Pin-Priority: 1010     Corra "apt-get update; apt-get dist-upgrade" para forçar a regressão dos pacotes no sistema.     Remova este ficheiro especial "/etc/apt/preferences" após este downgrade de emergência. Dica É uma boa ideia remover (não purgar) o máximo de pacotes para     minimizar problemas de dependências. Pode necessitar remover e instalar manualmente alguns pacotes para conseguir o downgrade do sistema. O kernel Linux, gestor de arranque, udev, PAM, APT, os pacotes relacionados com a rede e os seus ficheiros de configuração requerem atenção especial. 2.7.12. O pacote equivs Se vai compilar um programa a partir do código-fonte para     substituir um pacote Debian, o melhor é torná-lo num pacote local realmente 'debianizado' (*.deb) e utilizar um arquivo privado. Se escolher compilar um programa de fonte e instalá-lo sob "/usr/     local", pode necessitar de utilizar o equivs como último recurso para satisfazer as dependências em falta para o pacote. Package: equivs Priority: optional Section: admin Description: Circumventing Debian package dependencies This package provides a tool to create trivial Debian packages. Typically these packages contain only dependency information, but they can also include normal installed files like other packages do.     . One use for this is to create a metapackage: a package whose sole purpose is to declare dependencies and conflicts on other packages so that these will be automatically installed, upgraded, or removed. . Another use is to circumvent dependency checking: by letting dpkg think a particular package name and version is installed when it isn't, you can work around bugs in other packages' dependencies. (Please do still file such bugs, though.) 2.7.13. Portar um pacote ao sistema stable Cuidado     There is no gurantee for the procedure descried here to work without extra manual efforts for system differences. Para atualizações parciais do sistema stable, é desejável     reconstruir um pacote dentro do ambiente dele a utilizar um pacote de código-fonte. Isto evita atualizações maciças de pacotes devido às suas dependências.     Adicione as seguintes entradas ao "/etc/apt/sources.list" num sistema stable.     deb-src http://deb.debian.org/debian unstable main contrib non-free     Instale os pacotes necessários para a compilação e descarregue o pacote de código-fonte conforme o seguinte: # apt-get update # apt-get dist-upgrade     # apt-get install fakeroot devscripts build-essential # apt-get build-dep foo $ apt-get source foo $ cd foo* atualize alguns pacotes de correntes de ferramentas como o dpkg e     o debhelper a partir de pacotes de backport se forem necessários para o "backporting".     Execute o seguinte.     $ dch -i     Aumentar a versão do pacote, p.e. um com "+bp1" acrescentado em "debian/changelog"     Compile os pacotes e instale-os para o sistema com o seguinte: $ debuild     $ cd .. # debi foo*.changes 2.7.14. Servidor proxy para o APT Como pôr em mirror uma sub-secção inteira do arquivo Debian é um desperdício de espaço de disco e largura de banda de rede, a implantação se um servidor proxy local para o APT é desejável a ter em consideração se administrar muitos sistemas em LAN. O APT     pode ser configurado para utilizar servidores proxy web genéricos (http) como o squid (veja Secção 6.5, “Outras aplicações de servidor de rede”) conforme descrito em apt.conf(5) e em "/usr/ share/doc/apt/examples/configure-index.gz". A variável de ambiente $http_proxy" pode ser utilizada para sobrepor a definição de servidor proxy do ficheiro "/etc/apt/apt.conf".     Existem ferramentas de proxy especiais para o arquivo Debian. Deve verificar o BTS antes de as utilizar. Tabela 2.19. Lista de ferramentas proxy especiais para arquivos Debian +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |-------------+------+-------+----------------------------------| | |V:0, | |servidor proxy de cache para | |approx |I:0 |7124 |ficheiros de arquivo Debian | | | | |(programa OCaml compilado) |     |-------------+------+-------+----------------------------------| | |V:0, | |Proxy de cache para pacotes Debian| |apt-cacher |I:0 |266 |e ficheiros de código-fonte | | | | |(programa Perl) | |-------------+------+-------+----------------------------------| | |V:4, | |Proxy de cache para distribuição | |apt-cacher-ng|I:4 |1816 |de pacotes de software (programa | | | | |C++ compilado) | +---------------------------------------------------------------+ Cuidado Quando Debian reorganiza a estrutura do arquivo dele, estas     ferramentas de proxy especializadas tendem a necessitar ser reescritas de pelo responsável do pacote e podem não estar funcionais durante algum tempo. Por outro lado, os servidores proxy web (http) genéricos são mais robustos e mais fáceis de acompanhar estas mudanças. 2.7.15. Mais leituras sobre a gestão de pacotes     Pode aprender mais sobre a gestão de pacotes a partir das seguintes documentações. * Documentações principais sobre a gestão de pacotes: + aptitude(8), dpkg(1), tasksel(8), apt(8), apt-get(8), apt-config(8), apt-secure(8), sources.list(5), apt.conf (5), and apt_preferences(5); + "/usr/share/doc/apt-doc/guide.html/index.html" e "/usr/ share/doc/apt-doc/offline.html/index.html" do pacote apt-doc; e + "/usr/share/doc/aptitude/html/en/index.html" do pacote aptitude-doc-en. * Documentações oficiais e detalhadas no arquivo Debian:     + "Manual de Política Debian Capítulo 2 - O Arquivo Debian", + "Referência dos Programadores de Debian, Capítulo 4 - Recursos para Programadores de Debian 4.6 O Arquivo Debian" e + "A FAQ de Debian GNU/Linux, Capítulo 6 - Os arquivos FTP de Debian". * Tutorial para construir um pacote Debian para utilizadores de Debian: + "Guia para Mantedores de Debian". Capítulo 3. A inicialização do sistema É inteligente para si como o administrador do sistema ter uma ideia como o sistema Debian é arranca e é configurado. Apesar dos     detalhes exactos estarem nos ficheiros de código-fonte dos pacotes instalados e nas suas documentações, é um pouco exagerado para a maioria de nós. Here is a rough overview of the key points of the Debian system     initialization. Since the Debian system is a moving target, you should refer to the latest documentation. * Debian Linux Kernel Handbook is the primary source of information on the Debian kernel.     * bootup(7) descreve o processo de arranque do sistema baseado no systemd . (Debian Recente) * boot(7) descreve o processo de arranque do sistema baseado em UNIX System V Release 4. (Debian Antiga) 3.1. Uma visão geral do processo de arranque O sistema do computador passa por várias fases de processos de     arranque desde o ligar da energia até que oferece, ao utilizador, o sistema operativo (SO) totalmente funcional.     Para simplicidade, limito a discussão à plataforma PC típico com a instalação por omissão. O processo típico de arranque é como um foguete de quatro etapas.     Cada etapa do foguete entrega o controle do sistema à próxima etapa. * Secção 3.1.1, “Stage 1: the UEFI” * Secção 3.1.2, “Estágio 2: o gestor de arranque”     * Secção 3.1.3, “Estágio 3: o mini-sistema Debian” * Secção 3.1.4, “Estágio 4: o sistema Debian normal” É claro que, estes podem ser configurados de modo diferente. Por exemplo, se compilou o seu próprio kernel, pode estar a saltar o     passo com o mini sistema Debian. Portanto por favor não assuma que é este o caso para o seu sistema até que o verifique por si próprio. 3.1.1. Stage 1: the UEFI The Unified Extensible Firmware Interface (UEFI) defines a boot manager as part of the UEFI specification. When a computer is powered on, the boot manager is the 1st stage of the boot process     which checks the boot configuration and based on its settings, then executes the specified OS boot loader or operating system kernel (usually boot loader). The boot configuration is defined by variables stored in NVRAM, including variables that indicate the file system paths to OS loaders or OS kernels. An EFI system partition (ESP) is a data storage device partition that is used in computers adhering to the UEFI specification.     Accessed by the UEFI firmware when a computer is powered up, it stores UEFI applications and the files these applications need to run, including operating system boot loaders. (On the legacy PC system, BIOS stored in the MBR may be used instead.) 3.1.2. Estágio 2: o gestor de arranque The boot loader is the 2nd stage of the boot process which is started by the UEFI. It loads the system kernel image and the     initrd image to the memory and hands control over to them. This initrd image is the root filesystem image and its support depends on the bootloader used. The Debian system normally uses the Linux kernel as the default     system kernel. The initrd image for the current 5.x Linux kernel is technically the initramfs (initial RAM filesystem) image.     There are many boot loaders and configuration options available. Tabela 3.1. Lista de gestores de arranque +---------------------------------------------------------------+ | | | | | gestor | | | pacote |popcon|tamanho| initrd | de | descrição | | | | | |arranque| | |--------------+------+-------+---------+--------+--------------| | | | | | |This is smart | | | | | | |enough to | | | | | | |understand | | | | | |GRUB |disk | |grub-efi-amd64|I:339 |184 |Suportado|UEFI |partitions and| | | | | | |filesystems | | | | | | |such as vfat, | | | | | | |ext4, …. | | | | | | |(UEFI) | |--------------+------+-------+---------+--------+--------------| | | | | | |This is smart | | | | | | |enough to | | | | | | |understand | | |V:21, | | | |disk | |grub-pc |I:634 |557 |Suportado|GRUB 2 |partitions and| | | | | | |filesystems | | | | | | |such as vfat, | | | | | | |ext4, …. | | | | | | |(BIOS) | |--------------+------+-------+---------+--------+--------------| | | | | | |Isto são | | | | | | |imagens de | | | | | | |arranque de | |grub-rescue-pc|V:0, |6625 |Suportado|GRUB 2 |recuperação do| | |I:0 | | | |GRUB 2 (CD ou | | | | | | |disquete) | | | | | | |(Versão PC/ |     | | | | | |BIOS) | |--------------+------+-------+---------+--------+--------------| | | | | | |Isto | | | | | | |compreende o | | | | | | |sistema de | |syslinux |V:3, |344 |Suportado|Isolinux|ficheiros | | |I:36 | | | |ISO9660. É | | | | | | |utilizado pelo| | | | | | |CD de | | | | | | |arranque. | |--------------+------+-------+---------+--------+--------------| | | | | | |Isto | | | | | | |compreende o | | | | | | |sistema de | |syslinux |V:3, |344 |Suportado|Syslinux|ficheiros | | |I:36 | | | |MSDOS (FAT). É| | | | | | |utilizado pela| | | | | | |disquete de | | | | | | |arranque. | |--------------+------+-------+---------+--------+--------------| | | | | | |Novo sistema é| | |V:0, | | | |iniciado a | |loadlin |I:0 |90 |Suportado|Loadlin |partir do | | | | | | |sistema | | | | | | |FreeDOS/MSDOS.| |--------------+------+-------+---------+--------+--------------| | | | | | |Isto é | | | | | | |software livre| | | | | |MBR por |que substitui | |mbr |V:0, |47 |Não |Neil |o MBR do | | |I:4 | |suportado|Turton |MSDOS. Apenas | | | | | | |compreende | | | | | | |partições de | | | | | | |disco. | +---------------------------------------------------------------+ Atenção Não brinque com os gestores de arranque sem ter discos de     arranque de recuperação (caneta USB, CD ou disquete) criados a partir de imagens do pacote grub-rescue-pc. Torna-o capaz de arrancar o seu sistema mesmo sem um gestor de arranque funcional no disco rígido. For UEFI system, GRUB2 first reads the ESP partition and uses     UUID specified for search.fs_uuid in "/boot/efi/EFI/debian/ grub.cfg" to determine the partition of the GRUB2 menu configuration file "/boot/grub/grub.cfg".     The key part of the GRUB2 menu configuration file looks like: menuentry 'Debian GNU/Linux' ... { load_video insmod gzio insmod part_gpt insmod ext2     search --no-floppy --fs-uuid --set=root fe3e1db5-6454-46d6-a14c-071208ebe4b1 echo 'Loading Linux 5.10.0-6-amd64 ...' linux /boot/vmlinuz-5.10.0-6-amd64 root=UUID=fe3e1db5-6454-46d6-a14c-071208ebe4b1 ro quiet echo 'Loading initial ramdisk ...' initrd /boot/initrd.img-5.10.0-6-amd64 }     For this part of /boot/grub/grub.cfg, this menu entry means the following. Tabela 3.2. The meaning of the menu entry of the above part of / boot/grub/grub.cfg +---------------------------------------------------------------+ | setting | valor | |------------------------+--------------------------------------| |GRUB2 modules loaded |gzio, part_gpt, ext2 | |------------------------+--------------------------------------| |root file system |partition identified by UUID= | |partition used |fe3e1db5-6454-46d6-a14c-071208ebe4b1 |     |------------------------+--------------------------------------| |kernel image path in the|/boot/vmlinuz-5.10.0-6-amd64 | |root file system | | |------------------------+--------------------------------------| |kernel boot parameter |"root=UUID= | |used |fe3e1db5-6454-46d6-a14c-071208ebe4b1 | | |ro quiet" | |------------------------+--------------------------------------| |initrd image path in the|/boot/initrd.img-5.10.0-6-amd64 | |root file system | | +---------------------------------------------------------------+ Dica     You can enable to see kernel boot log messages by removing quiet in "/boot/grub/grub.cfg". For the persistent change, please edit "GRUB_CMDLINE_LINUX_DEFAULT="quiet"" line in "/etc/default/grub". Dica     You can customize GRUB splash image by setting GRUB_BACKGROUND variable in "/etc/default/grub" pointing to the image file or placing the image file itself in "/boot/grub/".     Veja "info grub" e grub-install(8). 3.1.3. Estágio 3: o mini-sistema Debian O mini-sistema Debian é o 3º estágio do processo de arranque que     é iniciado pelo gestor de arranque. Corre o kernel do sistema com o sistema de ficheiros raiz dele na memória. Este é um estágio preparatório opcional do processo de arranque. Nota O termo "mini-sistema Debian" é cunhado pelo autor para descrever     este 3º estágio do processo de arranque para este documento. Este sistema é geralmente referido como o initrd ou sistema initramfs. É utilizado pelo Instalador de Debian um sistema semelhante em memória . O programa "/init" é executado como o primeiro programa neste sistema de ficheiros raiz em memória. É um programa que inicializa o kernel no espaço de utilizador e entrega o controle     ao próximo estágio. Este mini-sistema Debian oferece flexibilidade ao processo de arranque tal como adicionar módulos de kernel antes do processo de arranque principal ou montar o sistema de ficheiros raiz como um encriptado. * O programa "/init" é um programa de script de shell se a initramfs for criada pelo initramfs-tools. + Pode interromper esta parte do processo de arranque para obter a shell de root ao fornecer "break=init" etc. ao parâmetro de arranque do kernel. Veja o script "/init" para mais condições de interrupção. Este ambiente shell é suficientemente sofisticado para fazer uma boa inspecção do hardware da sua máquina.     + Os comandos disponíveis neste mini-sistema Debian são versões reduzidas e disponibilizados principalmente por uma ferramenta GNU chamada busybox(1). * O programa "/init" é um programa binário do systemd se a initramfs for criada pelo dracut. + Os comandos disponíveis neste mini-sistema Debian são versões reduzidas do ambiente systemd(1). Cuidado     Precisa de utilizar a opção "-n" para o comando mount quando está no sistema de ficheiros raiz apenas de leitura. 3.1.4. Estágio 4: o sistema Debian normal O sistema Debian normal é o 4º estágio do processo de arranque que é iniciado pelo mini-sistema Debian. O kernel do sistema para     o mini-sistema Debian continua a correr nesse ambiente. O sistema de ficheiros raiz é mudado daquele na memória para o que está no sistema de ficheiros do disco rígido real. O programa init é executado como o primeiro programa com PID=1 para executar o processo de arranque principal de arrancar muitos     programas. O caminho de ficheiro predefinido ao programa init é " /usr/sbin/init" mas pode ser alterado pelo parâmetro de arranque do kernel como "init=/path/to/init_program".     "/usr/sbin/init" is symlinked to "/lib/systemd/systemd" after Debian 8 Jessie (released in 2015). Dica     O comando de iniciação atual do seu sistema pode ser verificado pelo comando "ps --pid 1 -f". Tabela 3.3. Lista de utilitários de arranque para o sistema Debian +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |-------------------+------+-------+----------------------------| | |V:860,| |daemon de eventos baseado em| |systemd |I:966 |11168 |init(8) para a concorrência | | | | |(alternativa a sysvinit) | |-------------------+------+-------+----------------------------| | |V:3, | |initialization system for | |cloud-init |I:5 |2870 |infrastructure cloud | | | | |instances | |-------------------+------+-------+----------------------------| | |V:832,| |os manuais e ligações | |systemd-sysv |I:964 |80 |necessárias pelo systemd | | | | |para substituir o sysvinit | |-------------------+------+-------+----------------------------| | |V:699,| |ferramentas de ajuda para | |init-system-helpers|I:974 |130 |mudar entre sysvinit e | | | | |systemd | |-------------------+------+-------+----------------------------| |initscripts |V:33, |198 |scripts para inicializar e | | |I:133 | |desligar o sistema | |-------------------+------+-------+----------------------------| |sysvinit-core |V:4, |361 |utilitários de init(8) | | |I:5 | |estilo System-V | |-------------------+------+-------+----------------------------|     |sysv-rc |V:66, |88 |mecanismo de mudança de | | |I:145 | |runlevel estilo System-V | |-------------------+------+-------+----------------------------| | |V:897,| |utilitários estilo System-V | |sysvinit-utils |I:999 |102 |(startpar(8), bootlogd(8), | | | | |…) | |-------------------+------+-------+----------------------------| | |V:634,| |Linux Standard Base | |lsb-base |I:675 |12 |funcionalidade de script de | | | | |init 3.2 | |-------------------+------+-------+----------------------------| | | | |ferramenta para organizar a | |insserv |V:88, |132 |sequência de arranque a usar| | |I:144 | |dependências dos scripts | | | | |init.d LSB | |-------------------+------+-------+----------------------------| | |V:1, | |ferramenta kexec para | |kexec-tools |I:6 |316 |re-arranques kexec(8) | | | | |(re-arranque a quente) | |-------------------+------+-------+----------------------------| |systemd-bootchart |V:0, |131 |analisador de performance do| | |I:0 | |processo de arranque | |-------------------+------+-------+----------------------------| |mingetty |V:0, |36 |getty(8) apenas de consola | | |I:2 | | | |-------------------+------+-------+----------------------------| |mgetty |V:0, |315 |substituto inteligente de | | |I:0 | |modem getty(8) | +---------------------------------------------------------------+ Dica     Veja Debian wiki: BootProcessSpeedup para as dicas mais recentes em como acelerar o processo de arranque. 3.2. Systemd 3.2.1. init do Systemd When the Debian system starts, /usr/sbin/init symlinked to /usr/     lib/systemd is started as the init system process (PID=1) owned by root (UID=0). See systemd(1). O processo init do systemd espalha processos em paralelo com base     nos arquivos de configuração do unit (veja systemd.unit(5)) os quais são escritos em estilo declarativo em vez do estilo processual tipo SysV. The spawned processes are placed in individual Linux control     groups named after the unit which they belong to in the private systemd hierarchy (see cgroups and Secção 4.7.5, “Linux security features”). Units for the system mode are loaded from the "System Unit Search     Path" described in systemd.unit(5). The main ones are as follows in the order of priority: * "/etc/systemd/system/*": System units created by the administrator     * "/run/systemd/system/*": Runtime units * "/lib/systemd/system/*": System units installed by the distribution package manager As suas inter-dependências são especificadas pelas directivas "Wants=", "Requires=", "Before=", "After=", … (veja "MAPPING OF     UNIT PROPERTIES TO THEIR INVERSES" em systemd.unit(5)). Os controlos de recursos estão também definidos (veja systemd.resource-control(5)).     O sufixo do ficheiro de configuração da unidade codifica os seus tipos como: * *.service descreve o processo controlado e supervisionado pelo systemd. Veja systemd.service(5). * *.device descreve o aparelho exposto em sysfs(5) como uma árvore de aparelhos do udev(7). Veja systemd.device(5). * *.mount descreve o ponto de montagem do sistema de ficheiros controlado e supervisionado pelo systemd. Veja systemd.mount (5). * *.automount Descreve o ponto de montagem automático do sistema de ficheiros controlado e supervisionado pelo systemd. Veja systemd.automount(5). * *.swap descreve o aparelho ou ficheiro de memória virtual (swap) controlado e supervisionado pelo systemd. Veja systemd.swap(5).     * *.path descreve o caminho monitorizado pelo systemd para activação baseada-no-caminho. Veja systemd.path(5). * *.socket descreve o socket controlado e supervisionado pelo systemd para activação baseada-em-socket. Veja systemd.socket (5). * *.timer descreve o temporizador controlado e supervisionado pelo systemd para activação baseada-em-temporização. Veja systemd.timer(5). * *.slice gere recursos com cgroups(7). Veja systemd.slice(5). * *.scope é criado programaticamente a usar as interfaces de barramento do systemd para gerir um conjunto de processos do sistema. Veja systemd.scope(5). * *.target agrupa outros ficheiros de configuração de unit para criar o ponto de sincronização durante o arranque. Veja systemd.target(5). Após o arranque do sistema (o, init), o processo systemd tenta arrancar o "/lib/systemd/system/default.target (que normalmente é uma ligaö#ao simbólica para "graphical.target"). Primeiro,     algumas unidades alvo especiais (veja systemd.special(7)) tais como "local-fs.target", "swap.target" e "cryptsetup.target" são puxadas para montar os sistemas de ficheiros. Depois, outras unidades alvo são também puxadas pelas dependências da unidade alvo. Para mais detalhes. leia bootup(7). O systemd oferece funcionalidades de compatibilidade regressiva.     Os scripts de arranque estilo SysV em "/etc/init.d/rc[0123456S].d /[KS]name" são ainda analisados e telinit(8) é traduzido em pedidos activação de unidade do systemd. Cuidado     Os runlevel 2 a 4 emulados são todos direccionados por uma ligação simbólica ao mesmo "alvo de multi-utilizador". 3.2.2. Systemd login When a user logins to the Debian system via gdm3(8), sshd(8),     etc., /lib/systemd/system --user is started as the user service manager process owned by the corresponding user. See systemd(1). The systemd user service manager process spawns processes in     parallel based on the declarative unit configuration files (see systemd.unit(5) and user@.service(5)). Units for the user mode are loaded from the "User Unit Search     Path" described in systemd.unit(5). The main ones are as follows in the order of priority: * "~/.config/systemd/user/*": User configuration units * "/etc/systemd/user/*": User units created by the administrator     * "/run/systemd/user/*": Runtime units * "/lib/systemd/user/*": User units installed by the distribution package manager     These are managed in the same way as Secção 3.2.1, “init do Systemd”. 3.3. A mensagem do kernel     As mensagens de erros do kernel mostradas na consola podem ser configuradas ao definir o nível de limiar dele.     # dmesg -n3 Tabela 3.4. Lista de níveis de erro do kernel +---------------------------------------------------------------+ |valor de nível de|nome de nível de| significado | | erro | erro | | |-----------------+----------------+----------------------------| |0 |KERN_EMERG |sistema está inutilizável | |-----------------+----------------+----------------------------| |1 |KERN_ALERT |acção tem de ser tomada | | | |imediatamente | |-----------------+----------------+----------------------------| |2 |KERN_CRIT |condições críticas |     |-----------------+----------------+----------------------------| |3 |KERN_ERR |condições de erro | |-----------------+----------------+----------------------------| |4 |KERN_WARNING |condições de aviso | |-----------------+----------------+----------------------------| |5 |KERN_NOTICE |condição normal mas | | | |significante | |-----------------+----------------+----------------------------| |6 |KERN_INFO |informativa | |-----------------+----------------+----------------------------| |7 |KERN_DEBUG |mensagens de nível de | | | |depuração | +---------------------------------------------------------------+ 3.4. A mensagem do sistema Under systemd, both kernel and system messages are logged by the journal service systemd-journald.service (a.k.a journald) either     into a persistent binary data below "/var/log/journal" or into a volatile binary data below "/run/log/journal/". These binary log data are accessed by the journalctl(1) command. For example, you can display log from the last boot as:     $ journalctl -b Tabela 3.5. List of typical journalctl command snippets +---------------------------------------------------------------+ | Operação | Fragmentos de | | | comando | |-------------------------------------------+-------------------| |View log for system services and kernel |"journalctl -b | |from the last boot |--system" | |-------------------------------------------+-------------------|     |View log for services of the current user |"journalctl -b | |from the last boot |--user" | |-------------------------------------------+-------------------| |View job log of "$unit" from the last boot |"journalctl -b -u | | |$unit" | |-------------------------------------------+-------------------| |View job log of "$unit" ("tail -f" style) |"journalctl -b -u | |from the last boot |$unit -f" | +---------------------------------------------------------------+ Under systemd, the system logging utility rsyslogd(8) may be uninstalled. If it is installed, it changes its behavior to read the volatile binary log data (instead of pre-systemd default "/     dev/log") and to create traditional permanent ASCII system log data. This can be customized by "/etc/default/rsyslog" and "/etc/ rsyslog.conf" for both the log file and on-screen display. See rsyslogd(8) and rsyslog.conf(5). See also Secção 9.3.2, “Analisador de relatório (Log)”. 3.5. System management     The systemd offers not only init system but also generic system management operations with the systemctl(1) command. Tabela 3.6. List of typical systemctl command snippets +---------------------------------------------------------------+ | Operação | Fragmentos de comando | |-------------------------------------+-------------------------| |List all available unit types |"systemctl list-units | | |--type=help" | |-------------------------------------+-------------------------| |List all target units in memory |"systemctl list-units | | |--type=target" | |-------------------------------------+-------------------------| |List all service units in memory |"systemctl list-units | | |--type=service" | |-------------------------------------+-------------------------| |List all device units in memory |"systemctl list-units | | |--type=device" | |-------------------------------------+-------------------------| |List all mount units in memory |"systemctl list-units | | |--type=mount" | |-------------------------------------+-------------------------| |Lista todas unidades de socket em |"systemctl list-sockets" | |memória | | |-------------------------------------+-------------------------| |Lista todas as unidades de |"systemctl list-timers" | |temporizador em memória | | |-------------------------------------+-------------------------| |Iniciar o "$unit" |"systemctl start $unit" | |-------------------------------------+-------------------------| |Parar o "$unit" |"systemctl stop $unit" | |-------------------------------------+-------------------------| |Recarregar configuração específica do|"systemctl reload $unit" | |serviço | | |-------------------------------------+-------------------------| |Parar e iniciar todo "$unit" |"systemctl restart $unit"| |-------------------------------------+-------------------------| |Iniciar o "$unit" e parar todos os |"systemctl isolate $unit"| |outros | | |-------------------------------------+-------------------------| |Mudar para "gráfico" (sistema GUI) |"systemctl isolate | | |graphical" | |-------------------------------------+-------------------------| |Mudar para "multi-utilizador" |"systemctl isolate | |(sistema CLI) |multi-user" | |-------------------------------------+-------------------------| |Mudar para "recuperação" (sistema CLI|"systemctl isolate | |de único utilizador) |rescue" | |-------------------------------------+-------------------------| |Enviar sinal kill ao "$unit" |"systemctl kill $unit" | |-------------------------------------+-------------------------| |Verificar se o serviço "$unit" está |"systemctl is-active | |ativo |$unit" | |-------------------------------------+-------------------------| |Verificar se o serviço "$unit" falhou|"systemctl is-failed | | |$unit" | |-------------------------------------+-------------------------| |Verifica o estado de "$unit|$PID| |"systemctl status $unit| |     |aparelho" |$PID|$device" | |-------------------------------------+-------------------------| |Mostra propriedades de 1"$unit|$job" |"systemctl show $unit| | | |$job" | |-------------------------------------+-------------------------| |Reinicia um "$unit" falhado |"systemctl reset-failed | | |$unit" | |-------------------------------------+-------------------------| |List dependências de todos os |"systemctl | |serviços unit |list-dependencies --all" | |-------------------------------------+-------------------------| |Lista ficheiros unit instalados no |"systemctl | |sistema |list-unit-files" | |-------------------------------------+-------------------------| |Ativa "$unit" (adicionar ligação |"systemctl enable $unit" | |simbólica) | | |-------------------------------------+-------------------------| |Desactiva "$unit" (remove ligação |"systemctl disable $unit"| |simbólica) | | |-------------------------------------+-------------------------| |Desmascara "$unit" (remove ligação |"systemctl unmask $unit" | |simbólica para "/dev/null") | | |-------------------------------------+-------------------------| |Mascara "$unit" (adicionar ligação |"systemctl mask $unit" | |simbólica para "/dev/null") | | |-------------------------------------+-------------------------| |Obter definição de alvo-predefinido |"systemctl get-default" | |-------------------------------------+-------------------------| |Define alvo-predefinido para |"systemctl set-default | |"graphical" (sistema GUI) |graphical" | |-------------------------------------+-------------------------| |Define alvo-predefinido para |"systemctl set-default | |"multi-user" (sistema CLI) |multi-user" | |-------------------------------------+-------------------------| |Mostra ambiente da função |"systemctl | | |show-environment" | |-------------------------------------+-------------------------| |Define "variável" de ambiente de |"systemctl | |função para "valor" |set-environment variável=| | |valor" | |-------------------------------------+-------------------------| |Remove a definição da "variável" de |"systemctl | |ambiente de função |unset-environment | | |variável" | |-------------------------------------+-------------------------| |Reinicia todos os ficheiros unit e os|"systemctl daemon-reload"| |daemons | | |-------------------------------------+-------------------------| |Desligar o sistema |"systemctl poweroff" | |-------------------------------------+-------------------------| |Desligar e reiniciar o sistema |"systemctl reboot" | |-------------------------------------+-------------------------| |Suspender o sistema |"systemctl suspend" | |-------------------------------------+-------------------------| |Hibernar o sistema |"systemctl hibernate" | +---------------------------------------------------------------+ Aqui, "$unit" nos exemplos em cima pode ser um único nome de unidade (sufixos como .service e .target são opcionais) ou, em     muitos casos, especificações de múltiplas unidades (a simbologia da shell "*", "?", "[]" a utilizar fnmatch(3) serão correspondidos aos nomes primários de todas as unidades presentemente em memória). Os comandos de alteração do estado do sistema nos exemplos em     cima são tipicamente precedidos por "sudo" para obter os privilégios administrativos necessários. Os resultados de "systemctl status $unit|$PID|$aparelho" usam     cores no ponto ("●") para sumarizar rapidamente o estado da unidade. * Ponto "●" branco indica estado "inativo" ou "desactivado".     * Ponto "●" vermelho indica um estado de "falha" ou "erro". * Ponto "●" verde indica um estado "ativo", "a reiniciar" ou "a ativar". 3.6. Other system monitors     Here are a list of other monitoring command snippets under systemd. Please read the pertinent manpages including cgroups(7). Tabela 3.7. List of other monitoring command snippets under systemd +---------------------------------------------------------------+ | Operação |Fragmentos de comando| |-----------------------------------------+---------------------| |Mostra o tempo gasto em cada passo de |"systemd-analyze | |inicialização |time" | |-----------------------------------------+---------------------| |Lista de todas as unidades pelo tempo de |"systemd-analyze | |inicialização |blame" | |-----------------------------------------+---------------------| |Carrega e detecta erros no ficheiro |"systemd-analyze | |"$unit" |verify $unit" |     |-----------------------------------------+---------------------| |Show terse runtime status information of |"loginctl | |the user of the caller's session |user-status" | |-----------------------------------------+---------------------| |Show terse runtime status information of |"loginctl | |the caller's session |session-status" | |-----------------------------------------+---------------------| |Track boot process by the cgroups |"systemd-cgls" | |-----------------------------------------+---------------------| |Track boot process by the cgroups |"ps xawf -eo | | |pid,user,cgroup,args"| |-----------------------------------------+---------------------| |Track boot process by the cgroups |Lê sysfs sob "/sys/fs| | |/cgroup/" | +---------------------------------------------------------------+ 3.7. System configuration 3.7.1. O nome da máquina O kernel mantém o nome-de-máquina do sistema. A unidade do sistema arrancado por systemd-hostnamed.service define o nome de     máquina do sistema durante o arranque ao nome armazenado em "/etc /hostname". Este ficheiro deve conter apenas o nome de máquina do sistema e não um nome de domínio totalmente qualificado.     Para escrever o nome de máquina atual corra hostname(1) sem argumentos. 3.7.2. O sistema de ficheiros As opções de montagem de sistemas de ficheiros de discos normais     e de rede são definidas em "/etc/fstab". Veja fstab(5) e Secção 9.6.7, “Optimização do sistema de ficheiros por opções de montagem”.     A configuração do sistema de ficheiros encriptado é definida em " /etc/crypttab". Veja crypttab(5)     A configuração do software RAID com mdadm(8) é definida em "/etc/ mdadm/mdadm.conf". Veja mdadm.conf(5). Atenção     Após montar todos os sistemas de ficheiros, os ficheiros temporários em "/tmp", "/var/lock" e "/var/run" são limpos para cada arranque. 3.7.3. Inicialização da interface de rede As interfaces de rede são tipicamente iniciadas em     "networking.service" para a interface lo e "NetworkManager.service" para as outras interfaces em sistemas Debian modernos sob systemd.     Veja Capítulo 5, Configuração de rede para saber como os configurar. 3.7.4. Cloud system initialization The cloud system instance may be launched as a clone of "Debian Official Cloud Images" or similar images. For such system instance, personalities such as hostname, filesystem, networking, locale, SSH keys, users and groups may be configured using     functionalities provided by cloud-init and netplan.io packages with multiple data sources such as files placed in the original system image and external data provided during its launch. These packages enable the declarative system configuration using YAML data. See more at "Cloud Computing with Debian and its descendants",     "Cloud-init documentation" and Secção 5.4, “The modern network configuration for cloud”. 3.7.5. Customization example to tweak sshd service Com uma instalação predefinida, muitos serviços de rede (veja Capítulo 6, Aplicações de rede) são arrancados como processos     daemon após network.target durante o arranque do sistema pelo systemd. O "sshd" não é excepção. Vamos mudar isto para arranque a-pedido do "sshd" como um exemplo de personalização.     Primeiro, desativar a unidade de serviço instalada no sistema.     $ sudo systemctl stop sshd.service $ sudo systemctl mask sshd.service The on-demand socket activation system of the classic Unix     services was through the inetd (or xinetd) superserver. Under systemd, the equivalent can be enabled by adding *.socket and *.service unit configuration files.     sshd.socket para especificar um socket onde escutar [Unit] Description=SSH Socket for Per-Connection Servers [Socket]     ListenStream=22 Accept=yes [Install] WantedBy=sockets.target     sshd@.service como o ficheiro de serviço correspondente do sshd.socket [Unit] Description=SSH Per-Connection Server     [Service] ExecStart=-/usr/sbin/sshd -i StandardInput=socket     Depois reinicie.     $ sudo systemctl daemon-reload 3.8. O sistema udev The udev system provides mechanism for the automatic hardware discovery and initialization (see udev(7)) since Linux kernel 2.6. Upon discovery of each device by the kernel, the udev system     starts a user process which uses information from the sysfs filesystem (see Secção 1.2.12, “procfs e sysfs”), loads required kernel modules supporting it using the modprobe(8) program (see Secção 3.9, “A inicialização de módulos do kernel”), and creates corresponding device nodes. Dica Se "/lib/modules/versão-de-kernel/modules.dep" não foi gerado de modo apropriado pelo depmod(8) por alguma razão, os módulos podem não carregar como esperado pelo sistema udev. Execute "depmod -a"     para o corrigir. Para regras de montagem em "/etc/fstab", os nós de aparelhos não precisam de ser os estáticos. Pode usar o UUID para montar os aparelhos em vez dos nomes de aparelho como "/dev/sda". Veja Secção 9.6.3, “Aceder a partição a usar UUID”. Como o sistema udev é de certa forma um alvo em movimento, deixo     os detalhes para outras documentações e descrevo a informação mínima aqui. Atenção     Don't try to run long running programs such as backup script with RUN in udev rules as mentioned in udev(7). Please create a proper systemd.service(5) file and activate it, instead. See Secção 10.2.3.2, “Mount event triggered backup”. 3.9. A inicialização de módulos do kernel O programa modprobe(8) permite-nos configurar o kernel Linux em execução a partir do processo de utilizador ao adicionar e     remover módulos do kernel. O sistema udev (veja Secção 3.8, “O sistema udev”) automatiza a invocação dele para ajudar na inicialização dos módulos de kernel. Existem módulos de não-hardware e módulos driver de hardware     especial como os seguintes que precisam de ser pré-carregados ao listá-los no ficheiro "/etc/modules" (veja modules(5)). * módulos TUN/TAP que disponibilizam aparelhos de rede Point-to-Point virtuais (TUN) e aparelhos de rede Ethernet virtuais (TAP),     * módulos netfilter que disponibilizam capacidades de firewall netfilter (iptables(8), Secção 5.7, “Infraestrutura netfilter”) e * módulos de driver watchdog timer. Os ficheiros de configuração para o programa modprobe(8) estão localizados sob o diretório "/etc/modprobes.d/" como explicado em     modprobe.conf(5). (Se deseja evitar que alguns módulos do kernel sejam carregados automaticamente, considere metê-los em lista negra no ficheiro "/etc/modprobes.d/blacklist".) O ficheiro "/lib/modules/version/modules.dep" gerado pelo     programa depmod(8) descreve as dependências dos módulos usados pelo programa modprobe(8). Nota     Se tiver problemas com o carregamento de módulos durante o arranque ou com o modprobe(8), "depmod -a" pode resolver esses problemas ao reconstruir "modules.dep".     O programa modinfo(8) mostra informação sobre um módulo do kernel Linux. O programa lsmod(8) formata lindamente o conteúdo de "/proc/     modules" e mostra que módulos do kernel que estão atualmente carregados. Dica Pode identificar o hardware exacto no seu sistema. Veja Secção 9.5.3, “Identificação do hardware”.     Pode configurar o hardware durante o arranque para ativar as funcionalidades esperadas do hardware. Veja Secção 9.5.4, “Configuração do hardware”. Pode provavelmente adicionar suporte para o seu aparelho especial ao recompilar o kernel. Veja Secção 9.10, “O kernel”. Capítulo 4. Authentication and access controls     Quando uma pessoa (ou programa) requer acesso ao sistema, a autenticação confirma a identidade para ser de confiança. Atenção     Erros de configuração do PAM podem trancá-lo fora do seu sistema. Terá de ter um CD de recuperação à mão ou arrancar por uma partição de arranque alternativa. Para recuperar, arranque o sistema com eles e corrija a partir daí. 4.1. Autenticação normal de Unix A autenticação normal de Unix é disponibilizada pelo módulo     pam_unix(8) sob PAM (Pluggable Authentication Modules). Os seus 3 ficheiros de configuração importantes, com entradas separadas por ":", são os seguintes. Tabela 4.1. 3 ficheiros de configuração importantes para pam_unix (8) +---------------------------------------------------------------+ |ficheiro|permissão |utilizador|grupo | descrição | |--------+----------+----------+------+-------------------------| |/etc/ |-rw-r--r--|root |root |informação da conta do |     |passwd | | | |utilizador (filtrada) | |--------+----------+----------+------+-------------------------| |/etc/ |-rw-r-----|root |shadow|informação segura da | |shadow | | | |conta do utilizador | |--------+----------+----------+------+-------------------------| |/etc/ |-rw-r--r--|root |root |informação do grupo | |group | | | | | +---------------------------------------------------------------+     "/etc/passwd" contém o seguinte. ...     user1:x:1000:1000:User1 Name,,,:/home/user1:/bin/bash user2:x:1001:1001:User2 Name,,,:/home/user2:/bin/bash ...     Como explicado em passwd(5), cada entrada separada por ":" neste ficheiro significa o seguinte. * Nome de login * Entrada de especificação de palavra-passe * ID numérico do utilizador     * ID numérico do grupo * Nome de utilizador ou campo de comentários * Directório home do utilizador * Interpretador de comandos opcional do utilizador A segunda entrada de "/etc/passwd" foi utilizada para a entrada     de palavra-passe encriptada. Após a introdução de "/etc/shadow", esta entrada é utilizada para a entrada de especificação da palavra-passe. Tabela 4.2. A segunda entrada no conteúdo de "/etc/passwd" +---------------------------------------------------------+ |conteúdo| significado |     |--------+------------------------------------------------| |(vazio) |conta sem palavra-passe | |--------+------------------------------------------------| |x |a palavra-passe encriptada está em "/etc/shadow"| +---------------------------------------------------------+     "/etc/shadow" contém o seguinte. ...     user1:$1$Xop0FYH9$IfxyQwBe9b8tiyIkt2P4F/:13262:0:99999:7::: user2:$1$vXGZLVbS$ElyErNf/agUDsm1DehJMS/:13261:0:99999:7::: ...     Como explicado em shadow(5), cada entrada separada por ":" neste ficheiro significa o seguinte: * Nome de login * Palavra-passe encriptada (O "$1$" inicial indica o uso de encriptação MD5. O "*" indica nenhum login.) * Data da última alteração da palavra-passe, expressada a quantidade de dias desde 1 de Janeiro de 1970 * Quantidade de dias que o utilizador terá que esperar antes de ser-lhe permitido alterar a palavra-passe outra vez     * Quantidade de dias após os quais o utilizador terá que alterar a palavra passe dele * Quantidade de dias antes de uma palavra-passe expirar durante o qual o utilizador deve ser avisado * Quantidade de dias após uma palavra-passe ter expirador durante os quais a palavra-passe deve ainda ser aceite * Data de expiração de uma conta, expressada como a quantidade de dias desde 1 de Janeiro de 1970 * …     "/etc/group" contém o seguinte.     group1:x:20:user1,user2     Como explicado em grupo(5), cada entrada separada por ":" neste ficheiro significa o seguinte. * Nome do grupo * Palavra-passe encriptada (na realidade não utilizada)     * ID numérico do grupo * lista de nomes de utilizadores, separada por "," Nota     "/etc/gshadow" disponibiliza uma função semelhante à do "/etc/ shadow" para "/etc/group" mas não é realmente usado. Nota     A quantidade real de membros de um grupo de um utilizador pode ser adicionada dinamicamente se a linha "auth optional pam_group.so" for adicionada ao "/etc/pam.d/common-auth" e definida em "/etc/security/group.conf". Veja pam_group(8). Nota     O pacote base-passwd contém uma lista autorizada do utilizador e do grupo: "/usr/share/doc/base-passwd/users-and-groups.html". 4.2. Gerir informação de conta e palavra-passe     Aqui estão alguns comandos notáveis para gerir informação de conta. Tabela 4.3. Lista de comandos para gerir informação de conta +---------------------------------------------------------------+ | comando | função | |-------------------+-------------------------------------------| |getent passwd |navegar na informação da conta de " | |nome_de_utilizador |nome_de_utilizador" | |-------------------+-------------------------------------------| |getent shadow |explorar informação confidencial (shadow) | |nome_de_utilizador |da conta de "nome_de_utilizador | |-------------------+-------------------------------------------|     |getent group |navegar na informação do grupo de " | |nome_de_grupo |nome_do_grupo" | |-------------------+-------------------------------------------| |passwd |gerir a palavra-passe da conta | |-------------------+-------------------------------------------| |passwd -e |definir palavra-passe para uma vez para a | | |activação da conta | |-------------------+-------------------------------------------| |chage |gerir a informação de envelhecimento da | | |palavra-passe | +---------------------------------------------------------------+ Pode necessitar de privilégios de root para algumas funções     funcionarem. Veja crypt(3) pela encriptação de palavra-passe e dados. Nota     Num sistema configurado com PAM e NSS como a máquina salsa de Debian, o conteúdo dos "/etc/passwd", "/etc/group" e "/etc/ shadow" locais pode não ser utilizado activamente pelo sistema. Os comandos em cima são válidos mesmo sob tal ambiente. 4.3. Boa palavra-passe Quando criar uma conta durante a instalação do seu sistema ou com o comando passwd(1), deve escolher uma boa palavra-passe que     consista pelo menos de 6 a 8 caracteres incluindo um ou mais caracteres de cada um dos seguintes conjuntos de acordo com passwd(1). * Alfabéticos de minúsculas     * Dígitos de 0 a 9 * Marcas de pontuação Atenção Não escolha palavras adivinháveis como palavra-passe. O nome de     conta, número de segurança social, número de telefone, endereço, data de nascimento, nomes de membros de família ou de animais, palavras do dicionário, sequências simples de caracteres como "12345" ou "qwerty", ... são todas más escolhas para a palavra-passe. 4.4. Criar palavra-passe encriptada     Existem ferramentas independentes para gerar palavras passe encriptadas com sal. Tabela 4.4. Lista de ferramentas para gerar palavras-passe +---------------------------------------------------------------+ |pacote |popcon|tamanho|comando | função | |-------+------+-------+--------+-------------------------------| | |V:25, | | |frontend cheio de |     |whois |I:251 |387 |mkpasswd|funcionalidades para a | | | | | |biblioteca crypt(3) | |-------+------+-------+--------+-------------------------------| | |V:841,| |openssl |computa hashes de | |openssl|I:995 |2111 |passwd |palavras-passe (OpenSSL). | | | | | |passwd(1ssl) | +---------------------------------------------------------------+ 4.5. PAM e NSS Os sistemas modernos tipo-Unix como o sistema Debian     disponibilizam mecanismos PAM (Pluggable Authentication Modules) e NSS (Name Service Switch) para o administrador local configurar o sistema dele. O papel destes pode ser resumido ao seguinte. * O PAM oferece um mecanismo de autenticação flexível utilizado pelo software de aplicações e assim involve trocas de dados de palavra-passe.     * O NSS oferece um mecanismo de serviço de nomes flexível que é utilizado frequentemente pela biblioteca C standard para obter o nome de utilizador e grupo para programas como o ls (1) e o id(1).     Estes sistemas PAM e NSS necessitam ser configurados de modo consistente.     Os pacotes notáveis dos sistemas PAM e NSS são os seguintes. Tabela 4.5. Lista de sistemas PAM e NSS notáveis +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |-------------------+------+-------+----------------------------| |libpam-modules |V:889,|984 |Pluggable Authentication | | |I:999 | |Modules (serviço básico) | |-------------------+------+-------+----------------------------| | |V:0, | |Pluggable Authentication | |libpam-ldap |I:6 |249 |Module que permite | | | | |interfaces LDAP | |-------------------+------+-------+----------------------------| | |V:0, | |Pluggable Authentication | |libpam-cracklib |I:8 |117 |Module para ativar suporte a| | | | |cracklib | |-------------------+------+-------+----------------------------| | |V:571,| |Pluggable Authentication | |libpam-systemd |I:936 |627 |Module para registar sessões| | | | |de utilizador para o logind | |-------------------+------+-------+----------------------------| | | | |Pluggable Authentication | |libpam-doc |I:0 |152 |Modules (documentação em | | | | |html e texto) | |-------------------+------+-------+----------------------------|     | | | |GNU C Library: Bibliotecas | |libc6 |V:917,|12988 |de partilha que também | | |I:999 | |disponibilizam o serviço | | | | |"Name Service Switch" | |-------------------+------+-------+----------------------------| |glibc-doc |I:8 |3503 |Biblioteca GNU C: Manuais | | | | |(Manpages) | |-------------------+------+-------+----------------------------| | | | |Biblioteca GNU C: Manual de | |glibc-doc-reference|I:4 |13841 |referência em info, pdf e | | | | |html (não-livre) | |-------------------+------+-------+----------------------------| |libnss-mdns |I:510 |141 |Módulo NSS para resolução de| | | | |nomes Multicast DNS | |-------------------+------+-------+----------------------------| | | | |Módulo NSS para utilizar o | |libnss-ldap |I:5 |265 |LDAP como um serviço | | | | |nomeador | |-------------------+------+-------+----------------------------| | | | |Módulo NSS para usar o LDAP | |libnss-ldapd |I:15 |129 |como um serviço nomeador | | | | |(nova bifurcação de | | | | |libnss-ldap) | +---------------------------------------------------------------+ * "O Guia do Administrador do Sistema Linux-PAM" em libpam-doc é essencial para aprender configuração do PAM.     * A secção "System Databases e Name Service Switch" em glibc-doc-reference é essencial para aprender a configuração do NSS. Nota     Pode ver uma lista mais extensa e atual pelo comando "aptitude search 'libpam-|libnss-'". O acrónimo NSS também pode significar "Network Security Service" o que é diferente de "Name Service Switch". Nota     PAM é a maneira mais básica de inicializar variáveis de ambiente para cada programa com o valor predefinido de todo o sistema. Sob systemd, o pacote libpam-systemd é instalado para gerir os     logins de utilizador ao registar as sessões de utilizador na hierarquia do grupo de control do systemd para logind. veja systemd-logind(8), logind.conf(5),e pam_systemd(8). 4.5.1. Ficheiros de configuração acedidos pelo PAM e NSS     Aqui estão alguns ficheiros de configuração notáveis acedidos pelo PAM e NSS. Tabela 4.6. Lista de ficheiros de configuração acedidos pelo PAM e NSS +---------------------------------------------------------------+ | ficheiro de | função | | configuração | | |----------------+----------------------------------------------| |/etc/pam.d/ |defina a configuração do PAM para o programa "| |nome_do_programa|nome_do_programa"; veja pam(7) e pam.d(5) | |----------------+----------------------------------------------| |/etc/ |define a configuração NSS com a entrada para | |nsswitch.conf |cada serviço. Veja nsswitch.conf(5) | |----------------+----------------------------------------------| |/etc/nologin |limita o login de utilizador pelo módulo | | |pam_nologin(8) | |----------------+----------------------------------------------| |/etc/securetty |limita a tty ao acesso de root pelo módulo | | |pam_securetty(8) | |----------------+----------------------------------------------| |/etc/security/ |define limites de acesso pelo módulo | |access.conf |pam_access(8) | |----------------+----------------------------------------------|     |/etc/security/ |define a restrição baseada em grupo pelo | |group.conf |módulo pam_group(8) | |----------------+----------------------------------------------| |/etc/security/ |define as variáveis de ambiente pelo módulo | |pam_env.conf |pam_env(8) | |----------------+----------------------------------------------| |/etc/environment|define variáveis de ambiente adicionais pelo | | |módulo pam_env(8) com o argumento "readenv=1" | |----------------+----------------------------------------------| |/etc/default/ |define o locale pelo módulo pam_env(8) com o | |locale |argumento "readenv=1 envfile=/etc/default/ | | |locale" (Debian) | |----------------+----------------------------------------------| |/etc/security/ |define restrição de recursos (ulimit, core, …)| |limits.conf |pelo módulo pam_linits(8) | |----------------+----------------------------------------------| |/etc/security/ |define a retenção de tempo pelo módulo | |time.conf |pam_time(8) | |----------------+----------------------------------------------| |/etc/systemd/ |define a configuração do gestor de login do | |logind.conf |systemd (veja logind.conf(5) e | | |systemd-logind.service(8)) | +---------------------------------------------------------------+ A limitação da seleção da palavra-passe é implementada pelos     módulos do PAM, pam_unix(8) e pam_cracklib(8). Eles podem ser configurados com os argumentos deles. Dica     Os módulos PAM utilizam o sufixo ".so" para os nomes de ficheiros deles. 4.5.2. O moderno sistema de gestão centralizado A moderna gestão de sistema centralizada pode ser implantada a utilizar o servidor centralizado Lightweight diretory Access     Protocol (LDAP) para administrar muitos sistemas tipo-Unix e não-tipo-Unix na rede. A implementação de código aberto do Lightweight diretory Access Protocol é o Software OpenLDAP. O servidor LDAP disponibiliza para o sistema Debian a informação de conta através do uso de PAM e NSS com os pacotes libpam-ldap e     libnss-ldap. São necessárias várias acções para ativar isto (não utilizei esta configuração e o seguinte é puramente informação secundária. Por favor leia isto neste contexto.). * Configura um servidor LDAP centralizado ao correr um programa como o daemon de LDAP autónomo slapd(8). * Altera os ficheiros de configuração do PAM no diretório "/etc /pam.d/" para utilizar "pam_ldap.so" em vez do predefinido "pam_unix.so". + Debian utiliza "/etc/pam_ldap.conf" como ficheiro de configuração para libpam-ldap e "/etc/pam_ldap.secret" como ficheiro para armazenar a palavra-passe do root. * Altera a configuração do NSS no ficheiro "/etc/nsswitch.conf" para usar "ldap" em vez da predefinição("compat" ou "file").     + Debian utiliza o "/etc/libnss-ldap.conf" como o ficheiro de configuração para libnss-ldap. * Tem de fazer libpam-ldap para usar a ligação SSL (ou TLS) para a segurança da palavra-passe. * Pode fazer a libnss-ldap usar ligação SSL (ou TLS) para assegurar a integridade dos dados à custa de maior sobrecarga da rede LDAP. * Deve correr o nscd(8) localmente para pôr em cache quaisquer resultados de busca LDAP de modo a reduzir o tráfego de rede do LDAP. Veja as documentações em pam_ldap.conf(5) e "/usr/share/doc/     libpam-doc/html/" oferecidas pelo pacote libpam-doc e "info libc 'Name Service Switch'" oferecida pelo pacote glibc-doc.     De modo semelhante, pode configurar sistemas centralizados alternativos com outros métodos. * Integração de utilizador e grupo com o sistema Windows. + Aceda a serviços de domínio Windows com os pacotes winbind e libpam_winbind. + Veja winbindd(8) e Integrar Redes MS Windows com Samba.     * Integração de utilizador e grupo com o sistema antigo tipo-Unix. + Acesso NIS (originalmente chamado YP) ou NIS+ pelo pacote nis. + Veja o Linux NIS(YP)/NYS/NIS+ HOWTO. 4.5.3. "Porque o su do GNU não suporta o grupo wheel" Esta é a famosa frase no fundo da antiga página "info su" por Richard M. Stallman. Não se preocupe, o comando su atual em     Debian utiliza PAM, portanto esse pode recadeiair a habilidade de utilizar su ao grupo root ao ativar a linha com "pam_wheel.so" em "/etc/pam.d/su". 4.5.4. Regras de palavra-passe rigorosas     Installing the libpam-cracklib package enables you to force stricter password rule.     On a typical GNOME system which automatically installs libpam-gnome-keyring, "/etc/pam.d/common-password" looks like: # here are the per-package modules (the "Primary" block) password requisite pam_cracklib.so retry=3 minlen=8 difok=3 password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt # here's the fallback if no module succeeds password requisite pam_deny.so     # prime the stack with a positive return value if there isn't one already; # this avoids us returning an error just because nothing sets a success code # since the modules above will each just jump around password required pam_permit.so # and here are more per-package modules (the "Additional" block) password optional pam_gnome_keyring.so # end of pam-auth-update config 4.6. Segurança da autenticação Nota     A informação aqui pode não ser suficiente para as suas necessidades de segurança, mas deverá ser um bom começo. 4.6.1. Palavra-passe segura na Internet Muitos serviços de transporte populares comunicam mensagens incluindo a a autenticação de palavra-passe em texto simples. É má ideia transmitir as palavras-passe em texto simples pela     Internet onde podem ser interceptadas. Pode correr estes serviços sobre "Transport Layer Security" (TLS) ou o antecessor dele, "Secure Sockets Layer" (SSL) para assegurar toda a comunicação incluindo a palavra-passe pela encriptação. Tabela 4.7. Lista de serviços e portos inseguros e seguros +-----------------------------------------------------------+ |nome do serviço inseguro|porto|nome do serviço seguro|porto| |------------------------+-----+----------------------+-----| |www (http) |80 |https |443 | |------------------------+-----+----------------------+-----| |smtp (mail) |25 |ssmtp (smtps) |465 | |------------------------+-----+----------------------+-----| |ftp-data |20 |ftps-data |989 |     |------------------------+-----+----------------------+-----| |ftp |21 |ftps |990 | |------------------------+-----+----------------------+-----| |telnet |23 |telnets |992 | |------------------------+-----+----------------------+-----| |imap2 |143 |imaps |993 | |------------------------+-----+----------------------+-----| |pop3 |110 |pop3s |995 | |------------------------+-----+----------------------+-----| |ldap |389 |ldaps |636 | +-----------------------------------------------------------+ A encriptação custa tempo de CPU. Como uma alternativa amiga para o CPU, pode manter a comunicação em texto simples enquanto segura apenas a palavra-passe com um protocolo de autenticação de segurança como o "Authenticated Post Office Protocol" (APOP) para POP e "Challenge-Response Authentication Mechanism MD5"     (CRAM-MD5) para SMTP e IMAP. (Para enviar mensagens de mail pela Internet para o seu servidor de mail a partir do seu cliente de mail, recentemente é popular utilizar o porto 587 para submissão de novas mensagens em vez do tradicional porto 25 do SMTP para evitar o bloqueio do porto 25 pelo provedor de Internet enquanto se autentica com CRAM-MD5.) 4.6.2. Shell Segura O programa Secure Shell (SSH) disponibiliza comunicações encriptadas e seguras entre duas máquinas sem confiança sobre uma rede insegura com a autenticação de segurança. Consiste no     cliente OpenSSH, ssh(1) e no daemon OpenSSH, sshd(8). Este SSH pode ser utilizado como túnel de segurança para protocolos de comunicação inseguros como o POP e X pela Internet com a funcionalidade de reencaminhamento de portos. O cliente tenta autenticar-se a si próprio a utilizar autenticação baseada na máquina, autenticação de chave pública,     autenticação por resposta a desafio, ou autenticação por palavra-passe. O uso de autenticação de chave pública activa o login remoto sem-palavra-passe. Veja Secção 6.3, “O servidor de acesso remoto e utilitários (SSH)”. 4.6.3. Medidas de segurança extra para a Internet Even when you run secure services such as Secure Shell (SSH) and Point-to-point tunneling protocol (PPTP) servers, there are still     chances for the break-ins using brute force password guessing attack etc. from the Internet. Use of the firewall policy (see Secção 5.7, “Infraestrutura netfilter”) together with the following security tools may improve the security situation. Tabela 4.8. Lista de ferramentas para disponibilizar medidas de segurança extra +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |-------------+------+-------+----------------------------------| |knockd |V:0, |110 |small port-knock daemon knockd(1) |     | |I:2 | |and client knock(1) | |-------------+------+-------+----------------------------------| |fail2ban |V:98, |2126 |banir IPs que causam vários erros | | |I:111 | |de autenticação | |-------------+------+-------+----------------------------------| |libpam-shield|V:0, |115 |bloquear atacantes remotos que | | |I:0 | |tentam adivinhar a palavra-passe | +---------------------------------------------------------------+ 4.6.4. Tornar a palavra-passe do root segura     Para prevenir que pessoas acedam à sua máquina com privilégios de root, precisa de tomar as seguintes acções. * Prevenir acesso físico ao disco rígido * Lock UEFI/BIOS and prevent booting from the removable media     * Definir palavra-passe para sessão interactiva do GRUB * Bloquear o menu do GRUB de ser editado     Com acesso físico ao disco rígido, redefinir a palavra-passe é relativamente fácil com os seguintes passos. 1. Move the hard disk to a PC with CD bootable UEFI/BIOS. 2. Arrancar o sistema com um suporte de recuperação (disco de arranque Debian, CD Knoppix, CD GRUB, ...).     3. Montar a partição raiz com acesso de leitura/escrita. 4. Editar "/etc/passwd" na partição raiz e esvaziar a segunda entrada para a conta root. Se tiver acesso de edição à entrada do menu do GRUB (veja     Secção 3.1.2, “Estágio 2: o gestor de arranque”) grub-rescue-pc no momento do arranque, é ainda mais fácil com os seguintes passos. 1. Arrancar o sistema com o parâmetro de kernel alterado para algo como "root=/dev/hda6 rw init=/bin/sh".     2. Editar "/etc/passwd" e tornar a segunda entrada para a conta root vazia. 3. Reiniciar o sistema.     A shell de root do sistema está agora acessível sem palavra-passe. Nota Após alguém ter acesso à shell de root, pode aceder a tudo no sistema e reiniciar quaisquer palavras-passe no sistema. Mais     ainda, pode comprometer a palavra-passe para todas as contas de utilizadores a usar ferramentas de crack de palavra-passe por força bruta como os pacotes john e crack (veja Secção 9.5.11, “Segurança do sistema e verificação de integridade”). Esta palavra-passe descoberta pode levar a comprometer outros sistemas. A única solução de software razoável para evitar estas preocupações é usar uma partição raiz encriptada por software (ou     uma partição "/etc" a utilizar dm-crypt e initramfs (veja Secção 9.9, “Dicas de encriptação de dados”). Assim, vai necessitar sempre de palavra-passe para arrancar o sistema. 4.7. Outros controles de acesso     There are access controls to the system other than the password based authentication and file permissions. Nota     Veja Secção 9.4.16, “Tecla Alt-SysRq” para recadeiair a funcionalidade do kernel chave de atenção segura (SAK). 4.7.1. Access control lists (ACLs)     ACLs are a superset of the regular permissions as explained in Secção 1.2.3, “Permissões do sistema de ficheiros”. You encounter ACLs in action on modern desktop environment. When     a formatted USB storage device is auto mounted as, e.g., "/media/ penguin/USBSTICK", a normal user penguin can execute: $ cd /media/penguin $ ls -la     total 16 drwxr-x---+ 1 root root 16 Jan 17 22:55 . drwxr-xr-x 1 root root 28 Sep 17 19:03 .. drwxr-xr-x 1 penguin penguin 18 Jan 6 07:05 USBSTICK "+" in the 11th column indicates ACLs are in action. Without     ACLs, a normal user penguin shouldn't be able to list like this since penguin isn't in root group. You can see ACLs as: $ getfacl . # file: . # owner: root # group: root     user::rwx user:penguin:r-x group::--- mask::r-x other::---     Here: * "user::rwx", "group::---", and "other::---" correspond to the regular owner, group, and other permissions.     * The ACL "user:penguin:r-x" allows a normal user penguin to have "r-x" permissions. This enabled "ls -la" to list directory content. * The ACL "mask::r-x" sets the upper bound of permissions.     See "POSIX Access Control Lists on Linux", acl(5), getfacl(1), and setfacl(1) for more. 4.7.2. sudo O sudo(8) é um programa desenhado para permitir a um administrador de sistema dar privilégios de root limitados a utilizadores e registar a atividade do root. O sudo necessita     apenas da palavra-passe de um utilizador normal. Instale o pacote sudo e active-o ao definir opções em "/etc/sudoers". Veja um exemplo de configuração em "/usr/share/doc/sudo/examples/sudoers" e Secção 1.1.12, “Configuração do sudo”. A minha utilização do sudo para o sistema de único utilizador (veja Secção 1.1.12, “Configuração do sudo”) destina-se a     proteger-me da minha própria estupidez. Pessoalmente, Considero utilizar o sudo uma melhor alternativa do que utilizar o sistema a partir da conta de root a toda a hora. Por exemplo, o seguinte muda o dono de "algum_ficheiro" para "meu_nome".     $ sudo chown my_name some_file Claro que se conhecer a palavra-passe de root (como os     utilizadores de sistemas Debian auto-instalados conhecem), qualquer comando pode ser executado sob root a partir da conta de qualquer utilizador a usar "su -c". 4.7.3. PolicyKit     PolicyKit é um componente do sistema operativo para controlar privilégios a nível global em sistemas operativos tipo-Unix. Aplicações GUI mais recentes não são desenhadas para correr como     processos privilegiados. Estas falam com os processos privilegiados através de PolicyKit para executar operações administrativas.     O PolicyKit limita tais operações a contas de utilizador pertencentes ao grupo sudo no sistema Debian.     Veja polkit(8). 4.7.4. Recadeiair acesso a alguns serviços de servidor Para a segurança do sistema, é uma boa ideia desativar o máximo de programas de serviços possíveis. Isto torna-se crítico em     servidores na rede. Ter servidores não utilizados, activados directamente como daemon ou via programa super-server, são considerados riscos de segurança. Muito programas, como o sshd(8), utilizam controlos de acesso     baseados no PAM. Existem muitas maneiras de restringir o acesso a alguns serviços de servidor. * ficheiros de configuração: "/etc/default/nome_do_programa" * Systemd service unit configuration for daemon * PAM (Pluggable Authentication Modules) * "/etc/inetd.conf" para super-server     * "/etc/hosts.deny" e "/etc/hosts.allow" para wrapper de TCP, tcpd(8) * "/etc/rpc.conf" para RPC da Sun * "/etc/at.allow" e "/etc/at.deny" para atd(8) * "/etc/cron.allow" e "/etc/cron.deny" para crontab(1) * Firewall de Rede da infraestrutura netfilter See Secção 3.5, “System management”, Secção 4.5.1, “Ficheiros de     configuração acedidos pelo PAM e NSS”, and Secção 5.7, “Infraestrutura netfilter”. Dica     os serviços Sun RPC necessitam estar ativos para NFS e outros programas baseados em RPC. Dica     Se tem problemas com acesso remoto num sistema Debian recente, comente configurações ofensivas tais como "ALL: PARANOID" em "/ etc/hosts.deny" se existirem. (Mas tem que ter cuidado com os riscos de segurança envolvidos com este tipo de acção.) 4.7.5. Linux security features     Linux kernel has evolved and supports security features not found in traditional UNIX implementations.     Linux supports extended attributes which extend the traditional UNIX attributes (see xattr(7)). Linux divides the privileges traditionally associated with     superuser into distinct units, known as capabilities(7), which can be independently enabled and disabled. Capabilities are a per-thread attribute since kernel version 2.2. The Linux Security Module (LSM) framework provides a mechanism     for various security checks to be hooked by new kernel extensions. For example: * AppArmor * Security-Enhanced Linux (SELinux)     * Smack (Simplified Mandatory Access Control Kernel) * Tomoyo Linux Since these extensions may tighten privilege model tighter than     the ordinary Unix-like security model policies, even the root power may be restricted. You are advised to read the Linux Security Module (LSM) framework document at kernel.org. Linux namespaces wrap a global system resource in an abstraction that makes it appear to the processes within the namespace that they have their own isolated instance of the global resource.     Changes to the global resource are visible to other processes that are members of the namespace, but are invisible to other processes. Since kernel version 5.6, there are 8 kinds of namespaces (see namespaces(7), unshare(1), nsenter(1)).     As of Debian 11 Bullseye (2021), Debian uses unified cgroup hierarchy (a.k.a. cgroups-v2).     Usage examples of namespaces with cgroups to isolate their processes and to allow resource control are: * Systemd. See Secção 3.2.1, “init do Systemd”.     * Sandbox environment. See Secção 7.7, “Sandbox”. * Linux containers such as Docker, LXC. See Secção 9.11, “Sistema virtualizado”. These functionalities can't be realized by Secção 4.1,     “Autenticação normal de Unix”. These advanced topics are mostly out-of-scope for this introductory document. Capítulo 5. Configuração de rede Dica     Para um guia moderno específico Debian sobre rede, veja O Livro de Mão do Administrador Debian — Configurar a Rede. Dica     Sob systemd, pode ser usado o networkd para gerir as redes. Veja systemd-networkd(8). 5.1. A infra-estrutura de rede básica     Vamos rever a infra-estrutura básica de rede do sistema Debian moderno. Tabela 5.1. Lista de ferramentas de configuração de rede +-------------------------------------------------------------------------+ | pacotes |popcon|tamanho| tipo | descrição | |---------------------+------+-------+-------------------+----------------| | | | | |NetworkManager | |network-manager |V:392,|15542 |config::NM |(daemon): gere a| | |I:459 | | |rede | | | | | |automaticamente | |---------------------+------+-------+-------------------+----------------| | |V:121,| | |NetworkManager | |network-manager-gnome|I:369 |5583 |config::NM |(frontend do | | | | | |GNOME) | |---------------------+------+-------+-------------------+----------------| | | | | |Netplan | | | | | |(generator): | | | | | |Unified, | | |V:1, | | |declarative | |netplan.io |I:5 |319 |config::NM+networkd|interface to | | | | | |NetworkManager | | | | | |and | | | | | |systemd-networkd| | | | | |backends | |---------------------+------+-------+-------------------+----------------| | | | | |ferramenta | | | | | |standard para | |ifupdown |V:608,|199 |config::ifupdown |ativar e | | |I:979 | | |desativar a rede| | | | | |(especifico de | | | | | |Debian) | |---------------------+------+-------+-------------------+----------------| |isc-dhcp-client |V:217,|2875 |config::low-level |Cliente DHCP | | |I:981 | | | | |---------------------+------+-------+-------------------+----------------| | | | | |ajudante de | |pppoeconf |V:0, |186 |config::helper |configuração | | |I:5 | | |para ligação | | | | | |PPPoE | |---------------------+------+-------+-------------------+----------------| | | | | |suporte de | |wpasupplicant |V:353,|3862 |config::helper |cliente para WPA| | |I:513 | | |e WPA2 (IEEE | | | | | |802.11i) | |---------------------+------+-------+-------------------+----------------| | |V:0, | | |Cliente GUI Qt | |wpagui |I:1 |774 |config::helper |para o | | | | | |wpa_supplicant | |---------------------+------+-------+-------------------+----------------| | | | | |ferramentas para| | |V:179,| | |manipular | |wireless-tools |I:244 |292 |config::helper |Extensões | | | | | |Wireless do | | | | | |Linux | |---------------------+------+-------+-------------------+----------------| | | | | |tool for | |iw |V:34, |302 |config::helper |configuring | | |I:475 | | |Linux wireless | | | | | |devices | |---------------------+------+-------+-------------------+----------------| | | | | |iproute2, IPv6 e| | | | | |outras | |iproute2 |V:736,|3606 |config::iproute2 |configurações | | |I:972 | | |avançadas de | | | | | |rede: ip(8), tc | | | | | |(8), etc | |---------------------+------+-------+-------------------+----------------| | | | | |ferramentas | | |V:319,| | |administrativas | |iptables |I:718 |2414 |config::Netfilter |para filtragem | | | | | |de pacotes e NAT| | | | | |(Netfilter) | |---------------------+------+-------+-------------------+----------------| | | | | |administration | | | | | |tools for packet| | |V:106,| | |filtering and | |nftables |I:701 |182 |config::Netfilter |NAT (Netfilter) | | | | | |(successor to | | | | | |{ip,ip6,arp,eb} | | | | | |tables) | |---------------------+------+-------+-------------------+----------------| | | | | |teste de | | | | | |acessibilidade | | | | | |de rede de uma | |iputils-ping |V:194,|122 |test |máquina remota | | |I:997 | | |pelo | | | | | |nome-de-máquina | | | | | |ou endereço IP | | | | | |(iproute2) |     |---------------------+------+-------+-------------------+----------------| | | | | |teste de | | | | | |acessibilidade | | |V:3, | | |de rede de uma | |iputils-arping |I:36 |50 |test |máquina remota | | | | | |especificado | | | | | |pelo endereço | | | | | |ARP | |---------------------+------+-------+-------------------+----------------| | | | | |rastreia o | |iputils-tracepath |V:2, |47 |test |caminho de rede | | |I:30 | | |até uma máquina | | | | | |remota | |---------------------+------+-------+-------------------+----------------| | | | | |mostra ou altera| |ethtool |V:95, |739 |test |as definições de| | |I:267 | | |um aparelho | | | | | |Ethernet | |---------------------+------+-------+-------------------+----------------| | | | | |rastreia o | |mtr-tiny |V:5, |156 |test::low-level |caminho de rede | | |I:46 | | |até uma máquina | | | | | |remota (curses) | |---------------------+------+-------+-------------------+----------------| | | | | |rastreia o | | |V:4, | | |caminho de rede | |mtr |I:41 |209 |test::low-level |até uma máquina | | | | | |remota (curses e| | | | | |GTK) | |---------------------+------+-------+-------------------+----------------| | | | | |ferramentas para| |gnome-nettool |V:0, |2492 |test::low-level |operações comuns| | |I:17 | | |de informação de| | | | | |rede (GNOME) | |---------------------+------+-------+-------------------+----------------| | | | | |mapeamento de | |nmap |V:25, |4498 |test::low-level |rede / sondagem | | |I:199 | | |de portos (Nmap,| | | | | |consola) | |---------------------+------+-------+-------------------+----------------| | | | | |analisador de | |tcpdump |V:17, |1340 |test::low-level |tráfego de rede | | |I:175 | | |(Tcpdump, | | | | | |consola) | |---------------------+------+-------+-------------------+----------------| | | | | |analisador de | |wireshark |I:45 |10417 |test::low-level |tráfego de rede | | | | | |(Wireshark, GTK)| |---------------------+------+-------+-------------------+----------------| | |V:2, | | |analisador de | |tshark |I:25 |400 |test::low-level |tráfego de rede | | | | | |(consola) | |---------------------+------+-------+-------------------+----------------| | | | | |produz um | | |V:0, | | |sumário das | |tcptrace |I:2 |401 |test::low-level |ligações a | | | | | |partir da saída | | | | | |do tcpdump | |---------------------+------+-------+-------------------+----------------| | | | | |sistema flexível| |snort |V:0, |2203 |test::low-level |de detecção de | | |I:0 | | |intrusos na rede| | | | | |(Snort) | |---------------------+------+-------+-------------------+----------------| | | | | |mostra a | |ntopng |V:0, |15904 |test::low-level |utilização da | | |I:1 | | |rede num | | | | | |navegador web | |---------------------+------+-------+-------------------+----------------| | | | | |clientes de rede| | | | | |disponibilizados| |dnsutils |V:16, |276 |test::low-level |com BIND: | | |I:280 | | |nslookup(8), | | | | | |nsupdate(8), dig| | | | | |(8) | |---------------------+------+-------+-------------------+----------------| | | | | |verifica | | | | | |informação de | |dlint |V:0, |53 |test::low-level |zona DNS a usar | | |I:3 | | |pesquisas do | | | | | |servidor de | | | | | |nomes | |---------------------+------+-------+-------------------+----------------| | | | | |rastreia uma | |dnstracer |V:0, |59 |test::low-level |cadeia de | | |I:1 | | |servidores DNS | | | | | |até à fonte | +-------------------------------------------------------------------------+ 5.1.1. A resolução de nome de máquina A resolução de nome de máquina também é suportada atualmente pelo     mecanismo NSS (Name Service Switch). O fluxo desta resolução é o seguinte. 1. O ficheiro "/etc/nsswitch.conf" com "hosts: files dns" dicta a ordem de resolução do nome de máquina. (Isto substitui a funcionalidade antiga de "order" em "/etc/host.conf".) 2. O método files é invocado primeiro. Se o nome de máquina for encontrado no ficheiro "/etc/hosts", devolve um endereço     válido e termina. (O ficheiro "/etc/host.conf" contém "multi on".) 3. O método dns é invocado. Se o nome de máquina é encontrado pela consulta ao Internet Domain Name System (DNS) identificado pelo ficheiro "/etc/resolv.conf", devolve-le um endereço válido e termina. A typical workstation may be installed with its host name set to,     e.g., "host_name" and its optional domain name set to an empty string. Then, "/etc/hosts" looks like the following. 127.0.0.1 localhost 127.0.1.1 host_name     # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters     Cada linha começa por um endereço IP e é seguida pelo hostname associado. O endereço IP 127.0.1.1 na segunda linha deste exemplo pode não ser encontrada nalguns outros sistemas tipo-Unix. O Instalador     Debian cria esta entrada para um sistema sem um endereço IP permanente como contenção para algum software (p.e., GNOME) conforme é documentado no bug #719621.     The host_name matches the hostname defined in the "/etc/hostname" (see Secção 3.7.1, “O nome da máquina”).     Para um sistema com um endereço IP permanente, esse endereço IP permanente deve ser utilizado aqui em vez do 127.0.1.1. Para um sistema com um endereço IP permanente e um nome de     domínio totalmente qualificado (FQDN) disponibilizado pelo Sistema de Nomes de Domínio (DNS), o nome_máquina e nome_domínio canónicos devem ser utilizados em vez de apenas nome_máquina. O "/etc/resolv.conf" é um ficheiro estático se o pacote resolvconf não estiver instalado. Se instalado, é uma ligação     simbólica. De qualquer modo, contém informação que inicializa as rotinas de resolução de nomes. Se o DNS existir no IP= "192.168.11.1", contém o seguinte.     nameserver 192.168.11.1 O pacote resolvconf faz deste "/etc/resolv.conf" uma ligação     simbólica e gere o conteúdo dele automaticamente pelos scripts hook. For the PC workstation on the typical adhoc LAN environment, the     hostname can be resolved via Multicast DNS (mDNS) in addition to the basic files and dns methods. * Avahi disponibiliza uma infraestrutura para Multicast DNS Service Discovery em Debian. * É o equivalente de Apple Bonjour / Apple Rendezvous. * O pacote de plugin libnss-mdns disponibiliza resolução de nomes de máquinas via mDNS para a funcionalidade Name Service Switch (NSS) do GNU da Biblioteca C do GNU (glibc).     * The "/etc/nsswitch.conf" file should have stanza like "hosts: files mdns4_minimal [NOTFOUND=return] dns" (see /usr/share/ doc/libnss-mdns/README.Debian for other configurations). * A host name suffixed with the ".local" pseudo-top-level domain is resolved by sending a mDNS query message in a multicast UDP packet using IPv4 address "224.0.0.251" or IPv6 address "FF02::FB". Nota     A expansão Top-Level Domains genéricos (gTLD) no Domain Name System está em desenvolvimento. Tenha cuidado com a colisão de nomes quando escolher um nome de domínio usado apenas dentro da LAN. Nota Use of packages such as libnss-resolve together with systemd-resolved, or libnss-myhostname, or libnss-mymachine, with     coressponding listings on the "hosts" line in the "/etc/ nsswitch.conf" file may override the traditional network configuration discussed in the above. See nss-resolve(8), systemd-resolved(8), nss-myhostname(8), and nss-mymachines(8) for more. 5.1.2. O nome da interface de rede     The systemd uses "Predictable Network Interface Names" such as "enp0s25". 5.1.3. A gama de endereços de rede para a LAN Vamos nos lembrar das gamas de endereços do IPv4 de 32 bits em     cada classe reservada para utilização em redes de área local (LANs) pelo rfc1918. É garantido que estes endereços não estejam em conflito com quaisquer endereços na Internet. Nota     IP address written with colon are IPv6 address, e.g., "::1" for localhost. Tabela 5.2. Lista de gamas de endereços de rede +---------------------------------------------------------------+ |Classe|endereços de rede| máscara de | máscara de |number of | | | | rede | rede /bits | subnets | |------+-----------------+-------------+-------------+----------| |A |10.x.x.x |255.0.0.0 |/8 |1 |     |------+-----------------+-------------+-------------+----------| |B |172.16.x.x — |255.255.0.0 |/16 |16 | | |172.31.x.x | | | | |------+-----------------+-------------+-------------+----------| |C |192.168.0.x — |255.255.255.0|/24 |256 | | |192.168.255.x | | | | +---------------------------------------------------------------+ Nota Se for atribuído um destes endereços a uma máquina, então essa     máquina não poderá aceder à Internet directamente mas terá de aceder através de uma gateway que age como um proxy para serviços individuais ou então fará Network Address Translation(NAT). O router de banda larga geralmente executa NAT para o ambiente LAN do consumidor. 5.1.4. O suporte a aparelhos de rede Apesar da maioria dos aparelhos de hardware serem suportados pelo     sistema Debian, existem alguns aparelhos de rede que necessitam de firmware não-livre DFSG para os suportar. Por favor veja Secção 9.10.5, “Controladores de hardware e firmware”. 5.2. A configuração moderna de rede para desktop As interfaces de rede são tipicamente iniciadas em     "networking.service" para a interface lo e "NetworkManager.service" para as outras interfaces em sistemas Debian modernos sob systemd. Debian can manage the network connection via management daemon     software such as NetworkManager (NM) (network-manager and associated packages). * Vêm com as suas próprias GUIs e programas de linha de comandos como as suas interfaces de utilizador. * Vêm com os daemons próprios como os backends deles.     * Permitem uma ligação fácil do seu sistema à Internet. * Permitem gestão fácil de configuração de redes com e sem fios. * Permitem-nos configurar a rede independentemente do pacote legacy ifupdown. Nota     Não utilize estas ferramentas de configuração de rede automáticas em servidores. Estas são destinadas principalmente para os utilizadores móveis em portáteis. Estas ferramentas modernas de configuração de rede necessitam ser     correctamente configuradas para evitar entrarem em conflito com o pacote legacy ifupdown e o ficheiro de configuração dele "/etc/ network/interfaces". 5.2.1. Ferramentas GUI de configuração de rede     Official documentations for NM on Debian are provided in "/usr/ share/doc/network-manager/README.Debian".     Essencialmente, a configuração de rede para desktop é feita como a seguir. 1. Tornar o utilizador de ambiente de trabalho, p.e. foo, pertencente ao grupo "netdev" com o seguinte (Em alternativa, em ambientes de trabalho modernos como o GNOME e o KDE, faça-o automaticamente através de D-bus). $ sudo usermod -a -G foo netdev 2. Mantenha a configuração de "/etc/network/interfaces" tão     simples como o seguinte. auto lo iface lo inet loopback 3. Restart NM by the following. $ sudo systemctl restart network-manager 4. Configure a sua rede através da GUI. Nota     Only interfaces which are not listed in "/etc/network/interfaces" are managed by NM to avoid conflict with ifupdown. Dica If you wish to extend network configuration capabilities of NM,     please seek appropriate plug-in modules and supplemental packages such as network-manager-openconnect, network-manager-openvpn-gnome, network-manager-pptp-gnome, mobile-broadband-provider-info, gnome-bluetooth, etc. 5.3. A moderna configuração de rede sem GUI Sob systemd, a rede pode ser configurada em /etc/systemd/network     /. Veja systemd-resolved(8), resolved.conf(5) e systemd-networkd (8).     Isto permite a configuração moderna de rede sem GUI.     Uma configuração de cliente DHCP pode ser definida ao criar /etc/ systemd/network/dhcp.network". Ex.: [Match] Name=en*     [Network] DHCP=yes     Uma configuração de rede estática pode ser definida ao criar "/ etc/systemd/network/static.network". Ex.: [Match] Name=en*     [Network] Address=192.168.0.15/24 Gateway=192.168.0.1 5.4. The modern network configuration for cloud The modern network configuration for cloud may use cloud-init and     netplan.io packages (see Secção 3.7.4, “Cloud system initialization”). The netplan.io package supports systemd-networkd and     NetworkManager as its network configuration backends, and enables the declarative network configuration using YAML data. When you change YAML: * Run "netplan generate" command to generate all the necessary backend configuration from YAML.     * Run "netplan apply" command to apply the generated configuration to the backends.     See "Netplan documentation", netplan(5), netplan-generate(8), and netplan-apply(8). See also "Cloud-init documentation" (especially around     "Configuration sources" and "Netplan Passthrough") for how cloud-init can integrate netplan.io configuration with alternative data sources. 5.4.1. The modern network configuration for cloud with DHCP     A DHCP client configuration can be set up by creating a data source file "/etc/netplan/50-dhcp.yaml": network: version: 2 ethernets:     all-en: match: name: "en*" dhcp4: true dhcp6: true 5.4.2. The modern network configuration for cloud with static IP     A static network configuration can be set up by creating a data source file "/etc/netplan/50-static.yaml": network: version: 2 ethernets: eth0:     addresses: - 192.168.0.15/24 routes: - to: default via: 192.168.0.1 5.4.3. The modern network configuration for cloud with Network Manager The network client configuration using Network Manager     infrastructure can be set up by creating a data source file "/etc /netplan/00-network-manager.yaml": network:     version: 2 renderer: NetworkManager 5.5. A configuração de rede de baixo nível     For the low level network configuration on Linux, use the iproute2 programs (ip(8), …) . 5.5.1. Comandos iproute2 Os comandos Iproute2 oferecem capacidades completas de     configuração de rede de baixo nível. Aqui está uma tabela de traduções dos comandos net-tools obsoletos para os novos comandos iproute2 etc. Tabela 5.3. Tabela de tradução dos comandos obsoletos net-tools para os novos comandos iproute2 +---------------------------------------------------------------+ | ferramentas de | novo | | | rede obsoletas | iproute2 | manipulação | | | etc. | | |------------------+-----------+--------------------------------| |ifconfig(8) |ip addr |endereço de protoco (IP ou IPv6)| | | |num aparelho | |------------------+-----------+--------------------------------| |route(8) |ip route |entrada na tabela de rotas |     |------------------+-----------+--------------------------------| |arp(8) |ip neigh |entrada na cache ARP ou NDISC | |------------------+-----------+--------------------------------| |ipmaddr |ip maddr |endereço multicast | |------------------+-----------+--------------------------------| |iptunnel |ip tunnel |túnel sobre IP | |------------------+-----------+--------------------------------| |nameif(8) |ifrename(8)|nomeia as interfaces de rede | | | |baseadas no endereço MAC | |------------------+-----------+--------------------------------| |mii-tool(8) |ethtool(8) |Definições de aparelho Ethernet | +---------------------------------------------------------------+     See ip(8) and Linux Advanced Routing & Traffic Control. 5.5.2. Operações de rede seguras de baixo nível     Pode usar comandos de rede de baixo nível como a seguir em segurança pois eles não mudam a configuração de rede. Tabela 5.4. Lista de comandos de rede de baixo nível +---------------------------------------------------------------+ | comando | descrição | |---------------------+-----------------------------------------| |ip addr show |mostra o estado de ligação e endereço das| | |interfaces ativas | |---------------------+-----------------------------------------| |route -n |mostra toda a tabela de rotas em | | |endereços numéricos | |---------------------+-----------------------------------------| |ip route show |mostra toda a tabela de rotas em | | |endereços numéricos | |---------------------+-----------------------------------------| |arp |mostra o conteúdo atual das tabelas de | | |cache ARP | |---------------------+-----------------------------------------| |ip neigh |mostra o conteúdo atual das tabelas de | | |cache ARP | |---------------------+-----------------------------------------| |plog |mostra o log do daemon ppp | |---------------------+-----------------------------------------| |ping yahoo.com |verifica a ligação de Internet para | | |"yahoo.com" | |---------------------+-----------------------------------------| |whois yahoo.com |verifica quem registou "yahoo.com" na |     | |base de dados de domínios | |---------------------+-----------------------------------------| |traceroute yahoo.com |rastreia a ligação Internet até | | |"yahoo.com" | |---------------------+-----------------------------------------| |tracepath yahoo.com |rastreia a ligação Internet até | | |"yahoo.com" | |---------------------+-----------------------------------------| |mtr yahoo.com |rastreia a ligação Internet até | | |"yahoo.com" (repetidamente) | |---------------------+-----------------------------------------| |dig |verifica os registos DNS de "exemplo.com"| |[@servidor-dns.com] |pelo "servidor-dns.com" para um registo | |exemplo.com [{a|mx| |"a", "mx", ou "any" | |any}] | | |---------------------+-----------------------------------------| |iptables -L -n |verifica o filtro de pacotes | |---------------------+-----------------------------------------| |netstat -a |procura todos os portos abertos | |---------------------+-----------------------------------------| |netstat -l --inet |procura portos a escutar | |---------------------+-----------------------------------------| |netstat -ln --tcp |procura portos TCP a escutar (numérico) | |---------------------+-----------------------------------------| |dlint exemplo.com |verifica a informação da zona DNS de | | |"exemplo.com" | +---------------------------------------------------------------+ Dica     Algumas destas ferramentas de configuração de baixo nível residem em "/usr/sbin/". Pode necessitar de escrever o caminho do comando completo tal como "/usr/sbin/ifconfig" ou adicionar "/usr/sbin" à lista "$PATH" no seu "~/.bashrc". 5.6. Optimização da rede A optimização de rede genérica está para além do objetivo desta     documentação. Apenas toco em assuntos pertinentes às ligações de grau de consumidor. Tabela 5.5. Lista de ferramentas de optimização de rede +---------------------------------------------------------------+ | pacotes |popcon|tamanho| descrição | |---------+------+-------+--------------------------------------| | |V:7, | |mostra informação da utilização de | |iftop |I:100 |93 |largura de banda numa interface de | | | | |rede | |---------+------+-------+--------------------------------------| |iperf |V:3, |360 |ferramenta de medição da largura de | | |I:43 | |banda do Protocolo Internet | |---------+------+-------+--------------------------------------| |ifstat |V:0, |60 |InterFace STATistics Monitoring | | |I:7 | | | |---------+------+-------+--------------------------------------| |bmon |V:1, |144 |monitor de largura de banda portável e| | |I:18 | |estimador de taxas |     |---------+------+-------+--------------------------------------| | |V:0, | |script que mede rapidamente a | |ethstatus|I:3 |40 |transferência efectiva de um aparelho | | | | |de rede | |---------+------+-------+--------------------------------------| |bing |V:0, |80 |testador de largura de banda empírica | | |I:0 | |estocástica | |---------+------+-------+--------------------------------------| |bwm-ng |V:1, |95 |monitor de largura de banda pequeno e | | |I:13 | |simples baseado em consola | |---------+------+-------+--------------------------------------| |ethstats |V:0, |23 |monitor de estatísticas de Ethernet | | |I:0 | |baseado em consola | |---------+------+-------+--------------------------------------| |ipfm |V:0, |82 |ferramenta de análise de largura de | | |I:0 | |banda | +---------------------------------------------------------------+ 5.6.1. Encontrar o MTU óptimo     NM normally sets optimal Maximum Transmission Unit (MTU) automatically. In some occasion, you may wish to set MTU manually after experiments with ping(8) with "-M do" option to send a ICMP packet with various data packet size. MTU is the maximum     succeeding data packet size without IP fragmentation plus 28 bytes for the IPv4 and plus 48 bytes for the IPv6. For example the following finds MTU for IPv4 connection to be 1460 and MTU for IPv6 connection to be 1500. $ ping -4 -c 1 -s $((1500-28)) -M do www.debian.org PING (149.20.4.15) 1472(1500) bytes of data. ping: local error: message too long, mtu=1460 --- ping statistics --- 1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms $ ping -4 -c 1 -s $((1460-28)) -M do www.debian.org PING (130.89.148.77) 1432(1460) bytes of data. 1440 bytes from klecker-misc.debian.org (130.89.148.77): icmp_seq=1 ttl=50 time=325 ms     --- ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 325.318/325.318/325.318/0.000 ms $ ping -6 -c 1 -s $((1500-48)) -M do www.debian.org PING www.debian.org(mirror-csail.debian.org (2603:400a:ffff:bb8::801f:3e)) 1452 data bytes 1460 bytes from mirror-csail.debian.org (2603:400a:ffff:bb8::801f:3e): icmp_seq=1 ttl=47 time=191 ms --- www.debian.org ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 191.332/191.332/191.332/0.000 ms     Este processo é a descoberta do Caminho MTU (PMTU) (RFC1191) e o comando tracepath(8) pode automatizar isto. Tabela 5.6. Regras básicas para o valor MTU óptimo +---------------------------------------------------------------+ | ambiente de rede |MTU | racional |     |-----------------------------------+----+----------------------| |Ligação Dial-up (IP: PPP) |576 |standard | |-----------------------------------+----+----------------------| |Ligação Ethernet (IP: DHCP ou fixo)|1500|standard e predefinido| +---------------------------------------------------------------+     In addition to these basic guide lines, you should know the following. * Qualquer utilização de métodos de túnel (VPN etc.) pode reduzir o MTU óptimo pelo excesso que adicionam.     * O valor MTU não deve exceder o valor PMTU determinado experimentalmente. * O maior valor MTU é geralmente melhor quando são conhecidas outras limitações. O tamanho de segmento máximo (MSS) é usado como uma alternativa     ao tamanho do pacote. As relações entre MSS e MTU são as seguintes. * MSS = MTU - 40 para IPv4     * MSS = MTU - 60 para IPv6 Nota     A optimização baseada no iptables(8) (veja Secção 5.7, “Infraestrutura netfilter”) pode apertar o tamanho do pacote pelo MSS e é útil para o router. Veja "TCPMSS" em iptables(8). 5.6.2. Optimização WAN TCP The TCP throughput can be maximized by adjusting TCP buffer size parameters as in "TCP tuning" for the modern high-bandwidth and     high-latency WAN. So far, the current Debian default settings serve well even for my LAN connected by the fast 1G bps FTTP service. 5.7. Infraestrutura netfilter Netfilter disponibiliza uma infra-estrutura para firewall de     estado e tradução de endereços de rede (NAT) com módulos do kernel Linux (veja Secção 3.9, “A inicialização de módulos do kernel”). Tabela 5.7. Lista de ferramentas de firewall +---------------------------------------------------------------+ | pacotes |popcon|tamanho| descrição | |---------------+------+-------+--------------------------------| | | | |administration tools for packet | |nftables |V:106,|182 |filtering and NAT (Netfilter) | | |I:701 | |(successor to {ip,ip6,arp,eb} | | | | |tables) | |---------------+------+-------+--------------------------------| | |V:319,| |ferramentas de administração | |iptables |I:718 |2414 |para netfilter (iptables(8) para| | | | |IPv4, ip6tables(8) para IPv6) | |---------------+------+-------+--------------------------------| | |V:0, | |ferramentas de administração | |arptables |I:1 |100 |para netfilter (arptables(8) | | | | |para ARP) | |---------------+------+-------+--------------------------------| | |V:14, | |ferramentas de administração | |ebtables |I:29 |276 |para netfilter (ebtables(8) para| | | | |criação de pontes Ethernet) | |---------------+------+-------+--------------------------------| | |V:0, | |monitoriza continuamente o | |iptstate |I:2 |119 |estado do netfilter (semelhante | | | | |ao top(1)) | |---------------+------+-------+--------------------------------| | |V:55, | |Uncomplicated Firewall (UFW) is | |ufw |I:77 |859 |a program for managing a | | | | |netfilter firewall |     |---------------+------+-------+--------------------------------| |gufw |V:5, |3660 |graphical user interface for | | |I:10 | |Uncomplicated Firewall (UFW) | |---------------+------+-------+--------------------------------| | |V:11, | |firewalld is a dynamically | |firewalld |I:16 |2613 |managed firewall program with | | | | |support for network zones | |---------------+------+-------+--------------------------------| |firewall-config|V:0, |1163 |graphical user interface for | | |I:3 | |firewalld | |---------------+------+-------+--------------------------------| |shorewall-init |V:0, |88 |Inicialização de Shoreline | | |I:0 | |Firewall | |---------------+------+-------+--------------------------------| | |V:3, | |Shoreline Firewall, gerador de | |shorewall |I:8 |3090 |ficheiro de configuração | | | | |netfilter | |---------------+------+-------+--------------------------------| | |V:0, | |Shoreline Firewall, gerador de | |shorewall-lite |I:0 |71 |ficheiro de configuração (versão| | | | |leve) netfilter | |---------------+------+-------+--------------------------------| | |V:0, | |Shoreline Firewall, gerador de | |shorewall6 |I:1 |1334 |ficheiro de configuração (versão| | | | |IPv6) netfilter | |---------------+------+-------+--------------------------------| | |V:0, | |Shoreline Firewall, gerador de | |shorewall6-lite|I:0 |71 |ficheiro de configuração (IPv6, | | | | |versão light) netfilter | +---------------------------------------------------------------+ O principal programa de utilizador para o netfilter é o iptables (8). Pode configurar manualmente e interativamente o netfilter a     partir da shell, gravar o estado dele com iptables-save(8) e restaurá-lo via script init com iptables-restore(8) após o reiniciar do sistema.     Scripts de ajuda de configuração como o shorewall facilitam este processo.     See documentations at Netfilter Documentation (or in "/usr/share/ doc/iptables/html/"). * Manual de Conceitos de Rede em Linux     * Manual do Packet Filtering em Linux 2.4 * Como Fazer NAT em Linux 2.4 Dica     Apesar destes terem sido escritos para o Linux 2.4, ambos comandos iptables(8) e função de kernel netfilter aplicam-se às séries 2.6 e 3.x do kernel Linux. Capítulo 6. Aplicações de rede     Após estabelecer a ligação de rede (veja Capítulo 5, Configuração de rede), pode executar varias aplicações de rede. Dica     Para um guia moderno específico Debian para a infraestrutura de rede, leia O Livro de Mão do Administrador Debian — Infrastructure de Rede. Dica     Se ativar a "Verificação de 2 Passos" com alguns ISP, precisa de obter uma palavra-passe de aplicação para aceder aos serviços POP e SMTP do seu programa. Pode precisar de aprovar o seu IP de máquina com antecedência. 6.1. Navegadores web     Existem muitos pacotes de navegadores web para aceder a conteúdos remotos com Hypertext Transfer Protocol (HTTP). Tabela 6.1. Lista de exploradores web +---------------------------------------------------------------+ | pacote |popcon|tamanho| tipo | descrição do | | | | | | explorador web | |----------------+------+-------+--------+----------------------| |chromium |V:35, |234084 |X |Chromium, (browser | | |I:108 | | |open-source da Google)| |----------------+------+-------+--------+----------------------| | | | | |Firefox, (navegador de| | |V:10, | | |código aberto da | |firefox |I:15 |239492 |, , |Mozilla, apenas | | | | | |disponível no Debian | | | | | |Unstable) | |----------------+------+-------+--------+----------------------| | |V:198,| | |Firefox ESR, | |firefox-esr |I:435 |228981 |, , |(Lançamento de Suporte| | | | | |Estendido do Firefox) | |----------------+------+-------+--------+----------------------| |epiphany-browser|V:3, |2154 |, , |GNOME, HIG compliant, | | |I:15 | | |Epiphany |     |----------------+------+-------+--------+----------------------| |konqueror |V:24, |25905 |, , |KDE, Konqueror | | |I:106 | | | | |----------------+------+-------+--------+----------------------| |dillo |V:0, |1565 |, , |Dillo, (navegador | | |I:5 | | |leve, baseado em FLTK)| |----------------+------+-------+--------+----------------------| |w3m |V:15, |2837 |texto |w3m | | |I:187 | | | | |----------------+------+-------+--------+----------------------| |lynx |V:25, |1948 |, , |Lynx | | |I:344 | | | | |----------------+------+-------+--------+----------------------| |elinks |V:3, |1654 |, , |ELinks | | |I:20 | | | | |----------------+------+-------+--------+----------------------| |links |V:3, |2314 |, , |Ligações (apenas | | |I:28 | | |texto) | |----------------+------+-------+--------+----------------------| |links2 |V:1, |5492 |gráficos|Ligações (gráficos de | | |I:12 | | |consola sem X) | +---------------------------------------------------------------+ 6.1.1. Spoofing the User-Agent string In order to access some overly restrictive web sites, you may     need to spoof the User-Agent string returned by the web browser program. See: * MDN Web Docs: userAgent * Chrome Developers: Override the user agent string * How to change your user agent     * How to Change User-Agent in Chrome, Firefox, Safari, and more * How to Change Your Browser’s User Agent Without Installing Any Extensions * How to change the User Agent in Gnome Web (epiphany) Cuidado     Uma cadeia user-agent enganada pode causar maus efeitos colaterais com Java. 6.1.2. Browser extension     All modern GUI browsers support source code based browser extension and it is becoming standardized as web extensions. 6.2. O sistema de correio electrónico (mail)     This section focuses on typical mobile workstations on consumer grade Internet connections. Cuidado     Se estiver a configurar um servidor de mail para trocar mail directamente com a Internet, deverá fazer melhor do que ler esta documentação elementar. 6.2.1. Noções básicas de mail     Uma mensagem de email consiste em três componentes, o envelope da mensagem, o cabeçalho da mensagem e o corpo da mensagem. * A informação "To" e "From" no envelope da mensagem é utilizada pelo SMTP para entregar o email. (A informação de "From" no envelope da mensagem também é chamada de endereço bounce, From_, etc.). * A informação "To" e "From" no cabeçalho da mensagem é     mostrada pelo cliente de email. (Embora seja vulgar que sejam os mesmo do envelope da mensagem nem sempre é o caso.) * The email message format covering header and body data is extended by Multipurpose Internet Mail Extensions (MIME) from the plain ASCII text to other character encodings, as well as attachments of audio, video, images, and application programs.     Full featured GUI based email clients offer all the following functions using the GUI based intuitive configuration. * It creates and interprets the message header and body data using Multipurpose Internet Mail Extensions (MIME) to deal the content data type and encoding. * It authenticates itself to the ISP's SMTP and IMAP servers using the legacy basic access authentication or modern OAuth 2.0. (For OAuth 2.0, set it via Desktop environment settings. E.g., "Settings" -> "Online Accounts".)     * It sends the message to the ISP's smarthost SMTP server listening to the message submission port (587). * It receives the stored message on the ISP's server from the TLS/IMAP4 port (993). * It can filter mails by their attributes. * It may offer additional functionalities: Contacts, Calendar, Tasks, Memos. Tabela 6.2. Lista de agentes utilizador de mail (MUA) +---------------------------------------------------------------+ | pacote |popcon|tamanho| tipo | |-----------+------+-------+------------------------------------| |evolution |V:30, |486 |Programa de GUI X (GNOME3, conjunto | | |I:239 | |groupware) | |-----------+------+-------+------------------------------------| |thunderbird|V:48, |224760 |X GUI program (GTK, Mozilla | | |I:119 | |Thunderbird) |     |-----------+------+-------+------------------------------------| |kmail |V:38, |23871 |Programa de GUI X (KDE) | | |I:97 | | | |-----------+------+-------+------------------------------------| |mutt |V:16, |7104 |programa de terminal de caracteres | | |I:149 | |provavelmente usado com o vim | |-----------+------+-------+------------------------------------| |mew |V:0, |2319 |programa de terminal de caracteres | | |I:0 | |sob (x)emacs | +---------------------------------------------------------------+ 6.2.2. Modern mail service limitation Modern mail service are under some limitations in order to     minimize exposure to the spam (unwanted and unsolicited email) problems. * It is not realistic to run SMTP server on the consumer grade network to send mail directly to the remote host reliably. * A mail may be rejected by any host en route to the     destination quietly unless it appears as authentic as possible. * Não é realista para a confiança da máquina remota, esperar que um único smarthost envie mails com um endereço de mail fonte não relacionado.     This is because: * The SMTP port (25) connections from hosts serviced by the consumer grade network to the Internet are blocked. * The SMTP port (25) connections to hosts serviced by the consumer grade network from the Internet are blocked. * The outgoing messages from hosts serviced by the consumer grade network to the Internet can only be sent via the message submission port (587).     * Técnicas Anti-spam tais como DomainKeys Identified Mail (DKIM), Sender_Policy_Framework (SPF) e Domain-based Message Authentication, Reporting and Conformance (DMARC) são muito usadas para a filtragem de email. * O serviço DomainKeys Identified Mail pode ser disponibilizado para o email que envia através do smarthost. * The smarthost may rewrite the source mail address in the message header to your mail account on the smarthost to prevent email address spoofing. 6.2.3. Historic mail service expectation Some programs on Debian expect to access the /usr/sbin/sendmail     command to send emails as their default or customized setting since the mail service on a UNIX system functioned historically as: * An email is created as a text file. * The email is handed to the /usr/sbin/sendmail command. * For the destination address on the same host, the /usr/sbin/ sendmail command makes local delivery of the email by appending it to the /var/mail/$username file.     + Commands expecting this feature: apt-listchanges, cron, at, ... * For the destination address on the remote host, the /usr/sbin /sendmail command makes remote transfer of the email to the destination host found by the DNS MX record using SMTP. + Commands expecting this feature: popcon, reportbug, bts, ... 6.2.4. Agente de transporte de mail (MTA) Debian mobile workstations can be configured just with full     featured GUI based email clients without mail transfer agent (MTA) program after Debian 12 Bookworm. Debian traditionally installed some MTA program to support programs expecting the /usr/sbin/sendmail command. Such MTA on     mobile workstations must cope with Secção 6.2.2, “Modern mail service limitation” and Secção 6.2.3, “Historic mail service expectation”. For mobile workstations, the typical choice of MTA is either exim4-daemon-light or postfix with its installation option such     as "Mail sent by smarthost; received via SMTP or fetchmail" selected. These are light weight MTAs that respect "/etc/ aliases". Dica Configuring exim4 to send the Internet mail via multiple     corresponding smarthosts for multiple source email addresses is non-trivial. If you need such capability for some programs, set them up to use msmtp which is easy to set up for multiple source email addresses. Then leave main MTA only for a single email address. Tabela 6.3. List of basic mail transport agent related packages +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |------------------+------+-------+-----------------------------| | |V:217,| |Agente de transporte de mail | |exim4-daemon-light|I:227 |1575 |Exim4 (MTA: predefinido em | | | | |Debian) | |------------------+------+-------+-----------------------------| |exim4-daemon-heavy|V:6, |1743 |Exim4 mail transport agent | | |I:6 | |(MTA: flexible alternative) | |------------------+------+-------+-----------------------------| |exim4-base |V:224,|1699 |Documentação do Exim4 (texto)| | |I:234 | |e ficheiros comuns | |------------------+------+-------+-----------------------------| |exim4-doc-html |I:1 |3746 |Documentação do Exim4 (html) | |------------------+------+-------+-----------------------------| |exim4-doc-info |I:0 |637 |Documentação do Exim4 (info) | |------------------+------+-------+-----------------------------| |postfix |V:124,|4039 |Postfix mail transport agent | | |I:133 | |(MTA: secure alternative) | |------------------+------+-------+-----------------------------| |postfix-doc |I:6 |4646 |Documentação do Postfix | | | | |(html+texto) | |------------------+------+-------+-----------------------------| | |V:5, | |Implementação Cyrus SASL API | |sasl2-bin |I:13 |371 |(postfix suplementar para | | | | |SMTP AUTH) | |------------------+------+-------+-----------------------------| |cyrus-sasl2-doc |I:0 |2154 |Cyrus SASL - documentação |     |------------------+------+-------+-----------------------------| |msmtp |V:6, |667 |Light weight MTA | | |I:11 | | | |------------------+------+-------+-----------------------------| | |V:4, | |Light weight MTA (sendmail | |msmtp-mta |I:6 |124 |compatibility extension to | | | | |msmtp) | |------------------+------+-------+-----------------------------| |esmtp |V:0, |129 |Light weight MTA | | |I:0 | | | |------------------+------+-------+-----------------------------| | |V:0, | |Light weight MTA (sendmail | |esmtp-run |I:0 |32 |compatibility extension to | | | | |esmtp) | |------------------+------+-------+-----------------------------| |nullmailer |V:8, |474 |Strip down MTA, no local mail| | |I:9 | | | |------------------+------+-------+-----------------------------| |ssmtp |V:5, |2 |Strip down MTA, no local mail| | |I:8 | | | |------------------+------+-------+-----------------------------| |sendmail-bin |V:13, |1901 |Full featured MTA (only if | | |I:13 | |you are already familiar) | |------------------+------+-------+-----------------------------| |courier-mta |V:0, |2407 |Full featured MTA (web | | |I:0 | |interface etc.) | |------------------+------+-------+-----------------------------| | |V:0, | |git-send-email(1) program for| |git-email |I:10 |1087 |sending series of patch | | | | |emails | +---------------------------------------------------------------+ 6.2.4.1. A configuração do exim4     Para mail de Internet através de smarthost, (re)configura o pacote exim4-* conforme o seguinte:     $ sudo systemctl stop exim4 $ sudo dpkg-reconfigure exim4-config     Escolha "mail enviado por smarthost; recebido via SMTP ou fetchmail" para "Configuração geral do tipo de mail".     Defina "nome de mail do sistema:" para a predefinição dele como o FQDN (veja Secção 5.1.1, “A resolução de nome de máquina”).     Defina "Endereço IP onde escutar ligações SMTP recebidas:" à predefinição dele como "127.0.0.1 ; ::1".     Desconfigure o conteúdo de "Outros destinos para o qual o mail é aceite:".     Desconfigure o conteúdo de "Máquinas para retransmitir mail para:".     Defina "Endereço IP ou nome de máquina do smarthost de envio:" para "smtp.nome-de-máquina.domínio:587". Select "No" for "Hide local mail name in outgoing mail?". (Use "/     etc/email-addresses" as in Secção 6.2.4.3, “A configuração do endereço de mail”, instead.)     Responda a "Mínimizar a quantidade de consultas DNS (Chamar-a-Pedido)?" como uma das seguintes. * "Não" se o sistema estiver ligado à Internet enquanto arranca.     * "Sim" se o sistema não está ligado à Internet enquanto arranca.     Defina o "Método de entrega para mail local:" para "formato mbox em /var/mail".     Select "Yes" for "Split configuration into small files?:".     Crie entradas de palavra-passe para o smarthost ao editar "/etc/ exim4/passwd.client". $ sudo vim /etc/exim4/passwd.client     ... $ cat /etc/exim4/passwd.client ^smtp.*\.hostname\.dom:username@hostname.dom:password Configure exim4(8) with "QUEUERUNNER='queueonly'", "QUEUERUNNER=     'nodaemon'", etc. in "/etc/default/exim4" to minimize system resource usages. (optional)     Inicie o exim4 com o seguinte.     $ sudo systemctl start exim4     o nome de máquina em "/etc/exim4/passwd.client" não deve ser o alias. Verifique o nome real da máquina com o seguinte. $ host smtp.hostname.dom     smtp.hostname.dom is an alias for smtp99.hostname.dom. smtp99.hostname.dom has address 123.234.123.89 Utilizo expressões regulares em "/etc/exim4/passwd.client" para     contornar o problema do alias. Provavelmente o SMTP AUTH funciona mesmo que o ISP mova a máquina apontada pelo alias.     Pode atualizar manualmente a configuração do exim4 com o seguinte: * atualizar os ficheiros de configuração do "exim4" em "/etc/ exim4/". + criar "/etc/exim4/exim4.conf.localmacros" para definir MACROs e editar "/etc/exim4/exim4.conf.template".     (configuração não-dividida) + criar novos ficheiros ou editar ficheiros existentes nos sub-diretórios "/etc/exim4/exim4.conf.d". (configuração dividida) * Run "systemctl reload exim4". Cuidado     O arranque do exim4 demora muito tempo se foi escolhido "Não" (valor predefinido) na pergunta debconf de "Manter a quantidade de consultas DNS no mínimo (Chamar-a-pedido)?" e o sistema não estiver ligado à Internet durante o arranque.         Por favor leia o guia oficial em "/usr/share/doc/exim4-base/ README.Debian.gz" e update-exim4.conf(8). Atenção     For all practical consideration, use SMTP with STARTTLS on port 587 or SMTPS (SMTP over SSL) on port 465, instead of plain SMTP on port 25. 6.2.4.2. A configuração do postfix com SASL     Para o mail de Internet através de smarthost, deve primeiro ler a documentação do postfix e páginas chave do manual. Tabela 6.4. Lista dos manuais importantes do postfix +------------------------------------------------------------+ | comando | função | |------------+-----------------------------------------------| |postfix(1) |Programa de controlo do postfix | |------------+-----------------------------------------------|     |postconf(1) |Utilitário de configuração do postfix | |------------+-----------------------------------------------| |postconf(5) |Parâmetros de configuração do postfix | |------------+-----------------------------------------------| |postmap(1) |Manutenção da tabela de buscas do Postfix | |------------+-----------------------------------------------| |postalias(1)|Manutenção da base de dados de alias do Postfix| +------------------------------------------------------------+     (Re)configurar os pacotes postfix e sasl2-bin como a seguir.     $ sudo systemctl stop postfix $ sudo dpkg-reconfigure postfix     Escolha "Internet com smarthost".     Defina "SMTP relay host (em branco para nenhum):" para " [smtp.hostname.dom]:587" e configure-o como o seguinte. $ sudo postconf -e 'smtp_sender_dependent_authentication = yes' $ sudo postconf -e 'smtp_sasl_auth_enable = yes'     $ sudo postconf -e 'smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd' $ sudo postconf -e 'smtp_sasl_type = cyrus' $ sudo vim /etc/postfix/sasl_passwd     Crie entradas de palavra-passe para o smarthost. $ cat /etc/postfix/sasl_passwd     [smtp.hostname.dom]:587 username:password $ sudo postmap hush:/etc/postfix/sasl_passwd     Arranque o postfix com o seguinte.     $ sudo systemctl start postfix Aqui o uso de "[" e "]" no diálogo do dpkg-reconfigure e "/etc/ postfix/sasl_passwd" assegura que não se verifica o registo MX     mas usa directamente o nome de máquina exacto especificado. Veja "ativar autenticação SASL no cliente SMTP do Postfix" em "/usr/ share/doc/postfix/html/SASL_README.html". 6.2.4.3. A configuração do endereço de mail     Existem alguns ficheiros de configuração de endereços de mail para transporte, entrega e agentes de utilizador de mail. Tabela 6.5. Lista de ficheiros de configuração relacionados com endereços de mail +---------------------------------------------------------------+ | ficheiro | função | aplicação | |---------------+---------------+-------------------------------| | |nome de máquina| | |/etc/mailname |predefinido |Específico de Debian, mailname | | |para mail |(5) | | |(saída) | | |---------------+---------------+-------------------------------|     |/etc/ |nome de máquina|ficheiros_de_configuração-exim4| |email-addresses|para enganar o |(5) específicos do exim(8) | | |mail de saída | | |---------------+---------------+-------------------------------| |/etc/postfix/ |nome de máquina|específico do postfix(1), | |generic |para enganar o |activado após a execução do | | |mail de saída |comando postmap(1). | |---------------+---------------+-------------------------------| | |alias de nome |geral, activado após a execução| |/etc/aliases |de conta para |do comando newaliases(1). | | |mail recebido | | +---------------------------------------------------------------+ O mailname no ficheiro "/etc/mailname" é normalmente um nome de domínio totalmente qualificado (FQDN) que resolve para um dos     endereços IP do anfitrião. Para a estação de trabalho móvel que não tem um nome de máquina com endereço IP resolvível, regule este mailname para o valor de "hostname -f". (Esta é uma escolha segura e funciona para ambos exim4-* e postfix.) Dica O conteúdo de "/etc/mailname" é utilizado por muitos programas     não-MTA para o comportamento predefinido dele. Para o mutt, defina as variáveis "hostname" e "from" no ficheiro ~/muttrc para sobrepor o valor mailname. Para programas no pacote devscripts, como o bts(1) e dch(1), exporte as variáveis de ambiente "$DEBFULLNAME" e "$DEBEMAIL" para o sobrepor. Dica O pacote popularity-contest normalmente envia mail a partir da conta de root com FQDN. Tem de definir MAILFROM em /etc/     popularity-contest.conf como descrito no ficheiro /usr/share/ popularity-contest/default.conf. Caso contrário, o seu mail será rejeitado pelo servidor SMTP do smarthost. Apesar de isto ser um tédio, esta aproximação é mais segura do que reescrever o endereço fonte para todos os mails do root pelo MTA e deve ser usado para outros daemons e scripts do cron.     Ao definir o mailname para "hostname -f", o spoofing do endereço de mail da fonte via MTA pode ser realizado com o seguinte. * ficheiro "/etc/email-addresses" para exim4(8) conforme é explicado em exim4-config_files(5)     * ficheiro "/etc/postfix/generic" para postfix(1) conforme é explicado em generic(5)     Para o postfix, os seguintes passos adicionais são necessários: # postmap hash:/etc/postfix/generic     # postconf -e 'smtp_generic_maps = hash:/etc/postfix/generic' # postfix reload     Pode testar a configuração do endereço de email a usar o seguinte: * exim(8) com as opções -brw, -bf, -bF, -bV, …     * postmap(1) com a opção -q. Dica     O exim vem com vários programas utilitários como o exiqgrep(8) e exipick(8). Veja "dpkg -L exim4-base|grep man8/" para os comandos disponíveis. 6.2.4.4. Operações MTA básicas Existem várias operações MTA básicas. Algumas podem ser     executadas através do interface de compatibilidade do sendmail (1). Tabela 6.6. Lista de operações MTA básicas +---------------------------------------------------------------+ | comando | comando postfix | descrição | | exim | | | |----------+------------------+---------------------------------| |sendmail |sendmail |lê mails da entrada standard e | | | |prepara a entrega (-bm) | |----------+------------------+---------------------------------| | | |lista a lista de espera de mail | |mailq |mailq |com estado e ID de lista de | | | |espera (-bp) | |----------+------------------+---------------------------------| |newaliases|newaliases |inicializa a base de dados e | | | |alias (-I) | |----------+------------------+---------------------------------|     |exim4 -q |postqueue -f |enxagua mails em espera (-q) | |----------+------------------+---------------------------------| | |postsuper -r ALL | | |exim4 -qf |deferred; |enxagua todos mails | | |postqueue -f | | |----------+------------------+---------------------------------| |exim4 -qff|postsuper -r ALL; |enxagua até mails congelados | | |postqueue -f | | |----------+------------------+---------------------------------| |exim4 -Mg |postsuper -h |congela uma mensagem pelo seu ID | |queue_id |queue_id |de lista de espera | |----------+------------------+---------------------------------| |exim4 -Mrm|postsuper -d |remove uma mensagem pelo seu ID | |queue_id |queue_id |de lista de espera | |----------+------------------+---------------------------------| |N/D |postsuper -d ALL |remove todas as mensagens | +---------------------------------------------------------------+ Dica     Poderá ser uma boa ideia enxaguar todos os mails por um script em "/etc/ppp/ip-up.d/*". 6.3. O servidor de acesso remoto e utilitários (SSH) O Secure SHell (SSH) é o modo seguro de efectuar ligações na     Internet. Uma versão livre do SSH chamada OpenSSH está disponível nos pacotes openssh-client e openssh-server em Debian. Para o utilizador as funções do ssh(1) são uma telnet(1) mais     inteligente e segura. Ao contrário do comando telnet, o comando ssh não pára no caractere de escape do telnet (predefinição inicial CTRL-]). Tabela 6.7. Lista de servidores de acesso remoto e utilitários +-----------------------------------------------------------------------+ | pacote |popcon|tamanho| ferramenta |descrição | |----------------------+------+-------+----------------------+----------| | |V:866,| | |Cliente de| |openssh-client |I:996 |4959 |ssh(1) |shell | | | | | |segura | |----------------------+------+-------+----------------------+----------| | |V:730,| | |Servidor | |openssh-server |I:814 |1804 |sshd(8) |de shell | | | | | |segura | |----------------------+------+-------+----------------------+----------| | | | | |pede ao | | | | | |utilizador| |ssh-askpass |I:23 |102 |ssh-askpass(1) |uma frase | | | | | |passe para| | | | | |ssh-add (X| | | | | |simples) | |----------------------+------+-------+----------------------+----------| | | | | |asks user |     | |V:0, | | |for a pass| |ssh-askpass-gnome |I:3 |200 |ssh-askpass-gnome(1) |phrase for| | | | | |ssh-add | | | | | |(GNOME) | |----------------------+------+-------+----------------------+----------| | | | | |asks user | | | | | |for a pass| | |V:0, | |ssh-askpass-fullscreen|phrase for| |ssh-askpass-fullscreen|I:0 |48 |(1) |ssh-add | | | | | |(GNOME) | | | | | |with extra| | | | | |eye candy | |----------------------+------+-------+----------------------+----------| | | | | |web server| | | | | |for | | |V:0, | | |browser | |shellinabox |I:1 |507 |shellinaboxd(1) |accessible| | | | | |VT100 | | | | | |terminal | | | | | |emulator | +-----------------------------------------------------------------------+     Although shellinabox is not a SSH program, it is listed here as an interesting alternative for the remote terminal access.     See also Secção 7.9, “X server connection” for connecting to remote X client programs. Cuidado     Veja Secção 4.6.3, “Medidas de segurança extra para a Internet” se o seu SSH for acessível a partir da Internet. Dica     Por favor use o programa screen(1) para ativar a sobrevivência do processo de shell remota à interrupção da ligação (veja Secção 9.1.2, “O programa screen”). 6.3.1. Bases do SSH     The OpenSSH SSH daemon supports SSH protocol 2 only. Please read "/usr/share/doc/openssh-client/README.Debian.gz", ssh     (1), sshd(8), ssh-agent(1), and ssh-keygen(1), ssh-add(1) and ssh-agent(1). Atenção o "/etc/ssh/sshd_not_to_be_run" não pode estar presente se     desejar correr o servidor OpenSSH. Don't enable rhost based authentication (HostbasedAuthentication in /etc/ssh/sshd_config). Tabela 6.8. Lista de ficheiros de configuração do SSH +---------------------------------------------------------------+ | ficheiro de | descrição do ficheiro de configuração | | configuração | | |----------------+----------------------------------------------| |/etc/ssh/ |Predefinições do cliente SSH, veja ssh_config | |ssh_config |(5) | |----------------+----------------------------------------------| |/etc/ssh/ |Predefinições do servidor SSH, veja |     |sshd_config |sshd_config(5) | |----------------+----------------------------------------------| |~/.ssh/ |chaves SSH públicas predefinidas que os | |authorized_keys |clientes usam para ligar a esta conta neste | | |servidor SSH | |----------------+----------------------------------------------| |~/.ssh/id_rsa |chave SSH-2 RSA secreta do utilizador | |----------------+----------------------------------------------| |~/.ssh/id_ |secret SSH-2 key-type-name key such as ecdsa, | |key-type-name |ed25519, ... of the user | +---------------------------------------------------------------+     O seguinte inicia uma ligação ssh(1) a partir de um cliente. Tabela 6.9. Lista de exemplos de arranque do cliente SSH +---------------------------------------------------------------+ | comando | descrição | |---------------------------------------+-----------------------| |ssh |ligar com modo | |nome_utilizador@máquina.domínio.externo|predefinido | |---------------------------------------+-----------------------| |ssh -v |ligar com modo | |nome_utilizador@máquina.domínio.externo|predefinido com |     | |mensagens de depuração | |---------------------------------------+-----------------------| |ssh -o PreferredAuthentications= |força o uso de | |password username@hostname.domain.ext |palavra-passe com SSH | | |versão 2 | |---------------------------------------+-----------------------| |ssh -t username@hostname.domain.ext |run passwd program to | |passwd |update password on a | | |remote host | +---------------------------------------------------------------+ 6.3.2. User name on the remote host     If you use the same user name on the local and the remote host, you can eliminate typing "username@". Even if you use different user name on the local and the remote     host, you can eliminate it using "~/.ssh/config". For Debian Salsa service with account name "foo-guest", you set "~/.ssh/ config" to contain the following.     Host salsa.debian.org people.debian.org User foo-guest 6.3.3. Ligar sem palavras-passe remotas     One can avoid having to remember passwords for remote systems by using "PubkeyAuthentication" (SSH-2 protocol).     On the remote system, set the respective entries, "PubkeyAuthentication yes", in "/etc/ssh/sshd_config".     Crie chaves de autenticação localmente e instale a chave pública no sistema remoto como o seguinte.     $ ssh-keygen -t rsa $ cat .ssh/id_rsa.pub | ssh user1@remote "cat - >>.ssh/authorized_keys" You can add options to the entries in "~/.ssh/authorized_keys" to     limit hosts and to run specific commands. See sshd(8) "AUTHORIZED_KEYS FILE FORMAT". 6.3.4. Lidar com clientes SSH alienígenas     Existem alguns clientes SSH livres disponíveis para outras plataformas. Tabela 6.10. Lista de clientes SSH para outras plataformas +---------------------------------------------------------------+ | ambiente | programa de SSH livre | |------------+--------------------------------------------------| |Windows |puTTY (PuTTY: a free SSH and Telnet client) (GPL) |     |------------+--------------------------------------------------| |Windows |SSH in cygwin (Cygwin: Get that Linux feeling - on| |(cygwin) |Windows) (GPL) | |------------+--------------------------------------------------| |Mac OS X |OpenSSH; use ssh na aplicação de Terminal (GPL) | +---------------------------------------------------------------+ 6.3.5. Configurar o ssh-agent É mais seguro proteger as suas chaves secretas de autenticação     SSH com uma frase-passe. Se nenhuma frase-passe foi definida, use "ssh-keygen -p" para a definir. Ponha a sua chave SSH pública (ex. "~/.ssh/id_rsa.pub") em "~     /.ssh/authorized_keys" numa máquina remota a usar uma ligação à máquina remota baseada em palavra-passe como descrito em cima. $ ssh-agent bash     $ ssh-add ~/.ssh/id_rsa Enter passphrase for /home/username/.ssh/id_rsa: Identity added: /home/username/.ssh/id_rsa (/home/username/.ssh/id_rsa)     Nenhuma palavra-passe necessária desde aqui até ao próximo comando.     $ scp foo username@remote.host:foo     Carregue em ^D (CTRL-D) para terminar a sessão do ssh-agent. Para o servidor X, o script de arranque normal de Debian executa     o ssh-agent como o processo pai. Portanto apenas precisa de executar o ssh-add uma vez. Para mais, leia ssh-agent(1) e ssh-add(1). 6.3.6. Sending a mail from a remote host If you have an SSH shell account on a server with proper DNS     settings, you can send a mail generated on your workstation as an email genuinely sent from the remote server.     $ ssh username@example.org /usr/sbin/sendmail -bm -ti -f "username@example.org" < mail_data.txt 6.3.7. Reencaminhamento de portos para SMTP/POP3 em túnel Para estabelecer um pipe para ligação ao porto 25 do servidor     remoto a partir do porto 4025 da máquina local, e para a porta 110 do servidor remoto a partir do porto 4110 da máquina local através de ssh, execute na máquina local como a seguir.     # ssh -q -L 4025:remote-server:25 4110:remote-server:110 username@remote-server Este é um modo seguro de fazer ligações a servidores SMTP/POP3     pela Internet. Configure a entrada "AllowTcpForwarding" para "yes" em "/etc/ssh/sshd_config" na máquina remota. 6.3.8. Como desligar o sistema remoto em SSH Precisa de proteger o processo ao fazer "shutdown -h now" (veja     Secção 1.1.8, “Como desligar o sistema”) a partir da terminação do SSH a usar o comando at(1) (veja Secção 9.4.13, “Agendar tarefas uma vez”) com o seguinte.     # echo "shutdown -h now" | at now     Correr "shutdown -h now" numa sessão do screen(1) (veja Secção 9.1.2, “O programa screen”) é outro modo de fazer o mesmo. 6.3.9. Depurar problemas no SSH     Se estiver com problemas, verifique as permissões dos ficheiros de configuração e corra o ssh com a opção "-v".     Use a opção "-p" se for o root e esteja a ter problemas com a firewall; isto evita o uso dos portos de servidor 1 -- 1023. Se as ligações ssh a um site remoto subitamente deixarem de funcionar, pode ser o resultado de reparações pelo administrador do sistema, mais provável uma alteração na "chave_da_máquina"     durante a manutenção do sistema. Após certificar-se que é este o caso e ninguém está a tentar falsificar a máquina remota com algum hack inteligente, pode-se recuperar a ligação ao remover a entrada "host_key" de "~/.ssh/known_hosts" na máquina local. 6.4. O servidor de impressão e utilitários In the old Unix-like system, the BSD Line printer daemon (lpd) was the standard and the standard print out format of the classic     free software was PostScript (PS). Some filter system was used along with Ghostscript to enable printing to the non-PostScript printer. See Secção 11.4.1, “Ghostscript”. In the modern Debian system, the Common UNIX Printing System     (CUPS) is the de facto standard and the standard print out format of the modern free software is Portable Document Format (PDF). The CUPS uses Internet Printing Protocol (IPP). The IPP is now     supported by other OSs such as Windows XP and Mac OS X and has became new cross-platform de facto standard for remote printing with bi-directional communication capability. Graças à funcionalidade de auto-conversão dependente do formato     de ficheiro do sistema CUPS, simplesmente fornecer quaisquer dados ao comando lpr deverá gerar a saída de impressão esperada. (No CUPS, o lpr pode ser activado ao instalar o pacote cups-bsd.)     O sistema Debian tem alguns pacotes notáveis para os servidores e utilitários de impressão. Tabela 6.11. Lista de servidores de impressoras e utilitários +---------------------------------------------------------------+ | pacote |popcon|tamanho| porto | descrição | |-------------------------+------+-------+----------+-----------| | | | | |BSD lpr/lpd| |lpr |V:2, |367 |impressora|(daemon de | | |I:3 | |(515) |impressora | | | | | |de linha) | |-------------------------+------+-------+----------+-----------| |lprng |V:0, |3051 |, , |, , | | |I:0 | | |(Avançado) | |-------------------------+------+-------+----------+-----------| | | | | |Servidor | |cups |V:97, |1061 |IPP (631) |CUPS de | | |I:441 | | |Impressão | | | | | |em Internet| |-------------------------+------+-------+----------+-----------| | | | | |Comandos de| | | | | |impressão | | | | | |do System V| | | | | |para o |     | | | | |CUPS: lp | | | | | |(1), lpstat| |cups-client |V:119,|426 |, , |(1), | | |I:461 | | |lpoptions | | | | | |(1), cancel| | | | | |(1), lpmove| | | | | |(8), lpinfo| | | | | |(8), | | | | | |lpadmin(8),| | | | | |… | |-------------------------+------+-------+----------+-----------| | | | | |comandos de| | | | | |impressão | | |V:32, | | |BSD para o | |cups-bsd |I:219 |131 |, , |CUPS: lpr | | | | | |(1), lpq | | | | | |(1), lprm | | | | | |(1), lpc(8)| |-------------------------+------+-------+----------+-----------| | |V:20, | |Não |Drivers de | |printer-driver-gutenprint|I:114 |1219 |aplicável |impressoras| | | | | |para o CUPS| +---------------------------------------------------------------+ Dica     Pode configurar o sistema CUPS ao apontar o seu explorador web para "http://localhost:631/" . 6.5. Outras aplicações de servidor de rede     Aqui estão outras aplicações de servidor de rede. Tabela 6.12. Lista de outras aplicações de servidor de rede +---------------------------------------------------------------+ | pacote |popcon|tamanho|protocolo| descrição | |-----------------+------+-------+---------+--------------------| |telnetd |V:0, |54 |TELNET |Servidor TELNET | | |I:2 | | | | |-----------------+------+-------+---------+--------------------| |telnetd-ssl |V:0, |159 |, , |. . (suporte a SSL) | | |I:0 | | | | |-----------------+------+-------+---------+--------------------| |nfs-kernel-server|V:49, |769 |NFS |Partilha de | | |I:63 | | |ficheiros do Unix | |-----------------+------+-------+---------+--------------------| | | | | |Partilha de | |samba |V:108,|3995 |SMB |ficheiros e | | |I:131 | | |impressoras do | | | | | |Windows | |-----------------+------+-------+---------+--------------------|     | | | | |Partilha de | |netatalk |V:1, |2003 |ATP |ficheiros e | | |I:1 | | |impressoras do Apple| | | | | |/Mac (AppleTalk) | |-----------------+------+-------+---------+--------------------| |proftpd-basic |V:8, |452 |FTP |Descarrega de | | |I:16 | | |ficheiros geral | |-----------------+------+-------+---------+--------------------| |apache2 |V:214,|561 |HTTP |Servidor web geral | | |I:263 | | | | |-----------------+------+-------+---------+--------------------| |squid |V:11, |9265 |, , |servidor proxy web | | |I:12 | | |geral | |-----------------+------+-------+---------+--------------------| |bind9 |V:43, |1124 |DNS |Endereço IP para | | |I:49 | | |outras máquinas | |-----------------+------+-------+---------+--------------------| |isc-dhcp-server |V:18, |6082 |DHCP |Endereço IP do | | |I:36 | | |próprio cliente | +---------------------------------------------------------------+ Common Internet File System Protocol (CIFS) é o mesmo protocolo     que Server Message Block (SMB) e é bastante usado pelo Microsoft Windows. Dica     Veja Secção 4.5.2, “O moderno sistema de gestão centralizado” para integração de sistemas servidor. Dica A resolução do nome de máquinas é normalmente disponibilizada     pelo servidor de DNS. Para o endereço IP atribuído dinamicamente à máquina por DHCP, pode ser definido DNS Dinâmico para a resolução do nome de máquina a utilizar o bind9 e o isc-dhcp-server conforme é descrito na página DDNS no wiki Debian. Dica     O uso de servidor proxy como o squid é muito mais eficiente para poupar largura de banda que o uso de servidor mirror local com o conteúdo completo do arquivo Debian. 6.6. Outros clientes de aplicação de rede     Aqui estão outros clientes de aplicação de rede. Tabela 6.13. Lista de clientes de aplicação de rede +---------------------------------------------------------------+ | pacote |popcon|tamanho|protocolo| descrição | |---------------+------+-------+---------+----------------------| |netcat |I:27 |16 |TCP/IP |Canivete suíço do TCP/| | | | | |IP | |---------------+------+-------+---------+----------------------| | | | | |Binário Secure Socket | | |V:841,| | |Layer (SSL) e | |openssl |I:995 |2111 |SSL |ferramentas | | | | | |criptográficas | | | | | |relacionadas | |---------------+------+-------+---------+----------------------| |stunnel4 |V:7, |548 |, , |Wrapper SSL universal | | |I:12 | | | | |---------------+------+-------+---------+----------------------| |telnet |V:29, |54 |TELNET |Cliente TELNET | | |I:511 | | | | |---------------+------+-------+---------+----------------------| |telnet-ssl |V:0, |196 |, , |. . (suporte a SSL) | | |I:2 | | | | |---------------+------+-------+---------+----------------------| |nfs-common |V:152,|1124 |NFS |Partilha de ficheiros | | |I:234 | | |do Unix | |---------------+------+-------+---------+----------------------| | | | | |Cliente de partilha de| |smbclient |V:24, |2071 |SMB |ficheiros e | | |I:204 | | |impressoras do MS | | | | | |Windows | |---------------+------+-------+---------+----------------------| | | | | |Comandos de montar e | |cifs-utils |V:29, |317 |, , |desmontar para | | |I:121 | | |ficheiros remotos do | | | | | |MS Windows |     |---------------+------+-------+---------+----------------------| |ftp |V:7, |53 |FTP |Cliente FTP | | |I:114 | | | | |---------------+------+-------+---------+----------------------| |lftp |V:4, |2361 |, , |, , | | |I:30 | | | | |---------------+------+-------+---------+----------------------| |ncftp |V:1, |1389 |, , |Cliente FTP de écran | | |I:14 | | |completo | |---------------+------+-------+---------+----------------------| |wget |V:208,|3681 |HTTP e |descarregador de web | | |I:981 | |FTP | | |---------------+------+-------+---------+----------------------| |curl |V:185,|517 |, , |, , | | |I:620 | | | | |---------------+------+-------+---------+----------------------| |axel |V:0, |224 |, , |acelerador de | | |I:3 | | |descarregas | |---------------+------+-------+---------+----------------------| | | | | |acelerador de | |aria2 |V:3, |1981 |, , |descarregas com | | |I:20 | | |suporte de BitTorrent | | | | | |e Metalink | |---------------+------+-------+---------+----------------------| |bind9-host |V:115,|393 |DNS |host(1) do bind9, | | |I:939 | | |"Prioridade: standard"| |---------------+------+-------+---------+----------------------| |dnsutils |V:16, |276 |, , |dig(1) do bind, | | |I:280 | | |"Prioridade: standard"| |---------------+------+-------+---------+----------------------| |isc-dhcp-client|V:217,|2875 |DHCP |obter endereço IP | | |I:981 | | | | |---------------+------+-------+---------+----------------------| |ldap-utils |V:12, |767 |LDAP |obter dados de um | | |I:63 | | |servidor LDAP | +---------------------------------------------------------------+ 6.7. Os diagnósticos dos daemons do sistema     O programa telnet activa ligação manual aos daemons do sistema e aos seus diagnósticos.     Para testar o serviço POP3 simples, tente o seguinte:     $ telnet mail.ispname.net pop3 Para testar o serviço POP3 com TLS/SSL ativo de alguns ISPs,     precisa do cliente telnet com TLS/SSL ativo pelos pacotes telnet-ssl or openssl.     $ telnet -z ssl pop.gmail.com 995     $ openssl s_client -connect pop.gmail.com:995     Os seguintes RFCs disponibilizam o conhecimento necessário para cada daemon de sistema. Tabela 6.14. Lista de RFCs populares +--------------------------------------------------------------+ | RFC | descrição | |-----------------+--------------------------------------------| |rfc1939 e rfc2449|serviço POP3 | |-----------------+--------------------------------------------| |rfc3501 |serviço IMAP4 | |-----------------+--------------------------------------------| |rfc2821 (rfc821) |serviço SMTP |     |-----------------+--------------------------------------------| |rfc2822 (rfc822) |Formato de ficheiro de mail | |-----------------+--------------------------------------------| |rfc2045 |Multipurpose Internet Mail Extensions (MIME)| |-----------------+--------------------------------------------| |rfc819 |serviço DNS | |-----------------+--------------------------------------------| |rfc2616 |serviço HTTP | |-----------------+--------------------------------------------| |rfc2396 |definição URI | +--------------------------------------------------------------+     A utilização de portos é descrita em "/etc/services". Capítulo 7. GUI System 7.1. GUI desktop environment     There are several choices for the full featured GUI desktop environment on the Debian system. Tabela 7.1. List of desktop environment +---------------------------------------------------------------+ | task package |popcon|tamanho| descrição | |----------------------------+------+-------+-------------------| |task-gnome-desktop |I:198 |9 |GNOME desktop | | | | |environment | |----------------------------+------+-------+-------------------| |task-xfce-desktop |I:96 |9 |Xfce desktop | | | | |environment | |----------------------------+------+-------+-------------------| |task-kde-desktop |I:81 |6 |KDE Plasma desktop | | | | |environment | |----------------------------+------+-------+-------------------|     |task-mate-desktop |I:43 |9 |MATE desktop | | | | |environment | |----------------------------+------+-------+-------------------| |task-cinnamon-desktop |I:41 |9 |Cinnamon desktop | | | | |environment | |----------------------------+------+-------+-------------------| |task-lxde-desktop |I:29 |9 |LXDE desktop | | | | |environment | |----------------------------+------+-------+-------------------| |task-lxqt-desktop |I:18 |9 |LXQt desktop | | | | |environment | |----------------------------+------+-------+-------------------| |task-gnome-flashback-desktop|I:13 |6 |GNOME Flashback | | | | |desktop environment| +---------------------------------------------------------------+ Dica Dependency packages selected by a task metapackage may be out of sync with the latest package transition state under the Debian unstable/testing environment. For task-gnome-desktop, you may need to adjust package selections as follows: * Start aptitude(8) as sudo aptitude -u. * Move cursor to "Tasks" and press "Enter". * Move cursor to "End-user" press "Enter".     * Move cursor to "GNOME" press "Enter". * Move cursor to task-gnome-desktop and press "Enter". * Move cursor to "Depends" and press "m" (manually selected). * Move cursor to "Recommends" and press "m" (manually selected). * Move cursor to "task-gnome-desktop and press "-". (drop) * Adjust selected packages while dropping problematic ones causing package conflicts. * Press "g" to start install.     This chapter will focus mostly on the default desktop environment of Debian: task-gnome-desktop offering GNOME on wayland. 7.2. GUI communication protocol     GUI communication protocol used on the GNOME desktop can be: * Wayland (display server protocol) (native)     * X Window System core protocol (via xwayland)     Please check freedesktop.org site for how Wayland architecture is different from X Window architecture.     From user's perspective, differences can be colloquially summarized as: * Wayland is a same-host GUI communication protocol: new, simpler, faster, no setuid root binary     * X Window is a network-capable GUI communication protocol: traditional, complex, slower, setuid root binary For applications using Wayland protocol, the access to their     display contents from a remote host is supported by the VNC or RDP. See Secção 7.8, “Remote desktop” Modern X servers have the MIT Shared Memory Extension and communicate with their local X clients using the local shared     memory. This bypasses the network transparent Xlib interprocess communication channel and gains performance. This situation was the background of creating Wayland as a local-only GUI communication protocol.     Using the xeyes program started from the GNOME terminal, you can check GUI communication protocol used by each GUI application.     $ xeyes * If the mouse cursor is on an application such as "GNOME terminal" which uses Wayland display server protocol, eyes don't move with the mouse cursor.     * If the mouse cursor is on an application such as "xterm" which uses X Window System core protocol, eyes move with the mouse cursor exposing not-so-isolated nature of X Window architecture. As of April 2021, many popular GUI applications such as GNOME and LibreOffice (LO) applications have been migrated to the Wayland     display server protocol. I see xterm, gitk, chromium, firefox, gimp, dia, and KDE applications still use X Window System core protocol. Nota For both the xwayland on Wayland or the native X Window System,     the old X server configuration file "/etc/X11/xorg.conf" shouldn't exist on the system. The graphics and input devices are now configured by the kernel with DRM, KMS, and udev. The native X server has been rewritten to use them. See "modedb default video mode support" in the Linux kernel documentation. 7.3. GUI infrastructure     Here are notable GUI infrastructure packages for the GNOME on Wayland environment. Tabela 7.2. List of notable GUI infrastructure packages +---------------------------------------------------------------+ | | |tamanho| | | pacote |popcon| do | descrição | | | |pacote | | |---------------------------+------+-------+--------------------| | |V:1, | |GNOME's mutter | |mutter |I:60 |187 |window manager | | | | |[auto] | |---------------------------+------+-------+--------------------| | |V:240,| |An X server running | |xwayland |I:319 |2388 |on top of wayland | | | | |[auto] |     |---------------------------+------+-------+--------------------| | | | |Remote desktop | |gnome-remote-desktop |V:35, |1068 |daemon for GNOME | | |I:221 | |using PipeWire | | | | |[auto] | |---------------------------+------+-------+--------------------| | |V:21, | |Advanced | |gnome-tweaks |I:229 |1170 |configuration | | | | |settings for GNOME | |---------------------------+------+-------+--------------------| | |V:13, | |Tool to enable / | |gnome-shell-extension-prefs|I:213 |60 |disable GNOME Shell | | | | |extensions | +---------------------------------------------------------------+     Here, "[auto]" means that these packages are automatically installed when task-gnome-desktop is installed. Dica gnome-tweaks is the indispensable configuration utility. For example:     * You can force "Over-Amplification" of sound volume from "General". * You can force "Caps" to become "Esc" from "Keyboard & Mouse" -> "Keyboard" -> "Additional Layout Option". Dica     Detail features of GNOME desktop environment can be configured with utilities started by typing "settings", "tweaks", or "extensions" after pressing Super-key. 7.4. GUI applications Many useful GUI applications are available on Debian now. Installing software packages such as scribus (KDE) on GNOME     desktop environment are quite acceptable since corresponding functionality is not available under GNOME desktop environment. But installing too many packages with duplicated functionalities may clutter your system.     Here is a list of GUI applications which caught my eyes. Tabela 7.3. List of notable GUI applications +---------------------------------------------------------------+ | | |tamanho| | | | pacote |popcon| do | tipo | descrição | | | |pacote | | | |-------------------+------+-------+------+---------------------| | |V:30, | | |Gestor de Informações| |evolution |I:239 |486 |GNOME |Pessoais (groupware e| | | | | |email) | |-------------------+------+-------+------+---------------------| |thunderbird |V:48, |224760 |GTK |Email client (Mozilla| | |I:119 | | |Thunderbird) | |-------------------+------+-------+------+---------------------| | |V:1, | | |Gestor de Informações| |kontact |I:12 |2208 |KDE |Pessoais (groupware e| | | | | |email) | |-------------------+------+-------+------+---------------------| |libreoffice-writer |V:117,|31474 |LO |processador de texto | | |I:435 | | | | |-------------------+------+-------+------+---------------------| |abiword |V:1, |3542 |GNOME |processador de texto | | |I:8 | | | | |-------------------+------+-------+------+---------------------| |calligrawords |V:0, |6097 |KDE |processador de texto | | |I:7 | | | | |-------------------+------+-------+------+---------------------| | |V:1, | | |desktop publishing | |scribus |I:16 |31345 |KDE |editor to edit PDF | | | | | |files | |-------------------+------+-------+------+---------------------| |glabels |V:0, |1338 |GNOME |editor de etiquetas | | |I:3 | | | | |-------------------+------+-------+------+---------------------| |libreoffice-calc |V:111,|26009 |LO |folha de cálculo | | |I:432 | | | | |-------------------+------+-------+------+---------------------| |gnumeric |V:4, |9910 |GNOME |folha de cálculo | | |I:14 | | | | |-------------------+------+-------+------+---------------------| |calligrasheets |V:0, |11396 |KDE |folha de cálculo | | |I:5 | | | | |-------------------+------+-------+------+---------------------| |libreoffice-impress|V:69, |2646 |LO |apresentação | | |I:429 | | | | |-------------------+------+-------+------+---------------------| |calligrastage |V:0, |5339 |KDE |apresentação | | |I:5 | | | | |-------------------+------+-------+------+---------------------| |libreoffice-base |V:26, |5003 |LO |gestão de base de | | |I:121 | | |dados | |-------------------+------+-------+------+---------------------| |kexi |V:0, |7118 |KDE |gestão de base de | | |I:1 | | |dados | |-------------------+------+-------+------+---------------------| |libreoffice-draw |V:72, |10312 |LO |editor de gráficos | | |I:430 | | |vectoriais (desenho) | |-------------------+------+-------+------+---------------------| |inkscape |V:15, |99800 |GNOME |editor de gráficos | | |I:112 | | |vectoriais (desenho) | |-------------------+------+-------+------+---------------------| |karbon |V:0, |3610 |KDE |editor de gráficos | | |I:6 | | |vectoriais (desenho) | |-------------------+------+-------+------+---------------------| |dia |V:2, |3741 |GTK |editor de fluxogramas| | |I:22 | | |e diagramas | |-------------------+------+-------+------+---------------------|     |gimp |V:50, |19304 |GTK |editor de gráficos | | |I:252 | | |bitmap (pintura) | |-------------------+------+-------+------+---------------------| |shotwell |V:17, |6263 |GTK |organizador de fotos | | |I:255 | | |digitais | |-------------------+------+-------+------+---------------------| |digikam |V:1, |293 |KDE |organizador de fotos | | |I:9 | | |digitais | |-------------------+------+-------+------+---------------------| | |V:4, | | |lighttable and | |darktable |I:13 |30554 |GTK |darkroom for | | | | | |photographers | |-------------------+------+-------+------+---------------------| |planner |V:0, |1394 |GNOME |gestão de projectos | | |I:4 | | | | |-------------------+------+-------+------+---------------------| |calligraplan |V:0, |19013 |KDE |gestão de projectos | | |I:2 | | | | |-------------------+------+-------+------+---------------------| |gnucash |V:2, |28928 |GNOME |contas pessoais | | |I:8 | | | | |-------------------+------+-------+------+---------------------| |homebank |V:0, |1218 |GTK |contas pessoais | | |I:2 | | | | |-------------------+------+-------+------+---------------------| |lilypond |V:0, |16092 |- |music typesetter | | |I:7 | | | | |-------------------+------+-------+------+---------------------| |kmymoney |V:0, |13937 |KDE |contas pessoais | | |I:2 | | | | |-------------------+------+-------+------+---------------------| |librecad |V:1, |8963 |Qt-app|computer-aided design| | |I:15 | | |(CAD) system (2D) | |-------------------+------+-------+------+---------------------| |freecad |I:18 |36 |Qt-app|computer-aided design| | | | | |(CAD) system (3D) | |-------------------+------+-------+------+---------------------| | |V:3, | | |electronic schematic | |kicad |I:14 |236461 |GTK |and PCB design | | | | | |software | |-------------------+------+-------+------+---------------------| | |V:12, | | |frontend para | |xsane |I:144 |2339 |GTK |digitalizador | | | | | |(scanner) | |-------------------+------+-------+------+---------------------| |libreoffice-math |V:51, |1898 |LO |editor de fórmulas/ | | |I:432 | | |equações matemáticas | |-------------------+------+-------+------+---------------------| | |V:6, | | |conversor de e-books | |calibre |I:28 |63385 |KDE |e gestor de | | | | | |biblioteca | |-------------------+------+-------+------+---------------------| |fbreader |V:1, |3783 |GTK |leitor de e-book | | |I:9 | | | | |-------------------+------+-------+------+---------------------| |evince |V:92, |941 |GNOME |visualizador de | | |I:314 | | |documentos (pdf) | |-------------------+------+-------+------+---------------------| |okular |V:40, |17728 |KDE |visualizador de | | |I:123 | | |documentos (pdf) | |-------------------+------+-------+------+---------------------| |x11-apps |V:31, |2460 |pure |xeyes(1), etc. | | |I:463 | |X-app | | |-------------------+------+-------+------+---------------------| |x11-utils |V:192,|651 |pure |xev(1), xwininfo(1), | | |I:566 | |X-app |etc. | +---------------------------------------------------------------+ 7.5. User directories Default names for user directories such as "~/Desktop", "~/     Documents", ..., used by the Desktop environment depend on the locale used for the system installation. You can reset them to the English ones by:     $ LANGUAGE=C xdg-user-dirs-update --force     Then you manually move all the data to the newer directories. See xdg-user-dirs-update(1).     You can also set them to any names by editing "~/.config/ user-dirs.dirs". See user-dirs.dirs(5). 7.6. Fonts Many useful scalable fonts are available for users on Debian.     User's concern is how to avoid redundancy and how to configure parts of installed fonts to be disabled. Otherwise, useless font choices may clutter your GUI application menus.     Debian system uses FreeType 2.0 library to rasterise many scalable font formats for screen and print: * Type 1 (PostScript) fonts which use cubic Bézier curves (almost obsolete format)     * TrueType fonts which use quadratic Bézier curves (good choice format) * OpenType fonts which use cubic Bézier curves (best choice format) 7.6.1. Fontes (tipos de letra) básicas The following table is compiled in the hope to help users to chose appropriate scalable fonts with clear understanding of the     metric compatibility and the glyph coverage. Most fonts cover all Latin, Greek, and Cyril characters. The final choice of activated fonts can also be affected by your aesthetics. These fonts can be used for the screen display or for the paper printing. Tabela 7.4. List of notable TrueType and OpenType fonts +----------------------------------------------------------------------+ | pacote |popcon|tamanho|sans|serif|mono|note on font | |-------------------------+------+-------+----+-----+----+-------------| | |V:216,| | | | |Cantarell | |fonts-cantarell |I:306 |572 |59 |- |- |(GNOME 3, | | | | | | | |display) | |-------------------------+------+-------+----+-----+----+-------------| | | | | | | |Noto fonts | |fonts-noto |I:153 |31 |61 |63 |40 |(Google, | | | | | | | |multi-lingual| | | | | | | |with CJK) | |-------------------------+------+-------+----+-----+----+-------------| | | | | | | |DejaVu (GNOME| | | | | | | |2, | |fonts-dejavu |I:421 |35 |58 |68 |40 |MCM:Verdana, | | | | | | | |extended | | | | | | | |Bitstream | | | | | | | |Vera) | |-------------------------+------+-------+----+-----+----+-------------| | | | | | | |Liberation | | |V:130,| | | | |fonts for | |fonts-liberation2 |I:427 |15 |56 |60 |40 |LibreOffice | | | | | | | |(Red Hat, | | | | | | | |MCMATC) | |-------------------------+------+-------+----+-----+----+-------------| | | | | | | |Chrome OS: | | |V:20, | | | | |Arimo, Tinos | |fonts-croscore |I:40 |5274 |56 |60 |40 |and Cousine | | | | | | | |(Google, | | | | | | | |MCMATC) | |-------------------------+------+-------+----+-----+----+-------------| | | | | | | |Chrome OS: | |fonts-crosextra-carlito |V:21, |2696 |57 |- |- |Carlito | | |I:131 | | | | |(Google, | | | | | | | |MCM:Calibri )| |-------------------------+------+-------+----+-----+----+-------------| | | | | | | |Chrome OS: | | | | | | | |Caladea | |fonts-crosextra-caladea |I:128 |347 |- |55 |- |(Google, |     | | | | | | |MCM:Cambria )| | | | | | | |(Latin only )| |-------------------------+------+-------+----+-----+----+-------------| | |V:76, | | | | |GNU FreeFont | |fonts-freefont-ttf |I:218 |14460 |57 |59 |40 |(extended URW| | | | | | | |Nimbus) | |-------------------------+------+-------+----+-----+----+-------------| | | | | | | |Debian | | |V:123,| | | | |task-desktop,| |fonts-quicksand |I:438 |392 |56 |- |- |Quicksand | | | | | | | |(display, | | | | | | | |Latin only) | |-------------------------+------+-------+----+-----+----+-------------| | | | | | | |A typeface | | |V:24, | | | | |designed for | |fonts-hack |I:120 |2508 |- |- |40 P|source code | | | | | | | |Hack | | | | | | | |(Facebook) | |-------------------------+------+-------+----+-----+----+-------------| |fonts-sil-gentiumplus |I:32 |14345 |- |54 |- |Gentium SIL | |-------------------------+------+-------+----+-----+----+-------------| |fonts-sil-charis |I:27 |6704 |- |59 |- |Charis SIL | |-------------------------+------+-------+----+-----+----+-------------| | | | | | | |URW Nimbus | | |V:167,| | | | |(Nimbus Sans,| |fonts-urw-base35 |I:472 |15560 |56 |60 |40 |Roman No. 9 | | | | | | | |L, Mono L, | | | | | | | |MCAHTC) | |-------------------------+------+-------+----+-----+----+-------------| |fonts-ubuntu |V:2, |4339 |58 |- |33 P|Ubuntu fonts | | |I:5 | | | | |(display) | |-------------------------+------+-------+----+-----+----+-------------| | |V:0, | | | | |Cool retro | |fonts-terminus |I:3 |452 |- |- |33 |terminal | | | | | | | |fonts | |-------------------------+------+-------+----+-----+----+-------------| | | | | | | |Downloader of| | |V:1, | | | | |Microsoft | |ttf-mscorefonts-installer|I:49 |85 |56? |60 |40 |non-free | | | | | | | |fonts (see | | | | | | | |below) | +----------------------------------------------------------------------+     Here: * "MCM" stands for "metric compatible with fonts provided by Microsoft" * "MCMATC" stands for "metric compatible with fonts provided by Microsoft: Arial, Times New Roman, Courier New" * "MCAHTC" stands for "metric compatible with fonts provided by Adobe: Helvetica, Times, Courier"     * Numbers in font type columns stands for the rough relative "M" width for the same point size font. * "P" in mono font type columns stands for its usability for programming having clearly distinguishable "0"/"O" and "1"/ "I"/"l". * The ttf-mscorefonts-installer package downloads Microsoft's "Core fonts for the Web" and installs Arial, Times New Roman, Courier New, Verdana, ... . These installed font data are non-free data.     Many free Latin fonts have their lineage traced to URW Nimbus family or Bitstream Vera. Dica If your locale needs fonts not covered well by the above fonts,     please use aptitude to check under task packages listed under "Tasks" -> "Localization". The font packages listed as "Depends:" or "Recommends:" in the localization task packages are the primary candidates. 7.6.2. Font rasterization Debian uses FreeType to rasterize fonts. Its font choice     infrastructure is provided by the Fontconfig font configuration library. Tabela 7.5. List of notable font environment and related packages +---------------------------------------------------------------+ | pacote |popcon |tamanho| descrição | |---------------------+-------+-------+-------------------------| |libfreetype6 |V:560, |938 |FreeType font | | |I:997 | |rasterization library | |---------------------+-------+-------+-------------------------| |libfontconfig1 |V:554, |587 |Fontconfig font | | |I:849 | |configuration library |     |---------------------+-------+-------+-------------------------| |fontconfig |V:437, |680 |fc-*: CLI commands for | | |I:721 | |Fontconfig | |---------------------+-------+-------+-------------------------| |font-manager |V:2, |1022 |Font Manager: GUI command| | |I:8 | |for Fontconfig | |---------------------+-------+-------+-------------------------| |nautilus-font-manager|V:0, |37 |Nautilus extension for | | |I:0 | |Font Manager | +---------------------------------------------------------------+ Dica Some font packages such as fonts-noto* install too many fonts. You may also want to keep some font packages installed but disabled under the normal use situation. The multiple glyphs are     expected for some Unicode code points due to Han unification and unwanted gliphs may be chosen by the unconfigured Fontconfig library. One of the most annoying case is "U+3001 IDEOGRAPHIC COMMA" and "U+3002 IDEOGRAPHIC FULL STOP" among CJK countries. You can avoid this problematic situation easily by configuring font availability using Font Manager GUI (font-manager).     You can list font configuration state from the command line, too. * "fc-match(1)" for fontconfig font default     * "fc-list(1)" for available fontconfig fonts     You can configure font configuration state from the text editor but this is non-trivial. See fonts.conf(5). 7.7. Sandbox     Many mostly GUI applications on Linux are available in binary formats from non-Debian sources. * AppImage -- Linux apps that run anywhere     * FLATHUB -- Apps for Linux, right here * snapcraft -- The app store for Linux Atenção     Binaries from these sites may include proprietary non-free software packages. There is some raison d'être for these binary format distributions for Free Software aficionados using Debian since these can     accommodate clean set of libraries used for each application by the respective upstream developer independent of the ones provided by Debian. The inherent risk of running external binaries can be reduced by     using the sandbox environment which leverages modern Linux security features (see Secção 4.7.5, “Linux security features”). * For binaries from AppImage and some upstream sites, run them in firejail with manual configuration.     * For binaries from FLATHUB, run them in Flatpak . (No manual configuration required.) * For binaries from snapcraft, run them in Snap . (No manual configuration required. Compatible with daemon programs.) The xdg-desktop-portal package provides a standardized API to     common desktop features. See xdg-desktop-portal (flatpak) and xdg-desktop-portal (snap) . Tabela 7.6. List of notable sandbox environment and related packages +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |-----------------------------+------+-------+------------------| | | | |Flatpak | | |V:65, | |application | |flatpak |I:70 |7499 |deployment | | | | |framework for | | | | |desktop apps | |-----------------------------+------+-------+------------------| |gnome-software-plugin-flatpak|V:20, |254 |Flatpak support | | |I:29 | |for GNOME Software| |-----------------------------+------+-------+------------------| | |V:67, | |Daemon and tooling| |snapd |I:70 |60022 |that enable snap | | | | |packages | |-----------------------------+------+-------+------------------| |gnome-software-plugin-snap |V:1, |121 |Snap support for | | |I:2 | |GNOME Software | |-----------------------------+------+-------+------------------|     | | | |desktop | |xdg-desktop-portal |V:303,|1936 |integration portal| | |I:394 | |for Flatpak and | | | | |Snap | |-----------------------------+------+-------+------------------| | |V:274,| |xdg-desktop-portal| |xdg-desktop-portal-gtk |I:392 |715 |backend for gtk | | | | |(GNOME) | |-----------------------------+------+-------+------------------| | |V:53, | |xdg-desktop-portal| |xdg-desktop-portal-kde |I:72 |1438 |backend for Qt | | | | |(KDE) | |-----------------------------+------+-------+------------------| | |V:0, | |xdg-desktop-portal| |xdg-desktop-portal-wlr |I:4 |135 |backend for | | | | |wlroots (Wayland) | |-----------------------------+------+-------+------------------| | | | |a SUID security | |firejail |V:1, |1771 |sandbox program | | |I:4 | |firejail for use | | | | |with AppImage | +---------------------------------------------------------------+ This sandbox environment technology is very much like apps on     smart phone OS where apps are executed under controlled resource accesses. Some large GUI applications such as web browsers on Debian also     use sandbox environment technology internally to make them more secure. 7.8. Remote desktop Tabela 7.7. List of notable remote access server Access to the desktop and applications which use Wayland protocol and run on the remote host is supported by the GNOME Remote Desktop on the remote host through VNC or RDP to the local client. Access to the desktop capabilities of all QEMU virtual machines is supported by the SPICE (the Simple Protocol for Independent Computing Environments) protocol. +---------------------------------------------------------------+ | pacote |popcon|tamanho|protocols| descrição | |--------------------------+------+-------+---------+-----------| | | | | |GNOME | |gnome-remote-desktop |V:35, |1068 |RDP |Remote | | |I:221 | | |Desktop | | | | | |server | |--------------------------+------+-------+---------+-----------| | | | | |xrdp, | | | | | |Remote | |xrdp |V:22, |3202 |RDP |Desktop | | |I:24 | | |Protocol | | | | | |(RDP) | | | | | |server | |--------------------------+------+-------+---------+-----------| | | | | |x11vnc, | | | | | |Remote | |x11vnc |V:6, |2107 |RFB (VNC)|Framebuffer| | |I:23 | | |Protocol | | | | | |(VNC) | | | | | |server | |--------------------------+------+-------+---------+-----------| | | | | |TigerVNC, | | | | | |Remote | |tigervnc-standalone-server|V:4, |2768 |RFB (VNC)|Framebuffer| | |I:15 | | |Protocol | | | | | |(VNC) |     | | | | |server | |--------------------------+------+-------+---------+-----------| | | | | |GNOME | |gnome-connections |V:0, |1356 |RDP, RFB |remote | | |I:1 | |(VNC) |desktop | | | | | |client | |--------------------------+------+-------+---------+-----------| | | | |RDP, RFB |Vinagre: | | |V:2, | |(VNC), |GNOME | |vinagre |I:68 |4249 |SPICE, |remote | | | | |SSH |desktop | | | | | |client | |--------------------------+------+-------+---------+-----------| | | | |RDP, RFB |Remmina: | |remmina |V:15, |953 |(VNC), |GTK remote | | |I:72 | |SPICE, |desktop | | | | |SSH, ... |client | |--------------------------+------+-------+---------+-----------| | | | | |KRDC: KDE | |krdc |V:1, |3873 |RDP, RFB |remote | | |I:17 | |(VNC) |desktop | | | | | |client | |--------------------------+------+-------+---------+-----------| | | | | |Apache | | | | |RDP, RFB |Guacamole: | | |V:0, | |(VNC), |clientless | |guacd |I:0 |83 |SSH / |remote | | | | |HTML5 |desktop | | | | | |gateway | | | | | |(HTML5) | |--------------------------+------+-------+---------+-----------| | | | | |Virtual | | | | |RFB |Machine | |virt-viewer |V:5, |1284 |(VNC), |Manager's | | |I:52 | |SPICE |GUI display| | | | | |client of | | | | | |guest OS | +---------------------------------------------------------------+ 7.9. X server connection     There are several ways to connect from an application on a remote host to the X server including xwayland on the local host. Tabela 7.8. Lista de métodos de ligação ao servidor X +---------------------------------------------------------------+ | pacote |popcon|tamanho| comando | descrição | |-----------------+------+-------+---------------+--------------| | |V:730,| |sshd with |SSH server | |openssh-server |I:814 |1804 |option |(secure) | | | | |X11-forwarding | | |-----------------+------+-------+---------------+--------------|     |openssh-client |V:866,|4959 |ssh -X |SSH client | | |I:996 | | |(secure) | |-----------------+------+-------+---------------+--------------| |xauth |V:165,|81 |xauth |X authority | | |I:961 | | |file utility | |-----------------+------+-------+---------------+--------------| |x11-xserver-utils|V:302,|568 |xhost |server access | | |I:528 | | |control for X | +---------------------------------------------------------------+ 7.9.1. X server local connection Access to the local X server by the local applications which use X core protocol can be locally connected through a local UNIX domain socket. This can be authorized by the authority file     holding access cookie. The authority file location is identified by the "$XAUTHORITY" environment variable and X display is identified by the "$DISPLAY" environment variable. Since these are normally set automatically, no special action is needed, e.g. "gitk" as the following.     username $ gitk Nota     For xwayland, XAUTHORITY holds value like "/run/user/1000 /.mutter-Xwaylandauth.YVSU30". 7.9.2. X server remote connection Access to the local X server display from the remote applications     which use X core protocol is supported by using the X11 forwarding feature. * Open an gnome-terminal on the local host. * Run ssh(1) with -X option to establish a connection with the remote site as the following.     localname @ localhost $ ssh -q -X loginname@remotehost.domain Password: * Run an X application command, e.g. "gitk", on the remote site as the following. loginname @ remotehost $ gitk Este método pode mostrar o resultado de um cliente X remoto como     se ele estivesse ligado localmente através de um socket de domínio UNIX local.     See Secção 6.3, “O servidor de acesso remoto e utilitários (SSH)” for SSH/SSHD. Atenção     A remote TCP/IP connection to the X server is disabled by default on the Debian system for security reasons. Don't enable them by simply setting "xhost +" nor by enabling XDMCP connection, if you can avoid it. 7.9.3. X server chroot connection Access to the X server by the applications which use X core protocol and run on the same host but in an environment such as     chroot where the authority file is not accessible, can be authorized securely with xhost by using the User-based access, e.g. "gitk" as the following. username $ xhost + si:localuser:root ; sudo chroot /path/to # cd /src     # gitk # exit username $ xhost - 7.10. Área de transferência (Clipboard)     For clipping text to clipboard, see Secção 1.4.4, “Mouse operations”.     For clipping graphics to clipboard, see Secção 11.6, “Ferramentas de dados gráficos”.     Some CLI commands can manipulate character clipboard (PRIMARY and CLIPBOARD), too. Tabela 7.9. List of programs related to manipulating character clipboard +---------------------------------------------------------------+ | | |tamanho| | | | pacote |popcon| do | alvo | descrição | | | |pacote | | | |------------+------+-------+-------+---------------------------| |xsel |V:9, |55 |X |command line interface to X| | |I:42 | | |selections (clipboard) | |------------+------+-------+-------+---------------------------|     |xclip |V:12, |62 |X |command line interface to X| | |I:63 | | |selections (clipboard) | |------------+------+-------+-------+---------------------------| | |V:3, | | |wl-copy wl-paste: command | |wl-clipboard|I:14 |162 |Wayland|line interface to Wayland | | | | | |clipboard | |------------+------+-------+-------+---------------------------| | |V:10, | |Consola|a daemon that captures | |gpm |I:12 |521 |do |mouse events on Linux | | | | |Linux |console | +---------------------------------------------------------------+ Capítulo 8. I18N e L10N     O Multilingualization (M17N) ou Suporte de Linguagem Nativa para um software de aplicação é feito em 2 passos. * Internationalization (I18N): Para fazer com que o software lide potencialmente com múltiplos locales.     * Localization (L10N): Tornar o software útil num locale específico. Dica     There are 17, 18, or 10 letters between "m" and "n", "i" and "n", or "l" and "n" in multilingualization, internationalization, and localization which correspond to M17N, I18N, and L10N. See Internationalization and localization for details. 8.1. O locale The behavior of programs supporting internationalization are configured by the environment variable "$LANG" to support     localization. Actual support of locale dependent features by the libc library requires to install locales or locales-all packages. The locales package requires to be initialized properly. If neither locales or locales-all package are installed, support     of locale features are lost and system uses US English messages and handles data as ASCII. This behavior is the same way as "$LANG" is set by "LANG=", "LANG=C", or "LANG=POSIX". The modern software such as GNOME and KDE are multilingualized. They are internationalized by making them handle UTF-8 data and     localized by providing their translated messages through the gettext(1) infrastructure. Translated messages may be provided as separate localization packages. The current Debian desktop GUI system normally sets the locale under GUI environment as "LANG=xx_YY.UTF-8". Here, "xx" is ISO     639 language codes and "YY" is ISO 3166 country codes. These values are set by the desktop configuration GUI dialogue and change the program behavior. See Secção 1.5.2, “A variável "$LANG"” 8.1.1. Fundamentos para o locale UTF-8 The simplest representation of the text data is ASCII which is     sufficient for English and uses less than 127 characters (representable with 7 bits). Mesmo o Inglês simples pode conter caracteres não-ASCII, ex. as     marcas de citação esquerda e direita ligeiramente curvas não estão disponíveis em ASCII.     “double quoted text” is not "double quoted ASCII" ‘single quoted text’ is not 'single quoted ASCII' In order to support more characters, many character sets and     encoding systems have been used to support many languages (see Tabela 11.2, “Lista de valores de codificação e a utilização deles”). Unicode character set can represent practically all characters     known to human with 21 bit code point range (i.e., 0 to 10FFFF in hexadecimal notation). Text encoding system UTF-8 fits Unicode code points into a sensible 8 bit data stream mostly compatible with the ASCII data processing system. This makes UTF-8 the modern preferred choice.     UTF stands for Unicode Transformation Format. When ASCII plain text data is converted to UTF-8 one, it has exactly the same content and size as the original ASCII one. So you loose nothing by deploying UTF-8 locale. Under UTF-8 locale with the compatible application program, you can display and edit any foreign language text data as long as     required fonts and input methods are installed and enabled. For example under "LANG=fr_FR.UTF-8" locale, gedit(1) (text editor for the GNOME desktop) can display and edit Chinese character text data while presenting menus in French. Dica Both the new standard "en_US.UTF-8" locale and the old standard     "C"/"POSIX" locale use the standard US English message, they have subtle differences in sorting order etc. If you want to handle not only ASCII characters but also handle all UTF-8 encoded characters gracefully while maintaining the old "C" local behavior, use the non-standard "C.UTF-8" locale on Debian. Nota Alguns programas consomem mais memória após suportarem I18N. Isto     é porque estão codificados para usar UTF-32(UCS4) internamente para suportar Unicode para optimização de velocidade e consomem 4 bytes por cada caractere ASCII independentemente do locale selcionado. Mais uma vez, não perde nada ao implantar o locale UTF-8. 8.1.2. A reconfiguração do locale     In order for the system to access a particular locale, the locale data must be compiled from the locale database.     The locales package does not come with pre-compiled locale data. You need to configure it as:     # dpkg-reconfigure locales     This process involves 2 steps. 1. Select all required locale data to be compiled into the binary form. (Please make sure to include at least one UTF-8     locale) 2. Set the system wide default locale value by creating "/etc/ default/locale" for use by PAM (see Secção 4.5, “PAM e NSS”).     The system wide default locale value set in "/etc/default/locale" may be overridden by the GUI configuration for GUI applications. Nota     Actual traditional encoding system can be identified by "/usr/ share/i18n/SUPPORTED". Thus, the "LANG=en_US" is "LANG= en_US.ISO-8859-1". The locales-all package comes with pre-compiled locale data for     all locale data. Since it doesn't create "/etc/default/locale", you may still need to install the locales package, too. Dica     The locales package of some Debian derivative distributions come with pre-compiled locale data for all locale data. You need to install both locales and locales-all packages on Debian to emulate such system environment. 8.1.3. Codificação de nomes de ficheiros Para troca de dados entre plataformas (veja Secção 10.1.7, “Aparelho de armazenamento amovível”), pode precisar de montar     algum sistema de ficheiros com codificações particulares. por exemplo, o mount(8) para sistema de ficheiros vfat assume CP437 se usado sem opção. Precisa de fornecer uma opção explícita de montagem para usar UTF-8 ou CP932 para os nomes dos ficheiros. Nota Quando se monta automaticamente uma caneta de memória USB sob ambientes de trabalho modernos como o GNOME, pode fornecer tal     opção de montagem ao clicar com o botão direito no ícone no ambiente de trabalho, clique no separador "Drive", clique para expandir "Definições" e insira "utf8" nas "Opções de montagem:". Não próxima vez que esta caneta de memória for montada, está activa a montagem com UTF-8. Nota Se está a atualizar o sistema ou a mover os discos de um sistema     antigo não-UTF-8, os nomes de ficheiros com caracteres não-ASCII podem ser codificados com as codificações históricas e obsoletas como a ISO-8859-1 ou eucJP. por favor procure a ajuda de ferramentas de conversão de texto para convertê-los para UTF-8. Veja Secção 11.1, “Ferramentas de conversão de dados em texto”. O Samba usa Unicode para os clientes mais recentes (Windows NT, 200x, XP) mas usa CP850 para os clientes mais antigos (DOS e     Windows 9x/Me) por predefinição. Esta predefinição para os clientes mais antigos pode ser alterada a usar "dos charset" no ficheiro "/etc/samba/smb.conf" por exemplo para CP932 para Japonês. 8.1.4. Mensagens localizadas e documentação traduzida Existem traduções para muitas das mensagens de texto e documentos que são mostrados no sistema Debian, tais como as mensagens de     erro, as saídas normais dos programas, os menus e os manuais. A cadeia de ferramentas de comandos gettext(1) do GNU é usada como a ferramenta backend para a maioria das atividades de tradução. Sob "Tarefas" → "Localização" o aptitude(8) disponibiliza uma     lista extensa de pacotes binários úteis que adicionam mensagens localizadas às aplicações e fornecem documentação traduzida. Por exemplo, pode obter as mensagens localizadas para os manuais     ao instalar o pacote manpages-LANG. Para ler o manual em linguagem Italiana para o nome_do_programa a partir de "/usr/ share/man/it/", execute o seguinte.     LANG=it_IT.UTF-8 man programname     GNU gettext can accommodate priority list of translation languages with $LANGUAGE environment variable. For example:     $ export LANGUAGE="pt:pt_BR:es:it:fr"     For more, see info gettext and read the section "The LANGUAGE variable". 8.1.5. Efeitos do locale The sort order of characters with sort(1) and ls(1) are affected     by the locale. Exporting LANG=en_US.UTF-8 sorts in the dictionary A->a->B->b...->Z->z order, while exporting LANG=C.UTF-8 sorts in ASCII binary A->B->...->Z->a->b... order.     The date format of ls(1) is affected by the locale (see Secção 9.3.4, “Amostragem personalizada de hora e data”).     The date format of date(1) is affected by the locale. For example: $ unset LC_ALL $ LANG=en_US.UTF-8 date Thu Dec 24 08:30:00 PM JST 2023 $ LANG=en_GB.UTF-8 date     Thu 24 Dec 20:30:10 JST 2023 $ LANG=es_ES.UTF-8 date jue 24 dic 2023 20:30:20 JST $ LC_TIME=en_DK.UTF-8 date 2023-12-24T20:30:30 JST Number punctuation are different for locales. For example, in     English locale, one thousand point one is displayed as "1,000.1" while in German locale, it is displayed as "1.000,1". You may see this difference in spreadsheet program. Each detail feature of "$LANG" environment variable may be overridden by setting "$LC_*" variables. These environment variables can be overridden again by setting "$LC_ALL" variable.     See locale(7) manpage for the details. Unless you have strong reason to create complicated configuration, please stay away from them and use only "$LANG" variable set to one of the UTF-8 locales. 8.2. A entrada do teclado 8.2.1. The keyboard input for Linux console and X Window O sistema Debian pode ser configurado para funcionar com muitas     disposições internacionais de teclado a usar os pacotes keyboard-configuration e console-setup.     # dpkg-reconfigure keyboard-configuration # dpkg-reconfigure console-setup For the Linux console and the X Window system, this updates configuration parameters in "/etc/default/keyboard" and "/etc/     default/console-setup". This also configures the Linux console font. Many non-ASCII characters including accented characters used by many European languages can be made available with dead key, AltGr key, and compose key. 8.2.2. The keyboard input for Wayland For GNOME on Wayland desktop system, Secção 8.2.1, “The keyboard input for Linux console and X Window” can't support non-English European languages. IBus was made to support not only Asian languages but also European languages. The package dependency of     GNOME desktop Environment recommends "ibus" via "gnome-shell". The code of "ibus" has been updated to integrate setxkbmap and XKB option functionalities. You need to configure ibus from "GNOME Settings" or "GNOME Tweaks" for the multilingualized keyboard input. Nota If ibus is active, your classic X keyboard configuration by the     setxkbmap may be overridden by ibus even under classic X-based desktop environment. You can disable installed ibus using im-config to set input method to "None". For more, see Debian Wiki on keyboard. 8.2.3. O suporte a método de entrada com IBus     Since GNOME desktop Environment recommends "ibus" via "gnome-shell", "ibus" is the good choice for input method.     Entrada multilingue para a aplicação é processada como: Keyboard Application | ^     | | +-> Linux kernel -> Input method (ibus) -> Gtk, Qt, X, Wayland +-- Engine--+     The list of IBus and its engine packages are the following. Tabela 8.1. List of IBus and its engine packages +---------------------------------------------------------------+ | pacote |popcon|tamanho| locale suportado | |---------------------+------+-------+--------------------------| |ibus |V:198,|1723 |estrutura de método de | | |I:245 | |entrada que usa dbus | |---------------------+------+-------+--------------------------| |ibus-mozc |V:1, |944 |Japonês | | |I:3 | | | |---------------------+------+-------+--------------------------| |ibus-anthy |V:0, |8856 |, , | | |I:1 | | | |---------------------+------+-------+--------------------------| |ibus-skk |V:0, |242 |, , | | |I:0 | | | |---------------------+------+-------+--------------------------| |ibus-kkc |V:0, |210 |, , | | |I:0 | | | |---------------------+------+-------+--------------------------| |ibus-libpinyin |V:1, |2761 |Chinês (para zh_CN) | | |I:3 | | | |---------------------+------+-------+--------------------------| |ibus-chewing |V:0, |247 |, , (para zh_TW) | | |I:0 | | | |---------------------+------+-------+--------------------------| |ibus-libzhuyin |V:0, |40995 |, , (para zh_TW) | | |I:0 | | | |---------------------+------+-------+--------------------------|     |ibus-rime |V:0, |73 |, , (for zh_CN/zh_TW) | | |I:0 | | | |---------------------+------+-------+--------------------------| |ibus-cangjie |V:0, |119 |, , (for zh_HK) | | |I:0 | | | |---------------------+------+-------+--------------------------| |ibus-hangul |V:0, |264 |Coreano | | |I:2 | | | |---------------------+------+-------+--------------------------| |ibus-libthai |I:0 |90 |Thai | |---------------------+------+-------+--------------------------| |ibus-table-thai |I:0 |58 |Thai | |---------------------+------+-------+--------------------------| |ibus-unikey |V:0, |318 |Vietnamita | | |I:0 | | | |---------------------+------+-------+--------------------------| | |V:0, | |Multilingual: Keyman | |ibus-keyman |I:0 |161 |engine for over 2000 | | | | |languages | |---------------------+------+-------+--------------------------| |ibus-table |V:0, |2176 |motor de tabela para IBus | | |I:1 | | | |---------------------+------+-------+--------------------------| |ibus-m17n |V:0, |395 |Multilingue: Indiano, | | |I:1 | |Árabe e outros | |---------------------+------+-------+--------------------------| | |V:50, | |additional widgets for | |plasma-widgets-addons|I:100 |1992 |Plasma 5 containing | | | | |Keyboard Indicator | +---------------------------------------------------------------+ Nota For Chinese, "fcitx5" may be an alternative input method     framework. For Emacs aficionados, "uim" may be an alternative. Either cases, you may need to do extra manual configuration with im-config. Some old classic input methods such as "kinput2" may still exist in Debian repository but are not recommended for the modern environment. 8.2.4. Um exemplo para Japonês I find the Japanese input method started under English     environment ("en_US.UTF-8") very useful. Here is how I did this with IBus for GNOME on Wayland: 1. Install the Japanese input tool package ibus-mozc (or ibus-anthy) with its recommended packages such as im-config. 2. Select "Settings" → "Keyboard" → "Input Sources" → click "+" in "Input Sources" → "Japanese" → "Japanese mozc (or anthy)" and click "Add" if it hasn't been activated.     3. You may chose as many input sources. 4. Voltar a fazer login na conta do utilizador. 5. Setup each input source by right clicking the GUI toolbar icon. 6. Alterne entre as fontes de entrada instaladas com SUPER-ESPAÇO. (SUPER é normalmente a Tecla Windows.) Dica If you wish to have access to alphabet only keyboard environment     with the physical Japanese keyboard on which shift-2 has " (double quotation mark) engraved, you select "Japanese" in the above procedure. You can enter Japanese using "Japanese mozc (or anthy)" with physical "US" keyboard on which shift-2 has @ (at mark) engraved. * The GUI menu entry for im-config(8) is "Input method". * Alternatively, execute "im-config" from user's shell.     * O im-config(8) comporta-se de modo diferente se o comando for executado pelo root ou não. * im-config(8) activa o melhor método de entrada do sistema e é predefinido sem qualquer acção do utilizador. 8.3. O ecrã de resultados Linux console can only display limited characters. (You need to     use special terminal program such as jfbterm(1) to display non-European languages on the non-GUI console.) GUI environment (Capítulo 7, GUI System) can display any     characters in the UTF-8 as long as required fonts are installed and enabled. (The encoding of the original font data is taken care and transparent to the user.) 8.4. Caracteres Asiáticos de Leste de Altura Ambígua Em localizações ao leste da Asia, o desenhar de caixa, os     caracteres Gregos e Cirílicos podem aparecer mais largos que o desejado e causarem o desalinhamento da saída do terminal (veja Unicode Standard Annex #11).     Pode contornar este problema: * gnome-terminal: Preferences → Profiles → Profile name →     Compatibility → Ambiguous-wide characters → Narrow * ncurses: Define ambiente export NCURSES_NO_UTF8_ACS=0. Capítulo 9. Dicas do sistema     Aqui, descrevo dicas básicas para configurar e gerir sistemas, a maioria a partir da consola. 9.1. The console tips     There are some utility programs to help your console activities. Tabela 9.1. List of programs to support console activities +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |--------+------+-------+---------------------------------------| |mc |V:50, |1542 |See Secção 1.3, “Midnight Commander | | |I:209 | |(MC)” | |--------+------+-------+---------------------------------------| |bsdutils|V:519,|356 |script(1) command to make a record of | | |I:999 | |terminal session | |--------+------+-------+---------------------------------------| |screen |V:71, |1003 |terminal multiplexador com emulação de | | |I:230 | |terminal VT100/ANSI | |--------+------+-------+---------------------------------------| |tmux |V:43, |1180 |multiplexador alternativo de terminal | | |I:146 | |(Use "Control-B" em vez disto) | |--------+------+-------+---------------------------------------| |fzf |V:4, |3648 |fuzzy text finder |     | |I:16 | | | |--------+------+-------+---------------------------------------| |fzy |V:0, |54 |fuzzy text finder | | |I:0 | | | |--------+------+-------+---------------------------------------| |rlwrap |V:1, |330 |readline feature command line wrapper | | |I:15 | | | |--------+------+-------+---------------------------------------| |ledit |V:0, |331 |readline feature command line wrapper | | |I:11 | | | |--------+------+-------+---------------------------------------| |rlfe |V:0, |45 |readline feature command line wrapper | | |I:0 | | | |--------+------+-------+---------------------------------------| | |V:5, | |fast recursive string search in the | |ripgrep |I:19 |5152 |source code tree with automatic | | | | |filtering | +---------------------------------------------------------------+ 9.1.1. Gravar as atividades da shell de modo limpo 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     There are alternative methods to record the shell activities: * Use tee (usable during the boot process in the initramfs): $ sh -i 2>&1 | tee typescript * Use gnome-terminal with the extend line buffer for scrollback. * Use screen with "^A H" (see Secção 9.1.2, “O programa screen”     ) to perform recording of console. * Use vim with ":terminal" to enter the terminal mode. Use "Ctrl-W N" to exit from terminal mode to normal mode. Use ":w typescript" to write the buffer to a file. * Use emacs with "M-x shell", "M-x eshell", or "M-x term" to enter recording console. Use "C-x C-w" to write the buffer to a file. 9.1.2. O programa screen 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     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. Tabela 9.2. Lista de ligações de teclas para o screen +---------------------------------------------------------------+ | tecla de | significado | | atalho | | |-------------+-------------------------------------------------| |^A ? |mostra um écran de ajuda (mostra as teclas de | | |atalho) | |-------------+-------------------------------------------------| |^A c |cria uma nova janela e muda para lá | |-------------+-------------------------------------------------| |^A n |vai à janela seguinte | |-------------+-------------------------------------------------| |^A p |vai à janela anterior | |-------------+-------------------------------------------------| |^A 0 |vaia à janela número 0 | |-------------+-------------------------------------------------| |^A 1 |vai à janela número 1 |     |-------------+-------------------------------------------------| |^A w |mostra uma lista de janelas | |-------------+-------------------------------------------------| |^A a |envia Ctrl-A à janela atual como entrada do | | |teclado | |-------------+-------------------------------------------------| |^A h |escreve uma cópia física da janela atual para um | | |ficheiro | |-------------+-------------------------------------------------| |^A H |inicia/termina o registo da janela atual para um | | |ficheiro | |-------------+-------------------------------------------------| |^A ^X |bloqueia o terminal (protegido por palavra-passe)| |-------------+-------------------------------------------------| |^A d |separa a sessão do ecrã do terminal | |-------------+-------------------------------------------------| |^A DD |separa a sessão do ecrã e termina a sessão | +---------------------------------------------------------------+     Veja screen(1) para detalhes.     See tmux(1) for functionalities of the alternative command. 9.1.3. Navigating around directories     In Secção 1.4.2, “Personalizar bash”, 2 tips to allow quick navigation around directories are described: $CDPATH and mc.     If you use fuzzy text filter program, you can do without typing the exact path. For fzf, include following in ~/.bashrc. FZF_KEYBINDINGS_PATH=/usr/share/doc/fzf/examples/key-bindings.bash     if [ -f $FZF_KEYBINDINGS_PATH ]; then . $FZF_KEYBINDINGS_PATH fi     For example: * You can jump to a very deep subdirectory with minimal efforts. You first type "cd **" and press Tab. Then you will be prompted with candidate paths. Typing in partial path strings, e.g., s/d/b foo, will narrow down candidate paths. You select the path to be used by cd with cursor and return keys.     * You can select a command from the command history more efficiently with minimal efforts. You press Ctrl-R at the command prompt. Then you will be prompted with candidate commands. Typing in partial command strings, e.g., vim d, will narrow down candidates. You select the one to be used with cursor and return keys. 9.1.4. Readline wrapper Some commands such as /usr/bin/dash which lacks command line     history editing capability can add such functionality transparently by running under rlwrap or its equivalents.     $ rlwrap dash -i     This provides convenient platform to test subtle points for dash with friendly bash-like environment. 9.1.5. Scanning the source code tree The rg(1) command in the ripgrep package offers a faster alternative to the grep(1) command for scanning the source code     tree for typical situation. It takes advantage of modern multi-core CPUs and automatically applies reasonable filters to skip some files. 9.2. Personalizar o vim After you learn basics of vim(1) through Secção 1.4.8, “Using     vim”, please read Bram Moolenaar's "Seven habits of effective text editing (2000)" to understand how vim should be used. 9.2.1. Customizing vim with internal features The behavior of vim can be changed significantly by enabling its     internal features through the Ex-mode commands such as "set ..." to set vim options. These Ex-mode commands can be included in user's vimrc file,     traditional "~/.vimrc" or git-friendly "~/.vim/vimrc". Here is a very simple example ^[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     The keymap of vim can be changed in user's vimrc file. E.g.: Cuidado     Don't try to change the default key bindings without very good reasons. """ Popular mappings (imitating LazyVim etc.) """ Window moves without using CTRL-W which is dangerous in INSERT mode nnoremap h nnoremap j nnoremap k silent! nnoremap l """ Window resize nnoremap vertical resize -2 nnoremap resize -2 nnoremap resize +2 nnoremap vertical resize +2 """ Clear hlsearch with ( is mapped as above) nnoremap noh inoremap noh """ center after jump next nnoremap n nzz nnoremap N Nzz """ fast "jk" to get out of INSERT mode () inoremap jk noh """ fast "" to get out of TERM mode (CTRL-\ CTRL-N) tnoremap """ fast "jk" to get out of TERM mode (CTRL-\ CTRL-N) tnoremap jk """ previous/next trouble/quickfix item nnoremap [q cprevious nnoremap ]q cnext """ buffers nnoremap bprevious nnoremap bnext nnoremap [b bprevious nnoremap ]b bnext """ Add undo break-points     inoremap , ,u inoremap . .u inoremap ; ;u """ save file inoremap w xnoremap w nnoremap w snoremap w """ better indenting vnoremap < >gv """ terminal (Somehow under Linux, becomes in Vim) nnoremap terminal "nnoremap terminal """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" if ! has('nvim') """ Toggle paste mode with p for Vim (no need for Nvim) set pastetoggle=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 u inoremap u """ is re-purposed as above """ execute the previous macro recorded with Q nnoremap Q @@ """ repeat last substitute and *KEEP* flags nnoremap & :&& """ search visual selected string for visual mode xnoremap * y/\V" xnoremap # y?\V" endif In order for the above keybindings to function properly, the     terminal program needs to be configured to generate "ASCII DEL" for Backspace-key and "Escape sequence" for Delete-key.     Other miscellaneous configuration can be changed in user's vimrc file. E.g.: """ 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: and """ \%#\@w nnoremap w :WMToggle The new native Vim package system works nicely with "git" and     "git submodule". One such example configuration can be found at my git repository: dot-vim. This does essentially: * By using "git" and "git submodule", latest external packages, such as "name", are placed into ~/.vim/pack/*/opt/name and similar. * By adding :packadd! name line to user's vimrc file, these     packages are placed on runtimepath. * Vim loads these packages on runtimepath during its initialization. * At the end of its initialization, tags for the installed documents are updated with "helptags ALL".     For more, please start vim with "vim --startuptime vimstart.log" to check actual execution sequence and time spent for each step. It is quite confusing to see too many ways^[3] to manage and load     these external packages to vim. Checking the original information is the best cure. Tabela 9.3. Information on the initialization of vim +---------------------------------------------------------------+ |key strokes | information | |------------+--------------------------------------------------| |:help |explanation on the vim package mechanism | |package | | |------------+--------------------------------------------------| |:help |explanation on the runtimepath mechanism | |runtimepath | | |------------+--------------------------------------------------| |:version |internal states including candidates for the vimrc|     | |file | |------------+--------------------------------------------------| |:echo $VIM |the environment variable "$VIM" used to locate the| | |vimrc file | |------------+--------------------------------------------------| |:set |list of directories which will be searched for all| |runtimepath?|runtime support files | |------------+--------------------------------------------------| |:echo |the environment variable "$VIMRUNTIME" used to | |$VIMRUNTIME |locate various system provided runtime support | | |files | +---------------------------------------------------------------+ 9.3. Gravação de dados e apresentação 9.3.1. O daemon de log     Many traditional programs record their activities in the text file format under the "/var/log/" directory.     logrotate(8) is used to simplify the administration of log files on a system which generates a lot of log files. Many new programs record their activities in the binary file     format using systemd-journald(8) Journal service under the "/var/ log/journal" directory.     You can log data to the systemd-journald(8) Journal from a shell script by using the systemd-cat(1) command.     Veja Secção 3.4, “A mensagem do sistema” e Secção 3.3, “A mensagem do kernel”. 9.3.2. Analisador de relatório (Log)     Aqui estão analisadores de relatórios notáveis ("~Gsecurity::log-analyzer" no aptitude(8)). Tabela 9.4. Lista de analisadores de log do sistema +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |----------+------+-------+-------------------------------------| |logwatch |V:11, |2328 |analisador de log com saída bonita | | |I:13 | |escrito em Perl | |----------+------+-------+-------------------------------------| |fail2ban |V:98, |2126 |banir IPs que causam vários erros de | | |I:111 | |autenticação | |----------+------+-------+-------------------------------------| |analog |V:3, |3739 |analisador de log do servidor web | | |I:96 | | | |----------+------+-------+-------------------------------------| |awstats |V:6, |6928 |analisador de logs de servidor web | | |I:10 | |poderoso e cheio de funcionalidades | |----------+------+-------+-------------------------------------| |sarg |V:1, |845 |gerador de relatórios de análises do | | |I:1 | |squid |     |----------+------+-------+-------------------------------------| |pflogsumm |V:1, |109 |resumidor de entradas do relatório do| | |I:4 | |Postfix | |----------+------+-------+-------------------------------------| |fwlogwatch|V:0, |481 |analisador de log da firewall | | |I:0 | | | |----------+------+-------+-------------------------------------| |squidview |V:0, |189 |monitoriza e analisa ficheiros | | |I:0 | |access.log do squid | |----------+------+-------+-------------------------------------| | |V:0, | |visualizador de ficheiros de registo | |swatch |I:0 |99 |com correspondência de expressões | | | | |regulares, destaque e hooks | |----------+------+-------+-------------------------------------| |crm114 |V:0, |1119 |Mutilador de Expressões Regulares | | |I:0 | |Controlável e Filtro de Spam (CRM114)| |----------+------+-------+-------------------------------------| |icmpinfo |V:0, |44 |interpretar mensagens ICMP | | |I:0 | | | +---------------------------------------------------------------+ Nota     CRM114 disponibiliza uma infraestrutura de linguagem para escrever filtros fuzzy com a biblioteca de expressões regulares TRE. O uso popular dela é o filtro de spam de mail, mas pode ser usado como um analisador de registos. 9.3.3. Amostragem personalizada de dados em texto 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     Para o vim(1) e o aliás de modo paginador dele view(1), ":set hls" ativa pesquisas destacadas. 9.3.4. Amostragem personalizada de hora e data The default display format of time and date by the "ls -l" command depends on the locale (see Secção 1.2.6, “Marcas     temporais (Timestamps)” for value). The "$LANG" variable is referred first and it can be overridden by the "$LC_TIME" or "$LC_ALL" exported environment variables. The actual default display format for each locale depends on the     version of the standard C library (the libc6 package) used. I.e., different releases of Debian had different defaults. For iso-formats, see 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'"). Tabela 9.5. Display examples of time and date for the "ls -l" command with the time style value +---------------------------------------------------------------+ |valor do estilo de | localização | mostra a hora e data | | hora | | | |-------------------+-------------+-----------------------------| |iso |qualquer |01-19 00:15 | |-------------------+-------------+-----------------------------| |long-iso |qualquer |2009-01-19 00:15 | |-------------------+-------------+-----------------------------| |full-iso |qualquer |2009-01-19 00:15:16.000000000| | | |+0900 |     |-------------------+-------------+-----------------------------| |locale |C |Jan 19 00:15 | |-------------------+-------------+-----------------------------| |locale |en_US.UTF-8 |Jan 19 00:15 | |-------------------+-------------+-----------------------------| |locale |es_ES.UTF-8 |ene 19 00:15 | |-------------------+-------------+-----------------------------| |+%d.%m.%y %H:%M |qualquer |19.01.09 00:15 | |-------------------+-------------+-----------------------------| |+%d.%b.%y %H:%M |C ou |19.Jan.09 00:15 | | |en_US.UTF-8 | | |-------------------+-------------+-----------------------------| |+%d.%b.%y %H:%M |es_ES.UTF-8 |19.ene.09 00:15 | +---------------------------------------------------------------+ Dica     You can eliminate typing long option on commandline using command alias (see Secção 1.5.9, “Comando alias”): alias ls='ls --time-style=+%d.%m.%y %H:%M' 9.3.5. Echo de shell colorido 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}" 9.3.6. Comandos coloridos     Comandos coloridos são úteis para inspeccionar os seus resultados no ambiente interativo. Incluí o seguinte no meu "~/.bashrc". if [ "$TERM" != "dumb" ]; then eval "`dircolors -b`" alias ls='ls --color=always' alias ll='ls --color=always -l' alias la='ls --color=always -A' alias less='less -R' alias ls='ls --color=always'     alias grep='grep --color=always' alias egrep='egrep --color=always' alias fgrep='fgrep --color=always' alias zgrep='zgrep --color=always' else alias ll='ls -l' alias la='ls -A' fi O uso de alias limita os efeitos coloridos da utilização interactiva do comando. Tem vantagem sobre exportar a variável de     ambiente "export GREP_OPTIONS='--color=auto'" porque a cor pode ser vista sob programas paginadores como o less(1). Se deseja suprimir a cor quando canaliza (pipe) para outros programas, use antes "--color=auto" no exemplo em cima para "~/.bashrc". Dica     Pode desligar estes nomes alternativos coloridos no ambiente interativo ao invocar a shell com "TERM=dumb bash". 9.3.7. Recordar as atividades do editor para repetições complexas     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. 9.3.8. Gravar a imagem gráfica de uma aplicação X     Existem algumas maneiras de gravar a imagem gráfica de uma aplicação X, a incluir um ecrã xterm. Tabela 9.6. Lista de ferramentas gráficas de manipulação de imagens +---------------------------------------------------------------+ | pacote |popcon |tamanho|screen | comando | |----------------+-------+-------+-------+----------------------| |gnome-screenshot|V:18, |1134 |Wayland|screenshot application| | |I:173 | | |for GNOME | |----------------+-------+-------+-------+----------------------| |flameshot |V:7, |3364 |Wayland|screenshot application| | |I:15 | | |on steroid |     |----------------+-------+-------+-------+----------------------| |gimp |V:50, |19304 |Wayland|screenshot in GUI menu| | |I:252 | |+ X | | |----------------+-------+-------+-------+----------------------| |x11-apps |V:31, |2460 |X |xwd(1) | | |I:463 | | | | |----------------+-------+-------+-------+----------------------| |imagemagick |I:317 |74 |X |import(1) | |----------------+-------+-------+-------+----------------------| |scrot |V:5, |131 |X |scrot(1) | | |I:63 | | | | +---------------------------------------------------------------+ 9.3.9. Gravar alterações em ficheiros de configuração     There are specialized tools to record changes in configuration files with help of DVCS and to make system snapshots on Btrfs. Tabela 9.7. List of packages which can record configuration history +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |---------+------+-------+--------------------------------------| | | | |armazenar ficheiros de configuração e | |etckeeper|V:26, |168 |os seus meta-dados com Git |     | |I:30 | |(predefinido), Mercurial, ou GNU | | | | |Bazaar (novo) | |---------+------+-------+--------------------------------------| |timeshift|V:5, |3506 |system restore utility using rsync or | | |I:10 | |BTRFS snapshots | |---------+------+-------+--------------------------------------| |snapper |V:4, |2392 |Linux filesystem snapshot management | | |I:5 | |tool | +---------------------------------------------------------------+     You may also think about local script Secção 10.2.3, “Backup tips” approach. 9.4. Monitorizar, controlar e iniciar as atividades de programas     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,|18307 |nice(1): correr um programa com | | |I:999 | |prioridade de agendamento modificada | |---------+------+-------+--------------------------------------| |bsdutils |V:519,|356 |renice(1): modifica a prioridade de | | |I:999 | |agendamento de um processo em execução| |---------+------+-------+--------------------------------------| | |V:766,| |"/proc" utilitários de sistema de | |procps |I:999 |2389 |ficheiros: ps(1), top(1), kill(1) , | | | | |watch(1), … | |---------+------+-------+--------------------------------------| | |V:420,| |"/proc" utilitários de sistema de | |psmisc |I:775 |908 |ficheiros: killall(1), fuser(1), | | | | |peekfd(1), pstree(1) | |---------+------+-------+--------------------------------------| | |V:7, | |time(1): corre um programa para | |time |I:132 |129 |reportar as utilizações de recursos do| | | | |sistema no que respeita a tempo | |---------+------+-------+--------------------------------------| | |V:148,| |sar(1), iostat(1), mpstat(1), …: | |sysstat |I:170 |1904 |ferramentas de performance do sistema | | | | |para Linux | |---------+------+-------+--------------------------------------| |isag |V:0, |109 |Interactive System Activity Grapher |     | |I:3 | |para sysstat | |---------+------+-------+--------------------------------------| | |V:422,| |lsof(8): lista os ficheiro abertos por| |lsof |I:945 |482 |um processo em execução a usar a opção| | | | |"-p" | |---------+------+-------+--------------------------------------| |strace |V:12, |2897 |strace(1): rastreia chamadas e sinais | | |I:119 | |do sistema | |---------+------+-------+--------------------------------------| |ltrace |V:0, |330 |ltrace(1): rastreia chamadas de | | |I:16 | |bibliotecas | |---------+------+-------+--------------------------------------| |xtrace |V:0, |353 |xtrace(1): rastreia a comunicação | | |I:0 | |entre cliente X11 e servidor | |---------+------+-------+--------------------------------------| |powertop |V:18, |677 |powertop(1): informação sobre a | | |I:217 | |utilização do sistema de energia | |---------+------+-------+--------------------------------------| | |V:872,| |corre processos de acordo com uma | |cron |I:995 |244 |agenda nos bastidores a partir do | | | | |daemon cron(8) | |---------+------+-------+--------------------------------------| | |V:396,| |agenda de comandos tipo cron para | |anacron |I:479 |93 |sistemas que não funcionam 24 horas | | | | |por dia | |---------+------+-------+--------------------------------------| | |V:101,| |at(1) ou batch(1): executam um | |at |I:154 |158 |trabalho a uma hora especificada ou | | | | |abaixo de um certo nível de carga | +---------------------------------------------------------------+ Dica     Os pacotes procps disponibilizam as bases de monitorizar, controlar e iniciar atividades de programas. Deve aprendê-las todas. 9.4.1. Temporizar um processo     Mostrar o tempo usado pelo processo invocado pelo comando. # time some_command >/dev/null     real 0m0.035s # time on wall clock (elapsed real time) user 0m0.000s # time in user mode sys 0m0.020s # time in kernel mode 9.4.2. A prioridade de agendamento     Um valor nice é usado para controlar a prioridade de agendamento para o processo. Tabela 9.9. Lista de valores nice para a prioridade de agendamento +---------------------------------------------------------------+ | o valor | prioridade de agendamento | | nice | | |-----------+---------------------------------------------------|     |19 |processo de prioridade menor (nice) | |-----------+---------------------------------------------------| |0 |processo de prioridade muito alta para o utilizador| |-----------+---------------------------------------------------| |-20 |processo de prioridade muito alta para o root | | |(não-nice) | +---------------------------------------------------------------+     # nice -19 top # very nice # nice --20 wodim -v -eject speed=2 dev=0,0 disk.img # very fast     Por vezes um valor nice extremo faz mais danos que benefícios ao sistema. Use este comando com cuidado. 9.4.3. O comando ps O comando ps(1) num sistema Debian suporta ambas funcionalidades     do BSD e SystemV e ajuda-o a identificar estaticamente a atividade do processo. Tabela 9.10. Lista dos estilos do comando ps +-----------------------------------------+ | estilo |comando típico| funcionalidade |     |--------+--------------+-----------------| |BSD |ps aux |mostrar %CPU %MEM| |--------+--------------+-----------------| |System V|ps -efH |mostra PPID | +-----------------------------------------+     Para o processo filho zombie (defunto), pode matá-lo pelo ID do processo pai identificado no campo "PPID".     O comando pstree(1) mostra uma árvore de processos. 9.4.4. O comando top O top(1) no sistema Debian tem funcionalidades ricas e ajuda-o a     identificar dinamicamente que processo está a actuar de modo esquisito. É um programa interativo de ecrã total. Pode obter a ajuda de     utilização dele ao pressionar a tecla "h" e terminá-lo ao pressionar a tecla "q". 9.4.5. Listar ficheiros abertos por um processo     Pode listar todos os ficheiros abertos por um processo com o ID do processo (PID), ex. 1, com o seguinte.     $ sudo lsof -p 1     PID=1 é geralmente o programa de init. 9.4.6. Rastear as atividades de programas Pode rastrear a atividade do programa com o strace(1), ltrace(1),     ou xtrace(1) para chamadas de sistema e sinais, chamadas de bibliotecas, ou comunicação entre cliente e servidor do X11.     Pode rastrear as chamadas do sistema do comando ls como a seguir.     $ sudo strace ls Dica     Use strace-graph script found in /usr/share/doc/strace/examples/ to make a nice tree view 9.4.7. Identificação de um processo a usar ficheiros ou sockets     Também pode identificar processos que usam ficheiros pelo fuser (1), ex. para "/var/log/mail.log" com o seguinte. $ sudo fuser -v /var/log/mail.log     USER PID ACCESS COMMAND /var/log/mail.log: root 2946 F.... rsyslogd     Vê que o ficheiro "/var/log/mail.log" está aberto para escrita pelo comando rsyslogd(8).     Também pode identificar processos que usam sockets pelo fuser(1), ex. para "smtp/tcp" com o seguinte. $ sudo fuser -v smtp/tcp     USER PID ACCESS COMMAND smtp/tcp: Debian-exim 3379 F.... exim4     Agora sabe que o seu sistema executa o exim4(8) para lidar com as ligações TCP para a porta SMTP (25). 9.4.8. Repetir um comando com um intervalo constante     O watch(1) executa um programa repetidamente num intervalo constante enquanto mostra os seus resultados em ecrã completo.     $ watch w     Isto mostra quem tem sessão iniciada (logged) no sistema e é atualizado a cada 2 segundos. 9.4.9. Repetir um ciclo de comandos sobre ficheiros 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".     * Método for-loop da shell (veja Secção 12.1.4, “Ciclos (loops) da shell”):     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). 9.4.10. Arrancar um programa a partir da GUI 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"”. For the graphical user interface (GUI) compliant to the freedesktop.org standards, the *.desktop files in the /usr/share/ applications/ directory provide necessary attributes for the GUI menu display of each program. Each package which is compliant to     Freedesktop.org's xdg menu system installs its menu data provided by "*.desktop" under "/usr/share/applications/". Modern desktop environments which are compliant to Freedesktop.org standard use these data to generate their menu using the xdg-utils package. See "/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     Pode ser criada uma entrada personalizada no menu da GUI ao adicionar um ficheiro *.desktop no diretório $HOME/.local/share/ applications/. Dica     The "Exec=..." line isn't parsed by the shell. Use the env(1) command if environment variables need to be set. 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 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). 9.4.11. Personalizar o programa a ser iniciado     Alguns programas iniciam outros programas automaticamente. Aqui estão alguns pontos de controle para personalizar este processo. * Menu de configuração da aplicação: + Ambiente GNOME3: "Definições" → "Sistema" → "Detalhes" → "Aplicações Predefinidas" + Ambiente KDE: "K" → "Centro de Controle" → "Componentes do KDE" → "selcionar Componente" + Navegador Iceweasel: "Editar" → "Preferências" → "Aplicações" + mc(1): "/etc/mc/mc.ext"     * Environment variables such as "$BROWSER", "$EDITOR", "$VISUAL", and "$PAGER" (see environ(7)) * O sistema update-alternatives(1) para programas como o "editor", "view", "x-www-browser", "gnome-www-browser" e "www-browser" (veja Secção 1.4.7, “Definir um editor de texto predefinido”) * os conteúdos dos ficheiros "~/.mailcap" e "/etc/mailcap" com a associação do tipo MIME com o programa (veja mailcap(5)) * Os conteúdos dos ficheiros "~/.mime.types" e "/etc/ mime.types" que associam a extensão do nome do ficheiro com o tipo MIME (veja run-mailcap(1)) Dica     update-mime(8) atualiza o ficheiro "/etc/mailcap" a usar o ficheiro "/etc/mailcap.order" (veja mailcap.order(5)). 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 In order to run a console application such as mutt under GUI as your preferred application, you should create an GUI application as following and set "/usr/local/bin/mutt-term" as your preferred     application to be started as described. # cat /usr/local/bin/mutt-term <> $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     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 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". Systemd has low level capability to schedule programs to run     without cron daemon. For example, /lib/systemd/system/ apt-daily.timer and /lib/systemd/system/apt-daily.service set up daily apt download activities. See systemd.timer(5) . 9.4.15. Scheduling tasks on event Systemd can schedule program not only on the timer event but also     on the mount event. See Secção 10.2.3.3, “Timer event triggered backup” and Secção 10.2.3.2, “Mount event triggered backup” for examples. 9.4.16. Tecla Alt-SysRq     Pressing Alt-SysRq (PrtScr) followed by one keys does the magic of rescuing control of the system. Tabela 9.12. List of notable SAK command keys +---------------------------------------------------------------+ |tecla que segue| descrição da acção | | a Alt-SysRq | | |---------------+-----------------------------------------------| |k |kill all processes on the current virtual | | |console (SAK) | |---------------+-----------------------------------------------|     |s |sincroniza todos os sistemas de ficheiros | | |montados para evitar corrupção de dados | |---------------+-----------------------------------------------| |u |remontar todos os sistemas de ficheiros | | |montados em modo de apenas-leitura (umount) | |---------------+-----------------------------------------------| |r |restaurar o teclado a partir de modo raw após | | |crash do X | +---------------------------------------------------------------+     See more on Linux kernel user’s and administrator’s guide » Linux Magic System Request Key Hacks 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.     The current (2021) Debian amd64 Linux kernel has /proc/sys/kernel /sysrq=438=0b110110110: * 2 = 0x2 - enable control of console logging level (ON) * 4 = 0x4 - enable control of keyboard (SAK, unraw) (ON) * 8 = 0x8 - enable debugging dumps of processes etc. (OFF) * 16 = 0x10 - enable sync command (ON)     * 32 = 0x20 - enable remount read-only (ON) * 64 = 0x40 - enable signaling of processes (term, kill, oom-kill) (OFF) * 128 = 0x80 - allow reboot/poweroff (ON) * 256 = 0x100 - allow nicing of all RT tasks (ON) 9.5. Dicas de manutenção do sistema 9.5.1. Quem está no sistema?     Pode verificar quem está no sistema com o seguinte. * who(1) mostra quem tem sessão iniciada. * w(1) mostra quem tem sessão iniciada e o que estão a fazer.     * last(1) mostra a listagem do último utilizador a iniciar sessão. * lastb(1 )mostra a listagem dos últimos utilizadores a falharem o inicio de sessão. Dica     "/var/run/utmp" e "/var/log/wtmp" detém tal informação do utilizador. Veja login(1) e utmp(5). 9.5.2. Avisar todos     Pode mandar uma mensagem para todos os que têm sessão iniciada no sistema com wall(1) com o seguinte.     $ echo "We are shutting down in 1 hour" | wall 9.5.3. Identificação do hardware Para os aparelhos tipo PCI (AGP, PCI-Express, CardBus,     ExpressCard, etc.), o lspci(8) (provavelmente com a opção "-nn") é um bom inicio para a identificação do hardware. Alternativamente, pode identificar o hardware ao ler os conteúdos     de "/proc/bus/pci/devices" ou explorar a árvore de diretórios sob "/sys/bus/pci" (veja Secção 1.2.12, “procfs e sysfs”). Tabela 9.13. Lista de ferramenta de identificação de hardware +---------------------------------------------------------------+ | pacote |popcon |tamanho| descrição | |-----------+-------+-------+-----------------------------------| |pciutils |V:249, |213 |Utilitários PCI do Linux: lspci(8) | | |I:991 | | | |-----------+-------+-------+-----------------------------------| |usbutils |V:68, |325 |Utilitários USB do Linux: lsusb(8) | | |I:869 | | | |-----------+-------+-------+-----------------------------------| |nvme-cli |V:15, |1642 |NVMe utilities for Linux: nvme(1) | | |I:22 | | | |-----------+-------+-------+-----------------------------------|     |pcmciautils|V:6, |91 |Utilitários PCMCIA par Linux: | | |I:10 | |pccardctl(8) | |-----------+-------+-------+-----------------------------------| |scsitools |V:0, |346 |colecção de ferramentas para gestão| | |I:2 | |de hardware SCSI: lsscsi(8) | |-----------+-------+-------+-----------------------------------| |procinfo |V:0, |132 |informação do sistema obtida de "/ | | |I:9 | |proc": lsdev(8) | |-----------+-------+-------+-----------------------------------| |lshw |V:13, |919 |informação acerca da configuração | | |I:89 | |do hardware: lshw(1) | |-----------+-------+-------+-----------------------------------| |discover |V:40, |98 |sistema de identificação de | | |I:958 | |hardware: discover(8) | +---------------------------------------------------------------+ 9.5.4. Configuração do hardware 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. Tabela 9.14. Lista de ferramentas de configuração do hardware +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |-----------------+------+-------+------------------------------| | |V:88, | |tipo de letra da consola Linux| |console-setup |I:967 |428 |e utilitários da tabela de | | | | |teclas | |-----------------+------+-------+------------------------------| |x11-xserver-utils|V:302,|568 |Utilitários do servidor X: | | |I:528 | |xset(1), xmodmap(1) | |-----------------+------+-------+------------------------------| | | | |daemon para gerir eventos | |acpid |V:84, |158 |entregues pelo Advanced | | |I:148 | |Configuration and Power | | | | |Interface (ACPI) | |-----------------+------+-------+------------------------------| |acpi |V:9, |47 |utilitário para mostrar | | |I:136 | |informação em aparelhos ACPI | |-----------------+------+-------+------------------------------| | |V:0, | |daemon para pôr um portátil em| |sleepd |I:0 |86 |modo de adormecimento durante | | | | |a inatividade |     |-----------------+------+-------+------------------------------| | |V:178,| |optimização do acesso ao disco| |hdparm |I:335 |256 |rígido (veja Secção 9.6.9, | | | | |“Optimização do disco rígido”)| |-----------------+------+-------+------------------------------| | |V:207,| |controlar e monitorizar | |smartmontools |I:250 |2358 |sistemas de armazenamento a | | | | |usar S.M.A.R.T. | |-----------------+------+-------+------------------------------| |setserial |V:4, |103 |colecção de ferramentas para | | |I:6 | |gestão de portas série | |-----------------+------+-------+------------------------------| |memtest86+ |V:1, |12711 |colecção de ferramentas para | | |I:21 | |gestão de hardware de memória | |-----------------+------+-------+------------------------------| |scsitools |V:0, |346 |colecção de ferramentas para | | |I:2 | |gestão de hardware SCSI | |-----------------+------+-------+------------------------------| |setcd |V:0, |37 |optimização de acesso a drives| | |I:0 | |de discos compactos | |-----------------+------+-------+------------------------------| |big-cursor |I:0 |26 |cursores de rato maiores para | | | | |o X | +---------------------------------------------------------------+     Aqui, o ACPI é uma estrutura mais recente para o sistema de gestão de energia que o APM. Dica     O escalar de frequências da CPU em sistemas modernos é governado por módulos do kernel como o acpi_cpufreq. 9.5.5. Hora do sistema e do hardware     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).     If the hardware time is set to UTC, change the setting to "UTC= yes" in the "/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     Sob systemd, use systemd-timesyncd para a sincronização da hora com a rede. Veja systemd-timesyncd(8).     Veja o seguinte. * Como Gerir a Data e Hora com Precisão     * NTP Public Services Project * O pacote ntp-doc Dica     O ntptrace(8) no pacote ntp pode rastrear uma cadeia de servidores NTP até à sua fonte principal. 9.5.6. A configuração do terminal     Existem vários componentes para configurar a consola de caracteres e as funcionalidades do sistema ncurses(3). * O ficheiro "/etc/terminfo/*/*" (terminfo(5))     * A variável de ambiente "$TERM" (term(7)) * setterm(1), stty(1), tic(1) e toe(1) Se a entrada terminfo para o xterm não funcionar com um xterm não Debian, mude o seu tipo e terminal, "$TERM", de "xterm" para uma     das versões de funcionalidades limitadas como o "xterm-r6" quando iniciar sessão num sistema Debian remotamente. Veja "/usr/share/ doc/libncurses5/FAQ" para mais. O "dumb" é o denominador comum mais baixo para "$TERM". 9.5.7. A infraestrutura de som 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. Application softwares may be configured not only to access sound devices directly but also to access them via some standardized     sound server system. Currently, PulseAudio, JACK, and PipeWire are used as sound server system. See Debian wiki page on Sound for the latest situation. 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     Use "cat /dev/urandom > /dev/audio" ou speaker-test(1) para testar os altifalantes (^C para parar). 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. Tabela 9.15. Lista de pacotes de som +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |-----------------+------+-------+------------------------------| |alsa-utils |V:330,|2605 |utilitários para configurar e | | |I:466 | |utilizar ALSA | |-----------------+------+-------+------------------------------| | |V:1, | |compatibilidade de OSS sob | |oss-compat |I:17 |18 |ALSA para prevenir erros de "/| | | | |dev/dsp não encontrado" | |-----------------+------+-------+------------------------------| | |V:265,| |audio and video processing | |pipewire |I:319 |120 |engine multimedia server - | | | | |metapackage | |-----------------+------+-------+------------------------------| | |V:274,| |audio and video processing | |pipewire-bin |I:319 |1631 |engine multimedia server - | | | | |audio server and CLI programs | |-----------------+------+-------+------------------------------| | |V:105,| |audio and video processing | |pipewire-alsa |I:157 |206 |engine multimedia server - | | | | |audio server to replace ALSA | |-----------------+------+-------+------------------------------|     | | | |audio and video processing | |pipewire-pulse |V:160,|50 |engine multimedia server - | | |I:214 | |audio server to replace | | | | |PulseAudio | |-----------------+------+-------+------------------------------| |pulseaudio |V:256,|6472 |PulseAudio server | | |I:308 | | | |-----------------+------+-------+------------------------------| |libpulse0 |V:413,|975 |PulseAudio client library | | |I:580 | | | |-----------------+------+-------+------------------------------| |jackd |V:2, |9 |servidor (baixa latência) JACK| | |I:18 | |Audio Connection Kit. (JACK) | |-----------------+------+-------+------------------------------| | |V:1, | |biblioteca (baixa latência) | |libjack0 |I:9 |326 |JACK Audio Connection Kit. | | | | |(JACK) | |-----------------+------+-------+------------------------------| |libgstreamer1.0-0|V:429,|4455 |GStreamer: motor de som do | | |I:597 | |GNOME | |-----------------+------+-------+------------------------------| |libphonon4qt5-4 |V:72, |594 |Phonon: motor de som do KDE | | |I:162 | | | +---------------------------------------------------------------+ 9.5.8. desativar o protector de ecrã (screensaver)     Para desativar o protector de ecrã, utilize os seguintes comandos. Tabela 9.16. Lista de comandos para desativar o protector de ecrã +---------------------------------------------------------------+ | ambiente | comando | |-----------------------------------------+---------------------| |A consola do Linux |setterm -powersave | | |off | |-----------------------------------------+---------------------|     |O X Window (desativar o protector de |xset s off | |ecrã) | | |-----------------------------------------+---------------------| |O X Window (desativar o dpms) |xset -dpms | |-----------------------------------------+---------------------| |O X Window (GUI de configuração do |xscreensaver-command | |protector de ecrã) |-prefs | +---------------------------------------------------------------+ 9.5.9. desativar os sons de beep     Pode-se sempre desligar o altifalante do PC para desativar os apitos. Remover o módulo de kernel pcspkr faz isso por si.     O seguinte previne o programa readline(3) usado pelo bash(1) de apitar quando encontra um caractere de alerta (ASCII=7).     $ echo "set bell-style none">> ~/.inputrc 9.5.10. Utilização da memória     Existem 2 recursos disponíveis para obter o estado da utilização de memória. * A mensagem de arranque do kernel em "/var/log/dmesg" contém o tamanho total exacto da memória disponível.     * free(1) e top(1) mostram informação sobre os recursos de memória no sistema em execução.     Aqui está um exemplo. # grep '\] Memory' /var/log/dmesg [ 0.004000] Memory: 990528k/1016784k available (1975k kernel code, 25868k reserved, 931k data, 296k init) $ free -k     total used free shared buffers cached Mem: 997184 976928 20256 0 129592 171932 -/+ buffers/cache: 675404 321780 Swap: 4545576 4 4545572     Pode estar a pensar "o dmesg fala-me em 990 MB livres e o free -k diz 320 MB livres. Faltam mais de 600 MB ...". Não se preocupe com o grande tamanho de "used" e o pequeno     tamanho de "free" na linha "Mem:", mas leia a que está sob elas (675404 e 321780 no exemplo em cima) e relaxe.     Para o meu MacBook com 1GB=1048576k de DRAM (o sistema de vídeo rouba alguma), vejo o seguinte. Tabela 9.17. Lista dos tamanhos de memória reportados +---------------------------------------------------------+ | relatório | tamanho | |----------------------+----------------------------------| |Tamanho total no dmesg|1016784k = 1GB - 31792k |     |----------------------+----------------------------------| |Livre no dmesg |990528k | |----------------------+----------------------------------| |Total sob a shell |997184k | |----------------------+----------------------------------| |Livre sob a shell |20256k (mas efectivamente 321780k)| +---------------------------------------------------------+ 9.5.11. Segurança do sistema e verificação de integridade     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. * O pacote debsums, veja debsums(1) e Secção 2.5.2, “Ficheiro "Release" de nível de topo e autenticidade:”. * O pacote chkrootkit, veja chkrootkit(1).     * A família de pacotes clamav, veja clamscan(1) e freshclam(1). * FAQ de Segurança Debian. * Manual de Segurança Debian. Tabela 9.18. Lista de ferramentas para segurança do sistema e verificação de integridade +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |----------+------+-------+-------------------------------------| | |V:6, | |daemon para enviar as anomalias nos | |logcheck |I:7 |110 |ficheiros de log do sistema ao | | | | |administrador por mail | |----------+------+-------+-------------------------------------| | |V:5, | |utilitário para verificar os pacotes | |debsums |I:35 |98 |instalados contra chaves de | | | | |verificação MD5 | |----------+------+-------+-------------------------------------| |chkrootkit|V:8, |925 |detector de rootkit | | |I:17 | | | |----------+------+-------+-------------------------------------| |clamav |V:9, |27455 |utilitário de anti-vírus para Unix - | | |I:45 | |interface de linha de comandos |     |----------+------+-------+-------------------------------------| |tiger |V:1, |7800 |relatar vulnerabilidades de segurança| | |I:2 | |do sistema | |----------+------+-------+-------------------------------------| |tripwire |V:1, |5016 |verificador de integridade de | | |I:2 | |ficheiros e diretórios | |----------+------+-------+-------------------------------------| |john |V:1, |471 |ferramenta activa de crack de | | |I:9 | |palavras-passe | |----------+------+-------+-------------------------------------| |aide |V:1, |293 |Ambiente de Detecção de Intrusão | | |I:1 | |Avançado - binário estático | |----------+------+-------+-------------------------------------| |integrit |V:0, |2659 |programa de verificação de | | |I:0 | |integridade de ficheiros | |----------+------+-------+-------------------------------------| |crack |V:0, |149 |programa de adivinhação de | | |I:1 | |palavra-passe | +---------------------------------------------------------------+     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     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. 9.6. Dicas de armazenamento de dados 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. You may need to umount(8) some devices manually from the command     line before operating on them if they are automatically mounted by the GUI desktop system. 9.6.1. Utilização do espaço em disco     A utilização do espaço em disco pode ser avaliada por programas disponibilizados pelos pacotes mount, coreutils e xdu: * mount(8) reporta todos os sistemas de ficheiros montados (= discos).     * df(1) reporta a utilização do espaço em disco para o sistema de ficheiros. * du(1) reporta a utilização do espaço em disco para a árvore do diretório. Dica     Pode alimentar a saída de du(8) a xdu(1x) para produzir a apresentação gráfica dele e interactiva com "du -k . |xdu", "sudo du -k -x / |xdu", etc. 9.6.2. Configuração das partições do disco 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. Older PCs use the classic Master Boot Record (MBR) scheme to hold     disk partitioning data in the first sector, i.e., LBA sector 0 (512 bytes). Recent PCs with Unified Extensible Firmware Interface (UEFI),     including Intel-based Macs, use GUID Partition Table (GPT) scheme to hold disk partitioning data not in the first sector.     Apesar do fdisk(8) ter sido o standard como ferramenta de particionamento de disco, o parted(8) está a substituí-lo. Tabela 9.19. Lista de pacotes de gestão de partições do disco +---------------------------------------------------------------+ | pacote |popcon |tamanho| descrição | |----------+-------+-------+------------------------------------| |util-linux|V:881, |5283 |vários utilitários de sistema | | |I:999 | |incluindo fdisk(8) e cfdisk(8) | |----------+-------+-------+------------------------------------| | |V:417, | |GNU Parted programa de | |parted |I:568 |122 |redimensionamento de partições do |     | | | |disco | |----------+-------+-------+------------------------------------| |gparted |V:15, |2175 |Editor de partições do GNOME baseado| | |I:102 | |na libparted | |----------+-------+-------+------------------------------------| |gdisk |V:338, |885 |partition editor for the GPT/MBR | | |I:511 | |hybrid disk | |----------+-------+-------+------------------------------------| |kpartx |V:22, |77 |programa para criar mapeamentos de | | |I:33 | |aparelho para partições | +---------------------------------------------------------------+ 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 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. 9.6.3. Aceder a partição a usar UUID Although reconfiguration of your partition or activation order of removable storage media may yield different names for partitions,     you can access them consistently. This is also helpful if you have multiple disks and your BIOS/UEFI doesn't give them consistent device names. * mount(8) com a opção "-U" pode montar um aparelho de bloco a usar o UUID, em vez de usar o nome de ficheiro dele tal como "/dev/sda3".     * "/etc/fstab" (veja fstab(5)) pode usar UUID. * Os gestores de arranque (Secção 3.1.2, “Estágio 2: o gestor de arranque”) também podem usar UUID. Dica     Pode testar o UUID de um aparelho especial de bloco com blkid(8). You can also probe UUID and other information with "lsblk -f". 9.6.4. LVM2 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 9.6.5. Configuração do sistema de ficheiros     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. Tabela 9.20. Lista de pacotes de gestão de sistemas de ficheiros +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |--------------+------+-------+---------------------------------| |e2fsprogs |V:767,|1499 |utilitários para os sistemas de | | |I:999 | |ficheiros ext2/ext3/ext4 | |--------------+------+-------+---------------------------------| |btrfs-progs |V:44, |5078 |utilitários para o sistema de | | |I:72 | |ficheiros btrfs | |--------------+------+-------+---------------------------------| |reiserfsprogs |V:12, |473 |utilitários para o sistema de | | |I:25 | |ficheiros Reiserfs | |--------------+------+-------+---------------------------------| |zfsutils-linux|V:29, |1762 |utilities for the OpenZFS | | |I:30 | |filesystem | |--------------+------+-------+---------------------------------| | |V:196,| |utilitários para o sistema de | |dosfstools |I:541 |315 |ficheiros FAT. (Microsoft: | | | | |MS-DOS, Windows) | |--------------+------+-------+---------------------------------| |exfatprogs |V:29, |301 |utilities for the exFAT | | |I:371 | |filesystem maintained by Samsung.| |--------------+------+-------+---------------------------------| |exfat-fuse |V:5, |73 |read/write exFAT filesystem |     | |I:120 | |(Microsoft) driver for FUSE. | |--------------+------+-------+---------------------------------| | |V:4, | |utilities for the exFAT | |exfat-utils |I:106 |231 |filesystem maintained by the | | | | |exfat-fuse author. | |--------------+------+-------+---------------------------------| |xfsprogs |V:21, |3476 |utilitários para o sistema de | | |I:95 | |ficheiros XFS. (SGI: IRIX) | |--------------+------+-------+---------------------------------| | |V:197,| |read/write NTFS filesystem | |ntfs-3g |I:513 |1474 |(Microsoft: Windows NT, …) driver| | | | |for FUSE. | |--------------+------+-------+---------------------------------| |jfsutils |V:0, |1577 |utilitários para o sistema de | | |I:8 | |ficheiros JFS. (IBM: AIX, OS/2) | |--------------+------+-------+---------------------------------| |reiser4progs |V:0, |1367 |utilitários para o sistema de | | |I:2 | |ficheiros Reiser4 | |--------------+------+-------+---------------------------------| | |V:0, | |utilitários para os sistemas de | |hfsprogs |I:4 |394 |ficheiros HFS e HFS Plus. (Apple:| | | | |Mac OS) | |--------------+------+-------+---------------------------------| |zerofree |V:5, |25 |programa para zerar blocos livres| | |I:131 | |de sistemas de ficheiros ext2/3/4| +---------------------------------------------------------------+ 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.     Btrfs status can be found at Debian wiki on btrfs and kernel.org wiki on btrfs. It is expected to be the next default filesystem after the ext4 filesystem. 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”). 9.6.6. Criação do sistema de ficheiros e verificação de integridade O comando mkfs(8) cria o sistema de ficheiros num sistema Linux.     O comando fsck(8) disponibiliza a verificação de integridade e reparação do sistema de ficheiros num sistema Linux.     Debian agora, por predefinição, não faz fsck periódicos após a criação do sistema de ficheiros. Cuidado     Geralmente não é seguro correr o fsck em sistemas de ficheiros montados. Dica Pode executar o comando fsck(8) com segurança em todos os sistemas de ficheiros incluindo o sistema raiz durante o arranque da máquina ao definir "enable_periodic_fsck" em "/etc/     mke2fs.conf" e a contagem máxima de montagens para 0 a usar "tune2fs -c0 /dev/partition_name". Veja mke2fs.conf(5) e tune2fs (8). Verifique os ficheiros em "/var/log/fsck/" pelos resultados do comando fsck(8) executado do script de arranque. 9.6.7. Optimização do sistema de ficheiros por opções de montagem     A configuração estática básica dos sistemas de ficheiros é dada por "/etc/fstab". Por exemplo, «file system» «mount point» «type» «options» «dump» «pass» proc /proc proc defaults 0 0     UUID=709cbe4c-80c1-56db-8ab1-dbce3146d2f7 / ext4 errors=remount-ro 0 1 UUID=817bae6b-45d2-5aca-4d2a-1267ab46ac23 none swap sw 0 0 /dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0 Dica     O UUID (veja Secção 9.6.3, “Aceder a partição a usar UUID”) pode ser utilizado para identificar um aparelho de bloco em vez de nomes vulgares de aparelhos de bloco, tal como "/dev/sda1", "/dev /sda2",…     Since Linux 2.6.30, the kernel defaults to the behavior provided by "relatime" option.     See fstab(5) and mount(8). 9.6.8. Optimização do sistema de ficheiros através do superblock     As características de um sistema de ficheiros podem ser optimizadas via o super-bloco dele a usar o comando tune2fs(8). * A execução de "sudo tune2fs -l /dev/hda1" mostra o conteúdo do super-bloco do sistema de ficheiros em "/dev/hda1". * A execução de "sudo tune2fs -c 50 /dev/hda1" muda a frequência das verificações do sistema de ficheiros (execução do fsck durante o arranque) para cada 50 arranques em "/dev/ hda1".     * A execução de "sudo tune2fs -j /dev/hda1" adiciona capacidade de journal ao sistema de ficheiros, isto é, conversão de ext2 para ext3 em "/dev/hda1". (Faça isto no sistema de ficheiros desmontado.) * A execução de "sudo tune2fs -O extents,uninit_bg,dir_index / dev/hda1 && fsck -pf /dev/hda1" converte-o de ext3 para ext4 em "/dev/hda1". (Faça isto no sistema de ficheiros desmontado.) Dica     Apesar do nome dele, o tune2fs(8) não funciona apenas no sistema de ficheiros ext2, mas também nos sistemas de ficheiros ext3 e ext4. 9.6.9. Optimização do disco rígido Atenção     Por favor verifique o seu hardware e leia o manual do hdparm(8) antes de brincar com a configuração do disco rígido porque isto pode ser bastante perigoso para a integridade dos dados. Pode testar a velocidade de acesso ao disco de um disco rígido, p.e. "/dev/hda", por "hdparm -tT /dev/hda". Para algum disco     rígido ligado com (E)IDE, pode acelerá-lo com "hdparm -q -c3 -d1 -u1 -m16 /dev/hda" ao ativar o suporte a "(E)IDE 32-bit I/O", a ativar a flag "using_dma", a definir a flag "interrupt-unmask" e a definir o "multiple 16 sector I/O" (perigoso!). Pode testar a funcionalidade de cache de escrita de um disco     rígido, por exemplo "/dev/sda", com "hdparm -W /dev/sda". Pode desativar a funcionalidade de cache de escrita dele com "hdparm -W 0 /dev/sda".     Pode ser capaz de ler CDROMs muito pressionados em drives de CDROM modernas de alta velocidade ao abrandá-la com "setcd -x 2". 9.6.10. Optimização de disco de estado sólido (SSD)     Solid state drive (SSD) is auto detected now.     Reduce unnecessary disk accesses to prevent disk wear out by mounting "tmpfs" on volatile data path in /etc/fstab. 9.6.11. Usar SMART para prever falhas no disco rígido     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". + restart the smartd(8) daemon by "sudo systemctl restart smartmontools". Dica     O daemon smartd(8) pode ser personalizado com o ficheiro /etc/ smartd.conf incluindo em como ser notificado dos avisos. 9.6.12. Especifique o diretório de armazenamento temporário através de $TMPDIR As aplicações criam ficheiros temporários normalmente sob o diretório de armazenamento temporário "/tmp". Se "/tmp" não     disponibilizar espaço suficiente, pode especificar um diretório de espaço temporário, a programas bem-comportados, através da variável $TMPDIR. 9.6.13. Expandir o espaço de armazenamento utilizável via LVM 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. 9.6.14. Expandir o espaço de armazenamento utilizável ao montar outra partição Se tiver uma partição vazia (ex. "/dev/sdx"), pode formatá-la com     mkfs.ext4(1) e mount(8) para um diretório onde precise de mais espaço. (necessita copiar os conteúdos originais.) $ sudo mv work-dir old-dir $ sudo mkfs.ext4 /dev/sdx     $ sudo mount -t ext4 /dev/sdx work-dir $ sudo cp -a old-dir/* work-dir $ sudo rm -rf old-dir Dica Pode em alternativa montar um ficheiro de imagem de disco vazio     (veja Secção 9.7.5, “Criar um ficheiro de imagem de disco vazio”) como um aparelho de loop (veja Secção 9.7.3, “Montar o ficheiro de imagem de disco”). A utilização real do disco cresce com os dados reais armazenados. 9.6.15. Expandir o espaço de armazenamento utilizável ao fazer bind-mount para outro diretório Se tiver um diretório vazio (p.e. "/caminho/para/     diretório-vazio") com espaço utilizável noutra partição, pode fazer mount(8) ao mesmo com a opção "--bind para um diretório (p.e., "diretório-de-trabalho") onde necessite de mais espaço.     $ sudo mount --bind /path/to/emp-dir work-dir 9.6.16. Expansão do espaço de armazenamento utilizável ao fazer overlay-mounting para outro diretório 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". 9.6.17. Expandir o espaço de armazenamento utilizável a usar ligações simbólicas Cuidado     Este é um método descontinuado. Alguns programas podem não funcionar bem com uma "ligação simbólica a um diretório". Em vez disso, use as opções de "montagem" descritas em cima. Se tem um diretório vazio (ex. "/caminho/para/diretório-vazio")     noutra partição com espaço utilizável, pode criar uma ligação simbólica ao diretório com o ln(8). $ sudo mv work-dir old-dir $ sudo mkdir -p /path/to/emp-dir     $ sudo ln -sf /path/to/emp-dir work-dir $ sudo cp -a old-dir/* work-dir $ sudo rm -rf old-dir Atenção     Não utilize uma "ligação simbólica para um diretório" para diretórios geridos pelo sistema, tais como o "/opt". Tal ligação simbólica poderá ser sobrescrita quando o sistema for atualizado. 9.7. A imagem de disco     Aqui discutimos manipulações da imagem do disco. 9.7.1. Criar o ficheiro de imagem de 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. 9.7.2. Escrever directamente no disco O ficheiro de imagem de disco "disk.img" pode ser escrito para um     aparelho desmontado, ex. a segunda drive SCSI "/dev/sdb" como tamanho correspondente, com o seguinte.     # dd if=disk.img of=/dev/sdb Se modo semelhante, o ficheiro de imagem de partição de disco,     "partition.img" pode ser escrito para uma partição desmontada, ex., a primeira partição do segundo disco SCSI "/dev/sdb1" com tamanho correspondente, com o seguinte.     # dd if=partition.img of=/dev/sdb1 9.7.3. Montar o ficheiro de imagem de disco 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 9.7.4. Limpar um ficheiro de imagem de disco Um ficheiro de imagem de disco, "disk.img" pode ser limpo de     todos os ficheiros removidos numa imagem limpa "new.img" com o seguinte. # mkdir old; mkdir new # mount -t auto -o loop disk.img old # dd bs=1 count=0 if=/dev/zero of=new.img seek=5G # mount -t auto -o loop new.img new     # cd old # cp -a --sparse=always ./ ../new/ # cd .. # umount new.img # umount disk.img     Se o "disk.img" está em ext2, ext3 ou ext4, você também pode usar o zerofree(8) do pacote zerofree como a seguir. # losetup --show -f disk.img /dev/loop0     # zerofree /dev/loop0 # cp --sparse=always disk.img new.img # losetup -d /dev/loop0 9.7.5. Criar um ficheiro de imagem de disco vazio     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     Instead of using dd(1), specialized fallocate(8) may be used here.     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     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. 9.7.6. Criar o ficheiro de imagem ISO9660 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     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. 9.7.7. Escrever directamente ao CD/DVD-R/RW Dica     Um DVD é apenas um CD grande para o wodim(1) disponibilizado pelo cdrkit.     Pode procurar um aparelho utilizável com o seguinte.     # wodim --devices Então o CD-R vazio é inserido na drive de CD e o ficheiro de     imagem ISO9660, "cd.iso" é escrito neste aparelho, ex. "/dev/ hda", a usar o wodim(1) com o seguinte.     # wodim -v -eject dev=/dev/hda cd.iso     Se for usado um CD-RW em vez de um CD-R, faça antes o seguinte.     # wodim -v -eject blank=fast dev=/dev/hda cd.iso Dica     Se o seu ambiente montar CDs automaticamente, desmonte-o com "sudo umount /dev/hda" a partir da consola antes de usar o wodim (1). 9.7.8. Montar o ficheiro de imagem ISO9660     Se "cd.iso" conter uma imagem ISO9660, então o seguinte monta-o manualmente em "/cdrom".     # mount -t iso9660 -o ro,loop cd.iso /cdrom Dica     Os sistemas de ambiente de trabalho modernos podem montar medias amovíveis, tais como um CD formatado em ISO9660, automaticamente (veja Secção 10.1.7, “Aparelho de armazenamento amovível”). 9.8. Os dados binários     Aqui, discutimos manipulação directa de dados binários em meios de armazenamento. 9.8.1. Ver e editar dados binários     o método de visualização mais básico de dados binários é usar o comando "od -t x1". Tabela 9.21. Lista de pacote para ver e editar dados binários +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |---------------+------+-------+--------------------------------| | |V:880,| |pacote básico que tem od(1) para| |coreutils |I:999 |18307 |despejar ficheiros (HEX, ASCII, | | | | |OCTAL, …) | |---------------+------+-------+--------------------------------| | |V:11, | |pacote utilitário que tem hd(1) | |bsdmainutils |I:315 |17 |para despejar ficheiros (HEX, | | | | |ASCII, OCTAL, …) | |---------------+------+-------+--------------------------------| |hexedit |V:0, |73 |editor binário e visualizador |     | |I:9 | |(HEX, ASCII) | |---------------+------+-------+--------------------------------| |bless |V:0, |924 |editor hexadecimal cheiro de | | |I:2 | |funcionalidades (GNOME) | |---------------+------+-------+--------------------------------| |okteta |V:1, |1585 |editor hexadecimal cheiro de | | |I:12 | |funcionalidades (KDE4) | |---------------+------+-------+--------------------------------| |ncurses-hexedit|V:0, |130 |editor binário e visualizador | | |I:1 | |(HEX, ASCII, EBCDIC) | |---------------+------+-------+--------------------------------| |beav |V:0, |137 |editor binário e visualizador | | |I:0 | |(HEX, ASCII, EBCDIC, OCTAL, …) | +---------------------------------------------------------------+ Dica HEX é usado como um acrónimo para o formato hexadecimal com radix     16. OCTAL é para formato octal com radix 8. ASCII é para American Standard Code for Information Interchange, isto é, código de texto Inglês normal. EBCDIC é para Extended Binary Coded Decimal Interchange Code usado em sistemas operativos com infraestrutura da IBM. 9.8.2. Manipular ficheiros sem montar o disco     Existem ferramentas para ler e escrever ficheiros sem montar o disco. Tabela 9.22. Lista de pacotes para ler e escrever ficheiros sem montar o disco +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |--------+------+-------+---------------------------------------|     |mtools |V:8, |390 |utilitários para sistemas de ficheiros | | |I:63 | |MSDOS sem os montar | |--------+------+-------+---------------------------------------| |hfsutils|V:0, |184 |utilitários para sistemas de ficheiros | | |I:5 | |HFS e HFS+ sem os montar | +---------------------------------------------------------------+ 9.8.3. Redundância de dados Os sistemas RAID por software oferecidos pelo kernel Linux     oferecem redundância de dados ao nível do sistema de ficheiros do kernel, para se conseguir altos níveis de fiabilidade de armazenamento. Também existem ferramentas para adicionar redundância a ficheiros     ao nível de programa aplicação, para se conseguir altos níveis de fiabilidade de armazenamento. Tabela 9.23. Lista de ferramentas para adicionar redundância de dados a ficheiros +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |----------+------+-------+-------------------------------------| |par2 |V:9, |268 |Parity Archive Volume Set, para | | |I:94 | |verificação e reparação de ficheiros |     |----------+------+-------+-------------------------------------| | |V:0, | |protecção de dados contra percas/ | |dvdisaster|I:1 |1422 |riscos/envelhecimento para medias CD/| | | | |DVD | |----------+------+-------+-------------------------------------| | |V:0, | |ferramenta de backup que usa câmaras | |dvbackup |I:0 |413 |de filmar MiniDV (a disponibilizar | | | | |rsbep(1)) | +---------------------------------------------------------------+ 9.8.4. Recuperação de ficheiros e dados e análise forense     Existem ferramentas para recuperação de ficheiros e dados e análise forense. Tabela 9.24. Lista de pacotes para recuperação de ficheiros e dados e análise forense +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |-------------+------+-------+----------------------------------| |testdisk |V:2, |1413 |utilitários para sondagem de | | |I:28 | |partições e recuperação de discos | |-------------+------+-------+----------------------------------| | |V:0, | |utilitário para recuperar | |magicrescue |I:2 |255 |ficheiros ao procurar por bytes | | | | |mágicos | |-------------+------+-------+----------------------------------| |scalpel |V:0, |89 |frugal, entalhador de ficheiros de| | |I:3 | |alta performance | |-------------+------+-------+----------------------------------| |myrescue |V:0, |83 |recuperar dados de discos rígidos | | |I:2 | |danificados | |-------------+------+-------+----------------------------------| | |V:0, | |utilitários para recuperar | |extundelete |I:8 |147 |ficheiros apagados no sistema de | | | | |ficheiros ext3/4 | |-------------+------+-------+----------------------------------| | |V:0, | |utilitários para recuperar | |ext4magic |I:4 |233 |ficheiros apagados no sistema de | | | | |ficheiros ext3/4 |     |-------------+------+-------+----------------------------------| | |V:0, | |ferramenta para ajudar a recuperar| |ext3grep |I:2 |293 |ficheiros apagados no sistema de | | | | |ficheiros ext3 | |-------------+------+-------+----------------------------------| |scrounge-ntfs|V:0, |50 |programa de recuperação de dados | | |I:2 | |para sistemas de ficheiros NTFS | |-------------+------+-------+----------------------------------| |gzrt |V:0, |33 |conjunto de ferramentas de | | |I:0 | |recuperação gzip | |-------------+------+-------+----------------------------------| |sleuthkit |V:3, |1671 |ferramentas para análise forense. | | |I:24 | |(Sleuthkit) | |-------------+------+-------+----------------------------------| |autopsy |V:0, |1026 |interface gráfica para o SleuthKit| | |I:1 | | | |-------------+------+-------+----------------------------------| |foremost |V:0, |102 |aplicação forense para recuperar | | |I:5 | |dados | |-------------+------+-------+----------------------------------| |guymager |V:0, |1021 |ferramenta de imagem forense | | |I:0 | |baseada em Qt | |-------------+------+-------+----------------------------------| |dcfldd |V:0, |114 |versão melhorada do dd para | | |I:3 | |forenses e segurança | +---------------------------------------------------------------+ 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. 9.8.5. Dividir um ficheiro grande em ficheiros pequenos Quando os dados são muito grandes para fazer backup num ficheiro     único, pode fazer backup ao conteúdo dele após dividi-lo em fatias de, por exemplo, 2000Mb e mais tarde fundir essas fatias de volta para o ficheiro original.     $ split -b 2000m large_file $ cat x* >large_file Cuidado     Por favor certifique-se que não tem nenhuns ficheiros que começam com "x" para evitar crashes com nomes. 9.8.6. Limpar conteúdo de ficheiro De modo a limpar o conteúdo de um ficheiro como um ficheiro log, não use o rm(1) para apagar o ficheiro e depois crie um ficheiro     vazio, porque o ficheiro pode ainda estar a ser acedido no intervalo entre comandos. O seguinte é o modo seguro de limpar o conteúdo do ficheiro.     $ :>file_to_be_cleared 9.8.7. Ficheiros dummy     Os seguintes comandos criam ficheiros dummy ou vazios. $ dd if=/dev/zero of=5kb.file bs=1k count=5     $ dd if=/dev/urandom of=7mb.file bs=1M count=7 $ touch zero.file $ : > alwayszero.file     Deve encontrar os seguintes ficheiros. * "5kb.file" é 5KB de zeros. * "7mb.file" são 7MB de dados aleatórios. * "zero.file" pode ser um ficheiro de 0 bytes. Se existir, o     mtime dele é atualizado enquanto o conteúdo e tamanho dele são mantidos. * "alwayszero.file" é sempre um ficheiro de 0 bytes. Se existir, o mtime dele é atualizado e o conteúdo dele é reposto. 9.8.8. apagar um disco rígido inteiro Existem várias maneiras de apagar completamente os dados de um     aparelho inteiro tipo disco rígido, ex., pen de memória USB em "/ dev/sda". Cuidado     Primeiro verifique a localização da sua pen de memória USB com o mount(8) antes de executar os comandos aqui. O aparelho apontado por "/dev/sda" pode ser um disco rígido SCSI ou SATA onde pode residir todo o seu sistema.     Apagar todo o conteúdo do disco ao repor os dados a 0 com o seguinte.     # dd if=/dev/zero of=/dev/sda     Apagar tudo ao sobrescrever com dados aleatórios como a seguir.     # dd if=/dev/urandom of=/dev/sda     Apagar tudo muito eficientemente ao sobrescrever com dados aleatórios como a seguir.     # shred -v -n 1 /dev/sda     You may alternatively use badblocks(8) with -t random option. Como o dd(1) está disponível a partir da shell de muitos CDs de arranque de Linux como o CD de instalação de Debian, pode apagar     completamente o seu sistema instalado no disco rígido, por exemplo, "/dev/hda", "/dev/sda", etc., ao correr um comando de limpeza a partir de tal media de arranque. 9.8.9. Apagar uma área não utilizada do disco rígido A área não utilizada de um disco rígido (ou duma pen USB ), por     exemplo "/dev/sdb1" pode ainda conter os próprios dados apagados pois eles são apenas 'desligados' do sistema de ficheiros. Estes podem ser limpos ao sobrescrever a área onde estão. # 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 Atenção     Normalmente isto é suficientemente bom para a sua pen de memória USB. Mas não é perfeito. A maioria das partes dos nomes de ficheiros apagados e os atributos deles podem ficar escondidos e permanecerem no sistema de ficheiros. 9.8.10. Recuperar ficheiros apagados mas ainda abertos Mesmo que tenha acidentalmente apagado um ficheiro, desde que     esse ficheiro esteja ainda a ser usado por alguma aplicação (em modo de leitura ou escrita), é possível recuperar tal ficheiro.     Por exemplo, tente o seguinte: $ echo foo > bar $ less bar $ ps aux | grep ' less[ ]' bozo 4775 0.0 0.0 92200 884 pts/8 S+ 00:18 0:00 less bar $ rm bar     $ ls -l /proc/4775/fd | grep bar lr-x------ 1 bozo bozo 64 2008-05-09 00:19 4 -> /home/bozo/bar (deleted) $ cat /proc/4775/fd/4 >bar $ ls -l -rw-r--r-- 1 bozo bozo 4 2008-05-09 00:25 bar $ cat bar foo     Execute em outro terminal (quando tem o pacote lsof instalado) o seguinte. $ ls -li bar 2228329 -rw-r--r-- 1 bozo bozo 4 2008-05-11 11:02 bar $ lsof |grep bar|grep less less 4775 bozo 4r REG 8,3 4 2228329 /home/bozo/bar $ rm bar     $ lsof |grep bar|grep less less 4775 bozo 4r REG 8,3 4 2228329 /home/bozo/bar (deleted) $ cat /proc/4775/fd/4 >bar $ ls -li bar 2228302 -rw-r--r-- 1 bozo bozo 4 2008-05-11 11:05 bar $ cat bar foo 9.8.11. Procurar todas as ligações rígidas     Os ficheiros com ligações rígidas podem ser identificados com "ls -li". $ ls -li total 0     2738405 -rw-r--r-- 1 root root 0 2008-09-15 20:21 bar 2738404 -rw-r--r-- 2 root root 0 2008-09-15 20:21 baz 2738404 -rw-r--r-- 2 root root 0 2008-09-15 20:21 foo Ambos "baz" e "foo" têm contagens de ligações de "2" (>1) a mostrar que têm ligaçõesrígidas. Os números de inode deles são     comuns "2738404". Isto significa que são o mesmo ficheiro em ligação rígida. Se não encontrar todos os ficheiros em ligação rígida por acaso, pode procurá-los pelo inode, ex., "2738404" com o seguinte.     # find /path/to/mount/point -xdev -inum 2738404 9.8.12. Consumo invisível do espaço do disco Todos os ficheiros apagadas mas abertos consomem espaço no disco     apesar de não estarem visíveis ao du(1) normal. Eles podem ser listados com o tamanho deles com o seguinte.     # lsof -s -X / |grep deleted 9.9. Dicas de encriptação de dados 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 facilitates automatic data encryption via native Linux kernel modules with minimal user efforts using device-mapper. Tabela 9.25. Lista de utilitários de encriptação de dados +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |--------------+------+-------+---------------------------------| | |V:19, | |utilitários para aparelhos de | |cryptsetup |I:79 |417 |bloco encriptados (dm-crypt / | | | | |LUKS) | |--------------+------+-------+---------------------------------| | | | |utilitários para aparelhos de |     | |V:2, | |bloco encriptados (dm-crypt / | |cryptmount |I:3 |231 |LUKS) com focagem na montagem/ | | | | |desmontagem por utilizadores | | | | |normais | |--------------+------+-------+---------------------------------| |fscrypt |V:0, |5520 |utilities for Linux filesystem | | |I:1 | |encryption (fscrypt) | |--------------+------+-------+---------------------------------| |libpam-fscrypt|V:0, |5519 |PAM module for Linux filesystem | | |I:0 | |encryption (fscrypt) | +---------------------------------------------------------------+ Cuidado     Data encryption costs CPU time etc. Encrypted data becomes inaccessible if its password is lost. Please weigh its benefits and costs. 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     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. 9.9.1. Encriptação de discos amovíveis com dm-crypt/LUKS 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 Then, it can be mounted just like normal one on to "/media/ username/disk_label", except for asking password (see Secção 10.1.7, “Aparelho de armazenamento amovível”) under modern     desktop environment using the udisks2 package. The difference is that every data written to it is encrypted. The password entry may be automated using keyring (see Secção 10.3.6, “Password keyring”). You may alternatively format media in different filesystem, e.g., ext4 with "mkfs.ext4 /dev/mapper/sdx1". If btrfs is used instead,     the udisks2-btrfs package needs to be installed. For these filesystems, the file ownership and permissions may need to be configured. 9.9.2. Montar discos encriptados com dm-crypt/LUKS For example, an encrypted disk partition created with dm-crypt/     LUKS on "/dev/sdc5" by Debian Installer can be mounted onto "/ mnt" as follows: $ sudo cryptsetup open /dev/sdc5 ninja --type luks Enter passphrase for /dev/sdc5: **** $ sudo lvm lvm> lvscan inactive '/dev/ninja-vg/root' [13.52 GiB] inherit     inactive '/dev/ninja-vg/swap_1' [640.00 MiB] inherit ACTIVE '/dev/goofy/root' [180.00 GiB] inherit ACTIVE '/dev/goofy/swap' [9.70 GiB] inherit lvm> lvchange -a y /dev/ninja-vg/root lvm> exit Exiting. $ sudo mount /dev/ninja-vg/root /mnt 9.10. O kernel     Debian distribui o kernel Linux organizado em módulos como pacotes para as arquitecturas suportadas.     If you are reading this documentation, you probably don't need to compile Linux kernel by yourself. 9.10.1. Parâmetros do kernel     Muitas funcionalidades do Linux são configuráveis via parâmetros de kernel como a seguir. * Parâmetros de kernel iniciados pelo gestor de arranque (veja Secção 3.1.2, “Estágio 2: o gestor de arranque”) * Parâmetros de kernel alterados pelo sysctl(8) durante a     execução para os acessíveis via sysfs (veja Secção 1.2.12, “procfs e sysfs”) * Parâmetros de módulos definidos por argumentos do modprobe(8) quando um módulo é activado (veja Secção 9.7.3, “Montar o ficheiro de imagem de disco”)     See "The Linux kernel user’s and administrator’s guide » The kernel’s command-line parameters" for the detail. 9.10.2. Cabeçalhos do kernel A maioria dos programas normais não precisa dos cabeçalhos do kernel e na verdade podem bloquear se os usar directamente para     compilação. Eles devem ser compilados contra os cabeçalhos em "/ usr/include/linux" e "/usr/include/asm" disponibilizado pelo pacote libc6-dev (criado a partir do pacote fonte glibc) no sistema Debian. Nota For compiling some kernel-specific programs such as the kernel     modules from the external source and the automounter daemon (amd), you must include path to the corresponding kernel headers, e.g. "-I/usr/src/linux-particular-version/include/", to your command line. 9.10.3. Compilar o kernel e módulos relacionados     O Debian tem método próprio dele para compilar o kernel e os módulos relacionados. Tabela 9.26. Lista de pacotes chave a serem instalados para a recompilação do kernel no sistema Debian +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |----------------+------+-------+-------------------------------| | | | |pacotes essenciais para | |build-essential |I:480 |17 |construir pacotes Debian: make,| | | | |gcc, … | |----------------+------+-------+-------------------------------| | |V:166,| |utilitários de compressão e | |bzip2 |I:970 |112 |descompressão para ficheiros | | | | |bz2 | |----------------+------+-------+-------------------------------| |libncurses5-dev |I:71 |6 |bibliotecas de programadores e | | | | |documentos para ncurses | |----------------+------+-------+-------------------------------| | |V:351,| |git: sistema de controle de | |git |I:549 |46734 |versão distribuído usado pelo |     | | | |kernel Linux | |----------------+------+-------+-------------------------------| | |V:29, | |disponibiliza um ambiente de | |fakeroot |I:486 |224 |falso-root para construção de | | | | |pacotes como não-root | |----------------+------+-------+-------------------------------| | |V:430,| |ferramenta para construir uma | |initramfs-tools |I:989 |113 |initramfs (específico de | | | | |Debian) | |----------------+------+-------+-------------------------------| |dkms |V:74, |196 |suporte de módulos de kernel | | |I:162 | |dinâmicos (DKMS) (genérico) | |----------------+------+-------+-------------------------------| |module-assistant|V:0, |406 |helper tool to make module | | |I:19 | |package (Debian specific) | |----------------+------+-------+-------------------------------| | |V:6, | |scripts de ajuda para um | |devscripts |I:40 |2658 |responsável de pacote Debian | | | | |(específico de Debian) | +---------------------------------------------------------------+ 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     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 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) (or its short form m-a) helps users to build     and install module package(s) easily for one or more custom kernels. 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. 9.10.4. Compilar código-fonte do kernel: a recomendação da equipa do kernel de Debian Para compilar pacotes binários de kernels personalizados a partir     do código-fonte original, deve utilizar o alvo disponibilizado por "deb-pkg". $ sudo apt-get build-dep linux $ cd /usr/src $ wget https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-version.tar.xz $ tar --xz -xvf linux-version.tar.xz     $ cd linux-version $ cp /boot/config-version .config $ make menuconfig ... $ make deb-pkg Dica     O pacote linux-source-version disponibiliza o código-fonte do kernel Linux com os patches Debian como "/usr/src/linux-version .tar.bz2". Para construir pacotes binários específicos a partir do pacote de     código-fonte do kernel Debian, deve utilizar os alvos "binary-arch_architecture_featureset_flavour"em "debian/ rules.gen". $ sudo apt-get build-dep linux     $ apt-get source linux $ cd linux-3.* $ fakeroot make -f debian/rules.gen binary-arch_i386_none_686     Veja mais informação: * Wiki Debian: KernelFAQ     * Wiki Debian: DebianKernel * Debian Linux Kernel Handbook: https:// kernel-handbook.debian.net 9.10.5. Controladores de hardware e firmware The hardware driver is the code running on the main CPUs of the     target system. Most hardware drivers are available as free software now and are included in the normal Debian kernel packages in the main area. * 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.) The firmware is the code or data loaded on the device attach to the target system (e.g., CPU microcode, rendering code running on GPU, or FPGA / CPLD data, …). Some firmware packages are     available as free software but many firmware packages are not available as free software since they contain sourceless binary data. Installing these firmware data is essential for the device to function as expected. * The firmware data packages containing data loaded to the volatile memory on the target device. + 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) * The firmware update program packages which update data on the non-volatile memory on the target device. + fwupd (main): Firmware update daemon which downloads firmware data from Linux Vendor Firmware Service. + gnome-firmware (main): GTK front end for fwupd + plasma-discover-backend-fwupd (main): Qt front end for fwupd Please note that access to non-free-firmware packages are provided by the official installation media to offer functional     installation experience to the user since Debian 12 Bookworm. The non-free-firmware area is described in Secção 2.1.5, “Básico do arquivos Debian”. Please also note that the firmware data downloaded by fwupd from     Linux Vendor Firmware Service and loaded to the running Linux kernel may be non-free. 9.11. Sistema virtualizado     O uso de sistema virtualizado permite-nos correr várias instâncias do sistema simultâneamente num único hardware. Dica     See Debian wiki on SystemVirtualization. 9.11.1. Virtualization and emulation tools     There are several virtualization and emulation tool platforms. * Complete hardware emulation packages such as ones installed by the games-emulator metapackage * Mostly CPU level emulation with some I/O device emulations such as QEMU * Mostly CPU level virtualization with some I/O device emulations such as Kernel-based Virtual Machine (KVM) * OS level container virtualization with the kernel level support such as LXC (Linux Containers), Docker,     systemd-nspawn(1), ... * OS level filesystem access virtualization with the system library call override on the file path such as chroot * OS level filesystem access virtualization with the system library call override on the file ownership such as fakeroot * OS API emulation such as Wine * Interpreter level virtualization with its executable selection and run-time library overrides such as virtualenv and venv for Python     The container virtualization uses Secção 4.7.5, “Linux security features” and is the backend technology of Secção 7.7, “Sandbox”.     Here are some packages to help you to setup the virtualized system. Tabela 9.27. Lista de ferramentas de virtualização +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |------------------+------+-------+-----------------------------| |coreutils |V:880,|18307 |GNU core utilities which | | |I:999 | |contain chroot(8) | |------------------+------+-------+-----------------------------| | |V:53, | |systemd container/nspawn | |systemd-container |I:61 |1330 |tools which contain | | | | |systemd-nspawn(1) | |------------------+------+-------+-----------------------------| | |V:5, | |ferramenta especializada para| |schroot |I:7 |2579 |executar pacotes binários | | | | |Debian em chroot | |------------------+------+-------+-----------------------------| | |V:1, | |ferramenta para construir | |sbuild |I:3 |243 |pacotes binários Debian a | | | | |partir de fontes Debian | |------------------+------+-------+-----------------------------| |debootstrap |V:5, |314 |bootstrap um sistema Debian | | |I:54 | |básico (escrito em sh) | |------------------+------+-------+-----------------------------| |cdebootstrap |V:0, |115 |bootstrap um sistema Debian | | |I:1 | |(escrito em C) | |------------------+------+-------+-----------------------------| |cloud-image-utils |V:1, |66 |cloud image management | | |I:17 | |utilities | |------------------+------+-------+-----------------------------| |cloud-guest-utils |V:3, |71 |cloud guest utilities | | |I:13 | | | |------------------+------+-------+-----------------------------| | | | |Virtual Machine Manager: | |virt-manager |V:11, |2296 |aplicação de ambiente de | | |I:44 | |trabalho para gerir máquinas | | | | |virtuais | |------------------+------+-------+-----------------------------| |libvirt-clients |V:46, |1241 |programas para a biblioteca | | |I:65 | |libvirt | |------------------+------+-------+-----------------------------| | |V:0, | |Incus: system container and | |incus |I:0 |56209 |virtual machine manager (for | | | | |Debian 13 "Trixie") | |------------------+------+-------+-----------------------------| | |V:0, | |LXD: system container and | |lxd |I:0 |52119 |virtual machine manager (for | | | | |Debian 12 "Bookworm") | |------------------+------+-------+-----------------------------| |podman |V:14, |41948 |podman: engine to run | | |I:16 | |OCI-based containers in Pods | |------------------+------+-------+-----------------------------| | |V:0, | |engine to run OCI-based | |podman-docker |I:0 |249 |containers in Pods - wrapper | | | | |for docker | |------------------+------+-------+-----------------------------| |docker.io |V:41, |150003 |docker: Linux container | | |I:43 | |runtime |     |------------------+------+-------+-----------------------------| |games-emulator |I:0 |21 |games-emulator: Debian's | | | | |emulators for games | |------------------+------+-------+-----------------------------| |bochs |V:0, |6956 |Bochs: emulador PC IA-32 | | |I:0 | | | |------------------+------+-------+-----------------------------| |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, |93760 |QEMU: binários de emulação em| | |I:6 | |modo de utilizador | |------------------+------+-------+-----------------------------| |qemu-utils |V:12, |10635 |QEMU: utilitários | | |I:106 | | | |------------------+------+-------+-----------------------------| | | | |KVM: virtualização completa | |qemu-system-x86 |V:33, |58140 |em hardware x86 com | | |I:91 | |virtualização assistida por | | | | |hardware | |------------------+------+-------+-----------------------------| | |V:6, | |VirtualBox: solução de | |virtualbox |I:8 |130868 |virtualização x86 em i386 e | | | | |amd64 | |------------------+------+-------+-----------------------------| |gnome-boxes |V:1, |6691 |Boxes: Simple GNOME app to | | |I:7 | |access virtual systems | |------------------+------+-------+-----------------------------| | |V:0, | |ferramentas para gerir o | |xen-tools |I:2 |719 |servidor virtual XEN do | | | | |debian | |------------------+------+-------+-----------------------------| | |V:13, | |Wine: Windows API | |wine |I:60 |132 |Implementation (suite | | | | |standard) | |------------------+------+-------+-----------------------------| | |V:1, | |DOSBox: emulador x86 com | |dosbox |I:15 |2696 |gráficos Tandy/Herc/CGA/EGA/ | | | | |VGA/SVGA, som e DOS | |------------------+------+-------+-----------------------------| |lxc |V:9, |25890 |Linux containers user space | | |I:12 | |tools | |------------------+------+-------+-----------------------------| | | | |venv for creating virtual | |python3-venv |I:88 |6 |python environments (system | | | | |library) | |------------------+------+-------+-----------------------------| | |V:9, | |virtualenv for creating | |python3-virtualenv|I:50 |356 |isolated virtual python | | | | |environments | |------------------+------+-------+-----------------------------| | |V:3, | |pipx for installing python | |pipx |I:19 |3324 |applications in isolated | | | | |environments | +---------------------------------------------------------------+ 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. 9.11.2. Fluxo de trabalho da virtualização Nota     Os kernels predefinidos de Debian suportam KVM desde lenny.     O fluxo e trabalho típico para virtualização envolve vários passos. * Criar um sistema de ficheiros vazio (uma árvore de ficheiros ou uma imagem de disco). + A árvore de ficheiros pode ser criada por "mkdir -p /path /to/chroot". + A imagem de disco crua pode ser criada com o dd(1) (veja Secção 9.7.1, “Criar o ficheiro de imagem de disco” e Secção 9.7.5, “Criar um ficheiro de imagem de disco vazio”). + qemu-img(1) pode ser usado para criar e converter ficheiros de imagem de disco suportados pelo QEMU. + Os formatos de ficheiro cru e VMDK podem ser usados como formatos comuns entre ferramentas de virtualização. * Montar a imagem de disco com mount(8) no sistema de ficheiros (opcional). + Para o ficheiro de imagem de disco cru, monte-o como aparelho loop ou aparelho do device mapper (veja Secção 9.7.3, “Montar o ficheiro de imagem de disco”). + Para imagens de disco suportadas pelo QEMU, monte-as como     aparelhos de bloco de rede (veja Secção 9.11.3, “Montar o ficheiro de imagem de disco virtual”). * Povoar o sistema de ficheiros alvo com os dados de sistema necessários. + O uso de programas como o debootstrap e o cdebootstrap ajudam com este processo (veja Secção 9.11.4, “Sistema chroot”). + Use instaladores de SOs sob o emulador de sistema completo. * Correr um programa sob um ambiente virtualizado. + chroot disponibiliza um ambiente virtualizado básico suficiente para compilar programas, correr aplicações de consola e correr daemons nele. + QEMU oferece emulação de CPU de várias plataformas. + QEMU com KVM oferece emulação de sistema completo pela virtualização assistida a hardware. + VirtualBox oferece emulação de sistema completo em i386 ou amd64 com ou sem a virtualização assistida a hardware. 9.11.3. Montar o ficheiro de imagem de disco virtual     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     Pode exportar apenas a primeira partição de "disk.img" a usar a opção "-P 1" para qemu-nbd(8). 9.11.4. Sistema chroot If you wish to try a new Debian environment from a terminal console, I recommend you to use chroot. This enables you to run     console applications of Debian unstable and testing without usual risks associated and without rebooting. chroot(8) is the most basic way. Cuidado     Examples below assumes both parent system and chroot system share the same amd64 CPU architecture.     Although you can manually create a chroot(8) environment using debootstrap(1), this requires non-trivial efforts. The sbuild package to build Debian packages from source uses the     chroot environment managed by the schroot package. It comes with helper script sbuild-createchroot(1). Let's learn how it works by running it as follows. $ sudo mkdir -p /srv/chroot     $ sudo sbuild-createchroot -v --include=eatmydata,ccache unstable /srv/chroot/unstable-amd64-sbuild http://deb.debian.org/debian ... You see how debootstrap(8) populates system data for unstable     environment under "/srv/chroot/unstable-amd64-sbuild" for a minimal build system.     You can login to this environment using schroot(1).     $ sudo schroot -v -c chroot:unstable-amd64-sbuild     You see how a system shell running under unstable environment is created. Nota     The "/usr/sbin/policy-rc.d" file which always exits with 101 prevents daemon programs to be started automatically on the Debian system. See "/usr/share/doc/init-system-helpers/ README.policy-rc.d.gz". Nota Some programs under chroot may require access to more files from     the parent system to function than sbuild-createchroot provides as above. For example, "/sys", "/etc/passwd", "/etc/group", "/var /run/utmp", "/var/log/wtmp", etc. may need to be bind-mounted or copied. Dica The sbuild package helps to construct a chroot system and builds     a package inside the chroot using schroot as its backend. It is an ideal system to check build-dependencies. See more on sbuild at Debian wiki and sbuild configuration example in "Guide for Debian Maintainers". Dica The systemd-nspawn(1) command helps to run a command or OS in a     light-weight container in similar ways to chroot. It is more powerful since it uses namespaces to fully virtualize the the process tree, IPC, hostname, domain name and, optionally, networking and user databases. See systemd-nspawn. 9.11.5. Sistemas de vários ambientes de trabalho If you wish to try a new GUI Desktop environment of any OS, I recommend you to use QEMU or KVM on a Debian stable system to run     multiple desktop systems safely using virtualization. These enable you to run any desktop applications including ones of Debian unstable and testing without usual risks associated with them and without rebooting.     Since pure QEMU is very slow, it is recommended to accelerate it with KVM when the host system supports it. Virtual Machine Manager also known as virt-manager is a     convenient GUI tool for managing KVM virtual machines via 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     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.     See more tips at Debian wiki: SystemVirtualization. ---------------------------------------------------------------------     ^[2] More elaborate customization examples: "Vim Galore", "sensible.vim", ...     ^[3] vim-pathogen was popular. Capítulo 10. Gestão de dados     São descritas ferramentas e dicas para gerir dados binários e de texto no sistema Debian. 10.1. Partilhar, copiar e arquivar Atenção O acesso de escrita descoordenado a aparelhos acedidos     activamente e a ficheiros a partir de múltiplos processos não deve ser feito para evitar a condição de competição. Devem ser usados mecanismos de bloqueio de ficheiro que usem o flock(1) para o evitar.     A segurança dos dados e a partilha controlada dele têm vários aspectos. * A criação de um arquivo de dados * O acesso a armazenamento remoto * A duplicação     * O acompanhar do histórico de modificação * A facilitação da partilha de dados * A prevenção de acessos não autorizados a ficheiros * A detecção de modificação não autorizada de ficheiros     Estas podem ser realizadas a usar a combinação de algumas ferramentas. * Ferramentas de arquivo e compressão * Ferramentas de cópia de sincronização * Sistemas de ficheiros de rede * Media de armazenamento amovível     * A shell segura * O sistema de autenticação * Ferramentas de sistema de controle de versão * Ferramentas de hash e encriptação criptográfica 10.1.1. Ferramentas de arquivo e compressão     Aqui está um sumário das ferramentas de arquivo e compressão disponíveis no sistema Debian. Tabela 10.1. Lista de ferramentas de arquivo e compressão +---------------------------------------------------------------+ | pacote |popcon|tamanho|extensão|comando| comentário | |----------+------+-------+--------+-------+--------------------| | |V:902,| | | |o arquivador | |tar |I:999 |3077 |.tar |tar(1) |standard (de facto | | | | | | |standard) | |----------+------+-------+--------+-------+--------------------| | |V:440,| | | |arquivador estilo | |cpio |I:998 |1199 |.cpio |cpio(1)|Unix System V, usar | | | | | | |com o find(1) | |----------+------+-------+--------+-------+--------------------| | | | | | |arquivador para a | |binutils |V:172,|144 |.ar |ar(1) |criação de | | |I:629 | | | |bibliotecas | | | | | | |estáticas | |----------+------+-------+--------+-------+--------------------| |fastjar |V:1, |183 |.jar |fastjar|arquivador para Java| | |I:13 | | |(1) |(estilo zip) | |----------+------+-------+--------+-------+--------------------| | | | | | |novo arquivador | |pax |V:8, |170 |.pax |pax(1) |standard do POSIX, | | |I:14 | | | |um compromisso entre| | | | | | |tar e cpio | |----------+------+-------+--------+-------+--------------------| | | | | |gzip |LZ77 utilitário de | |gzip |V:876,|252 |.gz |(1), |compressão do GNU (o| | |I:999 | | |zcat |standard de facto) | | | | | |(1), … | | |----------+------+-------+--------+-------+--------------------| | | | | | |Compressão de | | | | | | |organização de | | | | | | |blocos de | | | | | |bzip2 |Burrows-Wheeler | |bzip2 |V:166,|112 |.bz2 |(1), |utilitário com um | | |I:970 | | |bzcat |rácio de compressão | | | | | |(1), … |mais alto que o gzip| | | | | | |(1) (mais lento que | | | | | | |o gzip com sintaxe | | | | | | |semelhante) | |----------+------+-------+--------+-------+--------------------| | | | | | |LZMA compression | | |V:1, | | | |utility with higher | |lzma |I:16 |149 |.lzma |lzma(1)|compression ratio | | | | | | |than gzip(1) | | | | | | |(deprecated) |     |----------+------+-------+--------+-------+--------------------| | | | | | |XZ utilitário de | | | | | | |compressão com rácio| | | | | | |de compressão mais | | | | | |xz(1), |alto que o bzip2(1) | |xz-utils |V:360,|1203 |.xz |xzdec |(mais lento que o | | |I:980 | | |(1), … |gzip mas mais rápido| | | | | | |que o bzip2; | | | | | | |substituto para o | | | | | | |utilitário de | | | | | | |compressão LZMA) | |----------+------+-------+--------+-------+--------------------| | | | | |zstd |Zstandard fast | |zstd |V:193,|2158 |.zstd |(1), |lossless compression| | |I:481 | | |zstdcat|utility | | | | | |(1), … | | |----------+------+-------+--------+-------+--------------------| | | | | |7zr(1),|7-Zip arquivador de | |p7zip |V:20, |8 |.7z |p7zip |arquivos com alta | | |I:463 | | |(1) |taxa de compressão | | | | | | |(compressão LZMA) | |----------+------+-------+--------+-------+--------------------| | | | | | |7-Zip arquivador de | | |V:110,| | |7z(1), |ficheiros com rácio | |p7zip-full|I:480 |12 |.7z |7za(1) |de compressão alto | | | | | | |(LZMA compressão e | | | | | | |outros) | |----------+------+-------+--------+-------+--------------------| | | | | | |LZO utilitário de | | | | | | |compressão com mais | | | | | | |alta compressão e | | |V:15, | | | |mais rápida | |lzop |I:142 |164 |.lzo |lzop(1)|descompressão que o | | | | | | |gzip(1) (rácio de | | | | | | |compressão mais | | | | | | |baixo que o gzip com| | | | | | |sintaxe semelhante) | |----------+------+-------+--------+-------+--------------------| | |V:48, | | | |InfoZIP: ferramenta | |zip |I:380 |616 |.zip |zip(1) |de compressão e | | | | | | |arquivo do DOS | |----------+------+-------+--------+-------+--------------------| | | | | | |InfoZIP: ferramenta | |unzip |V:105,|379 |.zip |unzip |de descompressão e | | |I:771 | | |(1) |de de-arquivar do | | | | | | |DOS | +---------------------------------------------------------------+ Atenção     Não defina a variável "$TAPE" a menos que saiba com o que esperar. Altera o comportamento do tar(1). * O arquivo tar(1) gzipado usa a extensão de ficheiro ".tgz" ou ".tar.gz". * O arquivo tar(1) comprimido em xz usa a extensão de ficheiro ".txz" ou ".tar.xz". * Método de compressão popular em ferramentas FOSS tal como o tar(1) têm se movido como a seguir: gzip → bzip2 → xz * cp(1), scp(1) e tar(1) podem ter algumas limitações para ficheiros especiais. cpio(1) é o mais versátil.     * O cpio(1) é desenhado para ser utilizado com o find(1) e outros comandos e apropriado para criar scripts de backup pois a parte de seleção de ficheiros do script pode ser testada independentemente. * A estrutura interna dos ficheiros de dados do Libreoffice são ficheiros ".jar" que também podem ser abertos pelo unzip. * A ferramenta de arquivo que é "de-facto" multi-plataforma é o zip. Use-o como "zip -rX" para obter o máximo de compatibilidade. Use também a opção "-s", se o tamanho máximo de ficheiro for importante. 10.1.2. Ferramentas de cópia de sincronização     Aqui está um sumário de ferramentas de cópia simples e salvaguarda disponíveis no sistema Debian. Tabela 10.2. Lista de ferramentas de cópia e sincronização +---------------------------------------------------------------+ | pacote |popcon|tamanho|ferramenta| função | |--------------+------+-------+----------+----------------------| | | | | |copia localmente | |coreutils |V:880,|18307 |GNU cp |ficheiros e diretórios| | |I:999 | | |("-a" para ser | | | | | |recursivo) | |--------------+------+-------+----------+----------------------| | | | | |copia remotamente | |openssh-client|V:866,|4959 |scp |ficheiros e diretórios|     | |I:996 | | |(cliente, "-r" para | | | | | |ser recursivo) | |--------------+------+-------+----------+----------------------| | |V:730,| | |copia ficheiros e | |openssh-server|I:814 |1804 |sshd |diretórios remotamente| | | | | |(servidor remoto) | |--------------+------+-------+----------+----------------------| |rsync |V:246,|781 | |sincronização remota a| | |I:552 | | |salvaguarda de 1 via | |--------------+------+-------+----------+----------------------| |unison |V:3, |14 | |sincronização remota a| | |I:15 | | |salvaguarda de 2 vias | +---------------------------------------------------------------+     Copiar ficheiros com o rsync(8) oferece funcionalidades mais ricas que os outros. * algoritmo de transferência delta que envia apenas as diferenças entre os ficheiros da fonte e os ficheiros existentes no destino * algoritmo de verificação rápida (predefinido) que procura     ficheiros que alteraram no tamanho ou hora da última modificação * opções "--exclude" e "--exclude-from" semelhantes ao tar(1) * sintaxe de "uma barra final no diretório fonte" que evita a criação de um nível de diretório adicional no destino. Dica     Ferramentas de sistema de controlo de versão (VCS) em Tabela 10.14, “List of other version control system tools” podem funcionar como a copia de multi-modos e ferramentas de sincronização. 10.1.3. Idiomas para o arquivo     Aqui estão várias maneiras de arquivar e "desarquivar" o conteúdo completo do diretório "./source" a usar diferentes ferramentas.     GNU tar(1):     $ tar -cvJf archive.tar.xz ./source $ tar -xvJf archive.tar.xz     Alternativamente, pelo seguinte.     $ find ./source -xdev -print0 | tar -cvJf archive.tar.xz --null -T -     cpio(1):     $ find ./source -xdev -print0 | cpio -ov --null > archive.cpio; xz archive.cpio $ zcat archive.cpio.xz | cpio -i 10.1.4. Idiomas para a cópia     Aqui estão algumas maneiras de copiar o conteúdo inteiro do diretório "./source" a usar diferentes ferramentas. * Cópia local: diretório "./source" → diretório "/dest"     * Cópia remota: diretório "./source" em máquina local → diretório "/dest" na máquina "utilizador@máquina.domínio"     rsync(8):     # cd ./source; rsync -aHAXSv . /dest # cd ./source; rsync -aHAXSv . user@host.dom:/dest     Pode alternativamente usar a sintaxe de "uma barra à direita no diretório fonte".     # rsync -aHAXSv ./source/ /dest # rsync -aHAXSv ./source/ user@host.dom:/dest     Alternativamente, pelo seguinte.     # cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . /dest # cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . user@host.dom:/dest     cp(1) de GNU e scp(1) de openSSH:     # cd ./source; cp -a . /dest # cd ./source; scp -pr . user@host.dom:/dest     GNU tar(1):     # (cd ./source && tar cf - . ) | (cd /dest && tar xvfp - ) # (cd ./source && tar cf - . ) | ssh user@host.dom '(cd /dest && tar xvfp - )'     cpio(1):     # cd ./source; find . -print0 | cpio -pvdm --null --sparse /dest Pode substituir "." por "foo" para todos os exemplos que     contenham "." para copiar ficheiros do diretório "./source/foo" ao diretório "/dest/foo". Pode substituir "." pelo caminho absoluto "/caminho/para/fonte/     foo" para todos os exemplos que contenham "." para abandonar "cd ./source;". Estes copiam ficheiros para localizações diferentes a depender das ferramentas utilizadas conforme a seguir. * "/dest/foo": rsync(8), cp(1) do GNU e scp(1)     * "/dest/path/to/source/foo": GNU tar(1) e cpio(1) Dica     rsync(8) e cp(1) do GNU têm a opção "-u" para saltar ficheiros que são mais recentes no receptor. 10.1.5. Idiomas para a seleção de ficheiros O find(1) é usado para selecionar ficheiros para o arquivo e copiar comandos (veja Secção 10.1.3, “Idiomas para o arquivo” e     Secção 10.1.4, “Idiomas para a cópia”) ou para xargs(1) (veja Secção 9.4.9, “Repetir um ciclo de comandos sobre ficheiros”). Isto pode ser melhorado ao usar os seus argumentos de comando.     A sintaxe básica de find(1) pode ser sumariada no seguinte. * Os seus argumentos condicionais são avaliados da esquerda à direita. * Esta avaliação pára assim que o resultado dele é determinado. * O "OU lógico" (especificado por "-o" entre condicionais) tem precedência mais baixa que o "E lógico" (especificado por "-a" ou nada entre condicionais). * O "NÃO lógico" (especificado por "!" antes duma condicional) tem precedência mas alta que o "E lógico". * "-prune" retorna sempre o VERDADEIRO lógico e, se for um diretório, a busca de ficheiro é parada para além deste ponto.     * "-name" corresponde à base do nome de ficheiro com glob de shell (veja Secção 1.5.6, “Glob da shell”) mas também corresponde ao "." inicial dele com meta-caracteres como o "*" e o "?". (Nova funcionalidade do POSIX) * "-regex" corresponde ao caminho completo com estilo emacs BRE (veja Secção 1.6.2, “Expressões regulares”) como predefinição. * "-size" corresponde ao ficheiro baseado no tamanho do ficheiro (valor precedido de "+" para maior, precedido de "-" para menor) * "-newer" corresponde ao ficheiro mais recente que aquele especificado no argumento dele. * "-print0" retorna sempre o TRUE lógico e escreve o nome de ficheiro completo (terminado em nulo) na saída standard.     O find(1) é usado geralmente com um estilo idiomático como a seguir. # find /path/to \ -xdev -regextype posix-extended \     -type f -regex ".*\.cpio|.*~" -prune -o \ -type d -regex ".*/\.git" -prune -o \ -type f -size +99M -prune -o \ -type f -newer /path/to/timestamp -print0     Isto significa fazer as seguintes acções. 1. Procurar todos os ficheiros que começam por "/caminho/para" 2. Limitar globalmente a busca para dentro do sistema de ficheiros inicial e usa ERE (ao inves veja Secção 1.6.2, “Expressões regulares”) 3. Excluir da busca os ficheiros que correspondem à expressão regular ".*\.cpio" ou ".*~" ao parar o processamento     4. Excluir da busca os diretórios que correspondem à expressão regular ".*/\.git" ao parar o processamento 5. Exclui da busca os ficheiros maiores que 99 Mb (unidades de 1048576 bytes) ao parar o processamento 6. Escrever os nomes de ficheiros que satisfazem as condições de busca em cima e são mais recentes que "/caminho/para/ timestamp"     Por favor note a utilização idiomática de "-prune -o" para excluir ficheiros no exemplo em cima. Nota     Para um sistema não-Debian tipo Unix, algumas opções podem não ser suportadas pelo find(1). Em tal caso, por favor considere ajustar os métodos de correspondência e substitua "-print0" por "-print". Poderá ter que ajustar também os comandos relacionados. 10.1.6. Meio de arquivo Quando escolher o meio de armazenamento de dados de computador para arquivar dados importantes, deverá ter cuidado com as suas     limitações. Para os pequenos backups de dados pessoais uso CD-Rs e DVD-Rs de uma boa marca e guardo-os num ambiente fresco, à sombra, seco e limpo. (O meio de cassete de fita magnética parece ser popular para uso profissional.) Nota A segurança de resistência ao fogo destina-se a documentos de     papel. A maioria dos meios de armazenamento de dados de computador têm menos tolerância à temperatura que o papel. Geralmente Confio em múltiplas cópias de segurança encriptadas em múltiplas localizações seguras.     A duração de vida optimista de meios de arquivo vista na net (a maioria é informação do fabricante). * + de 100 anos : Papel livre de ácidos com tinta * 100 anos : Armazenamento óptico (CD/DVD, CD/DVD-R)     * 30 anos : Armazenamento magnético (fita, disquete) * 20 anos : Armazenamento óptico de mudança de fase (CD-RW)     Estes não contam com falhas mecânicas devido a manuseamento e etc.     Ciclos de escrita optimistas dos meios de arquivo vistos na net (a maioria é informação do fabricante). * + de 250,000 ciclos : Disco rígido * + de 10,000 ciclos : Memória Flash     * 1,000 ciclos : CD/DVD-RW * 1 ciclo : CD/DVD-R, papel Cuidado     As figuras de vida de armazenamento e ciclos de escrita mostradas aqui não devem ser usadas para decisões em qualquer armazenamento de dados crítico. Por favor consulte a informação específica do produto disponibilizada pelo fabricante. Dica     Como os CD/DVD-R e o papel têm apenas 1 ciclo de escrita, eles previnem perdas de dados acidentais ao sobrescrever. Isto é uma vantagem! Dica     Se precisa de um backup rápido e frequente de grandes quantidades de dados, um disco rígido numa máquina remota ligada por uma ligação de rede rápida, pode ser a única opção realista. Dica     If you use re-writable media for your backups, use of filesystem such as btrfs or zfs which supports read-only snapshots may be a good idea. 10.1.7. Aparelho de armazenamento amovível     Aparelhos de armazenamento amovível podem ser qualquer um dos seguintes. * Pen USB * Disco Rígido     * Leitor de disco óptico * Câmara digital * Leitor digital de música     Podem ser ligados por qualquer um dos seguintes: * USB     * IEEE 1394 / FireWire * PC Card Os ambientes de trabalho modernos tais como o GNOME e KDE podem     montar automaticamente estes aparelhos amovíveis sem uma entrada correspondente no "/etc/fstab". * udisks2 package provides a daemon and associated utilities to mount and unmount these devices.     * D-bus cria eventos para iniciar processos automáticos. * PolicyKit disponibiliza os privilégios necessários. Dica     Os aparelhos auto-montados podem ter a opção de montagem "uhelper =" que é utilizada por umount(8). Dica     A auto-montagem em ambientes de trabalho modernos apenas acontece quando esses aparelhos amovíveis não estão listados em "/etc/ fstab".     Mount point under modern desktop environment is chosen as "/media /username/disk_label" which can be customized by the following. * mlabel(1) para o sistema de ficheiros FAT * genisoimage(1) com a opção "-V" para o sistema de ficheiros     ISO9660 * tune2fs(1) com a opção "-L" para sistemas de ficheiros ext2/ ext3/ext4 Dica     A escolha de codificação pode necessitar de ser disponibilizada como opção de montagem (veja Secção 8.1.3, “Codificação de nomes de ficheiros”). Dica     A utilização do menu da GUI para desmontar um sistema de ficheiros pode remover o nó de aparelho dele gerado dinamicamente tal como "/dev/sdc". Se desejar manter o nó de aparelho dele, desmonte-o com o comando umount(8) na linha de comandos da shell. 10.1.8. Escolha de sistema de ficheiros para partilhar dados Quando partilha dados com outros sistemas via aparelhos de     armazenamento amovível, deve formatá-lo num sistema de ficheiros comum que seja suportado pelos dois sistemas. Aqui está uma lista de escolhas de sistemas de ficheiros. Tabela 10.3. Lista de hipóteses de sistemas de ficheiros para aparelhos de armazenamento amovíveis com cenários de utilização típica +---------------------------------------------------------------+ |filesystem| typical usage scenario | | name | | |----------+----------------------------------------------------| |FAT12 |partilha de dados em várias plataformas em disquetes| | |(<32MiB) | |----------+----------------------------------------------------| |FAT16 |partilha de dados em várias plataformas em aparelhos| | |como pequenos discos rígidos (<2GiB) | |----------+----------------------------------------------------| | |partilha de dados em várias plataformas em aparelhos| |FAT32 |como grandes discos rígidos (<8TiB, suportado por | | |mais recente que MS Windows95 OSR2) | |----------+----------------------------------------------------| | |cross platform sharing of data on the large hard | |exFAT |disk like device (<512TiB, supported by WindowsXP, | | |Mac OS X Snow Leopard 10.6.5, and Linux kernel since| | |5.4 release) | |----------+----------------------------------------------------| | |partilha de dados em várias plataformas em aparelhos|     |NTFS |como grandes discos rígidos (suportado nativamente | | |no MS Windows NT e versões posteriores e suportado | | |pelo NTFS-3G via FUSE em Linux) | |----------+----------------------------------------------------| |ISO9660 |partilha de dados estáticos em várias plataformas em| | |CD-R e DVD+/-R | |----------+----------------------------------------------------| |UDF |escrita de dados incremental em CD-R e DVD+/-R | | |(novo) | |----------+----------------------------------------------------| |MINIX |armazenamento de dados em ficheiros unix eficiente | | |em espaço em disquetes | |----------+----------------------------------------------------| |ext2 |partilha de dados em aparelhos tipo disco rígido com| | |sistemas Linux mais antigos | |----------+----------------------------------------------------| |ext3 |partilha de dados em aparelhos tipo disco rígido com| | |sistemas Linux mais antigos | |----------+----------------------------------------------------| |ext4 |partilha de dados em aparelhos de tipo disco rígido | | |com sistemas Linux atuais | |----------+----------------------------------------------------| |btrfs |sharing of data on the hard disk like device with | | |current Linux systems with read-only snapshots | +---------------------------------------------------------------+ Dica     Veja Secção 9.9.1, “Encriptação de discos amovíveis com dm-crypt/ LUKS” para partilha de dados em várias plataformas a usar encriptação ao nível do aparelho. O sistema de ficheiros FAT é suportado pela maioria dos sistemas     operativos modernos e é bastante útil para objetivos de trocas de dados via aparelhos tipo disco rígido. Quando formatar aparelhos tipo disco rígido amovíveis para     partilha de dados em multi-plataformas com o sistema de ficheiros FAT, as seguintes deverão ser escolhas seguras. * Particioná-los com o fdisk(8), cfdisk(8) ou parted(8) (veja Secção 9.6.2, “Configuração das partições do disco”) numa única partição primária e marcá-la como a seguir. + Tipo "6" para FAT16 para médias inferiores a 2GB. + Tipo "c" para FAT32 (LBA) para médias maiores.     * Formatar a partição primária com o mkfs.vfat(8) com o seguinte. + Apenas o nome de aparelho dele, ex. "/dev/sda1" para FAT16 + A opção explícita e o nome de aparelho dela, ex. "-F 32 / dev/sda1" para FAT32     Quando se usa sistemas de ficheiros FAT ou ISO9660 para partilhar dados, as considerações de segurança deverão ser as seguintes. * Arquivar ficheiros para um ficheiro de arquivo primeiro a utilizar o tar(1), ou cpio(1) para reter o nome longo do ficheiro, a ligação simbólica, as permissões originais de ficheiro Unix e a informação do dono.     * Dividir o ficheiro de arquivo em fatias com menos de 2 GiB com o comando split(1) para o proteger contra limites de tamanho de ficheiro. * Encriptar o ficheiro de arquivo para segurar o conteúdo dele contra acesso não autorizado. Nota Para o sistema de ficheiros FAT pelo seu desenho, o tamanho     máximo de ficheiro é (2^32 - 1) bytes = (4GiB - 1 byte). Para algumas aplicações do antigo SO de 32 bits, o tamanho máximo de ficheiro é mais pequeno (2^31 - 1) bytes = (2GiB - 1 byte). O Debian não sofre do segundo problema. Nota A própria Microsoft não recomenda o uso de FAT para discos ou     partições maiores que 200 MB. A Microsoft destaca as suas deficiências como a ser a utilização ineficiente do espaço do disco na "Visão geral dos sistemas de ficheiros FAT, HPFS e NTFS" dele. Claro que devemos normalmente usar o sistema de ficheiros ext4 para Linux. Dica     Para mais sistemas de ficheiros e acesso a sistemas de ficheiros, por favor leia "HOWTO dos Sistemas de Ficheiros". 10.1.9. Partilhar dados via a rede     Quando se partilha dados com outro sistema via rede, deve usar serviços comuns. Aqui estão algumas dicas. Tabela 10.4. Lista de serviços de rede para escolher com o cenário de utilização típico +---------------------------------------------------------------+ | serviço de rede |descrição do cenário de utilização típico| |---------------------+-----------------------------------------| |SMB/CIFS sistema de |partilha ficheiros via "Rede Microsoft | |ficheiros montado em |Windows", veja smb.conf(5) e O HOWTO | |rede com o Samba |Oficial do Samba 3.x.x e Guia de | | |Referência ou o pacote samba-doc | |---------------------+-----------------------------------------| |NFS sistema de | | |ficheiros montado em |partilhar ficheiros via "Rede Unix/ |     |rede com o kernel do |Linux", veja exports(5) e Linux NFS-HOWTO| |Linux | | |---------------------+-----------------------------------------| |serviço HTTP |a partilhar ficheiros entre o servidor/ | | |cliente web | |---------------------+-----------------------------------------| | |partilhar ficheiros entre o servidor/ | |serviço HTTPS |cliente web com Secure Sockets Layer | | |encriptado (SSL) ou Transport Layer | | |Security (TLS) | |---------------------+-----------------------------------------| |serviço FTP |a partilhar ficheiros entre o servidor/ | | |cliente FTP | +---------------------------------------------------------------+ Apesar de estes sistemas de ficheiros montados sobre rede e     métodos de transferência de ficheiros em rede serem bastante convenientes para partilhar dados, estes podem ser inseguros. A ligação de rede deles tem de ser segurada com o seguinte. * Encriptar com SSL/TLS * Ligue-o em túnel via SSH     * Ligue-o em túnel via VPN * Limitar por detrás da firewall segura     Veja também Secção 6.5, “Outras aplicações de servidor de rede” e Secção 6.6, “Outros clientes de aplicação de rede”. 10.2. Salvaguarda (backup) e recuperação Todos sabemos que os computadores avariam ou que erros humanos causam danos no sistema e nos dados. As operações de salvaguarda     e recuperação são a parte essencial sucesso do administrador de sistemas. Todos os modos de falha possíveis irão atingi-lo um dia. Dica     Mantenha o seu sistema de backup simples e faça backups periódicos. Ter cópias de segurança dos dados é mais importante do que quão bom é tecnicamente o seu método de backup. 10.2.1. Backup and recovery policy     Existem 3 factores chave que determinam a política atual de salvaguarda e recuperação. 1. Saber o que salvaguardar e recuperar. + Ficheiros de dados criados directamente por si: dados em "~/" + Ficheiros de dados criados por aplicações usadas por si: dados em "/var/" (excepto "/var/cache/", "/var/run/" e "/ var/tmp/") + Ficheiros de configuração do sistema: dados em "/etc/" + Local programs: data in "/usr/local/" or "/opt/" + Informação da instalação do sistema: um memo em texto simples em passos chave (partição, ...) + Conjunto de dados de prova: confirmado com antecedência por operações de recuperação experimentais o Cron job as a user process: files in "/var/spool/cron /crontabs" directory and restart cron(8). See Secção 9.4.14, “Agendar tarefas regularmente” for cron(8) and crontab(1). o Systemd timer jobs as user processes: files in "~ /.config/systemd/user" directory. See systemd.timer (5) and systemd.service(5). o Autostart jobs as user processes: files in "~/.config /autostart" directory. See Desktop Application Autostart Specification. 2. Saber como salvaguardar e recuperar. + Armazenamento de dados seguro: protecção contra reescrita e falha do sistema + Salvaguarda frequente: salvaguarda agendada + Backup redundante: usar mirror de dados + Processo à prova de tolos: backup fácil de comando único     3. Avaliar os riscos e custos envolvidos. + Risk of data when lost o Data should be at least on different disk partitions preferably on different disks and machines to withstand the filesystem corruption. Important data are best stored on a read-only filesystem. ^[4] + Risk of data when breached o Sensitive identity data such as "/etc/ssh/ ssh_host_*_key", "~/.gnupg/*", "~/.ssh/*", "~/.local/ share/keyrings/*", "/etc/passwd", "/etc/shadow", "popularity-contest.conf", "/etc/ppp/pap-secrets", and "/etc/exim4/passwd.client" should be backed up as encrypted. ^[5] (See Secção 9.9, “Dicas de encriptação de dados”.) o Never hard code system login password nor decryption passphrase in any script even on any trusted system. (See Secção 10.3.6, “Password keyring”.) + Modo de falha e a possibilidade dele o Hardware (especially HDD) will break o Filesystem may be corrupted and data in it may be lost o Remote storage system can't be trusted for security breaches o Weak password protection can be easily compromised o File permission system may be compromised + Recursos necessários para o backup: humano, hardware, software,… o Automatic scheduled backup with cron job or systemd timer job Dica     Pode recuperar dados configuração debconf com "debconf-set-selections debconf-selections" e dados de seleção do dpkg com "dpkg --set-selection &2 ; exit 1     fi MSGID=$(notify-send -p "bkup.sh $DSTSV" "in progress ...") if [ ! -d "$DSTFS/$DSTSV" ]; then btrfs subvolume create "$DSTFS/$DSTSV" mkdir -p "$DSTSS" fi rsync -aHxS --delete --mkpath "${SRC}/" "${DSTFS}/${DSTSV}" btrfs subvolume snapshot -r "${DSTFS}/${DSTSV}" ${DSTSS}/$(date -u --iso=min) notify-send -r "$MSGID" "bkup.sh $DSTSV" "finished!"     Here, only the basic tool rsync(1) is used to facilitate system backup and the storage space is efficiently used by Btrfs. Dica     FYI: This author uses his own similar shell script "bss: Btrfs Subvolume Snapshot Utility" for his workstation. 10.2.3.1. GUI backup     Here is an example to setup the single GUI click backup. * Prepare a USB storage device to be used for backup. + Format a USB storage device with one partition in btrfs with its label name as "BKUP". This can be encrypted (see Secção 9.9.1, “Encriptação de discos amovíveis com dm-crypt/ LUKS”). + Plug this in to your system. The desktop system should automatically mount it as "/media/penguin/BKUP".     + Execute "sudo chown penguin:penguin /media/penguin/BKUP" to make it writable by the user. * Create "~/.local/share/applications/BKUP.desktop" following techniques written in Secção 9.4.10, “Arrancar um programa a partir da GUI” as: [Desktop Entry] Name=bkss Comment=Backup and snapshot of ~/Documents Exec=/usr/local/bin/bkss.sh /home/penguin/Documents /media/penguin/BKUP Documents Type=Application     For each GUI click, your data is backed up from "~/Documents" to a USB storage device and a read-only snapshot is created. 10.2.3.2. Mount event triggered backup     Here is an example to setup for the automatic backup triggered by the mount event. * Prepare a USB storage device to be used for backup as in Secção 10.2.3.1, “GUI backup”. * Create a systemd service unit file "~/.config/systemd/user/ back-BKUP.service" as: [Unit] Description=USB Disk backup Requires=media-%u-BKUP.mount After=media-%u-BKUP.mount     [Service] ExecStart=/usr/local/bin/bkss.sh %h/Documents /media/%u/BKUP Documents StandardOutput=append:%h/.cache/systemd-snap.log StandardError=append:%h/.cache/systemd-snap.log [Install] WantedBy=media-%u-BKUP.mount * Enable this systemd unit configuration with the following: $ systemctl --user enable bkup-BKUP.service     For each mount event, your data is backed up from "~/Documents" to a USB storage device and a read-only snapshot is created. Here, names of systemd mount units that systemd currently has in     memory can be asked to the service manager of the calling user with "systemctl --user list-units --type=mount". 10.2.3.3. Timer event triggered backup     Here is an example to setup for the automatic backup triggered by the timer event. * Prepare a USB storage device to be used for backup as in Secção 10.2.3.1, “GUI backup”. * Create a systemd timer unit file "~/.config/systemd/user/ snap-Documents.timer" as: [Unit] Description=Run btrfs subvolume snapshot on timer Documentation=man:btrfs(1) [Timer] OnStartupSec=30 OnUnitInactiveSec=900 [Install] WantedBy=timers.target     * Create a systemd service unit file "~/.config/systemd/user/ snap-Documents.service" as: [Unit] Description=Run btrfs subvolume snapshot Documentation=man:btrfs(1) [Service] Type=oneshot Nice=15 ExecStart=/usr/local/bin/bkss.sh %h/Documents /media/%u/BKUP Documents IOSchedulingClass=idle CPUSchedulingPolicy=idle StandardOutput=append:%h/.cache/systemd-snap.log StandardError=append:%h/.cache/systemd-snap.log * Enable this systemd unit configuration with the following: $ systemctl --user enable snap-Documents.timer     For each timer event, your data is backed up from "~/Documents" to a USB storage device and a read-only snapshot is created. Here, names of systemd timer user units that systemd currently     has in memory can be asked to the service manager of the calling user with "systemctl --user list-units --type=timer". For the modern desktop system, this systemd approach can offer     more fine grained control than the traditional Unix ones using at (1), cron(8), or anacron(8). 10.3. Infraestrutura da segurança de dados A infraestrutura de segurança dos dados é disponibilizada pela     combinação de uma ferramenta de encriptação de dados, ferramenta de resumo de mensagens e ferramenta de assinaturas. Tabela 10.6. Lista de ferramentas de infraestrutura da segurança de dados +---------------------------------------------------------------+ | pacote |popcon|tamanho| comando | descrição | |---------------+------+-------+-----------+--------------------| | | | | |GNU Privacy Guard - | |gnupg |V:554,|885 |gpg(1) |ferramenta de | | |I:906 | | |encriptação e | | | | | |assinatura OpenPGP | |---------------+------+-------+-----------+--------------------| | | | | |GNU Privacy Guard - | |gpgv |V:893,|922 |gpgv(1) |ferramenta de | | |I:999 | | |verificação de | | | | | |assinaturas | |---------------+------+-------+-----------+--------------------| | | | | |extrai apenas a | |paperkey |V:1, |58 |paperkey(1)|informação secreta | | |I:14 | | |de chaves secretas | | | | | |OpenPGP | |---------------+------+-------+-----------+--------------------| | | | | |utilities for |     |cryptsetup |V:19, |417 |cryptsetup |dm-crypt block | | |I:79 | |(8), … |device encryption | | | | | |supporting LUKS | |---------------+------+-------+-----------+--------------------| | |V:880,| | |computa e verifica o| |coreutils |I:999 |18307 |md5sum(1) |resumo da mensagem | | | | | |MD5 | |---------------+------+-------+-----------+--------------------| | |V:880,| | |computa e verifica o| |coreutils |I:999 |18307 |sha1sum(1) |resumo da mensagem | | | | | |SHA1 | |---------------+------+-------+-----------+--------------------| | | | | |computa o resumo da | |openssl |V:841,|2111 |openssl |mensagem com | | |I:995 | |(1ssl) |"openssl dgst" | | | | | |(OpenSSL) | |---------------+------+-------+-----------+--------------------| |libsecret-tools|V:0, |41 |secret-tool|store and retrieve | | |I:10 | |(1) |passwords (CLI) | |---------------+------+-------+-----------+--------------------| |seahorse |V:80, |7987 |seahorse(1)|key management tool | | |I:269 | | |(GNOME) | +---------------------------------------------------------------+ See Secção 9.9, “Dicas de encriptação de dados” on dm-crypt and     fscrypt which implement automatic data encryption infrastructure via Linux kernel modules. 10.3.1. Gestão de chaves para GnuPG     Aqui estão comandos do GNU Privacy Guard para gestão de chaves básica. Tabela 10.7. Lista de comandos do GNU Privacy Guard para gestão de chaves +---------------------------------------------------------------+ | comando | descrição | |------------------------+--------------------------------------| |gpg --gen-key |gerar uma chave nova | |------------------------+--------------------------------------| |gpg --gen-revoke |gera chave de revogação para | |meu_ID_utilizador |meu_ID_utilizador | |------------------------+--------------------------------------| |gpg --edit-key |edita chave interativamente, "help" | |ID_utilizador |para ajuda | |------------------------+--------------------------------------| |gpg -o ficheiro --export|exporta todas as chaves para ficheiro | |------------------------+--------------------------------------| |gpg --import ficheiro |importa todas as chaves de ficheiro | |------------------------+--------------------------------------| |gpg --send-keys |envia chave de ID_utilizador para |     |ID_utilizador |servidor de chaves | |------------------------+--------------------------------------| |gpg --recv-keys |recupera chave de ID_utilizador do | |ID_utilizador |servidor de chaves | |------------------------+--------------------------------------| |gpg --list-keys |lista chaves de ID_utilizador | |ID_utilizador | | |------------------------+--------------------------------------| |gpg --list-sigs |lista assinaturas de ID_utilizador | |ID_utilizador | | |------------------------+--------------------------------------| |gpg --check-sigs |verifica assinaturas de ID_utilizador | |ID_utilizador | | |------------------------+--------------------------------------| |gpg --fingerprint |verifica a impressão digital de | |ID_utilizador |ID_utilizador | |------------------------+--------------------------------------| |gpg --refresh-keys |atualiza o chaveiro local | +---------------------------------------------------------------+     Aqui está o significado do código de confiança. Tabela 10.8. Lista do significado do código de confiança +---------------------------------------------------------------+ |código| descrição de confiança | |------+--------------------------------------------------------| |- |nenhuma confiança de dono atribuída / ainda não | | |calculado | |------+--------------------------------------------------------| |e |falha no cálculo da confiança | |------+--------------------------------------------------------|     |q |não existe informação suficiente para o cálculo | |------+--------------------------------------------------------| |n |nunca confiar nesta chave | |------+--------------------------------------------------------| |m |marginalmente confiável | |------+--------------------------------------------------------| |f |totalmente confiável | |------+--------------------------------------------------------| |u |de confiança absoluta | +---------------------------------------------------------------+     O seguinte envia a minha chave "1DD8D791" para o popular servidor de chaves "hkp://keys.gnupg.net".     $ gpg --keyserver hkp://keys.gnupg.net --send-keys 1DD8D791 Um bom servidor de chaves predefinido configurado em "~/.gnupg/     gpg.conf" (ou na antiga localização "~/.gnupg/options") contém o seguinte.     keyserver hkp://keys.gnupg.net     O seguinte obtém chaves desconhecidas do servidor de chaves.     $ gpg --list-sigs --with-colons | grep '^sig.*\[User ID not found\]' |\ cut -d ':' -f 5| sort | uniq | xargs gpg --recv-keys Existiu um bug no OpenPGP Public Key Server (versão anterior a     0.9.6) que corrompeu as chaves com mais de 2 sub-chaves. O novo pacote gnupg (>1.2.1-2) consegue lidar com estas chaves corrompidas. Veja gpg(1) sob a opção "--repair-pks-subkey-bug". 10.3.2. Usa GnuPG em ficheiros     Aqui estão exemplos para usar comandos do GNU Privacy Guard em ficheiros. Tabela 10.9. Lista de comandos do GNU Privacy Guard em ficheiros +---------------------------------------------------------------+ | comando | descrição | |-----------------------+---------------------------------------| |gpg -a -s ficheiro |assina ficheiro em ficheiro.asc | | |blindado de ASCII | |-----------------------+---------------------------------------| |gpg --armor --sign |, , | |ficheiro | | |-----------------------+---------------------------------------| |gpg --clearsign |mensagem com assinatura clara | |ficheiro | | |-----------------------+---------------------------------------| |gpg --clearsign file| |envia por mail uma mensagem com | |mail foo@example.org |assinatura clara para foo@example.org | |-----------------------+---------------------------------------| |gpg --clearsign | | |--not-dash-escaped |ficheiro patch com assinatura clara | |patchfile | | |-----------------------+---------------------------------------| |gpg --verify ficheiro |verifica ficheiro com assinatura clara | |-----------------------+---------------------------------------| |gpg -o ficheiro.sig -b |cria assinatura separada | |ficheiro | | |-----------------------+---------------------------------------| |gpg -o file.sig |, , | |--detach-sign file | | |-----------------------+---------------------------------------| |gpg --verify |verifica ficheiro com file.sig |     |ficheiro.sig ficheiro | | |-----------------------+---------------------------------------| |gpg -o crypt_file.gpg |encriptação de chave pública destinada | |-r nome -e ficheiro |a nome a partir de ficheiro para | | |crypt_file.gpg binário | |-----------------------+---------------------------------------| |gpg -o crypt_file.gpg | | |--recipient nome |, , | |--encrypt ficheiro | | |-----------------------+---------------------------------------| |gpg -o crypt_file.asc |encriptação de chave pública destinada | |-a -r nome -e ficheiro |a nome a partir de ficheiro para | | |crypt_file.asc blindado de ASCII | |-----------------------+---------------------------------------| |gpg -o crypt_file.gpg |encriptação simétrica a partir de | |-c ficheiro |ficheiro para crypt_file.gpg | |-----------------------+---------------------------------------| |gpg -o crypt_file.gpg |, , | |--symmetric ficheiro | | |-----------------------+---------------------------------------| |gpg -o crypt_file.asc |encriptação simétrica destinada a nome | |-a -c ficheiro |a partir de ficheiro para | | |crypt_file.asc blindado de ASCII | |-----------------------+---------------------------------------| |gpg -o ficheiro -d |desencriptação | |crypt_file.gpg -r nome | | |-----------------------+---------------------------------------| |gpg -o ficheiro | | |--decrypt |, , | |crypt_file.gpg | | +---------------------------------------------------------------+ 10.3.3. Usar GnuPG com o Mutt Adicione o seguinte a "~/.muttrc" para impedir o GnuPG lento de     arrancar automaticamente, enquanto permite que seja usado ao escrever "S" no menu de índice.     macro index S ":toggle pgp_verify_sig\n" set pgp_verify_sig=no 10.3.4. Usar GnuPG com o Vim     The gnupg plugin let you run GnuPG transparently for files with extension ".gpg", ".asc", and ".pgp".^[6]     $ sudo aptitude install vim-scripts $ echo "packadd! gnupg" >> ~/.vim/vimrc 10.3.5. O valor de controlo MD5 O md5sum(1) disponibiliza um utilitário para fazer um ficheiro de     sumário a usar o método em rfc1321 e verificar cada ficheiro com ele. $ md5sum foo bar >baz.md5 $ cat baz.md5 d3b07384d113edec49eaa6238ad5ff00 foo     c157a79031e1c40f85931829bc5fc552 bar $ md5sum -c baz.md5 foo: OK bar: OK Nota O cálculo do sumário MD5 é menos intensivo para a CPU que o da     assinatura criptográfica do GNU Privacy Guard (GnuPG). Normalmente, apenas o ficheiro de digestão do nível de topo é assinado criptograficamente para assegurar a integridade dos dados. 10.3.6. Password keyring     On GNOME system, the GUI tool seahorse(1) manages passwords and stores them securely in the keyring ~/.local/share/keyrings/*.     secret-tool(1) can store password to the keyring from the command line.     Let's store passphrase used for LUKS/dm-crypt encrypted disk image     $ secret-tool store --label='LUKS passphrase for disk.img' LUKS my_disk.img Password: ********     This stored password can be retrieved and fed to other programs, e.g., cryptsetup(8). $ secret-tool lookup LUKS my_disk.img | \     cryptsetup open disk.img disk_img --type luks --keyring - $ sudo mount /dev/mapper/disk_img /mnt Dica     Whenever you need to provide password in a script, use secret-tool and avoid directly hardcoding the passphrase in it. 10.4. Ferramentas de fusão de código fonte     Existem muitas ferramentas de fusão para código fonte. Os seguinte comandos chamaram a minha atenção. Tabela 10.10. Lista de ferramentas de fusão de código fonte +---------------------------------------------------------------+ | pacote |popcon|tamanho| comando | descrição | |----------+------+-------+-----------+-------------------------| |patch |V:97, |248 |patch(1) |aplica ficheiro diff a um| | |I:700 | | |original | |----------+------+-------+-----------+-------------------------| |vim |V:95, |3743 |vimdiff(1) |compara dois ficheiros | | |I:369 | | |lado a lado no vim | |----------+------+-------+-----------+-------------------------| | |V:0, | | |ferramenta de fusão de 2 | |imediff |I:0 |200 |imediff(1) |ou 3 vias interactiva de | | | | | |écran completo | |----------+------+-------+-----------+-------------------------| |meld |V:7, |3536 |meld(1) |compara e funde ficheiros| | |I:30 | | |(GTK) | |----------+------+-------+-----------+-------------------------| |wiggle |V:0, |175 |wiggle(1) |aplica patches rejeitadas| | |I:0 | | | | |----------+------+-------+-----------+-------------------------| |diffutils |V:862,|1735 |diff(1) |compara ficheiros linha a| | |I:996 | | |linha | |----------+------+-------+-----------+-------------------------| |diffutils |V:862,|1735 |diff3(1) |compara e junta três | | |I:996 | | |ficheiros linha a linha | |----------+------+-------+-----------+-------------------------| |quilt |V:2, |871 |quilt(1) |gere séries de patches | | |I:22 | | | | |----------+------+-------+-----------+-------------------------| | |V:7, | | |mostra diferenças de | |wdiff |I:51 |648 |wdiff(1) |palavras entre ficheiros | | | | | |de texto | |----------+------+-------+-----------+-------------------------| | |V:13, | | |produz um histograma de | |diffstat |I:121 |74 |diffstat(1)|alterações feitas pelo | | | | | |diff | |----------+------+-------+-----------+-------------------------| | |V:16, | |combinediff|cria uma patch cumulativa| |patchutils|I:119 |232 |(1) |de duas patches | | | | | |incrementais | |----------+------+-------+-----------+-------------------------| |patchutils|V:16, |232 |dehtmldiff |extrai um diff de uma | | |I:119 | |(1) |página HTML | |----------+------+-------+-----------+-------------------------| |patchutils|V:16, |232 |filterdiff |extrai ou executa diffs | | |I:119 | |(1) |de um ficheiro diff | |----------+------+-------+-----------+-------------------------| | |V:16, | |fixcvsdiff |corrige ficheiros diff |     |patchutils|I:119 |232 |(1) |criados pelo CVS que o | | | | | |patch(1) interpreta mal | |----------+------+-------+-----------+-------------------------| |patchutils|V:16, |232 |flipdiff(1)|troca a ordem de duas | | |I:119 | | |patches | |----------+------+-------+-----------+-------------------------| | | | | |mostra que ficheiros são | |patchutils|V:16, |232 |grepdiff(1)|modificados por uma patch| | |I:119 | | |que corresponde a um | | | | | |regex | |----------+------+-------+-----------+-------------------------| | |V:16, | |interdiff |mostra as diferenças | |patchutils|I:119 |232 |(1) |entre dois ficheiros diff| | | | | |unificados | |----------+------+-------+-----------+-------------------------| | |V:16, | | |mostra quais ficheiros | |patchutils|I:119 |232 |lsdiff(1) |são modificados por uma | | | | | |patch | |----------+------+-------+-----------+-------------------------| | |V:16, | |recountdiff|recalcula contagens e | |patchutils|I:119 |232 |(1) |offsets em diffs de | | | | | |contexto unificado | |----------+------+-------+-----------+-------------------------| | |V:16, | | |corrige os offsets e as | |patchutils|I:119 |232 |rediff(1) |contagens de um diff | | | | | |editado manualmente | |----------+------+-------+-----------+-------------------------| |patchutils|V:16, |232 |splitdiff |separa patches | | |I:119 | |(1) |incrementais | |----------+------+-------+-----------+-------------------------| | | | | |desembaralha patches | |patchutils|V:16, |232 |unwrapdiff |cujas linhas foram | | |I:119 | |(1) |alteradas para arrumação | | | | | |de palavras | |----------+------+-------+-----------+-------------------------| | |V:0, | | |mostra diferenças e funde| |dirdiff |I:1 |167 |dirdiff(1) |alterações entre árvores | | | | | |de diretórios | |----------+------+-------+-----------+-------------------------| | |V:0, | | |compara dois ficheiros | |docdiff |I:0 |553 |docdiff(1) |palavra a palavra / | | | | | |caractere a caractere | |----------+------+-------+-----------+-------------------------| |makepatch |V:0, |100 |makepatch |gera ficheiros de patch | | |I:0 | |(1) |extensos | |----------+------+-------+-----------+-------------------------| |makepatch |V:0, |100 |applypatch |aplica ficheiros de patch| | |I:0 | |(1) |extensos | +---------------------------------------------------------------+ 10.4.1. Extrair as diferenças para ficheiros fonte Os seguintes procedimentos extraem as diferenças entre dois     ficheiros de fonte e cria os ficheiros diff unificados "file.patch0" ou "file.patch1" a depender da localização do ficheiro.     $ diff -u file.old file.new > file.patch0 $ diff -u old/file new/file > file.patch1 10.4.2. Fundir atualizações para ficheiros de fonte O ficheiro diff (alternativamente chamado ficheiro patch) é usado     para enviar uma atualização de um programa. A parte receptora aplica esta atualização a outro ficheiro com o seguinte.     $ patch -p0 file < file.patch0 $ patch -p1 file < file.patch1 10.4.3. Interactive merge     If you have two versions of a source code, you can perform 2-way merge interactively using imediff(1) by the following.     $ imediff -o file.merged file.old file.new     If you have three versions of a source code, you can perform 3-way merge interactively using imediff(1) by the following.     $ imediff -o file.merged file.yours file.base file.theirs 10.5. Git Git is the tool of choice these days for the version control     system (VCS) since Git can do everything for both local and remote source code management. O Debian disponibiliza serviços Git livres via Serviço Debian     Salsa.. A sua documentação encontra-se em https://wiki.debian.org /Salsa .     Here are some Git related packages. Tabela 10.11. Lista de pacotes e comandos relacionados com o git +-----------------------------------------------------------------+ | pacote |popcon|tamanho| comando | descrição | |----------------+------+-------+----------------+----------------| | | | | |Git, o sistema | | | | | |de controlo de | |git |V:351,|46734 |git(7) |revisão | | |I:549 | | |distribuído, | | | | | |rápido e | | | | | |escalável | |----------------+------+-------+----------------+----------------| | | | | |explorador GUI | |gitk |V:5, |1838 |gitk(1) |de repositórios | | |I:33 | | |Git com | | | | | |histórico | |----------------+------+-------+----------------+----------------| | |V:1, | | |GUI para Git | |git-gui |I:18 |2429 |git-gui(1) |(Nenhum | | | | | |histórico) | |----------------+------+-------+----------------+----------------| | | | | |envia uma | | |V:0, | |git-send-email |colecção de | |git-email |I:10 |1087 |(1) |patches como | | | | | |email a partir | | | | | |do Git |     |----------------+------+-------+----------------+----------------| | |V:1, | |git-buildpackage|automatiza o | |git-buildpackage|I:9 |1988 |(1) |empacotamento | | | | | |Debian com o Git| |----------------+------+-------+----------------+----------------| | | | | |git | |dgit |V:0, |473 |dgit(1) |interoperability| | |I:1 | | |with the Debian | | | | | |archive | |----------------+------+-------+----------------+----------------| | |V:0, | | |interactive git | |imediff |I:0 |200 |git-ime(1) |commit split | | | | | |helper tool | |----------------+------+-------+----------------+----------------| |stgit |V:0, |601 |stg(1) |quilt no topo do| | |I:0 | | |git (Python) | |----------------+------+-------+----------------+----------------| | | | | |documentação | |git-doc |I:12 |13208 |N/D |oficial para o | | | | | |Git | |----------------+------+-------+----------------+----------------| | | | | |"Magia do Git", | |gitmagic |I:0 |721 |N/D |guia fácil de | | | | | |compreender para| | | | | |o Git | +-----------------------------------------------------------------+ 10.5.1. Configuração do cliente Git Pode desejar definir várias configurações globais em "~     /.gitconfig" como o seu nome e endereço de mail usado pelo Git com o seguinte.     $ git config --global user.name "Name Surname" $ git config --global user.email yourname@example.com     You may also customize the Git default behavior by the following. $ git config --global init.defaultBranch main     $ git config --global pull.rebase true $ git config --global push.default current Se está muito acostumado aos comandos do CVS ou Subversion, pode     desejar definir nomes alternativos a vários comandos com o seguinte.     $ git config --global alias.ci "commit -a" $ git config --global alias.co checkout     Pode verificar a sua configuração global com o seguinte.     $ git config --global --list 10.5.2. Basic Git commands     Git operation involves several data. * The working tree which holds user facing files and to which you make changes. + The changes to be recorded must be explicitly selected and staged to the index. This is git add and git rm commands. * The index which holds staged files. + Staged files will be committed to the local repository upon the subsequent request. This is git commit command. * The local repository which holds committed files. + Git records the linked history of the committed data and organizes them as branches in the repository. + The local repository can send data to the remote repository by git push command.     + The local repository can receive data from the remote repository by git fetch and git pull commands. o The git pull command performs git merge or git rebase command after git fetch command. o Here, git merge combines two separate branches of history at the end to a point. (This is default of git pull without customization and may be good for upstream people who publish branch to many people.) o Here, git rebase creates one single branch of sequential history of the remote branch one followed by the local branch one. (This is pull.rebase true customization case and may be good for rest of us.) * The remote repository which holds committed files. + The communication to the remote repository uses secure communication protocols such as SSH or HTTPS. The working tree is files outside of the .git/ directory. Files     inside of the .git/ directory hold the index, the local repository data, and some git configuration text files.     Here is an overview of main Git commands. Tabela 10.12. Main Git commands +---------------------------------------------------------------+ | Git command | função | |---------------+-----------------------------------------------| |git init |cria o repositório (local) | |---------------+-----------------------------------------------| |git clone URL |clone the remote repository to a local | | |repository with the working tree | |---------------+-----------------------------------------------| |git pull origin|update the local main branch by the remote | |main |repository origin | |---------------+-----------------------------------------------| |git add . |add file(s) in the working tree to the index | | |for pre-existing files in index only | |---------------+-----------------------------------------------| |git add -A . |add file(s) in the working tree to the index | | |for all files including removals | |---------------+-----------------------------------------------| |git rm filename|remove file(s) from the working tree and the | | |index | |---------------+-----------------------------------------------|     |git commit |commit staged changes in the index to the local| | |repository | |---------------+-----------------------------------------------| | |add all changes in the working tree to the | |git commit -a |index and commit them to the local repository | | |(add + commit) | |---------------+-----------------------------------------------| |git push -u |update the remote repository origin by the | |origin |local branch_name branch (initial invocation) | |branch_name | | |---------------+-----------------------------------------------| |git push origin|update the remote repository origin by the | |branch_name |local branch_name branch (subsequent | | |invocation) | |---------------+-----------------------------------------------| |git diff |show difference between treeish1 commit and | |treeish1 |treeish2 commit | |treeish2 | | |---------------+-----------------------------------------------| |gitk |GUI display of VCS repository branch history | | |tree | +---------------------------------------------------------------+ 10.5.3. Git tips     Here are some Git tips. Tabela 10.13. Git tips +---------------------------------------------------------------+ | Git command line | função | |------------------------+--------------------------------------| | |see complete Git history and operate | | |on them such as resetting HEAD to | |gitk --all |another commit, cheery-picking | | |patches, creating tags and branches | | |... | |------------------------+--------------------------------------| |git stash |get the clean working tree without | | |loosing data | |------------------------+--------------------------------------| |git remote -v |check settings for remote | |------------------------+--------------------------------------| |git branch -vv |check settings for branch | |------------------------+--------------------------------------| |git status |show working tree status | |------------------------+--------------------------------------| |git config -l |list git settings | |------------------------+--------------------------------------| |git reset --hard HEAD; |revert all working tree changes and | |git clean -x -d -f |clean them up completely | |------------------------+--------------------------------------| |git rm --cached filename|revert staged index changed by git add| | |filename | |------------------------+--------------------------------------| | |get reference log (useful for | |git reflog |recovering commits from the removed | | |branch) | |------------------------+--------------------------------------| |git branch |create a new branch from reflog | |new_branch_name HEAD@{6}|information | |------------------------+--------------------------------------| |git remote add |add a new_remote remote repository | |new_remote URL |pointed by URL | |------------------------+--------------------------------------| |git remote rename origin|rename the remote repository name from| |upstream |origin to upstream | |------------------------+--------------------------------------| |git branch -u upstream/ |set the remote tracking to the remote | |branch_name |repository upstream and its branch | | |name branch_name. | |------------------------+--------------------------------------| |git remote set-url | | |origin https://foo/ |change URL of origin | |bar.git | | |------------------------+--------------------------------------|     |git remote set-url |disable push to upstream (Edit .git/ | |--push upstream DISABLED|config to re-enable) | |------------------------+--------------------------------------| |git remote update |fetch updates of all remote branches | |upstream |in the upstream repository | |------------------------+--------------------------------------| |git fetch upstream |create a local (possibly orphan) | |foo:upstream-foo |upstream-foo branch as a copy of foo | | |branch in the upstream repository | |------------------------+--------------------------------------| |git checkout -b |make a new topic_branch and push it to| |topic_branch ; git push |origin | |-u topic_branch origin | | |------------------------+--------------------------------------| |git branch -m oldname |rename local branch name | |newname | | |------------------------+--------------------------------------| |git push -d origin |remove remote branch (new method) | |branch_to_be_removed | | |------------------------+--------------------------------------| |git push origin |remove remote branch (old method) | |:branch_to_be_removed | | |------------------------+--------------------------------------| |git checkout --orphan |create a new unconnected branch | |unconnected | | |------------------------+--------------------------------------| |git rebase -i origin/ |reorder/drop/squish commits from | |main |origin/main to clean branch history | |------------------------+--------------------------------------| |git reset HEAD^; git |squash last 2 commits into one | |commit --amend | | |------------------------+--------------------------------------| |git checkout |squash entire topic_branch into a | |topic_branch ; git merge|commit | |--squash topic_branch | | |------------------------+--------------------------------------| |git fetch --unshallow | | |--update-head-ok origin |convert a shallow clone to the full | |'+refs/heads/*:refs/ |clone of all branches | |heads/*' | | |------------------------+--------------------------------------| | |split the last commit into a series of| |git ime |file-by-file smaller commits etc. | | |(imediff package required) | |------------------------+--------------------------------------| | |repack the local repository into | |git repack -a -d; git |single pack (this may limit chance of | |prune |lost data recovery from erased branch | | |etc.) | +---------------------------------------------------------------+ Atenção     Não use a string de etiqueta (tag) com espaços nela, mesmo que algumas ferramentas como o gitk(1) o permitam. Pode estrangular outros comandos do git. Cuidado If a local branch which has been pushed to remote repository is     rebased or squashed, pushing this branch has risks and requires --force option. This is usually not an acceptable for main branch but may be acceptable for a topic branch before merging to main branch. Cuidado     Invocar um sub-comando git directamente como "git-xyz" a partir da linha de comandos foi descontinuado desde o inicio de 2006. Dica     If there is a executable file git-foo in the path specified by $PATH, entering "git foo" without hyphen to the command line invokes this git-foo. This is a feature of the git command. 10.5.4. Referências do Git     Veja o seguinte. * manual: git(1) (/usr/share/doc/git-doc/git.html) * Manual do Utilizador do Git (/usr/share/doc/git-doc/ user-manual.html) * Um tutorial de introdução ao git (/usr/share/doc/git-doc/ gittutorial.html)     * Um tutorial de introdução ao git: parte dois (/usr/share/doc/ git-doc/gittutorial-2.html) * Everyday GIT With 20 Commands Or So (/usr/share/doc/git-doc/ giteveryday.html) * Magia do Git (/usr/share/doc/gitmagic/html/index.html) 10.5.5. Other version control systems The version control systems (VCS) is sometimes known as the     revision control system (RCS), or the software configuration management (SCM).     Here is a summary of the notable other non-Git VCS on the Debian system. Tabela 10.14. List of other version control system tools +---------------------------------------------------------------+ | pacote |popcon|tamanho|ferramenta| Tipo VCS | comentário | |----------+------+-------+----------+-----------+--------------| |mercurial |V:5, |2019 |Mercurial |distribuído|DVCS em Python| | |I:32 | | | |e algum C | |----------+------+-------+----------+-----------+--------------| | | | | | |DVCS com | | |V:0, | | | |álgebra | |darcs |I:5 |34070 |Darcs |distribuído|inteligente de| | | | | | |patches | | | | | | |(lento) | |----------+------+-------+----------+-----------+--------------| | | | | | |DVCS | | | | | | |influenced by | |bzr |I:8 |28 |GNU Bazaar|distribuído|tla written in| | | | | | |Python | | | | | | |(historic) | |----------+------+-------+----------+-----------+--------------| | |V:0, | | | |DVCS mainly by| |tla |I:1 |1022 |GNU arch |distribuído|Tom Lord | | | | | | |(historic) | |----------+------+-------+----------+-----------+--------------| | | | | | |"CVS done |     | |V:13, | | | |right", newer | |subversion|I:72 |4837 |Subversion|remoto |standard | | | | | | |remote VCS | | | | | | |(historic) | |----------+------+-------+----------+-----------+--------------| | | | | | |previous | |cvs |V:4, |4753 |CVS |remoto |standard | | |I:30 | | | |remote VCS | | | | | | |(historic) | |----------+------+-------+----------+-----------+--------------| | | | | | |ecrã GUI de | | | | | | |árvores de | |tkcvs |V:0, |1498 |CVS, … |remoto |repositório | | |I:1 | | | |VCS (CVS, | | | | | | |Subversion, | | | | | | |RCS) | |----------+------+-------+----------+-----------+--------------| | |V:2, | | | |"Unix SCCS | |rcs |I:13 |564 |RCS |local |done right" | | | | | | |(historic) | |----------+------+-------+----------+-----------+--------------| | |V:0, | | | |clone of the | |cssc |I:1 |2044 |CSSC |local |Unix SCCS | | | | | | |(historic) | +---------------------------------------------------------------+ --------------------------------------------------------------------- ^[4] A write-once media such as CD/DVD-R can prevent overwrite accidents. (See Secção 9.8, “Os dados binários” for how to write     to the storage media from the shell commandline. GNOME desktop GUI environment gives you easy access via menu: "Places→CD/DVD Creator".)     ^[5] Some of these data can not be regenerated by entering the same input string to the system.     ^[6] If you use "~/.vimrc" instead of "~/.vim/vimrc", please substitute accordingly. Capítulo 11. Conversão de dados     São descritas ferramentas e dicas para converter formatos de dados no sistema Debian.     As ferramentas baseadas em standards são muitos boas mas o suporte para formatos proprietários de dados é limitado. 11.1. Ferramentas de conversão de dados em texto     Os seguintes pacotes para a conversão de dados de texto saltaram-me à vista. Tabela 11.1. Lista de ferramentas de conversão de dados em texto +---------------------------------------------------------------+ | pacote |popcon|tamanho| palavra | descrição | | | | | chave | | |--------+------+-------+-----------+---------------------------| | |V:917,| |conjunto e |converter codificação de | |libc6 |I:999 |12988 |caracteres |texto entre locales por | | | | |(charset) |iconv(1) (fundamental) | |--------+------+-------+-----------+---------------------------| | | | | |conversor de codificação de| | |V:2, | | |texto entre locales | |recode |I:18 |602 |charset+eol|(versátil, com mais nomes | | | | | |alternativos (alias) e | | | | | |funcionalidades) | |--------+------+-------+-----------+---------------------------| | |V:1, | |conjunto e |conversor de codificação de| |konwert |I:48 |134 |caracteres |texto entre locales | | | | |(charset) |(imaginativo) | |--------+------+-------+-----------+---------------------------|     | |V:0, | |conjunto e |tradutor de conjunto de | |nkf |I:9 |360 |caracteres |caracteres para Japonês | | | | |(charset) | | |--------+------+-------+-----------+---------------------------| | |V:0, | |conjunto e |tradutor de conjunto de | |tcs |I:0 |518 |caracteres |caracteres | | | | |(charset) | | |--------+------+-------+-----------+---------------------------| | |V:0, | |conjunto e |substitui letras acentuadas| |unaccent|I:0 |35 |caracteres |pelo seu equivalente não | | | | |(charset) |acentuado | |--------+------+-------+-----------+---------------------------| | |V:1, | | |conversor de formato de | |tofrodos|I:17 |51 |eol |texto entre DOS e Unix: de | | | | | |dos(1) e para dos(1) | |--------+------+-------+-----------+---------------------------| | | | | |conversor de formato de | |macutils|V:0, |312 |eol |texto entre Macintosh e | | |I:0 | | |Unix: de mac(1) e para mac | | | | | |(1) | +---------------------------------------------------------------+ 11.1.1. Converter um ficheiro de texto com o iconv Dica     iconv(1) é disponibilizado como parte do pacote libc6 e está sempre disponível em praticamente todos os sistemas tipo Unix para converter a codificação de caracteres.     Pode converter a codificação de um ficheiro de texto com o iconv (1) com o seguinte.     $ iconv -f encoding1 -t encoding2 input.txt >output.txt Os valores de codificação são sensíveis a maiúsculas/minúsculas e     ignoram "-" e "_" para correspondência. As codificações suportadas podem ser verificadas pelo comando "iconv -l". Tabela 11.2. Lista de valores de codificação e a utilização deles +---------------------------------------------------------------+ | valor de | utilização | |codificação| | |-----------+---------------------------------------------------| |ASCII |American Standard Code for Information Interchange,| | |código de 7 bits sem caracteres acentuados | |-----------+---------------------------------------------------| |UTF-8 |standard multilingue atual para todos os sistemas | | |operativos modernos | |-----------+---------------------------------------------------| |ISO-8859-1 |antigo standard para linguagens da Europa | | |ocidental, ASCII + caracteres acentuados | |-----------+---------------------------------------------------| |ISO-8859-2 |antigo standard para linguagens da Europa oriental,| | |ASCII + caracteres acentuados | |-----------+---------------------------------------------------| |ISO-8859-15|antigo standard para linguagens da Europa | | |ocidental, o ISO-8859-1 com o símbolo do euro | |-----------+---------------------------------------------------| | |página de código 850, caracteres DOS da Microsoft | |CP850 |com gráficos para linguagens da Europa ocidental, | | |variante ISO-8859-1 | |-----------+---------------------------------------------------| |CP932 |página de código 932, variante Shift-JIS do estilo | | |Microsoft Windows para Japonês | |-----------+---------------------------------------------------| | |página de código 936, variantes GB2312, GBK ou |     |CP936 |GB18030 do estilo Microsoft Windows para Chinês | | |Simplificado | |-----------+---------------------------------------------------| | |página de código 949, variante EUC-KR ou or Unified| |CP949 |Hangul Code de estilo Microsoft Windows para | | |Coreano | |-----------+---------------------------------------------------| |CP950 |página de código 950, variante Big5 de estilo | | |Microsoft Windows para Chinês Tradicional | |-----------+---------------------------------------------------| |CP1251 |página de código 1251, codificação estilo Microsoft| | |Windows para o alfabeto Cirílico | |-----------+---------------------------------------------------| | |página de código 1252, variante ISO-8859-15 de | |CP1252 |estilo Microsoft Windows para linguagens de Europeu| | |ocidental | |-----------+---------------------------------------------------| |KOI8-R |antigo standard Russo de UNIX para o alfabeto | | |Cirílico | |-----------+---------------------------------------------------| |ISO-2022-JP|codificação standard para email Japonês que usar | | |apenas códigos de 7 bits | |-----------+---------------------------------------------------| |eucJP |antigo standard Unix de Japonês de código de 8 bits| | |e completamente diferente do Shift-JIS | |-----------+---------------------------------------------------| |Shift-JIS |JIS X 0208 Appendix 1 standard para Japonês (veja | | |CP932) | +---------------------------------------------------------------+ Nota     Some encodings are only supported for the data conversion and are not used as locale values (Secção 8.1, “O locale”). Para os conjuntos de caracteres que cabem num byte único como os     conjuntos de caracteres ASCII e ISO-8859, a codificação de caracteres significa quase o mesmo que o conjunto de caracteres. Para conjuntos de caracteres com muitos caracteres como o JIS X 0213 para Japonês ou Universal Character Set (UCS, Unicode,     ISO-10646-1) para praticamente todas as linguagens, existem muitos esquemas de codificação para os pôr na sequência dos dados do byte. * EUC e ISO/IEC 2022 (também conhecido como JIS X 0202) para     Japonês * UTF-8, UTF-16/UCS-2 e UTF-32/UCS-4 para Unicode     Para estes, existem diferenciações claras entre o conjunto de caracteres e a codificação de caracteres.     A página de código é usada como o sinónimo para as tabelas de codificação de caracteres para alguns específicos de marcas. Nota Por favor note que a maioria dos sistemas de codificação partilham o mesmo código com o ASCII para caracteres de 7 bits.     Mas há algumas exceções. Se está a converter programas C antigos Japoneses e dados de URLs a partir do casualmente chamado formato de codificação shift-JIS no formato UTF-8, use "CP932" como o nome de codificação em vez de "shift-JIS" para obter os resultados esperados: 0x5C → "\" e 0x7E → "~". Caso contrário, estes são convertidos para caracteres errados. Dica     O recode(1) também pode ser usado e oferece mais do que as funcionalidades combinadas do iconv(1), fromdos(1), todos(1), frommac(1) e tomac(1). Para mais, veja "info recode". 11.1.2. Verifica ficheiro se é UTF-8 com o iconv     Pode verificar se um ficheiro de texto está codificado em UTF-8 com o iconv(1) com o seguinte.     $ iconv -f utf8 -t utf8 input.txt >/dev/null || echo "non-UTF-8 found" Dica     Use a opção "--verbose" no exemplo em cima para encontrar o primeiro caractere não-UTF-8. 11.1.3. Converter os nomes dos ficheiros com o iconv Aqui está um script de exemplo para converter a codificação dos     nomes de ficheiros daqueles criados sob sistemas operativos antigos para os modernos de UTF-8 num único diretório. #!/bin/sh ENCDN=iso-8859-1     for x in *; do mv "$x" "$(echo "$x" | iconv -f $ENCDN -t utf-8)" done A variável "$ENCDN" especifica a codificação original usada para     nomes de ficheiros sob SOs mais antigos em Tabela 11.2, “Lista de valores de codificação e a utilização deles”. Para um caso mais complicado, por favor monte um sistema de ficheiros (ex. uma partição de uma unidade de disco) que contenha     tais nomes de ficheiros com a codificação apropriada como opção do mount(8) (veja Secção 8.1.3, “Codificação de nomes de ficheiros”) e copie o conteúdo dele inteiro para outro sistema de ficheiros montado como UTF-8 com o comando "cp -a". 11.1.4. conversão EOL     O formato de ficheiro de texto, especificamente o código de fim de linha (EOL), é dependente da plataforma. Tabela 11.3. Lista de estilos EOL para diferentes plataformas +----------------------------------------------------------+ | plataforma |código EOL|controle|decimal|hexadecimal| |------------------+----------+--------+-------+-----------|     |Debian (unix) |LF |^J |10 |0A | |------------------+----------+--------+-------+-----------| |MSDOS e Windows |CR-LF |^M^J |13 10 |0D 0A | |------------------+----------+--------+-------+-----------| |Macintosh da Apple|CR |^M |13 |0D | +----------------------------------------------------------+ Os programas de conversão de formato EOL, fromdos(1), todos(1),     frommac(1), e tomac(1), são muito úteis. O recode(1) também é útil. Nota     Alguns dados no sistema Debian, como os dados da página wiki para o pacote python-moinmoin, usam o estilo MSDOS (CR-LF) como o código de EOL. Então a regra em cima é apenas uma regra geral. Nota     A maioria dos editores (ex. vim, emacs, gedit, …) podem lidar com ficheiros em estilo EOL de MSDOS transparentemente. Dica O uso de "sed -e '/\r$/!s/$/\r/'" em vez de todos(1) é melhor     quando pretende unificar o estilo de EOL para o estilo do MSDOS a partir da mistura de estilos de MSDOS e Unix. (ex. após fundir 2 ficheiros de estilo MSDOS com o diff3(1).) Isto porque o todos adiciona CR a todas as linhas. 11.1.5. Conversão de TAB     Existem alguns programas populares especializados para converter os códigos de tab. Tabela 11.4. Lista de comandos de conversão de TAB dos pacotes bsdmainutils e coreutils +------------------------------------------------------+ | função |bsdmainutils|coreutils|     |-------------------------------+------------+---------| |expande tab para espaços |"col -x" |expand | |-------------------------------+------------+---------| |contrai tab a partir de espaços|"col -h" |unexpand | +------------------------------------------------------+     indent(1) do pacote indent reformata completamente os espaços em branco no programa C. Os programas editores como o vim e o emacs também podem ser usados para conversão de TAB. Por exemplo com o vim, pode     expandir a TAB com a sequência de comandos ":set expandtab" e ":%retab". Pode reverter isto com a sequência de comandos ":set noexpandtab" e ":%retab!". 11.1.6. Editores com auto-conversão Os editores modernos inteligentes como o programa vim são bastante inteligentes e lidam bem com quaisquer sistemas de     codificação e quaisquer formatos de ficheiro. Deve usar estes editores sob o locale UTF-8 numa consola com capacidades de UTF-8 para melhor compatibilidade. Um antigo ficheiro de texto Unix em Europeu ocidental,     "u-file.txt", armazenado com a codificação latin1 (iso-8859-1) pode ser editado com o vim com o seguinte.     $ vim u-file.txt Isto é possível porque o mecanismo de auto detecção da     codificação do ficheiro no vim assume primeiro a codificação UTF-8 e, se falhar, assume que é latin1. Um antigo ficheiro de texto Unix em Polaco, "pu-file.txt",     armazenado com a codificação latin2 (iso-8859-2) pode ser editado com o vim com o seguinte.     $ vim '+e ++enc=latin2 pu-file.txt' Um antigo ficheiro de texto unix em Japonês, "ju-file.txt",     armazenado com a codificação eucJP pode ser editado com o vim com o seguinte.     $ vim '+e ++enc=eucJP ju-file.txt' Um antigo ficheiro de texto do MS Windows em Japonês,     "jw-file.txt", armazenado na chamada codificação shift-JIS (mais precisamente: CP932) pode ser editado com o vim com o seguinte.     $ vim '+e ++enc=CP932 ++ff=dos jw-file.txt' Quando um ficheiro é aberto com as opções "++enc" e "++ff", o ":w" na linha de comandos do Vim guarda-o no formato original e     sobrescreve o ficheiro original. Também pode especificar o formato de gravação e o nome do ficheiro na linha de comandos do Vim, ex., ":w ++enc=utf8 new.txt". Por favor consulte o mbyte.txt "suporte a texto multi-byte" na     ajuda on-line do vim e Tabela 11.2, “Lista de valores de codificação e a utilização deles” para os valores de locale usados com "++enc".     A família de programas emacs pode executar as funções equivalentes. 11.1.7. Extracção de texto simples O seguinte lê uma página web para um ficheiro de texto. Isto é     muito útil quando se copia as configurações da Web ou se aplica ferramentas de texto básicas do Unix como o grep(1) numa página web.     $ w3m -dump https://www.remote-site.com/help-info.html >textfile     De modo semelhante, pode extrair dados de texto simples a partir de outros formatos a usar o seguinte. Tabela 11.5. Lista de ferramentas para extracção de dados de texto simples +---------------------------------------------------------------+ | pacote |popcon|tamanho| palavra chave | função | |---------+------+-------+----------------+---------------------| | |V:15, | | |Conversor de HTML | |w3m |I:187 |2837 |html→texto |para texto com o | | | | | |comando "w3m -dump" | |---------+------+-------+----------------+---------------------| | |V:3, | | |Conversor de HTML | |html2text|I:53 |243 |html→texto |para texto avançado | | | | | |(ISO 8859-1) | |---------+------+-------+----------------+---------------------| | |V:25, | | |Conversor de HTML | |lynx |I:344 |1948 |html→texto |para texto com o | | | | | |comando "lynx -dump" | |---------+------+-------+----------------+---------------------| | | | | |Conversor de HTML | |elinks |V:3, |1654 |html→texto |para texto com o | | |I:20 | | |comando "elinks | | | | | |-dump" | |---------+------+-------+----------------+---------------------| | |V:3, | | |Conversor de HTML |     |links |I:28 |2314 |html→texto |para texto com o | | | | | |comando "links -dump"| |---------+------+-------+----------------+---------------------| | | | | |Conversor de HTML | |links2 |V:1, |5492 |html→texto |para texto com o | | |I:12 | | |comando "links2 | | | | | |-dump" | |---------+------+-------+----------------+---------------------| | |V:14, | | |converte ficheiros do| |catdoc |I:155 |686 |MSWord→texto,TeX|MSWord para texto | | | | | |simples ou TeX | |---------+------+-------+----------------+---------------------| | |V:1, | | |converte ficheiros do| |antiword |I:7 |589 |MSWord→texto,ps |MSWord para texto | | | | | |simples ou ps | |---------+------+-------+----------------+---------------------| | |V:0, | | |remove as etiquetas | |unhtml |I:0 |40 |html→texto |de marcas de um | | | | | |ficheiro HTML | |---------+------+-------+----------------+---------------------| | |V:2, | | |conversor de texto do| |odt2txt |I:40 |60 |odt→texto |OpenDocument para | | | | | |texto | +---------------------------------------------------------------+ 11.1.8. Destacar e formatar dados de texto simples     Pode destacar e formatar dados de texto simples com o seguinte. Tabela 11.6. Lista de ferramentas para destacar dados em texto simples +---------------------------------------------------------------+ | pacote |popcon|tamanho|palavra chave | descrição | |----------------+------+-------+--------------+----------------| | | | | |MACRO do Vim | | | | | |para converter | | |V:18, | | |código fonte em | |vim-runtime |I:395 |36525 |destaque |HTML com | | | | | |":source | | | | | |$VIMRUNTIME/ | | | | | |syntax/html.vim"| |----------------+------+-------+--------------+----------------| | | | | |conversor de | |cxref |V:0, |1190 |c→html |programa C para | | |I:0 | | |latex e HTML | | | | | |(linguagem C) | |----------------+------+-------+--------------+----------------| | | | | |converte muitos | |src2tex |V:0, |622 |destaque |códigos fonte | | |I:0 | | |para TeX | | | | | |(linguagem C) | |----------------+------+-------+--------------+----------------| | | | | |converte muitos | | | | | |códigos fonte | | | | | |para HTML, | | | | | |XHTML, LaTeX, | |source-highlight|V:0, |2114 |destaque |Texinfo, | | |I:5 | | |sequências de | | | | | |escape do cores | | | | | |ANSI e ficheiros| | | | | |do DocBook com | | | | | |destaques (C++) | |----------------+------+-------+--------------+----------------| | | | | |converte muitos | | | | | |códigos fonte | | | | | |para HTML, | |highlight |V:0, |1371 |destaque |XHTML, RTF, | | |I:5 | | |LaTeX, TeX ou |     | | | | |ficheiros XSL-FO| | | | | |com destaques | | | | | |(C++) | |----------------+------+-------+--------------+----------------| | |V:0, | | |colorizador | |grc |I:5 |208 |texto→cor |genérico para | | | | | |tudo (Python) | |----------------+------+-------+--------------+----------------| | |V:9, | | |conversor geral | |pandoc |I:45 |194495 |texto→qualquer|de markup | | | | | |(Haskell) | |----------------+------+-------+--------------+----------------| | | | | |Formatador de | | | | | |documento de | |python3-docutils|V:14, |1804 |texto→qualquer|Texto | | |I:51 | | |Re-Estruturado | | | | | |para XML | | | | | |(Python) | |----------------+------+-------+--------------+----------------| | | | | |Markdown text | |markdown |V:0, |58 |texto→html |document | | |I:9 | | |formatter to (X)| | | | | |HTML (Perl) | |----------------+------+-------+--------------+----------------| | | | | |AsciiDoc text | |asciidoctor |V:0, |98 |texto→qualquer|document | | |I:7 | | |formatter to XML| | | | | |/HTML (Ruby) | |----------------+------+-------+--------------+----------------| | | | | |ReStructured | | |V:6, | | |Text based | |python3-sphinx |I:24 |2756 |texto→qualquer|document | | | | | |publication | | | | | |system (Python) | |----------------+------+-------+--------------+----------------| | | | | |Markdown based | |hugo |V:0, |78678 |texto→html |static site | | |I:5 | | |publication | | | | | |system (Go) | +---------------------------------------------------------------+ 11.2. Dados XML     A The Extensible Markup Language (XML) é uma linguagem de marcação para documentos que contêm informação estruturada.     Veja informação de introdução em XML.COM. * "O que é XML?" * "O que é XSLT?"     * "O que é XSL-FO?" * "O que é XLink?" 11.2.1. Dicas básicas para XML O texto em XML parece-se com HTML. Permite-nos gerir múltiplos     formatos de saída de um documento. Um sistema XML fácil é o pacote docbook-xsl, o qual é usado aqui.     Cada ficheiro XML começa com a declaração XML standard como o seguinte.         A sintaxe básica para um elemento XML é marcado como a seguir.     content     O elemento XML com conteúdo vazio é marcado no seguinte formato curto.         O "atributo="valor"" nos exemplos em cima é opcional.     A secção de comentários em XML está marcada como a seguir.     Em vez de adicionar marcações, o XML requer conversão menor ao     conteúdo a usar entidades predefinidas para os seguintes caracteres. Tabela 11.7. Lista de entidades predefinidas para XML +--------------------------------------------------+ |entidade predefinida|caractere a ser convertido em| |--------------------+-----------------------------| |" |" : cotação | |--------------------+-----------------------------|     |' |' : apóstrofo | |--------------------+-----------------------------| |< |< : menor-que | |--------------------+-----------------------------| |> |> : maior-que | |--------------------+-----------------------------| |& |& : ampersand | +--------------------------------------------------+ Cuidado     "<" ou "&" não podem ser usados em atributos ou elementos. Nota     When SGML style user defined entities, e.g. "&some-tag;", are used, the first definition wins over others. The entity definition is expressed in "". Nota Desde que as marcações de XML sejam feitas de modo consistente     com um certo conjunto de nomes de etiquetas (em vez de alguns dados como conteúdo ou valor de atributo), a conversão para outro XML é uma tarefa trivial a usar Extensible Stylesheet Language Transformations (XSLT). 11.2.2. Processamento de XML     Existem muitas ferramentas disponíveis para processar ficheiros XML como o Extensible Stylesheet Language (XSL). Basicamente, após criar um ficheiro XML bem formado, pode     convertê-lo para qualquer formato a usar o Extensible Stylesheet Language Transformations (XSLT). A Extensible Stylesheet Language for Formatting Objects (XSL-FO) é suposto ser a solução para a formatação. O pacote fop é novo no     arquivo main de Debian devido à sua dependência da linguagem de programação Java. Por isso o código LaTeX é normalmente gerado a partir de XML a utilizar XSLT e o sistema LaTeX é utilizado para criar ficheiros imprimíveis tais como DVI, PostScript e PDF. Tabela 11.8. Lista de ferramentas XML +---------------------------------------------------------------+ | pacote |popcon|tamanho|palavra| descrição | | | | | chave | | |-----------+------+-------+-------+----------------------------| | | | | |definição de tipo de | |docbook-xml|I:403 |2134 |xml |documento XML (DTD) para | | | | | |DocBook | |-----------+------+-------+-------+----------------------------| | | | | |folhas de estilo XSL para | |docbook-xsl|V:13, |14851 |xml/ |processar XML do DocBook | | |I:146 | |xslt |para vários formatos de | | | | | |saída com XSLT | |-----------+------+-------+-------+----------------------------| | |V:16, | | |processador de linha de |     |xsltproc |I:79 |162 |xslt |comandos XSLT (XML→ XML, | | | | | |HTML, texto simples, etc.) | |-----------+------+-------+-------+----------------------------| |xmlto |V:1, |130 |xml/ |conversor de | | |I:14 | |xslt |XML-para-qualquer com XSLT | |-----------+------+-------+-------+----------------------------| |fop |V:0, |284 |xml/ |converter ficheiros Docbook | | |I:11 | |xsl-fo |XML para PDF | |-----------+------+-------+-------+----------------------------| | |V:2, | |xml/ |converte ficheiros do | |dblatex |I:10 |4636 |xslt |Docbook para documentos DVI,| | | | | |PostScript, PDF com o XSLT | |-----------+------+-------+-------+----------------------------| |dbtoepub |V:0, |37 |xml/ |conversor de XML DocBook | | |I:0 | |xslt |para .epub | +---------------------------------------------------------------+ Como o XML é um sub-conjunto da Standard Generalized Markup     Language (SGML), pode ser processado pelas ferramentas extensivas disponíveis para SGML, como o Document Style Semantics and Specification Language (DSSSL). Tabela 11.9. Lista de ferramentas DSSSL +---------------------------------------------------------------+ | pacote |popcon|tamanho|palavra| descrição | | | | | chave | | |-------------+------+-------+-------+--------------------------| | |V:1, | | |ISO/IEC 10179:1996 | |openjade |I:26 |1061 |dsssl |processador DSSSL standard| | | | | |(mais recente) | |-------------+------+-------+-------+--------------------------| | | | | |folhas de estilo DSSSL | | |V:0, | |xml/ |para processar XML do | |docbook-dsssl|I:13 |2605 |dsssl |DocBook para vários |     | | | | |formatos de saída com | | | | | |DSSSL | |-------------+------+-------+-------+--------------------------| | | | | |utilitários para ficheiros| | | | | |do DocBook incluindo a | |docbook-utils|V:0, |287 |xml/ |conversão para outros | | |I:9 | |dsssl |formatos (HTML, RTF, PS, | | | | | |man, PDF) com comandos | | | | | |docbook2* com DSSSL | |-------------+------+-------+-------+--------------------------| | |V:0, | |SGML/ |conversor de SGML e XML | |sgml2x |I:0 |90 |dsssl |que usa folhas de estilo | | | | | |DSSSL | +---------------------------------------------------------------+ Dica     O yelp do GNOME por vezes é jeitoso para ler ficheiros XML do DocBook directamente pois ele renderiza directamente no X. 11.2.3. A extracção de dados de XML     Pode extrair dados de HTML ou XML a partir de outros formatos a usar os seguintes. Tabela 11.10. Lista de ferramentas de extracção de dados de XML +---------------------------------------------------------------+ | pacote |popcon|tamanho| palavra chave | descrição | |---------+------+-------+--------------------+-----------------| | | | | |conversor de | |man2html |V:0, |142 |manpage→html |manual (manpage) | | |I:1 | | |para HTML | | | | | |(suporte a CGI) | |---------+------+-------+--------------------+-----------------| | | | | |conversor de | |doclifter|I:0 |472 |troff→xml |troff para | | | | | |DocBook XML | |---------+------+-------+--------------------+-----------------| |texi2html|V:0, |1847 |texi→html |conversor de | | |I:5 | | |Texinfo para HTML| |---------+------+-------+--------------------+-----------------| | |V:1, | | |conversor de info|     |info2www |I:2 |74 |info→html |do GNU para HTML | | | | | |(suporte a CGI) | |---------+------+-------+--------------------+-----------------| | | | | |conversor de | | |V:0, | | |documentos | |wv |I:4 |733 |MSWord→qualquer |Microsoft Word | | | | | |para HTML, LaTeX,| | | | | |etc. | |---------+------+-------+--------------------+-----------------| | |V:0, | | |conversor de | |unrtf |I:3 |148 |rtf→html |documentos de RTF| | | | | |para HTML, etc | |---------+------+-------+--------------------+-----------------| | | | | |Ficheiros do | | |V:0, | | |WordPerfect 5.0 e| |wp2x |I:0 |200 |WordPerfect→qualquer|5.1 para TeX, | | | | | |LaTeX, troff, GML| | | | | |e HTML | +---------------------------------------------------------------+ 11.2.4. The XML data lint Para ficheiros HTML não-XML, pode convertê-los para XHTML o que é     uma instância de XML bem formado. O XHTML pode ser processado por ferramentas de XML.     Syntax of XML files and goodness of URLs found in them may be checked. Tabela 11.11. Lista de ferramentas de impressão bonita de XML +---------------------------------------------------------------+ | pacote |popcon|tamanho| função | descrição | |-------------+------+-------+--------------+-------------------| | | | | |ferramenta de XML | | | | | |de linha de | | | | | |comandos com | |libxml2-utils|V:21, |180 |xml↔html↔xhtml|xmllint(1) | | |I:213 | | |(verificação de | | | | | |sintaxe, | | | | | |reformatação, lint,| | | | | |…) | |-------------+------+-------+--------------+-------------------|     | |V:1, | | |Verificador e | |tidy |I:9 |75 |xml↔html↔xhtml|reformatador de | | | | | |sintaxe HTML | |-------------+------+-------+--------------+-------------------| | |V:0, | | |Verificado de | |weblint-perl |I:1 |32 |lint |sintaxe e estilo | | | | | |mínimo para HTML | |-------------+------+-------+--------------+-------------------| | | | | |verificador de | | |V:0, | | |ligações rápido e | |linklint |I:0 |343 |link check |ferramenta de | | | | | |manutenção de sites| | | | | |web | +---------------------------------------------------------------+     Após o XML apropriado ser gerado, pode usar a tecnologia XSLT para extrair dados baseados no contexto de marcações e etc. 11.3. Formatação de texto O programa troff do Unix desenvolvido originalmente pela AT&T     pode ser usado para formatação de texto simples. É geralmente usado para criar as páginas de manual (manpages). O TeX criado por Donald Knuth é uma ferramenta de formatação de     texto muito poderosa e é o standard de facto. O LaTeX originalmente escrito por Leslie Lamport permite um acesso de alto nível ao poder do TeX. Tabela 11.12. Lista de ferramentas de formatação de texto +---------------------------------------------------------------+ |pacote |popcon|tamanho|palavra| descrição | | | | | chave | | |-------+------+-------+-------+--------------------------------|     | |V:2, | | |sistema TeX para formatação de | |texlive|I:35 |56 |(La)TeX|texto, pre-visualização e | | | | | |impressão | |-------+------+-------+-------+--------------------------------| |groff |V:2, |20720 |troff |O sistema de formato de texto | | |I:36 | | |troff do GNU | +---------------------------------------------------------------+ 11.3.1. formatação de texto roff Tradicionalmente, o roff é o sistema de processamento de texto     principal do Unix. Veja roff(7), groff(7), groff(1), grotty(1), troff(1), groff_mdoc(7), groff_man(7), groff_ms(7), groff_me(7), groff_mm(7) e "info groff".     Pode ler ou imprimir um bom tutorial e referência à macro "-me" em "/usr/share/doc/groff/" ao instalar o pacote groff. Dica     "groff -Tascii -me -" produz resultados em texto simples com código de escape ANSI. Se deseja obter resultados tipo manpage com muitos "^H" e "_", então use "GROFF_NO_SGR=1 groff -Tascii -me -". Dica     Para remover "^H" e "_" de um ficheiro de texto gerado pelo groff, filtre-o com "col -b -x". 11.3.2. TeX/LaTeX A distribuição de software TeX Live oferece um sistema TeX     completo. O meta-pacote texlive disponibiliza uma seleção decente dos pacotes TeX Live que deverão ser suficientes para as tarefas mais comuns.     Existem muitas referências disponíveis para TeX e LaTeX. * O HOWTO do The teTeX: O Guia Local de Linux-teTeX * tex(1) * latex(1) * texdoc(1)     * texdoctk(1) * "The TeXbook", por Donald E. Knuth, (Addison-Wesley) * "LaTeX - A Document Preparation System", por Leslie Lamport, (Addison-Wesley) * "The LaTeX Companion", por Goossens, Mittelbach, Samarin, (Addison-Wesley) Este é o ambiente de formatação de texto mais poderoso. Muitos processadores SGML usam isto como processador de texto em     backend. O Lyx disponibilizado pelo pacote lyx e o GNU TeXmacs disponibilizado pelo pacote texmacs oferecem um bom ambiente de edição OQVEOQT para o LaTeX enquanto muitos usam o Emacs e o Vim como a sua escolha para editor de código fonte.     Existem muitos recursos online disponíveis. * O Guia TEX Live - TEX Live 2007 ("/usr/share/doc/ texlive-doc-base/english/texlive-en/live.html") (pacote texlive-doc-base package)     * Um Guia Simples para o Latex/Lyx * Processamento de Texto a Usar o LaTeX Quando os documentos ficam maiores, por vezes o TeX pode causar     erros. tem de aumentar o tamanho do pool em "/etc/texmf/ texmf.cnf" (ou mais apropriadamente editar o "/etc/texmf/texmf.d/ 95NonPath" e correr update-texmf(8)) para corrigir isto. Nota The TeX source of "The TeXbook" is available at www.ctan.org tex-archive site for texbook.tex. This file contains most of the     required macros. I heard that you can process this document with tex(1) after commenting lines 7 to 10 and adding "\input manmac \ proofmodefalse". It's strongly recommended to buy this book (and all other books from Donald E. Knuth) instead of using the online version but the source is a great example of TeX input! 11.3.3. Impressão bonita de um manual     Consegue uma impressão bonita dum manual em PostScript com um dos seguintes comandos.     $ man -Tps some_manpage | lpr 11.3.4. Criar um manual     Apesar de escrever um manual (manpage) no formato troff simples ser possível, existem alguns programas que ajudam a criá-lo. Tabela 11.13. Lista de pacotes para ajudar a criar o manual (manpage) +---------------------------------------------------------------+ | pacote |popcon|tamanho|palavra chave| descrição | |--------------+------+-------+-------------+-------------------| | |V:0, | | |conversor de | |docbook-to-man|I:8 |191 |SGML→manpage |DocBook SGML para | | | | | |macros roff man | |--------------+------+-------+-------------+-------------------| | |V:0, | | |geração automática |     |help2man |I:7 |542 |texto→manpage|de manual a partir | | | | | |do --help | |--------------+------+-------+-------------+-------------------| | |V:0, | | |conversor de info | |info2man |I:0 |134 |info→manpage |do GNU para POD ou | | | | | |páginas man | |--------------+------+-------+-------------+-------------------| | | | | |converte texto | |txt2man |V:0, |112 |texto→manpage|ASCII simples para | | |I:0 | | |o formato de página| | | | | |man | +---------------------------------------------------------------+ 11.4. Dados imprimíveis Os dados imprimíveis são expressos no formato PostScript no     sistema Debian. O Common Unix Printing System (CUPS) usa o Ghostscript como o programa backend de rasterização dele para as impressoras não-PostScript.     Printable data may also be expressed in the PDF format on the recent Debian system. PDF files can displayed and its form entries may be filled using     GUI viewer tools such as Evince and Okular (see Secção 7.4, “GUI applications”); and modern browsers such as Chromium. PDF files can be edited using some graphics tools such as     LibreOffice, Scribus, and Inkscape (see Secção 11.6, “Ferramentas de dados gráficos”). Dica     You can read a PDF file with GIMP and convert it into PNG format using higher than 300 dpi resolution. This may be used as a background image for LibreOffice to produce a desirable altered printout with minimum efforts. 11.4.1. Ghostscript     O núcleo da manipulação de dados imprimíveis é o interpretador PostScript (PS) Ghostscript o qual gera imagem em rasterização. Tabela 11.14. Lista de interpretadores PostScript Ghostscript +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |----------------+------+-------+-------------------------------| |ghostscript |V:161,|179 |O interpretador de PostScript/ | | |I:583 | |PDF Ghostscript GPL | |----------------+------+-------+-------------------------------| | |V:2, | |Interpretador de PostScript/PDF| |ghostscript-x |I:38 |87 |Ghostscript GPL - suporte a | | | | |ecrã X | |----------------+------+-------+-------------------------------|     | |V:16, | |Biblioteca de renderização de | |libpoppler102 |I:129 |4274 |PDF que é um fork do | | | | |visualizador de PDF xpdf | |----------------+------+-------+-------------------------------| | |V:260,| |Biblioteca de renderização de | |libpoppler-glib8|I:485 |484 |PDF (biblioteca de partilha | | | | |baseada em GLib) | |----------------+------+-------+-------------------------------| | |V:134,| |CMaps para suporte à biblioteca| |poppler-data |I:607 |13086 |de renderização de PDF (para | | | | |CJK: Adobe-*) | +---------------------------------------------------------------+ Dica     "gs -h" pode mostrar a configuração do Ghostscript. 11.4.2. Juntar dois ficheiros PS ou PDF     Pode unir dois ficheiros PostScript (PS) ou Portable Document Format (PDF) a usar o gs(1) do Ghostscript.     $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite -sOutputFile=bla.ps -f foo1.ps foo2.ps $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=bla.pdf -f foo1.pdf foo2.pdf Nota     O PDF, que é um formato de dados imprimíveis amplamente usado em várias plataformas, é essencialmente o formato PS comprimido com algumas funcionalidades e extensões adicionais. Dica     Para a linha de comandos, o psmerge(1) e outros comandos do pacote psutils são úteis para manipular documentos em PostScript. O pdftk(1) do pacote pdftk também é útil para manipular documentos em PDF. 11.4.3. Utilitários de dados imprimíveis     Os seguintes pacotes para utilitários de dados imprimíveis chamaram a minha atenção. Tabela 11.15. Lista de utilitários de dados imprimíveis +---------------------------------------------------------------+ | pacote |popcon|tamanho|palavra chave| descrição | |-------------+------+-------+-------------+--------------------| | | | | |Utilitários de PDF: | |poppler-utils|V:152,|728 |pdf→ps,text,…|pdftops, pdfinfo, | | |I:471 | | |pdfimages, | | | | | |pdftotext, pdffonts | |-------------+------+-------+-------------+--------------------| | | | | |Ferramentas de | |psutils |V:4, |219 |ps→ps |conversão de | | |I:67 | | |documentos | | | | | |PostScript | |-------------+------+-------+-------------+--------------------| | |V:0, | | |criar grandes | |poster |I:3 |57 |ps→ps |posters de páginas | | | | | |PostScript | |-------------+------+-------+-------------+--------------------| | | | | |converter texto | |enscript |V:1, |2130 |text→ps, |ASCII para | | |I:14 | |html, rtf |PostScript, HTML, | | | | | |RTF ou Pretty-Print | |-------------+------+-------+-------------+--------------------| | | | | |Conversor de | |a2ps |V:0, |3979 |text→ps |'Qualquer coisa para| | |I:10 | | |PostScript' e | | | | | |pretty-printer | |-------------+------+-------+-------------+--------------------| | | | | |Ferramenta de | |pdftk |I:37 |28 |pdf→pdf |conversão de | | | | | |documentos PDF: | | | | | |pdftk | |-------------+------+-------+-------------+--------------------| |html2ps |V:0, |261 |html→ps |conversor de HTML | | |I:2 | | |para PostScript | |-------------+------+-------+-------------+--------------------| |gnuhtml2latex|V:0, |27 |html→latex |conversor de html |     | |I:0 | | |para latex | |-------------+------+-------+-------------+--------------------| | | | | |conversor de | | |V:0, | | |documentos LaTeX | |latex2rtf |I:4 |495 |latex→rtf |para RTF que podem | | | | | |ser lidos pelo MS | | | | | |Word | |-------------+------+-------+-------------+--------------------| | | | | |conversor de | |ps2eps |V:2, |95 |ps→eps |PostScript para EPS | | |I:42 | | |(PostScript | | | | | |Encapsulado) | |-------------+------+-------+-------------+--------------------| | | | | |Conversor de texto | |e2ps |V:0, |109 |text→ps |para PostScript com | | |I:0 | | |suporte a | | | | | |codificação Japonesa| |-------------+------+-------+-------------+--------------------| |impose+ |V:0, |118 |ps→ps |Utilitários do | | |I:0 | | |PostScript | |-------------+------+-------+-------------+--------------------| | | | | |impressão bonita de | | | | | |muitos códigos fonte| | |V:0, | | |(C, C++, Java, | |trueprint |I:0 |149 |text→ps |Pascal, Perl, Pike, | | | | | |Sh e Verilog) para | | | | | |PostScript. | | | | | |(linguagem C) | |-------------+------+-------+-------------+--------------------| | | | | |conversor de PDF | |pdf2svg |V:0, |32 |pdf→svg |para formato | | |I:3 | | |Gráficos vectoriais | | | | | |escaláveis | |-------------+------+-------+-------------+--------------------| | |V:0, | | |conversor de PDF | |pdftoipe |I:0 |65 |pdf→ipe |para formato XML de | | | | | |IPE | +---------------------------------------------------------------+ 11.4.4. Imprimir com o CUPS Ambos comandos lp(1) e lpr(1) oferecidos pelo Common Unix     Printing System (CUPS) disponibilizam opções para impressão personalizada dos dados a imprimir.     Pode imprimir 3 cópias coligidas de um ficheiro a usar um dos seguintes comandos.     $ lp -n 3 -o Collate=True filename     $ lpr -#3 -o Collate=True filename Pode personalizar ainda mais as operações da impressora ao usar     opções da impressão como "-o number-up=2", "-o page-set=even", "-o page-set=odd", "-o scaling=200", "-o natural-scaling=200", etc., documentadas em Impressão em Linha de Comandos e Opções. 11.5. A conversão de dados de mail     Os seguintes pacotes para conversão de dados de mail chamaram a minha atenção. Tabela 11.16. Lista de pacotes para ajudar na conversão de dados de mail +---------------------------------------------------------------+ | pacote |popcon|tamanho|palavra| descrição | | | | | chave | | |---------+------+-------+-------+------------------------------| |sharutils|V:2, |1415 |mail |shar(1), unshar(1), uuencode | | |I:36 | | |(1), uudecode(1) | |---------+------+-------+-------+------------------------------| | |V:1, | | |codificação e descodificação | |mpack |I:11 |108 |MIME |de mensagens MIME: mpack(1) e |     | | | | |munpack(1) | |---------+------+-------+-------+------------------------------| | | | | |descompactar anexos MIME do | |tnef |V:0, |110 |ms-tnef|tipo "application/ms-tnef" o | | |I:6 | | |qual é um formato apenas da | | | | | |Microsoft | |---------+------+-------+-------+------------------------------| | | | | |codificador e descodificador | |uudeview |V:0, |105 |mail |dos seguintes formatos: | | |I:3 | | |uuencode, xxencode, BASE64, | | | | | |quoted printable e BinHex | +---------------------------------------------------------------+ Dica     The Internet Message Access Protocol version 4 (IMAP4) server may be used to move mails out from proprietary mail systems if the mail client software can be configured to use IMAP4 server too. 11.5.1. Noções básicas de dados de mail Mail (SMTP) data should be limited to series of 7 bit data. So binary data and 8 bit text data are encoded into 7 bit format     with the Multipurpose Internet Mail Extensions (MIME) and the selection of the charset (see Tabela 11.2, “Lista de valores de codificação e a utilização deles”). O formato de armazenamento de mail standard é mbox de acordo com     RFC2822 (RFC822 atualizado). Veja mbox(5) (disponibilizado pelo pacote mutt). Para as linguagens Europeias, "Content-Transfer-Encoding: quoted-printable" com o junto de caracteres ISO-8859-1 é     geralmente usado para mail porque não existem muitos caracteres de 8 bits. Se o texto Europeu estiver codificado em UTF-8, é provável que seja usado o "Content-Transfer-Encoding: quoted-printable" pois é maioritariamente dados de 7 bits. Para Japonês, tradicionalmente usa-se "Content-Type: text/plain; charset=ISO-2022-JP" para o mail para manter o texto em 7 bits. Mas os sistemas mais antigos da Microsoft podem enviar dados de     mail em Shift-JIS sem a declaração apropriada. Se o testo Japonês for codificado em UTF-8, é provável que se use Base64 pois contém muitos dados de 8 bits. A situação de outras linguagens Asiáticas é semelhante. Nota     If your non-Unix mail data is accessible by a non-Debian client software which can talk to the IMAP4 server, you may be able to move them out by running your own IMAP4 server. Nota     Se usa outros formatos de armazenamento de mail, movê-los para o formato mbox é um bom primeiro passo. Um programa cliente versátil como o mutt(1) pode dar jeito para isto.     Pode dividir os conteúdos da mailbox para cada mensagem a usar o procmail(1) e o formail(1). Cada mensagem de mail pode ser desempacotada a usar o munpack(1)     do pacote mpack (ou outras ferramentas especializadas) para obter os conteúdos codificados em MIME. 11.6. Ferramentas de dados gráficos Apesar dos programas com GUI como o gimp(1) serem muito     poderosos, as ferramentas de linha de comandos como o imagemagick (1) são bastante úteis para automatizar a manipulação de imagens via scripts. O formato de facto de ficheiros de imagem das câmaras digitais é     o Exchangeable Image File Format (EXIF) o qual é o formato de ficheiros de imagem JPEG com etiquetas de meta-dados adicionais. Pode conter informações como a data, hora e definições da camera. A patente de compressão de dados sem perdas de Lempel-Ziv-Welch     (LZW) expirou. Os utilitários de Graphics Interchange Format (GIF) que usam o método de compressão LZW estão agora livremente disponíveis no sistema Debian. Dica Qualquer câmara digital ou scanner com meio de gravação amovível     funciona em Linux através de leitores de armazenamento USB desde que sigam as Regras de Desenho para Sistemas de Ficheiros de Câmaras e usem o sistema de ficheiros FAT. Veja Secção 10.1.7, “Aparelho de armazenamento amovível”. 11.6.1. Graphic data tools (metapackage) The following metapackages are good starting points for searching     graphics data tools using aptitude(8). "Packages overview for Debian PhotoTools Maintainers" can be another starting point. Tabela 11.17. List of graphics data tools (metapackage) +---------------------------------------------------------------+ | pacote |popcon|tamanho|palavra| descrição | | | | | chave | | |------------------------+------+-------+-------+---------------| | | | |svg, |metapackage for| |design-desktop-graphics |I:0 |13 |jpeg, …|graphics | | | | | |designers |     |------------------------+------+-------+-------+---------------| | | | | |metapackage for| |education-graphics |I:0 |30 |svg, |teaching | | | | |jpeg, …|graphics and | | | | | |pictural art. | |------------------------+------+-------+-------+---------------| | | | |ttf, |meta pacote | |open-font-design-toolkit|I:0 |9 |ps, … |para desenho de| | | | | |font aberta | +---------------------------------------------------------------+ Dica     Procure mais ferramentas de imagem com a expressão regular "~Gworks-with::image" no aptitude(8) (veja Secção 2.2.6, “Opções do método de pesquisa com o aptitude”). 11.6.2. Graphic data tools (GUI)     The following packages for the GUI graphics data conversion, editing, and organization tools caught my eyes. Tabela 11.18. List of graphics data tools (GUI) +---------------------------------------------------------------+ | pacote |popcon|tamanho| palavra | descrição | | | | | chave | | |----------------+------+-------+------------+------------------| | |V:50, | |imagem |GNU Image | |gimp |I:252 |19304 |(bitmap) |Manipulation | | | | | |Program | |----------------+------+-------+------------+------------------| | | | | |Frontend X11 | | |V:12, | |imagem |baseado em GTK | |xsane |I:144 |2339 |(bitmap) |para o SANE | | | | | |(Scanner Access | | | | | |Now Easy) | |----------------+------+-------+------------+------------------| |scribus |V:1, |31345 |ps/pdf/SVG/…|editor de DTP do | | |I:16 | | |Scribus | |----------------+------+-------+------------+------------------| | | | | |suite de | |libreoffice-draw|V:72, |10312 |imagem |escritório do | | |I:430 | |(vector) |LibreOffice - | | | | | |desenho | |----------------+------+-------+------------+------------------| | |V:15, | |imagem |editor de SVG | |inkscape |I:112 |99800 |(vector) |(Scalable Vector | | | | | |Graphics) | |----------------+------+-------+------------+------------------| |dia |V:2, |3741 |imagem |editor de | | |I:22 | |(vector) |diagramas (Gtk) | |----------------+------+-------+------------+------------------| | | | | |Habilidade para | |xfig |V:0, |7849 |imagem |Geração | | |I:11 | |(vector) |interactiva de | | | | | |figuras sob X11 | |----------------+------+-------+------------+------------------| |gocr |V:0, |540 |imagem→texto|software de OCR | | |I:7 | | |livre | |----------------+------+-------+------------+------------------| | | | | |Programa de | |eog |V:64, |7770 |imagem(Exif)|visualização de | | |I:277 | | |gráficos Olho do | | | | | |GNOME | |----------------+------+-------+------------+------------------| | |V:3, | | |visualizador e | |gthumb |I:16 |5032 |imagem(Exif)|navegador de | | | | | |imagens (GNOME) | |----------------+------+-------+------------+------------------| | |V:4, | | |Visualizador de |     |geeqie |I:15 |2522 |imagem(Exif)|imagens que usa | | | | | |GTK | |----------------+------+-------+------------+------------------| | |V:17, | | |organizador de | |shotwell |I:255 |6263 |imagem(Exif)|fotos digitais | | | | | |(GNOME) | |----------------+------+-------+------------+------------------| |gwenview |V:33, |11755 |imagem(Exif)|visualizador de | | |I:106 | | |imagens (KDE) | |----------------+------+-------+------------+------------------| | | | | |Suporte para | |kamera |I:105 |998 |imagem(Exif)|cameras digitais | | | | | |para aplicações do| | | | | |KDE | |----------------+------+-------+------------+------------------| | |V:1, | | |aplicação de | |digikam |I:9 |293 |imagem(Exif)|gestão de fotos | | | | | |digitais para KDE | |----------------+------+-------+------------+------------------| | |V:4, | | |virtual lighttable| |darktable |I:13 |30554 |imagem(Exif)|and darkroom for | | | | | |photographers | |----------------+------+-------+------------+------------------| |hugin |V:0, |5208 |imagem(Exif)|panorama photo | | |I:8 | | |stitcher | |----------------+------+-------+------------+------------------| |librecad |V:1, |8963 |DXF, ... |2D CAD data editor| | |I:15 | | | | |----------------+------+-------+------------+------------------| |freecad |I:18 |36 |DXF, ... |3D CAD data editor| |----------------+------+-------+------------+------------------| | |V:3, | |blend, TIFF,|editor de | |blender |I:28 |84492 |VRML, … |conteúdos 3D para | | | | | |animação e etc | |----------------+------+-------+------------+------------------| | |V:0, | |ms3d, obj, |editor de modelos | |mm3d |I:0 |3881 |dxf, … |3D baseado em | | | | | |OpenGL | |----------------+------+-------+------------+------------------| | | | | |editor de tipo de | |fontforge |V:0, |3993 |ttf, ps, … |letra para fonts | | |I:6 | | |PS, TrueType e | | | | | |OpenType | |----------------+------+-------+------------+------------------| | | | | |programa para | | |V:0, | | |ajustes e | |xgridfit |I:0 |806 |ttf |alinhamento em | | | | | |grelha de tipos de| | | | | |letra TrueType | +---------------------------------------------------------------+ 11.6.3. Graphic data tools (CLI)     The following packages for the CLI graphics data conversion, editing, and organization tools caught my eyes. Tabela 11.19. List of graphics data tools (CLI) +--------------------------------------------------------------------+ | pacote |popcon|tamanho| palavra chave | descrição | |-----------------+------+-------+-----------------+-----------------| | | | | |programas de | |imagemagick |I:317 |74 |imagem(bitmap) |manipulação de | | | | | |imagens | |-----------------+------+-------+-----------------+-----------------| | | | | |programas de | |graphicsmagick |V:1, |5565 |imagem(bitmap) |manipulação de | | |I:11 | | |imagens (fork do | | | | | |imagemagick) | |-----------------+------+-------+-----------------+-----------------| | |V:28, | | |ferramentas de | |netpbm |I:326 |8526 |imagem(bitmap) |conversão de | | | | | |gráficos | |-----------------+------+-------+-----------------+-----------------| | | | | |convert High | | | | | |Efficiency Image | | | | | |File Format | |libheif-examples |V:0, |191 |heif→jpeg(bitmap)|(HEIF) to JPEG, | | |I:2 | | |PNG, or Y4M | | | | | |formats with | | | | | |heif-convert(1) | | | | | |command | |-----------------+------+-------+-----------------+-----------------| | | | | |converte ícones e| | |V:7, | | |cursores do MS | |icoutils |I:50 |221 |png↔ico(bitmap) |Windows de e para| | | | | |formatos PNG | | | | | |(favicon.ico) | |-----------------+------+-------+-----------------+-----------------| | | | | |conversor de | | | | | |ficheiro | |pstoedit |V:2, |1011 |ps/pdf→imagem |PostScript e PDF | | |I:52 | |(vector) |para gráficos | | | | | |vectoriais | | | | | |editáveis (SVG) | |-----------------+------+-------+-----------------+-----------------| | | | | |ferramentas de | | | | | |conversão de | |libwmf-bin |V:7, |151 |Windows/imagem |meta-ficheiros do| | |I:119 | |(vector) |Windows (dados de| | | | | |gráficos | | | | | |vectoriais) | |-----------------+------+-------+-----------------+-----------------| | | | | |converte | | |V:0, | | |ficheiros XFig ao| |fig2sxd |I:0 |151 |fig→sxd(vector) |formato do | | | | | |OpenOffice.org | | | | | |Draw | |-----------------+------+-------+-----------------+-----------------| | | | | |ferramenta de | | |V:2, | | |pós-processamento| |unpaper |I:17 |412 |imagem→imagem |para páginas | | | | | |digitalizadas em | | | | | |scanner para OCR | |-----------------+------+-------+-----------------+-----------------| | | | | |software livre de| |tesseract-ocr |V:7, |2228 |imagem→texto |OCR baseado no | | |I:33 | | |motor de OCR | | | | | |comercial da HP | |-----------------+------+-------+-----------------+-----------------| | | | | |Dados de motor |     | |V:7, | | |OCR: ficheiros de| |tesseract-ocr-eng|I:34 |4032 |imagem→texto |linguagem | | | | | |tesseract-ocr | | | | | |para texto Inglês| |-----------------+------+-------+-----------------+-----------------| |ocrad |V:0, |587 |imagem→texto |software de OCR | | |I:3 | | |livre | |-----------------+------+-------+-----------------+-----------------| | | | | |utilitário de | | | | | |linha de comandos| |exif |V:2, |339 |imagem(Exif) |para mostrar | | |I:42 | | |informação EXIF | | | | | |nos ficheiros | | | | | |JPEG | |-----------------+------+-------+-----------------+-----------------| | | | | |ferramenta de | |exiv2 |V:2, |275 |imagem(Exif) |manipulação de | | |I:27 | | |meta-dados EXIF/ | | | | | |IPTC | |-----------------+------+-------+-----------------+-----------------| | |V:1, | | |transformar | |exiftran |I:14 |69 |imagem(Exif) |imagens jpeg de | | | | | |câmaras digitais | |-----------------+------+-------+-----------------+-----------------| | | | | |utilitário para | | |V:0, | | |ler etiquetas | |exiftags |I:3 |292 |imagem(Exif) |Exif de ficheiros| | | | | |JPEG de câmaras | | | | | |digitais | |-----------------+------+-------+-----------------+-----------------| |exifprobe |V:0, |499 |imagem(Exif) |ler meta-dados de| | |I:3 | | |imagens digitais | |-----------------+------+-------+-----------------+-----------------| | |V:1, | | |descodifica | |dcraw |I:12 |583 |imagem(Raw)→ppm |imagens cruas de | | | | | |câmaras digitais | |-----------------+------+-------+-----------------+-----------------| | | | | |encontra imagens | |findimagedupes |V:0, |77 |image→fingerprint|visualmente | | |I:1 | | |semelhantes ou | | | | | |duplicadas | |-----------------+------+-------+-----------------+-----------------| | | | | |junta imagens | |ale |V:0, |839 |imagem→imagem |para aumentar a | | |I:0 | | |fidelidade ou | | | | | |criar mosaicos | |-----------------+------+-------+-----------------+-----------------| | |V:0, | | |gera galerias | |imageindex |I:1 |145 |imagem(Exif)→html|HTML estáticas a | | | | | |partir de imagens| |-----------------+------+-------+-----------------+-----------------| | |V:0, | | |ferramenta de | |outguess |I:1 |230 |jpeg,png |Esteganografia | | | | | |universal | |-----------------+------+-------+-----------------+-----------------| |jpegoptim |V:0, |59 |jpeg |optimize JPEG | | |I:7 | | |files | |-----------------+------+-------+-----------------+-----------------| | |V:3, | | |optimize PNG | |optipng |I:43 |213 |png |files, lossless | | | | | |compression | |-----------------+------+-------+-----------------+-----------------| | |V:0, | | |optimize PNG | |pngquant |I:9 |61 |png |files, lossy | | | | | |compression | +--------------------------------------------------------------------+ 11.7. Conversão de dados variados Existem muitos outros programas para converter dados. Os pacotes     seguintes chamaram a minha atenção a usar a expressão regular "~Guse::converting" no aptitude(8) (veja Secção 2.2.6, “Opções do método de pesquisa com o aptitude”). Tabela 11.20. Lista de ferramentas de conversão de dados variados +---------------------------------------------------------------+ | pacote |popcon|tamanho|palavra chave| descrição | |---------+------+-------+-------------+------------------------| | |V:1, | | |conversor para pacotes | |alien |I:19 |163 |rpm/tgz→deb |alienígenas num pacote | | | | | |Debian | |---------+------+-------+-------------+------------------------|     | | | | |conversor de "Electric | | | | | |Book" (popular no Japão)| |freepwing|V:0, |424 |EB→EPWING |para um formato JIS X | | |I:0 | | |4081 único (um | | | | | |subconjunto de EPWING | | | | | |V1) | |---------+------+-------+-------------+------------------------| |calibre |V:6, |63385 |qualquer→EPUB|conversor de e-books e | | |I:28 | | |gestor de biblioteca | +---------------------------------------------------------------+     Também pode extrair dados do formato RPM com o seguinte.     $ rpm2cpio file.src.rpm | cpio --extract Capítulo 12. Programação Disponibilizo algumas dicas para as pessoas aprenderem     programação no sistema Debian o suficiente para rastrear o código fonte do pacote. Aqui estão pacotes notáveis e pacotes de documentação correspondentes para programação. Estão disponíveis referências online ao escrever "man nome" após instalar os pacotes manpages e manpages-dev. As referências online ás ferramentas GNU está disponíveis ao escrever "info     nome_do_programa" após instalar os pacotes de documentação pertinentes. Poderá ter de incluir os arquivos contrib e non-free adicionalmente ao arquivo main pois algumas documentações GFDL não são consideradas compatíveis com DFSG.     Please consider to use version control system tools. See Secção 10.5, “Git”. Atenção     Não use "test" como o nome de um ficheiro de teste executável. "test" é um comando embutido na shell. Cuidado     Deve instalar os programas compilados directamente a partir da fonte em "/usr/local" ou "/opt" para evitar colisões com os programas do sistema. Dica     Os Exemplos de código da criação de "Song 99 Bottles of Beer" devem dar-lhe uma boa ideia de praticamente todas as linguagens de programação. 12.1. O script de shell     O script de shell é um ficheiro de texto com o bit de execução definido e contém os comandos no seguinte formato.     #!/bin/sh ... command lines     A primeira linha especifica o interpretador shell que lê e executa o conteúdo deste ficheiro. Reading shell scripts is the best way to understand how a Unix-like system works. Here, I give some pointers and reminders     for shell programming. See "Shell Mistakes" (https:// www.greenend.org.uk/rjk/2001/04/shell.html) to learn from mistakes. Ao contrário do modo interativo de shell (veja Secção 1.5, “O     comando simples da shell” e Secção 1.6, “Processamento de texto estilo Unix”), os scripts de shell usam frequentemente parâmetros, condicionais e ciclos. 12.1.1. Compatibilidade da shell do POSIX     Many system scripts may be interpreted by any one of POSIX shells (see Tabela 1.13, “Lista de programas da shell”). * The default non-interactive POSIX shell "/usr/bin/sh" is a symlink pointing to /usr/bin/dash and used by many system     programs. * The default interactive POSIX shell is /usr/bin/bash. Evite escrever um script de shell com bashisms ou zshisms para     fazê-loportável entre todas as shells do POSIX. Pode verificar isto a usar o checkbashisms(1). Tabela 12.1. Lista dos 'bashisms' típicos +---------------------------------------------------------------+ | Bom: POSIX | Evitar: 'bashism' | |-------------------------------+-------------------------------| |if [ "$foo" = "$bar" ] ; then …|if [ "$foo" == "$bar" ] ; then | | |… | |-------------------------------+-------------------------------|     |diff -u file.c.orig file.c |diff -u file.c{.orig,} | |-------------------------------+-------------------------------| |mkdir /foobar /foobaz |mkdir /foo{bar,baz} | |-------------------------------+-------------------------------| |funcname() { … } |function funcname() { … } | |-------------------------------+-------------------------------| |formato octal: "\377" |formato hexadecimal: "\xff" | +---------------------------------------------------------------+ O comando "echo" tem de ser usado com os seguintes cuidados     porque a implementação dele difere entre o integrado na shell e os comandos externos. * Evite usar quaisquer opções de comando excepto "-n".     * Evite usar sequências de escape na cadeia porque o manuseamento dele varia. Nota     Apesar da opção "-n" não ser realmente sintaxe POSIX, geralmente é aceite. Dica     Use o comando "printf" em vez do comando "echo" se precisar de embeber sequências de escape na cadeia de saída. 12.1.2. Parâmetros da shell     Parâmetros de shell especiais são frequentemente usados no script shell. Tabela 12.2. Lista de parâmetros da shell +---------------------------------------------------------------+ | parâmetro da | valor | | shell | | |-----------------+---------------------------------------------| |$0 |nome da shell ou script de shell | |-----------------+---------------------------------------------| |$1 |primeiro(1) argumento shell | |-----------------+---------------------------------------------| |$9 |nono(9) argumento shell | |-----------------+---------------------------------------------|     |$# |quantidade de parâmetros de posição | |-----------------+---------------------------------------------| |"$*" |"$1 $2 $3 $4 … " | |-----------------+---------------------------------------------| |"$@" |"$1" "$2" "$3" "$4" … | |-----------------+---------------------------------------------| |$? |estado de saída do comando mais recente | |-----------------+---------------------------------------------| |$$ |PID deste script shell | |-----------------+---------------------------------------------| |$! |PID da tarefa de fundo iniciada mais | | |recentemente | +---------------------------------------------------------------+     As expansões de parâmetro básicas a lembrar são as seguintes. Tabela 12.3. Lista de expansões de parâmetros de shell +---------------------------------------------------------------+ | formato da | valor se var | valor se var não estiver | | expressão do |estiver definido| definido | | parâmetro | | | |-------------------+----------------+--------------------------| |${var:-cadeia} |"$var" |"cadeia" |     |-------------------+----------------+--------------------------| |${var:+cadeia} |"cadeia" |"null" | |-------------------+----------------+--------------------------| |${var:=cadeia} |"$var" |"cadeia" (e corra "var= | | | |cadeia") | |-------------------+----------------+--------------------------| |${var:?cadeia} |"$var" |echo "cadeia" para stderr | | | |(e termina com erro) | +---------------------------------------------------------------+     Aqui, o símbolo ortográfico dois pontos ":" em todas estas operações é na realidade opcional. * com ":" = teste de operador para existe e não nulo     * sem ":" = teste de operador para apenas existe Tabela 12.4. Lista de substituições de parâmetros de shell chave +---------------------------------------------------------------+ | formato de substituição de | resultado | | parâmetro | | |--------------------------------+------------------------------| |${var%suffix} |remover o modelo de sufixo | | |menor | |--------------------------------+------------------------------|     |${var%%suffix} |remover o modelo de sufixo | | |maior | |--------------------------------+------------------------------| |${var#prefix} |remover o modelo de prefixo | | |menor | |--------------------------------+------------------------------| |${var##prefix} |remover o modelo de prefixo | | |maior | +---------------------------------------------------------------+ 12.1.3. Condicionais da shell     Cada comando retorna um estado de saída que pode ser usado para expressões condicionais. * Sucesso: 0 ("True")     * Erro: não 0 ("False") Nota     "0" no contexto condicional da shell significa "Verdadeiro", enquanto "0" no contexto condicional de C significa "Falso". Nota     "[" é o equivalente do comando test, o qual avalia os seus argumentos até ao "]" como uma expressão condicional.     Os idiomas condicionais básicos a lembrar são os seguintes. * "comando && se_sucesso_corre_também_este_comando || true"     * "comando || se_não_sucesso_corre_também_este_comando || true" * Um fragmento de script de multi-linhas como o seguinte if [ conditional_expression ]; then if_success_run_this_command     else if_not_success_run_this_command fi Aqui o "|| true" final foi necessário para assegurar que estes     script de shell não termina acidentalmente nesta linha quando a shell é invocada com a flag "-e". Tabela 12.5. Lista de operadores de comparação de ficheiros na expressão condicional +---------------------------------------------------------------+ | equação | condição para retornar o verdadeiro lógico | |---------------+-----------------------------------------------| |-e ficheiro |ficheiro existe | |---------------+-----------------------------------------------| |-d ficheiro |ficheiro existe e é um diretório | |---------------+-----------------------------------------------| |-f ficheiro |ficheiro existe e é um ficheiro normal | |---------------+-----------------------------------------------|     |-w ficheiro |ficheiro existe e pode-se escrever nele | |---------------+-----------------------------------------------| |-x ficheiro |ficheiro existe e é executável | |---------------+-----------------------------------------------| |ficheiro1 -nt |ficheiro1 é mais recente que ficheiro2 | |ficheiro2 |(modificação) | |---------------+-----------------------------------------------| |ficheiro1 -ot |ficheiro1 é mais antigo que ficheiro2 | |ficheiro2 |(modificação) | |---------------+-----------------------------------------------| |ficheiro1 -ef |ficheiro1 e ficheiro2 estão no mesmo aparelho e| |ficheiro2 |no mesmo número de inode | +---------------------------------------------------------------+ Tabela 12.6. Lista de operadores de comparação de cadeias na expressão condicional +-------------------------------------------------------------+ | equação | condição para retornar o verdadeiro lógico | |------------+------------------------------------------------| |-z str |o comprimento de str é zero | |------------+------------------------------------------------| |-n str |o comprimento de str não é zero |     |------------+------------------------------------------------| |str1 = str2 |str1 and str2 são iguais | |------------+------------------------------------------------| |str1 != str2|str1 and str2 não são iguais | |------------+------------------------------------------------| |str1 < str2 |str1 ordena antes de str2 (dependente do locale)| |------------+------------------------------------------------| |str1 > str2 |str1 ordena após str2 (dependente do locale) | +-------------------------------------------------------------+     Os operadores de comparação Aritmética de inteiros na expressão regular são "-eq", "-ne", "-lt", "-le", "-gt" e "-ge". 12.1.4. Ciclos (loops) da shell     Existem vários idiomas de ciclo para usar na shell POSIX. * "for x in foo1 foo2 … ; do command ; done" faz ciclos ao atribuir itens da lista "foo1 foo2 …" à variável "x" e a executar o "comando". * "while condition ; do command ; done" repete o "comando" enquanto a "condição" for verdadeira.     * "until condition ; do command ; done" repete o "comando" enquanto a "condição" não for verdadeira. * "break" permite sair do ciclo. * "continue" permite resumir a próxima interacção do ciclo. Dica     A interacção numérica tipo linguagem C pode ser realizada a usar seq(1) como o gerador de "foo1 foo2 …". Dica     Veja Secção 9.4.9, “Repetir um ciclo de comandos sobre ficheiros” . 12.1.5. Shell environment variables Some popular environment variables for the normal shell command     prompt may not be available under the execution environment of your script. * For "$USER", use "$(id -un)" * For "$UID", use "$(id -u)"     * For "$HOME", use "$(getent passwd "$(id -u)"|cut -d ":" -f 6) " (this works also on Secção 4.5.2, “O moderno sistema de gestão centralizado”) 12.1.6. A sequência de processamento da linha de comandos da shell     A shell processa um script rudemente como a seguinte sequência. * A shell lê uma linha. * A shell agrupa uma parte de uma linha como um testemunho se estiver dentro de "…" ou '…'. * A shell divide a outra parte de uma linha em testemunhos como o seguinte. + Espaços em branco: espaço tab nova-linha + Meta-caracteres: < > | ; & ( ) * A shell verifica a palavra reservada para cada testemunho para ajustar o comportamento dele se não dentro de "…" ou '…'. + palavra reservada: if then elif else fi for in while unless do done case esac * A shell expande o alias se não estiver dentro de "…" ou '…'. * A shell expande o til se não dentro de "…" ou '…'. + "~" → diretório home do utilizador atual + "~utilizador" → diretório home do utilizador * A shell expande o parâmetro ao seu valor se não dentro de     '…'. + parâmetro: "$PARAMETER" ou "${PARAMETER}" * A shell expande a substituição do comando se não dentro de '…'. + "$( comando )" → o resultado do "comando" + "` comando `" → o resultado do "comando" * A shell expande o glob nome_de-caminho aos nomes de ficheiros correspondentes se não dentro de "…" ou '…'. + * → quaisquer caracteres + ? → um caractere + […] → qualquer um dos caracteres em "…" * A shell procura o comando a partir do seguinte e executa-o. + definição de função + comando builtin + ficheiro executável em "$PATH" * A shell vai à próxima linha e repete este processo outra vez a partir do topo desta sequência.     Citações singulares (') dentro de aspas não têm efeito. Executar "set -x" na shell ou invocar a shell com a opção "-x"     faz a shell escrever todos os comandos executados. Isto é muito útil para depuração. 12.1.7. Programas utilitários para script de shell De modo a tornar o seu programa de shell o mais portável possível     entre os sistemas Debian, é uma boa ideia limitar os programas utilitários àqueles disponibilizados pelos pacotes essenciais. * "aptitude search ~E" lista os pacotes essenciais.     * "dpkg -L nome_do-pacote |grep '/man/man.*/'" lista as manpages (manuais) para comandos oferecidos pelo pacote nome_do_pacote. Tabela 12.7. Lista de pacotes que contém programas utilitários pequenos para scripts de shell +---------------------------------------------------------------+ | pacote | popcon |tamanho| descrição | |-------------+---------+-------+-------------------------------| |dash |V:884, |191 |small and fast POSIX-compliant | | |I:997 | |shell for sh | |-------------+---------+-------+-------------------------------| |coreutils |V:880, |18307 |utilitários de núcleo GNU | | |I:999 | | | |-------------+---------+-------+-------------------------------| |grep |V:782, |1266 |GNU grep, egrep and fgrep | | |I:999 | | | |-------------+---------+-------+-------------------------------| |sed |V:790, |987 |GNU sed |     | |I:999 | | | |-------------+---------+-------+-------------------------------| |mawk |V:442, |285 |small and fast awk | | |I:997 | | | |-------------+---------+-------+-------------------------------| |debianutils |V:907, |224 |utilitários variados | | |I:999 | |específicos do Debian | |-------------+---------+-------+-------------------------------| |bsdutils |V:519, |356 |utilitários básicos do | | |I:999 | |4.4BSD-Lite | |-------------+---------+-------+-------------------------------| |bsdextrautils|V:596, |339 |extra utilities from | | |I:713 | |4.4BSD-Lite | |-------------+---------+-------+-------------------------------| |moreutils |V:15, |231 |utilitários Unix adicionais | | |I:38 | | | +---------------------------------------------------------------+ Dica     Although moreutils may not exist outside of Debian, it offers interesting small programs. Most notable one is sponge(8) which is quite useful when you wish to overwrite original file.     See Secção 1.6, “Processamento de texto estilo Unix” for examples. 12.2. Scripting in interpreted languages Tabela 12.8. List of interpreter related packages +---------------------------------------------------------------+ | pacote |popcon|tamanho| documentação | |-------------------------+------+-------+----------------------| | |V:884,| |sh: small and fast | |dash |I:997 |191 |POSIX-compliant shell | | | | |for sh | |-------------------------+------+-------+----------------------| |bash |V:838,|7175 |sh: "info bash" | | |I:999 | |provided by bash-doc | |-------------------------+------+-------+----------------------| |mawk |V:442,|285 |AWK: small and fast | | |I:997 | |awk | |-------------------------+------+-------+----------------------| |gawk |V:285,|2906 |AWK: "info gawk" | | |I:349 | |provided by gawk-doc | |-------------------------+------+-------+----------------------| | | | |Perl: perl(1) and html| |perl |V:707,|673 |pages provided by | | |I:989 | |perl-doc and | | | | |perl-doc-html | |-------------------------+------+-------+----------------------| | |V:2, | |Perl extension for the|     |libterm-readline-gnu-perl|I:29 |380 |GNU ReadLine/History | | | | |Library: perlsh(1) | |-------------------------+------+-------+----------------------| |libreply-perl |V:0, |171 |REPL for Perl: reply | | |I:0 | |(1) | |-------------------------+------+-------+----------------------| |libdevel-repl-perl |V:0, |237 |REPL for Perl: re.pl | | |I:0 | |(1) | |-------------------------+------+-------+----------------------| | |V:718,| |Python: python3(1) and| |python3 |I:953 |81 |html pages provided by| | | | |python3-doc | |-------------------------+------+-------+----------------------| | |V:25, | |Tcl: tcl(3) and detail| |tcl |I:218 |21 |manual pages provided | | | | |by tcl-doc | |-------------------------+------+-------+----------------------| | |V:20, | |Tk: tk(3) and detail | |tk |I:211 |21 |manual pages provided | | | | |by tk-doc | |-------------------------+------+-------+----------------------| |ruby |V:86, |29 |Ruby: ruby(1), erb(1),| | |I:208 | |irb(1), rdoc(1), ri(1)| +---------------------------------------------------------------+ When you wish to automate a task on Debian, you should script it     with an interpreted language first. The guide line for the choice of the interpreted language is: * Use dash, if the task is a simple one which combines CLI programs with a shell program. * Use python3, if the task isn't a simple one and you are     writing it from scratch. * Use perl, tcl, ruby, ... if there is an existing code using one of these languages on Debian which needs to be touched up to do the task. If the resulting code is too slow, you can rewrite only the     critical portion for the execution speed in a compiled language and call it from the interpreted language. 12.2.1. Debugging interpreted language codes     Most interpreters offer basic syntax check and code tracing functionalities. * “dash -n script.sh” - Syntax check of a Shell script * “dash -x script.sh” - Trace a Shell script * “python -m py_compile script.py” - Syntax check of a Python script     * “python -mtrace --trace script.py” - Trace a Python script * “perl -I ../libpath -c script.pl” - Syntax check of a Perl script * “perl -d:Trace script.pl” - Trace a Perl script     For testing code for dash, try Secção 9.1.4, “Readline wrapper” which accommodates bash-like interactive environment. For testing code for perl, try REPL environment for Perl which     accommodates Python-like REPL (=READ + EVAL + PRINT + LOOP) environment for Perl. 12.2.2. GUI program with the shell script The shell script can be improved to create an attractive GUI     program. The trick is to use one of so-called dialog programs instead of dull interaction using echo and read commands. Tabela 12.9. List of dialog programs +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |---------+------+-------+--------------------------------------| |x11-utils|V:192,|651 |xmessage(1): mostra uma mensagem ou | | |I:566 | |questão numa janela (X) | |---------+------+-------+--------------------------------------| | |V:284,| |mostra caixas de diálogo amigas do | |whiptail |I:996 |56 |utilizador a partir de scripts de | | | | |shell (newt) | |---------+------+-------+--------------------------------------| | |V:11, | |mostra caixas de diálogo amigas do |     |dialog |I:99 |1227 |utilizador a partir de scripts de | | | | |shell (ncurses) | |---------+------+-------+--------------------------------------| |zenity |V:76, |183 |display graphical dialog boxes from | | |I:363 | |shell scripts (GTK) | |---------+------+-------+--------------------------------------| | |V:0, | |Ferramenta Frontend de Scripts de | |ssft |I:0 |75 |Shell (wrapper para o zenity, kdialog | | | | |e dialog com o gettext) | |---------+------+-------+--------------------------------------| |gettext |V:56, |5818 |"/usr/bin/gettext.sh": traduz mensagem| | |I:259 | | | +---------------------------------------------------------------+     Here is an example of GUI program to demonstrate how easy it is just with a shell script.     This script uses zenity to select a file (default /etc/motd) and display it.     GUI launcher for this script can be created following Secção 9.4.10, “Arrancar um programa a partir da GUI”. #!/bin/sh -e # Copyright (C) 2021 Osamu Aoki , Public Domain # vim:set sw=2 sts=2 et: DATA_FILE=$(zenity --file-selection --filename="/etc/motd" --title="Select a file to check") || \ ( echo "E: File selection error" >&2 ; exit 1 ) # Check size of archive     if ( file -ib "$DATA_FILE" | grep -qe '^text/' ) ; then zenity --info --title="Check file: $DATA_FILE" --width 640 --height 400 \ --text="$(head -n 20 "$DATA_FILE")" else zenity --info --title="Check file: $DATA_FILE" --width 640 --height 400 \ --text="The data is MIME=$(file -ib "$DATA_FILE")" fi This kind of approach to GUI program with the shell script is     useful only for simple choice cases. If you are to write any program with complexities, please consider writing it on more capable platform. 12.2.3. Custom actions for GUI filer GUI filer programs can be extended to perform some popular     actions on selected files using additional extension packages. They can also made to perform very specific custom actions by adding your specific scripts. * For GNOME, see NautilusScriptsHowto. * For KDE, see Creating Dolphin Service Menus.     * For Xfce, see Thunar - Custom Actions and https:// help.ubuntu.com/community/ThunarCustomActions. * For LXDE, see Custom Actions. 12.2.4. A loucura dos scripts curtos de Perl In order to process data, sh needs to spawn sub-process running     cut, grep, sed, etc., and is slow. On the other hand, perl has internal capabilities to process data, and is fast. So many system maintenance scripts on Debian use perl.     Let's think following one-liner AWK script snippet and its equivalents in Perl.     awk '($2=="1957") { print $3 }' |     Isto é equivalente a qualquer uma das seguintes linhas.     perl -ne '@f=split; if ($f[1] eq "1957") { print "$f[2]\n"}' |     perl -ne 'if ((@f=split)[1] eq "1957") { print "$f[2]\n"}' |     perl -ne '@f=split; print $f[2] if ( $f[1]==1957 )' |     perl -lane 'print $F[2] if $F[1] eq "1957"' |     perl -lane 'print$F[2]if$F[1]eq+1957' |     Este último é um enigma. Aproveitei-me das seguintes funcionalidades do Perl. * O espaço em branco é opcional. * Existe a conversão automática de números para cadeia.     * Perl execution tricks via command line options: perlrun(1) * Perl special variables: perlvar(1)     This flexibility is the strength of Perl. At the same time, this allows us to create cryptic and tangled codes. So be careful. 12.3. Coding in compiled languages Tabela 12.10. List of compiler related packages +---------------------------------------------------------------+ | pacote |popcon |tamanho| descrição | |----------------+-------+-------+------------------------------| |gcc |V:167, |36 |GNU C compiler | | |I:550 | | | |----------------+-------+-------+------------------------------| |libc6-dev |V:248, |12053 |GNU C Library: Development | | |I:567 | |Libraries and Header Files | |----------------+-------+-------+------------------------------| |g++ |V:56, |13 |GNU C++ compiler | | |I:501 | | | |----------------+-------+-------+------------------------------| |libstdc++-10-dev|V:14, |17537 |GNU Standard C++ Library v3 | | |I:165 | |(development files) | |----------------+-------+-------+------------------------------| |cpp |V:334, |18 |GNU C preprocessor | | |I:727 | | | |----------------+-------+-------+------------------------------| |gettext |V:56, |5818 |GNU Internationalization | | |I:259 | |utilities | |----------------+-------+-------+------------------------------| |glade |V:0, |1204 |GTK User Interface Builder | | |I:5 | | | |----------------+-------+-------+------------------------------| |valac |V:0, |725 |C# like language for the | | |I:4 | |GObject system | |----------------+-------+-------+------------------------------|     |flex |V:7, |1243 |LEX-compatible fast lexical | | |I:73 | |analyzer generator | |----------------+-------+-------+------------------------------| |bison |V:7, |3116 |YACC-compatible parser | | |I:80 | |generator | |----------------+-------+-------+------------------------------| |susv2 |I:0 |16 |buscar "The Single UNIX | | | | |Specifications v2" | |----------------+-------+-------+------------------------------| |susv3 |I:0 |16 |buscar "The Single UNIX | | | | |Specifications v3" | |----------------+-------+-------+------------------------------| |susv4 |I:0 |16 |fetch "The Single UNIX | | | | |Specifications v4" | |----------------+-------+-------+------------------------------| |golang |I:20 |11 |Go programming language | | | | |compiler | |----------------+-------+-------+------------------------------| |rustc |V:3, |8860 |Rust systems programming | | |I:14 | |language | |----------------+-------+-------+------------------------------| |haskell-platform|I:1 |12 |Standard Haskell libraries and| | | | |tools | |----------------+-------+-------+------------------------------| |gfortran |V:6, |15 |GNU Fortran 95 compiler | | |I:62 | | | |----------------+-------+-------+------------------------------| |fpc |I:2 |103 |Free Pascal | +---------------------------------------------------------------+ Here, Secção 12.3.3, “Flex — um Lex melhor” and Secção 12.3.4,     “Bison — um Yacc melhor” are included to indicate how compiler-like program can be written in C language by compiling higher level description into C language. 12.3.1. C     Pode configurar um ambiente apropriado para compilar programas escritos na linguagem de programação C com o seguinte.     # apt-get install glibc-doc manpages-dev libc6-dev gcc build-essential O pacote libc6-dev, isto é, a biblioteca C GNU, disponibiliza uma     biblioteca standard C a qual é uma colecção de ficheiros cabeçalho e rotinas de biblioteca usadas pela linguagem de programação C.     Veja referências para C nos seguintes. * "info libc" (Referência de funções da biblioteca C) * gcc(1) e "info gcc"     * cada-nome_de_função_da_biblioteca_C(3) * Kernighan & Ritchie, "A Linguagem de Programação C", 2ª edição (Prentice Hall) 12.3.2. Programa C simples (gcc)     Um simples exemplo, "example.c" pode ser compilado com uma biblioteca "libm" num executável "run_example" com o seguinte. $ cat > example.c << EOF #include #include #include int main(int argc, char **argv, char **envp){ double x; char y[11]; x=sqrt(argc+7.5);     strncpy(y, argv[0], 10); /* prevent buffer overflow */ y[10] = '\0'; /* fill to make sure string ends with '\0' */ printf("%5i, %5.3f, %10s, %10s\n", argc, x, y, argv[1]); return 0; } EOF $ gcc -Wall -g -o run_example example.c -lm $ ./run_example 1, 2.915, ./run_exam, (null) $ ./run_example 1234567890qwerty 2, 3.082, ./run_exam, 1234567890qwerty Aqui, o "-lm" é necessário para ligar a biblioteca "/usr/lib/     libm.so" do pacote libc6 para o sqrt(3). A biblioteca real está em "/lib/" com o nome de ficheiro "libm.so.6", o qual é uma ligação simbólica para "libm-2.7.so".     Olhe ao último parâmetro no texto resultante. Existem mais de 10 caracteres mesmo com "%10s" especificado. O uso de funções de operação de memória de ponteiro sem verificações de limites como em sprintf(3) e strcpy(3), está     descontinuado para prevenir exploits de sobrelotação do buffer que influenciam os efeitos de transbordo em cima. Em vez disso, use snprintf(3) e strncpy(3). 12.3.3. Flex — um Lex melhor     O Flex é um gerador rápido de análise léxica compatível com o Lex.     O tutorial do flex(1) encontra-se em "info flex".     Many simple examples can be found under "/usr/share/doc/flex/ examples/". ^[7] 12.3.4. Bison — um Yacc melhor     Vários pacotes disponibilizam um gerador LR parser ou LALR parser compatível em frente com o Yacc em Debian. Tabela 12.11. Lista de geradores de análise LALR compatíveis com Yacc +---------------------------------------------------------------+ |pacote|popcon |tamanho| descrição | |------+-------+-------+----------------------------------------| |bison |V:7, |3116 |gerador de análise GNU LALR |     | |I:80 | | | |------+-------+-------+----------------------------------------| |byacc |V:0, |258 |Gerador de análise Berkeley LALR | | |I:4 | | | |------+-------+-------+----------------------------------------| |btyacc|V:0, |243 |gerador de análises de retrocesso | | |I:0 | |baseado no byacc | +---------------------------------------------------------------+     O tutorial para o bison(1) encontra-se em "info bison". Tem de disponibilizar as suas próprias chamadas "main()" e     "yyerror()". "main()" chama "yyparse()" que chama "yylex()", geralmente criada com Flex.     Here is an example to create a simple terminal calculator program.     Let's create example.y: /* calculator source for bison */ %{ #include extern int yylex(void); extern int yyerror(char *); %} /* declare tokens */ %token NUMBER %token OP_ADD OP_SUB OP_MUL OP_RGT OP_LFT OP_EQU %% calc: | calc exp OP_EQU { printf("Y: RESULT = %d\n", $2); } ; exp: factor | exp OP_ADD factor { $$ = $1 + $3; } | exp OP_SUB factor { $$ = $1 - $3; }     ; factor: term | factor OP_MUL term { $$ = $1 * $3; } ; term: NUMBER | OP_LFT exp OP_RGT { $$ = $2; } ; %% int main(int argc, char **argv) { yyparse(); } int yyerror(char *s) { fprintf(stderr, "error: '%s'\n", s); }     Let's create, example.l: /* calculator source for flex */ %{ #include "example.tab.h" %} %% [0-9]+ { printf("L: NUMBER = %s\n", yytext); yylval = atoi(yytext); return NUMBER; }     "+" { printf("L: OP_ADD\n"); return OP_ADD; } "-" { printf("L: OP_SUB\n"); return OP_SUB; } "*" { printf("L: OP_MUL\n"); return OP_MUL; } "(" { printf("L: OP_LFT\n"); return OP_LFT; } ")" { printf("L: OP_RGT\n"); return OP_RGT; } "=" { printf("L: OP_EQU\n"); return OP_EQU; } "exit" { printf("L: exit\n"); return YYEOF; } /* YYEOF = 0 */ . { /* ignore all other */ } %%     Then execute as follows from the shell prompt to try this: $ bison -d example.y $ flex example.l $ gcc -lfl example.tab.c lex.yy.c -o example $ ./example 1 + 2 * ( 3 + 1 ) = L: NUMBER = 1 L: OP_ADD L: NUMBER = 2 L: OP_MUL     L: OP_LFT L: NUMBER = 3 L: OP_ADD L: NUMBER = 1 L: OP_RGT L: OP_EQU Y: RESULT = 9 exit L: exit 12.4. Ferramentas de análise de código estático     Lint like tools can help automatic static code analysis.     Indent like tools can help human code reviews by reformatting source codes consistently.     Ctags like tools can help human code reviews by generating an index (or tag) file of names found in source codes. Dica Configuring your favorite editor (emacs or vim) to use     asynchronous lint engine plugins helps your code writing. These plugins are getting very powerful by taking advantage of Language Server Protocol. Since they are moving fast, using their upstream code instead of Debian package may be a good option. Tabela 12.12. Lista de ferramentas para análise de código estático +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |---------------+------+-------+--------------------------------| |vim-ale |I:0 |2591 |Asynchronous Lint Engine for Vim| | | | |8 and NeoVim | |---------------+------+-------+--------------------------------| |vim-syntastic |I:3 |1379 |Syntax checking hacks for vim | |---------------+------+-------+--------------------------------| |elpa-flycheck |V:0, |808 |modern on-the-fly syntax | | |I:1 | |checking for Emacs | |---------------+------+-------+--------------------------------| |elpa-relint |V:0, |147 |Emacs Lisp regexp mistake finder| | |I:0 | | | |---------------+------+-------+--------------------------------| |cppcheck-gui |V:0, |7224 |tool for static C/C++ code | | |I:1 | |analysis (GUI) | |---------------+------+-------+--------------------------------| |shellcheck |V:2, |18987 |lint tool for shell scripts | | |I:13 | | | |---------------+------+-------+--------------------------------| |pyflakes3 |V:2, |20 |passive checker of Python 3 | | |I:15 | |programs | |---------------+------+-------+--------------------------------| |pylint |V:4, |2018 |Verificador estático de código | | |I:20 | |Python | |---------------+------+-------+--------------------------------| | |V:707,| |interpretador com verificador de| |perl |I:989 |673 |código estático interno: B::Lint| | | | |(3perl) | |---------------+------+-------+--------------------------------| |rubocop |V:0, |3247 |Ruby static code analyzer | | |I:0 | | | |---------------+------+-------+--------------------------------|     |clang-tidy |V:2, |21 |clang-based C++ linter tool | | |I:11 | | | |---------------+------+-------+--------------------------------| |splint |V:0, |2320 |ferramenta para verificação | | |I:2 | |estática de programas C por bugs| |---------------+------+-------+--------------------------------| | |V:0, | |ferramenta para examinar código | |flawfinder |I:0 |205 |fonte C/C++ e procurar por | | | | |fraquezas na segurança | |---------------+------+-------+--------------------------------| |black |V:3, |660 |uncompromising Python code | | |I:13 | |formatter | |---------------+------+-------+--------------------------------| |perltidy |V:0, |2493 |Perl script indenter and | | |I:4 | |reformatter | |---------------+------+-------+--------------------------------| |indent |V:0, |431 |C language source code | | |I:7 | |formatting program | |---------------+------+-------+--------------------------------| |astyle |V:0, |785 |Source code indenter for C, C++,| | |I:2 | |Objective-C, C#, and Java | |---------------+------+-------+--------------------------------| |bcpp |V:0, |111 |C(++) beautifier | | |I:0 | | | |---------------+------+-------+--------------------------------| |xmlindent |V:0, |53 |XML stream reformatter | | |I:1 | | | |---------------+------+-------+--------------------------------| |global |V:0, |1908 |Source code search and browse | | |I:2 | |tools | |---------------+------+-------+--------------------------------| |exuberant-ctags|V:2, |341 |build tag file indexes of source| | |I:20 | |code definitions | |---------------+------+-------+--------------------------------| |universal-ctags|V:1, |3386 |build tag file indexes of source| | |I:11 | |code definitions | +---------------------------------------------------------------+ 12.5. Depuração Debug is important part of programming activities. Knowing how to     debug programs makes you a good Debian user who can produce meaningful bug reports. Tabela 12.13. List of debug packages +---------------------------------------------------------------+ |pacote| popcon |tamanho| documentação | |------+----------+-------+-------------------------------------|     |gdb |V:14, I:96|11637 |"info gdb" disponibilizado por | | | | |gdb-doc | |------+----------+-------+-------------------------------------| |ddd |V:0, I:7 |4105 |"info ddd" disponibilizado por | | | | |ddd-doc | +---------------------------------------------------------------+ 12.5.1. Execução gdb básica     O depurador principal em Debian é o gdb(1) que lhe permite inspeccionar um programa enquanto ele é executado.     Vamos instalar o gdb e programas relacionados com o seguinte.     # apt-get install gdb gdb-doc build-essential devscripts     Good tutorial of gdb can be found: * “info gdb”     * “Debugging with GDB” in /usr/share/doc/gdb-doc/html/gdb/ index.html * “tutorial on the web”     Here is a simple example of using gdb(1) on a "program" compiled with the "-g" option to produce debugging information. $ gdb program (gdb) b 1 # set break point at line 1 (gdb) run args # run program with args (gdb) next # next line ...     (gdb) step # step forward ... (gdb) p parm # print parm ... (gdb) p parm=12 # set value to 12 ... (gdb) quit Dica     Muitos comandos do gdb(1) podem ser abreviados. A expansão da Tab funciona como na shell. 12.5.2. Depurar o pacote Debian Since all installed binaries should be stripped on the Debian system by default, most debugging symbols are removed in the normal package. In order to debug Debian packages with gdb(1), *-dbgsym packages need to be installed (e.g. coreutils-dbgsym in     the case of coreutils). The source packages generate *-dbgsym packages automatically along with normal binary packages and those debug packages are placed separately in debian-debug archive. Please refer to articles on Debian Wiki for more information. If a package to be debugged does not provide its *-dbgsym     package, you need to install it after rebuilding it by the following. $ mkdir /path/new ; cd /path/new $ sudo apt-get update $ sudo apt-get dist-upgrade     $ sudo apt-get install fakeroot devscripts build-essential $ apt-get source package_name $ cd package_name* $ sudo apt-get build-dep ./     Corrigir bugs se necessário. Mude a versão de pacote para uma que não colida com as versões oficiais de Debian, por exemplo, uma adicionada com "+debug1"     quando se recompila uma versão de pacote existente, ou uma adicionada com "~pre1" quando se compila uma versão de pacote ainda não lançada com o seguinte.     $ dch -i     Compilar e instalar pacotes com símbolos de depuração com o seguinte. $ export DEB_BUILD_OPTIONS="nostrip noopt"     $ debuild $ cd .. $ sudo debi package_name*.changes     Necessita verificar os scripts de construção do pacote e assegurar o uso de "CFLAGS=-g -Wall" para compilar binários. 12.5.3. Obter um backtrace     Quando encontrar um crash num programa, é uma boa ideia enviar um relatório de bug com informação de backtrace copiada-e-colada.     The backtrace can be obtained by gdb(1) using one of the following approaches: * Crash-in-GDB approach: + Run the program from GDB. + Crash the program. + Type "bt" at the GDB prompt. * Crash-first approach: + Update the “/etc/security/limits.conf” file to include the following:     * soft core unlimited + Type "ulimit -c unlimited" to the shell prompt. + Run the program from this shell prompt. + Crash the program to produce a core dump file. + Load the core dump file to GDB as "gdb gdb ./ program_binary core" . + Type "bt" at the GDB prompt. For infinite loop or frozen keyboard situation, you can force to     crash the program by pressing Ctrl-\ or Ctrl-C or executing “kill -ABRT PID”. (See Secção 9.4.12, “Matar um processo”) Dica Muitas vezes, vê um backtrace onde uma ou mais linhas do topo estão em "malloc()" ou "g_malloc()". Quando isto acontece, há     grandes hipóteses do seu backtrace não ser muito útil. O modo mais fácil de encontrar alguma informação útil é definir a variável de ambiente "$MALLOC_CHECK_" para um valor de 2 (malloc (3)). Pode fazer isto enquanto corre o gdb ao fazer o seguinte. $ MALLOC_CHECK_=2 gdb hello 12.5.4. Comandos gdb avançados Tabela 12.14. Lista de comandos gdb avançados +---------------------------------------------------------------+ | comando | descrição dos objetivos do comando | |----------------+----------------------------------------------| |(gdb) thread |obter um backtrace para todos os processos de | |apply all bt |um programa de multi-processo | |----------------+----------------------------------------------| |(gdb) bt full |obter parâmetros que vêm na pilha das chamadas| | |de função | |----------------+----------------------------------------------|     |(gdb) thread |obtém um backtrace e parâmetros como a | |apply all bt |combinação das opções precedentes | |full | | |----------------+----------------------------------------------| |(gdb) thread |obter um backtrace e parâmetros para as 10 | |apply all bt |chamadas do topo para cortar resultados | |full 10 |irrelevantes | |----------------+----------------------------------------------| |(gdb) set |escreve um relatório dos resultados do gdb | |logging on |para um ficheiro (a predefinição é "gdb.txt") | +---------------------------------------------------------------+ 12.5.5. Verificar a dependência em bibliotecas     Use o ldd(1) para encontrar uma dependência de um programa em bibliotecas com o seguinte. $ ldd /usr/bin/ls librt.so.1 => /lib/librt.so.1 (0x4001e000)     libc.so.6 => /lib/libc.so.6 (0x40030000) libpthread.so.0 => /lib/libpthread.so.0 (0x40153000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)     Para que o ls(1) funcione num ambiente 'chroot', as bibliotecas em cima têm de estar disponíveis no seu ambiente 'chroot'.     Veja Secção 9.4.6, “Rastear as atividades de programas”. 12.5.6. Dynamic call tracing tools There are several dynamic call tracing tools available in Debian.     See Secção 9.4, “Monitorizar, controlar e iniciar as atividades de programas”. 12.5.7. Depurar Erros do X     Se o programa do GNOME preview1 recebeu um erro do X, deverá ver a mensagem que a seguir.     The program 'preview1' received an X Window System error.     Neste caso, pode tentar correr o programa com "--sync" e quebrar a função "gdk_x_error" de modo a obter um backtrace. 12.5.8. Ferramentas de detecção de fugas de memória     Aqui estão várias ferramentas de detecção de fugas de memória em Debian. Tabela 12.15. Lista de ferramentas de detecção de fugas de memória +---------------------------------------------------------------+ | pacote |popcon|tamanho| descrição | |--------------+------+-------+---------------------------------| |libc6-dev |V:248,|12053 |mtrace(1): funcionalidades de | | |I:567 | |depuração do malloc em glibc | |--------------+------+-------+---------------------------------| |valgrind |V:6, |78191 |depurador e perfilador de memória| | |I:37 | | | |--------------+------+-------+---------------------------------|     |electric-fence|V:0, |73 |o depurador malloc(3) | | |I:3 | | | |--------------+------+-------+---------------------------------| |libdmalloc5 |V:0, |390 |biblioteca de depuração de | | |I:2 | |alocação de memória | |--------------+------+-------+---------------------------------| | |V:0, | |library to detect buffer overruns| |duma |I:0 |296 |and under-runs in C and C++ | | | | |programs | |--------------+------+-------+---------------------------------| |leaktracer |V:0, |56 |rastreador de fugas de memória | | |I:1 | |para programas C++ | +---------------------------------------------------------------+ 12.5.9. Desassemblar binário     Pode desassemblar código binário com o objdump(1) com o seguinte.     $ objdump -m i386 -b binary -D /usr/lib/grub/x86_64-pc/stage1 Nota     O gdb(1) pode ser usado para desmontar (desassemblar) código interativamente. 12.6. Build tools Tabela 12.16. List of build tool packages +---------------------------------------------------------------+ | pacote | popcon |tamanho| documentação | |-----------+--------+-------+----------------------------------| |make |V:151, |1592 |"info make" disponibilizado por | | |I:555 | |make-doc | |-----------+--------+-------+----------------------------------| |autoconf |V:31, |2025 |"info autoconf" disponibilizado | | |I:230 | |por autoconf-doc | |-----------+--------+-------+----------------------------------| |automake |V:30, |1837 |"info automake" disponibilizado | | |I:228 | |por automake1.10-doc | |-----------+--------+-------+----------------------------------|     |libtool |V:25, |1213 |"info libtool" provided by | | |I:212 | |libtool-doc | |-----------+--------+-------+----------------------------------| |cmake |V:17, |36607 |cmake(1) cross-platform, | | |I:115 | |open-source make system | |-----------+--------+-------+----------------------------------| |ninja-build|V:6, |428 |ninja(1) small build system | | |I:41 | |closest in spirit to Make | |-----------+--------+-------+----------------------------------| |meson |V:3, |3759 |meson(1) high productivity build | | |I:22 | |system on top of ninja | |-----------+--------+-------+----------------------------------| |xutils-dev |V:0, I:9|1484 |imake(1), xmkmf(1), etc. | +---------------------------------------------------------------+ 12.6.1. Make O Make é um utilitário para manutenção de grupos de programas Após a execução do make(1), o make lê o ficheiro de regras,     "Makefile" e atualiza um alvo se depender de ficheiros pré-requisitados que foram modificados desde que o alvo foi modificado por último, ou se o alvo não existir. A execução destas atualizações pode ocorrer concorrentemente.     A regra de sintaxe do ficheiro é a seguinte. target: [ prerequisites ... ]     [TAB] command1 [TAB] -command2 # ignore errors [TAB] @command3 # suppress echoing Aqui "[TAB]" é um código TAB. Cada linha é interpretada pela     shell após fazer a substituição da variável. Utilize "\" no final de uma linha para continuar o script. Use "$$" para inserir "$" para valores de ambiente para um script de shell.     Podem ser escritas regras implícitas para o destino e pré-requisitos, por exemplo, com o seguinte.     %.o: %.c header.h Aqui, o alvo contém o caractere "%" (exatamente um deles). O "%" pode corresponder a qualquer subcadeia não vazia nos nomes de     ficheiros do próprio alvo. Os pré-requisitos usam igualmente "%" para mostrar como os seus nomes estão relacionados ao próprio nome do alvo. Tabela 12.17. Lista de variáveis automáticas do make +---------------------------------------------------------------+ | variável | valor | | automática | | |-----------------+---------------------------------------------| |$@ |alvo | |-----------------+---------------------------------------------|     |$< |primeiro pré-requisito | |-----------------+---------------------------------------------| |$? |todos os novos pré-requisitos | |-----------------+---------------------------------------------| |$^ |todos os pré-requisitos | |-----------------+---------------------------------------------| |$* |"%" estaminal correspondente no modelo de | | |destino | +---------------------------------------------------------------+ Tabela 12.18. Lista de expansões da variável do make +----------------------------------------+ |expansão da variável| descrição | |--------------------+-------------------|     |foo1 := bar |expansão de uma vez| |--------------------+-------------------| |foo2 = bar |expansão recursiva | |--------------------+-------------------| |foo3 += bar |acrescentar | +----------------------------------------+     Corra "make -p -f/dev/null" para ver as regras internas automáticas. 12.6.2. Autotools     Autotools is a suite of programming tools designed to assist in making source code packages portable to many Unix-like systems. * Autoconf is a tool to produce a shell script "configure" from "configure.ac". + "configure" is used later to produce "Makefile" from "Makefile.in" template.     * Automake is a tool to produce "Makefile.in" from "Makefile.am". * Libtool is a shell script to address the software portability problem when compiling shared libraries from source code. 12.6.2.1. Compilar e instalar um programa Atenção     Não substitua ficheiros do sistema com os seus programas compilados quando os instalar. Debian não toca nos ficheiros em "/usr/local/" ou em "/opt".     Portanto se compilar um programa a partir do código-fonte, instale-o em "/usr/local/" para que não interfira com o Debian. $ cd src     $ ./configure --prefix=/usr/local $ make # this compiles program $ sudo make install # this installs the files in the system 12.6.2.2. Desinstalar um programa Se tiver o código original, se ele utiliza autoconf(1)/automake     (1) e se você lembrar como o configurou, execute como segue para desinstalar o programa.     $ ./configure all-of-the-options-you-gave-it $ sudo make uninstall Em alternativa, se tiver a absoluta certeza que o processo de     instalação apenas coloca ficheiros sob "/usr/local/" e não há lá nada importante, pode apagar todos os seus conteúdos com o seguinte.     # find /usr/local -type f -print0 | xargs -0 rm -f If you are not sure where files are installed, you should     consider using checkinstall(8) from the checkinstall package, which provides a clean path for the uninstall. It now supports to create a Debian package with "-D" option. 12.6.3. Meson     The software build system has been evolving: * Autotools on the top of Make has been the de facto standard for the portable build infrastructure since 1990s. This is extremely slow. * CMake initially released in 2000 improved speed significantly but was originally built on the top of inherently slow Make.     (Now Ninja can be its backend.) * Ninja initially released in 2012 is meant to replace Make for the further improved build speed and is designed to have its input files generated by a higher-level build system. * Meson initially released in 2013 is the new popular and fast higher-level build system which uses Ninja as its backend.     See documents found at "The Meson Build system" and "The Ninja build system". 12.7. Web     Páginas web dinâmicas interactivas podem ser feitas conforme a seguir. * As questões são apresentadas ao explorador do utilizador a usar formulários HTML. * Preencher e clicar nas entradas do formulário envia uma das seguintes cadeias de URL com parâmetros codificados do explorador para o servidor web. + "https://www.foo.dom/cgi-bin/program.pl?VAR1=VAL1&VAR2= VAL2&VAR3=VAL3" + "https://www.foo.dom/cgi-bin/program.py?VAR1=VAL1&VAR2= VAL2&VAR3=VAL3"     + "https://www.foo.dom/program.php?VAR1=VAL1&VAR2=VAL2&VAR3 =VAL3" * O "%nn" no URL é substituído por um caractere com valor hexadecimal nn. * A variável de ambiente está definida como: "QUERY_STRING= "VAR1=VAL1 VAR2=VAL2 VAR3=VAL3"". * O programa CGI (qualquer um de "program.*") no servidor web executa-se a si próprio com a variável de ambiente "$QUERY_STRING". * O stdout do programa CGI é enviado ao explorador web e é apresentado como uma página web dinâmica e interactiva. Por razões de segurança é melhor não embarcar em novos hacks para analisar parâmetros CGI. Existem módulos definidos para eles em     Perl e Python. O PHP vem com estas funcionalidades. Quando é necessário o armazenamento de dados no cliente, usam-se cookies HTTP. Quando é necessário o processamento de dados no lado do cliente, usa-se frequentemente Javascript.     Para mais, veja Common Gateway Interface, The Apache Software Foundation e JavaScript. Procurar "CGI tutorial" no Google ao escrever directamente o URL     codificado https://www.google.com/search?hl=en&ie=UTF-8&q= CGI+tutorial no endereço do explorador é uma boa maneira de ver o script CGI em acção no servidor da Google. 12.8. A tradução do código-fonte     Existem programas para converter código-fonte. Tabela 12.19. Lista de ferramentas de tradução de código-fonte +---------------------------------------------------------------+ | pacote |popcon|tamanho| palavra | descrição | | | | | chave | | |---------+------+-------+---------+----------------------------| |perl |V:707,|673 |AWK→PERL |converter código-fonte de | | |I:989 | | |AWK para PERL: a2p(1) |     |---------+------+-------+---------+----------------------------| | |V:0, | | |converter código-fonte de | |f2c |I:3 |442 |FORTRAN→C|FORTRAN 77 para C/C++: f2c | | | | | |(1) | |---------+------+-------+---------+----------------------------| | |V:0, | | |conversor de NASM (formato | |intel2gas|I:0 |178 |intel→gas|Intel) ao GNU Assembler | | | | | |(GAS) | +---------------------------------------------------------------+ 12.9. Criar um pacote Debian     Se desejar criar um pacote Debian, leia o seguinte. * Capítulo 2, Gestão de pacotes Debian para compreender o sistema básico de pacotes * Secção 2.7.13, “Portar um pacote ao sistema stable” para compreender o processo básico de portar * Secção 9.11.4, “Sistema chroot” para compreender as técnicas de chroot básicas     * debuild(1), and sbuild(1) * Secção 12.5.2, “Depurar o pacote Debian” para recompilar para depuração * Guia dos Novos Maintainers da Debian (o pacote debmake-doc) * Referência de Programadores da Debian (o pacote developers-reference) * Manual de Políticas Debian (o pacote debian-policy)     Existem pacotes como os debmake, dh-make, dh-make-perl, etc., que auxiliam no processo em empacotamento. ---------------------------------------------------------------------     ^[7] Some tweaks may be required to get them work under the current system. Apêndice A. Apêndice     Aqui estão as origens deste documento. A.1. o labirinto Debian O sistema Linux é uma plataforma de computação muito poderosa para um computador em rede. No entanto, aprender a usar todas as     suas capacidades não é fácil. Configurar a lista de trabalhos de impressora LPR com uma impressora não-PostScript era um bom exemplo para tropeçar. (Não existe mais esse problema porque as instalações recentes usam o novo sistema CUPS.) Existe um mapa completo e detalhado chamado o "CÓDIGO FONTE". Este é muito preciso mas muito difícil de compreender. Existem também referências chamadas HOWTO e mini-HOWTO. São mais fáceis     de compreender mas tendem a dar-lhe demasiados detalhes e a perder o objetivo principal. Por vezes tenho problemas a encontrar a secção correcta num HOWTO longo quando preciso de invocar alguns comandos. Espero que este "Debian Reference (versão 2.125)" (2024-11-15     13:32:55 UTC) disponibilize um bom ponto de partida para pessoas no labirinto Debian. A.2. História do Copyright O Debian Reference foi iniciado por mim, Osamu Aoki como um memo pessoal de administração do sistema. Muitos conteúdos vieram do conhecimento que ganhei a partir da lista de email debian-user e de outros recursos Debian. A seguir uma sugestão de Josip Rodin, que estava muito ativo com     o Projecto de Documentação de Debian (DDP), o "Debian Reference (versão 1, 2001-2007)" foi criado como parte dos documentos DDP. Após 6 anos, percebi que a "Debian Reference (versão 1)" estava     ultrapassada e comecei a reescrever muitos dos seus conteúdos. A nova "Debian Reference (versão 2)" é lançada em 2008. I have updated "Debian Reference (version 2)" to address new topics (Systemd, Wayland, IMAP, PipeWire, Linux kernel 5.10) and     removed outdated topics (SysV init, CVS, Subversion, SSH protocol 1, Linux kernels before 2.5). References to Jessie 8 (2015-2020) release situation or older are mostly removed. This "Debian Reference (version 2.125)" (2024-11-15 13:32:55 UTC)     covers mostly Bookworm (=stable) and Trixie (=testing) Debian releases.     Os conteúdos do tutorial pode ser rastreados até à sua origem e inspiração com o seguinte. * "Guia do Utilizador de Linux" por Larry Greenfield (Dezembro 1996) + tornado obsoleto pelo "Debian Tutorial" * "Debian Tutorial" por Havoc Pennington. (11 Dezembro, 1998) + parcialmente escrito por Oliver Elphick, Ole Tetlie,     James Treacy, Craig Sawyer e Ivan E. Moore II + tornado obsoleto por "Debian GNU/Linux: Guia de Instalação e Utilização" * "Debian GNU/Linux: Guia de Instalação e Utilização" por John Goerzen e Ossama Othman (1999) + tornado obsoleto pela "Debian Reference (versão 1)"     A descrição do pacote e do arquivo podem rastrear alguma da origem e inspiração dele no seguinte.     * "FAQ do Debian" (versão de Março 2002, quando era mantido por Josip Rodin)     Os outros conteúdos podem rastrear alguma da origem e inspiração deles no seguinte. * "Debian Reference (versão 1)" por Osamu Aoki (2001–2007)     + tornado obsoleto pela nova "Debian Reference (versão 2)" em 2008.     A "Debian Reference (versão 1)" anterior foi criada com muitos contribuidores. * a maior contribuição de conteúdo de tópicos de configuração de rede por Thomas Hood * contribuição significativa de conteúdos em tópicos relacionados com X e VCS por Brian Nelson     * a ajuda na construção de scripts de compilação e muitas correcções no conteúdo por Jens Seidel * revisão extensiva por David Sewell * muitas contribuições pelos tradutores, contribuidores e relatórios de bugs Many manual pages and info pages on the Debian system as well as upstream web pages and Wikipedia documents were used as the primary references to write this document. To the extent Osamu     Aoki considered within the fair use, many parts of them, especially command definitions, were used as phrase pieces after careful editorial efforts to fit them into the style and the objective of this document. A descrição do depurador gdb foi expandida a usar Conteúdos wiki     Debian de backtrace com consentimento de Ari Pollak, Loïc Minier e Dafydd Harries. O conteúdo do "Debian Reference (versão 2.125)" (2024-11-15     13:32:55 UTC) é maioritariamente trabalho meu com excepção do descrito acima. Este foi também atualizado pelos contribuidores.     O Documento "Debian Reference (versão 2)" foi traduzido por Américo Monteiro a_monteiro_AT_netcabo.pt.     O autor, Osamu Aoki, agradece a todos os que ajudaram a tornar possível este documento. A.3. Formato do documento The source of the English original document is currently written     in DocBook XML files. This Docbook XML source are converted to HTML, plain text, PostScript, and PDF. (Some formats may be skipped for distribution.)