Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Conteudista: Prof. Me. Antonio Eduardo Marques da Silva 
Revisão Textual: Prof.ª Dra. Selma Aparecida Cesarin
Objetivo da Unidade:
Como identificar onde os dados do sistema operacional Linux são armazenados,
programas, kernel, monitoramento de memórias, processos e configuração de
Rede básica.
📄 Material Teórico
📄 Material Complementar
📄 Referências
Armazenamento, Processo e Rede
Armazenamento dos Dados
No Linux, o sistema operacional trata tudo como dados. Todos os elementos, como programas,
arquivos regulares, diretórios, dispositivos de bloco (como discos rígidos), dispositivos de
caracteres (como consoles), processos do kernel, soquetes, partições, links e muito mais, são
considerados arquivos. O Linux possui uma estrutura de diretórios que tem como raiz o diretório
/, contendo uma coleção de arquivos de dados. Essa abordagem de reduzir tudo a arquivos é uma
das principais vantagens do Linux, pois possibilita aprimorar praticamente todos os aspectos do
sistema.
Página 1 de 3
📄 Material Teórico
Figura 1 – Armazenamento de Dados
Fonte: Freepik
#ParaTodosVerem: imagem que mostra servidores posicionados ao centro e, no
entorno, vários outros dispositivos de armazenamento como discos e ssds,
todos em azul claro. Fim da descrição.
Nesta Unidade, abordaremos os diversos locais em que informações essenciais são
armazenadas, conforme definido pelo Padrão de Hierarquia do Sistema de Arquivos do Linux
(Linux Filesystem Hierarchy Standard – FHS). Alguns desses locais consistem em diretórios
físicos que armazenam dados permanentemente no disco, enquanto outros são
pseudossistemas de arquivos carregados na memória, que nos concedem acesso aos dados do
subsistema do kernel, como processos em execução, uso de memória, configuração de
hardware, entre outros. Os dados armazenados nesses diretórios virtuais são utilizados por uma
variedade de comandos que nos permitem monitorar e manipular essas informações de forma
eficiente.
Programas e suas Configurações 
Indiscutivelmente, os dados essenciais do sistema Linux consistem em seus programas e os
respectivos arquivos de configuração. Os programas são arquivos executáveis que contêm
conjuntos de instruções interpretadas pelo processador do computador, enquanto os arquivos
de configuração são geralmente documentos de texto que controlam o funcionamento desses
programas. Os arquivos executáveis podem ser binários ou de texto, sendo que os últimos são
conhecidos como scripts.
Além disso, os dados de configuração no Linux são tradicionalmente armazenados em arquivos
de texto, embora haja diversos estilos de representação para esses dados de configuração. Essa
flexibilidade permite uma configuração mais versátil e adaptável ao ambiente em que o sistema
está sendo utilizado.
Onde os Arquivos Binários são Armazenados 
Assim como qualquer outro arquivo, os executáveis no sistema Linux são armazenados em
diretórios dentro da hierarquia do sistema. Esses diretórios estão vinculados ao diretório raiz
(/).
A distribuição dos programas, em geral, segue uma estrutura de três níveis:
O primeiro nível (/) contém programas essenciais que podem ser necessários no
modo de usuário único, que é um modo de execução especial, utilizado para realizar
tarefas de manutenção e recuperação do sistema;
O segundo nível (/usr) abriga a maioria dos programas destinados a serem
utilizados em modo multiusuário, ou seja, quando vários usuários estão interagindo
com o sistema simultaneamente;
O terceiro nível (/usr/local) é destinado a armazenar software que não faz parte da
distribuição do sistema operacional e foi compilado localmente. Isso, geralmente,
inclui software específico do usuário ou aplicativos personalizados.
Essa organização em três níveis permite uma separação clara dos programas essenciais do
sistema, programas multiusuário e software de terceiros, tornando a administração e a
manutenção do sistema mais eficientes e organizadas.
Tipicamente, os programas estão nestes locais:
Nesse caso, podemos, então, encontrar o local dos programas com o comando which:
(/sbin) Contém binários essenciais para a administração do sistema, como parted
ou ip;
(/bin) Contém binários essenciais para todos os usuários, como ls, mv ou mkdir;
(/usr/sbin) Armazena binários para administração do sistema, como deluser ou
groupadd;
(/usr/bin) Inclui a maioria dos arquivos executáveis, como free, pstree, sudo or man
que podem ser acessados por todos os usuários;
(/usr/local/sbin) Usado para armazenar programas instalados localmente para a
administração do sistema e que não são gerenciados pelo gerenciador de pacotes do
sistema;
(/usr/local/bin) Tem a mesma finalidade de /usr/local/sbin, mas para programas
comuns de usuário. Recentemente, algumas distribuições começaram a substituir
/bin e /sbin por links simbólicos para /usr/bin e /usr/sbin. Além desses diretórios
descritos, os usuários comuns do sistema podem ter seus próprios programas
em: (/home/$USER/bin) e (/home/$USER/.local/bin.)
$ which git
Nos primórdios do Unix, cada tipo de dado costumava ter sua própria pasta dedicada, como /bin
para arquivos binários e /boot para o kernel. Contudo, surgiu o diretório /etc (literalmente "etc")
como uma solução abrangente para armazenar todos os arquivos que não se enquadram em
categorias específicas. A maioria desses arquivos são arquivos de configuração.
Com o passar do tempo, à medida que mais e mais arquivos de configuração foram sendo
criados, o diretório /etc se tornou o local principal para armazenar os arquivos de configuração
dos programas. Como já explicado anteriormente, esses arquivos de configuração, geralmente,
são simples arquivos de texto local (em oposição a arquivos binários), que controlam o
funcionamento de um determinado programa.
No diretório /etc, podemos encontrar diferentes padrões para identificar os nomes dos arquivos
de configuração, tais como:
/usr/bin/git
(group) Banco de Dados de grupo do sistema;
(hostname) Nome do computador na Rede; 
(hosts) Lista de endereços IP com sua tradução em nomes de computadores na
rede;
(passwd) Banco de Dados do usuário do sistema composto por sete campos
separados por dois pontos, fornecendo informações sobre o usuário;
(profile) Arquivo de configuração de todo o sistema para o Bash;
(shadow) Arquivo criptografado para as senhas de usuário;
(bash.bashrc) Arquivo .bashrc de todo o sistema para shells bash interativos;
Diretórios com Sufixo .d
Em alguns programas, além do arquivo de configuração principal (como logrotate.conf), é
comum encontrar um diretório específico com o sufixo ".d" (como logrotate.d). A finalidade
desse diretório é possibilitar a implementação de configurações modulares e mais robustas. Um
exemplo disso é o programa logrotate, que tem o arquivo de configuração principal
logrotate.conf, mas também inclui o diretório logrotate.d. Nesse diretório, é possível adicionar
arquivos de configuração adicionais, cada um com suas próprias configurações específicas.
Essa abordagem modular facilita a organização das configurações e permite adicionar ou
modificar configurações sem a necessidade de alterar o arquivo de configuração principal,
tornando o sistema mais flexível e fácil de gerenciar. Cada arquivo dentro do diretório *.d
complementa e amplia as opções do arquivo de configuração principal, permitindo
personalizações mais granulares sem afetar as configurações globais do programa.
Essa abordagem é especialmente útil quando diferentes aplicativos precisam de configurações
para um serviço específico. Por exemplo, se um pacote de servidor web incluir uma configuração
para o logrotate, essa configuração pode ser colocada em um arquivo dedicado dentro do
diretório logrotate.d. Dessa forma, o pacote do servidor web pode atualizar esse arquivo sem
afetar o restante da configuração do logrotate. Da mesma forma, os pacotes instalados no
sistema podem adicionar tarefas específicas ao incluir arquivos no diretório /etc/cron.d,em vez
de modificar diretamente o arquivo /etc/crontab. Essa abordagem modular possibilita que cada
aplicativo gerencie suas próprias configurações e agendamentos de tarefas de forma
independente, o que facilita a manutenção do sistema e evita conflitos entre as configurações.
Um exemplo dessa abordagem modular pode ser observado no sistema Debian e em suas
distribuições derivadas. Além do arquivo tradicional /etc/apt/sources.list, essas distribuições
(nanorc) Exemplo de arquivo de inicialização para o GNU nano (um editor de texto
simples que normalmente é fornecido com qualquer distribuição);
(resolv.conf) Arquivo de configuração do resolvedor que fornece acesso ao DNS
(Internet Domain Name System);
(sysctl.conf) Arquivo de configuração para definir variáveis de sistema para o kernel.
adotam o diretório /etc/apt/sources.list.d. Nesse diretório, é possível adicionar arquivos que
representam listas de fontes confiáveis para o utilitário de gerenciamento de pacotes "apt".
Cada arquivo contém uma lista de repositórios adicionais, permitindo que diferentes aplicativos
ou componentes adicionem suas próprias fontes de pacotes sem alterar o arquivo sources.list
original. Essa abordagem modular torna mais fácil e seguro adicionar, remover ou atualizar as
fontes de pacotes do sistema:
Arquivos de configuração em Home (Dotfiles)
Quando um usuário está interagindo com um sistema, os programas costumam armazenar suas
configurações e arquivos em arquivos ocultos no diretório inicial do usuário, que é representado
pelo caractere "~". É essencial notar que esses arquivos ocultos têm seus nomes iniciados com
um ponto (.), e por isso são chamados de "dotfiles".
Dentro desses dotfiles, alguns deles são scripts Bash que personalizam a sessão do shell do
usuário. Esses scripts são executados automaticamente assim que o usuário faz o login no
sistema, configurando o ambiente do shell conforme as preferências do usuário. Essa
personalização pode incluir definições de variáveis de ambiente, aliás, funções, e outros ajustes
que tornam a experiência de uso do terminal mais adequada às necessidades do usuário. Essa
capacidade de personalização por meio dos dotfiles é uma característica poderosa e flexível do
sistema, permitindo que os usuários ajustem o ambiente do shell de acordo com suas
preferências e fluxos de trabalho, sendo executados assim que o usuário faz login no sistema:
$ ls /etc/apt/sources*
/etc/apt/sources.list
/etc/apt/sources.list.d:
(.bash_history) Armazena todo histórico da linha de comando; 
(.bash_logout) Inclui comandos a executar quando o usuário sai do shell de login do
Linux;
O Kernel do Linux
Antes que qualquer execução de processos possa acontecer, o kernel do sistema operacional
Linux precisa ser carregado em uma região protegida da memória. Após esse carregamento, o
processo com o PID 1 (geralmente o systemd, atualmente) inicia a cadeia de processos, em que
um processo inicia outro(s) e assim por diante. Esse processo de inicialização é fundamental
para que o sistema operacional e todos os seus componentes essenciais estejam prontos para
uso.
Uma vez que os processos estão em execução, o kernel do Linux assume a responsabilidade de
alocar recursos para eles, como teclado, mouse, discos, memória, interfaces de Rede e muito
mais. O kernel age como um intermediário entre o hardware do sistema e os processos em
execução, garantindo que cada processo tenha acesso adequado aos recursos necessários para
funcionar corretamente. Essa gerência eficiente dos recursos é essencial para o bom
desempenho e a estabilidade do sistema, permitindo que os processos realizem suas tarefas de
forma coordenada e segura.
Figura 2 – Kernel do Linux
(.bashrc) Script de inicialização do Bash para shells não login;
(.profile) Script de inicialização do Bash para shells de login.
#ParaTodosVerem: imagem que mostra duas caixas com os nomes kernel e
software em preto respectivamente. Apresenta uma relação de confiança entre
esses dois itens, por meio de setas. Fim da descrição.
Onde os Kernels estão Armazenados: /boot
O kernel do sistema operacional é armazenado na pasta /boot, juntamente com outros arquivos
relacionados à inicialização do sistema. A maioria desses arquivos tem componentes do número
da versão do kernel em seus nomes, incluindo a versão do kernel, a revisão principal, a revisão
secundária e o número do patch. Dentro do diretório /boot, podemos encontrar os seguintes
tipos de arquivos, cujos nomes refletem sua respectiva versão do kernel:
O diretório /proc é um exemplo de sistema de arquivos virtual ou pseudossistema de arquivos, o
que significa que seu conteúdo não é armazenado fisicamente em disco, mas sim carregado na
(config-4.9.0-9-amd64) Definições de configuração do kernel, como opções e
módulos que foram compilados junto com o kernel; 
(initrd.img-4.9.0-9-amd64) Imagem de disco RAM inicial, que ajuda no processo
de inicialização, carregando um sistema de arquivos root temporário na memória;
(System-map-4.9.0-9-amd64) O arquivo "System-map" (em certos sistemas,
System.map) contém localizações de endereços de memória para nomes de
símbolos do kernel. Cada vez que um kernel for reconstruído, o conteúdo do arquivo
muda, pois as localizações da memória podem ser diferentes. O kernel usa esse
arquivo para procurar localizações de endereços de memória para um símbolo do
kernel determinado, ou vice-versa;
(vmlinuz-4.9.0-9-amd64) O kernel propriamente dito, em um formato
compactado de extração automática (vem daí o z in vmlinuz; vm significa memória
virtual e começou a ser usado quando o kernel começou a ter suporte para a memória
virtual);
(grub) Diretório de configuração do gerenciador de inicialização grub2.
memória. Esse diretório é preenchido dinamicamente sempre que o computador é inicializado e
reflete o estado atual do sistema em tempo real. O /proc contém informações valiosas sobre:
O uso do diretório /proc é uma maneira poderosa de acessar informações em tempo real sobre o
estado do sistema e seus componentes, sendo uma ferramenta valiosa para diagnóstico,
monitoramento e ajustes de configurações do Linux.
Na próxima lição, abordaremos os dados relacionados aos processos armazenados no diretório
/proc. No entanto, é importante destacar que o /proc também é responsável por armazenar
arquivos com informações cruciais sobre o hardware do sistema e configurações do kernel.
Esses arquivos são fundamentais para compreender o funcionamento interno do sistema e
realizar ajustes específicos quando necessário. Alguns exemplos desses arquivos incluem:
Processos em execução: fornece detalhes sobre os processos em execução no
sistema, como PID (identificador de processo), consumo de recursos, informações
de memória e muito mais;
Configurações do kernel: permite visualizar e ajustar várias configurações e
parâmetros do kernel do sistema;
Informações sobre o hardware: fornece detalhes sobre o hardware do sistema,
incluindo CPU, memória, dispositivos conectados, partições, interfaces de Rede e
muito mais;
Informações do sistema: fornece informações gerais sobre o sistema, como a
versão do kernel, tempo de atividade e carga do sistema, entre outros.
(/proc/cpuinfo) Armazena informações sobre a CPU do sistema:
$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 158
model name : Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz
stepping : 10
cpu MHz : 3696.000
cache size : 12288 KB
(...)
(/proc/cmdline) Armazena as strings passadas para o kernel na inicialização:
$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=
5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro quiet
(/proc/modules) Mostra a lista de módulos carregados no kernel:
$ cat /proc/modules
nls_utf8 16384 1 - Live 0xffffffffc0644000
isofs 40960 1 - Live 0xffffffffc0635000
udf 90112 0 - Live 0xffffffffc061e000
crc_itu_t 16384 1 udf, Live 0xffffffffc04be000
fuse 98304 3 - Live 0xffffffffc0605000
vboxsf 450560 - Live 0xffffffffc05f9000 (O)
joydev 20480 0 - Live 0xffffffffc056e000
vboxguest 327680 5 vboxsf, Live 0xffffffffc05a8000 (O)
hid_generic 16384 0 - Live 0xffffffffc0569000
(...)
O Diretório /proc/sys
Este diretório inclui as definições de configuração do kernel em arquivos classificados em
categorias por subdiretório:
A maioria desses arquivos funciona como um interruptor e, portanto, só contém um dentre dois
valores possíveis: 0 ou 1 (“ligado” ou “desligado”). 
Por exemplo: (/proc/sys/net/ipv4/ip_forward) O valor que habilita ou desabilita a máquina para
atuar como roteador (capaz de encaminhar pacotes):
Porém, há algumas exceções: 
(/proc/sys/kernel/pid_max) O PID máximo permitido:
$ ls /proc/sys
abi debug dev fs kernel net user vm
$ cat /proc/sys/net/ipv4/ip_forward
0
Dispositivos de Hardware
É crucial ter em mente que, no Linux, a filosofia de que "tudo é arquivo" é aplicada. Isso implica
que as informações relacionadas ao hardware do dispositivo, bem como as configurações do
kernel são armazenadas em arquivos especiais presentes em diretórios virtuais. Portanto, esses
dados são tratados e acessados da mesma maneira que se estivessem em arquivos
convencionais. Essa abordagem uniforme facilita a manipulação e o acesso a informações do
sistema, tornando o Linux um sistema operacional flexível e poderoso.
O Diretório /dev
O diretório de dispositivos (/dev) contém arquivos, também chamados de nós, que representam
todos os dispositivos de hardware conectados ao sistema. Esses arquivos de dispositivo
desempenham o papel de interface entre os dispositivos e os processos que desejam utilizá-los.
Essa abstração permite que os processos do sistema operacional acessem e interajam com os
$ cat /proc/sys/kernel/pid_max
32768
Saiba Mais
Tenha muito cuidado ao alterar as configurações do kernel, pois o valor
errado pode causar instabilidade no sistema.
dispositivos de hardware de maneira padronizada, tornando a comunicação e o controle dos
dispositivos mais eficientes e simplificados. Os arquivos no diretório /dev são essenciais para
permitir que o sistema operacional e os aplicativos interajam com o hardware do computador de
forma uniforme e consistente.
Dispositivos de Bloco
Na categoria de dispositivos de bloco, estão incluídos aqueles em que os dados são lidos e
gravados em blocos individuais com endereçamento. Exemplos comuns desses dispositivos são
discos rígidos (e suas partições, como /dev/sda1), unidades flash USB, CDs, DVDs e outros
dispositivos similares. Esses dispositivos são fundamentais para armazenar e recuperar grandes
volumes de dados de maneira eficiente, tornando-os essenciais para o funcionamento do
sistema operacional e das aplicações que utilizam armazenamento em massa.
Dispositivos de Caracteres
Essa categoria inclui dispositivos nos quais os dados são lidos e gravados de forma sequencial,
um caractere de cada vez. Exemplos desses dispositivos são teclados, o console de texto
(/dev/console) e portas seriais (como /dev/ttyS0 e outras), entre outros. Para distinguir esses
dispositivos, ao listar os arquivos do diretório de dispositivos, você pode usar o comando "ls"
com a opção "-l". Isso permitirá identificar a diferença entre os dois tipos de dispositivos. Por
exemplo, você pode verificar discos rígidos e suas partições da seguinte maneira:
# ls -l /dev/sd*
brw-rw---- 1 root disk 8, 0 may 25 17:02 /dev/das
brw-rw---- 1 root disk 8, 1 may 25 17:02 /dev/sda1
brw-rw---- 1 root disk 8, 2 may 25 17:02 /dev/sda2
(...)
Ou para terminais seriais:
# ls -l /dev/tty*
crw-rw-rw- 1 root tty 5, 0 may 25 17:26 /dev/tty
crw--w---- 1 root tty 4, 0 may 25 17:26 /dev/tty0
crw--w---- 1 root tty 4, 1 may 25 17:26 /dev/tty1
(...)
Saiba Mais
O asterisco (*) é um caractere especial utilizado para realizar globbing,
que representa zero ou mais caracteres. Por essa razão, ele foi
empregado nos comandos "ls -l /dev/sd" e "ls -l /dev/tty*"
mencionados anteriormente. Se você estiver interessado em
aprofundar o conhecimento sobre esses caracteres especiais e como
utilizá-los, recomendo consultar a lição dedicada ao globbing, em que
encontrará informações detalhadas sobre o assunto. Lá, você terá a
oportunidade de aprender mais sobre essa técnica e a sua aplicação
para efetuar buscas e manipulações de arquivos de forma mais
avançada no ambiente Linux.
O Diretório /sys
O sistema de arquivos sys (sysfs) é montado em /sys. Introduzido com o kernel 2.6, o sysfs
representa um avanço significativo em relação ao /proc/sys. O objetivo principal do sysfs é
permitir que os processos interajam com os dispositivos em /dev de forma mais organizada e
estruturada. O diretório /sys contém informações detalhadas sobre os dispositivos de hardware
presentes no sistema, e esses dados são organizados em categorias específicas. Por exemplo, se
você deseja verificar o endereço MAC da sua placa de rede (por exemplo, enp0s3), pode usar o
comando "cat" no seguinte arquivo, dentro do diretório /sys:
Dessa forma, o sysfs oferece uma maneira mais conveniente e clara de acessar informações
sobre os dispositivos de hardware, facilitando a interação e a configuração do sistema.
Além disso, o /dev inclui alguns arquivos especiais muito úteis para
diferentes finalidades de programação, como podemos ver a seguir: 
(/dev/zero) Fornece tantos caracteres nulos quantos solicitados;
(/dev/null) Descarta todas as informações enviadas para ele. Também chamado de
balde de bits;
(/dev/urandom) Gera números pseudoaleatórios.
$ cat /sys/class/net/enp0s3/address
08:00:27:02:b2:74
Memória e Tipos de Memória
Em termos gerais, para que um programa possa ser executado, ele precisa ser carregado na
memória do computador. Quando mencionamos memória, geralmente estamos nos referindo à
Memória de Acesso Aleatório (RAM), que é consideravelmente mais rápida em comparação aos
discos rígidos mecânicos. No entanto, a RAM é volátil, o que significa que os dados armazenados
nela são perdidos quando o computador é desligado.
Apesar dessa característica volátil da RAM, quando se trata de memória, podemos distinguir dois
tipos principais em um sistema Linux: a RAM e a memória de armazenamento em disco (como
os discos rígidos e os dispositivos de armazenamento em estado sólido). A RAM é usada para
armazenar temporariamente os dados e os programas que estão sendo executados no
momento, proporcionando uma rápida acessibilidade e execução dos processos em execução.
Por outro lado, a memória de armazenamento em disco é utilizada para armazenar dados de
forma persistente, permitindo que as informações sejam retidas mesmo após o desligamento do
sistema. A RAM é ideal para operações rápidas de leitura e gravação, enquanto a memória de
armazenamento em disco é essencial para manter os dados e os arquivos ao longo do tempo. A
combinação e a eficiente utilização desses dois tipos de memória são fundamentais para o bom
desempenho e funcionamento do sistema Linux.
Memória física: a Memória de Acesso Aleatório (RAM), também conhecida como
RAM, é composta por chips, que contêm milhões de transistores e capacitores
integrados. Esses componentes formam células de memória, que são a unidade
básica de armazenamento de dados em um computador. Cada célula de memória
possui um código hexadecimal associado, conhecido como endereço de memória,
que pode ser referenciado quando necessário;
Swap: também conhecida como memória de troca, é a parte da memória virtual que
fica no disco rígido e é utilizada quando não há mais RAM disponível;
Memória virtual: é uma abstração da quantidade total de memória utilizável,
incluindo a memória tal como é vista pelos aplicativos.
Comando Free
O comando "free" analisa o arquivo /proc/meminfo e exibe de forma clara a quantidade de
memória livre e em uso no sistema. Com essa simples ferramenta, é possível obter informações
valiosas sobre a utilização da memória RAM do sistema, permitindo uma análise rápida e
eficiente do status de usoda memória no Linux. Basta abrir o terminal e digitar o comando "free"
seguido da opção "-h" para exibir os valores em um formato mais legível (em unidades como
KB, MB, GB).
Aqui está um exemplo de como o comando "free -h" pode ser usado no Linux:
Vamos entender melhor as diferentes colunas do comando “free”:
$ free -h
(total) Quantidade total de memória física e de troca instalada; 
(used) Quantidade de memória física e de troca atualmente em uso;
(free) Quantidade de memória física e de troca que não está em uso;
(shared) Quantidade de memória física usada por tmpfs;
(bu�/cache) Quantidade de memória física atualmente em uso pelos bu�ers do
kernel, a cache e as slabs;
(available) Estimativa da memória física disponível para novos processos.
Processos
Quando um usuário emite um comando, um programa é executado e um ou mais processos são
criados. Esses processos são organizados em uma hierarquia. Após o carregamento do kernel na
memória, durante a inicialização, o primeiro processo é iniciado, o qual, por sua vez, pode iniciar
outros processos, formando uma cadeia de processos. Cada processo tem um identificador
exclusivo conhecido como PID (Identificador de Processo) e um identificador de seu processo
pai chamado PPID (Identificador de Processo Pai). Esses identificadores são atribuídos como
números inteiros positivos em ordem sequencial. Explorando os processos dinamicamente: o
comando “top” para obter uma lista dinâmica de todos os processos em execução:
Comando Top
O comando "top" é uma ferramenta de monitoramento no Linux que exibe informações em
tempo real sobre os processos em execução e o uso do sistema. Ele é muito útil para acompanhar
a performance do sistema, identificar processos que estão consumindo muitos recursos e
diagnosticar problemas de desempenho. No terminal, execute o comando:
Conforme mencionado, o comando "top" também fornece informações sobre o consumo geral
de memória e CPU do sistema, além de detalhes sobre cada processo em execução. O "top"
permite interação por parte do usuário. Por padrão, a saída é classificada em ordem decrescente
de acordo com a porcentagem de tempo da CPU utilizada por cada processo. No entanto, é
possível modificar esse comportamento pressionando as seguintes teclas dentro do "top":
$ top
(M) Classifica por uso da memória; 
(N) Classifica pelo número de identificação do processo;
Para alternar entre ordem crescente e decrescente, pressione a tecla “R”.
Um Instantâneo dos Processos: ps
Outro comando bastante útil para obter informações sobre processos é o "ps". Ao contrário do
"top", que oferece informações dinâmicas em tempo real, o "ps" fornece informações estáticas.
Quando executado sem opções, o "ps" exibe uma saída específica, limitando-se aos processos
associados ao shell atual.
As informações exibidas pelo comando "ps" incluem o identificador do processo (PID), o
terminal em que o processo está sendo executado (TTY), o tempo de CPU utilizado pelo processo
(TIME) e o comando que iniciou o processo (CMD). Uma opção útil para o "ps" é o "-f", que
exibe a lista completa no formato detalhado:
(T) Classifica pelo tempo de execução;
(P) Classifica pela porcentagem de uso da CPU.
$ ps
$ ps -f
Informações sobre Processos no Diretório /proc 
Já vimos o sistema de arquivos /proc. Ele inclui um subdiretório numerado para cada processo
em execução no sistema operacional (PID do processo):
Assim, todas as informações sobre um processo específico são incluídas dentro de seu diretório.
Vamos apresentar o conteúdo do primeiro processo, aquele cujo PID é 1.
Você pode verificar, por exemplo, o executável do processo:
A Carga do Sistema
Potencialmente, cada processo em um sistema consome recursos de máquina. A chamada
“carga do sistema” tenta agregar a carga geral do sistema em um único indicador numérico.
Podemos verificar a carga atual com o comando uptime:
carol@debian:~# ls /proc
# ls /proc/1/
# cat /proc/1/cmdline; echo
/sbin/init
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 (I/O). Isso significa que esses processos estariam prontos para
execução quando recebessem os respectivos recursos.
Acessando Arquivos de Log
Ao explorar arquivos de log, você precisa ser root do sistema operacional (se não tiver
permissões de leitura) e utilizar um paginador como less:
$ uptime
 22:12:54 up 13 days, 20:26, 1 user, load average: 2.91, 1.59, 0.39
