# Semana 3: Administração mínima do sistema > **Importante!** Este material foi elaborado para ser lido em terminais e > acompanhado (e praticado) em dispositivos de desktop! ## Perguntas-chave - O que fazer após a instalação do Debian? - Usuário root ou com poderes de super-usuário? - Como atualizar o sistema? - Como instalar e desinstalar programas? - Como obter uma lista dos programas disponíveis? - Como listar os programas instalados? ## Definir ou redefinir senha No terminal: ``` $ sudo passwd [USERNAME] ``` - O utilitário `passwd` altera a senha de qualquer usuário. - Quando se trata do usuário `root`, a informação de seu nome é opcional. > Por convenção, argumentos apresentados entre colchetes são sempre opcionais, > a menos que se especifique o contrário. ## Alterar nome da máquina (hostname) Na instalação, eu cometi um erro de digitação do nome da máquina, por isso, teremos que aletrá-lo! ### Verificando o problema Utilitário `hostname`: ``` $ hostname trila ``` Arquivo `/etc/hostname`: ``` $ cat /etc/hostname trila ``` Arquivo `/etc/hosts`: ``` $ cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 trila # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters ``` Utilitário `hostnamectl`: ``` Static hostname: trila Icon name: computer-vm Chassis: vm 🖴 Machine ID: 56bb08bff9e14b7bb18bf4810ad5eabc Boot ID: 38af6c1545474fbb8f502e409a8d89df Virtualization: kvm Operating System: Debian GNU/Linux trixie/sid Kernel: Linux 6.6.13-amd64 Architecture: x86-64 Hardware Vendor: QEMU Hardware Model: Standard PC _Q35 + ICH9, 2009_ Firmware Version: 2023.11-6 Firmware Date: Sat 2024-02-10 Firmware Age: 1w blau@trila:~$ cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 trila # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters ``` ### Alterando o nome da máquina com o utilitário hostnamectl Como `root` ou com `sudo`: ``` # hostnamectl set-hostname NOVO_NOME ``` Para conferir as informações de *hostname*: ``` $ hostnamectl ``` ### Alterando o arquivo /etc/hosts Conteúdo atual: ``` $ vi /etc/hosts ``` - Para começar a editar, tecle `i`. - Para salvar e sair, tecle `ESC : x ENTER`. > **Importante!** Sempre confira se a alteração foi bem-sucedida! ## Atualização do sistema (Debian) > **Nota:** só precisaremos reiniciar o sistema quando houver atualizações do > kernel. ### Atualização do cache de pacotes Como `root` ou com `sudo`: ``` # apt update ``` ### Listar atualizações disponíveis Como usuário normal: ``` $ apt list --upgradable ``` ### Aplicar atualizações de forma "conservadora" Como `root` ou com `sudo`: ``` # apt upgrade ``` ### Aplicar todas as atualizações Como `root` ou com `sudo`: ``` # apt full-upgrade ``` ### Remover pacotes desnecessários Como `root` ou com `sudo`: ``` # apt autoremove ``` ### Limpar configurações residuais Como `root` ou com `sudo`: ``` # apt purge ~c ``` ## Instalação e desinstalação de pacotes (Debian) Para os próximos encontros, precisamos garantir que os seguintes programas estejam instalados: - `git`: Sistema de controle de versões; - `gawk`: Implementação GNU da linguagem AWK; - `lynx`: Navegador web pelo terminal; - `w3m`: Navegador web pelo terminal; - `vim`: Compilação mais completa do editor Vim (`vim-common`); - `fzf`: Buscador *fuzzy* de propósito geral (utilizaremos em scripts); - `build-essential`: Coleção de bibliotecas e compiladores C/C++. ### Instalar pacotes Como `root` ou com `sudo`: ``` # apt install PACOTES ``` ### Remover pacotes instalados Como `root` ou com `sudo`: ``` # apt purge PACOTES ``` ## Encontrar pacotes disponíveis no Debian ### Debian Package Tracker - URL: - Digite o nome do pacote no campo de busca. - Na página do pacote, verifique a disponibilidade para o seu *release* na caixa com o nome **versions**. ### Ferramentas do apt Como usuário normal: ``` $ apt-cache search '.*' ``` Hoje, esta lista resulta em mais de 70 mil pacotes! Para reduzir os resultados, nós podemos filtrá-lo com uma expressão regular mais específica e a opção `--names-only`. Por exemplo: ``` $ apt-cache search --names-only 'w3m' w3m - paginador para navegação WWW com excelente suporte a tabelas/quadros w3m-el - interface Emacs simples para w3m w3m-img - Utilitários com suporte a imagens embutidas para w3m w3m-el-snapshot - simple Emacs interface of w3m (development version) ``` > **Nota:** se você ainda não souber expressões regulares, não se preocupe, > porque o padrão que você digitar será buscado em qualquer parte do nome do > pacote. Existem outras formas de listar e buscar pelos pacotes disponíveis, mas esta tem a vantagem de ser simples e ainda trazer uma breve descrição dos pacotes encontrados. Caso queiramos uma descrição mais completa, podemos executar: ``` $ apt search '^w3m' Sorting... Pronto Full Text Search... Pronto w3m/unstable,now 0.5.3+git20230121-2+b2 amd64 [installed] paginador para navegação WWW com excelente suporte a tabelas/quadros w3m-el/unstable 1.4.632+0.20210201.2305.54c3ccd-3 all interface Emacs simples para w3m w3m-el-snapshot/unstable 1.4.632+0.20221206.2328.4f27810-1 all simple Emacs interface of w3m (development version) w3m-img/unstable,now 0.5.3+git20230121-2+b2 amd64 [installed,automatic] Utilitários com suporte a imagens embutidas para w3m ``` Se ainda não for completa o bastante, é só executar: ``` $ apt info '^w3m' ``` ## Listar pacotes instalados no Debian Antes de vermos as várias formas de listar os pacotes instalados no Debian, é preciso observar que, na maioria das vezes, um pacote dependerá da instalação de outros pacotes. Sendo assim, é muito difícil listar apenas aqueles que nós instalamos ativamente usando o `apt`. ### Usando o próprio apt ``` $ apt list --installed ``` Um problema do utilitário `apt` é que ele não oferece uma interface CLI confiável e faz questão de deixar isso claro emitindo o aviso abaixo quando utilizado, por exemplo, em um *pipe*: ``` WARNING: apt does not have a stable CLI interface. Use with caution in scripts. ``` Como essa mensagem é impressa na ***saída padrão de erros*** (`STDERR`), nós podemos omiti-la redirecionando-a para o dispositivo nulo `/dev/null`. Se o redirecionamento: ``` $ apt list --installed | wc -l WARNING: apt does not have a stable CLI interface. Use with caution in scripts. 342 ``` Com o redirecionamento: ``` $ apt list --installed 2> /dev/null | wc -l 342 ``` Outro problema que afeta o uso do `apt list`, principalmente em scripts, é que ele emite a mensagem `Listing...` pela ***saída padrão*** (`STDOUT`): ``` $ apt list --installed 2> /dev/null | head -5 Listing... adduser/unstable,now 3.137 all [installed] apparmor/unstable,now 3.0.12-1+b2 amd64 [installed,automatic] apt-listchanges/unstable,now 3.27 all [installed] apt-utils/unstable,now 2.7.10 amd64 [installed] ``` Isso exige algum tipo de filtragem extra, como: ``` $ apt list --installed 2> /dev/null | grep -v 'Listing...' | head -5 adduser/unstable,now 3.137 all [installed] apparmor/unstable,now 3.0.12-1+b2 amd64 [installed,automatic] apt-listchanges/unstable,now 3.27 all [installed] apt-utils/unstable,now 2.7.10 amd64 [installed] apt/unstable,now 2.7.10 amd64 [installed] ``` ### Usando o utilitário dpkg A opção `-l` do `dpkg` lista os pacotes instalados em uma tabela com várias outras informações: ``` $ dpkg -l ``` Como o `dpkg` possui uma interface CLI confiável, nós podemos filtrar as linhas para obter o resultado desejado. Por exemplo: ``` $ dpkg -l | awk '$2 ~ /^python/ {print $2}' python-apt-common python3 python3-apt python3-certifi python3-chardet python3-charset-normalizer python3-debconf python3-debian python3-debianbts python3-httplib2 python3-idna python3-minimal python3-pkg-resources python3-pycurl python3-pyparsing python3-pysimplesoap python3-reportbug python3-requests python3-six python3-urllib3 python3.11 python3.11-minimal ``` Contudo, o `dpkg` possui uma ferramenta específica para filtrar os dados exibidos nos resultados... ### Usando o utilitário dpkg-query Com o `dpkg-query`, nós podemos escolher quais campos da tabela deverão ser impressos no terminal. Por exemplo, para vermos apenas os nomes dos pacotes: ``` $ dpkg-query -W -f='${Package}\n' | head -5 adduser apparmor apt apt-listchanges apt-utils ``` > **Nota:** o comando é longo e difícil de memorizar, mas pode ser facilmente > utilizado em scripts ou através de "apelidos".