4.3 Lição 2
Certificação: |
Linux Essentials |
---|---|
Versão: |
1.6 |
Tópico: |
4 O sistema operacional Linux |
Objetivo: |
4.3 Onde os dados são armazenados |
Lição: |
2 de 2 |
Introdução
Depois de explorar os programas e seus arquivos de configuração, vamos aprender como os comandos são executados como processos. Da mesma forma, trataremos das mensagens do sistema, do uso do buffer de anel do kernel e de como a chegada do systemd
e seu daemon de diário — journald
— mudou a maneira como as coisas eram feitas até então com relação aos registros do sistema.
Processos
Sempre que um usuário emite um comando, um programa é executado e um ou mais processos são gerados.
Os processos existem dentro de uma hierarquia. Depois que o kernel é carregado na memória durante a inicialização, é iniciado o primeiro processo que — por sua vez — inicia outros processos, os quais também podem iniciar outros processos. Cada processo possui um identificador exclusivo (PID
) e um identificador do processo pai (PPID
). Estes são números inteiros positivos atribuídos em ordem sequencial.
Explorando os processos dinamicamente: top
Para obter uma lista dinâmica de todos os processos em execução, usamos o comando top
:
$ top top - 11:10:29 up 2:21, 1 user, load average: 0,11, 0,20, 0,14 Tasks: 73 total, 1 running, 72 sleeping, 0 stopped, 0 zombie %Cpu(s): 0,0 us, 0,3 sy, 0,0 ni, 99,7 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st KiB Mem : 1020332 total, 909492 free, 38796 used, 72044 buff/cache KiB Swap: 1046524 total, 1046524 free, 0 used. 873264 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 436 carol 20 0 42696 3624 3060 R 0,7 0,4 0:00.30 top 4 root 20 0 0 0 0 S 0,3 0,0 0:00.12 kworker/0:0 399 root 20 0 95204 6748 5780 S 0,3 0,7 0:00.22 sshd 1 root 20 0 56872 6596 5208 S 0,0 0,6 0:01.29 systemd 2 root 20 0 0 0 0 S 0,0 0,0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0,0 0,0 0:00.02 ksoftirqd/0 5 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 kworker/0:0H 6 root 20 0 0 0 0 S 0,0 0,0 0:00.00 kworker/u2:0 7 root 20 0 0 0 0 S 0,0 0,0 0:00.08 rcu_sched 8 root 20 0 0 0 0 S 0,0 0,0 0:00.00 rcu_bh 9 root rt 0 0 0 0 S 0,0 0,0 0:00.00 migration/0 10 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 lru-add-drain (...)
Como vimos acima, top
também fornece informações sobre o consumo de memória e CPU do sistema em geral, bem como sobre cada processo.
O top
permite uma certa interação do usuário.
Por padrão, a saída é classificada pela porcentagem de tempo da CPU usada por cada processo em ordem decrescente. Esse comportamento pode ser modificado pressionando as seguintes teclas de dentro de top
:
M
-
Classifica por uso da memória.
N
-
Classifica pelo número de identificação do processo.
T
-
Classifica pelo tempo de execução.
P
-
Classifica pela porcentagem de uso da CPU.
Para alternar entre ordem crescente e decrescente, pressione R
.
Tip
|
Uma versão mais sofisticada e amigável do |
Um instantâneo dos processos: ps
Outro comando muito útil para obter informações sobre processos é o ps
. Enquanto top
fornece informações dinâmicas, as do ps
são estáticas.
Se invocado sem opções, a saída do ps
é bastante específica e se refere apenas aos processos vinculados ao shell atual:
$ ps PID TTY TIME CMD 2318 pts/0 00:00:00 bash 2443 pts/0 00:00:00 ps
As informações exibidas relacionam-se ao identificador do processo (PID
), ao terminal no qual o processo está sendo executado (TTY
), ao tempo de CPU usado pelo processo (TIME
) e ao comando que iniciou o processo (CMD
).
Uma opção útil para o ps
é -f
, que mostra a listagem em formato completo:
$ ps -f UID PID PPID C STIME TTY TIME CMD carol 2318 1682 0 08:38 pts/1 00:00:00 bash carol 2443 2318 0 08:46 pts/1 00:00:00 ps -f
Em combinação com outras opções, -f
mostra a relação entre os processos pai e filho:
$ ps -uf USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND carol 2318 0.0 0.1 21336 5140 pts/1 Ss 08:38 0:00 bash carol 2492 0.0 0.0 38304 3332 pts/1 R+ 08:51 0:00 \_ ps -uf carol 1780 0.0 0.1 21440 5412 pts/0 Ss 08:28 0:00 bash carol 2291 0.0 0.7 305352 28736 pts/0 Sl+ 08:35 0:00 \_ emacs index.en.adoc -nw (...)
Da mesma forma, o ps
pode exibir a porcentagem de memória usada quando invocado com a opção -v
:
$ ps -v PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND 1163 tty2 Ssl+ 0:00 1 67 201224 5576 0.1 /usr/lib/gdm3/gdm-x-session (...) (...)
Note
|
Um outro comando visualmente atraente para exibir a hierarquia de processos é o |
Informações sobre processos no diretório /proc
Já vimos o sistema de arquivos /proc
. O /proc
inclui um subdiretório numerado para cada processo em execução no sistema (o número é o PID
do processo):
carol@debian:~# ls /proc 1 108 13 17 21 27 354 41 665 8 9 10 109 14 173 22 28 355 42 7 804 915 103 11 140 18 23 29 356 428 749 810 918 104 111 148 181 24 3 367 432 75 811 105 112 149 19 244 349 370 433 768 83 106 115 15 195 25 350 371 5 797 838 107 12 16 2 26 353 404 507 798 899 (...)
Assim, todas as informações sobre um processo específico são incluídas dentro de seu diretório. Vamos listar o conteúdo do primeiro processo — aquele cujo PID
é 1
(a saída foi truncada para facilitar a leitura):
# ls /proc/1/ attr cmdline environ io mem ns autogroup comm exe limits mountinfo numa_maps auxv coredump_filter fd loginuid mounts oom_adj ...
Você pode verificar — por exemplo — o executável do processo:
# cat /proc/1/cmdline; echo /sbin/init
Como vemos, o binário que iniciou a hierarquia de processos era /sbin/init
.
Note
|
Podemos concatenar comandos com ponto e vírgula ( |
A carga do sistema
Potencialmente, cada processo em um sistema consome recursos. A chamada carga do sistema tenta agregar a carga geral do sistema em um único indicador numérico. Podemos ver a carga atual com o comando uptime
:
$ uptime 22:12:54 up 13 days, 20:26, 1 user, load average: 2.91, 1.59, 0.39
Os três últimos dígitos indicam a média de carga do sistema para o último minuto (2,91
), os últimos cinco minutos (1.59
) e os últimos quinze minutos (0.39
), respectivamente.
Cada um desses números indica quantos processos estavam aguardando recursos da CPU ou a conclusão das operações de entrada/saída. Isso significa que esses processos estavam prontos para a execução quando recebessem os respectivos recursos.
Registro do sistema e mensagens do sistema
Quando o kernel e os processos começam ser executados e a se comunicar entre si, muitas informações são produzidas. A maior parte é enviada para arquivos — os chamados arquivos de registro ou, simplesmente, logs.
Sem esses registros, a busca por um evento que ocorreu em um servidor seria uma verdadeira dor de cabeça para os administradores de sistemas, daí a importância de ter uma maneira padronizada e centralizada de acompanhar os eventos do sistema. Além disso, os logs são claros e determinantes para a solução de problemas e questões de segurança, além de serem fontes de dados confiáveis para entender as estatísticas do sistema e prever tendências.
Registros com o Daemon syslog
Tradicionalmente, as mensagens do sistema são gerenciadas pelo recurso de registro padrão — syslog — ou um de seus derivados — syslog-ng ou rsyslog. O daemon de log coleta mensagens de outros serviços e programas e as armazena em arquivos de log, normalmente em /var/log
. No entanto, alguns serviços cuidam de seus próprios logs (por exemplo, o servidor web Apache HTTPD). Da mesma forma, o kernel do Linux usa um buffer de anel na memória para armazenar suas mensagens de log.
Arquivos de registro em /var/log
Como os registros são dados que variam ao longo do tempo, normalmente eles são encontrados em /var/log
.
Se você explorar /var/log
, perceberá que os nomes dos logs são — até certo ponto — bastante auto-explicativos. Eis alguns exemplos:
/var/log/auth.log
-
Armazena informações sobre a autenticação.
/var/log/kern.log
-
Armazena informações do kernel.
/var/log/syslog
-
Armazena informações do sistema.
/var/log/messages
-
Armazena dados do sistema e aplicativos.
Note
|
O nome exato e o conteúdo dos arquivos de log podem variar nas diferentes distribuições Linux. |
Acessando arquivos de log
Ao explorar arquivos de log, você precisa ser root (se não tiver permissões de leitura) e usar um paginador como less
:
# less /var/log/messages Jun 4 18:22:48 debian liblogging-stdlog: [origin software="rsyslogd" swVersion="8.24.0" x-pid="285" x-info="http://www.rsyslog.com"] rsyslogd was HUPed Jun 29 16:57:10 debian kernel: [ 0.000000] Linux version 4.9.0-8-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.130-2 (2018-10-27) Jun 29 16:57:10 debian kernel: [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-8-amd64 root=/dev/sda1 ro quiet
Outra alternativa é usar tail
com a opção -f
para ler as mensagens mais recentes do arquivo e exibir dinamicamente as novas linhas conforme elas são incluídas:
# tail -f /var/log/messages Jul 9 18:39:37 debian kernel: [ 2.350572] RAPL PMU: hw unit of domain psys 2^-0 Joules Jul 9 18:39:37 debian kernel: [ 2.512802] input: VirtualBox USB Tablet as /devices/pci0000:00/0000:00:06.0/usb1/1-1/1-1:1.0/0003:80EE:0021.0001/input/input7 Jul 9 18:39:37 debian kernel: [ 2.513861] Adding 1046524k swap on /dev/sda5. Priority:-1 extents:1 across:1046524k FS Jul 9 18:39:37 debian kernel: [ 2.519301] hid-generic 0003:80EE:0021.0001: input,hidraw0: USB HID v1.10 Mouse [VirtualBox USB Tablet] on usb-0000:00:06.0-1/input0 Jul 9 18:39:37 debian kernel: [ 2.623947] snd_intel8x0 0000:00:05.0: white list rate for 1028:0177 is 48000 Jul 9 18:39:37 debian kernel: [ 2.914805] IPv6: ADDRCONF(NETDEV_UP): enp0s3: link is not ready Jul 9 18:39:39 debian kernel: [ 4.937283] e1000: enp0s3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX Jul 9 18:39:39 debian kernel: [ 4.938493] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s3: link becomes ready Jul 9 18:39:40 debian kernel: [ 5.315603] random: crng init done Jul 9 18:39:40 debian kernel: [ 5.315608] random: 7 urandom warning(s) missed due to ratelimiting
A saída aparecerá no seguinte formato:
-
Registro de data e hora
-
Nome do host do qual a mensagem veio
-
Nome do programa/serviço que gerou a mensagem
-
PID do programa que gerou a mensagem
-
Descrição da ação que ocorreu
A maioria dos arquivos de registro é gravada em texto simples; no entanto, alguns podem conter dados binários, como é o caso de /var/log/wtmp
— que armazena dados relevantes para logins bem-sucedidos. Você pode usar o comando file
para determinar qual é o caso:
$ file /var/log/wtmp /var/log/wtmp: dBase III DBT, version number 0, next free block index 8
Esses arquivos são normalmente lidos usando comandos especiais. last
é usado para interpretar os dados em /var/log/wtmp
:
$ last carol tty2 :0 Thu May 30 10:53 still logged in reboot system boot 4.9.0-9-amd64 Thu May 30 10:52 still running carol tty2 :0 Thu May 30 10:47 - crash (00:05) reboot system boot 4.9.0-9-amd64 Thu May 30 09:11 still running carol tty2 :0 Tue May 28 08:28 - 14:11 (05:42) reboot system boot 4.9.0-9-amd64 Tue May 28 08:27 - 14:11 (05:43) carol tty2 :0 Mon May 27 19:40 - 19:52 (00:11) reboot system boot 4.9.0-9-amd64 Mon May 27 19:38 - 19:52 (00:13) carol tty2 :0 Mon May 27 19:35 - down (00:03) reboot system boot 4.9.0-9-amd64 Mon May 27 19:34 - 19:38 (00:04)
Note
|
Assim como |
Rotação do log
Os arquivos de log podem crescer muito em algumas semanas ou meses e ocupar todo o espaço livre em disco. Para resolver isso, usamos o utilitário logrotate
. Ele implementa a rotação ou ciclo de log, que implica ações como mover arquivos de log para um novo nome, arquivando-os e/ou compactando-os, às vezes enviando-os por email para o administrador do sistema e, eventualmente, excluindo-os à medida que envelhecem. Há várias convenções usadas para nomear esses arquivos de log rotacionados (por exemplo, adicionando um sufixo com a data); no entanto, o mais comum é adicionar um sufixo com um número inteiro:
# ls /var/log/apache2/ access.log error.log error.log.1 error.log.2.gz other_vhosts_access.log
Note que error.log.2.gz
já foi compactado com o gzip
(daí o sufixo .gz
).
O buffer do anel do kernel
O buffer de anel do kernel é uma estrutura de dados de tamanho fixo que registra as mensagens de inicialização do kernel. A função desse buffer — importantíssima — é registrar todas as mensagens do kernel produzidas na inicialização — quando o syslog
ainda não está disponível. O comando dmesg
imprime na tela o buffer de anel do kernel (que também costumava ser armazenado em /var/log/dmesg
). Devido à extensão do buffer de anel, este comando é normalmente usado em combinação com o utilitário de filtragem de texto grep
ou um paginador como o less
. Por exemplo, para procurar mensagens de inicialização:
$ dmesg | grep boot [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro quiet [ 0.000000] smpboot: Allowing 1 CPUs, 0 hotplug CPUs [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro quiet [ 0.144986] AppArmor: AppArmor disabled by boot time parameter (...)
Note
|
Conforme o buffer de anel do kernel vai crescendo com novas mensagens, as mais antigas desaparecem. |
O diário do sistema: systemd-journald
A partir de 2015, o systemd substituiu o SysV Init como gerenciador de sistemas e serviços na maioria das principais distribuições Linux. Como conseqüência, o daemon do diário — journald — tornou-se o componente de registro padrão, sobrepondo-se ao syslog na maioria dos aspectos. Os dados não são mais armazenados em texto simples, mas em formato binário. Assim, o utilitário journalctl
é necessário para ler os logs. Além disso, o journald é compatível com syslog e pode ser integrado ao syslog.
journalctl
é o utilitário usado para ler e consultar o banco de dados do diário do systemd. Quando invocado sem opções, ele imprime o diário inteiro:
# journalctl -- Logs begin at Tue 2019-06-04 17:49:40 CEST, end at Tue 2019-06-04 18:13:10 CEST. -- jun 04 17:49:40 debian systemd-journald[339]: Runtime journal (/run/log/journal/) is 8.0M, max 159.6M, 151.6M free. jun 04 17:49:40 debian kernel: microcode: microcode updated early to revision 0xcc, date = 2019-04-01 Jun 04 17:49:40 debian kernel: Linux version 4.9.0-8-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) Jun 04 17:49:40 debian kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-8-amd64 root=/dev/sda1 ro quiet (...)
No entanto, se chamado com as opções -k
ou --dmesg
, será equivalente ao uso do comando dmesg
:
# journalctl -k [ 0.000000] Linux version 4.9.0-9-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.168-1+deb9u2 (2019-05-13) [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro quiet (...)
Dentre as outras opções interessantes para o journalctl
estão:
-b
,--boot
-
Mostra informações de inicialização.
-u
-
Mostra mensagens sobre uma unidade especificada. Grosso modo, uma unidade pode ser definida como qualquer recurso tratado pelo systemd. Por exemplo,
journalctl -u apache2.service
é usado para ler mensagens sobre o servidor webapache2
. -f
-
Mostra as mensagens mais recentes do diário e segue imprimindo novas entradas à medida que elas são incluídas no diário — a exemplo de
tail -f
.
Exercícios Guiados
-
Analise esta lista de
top
e responda às questões a seguir:carol@debian:~$ top top - 13:39:16 up 31 min, 1 user, load average: 0.12, 0.15, 0.10 Tasks: 73 total, 2 running, 71 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.1 us, 0.4 sy, 0.0 ni, 98.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1020332 total, 698700 free, 170664 used, 150968 buff/cache KiB Swap: 1046524 total, 1046524 free, 0 used. 710956 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 605 nobody 20 0 1137620 132424 34256 S 6.3 13.0 1:47.24 ntopng 444 www-data 20 0 364780 4132 2572 S 0.3 0.4 0:00.44 apache2 734 root 20 0 95212 7004 6036 S 0.3 0.7 0:00.36 sshd 887 carol 20 0 46608 3680 3104 R 0.3 0.4 0:00.03 top 1 root 20 0 56988 6688 5240 S 0.0 0.7 0:00.42 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.09 ksoftirqd/0 4 root 20 0 0 0 0 S 0.0 0.0 0:00.87 kworker/0:0 (...)
-
Quais processos foram iniciados pelo usuário
carol
? -
Qual diretório virtual de
/proc
você deve visitar para encontrar dados relacionados ao comandotop
? -
Qual processo foi executado primeiro? Como você descobriu?
-
Complete a tabela especificando em qual área da saída de
top
encontramos as seguintes informações:Informações sobre … Área de resumo Área de tarefas Memória
Swap
PID
Tempo da CPU
Comandos
-
-
Qual comando é usado para ler os registros binários a seguir?
-
/var/log/wtmp
-
/var/log/btmp
-
/run/log/journal/2a7d9730cd3142f4b15e20d6be631836/system.journal
-
-
Em combinação com
grep
, quais comandos você usaria para descobrir as seguintes informações sobre seu sistema Linux?-
Data da última reinicialização do sistema (
wtmp
) -
Quais são os discos rígidos instalados (
kern.log
) -
Quando foi feito o último login (
auth.log
)
-
-
Quais dois comandos você usaria para exibir o buffer de anel do kernel?
-
Indique o local a que pertencem as seguintes mensagens de log:
-
Jul 10 13:37:39 debian dbus[303]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
Jul 10 11:23:58 debian kernel: [ 1.923349] usbhid: USB HID core driver
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
Jul 10 14:02:53 debian sudo: pam_unix(sudo:session): session opened for user root by carol(uid=0)
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
Jul 10 11:23:58 debian NetworkManager[322]: <info> [1562750638.8672] NetworkManager (version 1.6.2) is starting…
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
-
Use
journalctl
para encontrar informações sobre as seguintes unidades:Unidade Comando ssh
networking
rsyslog
cron
Exercícios Exploratórios
-
Retome a saída de
top
dos exercícios guiados e responda às seguintes questões:-
Quais são as duas etapas a seguir para eliminar o servidor web apache?
-
Na área de resumo, como seria possivel exibir as informações sobre a memória física e a memória swap usando barras de progresso?
-
Agora, classifique os processos pelo uso da memória:
-
Agora que as informações sobre a memória estão sendo exibidas em barras de progresso e os processos classificados pelo uso da memória, salve essas configurações para torná-las padrão na próxima vez que você usar o
top
: -
Qual arquivo armazena as configurações de
top
? Onde ele fica? Como você pode verificar sua existência?
-
-
Aprenda sobre o comando
exec
no Bash. Tente demonstrar sua funcionalidade iniciando uma sessão do Bash e encontrando o processo do Bash comps
. Depois, executeexec /bin/sh
e busque novamente pelo processo com o mesmo PID. -
Siga estes passos para explorar os eventos do kernel e o gerenciamento dinâmico de dispositivos do udev:
-
Conecte um drive USB ao seu computador. Rode o
dmesg
e preste atenção às últimas linhas. Qual a linha mais recente? -
Tendo em mente a saída do comando anterior, execute
ls /dev/sd*
e verifique se seu drive USB aparece na lista. Qual a saída? -
Agora, remova o drive USB e execute
dmesg
outra vez. O que diz a linha mais recente? -
Execute
ls /dev/sd*
novamente e verifique se o dispositivo sumiu da lista. Qual a saída?
-
Resumo
No contexto do armazenamento de dados, os seguintes tópicos foram discutidos nesta lição: gerenciamento de processos e registros e mensagens do sistema.
Em relação ao gerenciamento de processos, aprendemos o seguinte:
-
Os programas geram processos e os processos existem numa hierarquia.
-
Cada processo tem um identificador único (
PID
) e um identificador do processo pai (PPID
). -
top
é um comando muito útil para explorar de maneira dinâmica e interativa os processos em execução no sistema. -
ps
pode ser usado para obter um instantâneo dos processos atualmente em execução no sistema. -
O diretório
/proc
inclui diretórios para cada um dos processos em execução no sistema, nomeados de acordo com o PID de cada um. -
O conceito de carga média do sistema — utilíssimo para conferir a utilização/sobrecarga da CPU.
Em relação ao log do sistema, devemos lembrar que:
-
Um log é um arquivo em que os eventos do sistema são registrados. Os logs são inestimáveis para a solução de problemas.
-
O log tradicionalmente é tratado por serviços especiais como syslog, syslog-ng ou rsyslog. No entanto, alguns programas usam seus próprios daemons de registro.
-
Como os logs são dados variáveis, eles são mantidos em
/var
e — às vezes — seus nomes dão uma pista sobre o conteúdo (kern.log
,auth.log
etc.). -
A maioria dos logs é escrita em texto simples e pode ser lida com qualquer editor de texto, desde que você tenha as permissões corretas. No entanto, alguns deles são binários e devem ser lidos usando comandos especiais.
-
Para evitar problemas com espaço em disco, uma rotação do log é realizada pelo utilitário logrotate.
-
Quanto ao kernel, ele usa uma estrutura circular de dados — o buffer de anel — na qual as mensagens de inicialização são mantidas (as mensagens antigas desaparecem com o tempo).
-
O gerenciador de sistema e serviços systemd substituiu o init do System V em praticamente todas as distros, tendo o journald se tornado o serviço de registro padrão.
-
Para ler o diário do systemd, é necessário o utilitário
journalctl
.
Comandos usados nesta lição:
cat
-
Concatena/imprime o conteúdo do arquivo.
dmesg
-
Imprime o buffer do anel do kernel.
echo
-
Exibe uma linha de texto ou uma nova linha.
file
-
Determina o tipo de arquivo.
grep
-
Imprime linhas de acordo com um padrão.
last
-
Mostra uma lista dos últimos usuários conectados.
less
-
Exibe o conteúdo do arquivo uma página de cada vez.
ls
-
Lista o conteúdo do diretório.
journalctl
-
Consulta o diário
systemd
. tail
-
Exibe as últimas linhas de um arquivo.
Respostas aos Exercícios Guiados
-
Analise esta lista de
top
e responda às questões a seguir:carol@debian:~$ top top - 13:39:16 up 31 min, 1 user, load average: 0.12, 0.15, 0.10 Tasks: 73 total, 2 running, 71 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.1 us, 0.4 sy, 0.0 ni, 98.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1020332 total, 698700 free, 170664 used, 150968 buff/cache KiB Swap: 1046524 total, 1046524 free, 0 used. 710956 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 605 nobody 20 0 1137620 132424 34256 S 6.3 13.0 1:47.24 ntopng 444 www-data 20 0 364780 4132 2572 S 0.3 0.4 0:00.44 apache2 734 root 20 0 95212 7004 6036 S 0.3 0.7 0:00.36 sshd 887 carol 20 0 46608 3680 3104 R 0.3 0.4 0:00.03 top 1 root 20 0 56988 6688 5240 S 0.0 0.7 0:00.42 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.09 ksoftirqd/0 4 root 20 0 0 0 0 S 0.0 0.0 0:00.87 kworker/0:0 (...)
-
Quais processos foram iniciados pelo usuário
carol
?Resposta: apenas um:
top
. -
Qual diretório virtual de
/proc
você deve visitar para encontrar dados relacionados ao comandotop
?Resposta:
/proc/887
-
Qual processo foi executado primeiro? Como você descobriu?
Resposta:
systemd
. Porque ele tem oPID
#1. -
Complete a tabela especificando em qual área da saída de
top
encontramos as seguintes informações:Informações sobre … Área de resumo Área de tarefas Memória
Sim
Sim
Swap
Sim
Não
PID
Não
Sim
Tempo da CPU
Sim
Sim
Comandos
Não
Sim
-
-
Qual comando é usado para ler os registros binários a seguir?
-
/var/log/wtmp
Resposta:
last
-
/var/log/btmp
Resposta:
lastb
-
/run/log/journal/2a7d9730cd3142f4b15e20d6be631836/system.journal
Resposta:
journalctl
-
-
Em combinação com
grep
, quais comandos você usaria para descobrir as seguintes informações sobre seu sistema Linux?-
Data da última reinicialização do sistema (
wtmp
)Resposta:
last
-
Quais são os discos rígidos instalados (
kern.log
)Resposta:
less /var/log/kern.log
-
Quando foi feito o último login (
auth.log
)Resposta:
less /var/log/auth.log
-
-
Quais dois comandos você usaria para exibir o buffer de anel do kernel?
dmesg
ejournalctl -k
(e tambémjournalctl --dmesg
). -
Indique o local a que pertencem as seguintes mensagens de log:
-
Jul 10 13:37:39 debian dbus[303]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
X
/var/log/messages
-
Jul 10 11:23:58 debian kernel: [ 1.923349] usbhid: USB HID core driver
/var/log/auth.log
/var/log/kern.log
X
/var/log/syslog
/var/log/messages
X
Jul 10 14:02:53 debian sudo: pam_unix(sudo:session): session opened for user root by carol(uid=0)
/var/log/auth.log
X
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
Jul 10 11:23:58 debian NetworkManager[322]: <info> [1562750638.8672] NetworkManager (version 1.6.2) is starting…
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
X
-
-
Use
journalctl
para encontrar informações sobre as seguintes unidades:Unidade Comando ssh
journalctl -u ssh.service
networking
journalctl -u networking.service
rsyslog
journalctl -u rsyslog.service
cron
journalctl -u cron.service
Respostas aos Exercícios Exploratórios
-
Retome a saída de
top
dos exercícios guiados e responda às seguintes questões:-
Quais são as duas etapas a seguir para eliminar o servidor web apache?
Primeiro, pressionar
k
; depois fornecer um valorkill
. -
Na área de resumo, como seria possivel exibir as informações sobre a memória física e a memória swap usando barras de progresso?
Pressionando
m
uma ou duas vezes. -
Agora, classifique os processos pelo uso da memória:
M
-
Agora que as informações sobre a memória estão sendo exibidas em barras de progresso e os processos classificados pelo uso da memória, salve essas configurações para torná-las padrão na próxima vez que você usar o
top
:W
-
Qual arquivo armazena as configurações de
top
? Onde ele fica? Como você pode verificar sua existência?O arquivo é
~/.config/procps/toprc
e ele fica no diretório inicial do usuário (~
). Como se trata de um arquivo oculto (reside em um diretório cujo nome começa com um ponto), podemos verificar sua existência comls -a
(listar todos os arquivos). Esse arquivo pode ser gerado pressionando kbd:[Shift+W] enquanto estamos emtop
.
-
-
Aprenda sobre o comando
exec
no Bash. Tente demonstrar sua funcionalidade iniciando uma sessão do Bash e encontrando o processo do Bash comps
. Depois, executeexec /bin/sh
e busque novamente pelo processo com o mesmo PID.exec
substitui um processo por outro comando. No exemplo a seguir vemos que o processo do Bash é substituído por/bin/sh
(em vez de/bin/sh
se tornar um processo filho):$ echo $$ 19877 $ ps auxf | grep 19877 | head -1 carol 19877 0.0 0.0 7448 3984 pts/25 Ss 21:17 0:00 \_ bash $ exec /bin/sh sh-5.0$ ps auxf | grep 19877 | head -1 carol 19877 0.0 0.0 7448 3896 pts/25 Ss 21:17 0:00 \_ /bin/sh
-
Siga estes passos para explorar os eventos do kernel e o gerenciamento dinâmico de dispositivos do udev:
-
Conecte um drive USB ao seu computador. Rode o
dmesg
e preste atenção às últimas linhas. Qual a linha mais recente?Deve aparecer algo semelhante a
[ 1967.700468] sd 6:0:0:0: [sdb] Attached SCSI removable disk
. -
Tendo em mente a saída do comando anterior, execute
ls /dev/sd*
e verifique se seu drive USB aparece na lista. Qual a saída?Dependendo do número de dispositivos conectados ao sistema, deve aparecer algo semelhante a
/dev/sda /dev/sda1 /dev/sdb /dev/sdb1 /dev/sdb2
. Em nosso caso, encontramos nosso drive USB (/dev/sdb
) e suas duas partições (/dev/sdb1
e/dev/sdb2
). -
Agora, remova o drive USB e execute
dmesg
outra vez. O que diz a linha mais recente?Deve aparecer algo semelhante a
[ 2458.881695] usb 1-9: USB disconnect, device number 6
. -
Execute
ls /dev/sd*
novamente e verifique se o dispositivo sumiu da lista. Qual a saída?Em nosso caso,
/dev/sda /dev/sda1
.
-