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

Definir ou redefinir senha

No terminal:

$ sudo passwd [USERNAME]

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

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:

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

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