# 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 wa HUPed
Jun 29 16:57:10 debian kernel: [ 0.000000] Linux version 4.9.0-8-amd6 
(debiankernel@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 possibilidade é utilizar o comando “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:
Configuração de Rede
Atualmente, qualquer tipo de dispositivo de computação troca informações por meio de Redes de
Comunicação. No cerne do conceito das Redes de Computadores, estão as conexões físicas e
lógicas entre um dispositivo e seus pares. Essas conexões são chamadas links e constituem a
conexão mais básica entre dois dispositivos diferentes. Os links podem ser estabelecidos por
meio de vários meios físicos de comunicação e, dentre eles, podemos citar os cabos de cobre, as
fibras óticas e as ondas de rádio (Redes sem fio).
# 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) miss
due to ratelimiting
Figura 3 – Configuração de Placa de Rede no Linux
Fonte: Reprodução
#ParaTodosVerem: imagem que apresenta uma placa de Rede com seus
circuitos impressos a mostra e sua interface principal Ethernet com dois leds
abaixo, em fundo branco. Fim da descrição.
Comunicação na Camada de Link 
A função de um pacote de Rede é transportar informações da origem até o destino por meio de
um link que conecta os dois dispositivos. Para que os dispositivos se identifiquem, é utilizado um
endereço de camada de link. Em redes Ethernet, os endereços de Controle de Acesso de Mídia
(Media Access Control ou MAC) são utilizados para identificar dispositivos individuais. Um
endereço MAC consiste em 48 bits. No entanto, esses endereços não são necessariamente
exclusivos globalmente e não podem ser usados para endereçar dispositivos fora do link atual.
Portanto, eles não podem ser utilizados para rotear pacotes para outros links.
Ao receber um pacote, o destinatário verificase o endereço de destino corresponde ao seu
próprio endereço de camada de link. Se houver correspondência, o pacote é processado. Caso
contrário, o pacote é descartado. Uma exceção a essa regra são os pacotes de broadcast, que são
enviados para todos os dispositivos em uma determinada Rede local e sempre são aceitos. O
comando “ip link show” exibe uma lista de todas as interfaces de Rede disponíveis e seus
respectivos endereços da camada de link, além de outras informações como, por exemplo, o
tamanho máximo do pacote:
A saída anterior do comando apresenta o dispositivo possuidor de duas interfaces, lo e ens33. A
lo é o dispositivo de loopback e tem o endereço MAC 00:00:00:00:00:00, ao passo que ens33 é
uma interface Ethernet com o endereço MAC 00:0c:29:33:3b:25.
Rede IPv4
Para acessar sites como o Youtube, Google ou Cruzeirodosul, verificar e-mails ou permitir a
conexão entre Empresas, os pacotes devem ser capazes de atravessar diferentes camadas de
link. Frequentemente, essas Redes estão conectadas indiretamente, com várias camadas
intermediárias que os pacotes devem percorrer para alcançar seu destino. Os endereços de
camada de link de uma interface de Rede não podem ser usados fora da Rede específica em que
estão. Esses endereços não têm significado para os dispositivos de camada de link de outras
Redes. Portanto, é necessário um esquema de endereçamento globalmente exclusivo para
possibilitar o roteamento entre Redes.
Esse esquema de endereçamento globalmente exclusivo, juntamente com o conceito geral de
roteamento, é implementado pelo Protocolo de Internet (Internet Protocol ou IP). O IP permite
que os pacotes sejam roteados de forma eficiente por diferentes Redes, garantindo que eles
$ ip link show
1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode 
DEFAULT group default qlen 1000 
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: mtu 1500 qdisc fq_codel state U
Mode DEFAULT group default qlen 1000
link/ether 00:0c:29:33:3b:25 brd ff:ff:ff:ff:ff:ff 
cheguem ao seu destino corretamente, independentemente das camadas de link intermediárias
que precisam ser atravessadas, ele fornece um sistema de endereçamento único e globalmente
reconhecido (mundialmente reconhecido), permitindo a conectividade entre dispositivos em
diferentes Redes.
Configuração do Endereço IPv4 
Existem duas maneiras principais de configurar endereços IPv4 em um computador: atribuição
manual de endereços (estático) ou uso do Protocolo de Configuração Dinâmica de Host (Dynamic
Host Configuration Protocol ou DHCP) para configuração dinâmica (automática). Com o DHCP, um
servidor central controla a distribuição de endereços para os dispositivos conectados. Além dos
endereços IP, o servidor DHCP também pode fornecer outras informações de Rede, como os
endereços IP dos servidores DNS e o endereço IP do roteador padrão. Em muitos sistemas, o
DHCP já está habilitado por padrão (deafault), o que significa que, ao se conectar a uma Rede,
você provavelmente receberá automaticamente um endereço IP atribuído. Isso facilita a
configuração e a conectividade com a Rede, pois, nesse caso, não é necessário inserir
manualmente as informações de endereço IP.
Como dito, também é possível adicionar endereços IP manualmente (ou estaticamente) a uma
interface usando o comando “ip addr add”. Aqui, adicionamos o endereço 192.168.0.5 à interface
ens33. A Rede, nesse caso, utiliza a máscara de rede 255.255.255.0, que equivale a /24 (somatória
de bits ligadas na porção rede) em notação CIDR:
Agora, podemos observar se o endereço IP realmente foi adicionado, usando o comando “ip
addr show”:
$ sudo ip addr add 192.168.0.5/255.255.255.0 dev ens33
A saída anterior apresenta a interface lo e a interface ens33 com seu endereço IPv4 atribuído.
Para verificarmos se um dispositivo está acessível, utilizamos o comando “ping”, que envia um
tipo especial de mensagem chamado echo request (solicitação de eco), na qual o remetente
solicita uma resposta ao destinatário. Se a conexão entre os dois dispositivos estiver
estabelecida com sucesso, o destinatário retornará uma resposta de eco, confirmando a
conexão, ou seja, o “ping” testa a conectividade entre dispositivos:
$ ip addr show
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group 
default
qlen 1000
 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 inet 127.0.0.1/8 scope host lo
 valid_lft forever preferred_lft forever
 inet6 ::1/128 scope host
 valid_lft forever preferred_lft forever
25: ens33: mtu 1500 qdisc mq state UP gro
default qlen 1000
 link/ether 00:0c:29:33:3b:25 brd ff:ff:ff:ff:ff:ff
 inet 192.168.0.5/24 192.168.0.255 scope global ens33
 valid_lft forever preferred_lft forever
 inet6 fe80::010c:29ff:fe33:3b25/64 scope link noprefixroute
 valid_lft forever preferred_lft forever
$ ping -c 3 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=2.16 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=1.85 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=3.41 ms
--- 192.168.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 5ms
rtt min/avg/max/mdev = 1.849/2.473/3.410/0.674 ms
Roteamento IPv4
O roteamento de pacotes refere-se ao processo pelo qual um pacote IP é encaminhado da Rede
de origem para a Rede de destino. Cada dispositivo tem uma Tabela de Roteamento que contém
informações sobre quais Redes IP podem ser acessadas diretamente por meio de sua conexão
com a camada de link e quais redes IP podem ser alcançadas por meio do encaminhamento de
pacotes para um roteador.
Essa Tabela de Roteamento permite que o dispositivo determine o caminho mais adequado para
encaminhar os pacotes com base em seu endereço de destino. As entradas na Tabela de
Roteamento são atualizadas e mantidas por meio de Protocolos de Roteamento, que permitem
que os dispositivos compartilhem informações de roteamento entre si.
Além das rotas específicas, existe também uma rota padrão, também conhecida como rota de
gateway padrão. Essa rota é usada quando não há uma rota específica correspondente ao
endereço de destino do pacote. Em vez de descartar o pacote, ele é encaminhado para o roteador
definido na rota padrão, que é responsável por receber todos os pacotes que não se encaixam em
nenhuma outra rota da Tabela de Roteamento. Isso permite que os pacotes sejam direcionados
para fora da rede local e alcancem outras Redes. O comando “ip route show” lista a Tabela atual
de Roteamento IPv4:
Para adicionar uma rota padrão, você pode usar o comando a seguir, substituindo "192.168.0.1"
pelo endereço interno do roteador que deseja definir como gateway padrão:
$ ip route show
127.0.0.0/8 via 127.0.0.1 dev lo0
192.168.0.0/24 dev ens33 scope link
Esse comando adicionará uma rota padrão na Tabela de Roteamento do sistema, direcionando
todos os pacotes que não correspondam a nenhuma outra rota específica para o endereço IP do
roteador definido como gateway padrão. Para confirmar, execute “ip route show” novamente:
$ sudo ip route add default via 192.168.0.1
$ ip route show
default via 192.168.0.1 dev ens33
127.0.0.0/8 via 127.0.0.1 dev lo0
192.168.0.0/24 dev ens33 scope link
Indicações para saber mais sobre os assuntos abordados nesta Unidade:
  Livros  
Linux na Prática: Linux para Iniciantes
ANJOS, R. Linux na Prática: Linux para Iniciantes. E-Book Kindle. São
Paulo, 2023.
Linux: Guia do Administrador do Sistema
NEMETH, E.; SNYDER, G. Linux: Guia do Administrador do Sistema. São Paulo: Novatec, 2008.
Shell Linux: A Bíblia
BLUM, R. Shell Linux: A Bíblia. São Paulo: Altabooks, 2014.
Página 2 de 3
📄 Material Complementar
Linux Essentials: Um Guia do Sistema Operacional Linux para
Iniciantes
WILSON, A.; SILVA, L. A. Linux Essentials: um guia do sistema
operacional Linux para iniciantes.E-Book Kindle. São Paulo, 2020.
HILL, B. M.; BACON, J. O livro oficial do Ubuntu 2. Porto Alegre: Bookman, 2008.
LPI. Linux Essentials. Linux Professional Institute. Estados Unidos da América: [n.p], 2021.
NEMETH, E.; SNYDER, G.; HEIN, T. R. Manual Completo do Linux Guia do Administrador. São
Paulo: Pearson, Prentice Hall, 2007.
Página 3 de 3
📄 Referências

Mais conteúdos dessa disciplina