Linux Professional Institute Learning Logo.
Ir para o conteúdo principal
  • Home
    • Todos os recursos
    • LPI Materiais Didáticos
    • Colabore Conosco
    • Publishing Partners
    • Seja um Publishing Partner
    • Quem Somos
    • FAQ
    • Colaboradores
    • Contato
  • LPI.org
4.3 Lição 2
Tópico 1: A comunidade Linux e a carreira Open Source
1.1 A evolução do Linux e sistemas operacionais populares
  • 1.1 Lição 1
1.2 Principais Aplicações Open Source
  • 1.2 Lição 1
1.3 Entendendo o Software Open Source e suas Licenças
  • 1.3 Lição 1
1.4 Habilidades ICT e trabalhando no Linux
  • 1.4 Lição 1
Tópico 2: Encontrando seu caminho em um Sistema Linux
2.1 O básico sobre a linha de comando
  • 2.1 Lição 1
  • 2.1 Lição 2
2.2 Usando a linha de comando para conseguir ajuda
  • 2.2 Lição 1
2.3 Usando diretórios e listando arquivos
  • 2.3 Lição 1
  • 2.3 Lição 2
2.4 Criando, Movendo e Deletando Arquivos
  • 2.4 Lição 1
Tópico 3: O Poder da Linha de Comando
3.1 Empacotando arquivos na linha de comando
  • 3.1 Lição 1
3.2 Pesquisando e extraindo dados de arquivos
  • 3.2 Lição 1
  • 3.2 Lição 2
3.3 Transformando comandos em Scripts
  • 3.3 Lição 1
  • 3.3 Lição 2
Tópico 4: O Sistema Operacional Linux
4.1 Escolhendo um Sistema Operacional
  • 4.1 Lição 1
4.2 Entendendo o Hardware do Computador
  • 4.2 Lição 1
4.3 Onde os dados são armazenados
  • 4.3 Lição 1
  • 4.3 Lição 2
4.4 Seu Computador na Rede
  • 4.4 Lição 1
Tópico 5: Segurança e Permissões de Arquivos
5.1 Segurança Básica e Identificação de Tipos de Usuários
  • 5.1 Lição 1
5.2 Criando Usuários e Grupos
  • 5.2 Lição 1
5.3 Gerenciando permissões e donos de arquivos
  • 5.3 Lição 1
5.4 Diretórios e arquivos especiais
  • 5.4 Lição 1
How to get certified
  1. Tópico 4: O Sistema Operacional Linux
  2. 4.3 Onde os dados são armazenados
  3. 4.3 Lição 2

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 top é htop. Outra alternativa — talvez mais exaustiva — é atop. Se eles ainda não estiverem instalados em seu sistema, use seu gerenciador de pacotes para instalá-los e experimentá-los.

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 pstree. Ele está incluído em todas as principais distribuições.

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 razão para usar o comando echo acima é fornecer uma nova linha. Experimente executar simplesmente cat /proc/1/cmdline para ver a diferença.

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 /var/log/wtmp, /var/log/btmp armazena informações sobre tentativas malsucedidas de login. O comando especial para ler seu conteúdo é lastb.

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 web apache2.

-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

  1. 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 comando top?

    • 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

  2. Qual comando é usado para ler os registros binários a seguir?

    • /var/log/wtmp

    • /var/log/btmp

    • /run/log/journal/2a7d9730cd3142f4b15e20d6be631836/system.journal

  3. 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)

  4. Quais dois comandos você usaria para exibir o buffer de anel do kernel?

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

  6. Use journalctl para encontrar informações sobre as seguintes unidades:

    Unidade Comando

    ssh

    networking

    rsyslog

    cron

Exercícios Exploratórios

  1. 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?

  2. Aprenda sobre o comando exec no Bash. Tente demonstrar sua funcionalidade iniciando uma sessão do Bash e encontrando o processo do Bash com ps. Depois, execute exec /bin/sh e busque novamente pelo processo com o mesmo PID.

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

  1. 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 comando top?

      Resposta: /proc/887

    • Qual processo foi executado primeiro? Como você descobriu?

      Resposta: systemd. Porque ele tem o PID #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

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

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

  4. Quais dois comandos você usaria para exibir o buffer de anel do kernel?

    dmesg e journalctl -k (e também journalctl --dmesg).

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

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

  1. 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 valor kill.

    • 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 com ls -a (listar todos os arquivos). Esse arquivo pode ser gerado pressionando kbd:[Shift+W] enquanto estamos em top.

  2. Aprenda sobre o comando exec no Bash. Tente demonstrar sua funcionalidade iniciando uma sessão do Bash e encontrando o processo do Bash com ps. Depois, execute exec /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
  3. 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.

Linux Professional Insitute Inc. Todos os direitos reservados. Visite o site dos Materiais Didáticos: https://learning.lpi.org
31/5000 Este trabalho está licenciado sob a Licença Creative Commons Atribuição-Uso Não-Comercial-NãoDerivativos 4.0 Internacional.

Próxima Lição

4.4 Seu Computador na Rede (4.4 Lição 1)

Ir para a próxima lição

Linux Professional Insitute Inc. Todos os direitos reservados. Visite o site dos Materiais Didáticos: https://learning.lpi.org
31/5000 Este trabalho está licenciado sob a Licença Creative Commons Atribuição-Uso Não-Comercial-NãoDerivativos 4.0 Internacional.

A LPI é uma organização sem fins lucrativos.

© 2023 O Linux Professional Institute (LPI) é um organismo de apoio aos profissionais de Open Source e referência mundial em certificação. Com mais de 200.000 pessoas certificadas, somos o principal organismo de certificação independente para Linux e Open Source do mundo. O LPI certificou profissionais de mais de 180 países, oferece exames em diversos idiomas e tem centenas de parcerias de formação em todo o globo.

Nossa missão é proporcionar oportunidades econômicas e criativas para todos, tornando universalmente acessível a certificação de conhecimentos e competências em matéria de Open Source.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Entre em Contato
  • Política de Privacidade e Cookies

Encontrou um erro ou quer ajudar a aprimorar esta página? Escreva pra nós.

© 1999–2023 The Linux Professional Institute Inc. Todos os direitos reservados.