Formação Intensiva Linux- 96 horas
SS3187
Formação Intensiva Linux
Administraçã Avançada
SS3187 - v1.0 – CentOS 6.2 Página I
Formação Intensiva Linux- 96 horas
SISNEMA Informática
Rua Washington Luiz, 820 – 6º Andar
Porto Alegre/RS CEP 90010-460
Telefone: (51) 3226-4111
Fax: (51) 3226-1219
E-mail: info@[Link]
Copyright © 2013 por SISNEMA Informática
SS3187 - v1.0 – CentOS 6.2 Página 2
Formação Intensiva Linux- 96 horas
Sumário
Módulo 7 - Sistema de Inicialização do Linux.............................................................. 05
Módulo 8 – Gerenciando partições ............................................................................ 43
Módulo 9 - Monitoramento e Gerenciamento de Processos no Linux......................... 67
Módulo 10 – Kernel .................................................................................................. 80
Módulo 11 - Configuração de Hardware .................................................................... 104
Módulo 12 - Instalação de Programas ........................................................................ 119
Módulo 13 - Monitoramento de eventos em Sistemas Linux ....................................... 138
Módulo 14 - Automatizando Tarefas......................................................................... 152
Módulo 15 – Backups e Compactação de arquivos..................................................... 163
Módulo 16 - Fundamentos de TCP/IP ....................................................................... 178
Módulo 17 - Fundamentos de IPv6 ............................................................................ 198
Módulo 18 - Configuração de Rede ........................................................................... 211
SS3187 - v1.0 – CentOS 6.2 Página 3
Formação Intensiva Linux- 96 horas
SS3187 - v1.0 – CentOS 6.2 Página 4
Formação Intensiva Linux- 96 horas
Módulo 7 - Sistema de Inicialização do Linux
SS3187 - v1.0 – CentOS 6.2 Página 5
Formação Intensiva Linux- 96 horas
7.0 O Processo de Boot do Linux
O processo de Boot ou a inicialização de um Sistema Operacional é um conjunto de
operações que se dividem em duas fases bem distintas:
• Fase 1 – Dependente do Hardware: Dependente da arquitetura de hardware utilizada
(Ex.: arquitetura Intel “X86”).
• Fase 2 – Dependente do sistema Operacional: É particular de cada Sistema
Operacional (Ex.: Linux).
Fase 1 – Os Procedimentos de Hardware
Logo após a ativação (“Power On”) do computador, é executado um conjunto básico de
rotinas de teste de hardware e checagem de memória, conhecido como “Rotinas de POST”
(“Power On Off Self Test ). Após este curto período os procedimentos de hardware contidos
nesta fase, prosseguem conforme descrito abaixo:
A BIOS (Basic Input/Output System) é inicializada e, então, realiza a verificação dos dispositivos
de Hardware da máquina. A BIOS é um Firmware, armazenada na memória ROM (Read-Only
Memory) do computador e é executada toda vez que o computador é iniciado. Seu propósito é
encontrar os dispositivos de Hardware necessários pelo processo de boot que carrega e
inicializa o programa de boot armazenado na MBR (Master Boot Record). No caso do Linux, a
BIOS realiza suas verificações e analisa a MBR, que contém o primeiro estágio do carregador de
boot como o LILO ou GRUB. Após encontrar o carregador de boot, a BIOS inicia-o.
1. A figura 1 abaixo ilustra o processo de verificação de Hardware efetuado pela BIOS.
Figura 1 – Processo de verificação da BIOS
SS3187 - v1.0 – CentOS 6.2 Página 6
Formação Intensiva Linux- 96 horas
2. A BIOS entrega o controle para o carregador de boot, o qual se encarrega de prosseguir
com o processo da carga do sistema operacional.
A partir deste ponto, entra em ação a segunda Fase do processo de boot, a qual, como
já foi dito anteriormente, é particular a cada Sistema Operacional. No Sistema Operacional
LINUX, o procedimento é descrito a seguir:
Fase 2 – A inicialização do Linux:
Neste ponto, entra em ação um programa especial chamado simplesmente de
“Carregador” (“Loader”), ou ainda “Gerenciador de Boot”, que é responsável por prosseguir com
a carga do sistema operacional. Muito dependente do hardware, este programa é quase todo
escrito em linguagem de máquina, pois depende diretamente das rotinas de Bios. No “PC”
(Arquitetura “X86), a área de inicialização do disco (“MBR”), é muito pequena e consta de
apenas 512 Bytes, os quais são insuficientes para carregar completamente qualquer sistema
operacional. Desta forma, o processo utilizado pelo carregador, é um processo de duas etapas:
• A primeira etapa, chamada de “Primeiro Estágio”, consta de um pequeno conjunto de
bytes que ficam residentes na área de inicialização do disco (MBR), e que fornecem o
endereço para a segunda parte (muito maior), do carregador.
• A segunda etapa, chamada de “Segundo Estágio”, tem a missão de completar a carga,
conforme descrito abaixo:
1) O carregador de boot do primeiro estágio executa o carregador de boot do
segundo estágio, o qual encontra a imagem do Kernel e a executa.
2) A imagem do Kernel possui um pequeno programa que não está
compactado / comprimido. Este programa é responsável por descompactar o
resto da imagem do Kernel que se encontra compactada e, somente após
isso, processá-la. O Kernel efetua uma varredura procurando por
informações do sistema, como velocidade e tipo do processador.
SS3187 - v1.0 – CentOS 6.2 Página 7
Formação Intensiva Linux- 96 horas
Além disso, os drivers do Kernel procuram por outros Hardwares e
configuram os que encontrarem. Após essas operações, o Kernel monta o
sistema de arquivos raiz no modo de somente leitura. Esse cuidado para
montar o sistema de arquivos se faz para prevenir que os dados se
corrompam durante o processo de boot.
3) O Kernel inicia o processo init executando o comando /sbin/init.
4) O processo init é iniciado. Ele inicializa os programas para os consoles
virtuais e terminais seriais, assim como inicia outros processos previamente
escolhidos e configurados efetuando uma monitoração deles até o
desligamento da máquina.
Cabe ressaltar, ainda, que esses passos para o processo de boot são genéricos e
podem divergir em diversos fatores mesmo para distribuições idênticas.
Os passos genéricos mostrados acima presumem que o sistema possui apenas uma
imagem de Kernel que é capaz de bootar. Entretanto, você pode possuir um setor de boot
instalado com outro sistema operacional além do Linux, como o Windows, ou ainda uma
distribuição diferente do Linux.
Além disso, quando você instalar uma versão do Kernel diferente da usual, será
necessário configurar o seu carregador de boot para que ele reconheça essa nova imagem do
Kernel. Adiante veremos que existem diversos parâmetros que podem ser especificados no
prompt do boot.
Antes de iniciarmos nosso próximo assunto, ‘’gerenciadores de boot’’, veremos um
importante integrante do processo de boot mais detalhadamente, a MBR.
A MBR está localizada no primeiro disco rígido, no primeiro setor do primeiro cilindro da
trilha 0 e cabeçalho 0, trilha que, em geral, é reservada para programas de boot. Esta é uma
área especial do disco rígido que é carregada, automaticamente, pela BIOS.
SS3187 - v1.0 – CentOS 6.2 Página 8
Formação Intensiva Linux- 96 horas
Como vimos anteriormente, a BIOS está localizada na ROM do computador, mas em um
tipo especial de ROM denominada EEPROM (Eletronically Erasable Programmable Read-
Only Memory), a qual, em geral, não é reprogramada no nível do usuário ou administrador. A
MBR é o primeiro ponto no qual um carregador de boot assume o controle do processo de boot.
A figura 2 abaixo ilustra o layout de um disco rígido particionado.
Podemos identificar na figura seis partições, seus dispositivos e seus pontos de
montagem correspondente, por exemplo:
• Partição 1: corresponde à primeira partição do disco;
• /dev/hda1: corresponde, no Linux, à identificação de uma partição do disco;
• /boot: corresponde ao ponto de montagem no Linux, ou seja, um diretório
onde será montada a partição 1.
Figura 2 – Layout de particionamento de disco rígido
SS3187 - v1.0 – CentOS 6.2 Página 9
Formação Intensiva Linux- 96 horas
Ao particionar um disco rígido, podemos criar somente quatro partições primárias devido
a limitações no sistema de tabela de partições dos computadores antigamente.
Entretanto, no nosso exemplo acima, é possível identificar seis partições. Isso é possível
graças à possibilidade de utilizar uma partição primária como partição estendida.
As três primeiras partições (/dev/hda1 até /dev/hda3) são ditas partições primárias,
pois são apontadas diretamente por suas definições.
As partições 5 e 6 (/dev/hda5 e /dev/hda6) são ditas partições lógicas, encontradas
dentro de uma partição estendida, no caso a partição 4 (/dev/hda4).
Concluindo, se temos um disco rígido de 50 Giga Bytes e queremos dividir ele em cinco
partições iguais deveríamos criar uma partição estendida, pelo fato de que podemos ter, no
máximo, apenas quatro partições primárias.
Assim, teríamos três partições primárias de 10 Giga Byte e uma partição estendida de 20
Giga Byte, a qual iria conter duas partições lógicas de 10 Giga Byte cada, fechando os 50 Giga
Byte de nosso disco rígido.
Sempre que desejarmos dividir nosso disco rígido em mais de quatro partes, utilizaremos
uma partição estendida, contorno o qual nos permite criar infinitas partições (de acordo com a
capacidade do disco).
7.1 Configurando os Gerenciadores de Boot
Atualmente existem diversos carregadores de boot disponíveis para a utilização.
Contudo, os mais utilizados em Linux, são:
• GRUB (Grand Unified Bootloader): É o padrão de carregador, utilizado por quase
todas as distribuições Linux, existentes na atualidade.
• LILO (Linux Loader): Mais antigo, ainda é o padrão para algumas poucas distribuições
Linux, hoje (ex.: Slackware).
Seja qual for a escolha pelo carregador de boot, ele será o primeiro passo executado no
processo de boot após as operações da BIOS.
SS3187 - v1.0 – CentOS 6.2 Página 10
Formação Intensiva Linux- 96 horas
O GRUB
O GRUB (Grand Unified BootLoader) é um carregador de boot que utiliza padrões
multiboot, sendo capaz de carregar diversas imagens de boot e módulos. Ele também possui a
capacidade de utilizar imagens pela rede, cabos seriais, terminais remotos e outros. Sua
utilização pode ser feita por menus de escolha ou através de uma interface por linha de
comando.
Acompanha o GRUB uma série de arquivos pré-configurados para inicializar os
diferentes sistemas operacionais suportados, como: BSD FFS, DOS FAT 16 e FAT 32, Minix fs,
Linux ext2fs e ext3fs, ReiserFS e VSTa fs.
Devido às diversas funcionalidades extras, o GRUB é bem maior do que os outros
carregadores de boot, o que é justificável pela flexibilidade advinda de tais funcionalidades.
Sua habilidade de acessar qualquer dispositivo encontrado pela BIOS é uma
funcionalidade extremamente utilizada. Por exemplo, se desejarmos visualizar o arquivo
/etc/fstab antes que o sistema esteja completamente inicializado, podemos utilizar o
comando cat no prompt do GRUB desta forma:
grub> cat /etc/fstab
O comando acima deve produzir uma saída semelhante à Figura 3 abaixo:
Figura 3 – Saída do comando cat no modo interativo do GRUB
SS3187 - v1.0 – CentOS 6.2 Página 11
Formação Intensiva Linux- 96 horas
O GRUB é composto por diversos arquivos, que ficam residentes em /boot/grub, os quais
passamos a listar abaixo:
• stage1: É o primeiro estágio do Grub.
• stage2: É o segundo estágio do Grub, o qual completa a carga do sistema operacional,
iniciada pelo estágio anterior.
• stage1_5: Estes arquivos ( existem vários ), são os responsáveis por fornecer o
endereço real ( físico ), de cada setor de disco que contém os arquivos de inicialização
do sistema. Isto é importante, porque, durante a inicialização do SO, a BIOS assume que
os arquivos estejam em setores contínuos do disco, o que, pode não ser verdade, caso
ocorra uma fragmentação no disco.
• [Link]/[Link]: É o arquivo de configuração do grub, onde definimos as “imagens”
de Sistemas Operacionais existentes e quais os arquivos que as compõem.
Após instalarmos o sistema do GRUB, é necessário instalar o carregador de boot em um
disquete ou disco rígido. Essa operação também pode ser feita de duas formas; através do
utilitário grub-install ou executando o GRUB de um disquete. Ambas as opções são
semelhantes, entretanto o utilitário pode encontrar uma versão errada do driver da BIOS. Isso
exige mais atenção se a escolha for pelo utilitário.
O GRUB vem com imagens de boot, normalmente encontradas no diretório
/usr/lib/grub/i386-pc. Caso você não queira utilizar o grub-install, será necessário
copiar os arquivos stage1, stage2 e *stage1_5 para o diretório /boot/grub e então
executar o comando grub-set-default para utilizar as configurações padrão.
NOTA: Tenha sempre em mão um disco de emergência de forma que seja possível
resgatar seu computador caso seu disco rígido se torne não bootável.
SS3187 - v1.0 – CentOS 6.2 Página 12
Formação Intensiva Linux- 96 horas
Criando um disco de BOOT com o GRUB
Para criarmos um disco de boot é necessário copiar os arquivos stage1 e stage2, do
diretório de imagens do GRUB, e escrevê-los no primeiro e segundo bloco do disquete,
respectivamente.
Os comandos abaixo, executados em um shell, servem para criar um disco de boot.
# cd /usr/lib/grub/i386-pc
# dd if=stage1 of=/dev/fd0 bs=512 count=1
1+0 records in
1+0 records out
# dd if=stage2 of=/dev/fd0 bs=512 seek=1
153+1 records in
153+1 records out
#
Utilizando o grub-install para instalar o GRUB
O uso do utilitário grub-install é extremamente simples. Entretanto, é necessária
muita atenção ao recorrer-se deste.
O uso do grub-install é direto, somente é necessário especificar um argumento para
ele que indique onde o carregador de boot deve ser instalado. Este argumento pode ser um
dispositivo (como /dev/hda) ou uma partição, especificada na notação do GRUB. Por exemplo,
o comando abaixo irá instalar o GRUB na MBR do primeiro disco rígido IDE:
# grub-install /dev/hda
Se desejarmos instalar o GRUB no primeiro disco da BIOS então usaremos o comando:
# grub-install '(hd0)'
SS3187 - v1.0 – CentOS 6.2 Página 13
Formação Intensiva Linux- 96 horas
Os exemplos acima assumem que o GRUB utilize as imagens partindo do diretório raiz.
Caso exista necessidade de usar as imagens localizadas em um diretório diferente, será
necessário especificar a opção –-root-directory.
Um exemplo típico para o uso desta opção é a necessidade de criarmos um disquete de
boot com um sistema de arquivos. Os comandos abaixo visam efetuar essa tarefa.
# mke2fs /dev/fd0
# mount -t ext2 /dev/fd0 /mnt
# grub-install --root-directory=/mnt fd0
# umount /mnt
Além disso, a utilização desta opção também serve para os casos onde temos uma
partição de boot separada, utilizando o ponto de montagem /boot.
Por ser apenas um “loader”, o Grub não tem conhecimento sobre pontos de montagem,
sendo assim, é necessário informá-lo, qual é o ponto de montagem correto. O comando abaixo
ilustra essa situação, considerando que o ponto de montagem é o diretório /boot:
# grub-install –root-directory=/boot /dev/hda
NOTA: O comando grub-install, após a instalação, irá retornar se ele foi capaz
de acertar o mapeamento do disco rígido. O formato é definido no arquivo
/boot/grub/[Link]. Sempre verifique esse arquivo, caso ele esteja errado é
possível que o seu computador tenha problemas ao iniciar.
SS3187 - v1.0 – CentOS 6.2 Página 14
Formação Intensiva Linux- 96 horas
Fazendo um sistema robusto
Possuir um sistema operacional robusto é algo que, hoje em dia, é indispensável. A cada
nova atualização do Kernel do Linux é necessário que este seja testado para determinar se a
atualização foi feita com sucesso. Entretanto, é importante que o seu computador possa bootar
novamente mesmo que, após a atualização, ele se torne não bootável. Esta robustez é
alcançada preocupando-se com dois pontos específicos:
1. Tenha sempre um sistema funcional / bootável. Por exemplo, se um
novo Kernel será testado, sempre tenha outro Kernel funcional em um lugar diferente.
Além disso, algumas vezes é interessante termos a cópia completa do nosso sistema
funcional em uma partição diferente do disco rígido.
2. É necessário que o GRUB seja, sempre, direcionado para um sistema
funcional quando um novo sistema falhar. Isto é possível graças ao sistema de fallback
do GRUB.
Existem duas maneiras de fazermos com que o GRUB esteja sempre apontando para o
sistema correto; a primeira delas (booting once-only) é bem simples, mas não garante muita
robustez e a segunda (booting fallback systems) é mais complexa para configurar, entretanto é a
melhor solução para garantir que o seu sistema sempre irá iniciar enquanto o GRUB funcionar
corretamente.
Booting once-only
Nessa abordagem é possível que você instrua o GRUB a bootar uma determinada
imagem somente no próximo boot e não mais. Suponha que você tenha um Kernel antigo
chamado old_kernel e um novo, chamado new_kernel. Você também sabe que seu Kernel
antigo funciona perfeitamente, entretanto deseja testar o novo.
É possível especificar que o GRUB deve utilizar o novo Kernel somente uma vez e
depois disso continue bootando com o Kernel antigo. Isso garante que o seu sistema irá voltar a
funcionar com o Kernel antigo mesmo que o novo falhe, por exemplo, acusando um erro de
Kernel Panic.
SS3187 - v1.0 – CentOS 6.2 Página 15
Formação Intensiva Linux- 96 horas
Primeiro é necessário modificarmos o nosso arquivo de configuração, em geral o arquivo
/boot/grub/[Link], e colocarmos as seguintes configurações:
default saved # Muito importante
timeout 10 # Define timeout para escolha
title the old kernel # Define rótulo do Kernel no menu de escolha
root (hd0,0) # Define partição da imagem do Kernel
kernel /old_kernel # Define o nome da imagem do Kernel
savedefault # Determina entrada corrente do GRUB
title the new kernel
root (hd0,0)
kernel /new_kernel
savedefault 0 # Muito importante
Neste arquivo de configuração, são usadas as opções “default saved” no início do
arquivo e “savedefault 0” na entrada para o novo Kernel. Isto significa que o GRUB irá bootar
a entrada correta por padrão após ter bootado a entrada para o novo Kernel.
A configuração acima fará com que o GRUB sempre tente bootar com o Kernel antigo
depois de ter bootado com o Kernel novo, porque ‘0’ é a entrada para o Kernel antigo e a opção
“savedefault 0” indica que a entrada segura é a ‘0’, ou seja, a entrada do Kernel antigo.
Após editar o “[Link]”, o próximo passo é instruir o GRUB a bootar com o novo Kernel
na próxima vez que ele for iniciado. O comando abaixo descreve essa operação:
# grub-set-default 1
Esse comando define a entrada para ‘1’, que no nosso arquivo de configuração
correspondo ao Kernel novo.
Este método é útil, mas não muito robusto, pois o GRUB poderia parar de bootar no
caso de algum erro na entrada de boot, como, por exemplo, se o novo Kernel possui um formato
inválido de execução.
SS3187 - v1.0 – CentOS 6.2 Página 16
Formação Intensiva Linux- 96 horas
Booting fallback systems
Além da técnica demonstrada acima, o GRUB ainda suporta um mecanismo de fallback
que pode bootar uma ou mais entradas caso a entrada padrão venha a falhar. É possível
especificar múltiplas entradas de fallback, tantas quantas desejáveis.
Para exemplificar, suponha que existem três sistemas “A”, “B” e “C”. O sistema “A” é
determinado como padrão. “B” é um sistema de backup que é, supostamente, bootável
corretamente. “C” é outro sistema de backup usado no caso de “B” vir a falhar.
Assim, para determinar que o GRUB deva tentar bootar segundo a ordem dos sistemas
“A”, “B” e “C”, o arquivo de configuração deverá ser semelhante a este:
default saved # Importante
timeout 10
fallback 1 2 # Importante
title A
root (hd0,0)
kernel /kernel
savedefault fallback # Importante
title B
root (hd1,0)
kernel /kernel
savedefault fallback # Importante
title C
root (hd2,0)
kernel /kernel
savedefault
Note que as opções “default saved”, “fallback 1 2” e “savedefault” são
usadas nesse arquivo de configuração. O GRUB irá bootar a entrada segura por padrão e
armazenar a entrada fallback como próxima entrada de boot.
SS3187 - v1.0 – CentOS 6.2 Página 17
Formação Intensiva Linux- 96 horas
Em outras palavras, quando o GRUB tentar bootar o sistema “A”, ele irá gravar ‘1’ como
a próxima entrada, isso porque o comando fallback especifica que ‘1’ é a primeira entrada de
fallback. A entrada ‘1’ é ‘B’, assim, GRUB tentará bootar ‘B’ no próximo boot.
Da mesma forma, quando o GRUB tentar bootar B, ele irá gravar ‘2’ como próxima
entrada por causa da especificação do comando fallback, que determina ‘2’ como próxima
entrada de fallback. Isso garante que o GRUB irá bootar “C” após bootar o sistema “B”.
Cabe ressaltar que o GRUB utiliza as entradas de fallback quando ele falhar bootando
uma entrada ou quando “A” ou “B” falharem iniciando seu sistema operacional. Assim, essa
solução garante que o seu sistema é iniciado mesmo quando o GRUB não conseguir encontrar a
imagem do Kernel ou quando acontecer um Kernel Panic.
Entretanto, é necessário que o comando grub-set-default seja executado quando o
sistema “A” iniciar corretamente ou quando “A” for concertado depois de ter encontrado o
problema. Isso se dá devido ao fato de que o GRUB sempre ajustará a próxima entrada de boot
de acordo com o fallback.
Para automatizar o comando, você pode colocar ele em um script de inicialização, como
o [Link], indicando que o sistema de boot é o “A”. O comando abaixo determina qual é o
sistema que deve ser bootado na próxima vez.
# grub-set-default 0
Onde ‘0’ é o número da entrada para o sistema “A”.
SS3187 - v1.0 – CentOS 6.2 Página 18
Formação Intensiva Linux- 96 horas
Utilizando um arquivo de configuração
Como vimos anteriormente, é possível utilizarmos o GRUB por linha de comando para
inicializarmos nosso sistema. Entretanto, precisaríamos digitar um determinado número de
comandos toda a vez que desejarmos usar o Linux.
Uma solução para isso é utilizar um menu de interface provido pelo GRUB, onde é
possível selecionar um item, usando as setas de navegação, que o GRUB se encarregará de
executar todos os passos necessários para inicializar o sistema.
Para habilitar a opção de menu, é necessário criarmos um arquivo [Link] no
diretório de boot. Iremos agora analisar um exemplo de configuração. Inicialmente existem
algumas configurações gerais e opções relacionadas com a interface do menu. Geralmente
essas opções são colocadas antes dos itens (iniciam com “title”).
#
# Exemplo de configuração para o arquivo de Menu
#
Assim como em outros arquivos de configuração, as linhas que começam com o caracter
“#” são comentários e não serão consideradas pelo GRUB.
# Por padrão, inicia a primeira entrada.
default 0
A primeira entrada será escolhida como padrão (note que a contagem começa do zero e
não do um).
# Boota automaticamente após 30 segundos
timeout 30
Como indicado no comentário, o GRUB irá bootar automaticamente após 30 segundo, a
menos que alguma tecla seja pressionada, o que fará com que o contador pare.
# Define a segunda entrada como Fallback
fallback 1
Caso, a entrada padrão falhe, inicia a segunda entrada, definida pelo fallback.
SS3187 - v1.0 – CentOS 6.2 Página 19
Formação Intensiva Linux- 96 horas
Seguindo o arquivo de configuração do menu, devemos especificar as definições dos
sistemas operacionais. Você notará que cada entrada começa com o comando title e suas
ações são definidas posteriormente.
O comando title possui apenas um argumento que é usado como descrição do
sistema. Assim, você deverá escrever uma forma de identificar o sistema em questão.
# Bootando com o GNU/Hurd
title GNU/Hurd
root (hd0,0)
kernel /boot/[Link] root=hd0s1
module /boot/[Link]
Esta entrada irá inicializar o sistema GNU/Hurd, localizado no primeiro disco rígido e
primeira partição, indicado pelo comando root (hd0, 0).
# Bootando com o GNU/Linux
title GNU/Linux
root hd1,0)
kernel /boot/vmlinuz root=/dev/sda1 ro
Esta entrada irá inicializar o sistema GNU/Linux, localizado no segundo disco rígido e na
primeira partição. Note, que o comando boot não foi utilizado ao final de cada item. Isso
acontece porque o GRUB automaticamente executa o comando boot se outros comandos foram
executados com sucesso.
Lista dos comandos de Menu
Abaixo veremos uma lista dos comandos que podem ser usados somente na
configuração do arquivo de menus.
default num
Define o boot padrão de acordo com a entrada em num. Os números começam do 0 e a
entrada 0 é a padrão para o caso deste comando não ser usado. É possível especificar o valor
‘saved’ ao invés de um número. Neste caso o boot padrão será a entrada armazenada com o
comando ‘savedefault’.
SS3187 - v1.0 – CentOS 6.2 Página 20
Formação Intensiva Linux- 96 horas
fallback num
Este comando indica que, caso a entrada para o boot padrão possuir qualquer erro, ao
invés de esperar que o usuário faça alguma coisa o próprio GRUB se encarrega de iniciar,
imediatamente, a entrada definida por num. O comando fallback permite a entrada de
múltiplos valores.
hiddenmenu
Não mostra o menu. Caso esse comando seja utilizado, o menu não será exibido no
terminal e a entrada padrão será iniciada depois que o timeout expirar. Ainda assim, o usuário
pode requisitar o menu apertando a tecla <ESC> antes que o tempo expire.
timeout sec
Define um tempo de timeout em segundos, antes de iniciar o processo de boot com a
entrada padrão.
title name
Inicia uma nova entrada de boot e define o seu nome com o resto da linha, sendo
iniciada a partir do primeiro caracter que não seja o espaço em branco.
Lista de comando gerais
Abaixo serão mostrados alguns dos comandos que podem tanto ser usados na linha de
comando quanto no arquivo de configuração do menu.
bootp [--with-configfile]
Inicializa um dispositivo de rede através do protocolo BOOTP. Este comando só está
disponível se o GRUB tiver sido instalado com suporte ao netboot. Se você especificar o
parâmetro –with-configfile o GRUB irá carregar um arquivo de configuração especificado
pelo seu servidor BOOTP com a tag ‘150’.
color normal [highlight]
Muda as cores do menu. A cor, no parâmetro normal, é usada para a maioria das linhas
no menu e a cor no parâmetro highlight é usada para reforçar as cores onde o cursor está
localizado.
SS3187 - v1.0 – CentOS 6.2 Página 21
Formação Intensiva Linux- 96 horas
Caso o segundo parâmetro seja omitido, as cores inversas do primeiro parâmetro serão
utilizadas na linha em questão. O formato das cores é estipulado como Cor da fonte / Cor de
fundo e são identificadas pelo nome das cores. Abaixo se encontram as cores disponíveis:
• black
• blue
• green
• cyan
• red
• magenta
• brown
• light-gray
As cores abaixo só podem ser utilizadas como Cor da fonte.
• dark-gray
• light-blue
• light-green
• light-cyan
• light-red
• light-magenta
• yellow
• white
Caso você preferir, ainda pode utilizar o prefixo blink- para as cores da fonte. Isso fará
com que a cor pisque ininterruptamente.
SS3187 - v1.0 – CentOS 6.2 Página 22
Formação Intensiva Linux- 96 horas
# Define as cores padrão.
color light-gray/blue black/light-gray
# Muda as cores.
title OS-BS like
color magenta/blue black/magenta
Os exemplos acima ilustram a utilização do comando color.
device driver file
Na linha de comando do GRUB é possível especificar um arquivo file como disco atual
para um determinado driver da BIOS. Você pode usar esse comando para criar uma imagem de
disco ou para consertar discos adivinhados pelo GRUB, quando ele falhar ao determinar o disco.
Este comando só pode ser usado na linha de comando do GRUB.
grub> device (fd0) /floppy-image
grub> device (hd0) /dev/sd0
Acima um exemplo de como utilizar esse comando.
dhcp [--with-configfile]
Inicia um dispositivo de rede com o protocolo DHCP. Atualmente, esse comando é
apenas um sinônimo para o comando bootp e, assim como este, somente está disponível se o
GRUB for compilado com suporte a netboot.
hide partition
Esconde uma partição partition definindo o bit hidden em seu código de partição.
SS3187 - v1.0 – CentOS 6.2 Página 23
Formação Intensiva Linux- 96 horas
O comando abaixo efetua a configuração manual do endereço IP, netmask, gateway e do
endereço do servidor do dispositivo de rede:
ifconfig [server=server] [
gateway=gateway] [
mask=mask] [
address=address]
Os valores devem ser informados no formato decimal pontual, por exemplo
‘[Link]’. Caso nenhuma opção seja passada, esse comando mostra as configurações da
rede.
partnew part type from len
Cria uma nova partição primária onde part é a partição especificada na sintaxe do
GRUB, type é o tipo de partição que deve ter um número na faixa de 0 a 0xff, from é o endereço
inicial e len é o tamanho da partição em unidades de setor.
parttype part type
Muda o tipo de uma partição existente onde part é a partição especificada na sintaxe do
GRUB e type é o novo tipo da partição e deve ser um número no intervalo de 0 a 0xff.
password [--md5] passwd [new-config-file]
Se este comando for usado na primeira seção de um arquivo de configuração de menu,
ele irá desabilitar todas as interações para o controle de edição, assim como todas as entradas
protegidas com o comando look. Caso o parâmetro passwd seja informado, o GRUB irá
carregar o new-config-file como novo arquivo de configuração e irá reiniciar o stage 2
(segundo estágio de boot) caso o new-config-file seja informado. Do contrário, o GRUB irá
apenas habilitar as instruções protegidas. Também é possível utilizar esse comando na seção de
scripts, o que fará com que a senha seja informada, antes de continuar. A opção –-md5 indica
como o password foi encriptado.
SS3187 - v1.0 – CentOS 6.2 Página 24
Formação Intensiva Linux- 96 horas
Lista de comandos de entrada para menu e linha de comando
Abaixo serão mostrados alguns dos comandos de entrada que podem ser usados tanto
no menu quanto no shell do GRUB:
boot
Efetua o boot do sistema operacional ou do chain-loader que tenha sido carregado. Esse
comando apenas é necessário se for executado de uma linha de comando interativo. Na
configuração do menu este comando está implícito.
cat file
Exibe o conteúdo do arquivo file. Pode ser útil para ver informações das partições do
computador, por exemplo.
chainloader [--force] file
Esse comando carrega um chain-loader definido por file. Como qualquer outro arquivo
carregado pelo código do sistema de arquivos, ele pode usar a notação de blocklist para pegar a
partição atual com ‘+1’. Caso você especifique a opção --force o arquivo file será carregado
de qualquer maneira, possuindo uma assinatura correta ou não.
displayapm
Mostra as informações da BIOS para APM (Advanced Power Management). Útil para
instalações em notebooks.
find filename
Procura por um arquivo com o nome filename em todas as partições montadas e mostra
uma lista com todos os dispositivos que contém o arquivo em questão. O nome para procura
deve ser absoluto, ou seja, deve se levar em conta o diretório onde se encontra.
halt -–no-apm
Este comando desliga o computador. Caso a opção –-no-apm seja especificada, o
computador irá desligar sem a APM da BIOS, caso contrário, utilizará.
SS3187 - v1.0 – CentOS 6.2 Página 25
Formação Intensiva Linux- 96 horas
help –-all [pattern...]
Mostra uma lista com todos os comandos que podem ser executados no GRUB, no caso
de utilizar a opção --all. Se pattern for especificado, então uma descrição completa do
comando será apresentada.
initrd file
Carrega um ramdisk para o formato de boot do Linux e define os parâmetros apropriados
na área de memória.
kernel [--type=type] [--no-mem-option] file ...
Este comando tenta carregar a imagem de boot primária definida em file. Qualquer
módulo necessário deve ser carregado antes de usar esse comando. A opção type é usada para
especificar o tipo de Kernel definido por file. O argumento deve ser um dos: ‘netbsd’, ‘freebsd’,
‘openbsd’, ‘linux’, ‘biglinux’ e ‘multiboot’. A última opção, --no-mem-option somente é usada
no Linux e serve para instruir que o GRUB não passe a opção mem= para o Kernel.
lock
Previne que usuários normais possam executar, arbitrariamente, entradas de menu.
Para que esse comando seja eficiente, é necessário utilizar outro comando em conjunto,
password.
title Esta entrada deve ser protegida de usuários normais
lock
root (hd0,a)
kernel /no-security-os
Como mostrado acima, este comando é usado no menu.
makeactive
Define a partição ativa no disco raiz para o dispositivo raiz do GRUB. Este comando é
limitado a partições primárias.
SS3187 - v1.0 – CentOS 6.2 Página 26
Formação Intensiva Linux- 96 horas
md5crypt
Este comando, após ser executado, pede que o usuário informe uma senha e então
encripta ela no formato MD5. A senha encriptada pode ser usada com o comando password.
module file
Carrega um módulo de boot definido em file para um formato de boot multiboot.
pause message...
Imprime a mensagem message e espera até que uma tecla seja pressionada.
root device [hdbias]
Define a raiz do dispositivo atual para o dispositivo indicado por device e, então, tenta
montar esse dispositivo para identificar o tamanho da partição. O parâmetro opcional hdbias é
um número que diz para o Kernel do BSD quantos discos são controlados pela BIOS.
savedefault num
Armazena a entrada atual do menu ou num. Por exemplo:
default saved
timeout 10
title GNU/Linux
root (hd0,0)
kernel /boot/vmlinuz root=/dev/sda1 vga=ext
initrd /boot/initrd
savedefault
title FreeBSD
root (hd0,a)
kernel /boot/loader
savedefault
A configuração acima fará com que o GRUB escolha como padrão, a entrada bootada
anteriormente. Além disso, é possível especificar um número de fallback ao invés do número da
entrada. Isso fará com que a próxima entrada para fallback seja armazenada.
SS3187 - v1.0 – CentOS 6.2 Página 27
Formação Intensiva Linux- 96 horas
O LILO
O LILO (Linux Loader) é um dos carregadores de boot mais antigos e conhecidos para
os usuários de Linux. Assim como os outros programas do gênero, ele fica armazenado fora do
sistema operacional instalado no computador e permite que você escolha qual sistema deve ser
iniciado. Além disso, ele permite que você defina opções especiais que podem mudar a forma
como o sistema operacional escolhido seja iniciado. Na distribuição de Linux chamada de
Slackware, o LILO é o carregador de boot utilizado por padrão, ao invés do GRUB.
Caso se utilize o LILO, ele será instalado ou na MBR ou no primeiro setor da partição
raiz do disco rígido. A MBR é lida diretamente pela BIOS do computador, assim, em geral, se o
LILO for o único carregador de boot usado no computador, é uma boa prática utilizar ele na
MBR. Caso contrário, ou seja, caso exista além do LILO outro carregador de boot, então é
recomendado colocar o LILO na partição raiz do disco rígido.
Como vimos anteriormente, no início deste capítulo, a Figura 2 ilustra a MBR contendo o
código do programa LILO, assim como 64 bytes para identificar as quatro partições primárias e 2
bytes reservados para o número mágico, que é usado para determinar se o setor é realmente um
setor de boot ou não. Sabendo que um setor possui 512 bytes e que o LILO deve compartilhar
este espaço, este acaba limitado ao tamanho de 446 bytes.
Para contornar essa restrição, este carregador de boot foi dividido em duas fases; a
primeira fase usa o LILO, na MBR, para alocar o carregador de boot de segundo estágio, o que
geralmente é alocado no arquivo /boot/boot.b do disco que contém a raiz do sistema de
arquivos do Linux, ou na partição /boot, no caso desta partição ser separada da partição raiz.
Depois, o carregador de boot de segundo estágio se copia para a RAM, por cima do
carregador de boot de primeiro estágio, para continuar o processo de boot.
O LILO é muito versátil e, assim como o GRUB, é capaz de carregar diversas imagens
de Kernel assim como o setor de boot de qualquer outra partição bootável no sistema. Esta
partição bootável deve apontar para uma partição contendo o Windows 95, 98, NT ou outro
sistema operacional que permita ser iniciado.
Para que o LILO possa bootar qualquer sistema, é necessário que ele tome
conhecimento da imagem de qualquer sistema que você deseja iniciar.
Para fazer isso, é necessário que você adicione informações sobre as imagens de
Kernel ou do sistema operacional no arquivo /etc/[Link], incluindo uma descrição que
será usada para identificar cada imagem diferente. Depois de feito isso, você deverá executar o
programa do lilo, como veremos em seguida, para que este possa carregar as imagens do
Kernel escolhido e suas correspondentes imagens initrd, caso exista, para a memória.
SS3187 - v1.0 – CentOS 6.2 Página 28
Formação Intensiva Linux- 96 horas
O arquivo de configuração do LILO, ( “/etc/[Link]”), é mostrado abaixo:
prompt
timeout=50
default=linux
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
message=/boot/message
linear
image=/boot/vmlinuz-2.6.5-1.327
label=linux
initrd=/boot/[Link]
read-only
root=/dev/hda6
append=”root=LABEL=/”
other=/dev/hda1
optional
label=dos
Abaixo veremos alguns comandos que estão disponíveis pelo LILO e devem ser usados
no arquivo de configuração:
• prompt: define que um prompt irá aparecer quando o sistema é inicializado
requerendo que alguma tecla seja pressionada.
• timeout: define o tempo de espera antes de iniciar o processo de boot. Se
alguma tecla for pressionada esse contador irá parar.
• boot: indica a partição bootável no disco rígido.
• map: indica a localização do arquivo map. Este arquivo contém os nomes e
as localizações das imagens de Kernel.
• install: indica que o novo bootsector, será o “/boot/boot.b .
• message: exibe o conteúdo de “/boot/message” durante o boot.
• linear: causa a geração de endereços de setores lineares, ao invés de
endereços por setor/cabeçalho/cilindro.
SS3187 - v1.0 – CentOS 6.2 Página 29
Formação Intensiva Linux- 96 horas
• image: indica o local onde o arquivo de imagem do Kernel se encontra.
• label: é o titulo usado para identificar qual sistema será iniciado.
• initrd: indica o local inicial onde o disco de imagem RAM está.
• read-only: indica que o sistema de arquivos deve ser inicialmente, montado
como de somente leitura até que seja ser verificado pelo sistema.
• root: indica em que partição deve ser montado o sistema de arquivos raiz
(/).
• other: indica outro sistema operacional que não o Linux. Útil para inicializar
sistemas como Windows, por exemplo.
• optional: omite a imagem indisponível no mapeamento na hora da criação.
• password: protege uma imagem com uma senha.
• restricted: este comando faz com que uma senha seja requisitada caso um
comando seja especificado na linha, por exemplo o comando single.
• append: permite que uma string de letras e números seja passada para o
Kernel.
Após editarmos nosso arquivo de configuração do LILO, devemos então gravar as
informações do carregador de boot. Para isso, executamos como “root” o comando abaixo:
# /sbin/lilo
NOTA: Não se esqueça de sempre atualizar seu carregador de boot! Se utilizar o
LILO, use o comando acima descrito. Se usar o GRUB, use o comando grub-
install.
SS3187 - v1.0 – CentOS 6.2 Página 30
Formação Intensiva Linux- 96 horas
7.2 Configurando o Init
Após todo o processo de boot, visto anteriormente neste capítulo, é então começado o
processo de inicialização do nosso sistema operacional Linux. Este processo varia de
distribuição para distribuição e essas diferenças geralmente são em relação aos locais e nomes
dos scripts de inicialização. Outro ponto que cabe ressaltar, em relação às diferenças, diz
respeito sobre o que é executado por padrão em cada distribuição.
O processo de inicialização começa quando o Kernel inicia o programa init, este é o
primeiro processo executado por ele. O init realiza uma análise do arquivo /etc/inittab para
determinar, especificamente, quais programas ele deve executar e em qual nível de execução
deverá deixar o sistema quando este for terminado.
Existem, basicamente, dois tipos de inicialização de sistema. Os que utilizam os scripts
no estilo System V e os que usam o modelo BSD. As distribuição CentOs, por exemplo, adota o
primeiro tipo e a distribuição Slackware, adota o segundo.
No arquivo /etc/inittab, as linhas de configuração obedecem ao formato abaixo:
identificação:níveis_execução:ação:processo
ONDE:
“Nível de execução” corresponde ao “runlevel” desejado para o processo “init”, Os níveis de
execução possíveis, são mostrados na tabela abaixo:
Nível Descrição
0 System halt. Usado para desligar o sistema
1 Single User. Coloca o sistema em modo de mono usuário
2 Local multiuser without remote network. Múltiplos usuários locais, sem rede remota
3 Full multiuser with network. Múltiplos usuários, com acesso à rede
4 Não definido.
5 Full multiuser with network and xdm. Múltiplos usuários com ambiente gráfico e rede
6 System reboot. Usado para reiniciar o sistema
SS3187 - v1.0 – CentOS 6.2 Página 31
Formação Intensiva Linux- 96 horas
Vamos agora à interpretação deste arquivo de configuração.
i[Link]initdefault:
A primeira linha não está comentada no “inittab, define qual nível deve ser usado no
instante em que o sistema operacional for iniciado. No nosso exemplo está definido o nível 5.
si::bootwait:/etc/init.d/boot
Esta linha define qual script deve ser executado em primeiro lugar pelo init. Essa
operação somente será efetuada caso o sistema não inicie em caráter de emergência, ou seja,
não se utilize o parâmetro –b no boot.
l[Link]wait:/etc/init.d/rc 0
l[Link]wait:/etc/init.d/rc 1
l[Link]wait:/etc/init.d/rc 2
l[Link]wait:/etc/init.d/rc 3
#l[Link]wait:/etc/init.d/rc 4
l[Link]wait:/etc/init.d/rc 5
l[Link]wait:/etc/init.d/rc 6
As linhas acima definem quais scripts devem ser executados para um determinado nível
de inicialização. O script /etc/init.d/rc é o responsável por gerenciar essa tarefa.
Dependendo do nível passado para ele, um conjunto de scripts será acionado.
ls:S:wait:/etc/init.d/rc S
~~:S:respawn:/sbin/sulogin
As duas linhas acima definem quais ações devem ser tomadas ao iniciar o sistema em
modo mono-usuário.
ca::ctrlaltdel:/sbin/shutdown –r-t 4 now
SS3187 - v1.0 – CentOS 6.2 Página 32
Formação Intensiva Linux- 96 horas
Esta linha instrui qual ação deve ser tomada caso o init receba o sinal SIGINT. Em
outras palavras, quando as teclas <CTRL> <ALT> <DEL> forem pressionadas, neste caso o
sistema irá reiniciar.
kb::kbrequest:/bin/echo "Keyboard Request -- edit /etc/inittab to let this
work."
O parâmetro acima é usado para definir teclas especiais de um teclado. Ou seja,
podemos definir qual ação deve ser tomada caso o usuário pressione teclas especiais, como por
exemplo, <ALT> <SETA PARA CIMA>. Na linha acima está definido apenas uma mensagem de
alerta, caso a pessoa pressione alguma tecla especial, esta mensagem será mostrada para ele.
pf::powerwait:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
#pn::powerfail:/etc/init.d/powerfail now
po::powerokwait:/etc/init.d/powerfail stop
Este conjunto de instruções é utilizado no caso de falta ou restabelecimento de energia.
[Link]respawn:/sbin/mingetty --noclear tty1
[Link]respawn:/sbin/mingetty tty2
[Link]respawn:/sbin/mingetty tty3
[Link]respawn:/sbin/mingetty tty4
[Link]respawn:/sbin/mingetty tty5
[Link]respawn:/sbin/mingetty tty6
Estas definições são usadas para estabelecer o comportamento dos terminais/consoles
que serão iniciados junto com o sistema operacional.
SS3187 - v1.0 – CentOS 6.2 Página 33
Formação Intensiva Linux- 96 horas
7.3 Gerenciado os níveis de execução
Após conhecer os parâmetros para o “init”, é necessário que este execute todos esses
scripts. Como vimos, a forma como o sistema irá iniciar é definida através de níveis e cada um
desses níveis define um padrão de comportamento do sistema. Cada nível de execução possui
um conjunto de scripts que devem ser executados. Esse conjunto está definido dentro de um
diretório o qual corresponde ao nível de execução do init:
• /etc/rc.d/rc0.d,
• /etc/rc.d/rc1.d,
• /etc/rc.d/rc2.d,
• /etc/rc.d/rc3.d,
• /etc/rc.d/rc4.d,
• /etc/rc.d/rc5.d,
• /etc/rc.d/rc6.d,
• /etc/rc.d/rcS.d,
A figura, abaixo, ilustra o conteúdo do diretório.
Figura 4 - Conteúdo do diretório /etc/rc.d/rc5.d
SS3187 - v1.0 – CentOS 6.2 Página 34
Formação Intensiva Linux- 96 horas
Aqui vale ressaltar dois pontos: O primeiro, diz respeito aos scripts, todos esses arquivos
listados na figura acima são, na verdade, links simbólicos para os verdadeiros arquivos
localizados no diretório do nível anterior, ou seja, /etc/init.d.
O segundo ponto, diz respeito ao nome destes links: Todos eles começam pela letra ‘K’
ou ‘S’ seguidas de um número. Os links que começam com a letra ‘S’ serão aqueles executados
no processo de inicialização do sistema operacional (Startup), os que começam com a letra ‘K’
serão executados quando o sistema for desligado (Killing). Os números indicam a ordem de
prioridade que cada script deve obedecer.
Se desejarmos alterar quais scripts devem ser executados ao iniciar o sistema
operacional, devemos olhar dentro do diretório do nível de execução e então adicionar um novo
ou remover um existente. Além disso, existe o comando abaixo, o qual permite trocar de nível de
execução do init:
# /sbin/init
Na maioria dos sistemas, existe também o comando “telinit”, que é um link simbólico
apontando diretamente para o init.
Assim, por exemplo, se desejarmos alterar o “runlevel” do init para “3”, durante a
execução do sistema, podemos simplesmente executar o comando abaixo:
# /sbin/init 3 (ou, simplesmente, init 3).
SS3187 - v1.0 – CentOS 6.2 Página 35
Formação Intensiva Linux- 96 horas
Gerenciando os Níveis de Execução
Nas Distribuições Linux, baseadas no “Unix System V” (todas que utilizam o “rpm” ), é
possível se determinar quais scripts ou aplicações serão iniciados com o sistema, reescrevendo-
se os links simbólicos existentes em “/etc/rc.d/rcx.d”. Para isto podemos nos utilizar dos
seguintes meios:
• Comando chkconfig: Universal para todas as Distros, baseadas em “rpm”. Exemplo:
Comando: chkconfig --level 35 sshd off
ONDE:
--level 35: São o(s) runlevel(s) nos quais desejamos que o “chkconfig” atue.
sshd: É o nome do script, que corresponde ao serviço ( aplicação ), como existente em
“/etc/init.d”
• Ferramenta de gerenciamento de nível de serviço (depende de cada Distribuição): No
CentOs é o “system-config-services”, localizada no firetório “/usr/bin”.
Esta ferramenta pode ser utilizada tanto em modo texto, quanto em modo gráfico. Em
modo gráfico, esta, fica localizada em:
Sistema --> Administração --> Configurações do Servidor --> Serviços
Uma outra possibilidade é se usar o utilitário “ntsysv”, existente no CentOs. Para isso,
basta executar no console do sistema, o comando abaixo:
• Comando: ntsysv
SS3187 - v1.0 – CentOS 6.2 Página 36
Formação Intensiva Linux- 96 horas
Cada serviço, marcado com um “*”, será inicializado no boot, desde que mantido o runlevel atual.
Para marcar ou desmarcar um serviço, utilize a barra de espaços. Abaixo a tela do “ntsysv”:
O comando “ntsysv”
7.4 Verificando os LOGs de inicialização
O Linux possui um registro completo das atividades já executadas ou ainda em
execução no sistema. Estas atividades ficam registradas em arquivos de modo texto, que
chamamos genericamente de “arquivos de Logs”. Com relação à inicialização dos serviços ou do
próprio sistema, é importante observar que existem dois tipos principais de log:
• Logs de Hardware
• Logs de Software
SS3187 - v1.0 – CentOS 6.2 Página 37
Formação Intensiva Linux- 96 horas
Algumas vezes é muito útil podermos ver o que aconteceu quando o sistema estava
sendo iniciado. Isto é mais útil ainda quando escolhemos o nível de execução que inicia,
diretamente, o ambiente gráfico. Assim, é praticamente impossível conseguirmos acompanhar
todas as operações e seus resultados, pois estes passam muito rápido na tela.
Para podemos verificar o que ocorreu realmente no processo de inicialização,
precisamos recorrer aos logs, que nada mais são que os registros das operações feitas ao iniciar
o sistema operacional, no caso dos logs de inicialização, claro. Existem diversos arquivos de log,
mas estes outros serão mostrados posteriormente.
Existem duas formas práticas de termos acesso às informações que foram geradas no
momento de boot do sistema. A primeira delas é através do comando abaixo:
# dmesg
O comando dmesg é muito antigo, originado nos sistemas Unix, serve para mostrar as
mensagens de saída do Kernel. Além disso, após todo o processo de boot ter sido completado,
este comando ainda é extremamente útil, pois ele continuará recebendo informações do sistema
e dos controladores de dispositivos que usam a autoconfiguração.
Como existe muita informação no processo de boot, se executarmos o comando acima,
sem nenhum direcionamento de saída, será possível ver apenas as últimas ocorrências de
registros, pois as informações irão passar tão rápidas como no momento de boot.
Para contornar esse problema devemos direcionar a saída do comando. Uma solução é
através do comando more, como ilustrado abaixo.
# dmesg | more
Este comando irá imprimir a saída do dmesg de página em página. A figura abaixo
ilustra a saída deste comando. Reparem que no fim existe a palavra “—MORE—“, isso indica
que existem mais informações na próxima página, para continuar é necessário pressionar uma
tecla qualquer.
SS3187 - v1.0 – CentOS 6.2 Página 38
Formação Intensiva Linux- 96 horas
Figura 5 - Saída páginada do comando dmesg
A saída do comando dmesg, fica armazenada no arquivo /var/log/dmesg, onde poderá
ser lido. Contudo, vale lembrar que este arquivo é constantemente sobregravado, a cada boot,
sendo apagado o seu conteúdo anterior.
Logs de Software
Caso seja importante monitorar eventos de software como, por exemplo, a subida de um
serviço durante o boot ou mesmo após esse momento, o primeiro arquivo que deve ser
verificado é o arquivo “/var/log/messages”, que contém a inicialização de todo o sistema (parte
de software), além da inicialização dos serviços.
O arquivo “messages” é o primeiro lugar onde deve ser procurada a razão para uma
falha de inicialização de um serviço que acabamos de configurar.
SS3187 - v1.0 – CentOS 6.2 Página 39
Formação Intensiva Linux- 96 horas
7.5 Para Recordar
1. Processo de Boot: Após iniciar a máquina, a BIOS inicia o processo de
verificação e descobrimento dos dispositivos de Hardware dela. Após isso, é
iniciado o processo do carregador de boot, GRUB ou LILO. Depois de iniciado o
carregador de boot o processo init, que é o primeiro processo executado do
Linux, começa suas tarefa.
2. Definindo níveis de execução: A forma como o sistema Linux será iniciado,
isto é, os processos que serão rodados na sua inicialização dependem do nível
de execução especificado no arquivo /etc/inittab. Se quisermos alterar o
nível de execução sem precisar reiniciar o sistema podemos utilizar o comando
init, seguido do nível que queremos usar.
3. Scripts de inicialização: Esses scripts estão localizados no diretório
/etc/rc.d/rcX.d, onde X define o nível de inicialização do sistema. Os
arquivos encontrados nestes diretórios seguem um padrão de nomes. Aqueles
que começam com a letra “S” são executados na inicialização (Startup) e os
arquivos iniciados com “K” são executados quando a máquina é desligada (Kill).
Os números seguidos destas letras definem a ordem de precedência de cada
script.
4. Verificando logs de inicialização: Para verificarmos as mensagens geradas no
processo de inicialização podemos utilizar o comando dmesg ou então listar o
arquivo /var/log/dmesg
SS3187 - v1.0 – CentOS 6.2 Página 40
Formação Intensiva Linux- 96 horas
7.6 Exercícios
1. Qual é a principal tarefa do programa LILO?
2. No modo interativo do GRUB, quais os passos necessários para bootar a
imagem do Kernel chamada kernel_novo_2.6.7 localizada no diretório
/boot?
3. Partindo do princípio que o seu sistema é iniciado no modo gráfico, como fazer
para que ele inicie, sempre, no modo texto com suporte à rede?
4. Como posso saber quais dispositivos foram identificados na inicialização do
sistema?
SS3187 - v1.0 – CentOS 6.2 Página 41
Formação Intensiva Linux- 96 horas
Notas:
SS3187 - v1.0 – CentOS 6.2 Página 42
Formação Intensiva Linux- 96 horas
Módulo 8 - Gerenciando Partições
SS3187 - v1.0 – CentOS 6.2 Página 43
Formação Intensiva Linux- 96 horas
8.0 Gerenciando Partições com o Fdisk
Partições são porções lógicas ou físicas de um disco rígido. Nestas partições são
armazenadas as informações que desejamos. Este particionamento é necessário para acomodar
e organizar melhor os dados. Um bom esquema de particionamento permite escolher o sistema
de arquivos certo para cada uso e, também permite evitar a ocorrência de uma situação de disco
”cheio”, de modo geral, as partições recebem números que as identificam (1, 2,... etc). O
particionamento de um disco rígido é totalmente dependente da arquitetura de hardware
utilizada. Na arquitetura “X86”, são possíveis os seguintes tipos de partições:
• Partições Primárias (de 1 a 4 ): São as únicas partições que permitem iniciar um
Sistema Operacional, pois é nelas que se aloja o “MBR”.
• Partições Estendidas: São criadas através da conversão de uma partição primária em
estendida e utilizadas quando o número de 4 partições não é suficiente para o nosso
propósito.
• Partições Lógicas (de 5 a 255): Devem ser criadas dentro de uma partição estendida e
usadas para subdividir o disco rígido em mais do que as quatro partições primárias
originais.
O mínimo de partições necessário à instalação de um sistema LINUX é de uma partição,
a qual será o “/” (raiz) do sistema e, dentro da qual, serão criados todos os diretórios que
correspondem à árvore de diretórios de um sistema Unix (“/boot”, “/etc”, /usr”, etc...), contudo,
costuma-se criar também ao menos uma partição de troca (“swap”), a qual funciona como
“memória virtual”, caso a RAM do sistema, seja insuficiente para o número de aplicações abertas
que se deseja. Uma partição de troca no Linux, costuma apresentar um tamanho de cerca de 2
vezes a quantidade de memória RAM do sistema (2xRAM), embora, nada impeça de se escolher
outros valores, ou, até mesmo, mais do que uma partição de troca.
Como dito no início, o particionamento de um disco depende do hardware e não do
sistema operacional. Sendo assim, os mesmos tipos e quantidades de partição estão disponíveis
no Linux, e em qualquer outro Sistema Operacional, que utilize a mesma plataforma (“X86”).
SS3187 - v1.0 – CentOS 6.2 Página 44
Formação Intensiva Linux- 96 horas
Uma ferramenta bastante usada para o gerenciamento de partições é o fdisk. Veremos
agora como dividir nosso disco rígido usando essa ferramenta.
Entretanto, antes de começarmos essa tarefa, é interessante sabermos qual disco
devemos dividir, para o caso de termos dois ou mais, ou ainda sabermos quantas partições já
existe e quanto espaço existe sobrando. Para obtermos essas informações podemos utilizar o
comando abaixo.
# fdisk -l
A opção –l lista a tabela de partições para o dispositivo especificado. Caso nenhum
dispositivo seja informado, as informações mencionadas no arquivo /proc/partitions são
usadas (se existir). O comando acima irá gerar uma saída semelhante à figura abaixo:
Figura 6 - Saída do comando fdisk –l
Repare que as três primeiras linhas nos mostram informações sobre o disco rígido, como
a partição onde está montado, o tamanho, número de cabeçalhos, setores e outros.
Abaixo estão as informações referentes a cada partição existente no disco. Sua
formatação é feita em sete colunas: a primeira indica o dispositivo da partição, a segunda indica
se a partição é bootável, a terceira indica o endereço inicial da partição, a quarta indica o
endereço final, a quinta nos mostra o número de blocos que existem na partição, a sexta serve
de identificador para o tipo da partição e a sétima nos mostra uma descrição para esse
identificador. Caso tivéssemos outro disco rígido ligado nesta máquina, pareceriam suas
informações também.
Depois de identificado o disco rígido que queremos particionar, devemos entrar no modo
de operação do fdisk. O comando abaixo define que iremos particionar o nosso disco rígido
primário /dev/hda.
# fdisk /dev/hda
SS3187 - v1.0 – CentOS 6.2 Página 45
Formação Intensiva Linux- 96 horas
Após executado o comando, entraremos no modo de interação do fdisk. Abaixo segue
a lista dos comandos disponíveis.
Comando Descrição
A Alterna a flag que indica uma partição bootável
B Edita o rótulo de disco do BSD
C Alterna a flag de compatibilidade com o DOS
D Apaga uma partição
L Lista todos os tipos conhecidos de partições
M Mostra o menu de ajuda
N Adiciona uma nova partição
O Cria uma nova tabela de partição do DOS, vazia
P Imprime a tabela de partições
Q Sai do fdisk sem gravar as alterações
S Cria um novo rótulo de disco em branco para Sun
T Muda o identificador do sistema da partição
U Muda a forma de exibição das unidades
V Verifica uma tabela de partição
W Escreve a tabela de partição no disco e sai
X Entra no modo de operação avançado
SS3187 - v1.0 – CentOS 6.2 Página 46
Formação Intensiva Linux- 96 horas
Sendo assim, para criarmos uma nova partição para o Linux, poderíamos utilizar os
seguintes passos:
Criando uma nova partição 1
Na figura acima, podemos identificar os primeiros passos necessários para criarmos uma
partição. Os lugares apontados pelas setas indicam uma entrada do usuário.
Após entrar no fdisk, primeiro verificamos a tabela de partição, indicado pela primeira
seta superior, para termos conhecimento de quais partições existem. A segunda seta indica o
comando que cria uma nova partição. Como vimos anteriormente, existem dois tipos possíveis
de criarmos uma partição e é justamente isso que o programa nos pergunta. A terceira seta
indica a nossa escolha; queremos criar uma partição primária. Após isso, informamos qual o
número desta partição e logo em seguida nos é perguntado qual deve ser o primeiro cilindro
desta partição. O padrão sempre será o primeiro cilindro após a última partição existente no
disco. Escolhemos o padrão apenas pressionando a tecla <ENTER>. Depois devemos informar
o último cilindro da partição, ou podemos escolher o tamanho desejado.
SS3187 - v1.0 – CentOS 6.2 Página 47
Formação Intensiva Linux- 96 horas
Feitos todos esses passos, nossa partição está criada. Abaixo segue o Erro! Fonte de
referência não encontrada. que ilustra outros passos adicionais.
Criando uma nova partição 2
Primeiro, depois de termos criado a nossa nova partição, listamos a tabela de partições
para verificarmos seu conteúdo. Podemos observar que além de criada, a nova partição
assumiu, automaticamente, o ID 83, que identifica um sistema Linux.
Caso desejássemos mudar o tipo de sistema, seria necessário usar outro comando,
ilustrado na segunda seta. Após executado o comando, devemos informar qual partição
queremos mudar.
SS3187 - v1.0 – CentOS 6.2 Página 48
Formação Intensiva Linux- 96 horas
A última seta indica o comando que lista todos os códigos de partições disponível,
ilustrado na figura abaixo.
Figura 7 - Criando uma nova partição 3
A primeira seta indica o código para o tipo de partição que estamos alterando, no caso,
estamos alterando a partição Linux para Windows FAT32. A última seta serve para verificarmos
se a alteração realmente aconteceu, o que é ilustrado Erro! Fonte de referência não
encontrada. abaixo.
Figura 8 - Criando uma nova partição 4
SS3187 - v1.0 – CentOS 6.2 Página 49
Formação Intensiva Linux- 96 horas
Por fim, após concluirmos que a alteração está certa, devemos invocar o comando que grava as
alterações na tabela de partições, o comando w.
8.1 Formatando Partições com o mke2fs
Após criarmos uma partição, é preciso definir como os dados dentro dela serão
organizados. Isso é feito através da formatação, que nada mais é do que preparar a partição
criada para receber os dados e organizar eles de maneira correta. Por exemplo, as partições do
Linux são formatadas para este sistema operacional e a organização de seus dados difere das
partições Windows, que são formatadas de outra forma.
Assim, mesmo criando uma partição nova, ela ainda não estará pronta para ser usada
antes de ser formatada. Para preparamos uma partição, utilizando o comando mke2fs,
efetuaremos os passos a seguir:
O comando mke2fs é utilizado para criar sistemas de arquivos do Linux em um
dispositivo, ou partição, específico. Sua sintaxe é a seguinte:
mke2fs [options] device [blocks−count]
O argumento blocks-count define o número de blocos na partição, entretanto este pode
ser omitido deixando que o mke2fs defina o tamanho do sistema de arquivos.
Device define qual dispositivo/partição, está querendo formatar. Lembre-se que esta
partição terá todas as suas informações apagadas permanentemente.
Por fim, option define um amplo conjunto de opções que podem ser definidas na hora de
formatar uma partição. Abaixo veremos essas opções:
mke2fs -b block-size device
Esta opção define o tamanho do bloco em bytes. São blocos válidos os que possuem
tamanho de 1024, 2048 e 4096 bytes. Se este parâmetro for omitido, o tamanho do bloco será
definido heuristicamente pelo mke2fs de acordo com o tamanho do sistema de arquivos.
• Comando: mke2fs –c device
Este comando realiza uma verificação por blocos com defeito, no dispositivo, antes de
criar o sistema de arquivos. Se esta opção for usada duas vezes, um teste mais demorado de
escrita e leitura serão usados ao invés do teste rápido de apenas leitura.
• Comando: mke2fs –j device
SS3187 - v1.0 – CentOS 6.2 Página 50
Formação Intensiva Linux- 96 horas
Cria um sistema de arquivos do tipo ext3 journal. Se a opção –J não for especificada, os
parâmetros padrão serão usados para criar um sistema de arquivos journal. Lembre-se que é
necessário que o Kernel suporte esse tipo de sistema de arquivos.
• Comando: mke2fs –J journal-options device
Cria um sistema de arquivos ext3 journal usando as opções especificadas na linha de
comando. Essas opções são separadas por vírgula e podem ter argumentos que usam o sinal de
igual ‘=’. As opções são as seguintes:
• size=journal-size: cria um journal interno (armazenado dentro do sistema
de arquivo) do tamanho estipulado por journal-size em MegaBytes. Esse
tamanho deve ser de, no mínimo, 1024 blocos e não pode ultrapassar
102.400 blocos.
• device=external-journal: Anexa o sistema de arquivos a um dispositivo de
bloco journal localizado no journal-externo. Esse journal externo deve ter
sido criado usando o comando mke2fs -O journal_dev external-
journal. Note que esse journal externo deve ter sido criado com o mesmo
tamanho de bloco que o novo sistema de arquivos.
• Comando: mke2fs –L device
Define um rótulo de volume para o sistema de arquivos.
• Comando: mke2fs –q device
Instrui o comando para ser executado em modo silencioso, ou seja, suas saídas não
serão mostradas. Esta opção é muito útil para ser usada em scripts de automatização.
Mais opções, para esse comando, podem ser encontradas no sistema de man pages do
Linux ou através do site [Link]
SS3187 - v1.0 – CentOS 6.2 Página 51
Formação Intensiva Linux- 96 horas
8.2 Partições swap
Partições swap são usadas para suportar a técnica de memória virtual, presente nos
sistemas operacionais modernos, também conhecidas como área de swap. A técnica de
memória virtual consiste em disponibilizar para o sistema operacional mais memória do que a
memória física disponível. Processos que estão inativos ou esperando por uma entrada de
dados são copiados da memória física para a área de swap, processo conhecido como swapping
de disco. Neste instante, a memória física associada com aquele processo (movido para a área
de swap) pode ser reutilizada pelo sistema operacional. Quando o processo estiver pronto para
ser executado novamente, então ele é copiado da swap para a memória principal e segue sua
execução. O modo como o sistema realiza essa troca de dados entre a memória e a swap não
será abordada aqui.
Sempre que iniciarmos a instalação de um sistema Linux, devemos nos preocupar em
criar uma área de swap. Ela será de extrema necessidade quando o sistema estiver
sobrecarregado e precisar alternar os processos pendentes.
A falta de uma partição de troca (swap) pode acarretar em paradas ou crashes do
sistema operacional pela falta de recursos para efetuar suas tarefas.
A partição swap pode ser criada durante a instalação do sistema (recomendado) ou após
seu término. Para isso é necessário que tenhamos espaço em disco disponível.
Os processos para criar uma partição foram vistos anteriormente e deverão ser feitos
para criar a nossa área de swap, entretanto, ao invés de escolhermos o sistema de arquivos do
Linux, iremos definir que o tipo de sistema de arquivo será swap, como ilustrado a seguir:
Criando ímã partição swap
SS3187 - v1.0 – CentOS 6.2 Página 52
Formação Intensiva Linux- 96 horas
Após criarmos a partição, temos que modificar o tipo de sistema, pois, como vimos
anteriormente, o padrão colocado é o sistema Linux. A primeira seta indica o código do novo
sistema que desejamos colocar na partição criada.
A segunda seta serve apenas para indicar e garantir que a nossa mudança realmente
aconteceu. Assim, a nossa primeira partição primária é do tipo swap.
Depois de terminarmos os passos para criar a partição de swap, é necessário
habilitarmos ela. Isso é feito através do comando swapon.
O comando swappon, pode ser usado com algumas opções, entretanto a forma mais
usada é:
• Comando: swapon -a
A opção –a irá montar todos os dispositivos que estão definidos como swap no arquivo
/etc/fstab, a menos que o dispositivo esteja utilizando a opção que define não ser montado
automaticamente. Se algum dispositivo está definido neste arquivo e está montado, o comando
irá pular ele. Outra forma de montar nossa partição de swap é a seguinte:
• Comando: swapon /dev/hda1
Onde o parâmetro /dev/hda1 representa a partição de swap que criamos acima.
Se quisermos que nossa swap seja habilitado automaticamente com o sistema, devemos
utilizar o arquivo de configuração de partições /etc/fstab que veremos posteriormente.
SS3187 - v1.0 – CentOS 6.2 Página 53
Formação Intensiva Linux- 96 horas
8.3 Montagem de Sistemas de Arquivos
Depois de criarmos nossas partições com seus devidos sistemas de arquivos, a
necessidade óbvia é a utilização destes. Entretanto, este processo no Linux é bastante diferente
de outros sistemas operacionais como o Windows, onde todos seus sistemas de arquivos são
montados automaticamente.
No Linux é necessário que o sistema de arquivos seja montado pelo sistema
operacional. O processo de montar é quando a raiz do sistema de arquivos anexa o nosso
sistema de arquivos em sua hierarquia, associada por um diretório.
Inicialmente esse processo pode parecer bastante confuso, mas ele provê uma forma
transparente de acessar todas as informações dentro de um domínio único.
Para montarmos um sistema de arquivos utilizamos o comando mount. Abaixo segue
um exemplo para montarmos um sistema de arquivos do Windows no diretório /mnt.
• Comando: mount –t vfat /dev/hda3 /mnt
O comando acima irá montar uma partição do tipo vfat, ou seja, FAT32, que está
localizada no dispositivo /dev/hda3 (partição 3 do disco rígido IDE primário) no diretório /mnt
do sistema operacional Linux.
De forma básica, o comando mount pode ser definido assim:
mount [−t fstype] [−o options] device dir
O parâmetro fstype define o tipo de partição que será montada. O parâmetro device
indica o dispositivo do Linux que está associado com um sistema de arquivos. Como o exemplo
acima, /dev/hda3 indica a terceira partição do disco rígido primário. Por fim, dir indica o
diretório, ou ponto de montagem, onde será montado o sistema de arquivo.
É indicado usar um diretório vazio para isso, entretanto, se você definir um diretório que não
esteja vazio, o acesso aos dados desse diretório não será possível enquanto o sistema de
arquivos estiver montado.
O parâmetro options são códigos especiais que instruem o Linux sobre como tratar as
características especiais dos sistemas de arquivos.
Algumas opções podem ser aplicadas para a maioria ou todos os sistemas de arquivo,
entretanto existem outras que são específicas do sistema de arquivo em questão.
SS3187 - v1.0 – CentOS 6.2 Página 54
Formação Intensiva Linux- 96 horas
Veremos agora as principais opções dos sistemas de arquivo. Para uma lista completa
consulte o manual do Linux para o comando mount (man mount).
Sistemas de
Opção Arquivos Descrição
Suportados
Defaults Todos Usa a opção padrão para o sistema de arquivos.
Loop Todos Usa o dispositivo de loopback. Isto permite que se monte um
arquivo como se estivesse em uma partição de disco.
auto / noauto Todos Monta ou não monta o sistema de arquivos automaticamente
quando o sistema operacional inicializar ou quando o comando
mount for usado com a opção –a (monta todos os dispositivos
descritos no arquivo /etc/fstab). O padrão é auto, mas o
uso do noauto é recomendado para dispositivos removíveis.
user / nouser Todos Permite ou nega que usuários normais possam montar o
dispositivo. O padrão é nouser, mas a opção user é
recomendada para dispositivos removíveis.
Owner Todos Similar ao user exceto pelo fato de que o usuário deve possuir
o dispositivo em questão.
Remount Todos Muda uma ou mais opções de uma partição sem ter que
desmontá-la.
RO Todos Especifica um sistema de somente leitura. Este é o padrão para
sistemas de arquivos que não incluem acesso de escrita.
Rw Todos Especifica um sistema de leitura e escrita. Este é o padrão para
leitura/escrita a maioria dos sistemas de arquivo.
Se quisermos, podemos definir que determinadas partições devem ser montadas
automaticamente, quando o sistema iniciar, ou então quando invocarmos o comando mount,
sem termos que nos preocupar com os parâmetros de montagem.
SS3187 - v1.0 – CentOS 6.2 Página 55
Formação Intensiva Linux- 96 horas
Isso é possível com a utilização do arquivo /etc/fstab que define os pontos de
montagem do sistema operacional Linux, assim como os parâmetros para cada um deles.
Abaixo veremos o conteúdo de um arquivo /etc/fstab.
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/sda1 / ext3 defaults,errors=remount-ro 0 1
/dev/sda2 none swap sw 0 0
/dev/hdc /media/cdrom udf,iso9660 ro,user,noauto 0 0
/dev/fd0 /media/floppy auto rw,user,noauto 0 0
/dev/sdb1 /home/ftp ext3 defaults 0 0
A primeira linha, comentada, nos informa o conteúdo que é esperado em cada coluna.
Todos esses dispositivos serão iniciados quando o sistema operacional for bootado,
exceto aqueles que possuem a opção noauto, como é o caso do nosso dispositivo /dev/hdc e
/dev/fd0.
Se desejássemos que outra partição fosse montada automaticamente pelo sistema,
bastaria indicar nesse arquivo o dispositivo onde se encontra a partição, seu ponto de
montagem, tipo de sistema de arquivos e opções.
SS3187 - v1.0 – CentOS 6.2 Página 56
Formação Intensiva Linux- 96 horas
8.4 Verificando os Dispositivos Montados
Basicamente podemos ver os dispositivos montados com dois comandos diferentes.
O primeiro deles é o próprio mount, visto anteriormente. Se esse comando for
executado sem nenhum parâmetro, ele irá nos mostrar quais dispositivos estão montados, em
quais pontos de montagem e com quais opções.
Abaixo podemos visualizar uma saída típica deste comando:
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
/dev/sdb1 on /home/ftp type ext3 (rw)
Assim, podemos visualizar que o dispositivo /dev/sda1 está como ponto de montagem
/ usando o sistema de arquivos ext3 e as opções rw,errors=remount-ro.
Além do comando mount, podemos utilizar o comando df para visualizar informações
sobre os dispositivos montados.
O df é um comando utilizado, a princípio, para prover informações sobre o espaço de
disco dos dispositivos montados. Abaixo podemos visualizar a saída para este comando:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 34606040 10932872 21915260 34% /
/dev/sdb1 153834852 71756132 74264304 50% /home/ftp
A principal diferença, e grande desvantagem, deste comando para o mount diz respeito
às informações das partições. Por exemplo, com o mount somos capazes de identificar o tipo de
sistema de arquivo para cada partição montada, assim como suas opções. Isso não é mostrado
pelo df, justamente porque a principal tarefa deste comando é prover informações sobre espaço
de disco.
Dependendo do grau de necessidade, podemos usar um comando ou outro para termos
informações sobre as partições montadas.
SS3187 - v1.0 – CentOS 6.2 Página 57
Formação Intensiva Linux- 96 horas
8.5 Ferramentas de disco
Sendo algo tão vital à saúde de qualquer sistema, existem alguns comandos utilizados
para a verificação do sistema de disco e da saúde do sistema de arquivos, os quais se
encontram listados abaixo:
Comando badblocks
O comando badblocks, permite verificar a ocorrência de blocos ruins do disco. No caso da
ocorrência destes, uma listagem será gerada. As duas formas mais utilizadas deste comando,
são listadas nos exemplos abaixo:
• Comando: badblocks /dev/hda7 ( verifica e lista os blocos ruins no dispositivo indicado)
• Comando: badblocks –o /root/[Link] /dev/hda7 ( cria um arquivo com a lista de
blocos ruins, caso eles existam ).
Comando tune2fs
O comando tune2fs, é utilizado, quando desejamos modificar algum parâmetro de um
sistema de arquivos existente, como: tamanho do setor do disco, checagem automática, nome
de volume, etc. Abaixo, seguem alguns exemplos destes comandos:
• Comando: tune2fs –c 0 /dev/hda7 (desabilita a checagem automática do filesystem )
• Comando: tune2fs –j /dev/hda7 (transforma uma partição de “ext2”, para “ext3” )
Comando dumpe2fs
O comando dumpe2fs, permite obter o “status” e os parâmetros de um filesystem, para
isto, basta utilizá-lo, conforme o exemplo abaixo:
• Comando: dumpe2fs /dev/hda7
SS3187 - v1.0 – CentOS 6.2 Página 58
Formação Intensiva Linux- 96 horas
Saída deste comando que é bem longa é reproduzida, em parte, a seguir:
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: 30a5913c-bf26-4a6c-b482-a5e5447b3e49
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal filetype needs_recovery sparse_super
Default mount options: (none)
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 131616
Block count: 263056...
Saída do comando dumpe2fs
O comando e2fsck
O comando e2fsck, permite reparar um “filesystem” corrompido dos tipos “ext2” ou “ext3”, o
que pode ocorrer após uma queda súbita de energia. Para isso, execute:
• Comando: e2fsck –jpycvfs /dev/partição
ONDE:
-j: Verifica um filesystem do tipo “ext3” (“journal”)
-p: Repara o sistema (“repair”)
-y: Assume “yes”
-c: Checa os blocos, de modo similar ao “badblocks” (“check”)
-v: Mostra as informações de saída do comando (“verbose”)
-f: Força a verificação de cada bloco, mesmo se estiverem marcados como “ok” (“force”)
-s: Ordena os bytes no disco
OBSERVAÇÃO:
Só execute este comando, com a partição de disco desmontada!
SS3187 - v1.0 – CentOS 6.2 Página 59
Formação Intensiva Linux- 96 horas
8.6 Cotas de disco
Existem alguns casos onde é necessário definir um tamanho máximo que os usuários,
ou um determinado usuário, pode utilizar do disco rígido. Isso se chama cota de disco, que é um
processo onde definimos qual será o espaço que poderá ser usado pelo usuário para armazenar
seus arquivos.
O recurso de cotas de disco é extremamente importante em servidores para que
possamos ter um controle de quanto os usuários estão utilizando da capacidade do disco, caso
contrário seria praticamente impossível monitorar isso, sem contar que logo em seguida nosso
servidor estaria com o disco rígido completamente cheio.
O sistema de cotas de disco, no Linux, é implementado por arquivo. Isso significa que
podemos habilitar as cotas para o diretório /home e deixar o diretório /tmp sem limite de
utilização, por exemplo. Entretanto, as cotas só podem ser usadas em um sistema de arquivos
próprio, ou seja, o nosso diretório /home tem, necessariamente, que ser uma partição montada.
Podemos especificar as cotas em dois níveis: Usuários individuais ou, para grupos de
usuários. Esta distinção permite que os usuários recebam uma pequena cota para gerenciar
seus arquivos pessoais enquanto permite que projetos tenham seus dados armazenados
mediante um tamanho de cota maior.
Conceitos Importantes:
• Hard Limit: O Hard Limit define o total máximo absoluto de espaço em disco
que um usuário ou grupo pode usar. Quando esse limite for alcançado, nada
mais pode ser escrito nesse espaço.
• Soft Limit: O Soft Limit define o total máximo de espaço em disco que pode
ser usado. Entretanto, ao contrário do Hard Limit, esse limite permite ser
excedido por um determinado tempo. Esse tempo é conhecido como grace
period.
• Grace Period: O Grace Period é o tempo de duração enquanto o Soft Limit
pode ser excedido. Ele pode ser expresso em segundos, minutos, horas,
dias, semanas ou meses, possibilitando ao administrador definir o tempo
que os usuários terão para voltar ao seu limite de cota.
SS3187 - v1.0 – CentOS 6.2 Página 60
Formação Intensiva Linux- 96 horas
Além disso, no Linux, são possíveis quotas de disco individuais (por usuário) e coletivas
(por grupo). Não são possíveis quotas de disco por diretório, mas apenas por partição de disco.
Pré-requisitos:
• Partição de disco separada;
• Sistema de arquivos “ext2” ou “ext3”;
Procedimentos:
Para implementação do sistema de quotas de disco, vamos considerar uma partição
“/home” em “/dev/hda7”. Além disso, vamos considerar o usuário de nome “tux”, como sujeito às
quotas de disco que forem estabelecidas. Vamos implementar, neste exemplo, apenas quotas
de disco por usuário, embora, indicando o que mudar caso necessário uma implementação de
quotas por grupo:
Passo 1: Crie na raiz da partição indicada o arquivo “[Link]” ([Link], se for quota de
grupo), e atribua a este arquivo, permissão de acesso “600”. Exemplo:
• Comando: touch /home/[Link]
• Comando: chmod 600 /home/[Link]
Passo 2: editar o arquivo /etc/fstab e adicionar o parâmetro “usrquota” (“grpquota”, se for quota
de grupo), após a opção “defaults”, conforme mostrado abaixo:
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/hda6 / ext3 defaults 0 1
/dev/hda7 /home ext3 defaults,usrquota 0 2
/dev/hda8 swap 0 0
/dev/hdc /media/cdrom udf,iso9660 ro,user,noauto 0 0
/dev/fd0 /media/floppy auto rw,user,noauto 0 0
proc /proa proc defaults 0 0
SS3187 - v1.0 – CentOS 6.2 Página 61
Formação Intensiva Linux- 96 horas
Assim, estamos habilitando as cotas para o nosso diretório /home, que está localizado
no dispositivo /dev/hda7.
Passo 3: Remontar a partição modificada, para que o sistema releia o arquivo
“/etc/fstab”:
• Comando: umount /home
• Comando: mount /home
Passo 4: Executar os comandos abaixo, na seqüência mostrada. Estes comandos
também precisam ser re-executados, após cada modificação efetuada nas quotas de disco:
• Comando: quotaoff –avug (desliga o sistema de quotas)
• Comando: quotacheck –avug ( checa o sistema de quotas)
• Comando: quota on –avug (religa as quotas de disco)
Passo 5: Editar as quotas do usuário ( edquota –u ), ou do grupo ( edquota –g ):
• Comando: edquota –u tux.
Abaixo podemos ver o resultado do comando acima:
Disk quotas for user tux (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/hda7 472 0 0 27 0 0
Note que todos os valores ‘0’ indicam que não existe limite. O usuário tux está utilizando
100 KBytes. Se quisermos modificar seus limites de cota, devemos alterar os campos, como
abaixo:
Disk quotas for user tux (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/hda7 472 300 500 27 0 0
SS3187 - v1.0 – CentOS 6.2 Página 62
Formação Intensiva Linux- 96 horas
Em negrito estão os campos que nós alteramos, ajustando os limites soft e hard para o
usuário, para 300K e 500K Bytes, respectivamente.
Passo 6: Executar novamente, os comandos contidos no passo 4:
• Comando: quotaoff –avug (desliga o sistema de quotas)
• Comando: quotacheck –avug (checa o sistema de quotas)
• Comando: quota on –avug (religa as quotas de disco)
Testes
Para testar o sistema de quotas de disco, logue-se como o usuário “tux” e copie alguns
arquivos para o se diretório “home”.
“Para finalizar, existe o comando” repquota”, que nos mostra um relatório de cotas.
• Comando: repquota –avug
*** Report for user quotas on device /dev/hda7
Block grace time: 00:05; Inode grace time: 00:05
Block limits File limits
User used soft hard grace used soft hard grace
root -- 32828 0 0 3 0 0
tux +- 472 300 500 none 27 0 0
Saída do comando repquota
SS3187 - v1.0 – CentOS 6.2 Página 63
Formação Intensiva Linux- 96 horas
8.7 Para Recordar
1. fdisk: É uma ferramenta muito poderosa. Pode ser usada para listar, criar,
modificar e excluir uma partição no Linux.
2. mke2fs: Formata a partição criada com o ‘fdisk”, com o sistema de arquivos
escolhido.
3. Swap: A área de swap é um espaço no disco que é utilizado para colocar os
programas quando eles estão esperando uma entrada de dados, por exemplo.
Essa técnica permite que o processador aloque dinamicamente espaço na
memória física para realizar suas operações.
4. Sistemas de arquivo: Utilizamos o comando mount para montar um sistema de
arquivo e o comando umount para desmontar. Podemos definir quais
dispositivos devem ser montados automaticamente junto com a inicialização do
sistema através do arquivo /etc/fstab.
5. Verificando dispositivos montados: Para visualizarmos quais dispositivos
estão montados no nosso sistema operacional podemos utilizar o comando
mount, que irá mostrar tais informações e outras adicionais. Além disso, o
comando df também nos provê esses dados.
6. Cotas de disco: Para implantarmos o sistema de cotas precisamos fazer isso
em uma partição específica. Precisamos, também, informar que o sistema de
arquivos de tal partição deve ter suporte a cota através dos comandos
usrquota e grpquota, que podem ser definidos no arquivo /etc/fstab.
Para iniciarmos o uso das cotas precisamos, após montar a partição, executar o
comando quotacheck e depois edquota para editar as cotas dos usuários.
SS3187 - v1.0 – CentOS 6.2 Página 64
Formação Intensiva Linux- 96 horas
8.8 Exercícios
1. Defina, passo a passo, como podemos proceder para dividir um disco rígido de
120 GB em seis partições de mesmo tamanho?
2. Como podemos verificar a integridade de cada partição criada?
3. Qual é a técnica usada para permitir que o processador realize a intercalação
dos processos de forma otimizada, mesmo sob intensa utilização?
4. Depois de criadas as seis partições, de acordo com o exercício 1, defina os
seguintes pontos de montagem. /, /home, /var, /tmp, /boot e swap.
5. Defina quais os passos necessários para criarmos um sistema e cotas na
partição onde é montado o /home.
SS3187 - v1.0 – CentOS 6.2 Página 65
Formação Intensiva Linux- 96 horas
Notas:
SS3187 - v1.0 – CentOS 6.2 Página 66
Formação Intensiva Linux- 96 horas
Módulo 9 - Monitoramento e Gerenciamento de Processos no
Linux
SS3187 - v1.0 – CentOS 6.2 Página 67
Formação Intensiva Linux- 96 horas
9.0 O que são processos?
Chamamos de “processo” um programa, quando este está em execução, ou seja,
carregado na memória do computador.
Cada programa executado, ou seja, cada “processo” ocupa certo tempo do processador
e gasta certa quantidade de memória RAM do sistema, sendo estes os recursos mais preciosos
de um sistema computacional, os quais, devem ser gastos o mais economicamente possível.
Como administrador do sistema, você será responsável, diretamente, por garantir que os
processos de sistemas estejam sendo executados, assim como a manutenção periódica para
que eles continuem sendo executados.
Você ainda é responsável por gerenciar o sistema, de modo que os processos de alta
prioridade ocupem o processamento do computador primeiro.
Por último, você é responsável por garantir que a memória seja suficiente para que os
processos necessários possam ser executados.
Para efetuar todas essas tarefas, será necessário ter conhecimentos fundamentais sobre
processos e como eles são executados, tópico que veremos aqui.
Terminologia
Em Sistemas Operacionais Multiusuário, como o LINUX o processador precisa executar
simultaneamente inúmeras tarefas. Para que isto seja possível, existe o conceito de
“enfileiramento de processos”, onde, cada processo, recebe uma parte da atenção do
processador. Para que isto seja entendido, contudo, alguns conceitos chave devem ser
abordados primeiro:
• Foreground (fg), ou “primeiro plano”: É quando um processo ocupa o shell interativo
do usuário (variável “$PS1”), não lhe permitindo utilizar este shell para mais nada. Este é
o modo default de execução da maioria das aplicações, sendo necessário para isto,
apenas executá-la. Exemplo:
• Comando: vi
• Background (bg), ou “segundo plano”: É quando uma aplicação ocupa o shell não
interativo do usuário (variável “$PS2”). Uma aplicação pode ser inicializada diretamente
em “background” através de um “&”, afixado após o seu nome. Exemplo:
• Comando: vi &
SS3187 - v1.0 – CentOS 6.2 Página 68
Formação Intensiva Linux- 96 horas
• PID ou “número de identificação do processo”: Todo o programa, quando é
executado, recebe um número único de identificação chamado PID (exemplo: 6535). É
através deste número que este processo pode se “comunicar”, com o sistema, demais
processos e também com o usuário.
Além disso, todo o programa em execução tem também um dono, que pode ser um
usuário “de carne e osso” (exemplo “tux”), um usuário do sistema (exemplo: “lp” ), ou ainda um
outro processo.
Um processo ainda pode ser “filho” de outro processo, caso tenha sido “disparado” por
este último, ou ainda, “pai” de outro processo, caso tenha sido ele o responsável por criar outro
processo. Os processos se comunicam com o sistema, através de seu processo “pai”. O pai dos
processos do usuário é o seu “shell” ( geralmente, o “bash” ) e o “pai” supremo, de todos os
demais processos, em sistemas unix, é o “init”.
Em um sistema multiprocessado, diversos processos são mantidos na memória ao
mesmo tempo, assim, quando um processo é forçado a parar, o processador pode ser usado por
outro processo ao invés de ficar parado ocioso.
Existem três tipos básicos de processos: os interativos, processos batch e daemons. O
Kernel é responsável por gerenciar esses processos e atribuir a cada um deles um identificador
único de processo, chamado de PID, em ordem ascendente até que o número mais alto seja
alcançado. Quando chegar nesse número, a contagem reinicia utilizando números não usados.
SS3187 - v1.0 – CentOS 6.2 Página 69
Formação Intensiva Linux- 96 horas
Processos Interativos
Alguns processos são executados interativamente pelos usuários em um terminal, por
exemplo. Se você se logar em um sistema Linux e rodar seu leitor de email, este será um
processo interativo. Enquanto você está interagindo com o leitor de email, ele está sendo
executado em foreground. Um processo rodando em foreground tem todo o controle do terminal
até que este processo seja terminado ou interrompido.
Um processo que é suspenso entra no modo background, assim, o controle do terminal
é retornado para o pai do processo suspenso. Um processo em background pode continuar seu
processamento a menos que ele necessite de uma interação com o terminal.
O controle de processos interativos, ou job control como é chamado geralmente, permite
que um processo seja movido entre os estados de background e foreground.
Processos Batch
Processos batch são enviados de uma fila e não tem associação com um terminal em
qualquer espécie. Esse tipo de processo é muito útil quando precisamos executar muitas vezes
um processo, por exemplo, quando o uso do sistema está baixo.
Em geral, os processos desse tipo são gerados devido a algum script de automação de
tarefas que realiza seu trabalho de forma automática e sem necessitar da interação de uma
pessoa.
Processos Daemon
Os Daemons são processos de servidores. Esses processos são executados
continuamente em background até que o serviço que eles representam seja chamado. Por
exemplo, o processo httpd é o servidor de páginas Web. Tipicamente ele é iniciado quando o
sistema é bootado, mas passa a maior parte do tempo monitorando a porta atribuída para o
Apache (nome do servidor de páginas). Quando alguma requisição é feita na porta 80, o
processo httpd pega o tráfego e inicia o processamento da requisição de forma apropriada.
Quando o trabalho está feito ele volta para seu modo de escuta.
SS3187 - v1.0 – CentOS 6.2 Página 70
Formação Intensiva Linux- 96 horas
9.1 Árvore de Processos no Linux
Quando um processo precisa executar diversas funções para terminar um trabalho, ele
não pode sair de execução até concluir todas as suas tarefas. Isso significa que se um sistema
precisar fazer diversas consultas em um banco de dados, a tela do terminal pode deixar de ser
atualizada até que todas as consultas sejam concluídas, por exemplo.
Para prevenir que aconteça este lag, o processo pai pode iniciar processos filhos para
concluir as sub-tarefas de uma maneira mais simples, executando tantas sub-tarefas,
simultaneamente, quando possíveis. Assim será possível fazer a consulta ao banco de dados e
ainda assim realizar a atualização das informações no terminal, devido aos diversos processos
que gerenciam cada tarefa.
A técnica de criação de um processo filho é denominada forking ou thread. Para cada
novo processo filho criado, um novo PID é determinado e sempre mantém uma ligação com o
PID do processo pai, conhecido como PPID (Parent Process Identifier). Essa forma de conexão
entre os processos filhos e seus pais ajudam a monitorar qual processo iniciou outro processo.
As threads são processos filhos que são independentes dos processos pais, ou seja,
eles possuem seus próprios controles.
A árvore de processos do Linux possui este nome justamente por parecer-se com uma
árvore onde cada pai (raiz) pode possuir diversos filhos (ramos/folhas) e assim sucessivamente.
9.2 Comandos Básicos para o Gerenciamento de Processos
Agora que já sabemos o que é um processo e como ele é tratado pelo sistema
operacional, precisamos aprender como fazer para gerenciar eles.
Para visualizarmos os processos da máquina, podemos usar basicamente dois
comandos: o top, que na verdade é um aplicativo, e o ps. Vamos a eles:
O top é um programa que provê a visualização em tempo real do sistema, ou seja, as
propriedades dos processos estão em constante atualização na tela. Para visualizarmos as suas
informações apenas invocamos seu nome, como abaixo:
• Comando: top
SS3187 - v1.0 – CentOS 6.2 Página 71
Formação Intensiva Linux- 96 horas
A figura abaixo ilustra a saída para esse comando:
Saída do programa top
Essa ferramenta é muito utilizada porque, além de prover informações em tempo real,
ele disponibiliza muita informação. A primeira linha nos trás informações sobre a hora atual do
sistema, o tempo passado desde que ele foi iniciado, a quantidade de usuários ativos e a média
de carga do sistema.
Na segunda linha encontramos informações sobre os processos como: o número total de
processos, quantos estão no estado rodando, quantos estão em background, quantos estão
parados e quantos estão esperando para serem terminados.
A terceira linha nos apresenta dados sobre o quanto do processador está sendo usado
pelos processos. Depois temos informações sobre a memória e por fim temos uma tabela, que
está sempre se atualizando, com informações sobre os processos do sistema.
O outro comando utilizado para monitorarmos os processos é o ps. O ps serve para
mostrar informações dos processos ativos. A seguir iremos mostrar as saídas para as principais
opções usadas no comando.
SS3187 - v1.0 – CentOS 6.2 Página 72
Formação Intensiva Linux- 96 horas
Se quisermos ver todos os processos do sistema podemos utilizar:
• Comando: ps aux
Se quisermos visualizar todos os processos e obtiver informações sobre seus processos
filho na forma de árvore, usamos o comando:
• Comando: ps auxf
Se quisermos visualizar os processos, adicionado uma coluna com o PPID, podemos
usar como segue:
• Comando: ps ajx
Algumas vezes é necessário terminarmos algum processo de forma manual, isso é feito
através do comando kill. Este comando envia sinais específicos para o processo ou grupo de
processos. Se nenhum sinal é específicado, o sinal TERM é enviado. O sinal TERM terminará o
processo que não conseguir lidar com esse sinal. Para outros processos, pode ser necessário
usar o sinal 9 (nove), sendo que este sinal não pode ser tratado por nenhum processo.
Sendo assim, se quisermos terminar um processo de forma adequada, se preocupando
que ele libere seus recursos alocados, podemos usar o comando abaixo.
• Comando: kill 10923
Onde o número 10923 é o PID do processo alvo.
Entretanto, algumas vezes usar o comando assim poderá não terminar o processo.
Sendo assim, precisamos informar que queremos que o processo seja terminado de qualquer
forma, mesmo que isso possa prejudicar os arquivos abertos por ele. Deste modo, precisamos
enviar um sinal que o processo não possa tratar, no caso o processo 9.
• Comando: kill -9 10923
SS3187 - v1.0 – CentOS 6.2 Página 73
Formação Intensiva Linux- 96 horas
9.3 Prioridades de Processos
Em geral, todos os processos no Linux possuem a mesma prioridade e utilizam a mesma
fatia de tempo do processador. Entretanto, às vezes é necessário que uns processos tenham
mais prioridade que outros. É possível mudar a prioridade dos processos de duas formas: Antes
de o processo ser criado e outra, após o processo já estar sendo executado.
O primeiro deles é o comando nice e tem o seguinte formato:
nice [options] [command [arguments]]
O comando nice roda o comando incluído em seu parâmetro ajustado a uma prioridade.
Ele permite que você seja “simpático” com outros usuários fazendo com que um processo seja
executado em baixa prioridade, por exemplo.
A prioridade dos processos varia de “20” até “-20”, onde “20” prendem o processo até
que nada mais demande seu lugar no sistema e “-20” indica a prioridade máxima. O “0” define o
processo com prioridade média.
Quando você for executar um comando, este pode ser precedido com a palavra nice
para que ele assuma uma prioridade baixa. Por exemplo, o comando a seguir inicia um processo
de backup. Ajustando o valor do nice para 19 fará com que o nosso comando não seja
dominante sobre os outros processos.
• Comando: nice 19 backup
O segundo comando, para alterar a prioridade dos processos já em execução, é o
renice e seu é dado como:
renice priority [[−p] PID] [[−g] group] [[−u] user]
O comando renice muda a prioridade de um processo em execução especificando o
PID, nome do grupo do processo ou o nome de usuário para uma determinada prioridade. Assim
como o nice, ele aceita uma faixa de prioridade de “20” até “-20”, tendo o “0” como média.
Usuários normais podem apenas mudar a prioridade de seus próprios processos e o
administrador pode mudar a prioridade de qualquer processo de usuário.
SS3187 - v1.0 – CentOS 6.2 Página 74
Formação Intensiva Linux- 96 horas
Além de definirmos a prioridade do processo no processador, ou seja, se ele deve ser
executado por mais ou menos tempo que os outros processos, ainda existem dois comandos
que permitem o gerenciamento de prioridade em relação à forma de execução.
São eles o bg e o fg.
O bg é usado quando precisamos colocar um processo para background, ou seja,
quando o processo pode ficar executando sem precisar da interação do usuário. Este comando
tem sua sintaxe bem simples, como abaixo.
• Comando: bg job_id
Onde job_id é o identificado da tarefa e não do processo.
Para ficar mais clara a explicação, imagine que estamos efetuando um processo
demorado de backup como segue abaixo:
• Comando: tar –czvf [Link] /home
Do jeito como o comando foi executado, enquanto ele não terminar sua tarefa não
poderemos utilizar esse terminal. Entretanto, se for necessário utilizarmos o terminal podemos
enviar esse processo para background.
Primeiro precisamos colocar esse processo em modo suspenso. Para isso iremos
apertar as teclas <CTRL> <Z>. Você notará que a seguinte linha irá aparecer
[1]+ Stopped tar –czvf [Link] /home
Acima podemos identificar a tarefa que está suspensa. O número 1 entre colchetes é o
job_id, usado para colocar esse processo suspenso em background para que ele possa
continuar seu processamento. Para deixarmos esse processo continuar sua operação em
background usamos os seguintes comandos.
• Comando: bg 1
Ou então usamos.
• Comando: !bg
Neste comando acima, o ponto de exclamação (!) fará com que o comando bg utilize o
job_id da última tarefa adicionada.
SS3187 - v1.0 – CentOS 6.2 Página 75
Formação Intensiva Linux- 96 horas
Para visualizarmos a lista de tarefas que estão pendentes no sistema, podemos usar o
comando abaixo.
• Comando: jobs
Por fim, para que possamos trazer para o modo interativo um processo que estava
sendo executado em background, podemos usar o comando fg.
• Comando: fg job_id
Este comando funciona da mesma forma que o bg.
Com o auxílio desses três comandos podemos gerenciar o modo de operação dos
nossos processos.
NOTA: Existe outra forma, às vezes mais prática, de enviarmos nosso processos
para background. Sempre que executarmos um comando seguido do símbolo &, o
comando será executado em background desde o seu início. Por exemplo:
• Comando: tar –czvf [Link] /home &
SS3187 - v1.0 – CentOS 6.2 Página 76
Formação Intensiva Linux- 96 horas
9.4 Para Recordar
1. Processos: Os processos são operações executadas no processador com o
intuito de resolver uma determinada tarefa. São classificados em três tipos:
interativos, batch e daemon.
2. Principais comandos: Para monitorar os processos de um sistema, podemos
utilizar basicamente dois comandos, o top que informa em tempo real as
informações do sistema e o ps que nos mostra uma lista dos processos ativos.
3. Alternando modo de processamento: Os processos podem ser executados
em foreground e em background. Para alternarmos entre esses dois modos de
execução podemos utilizar os comandos fg e bg. Além disso, podemos utilizar o
& para determinar que um processo inicie seu trabalho em background.
4. Prioridades: Os processos podem possuir prioridades diferentes. Para
gerenciarmos esses processos utilizamos os comando nice e renice.
SS3187 - v1.0 – CentOS 6.2 Página 77
Formação Intensiva Linux- 96 horas
9.5 Exercícios
1. Defina tipos de processos que podem ser encontrados no Linux:
2. Como eu posso identificar qual processo está consumindo a maior parte do meu
processador?
3. Após iniciado um processo de backup, como eu posso fazer para utilizar o
terminal antes que o processo termine?
4. Como fazer para diminuir a prioridade do processo de backup do exercício 4, de
forma a não atrapalhar os outros usuários?
5. De que forma eu posso terminar um processo que está trancado?
6. Como iniciar um processo em background?
7. Como eu posso listar a minha lista de processos quem background?
SS3187 - v1.0 – CentOS 6.2 Página 78
Formação Intensiva Linux- 96 horas
Notas:
SS3187 - v1.0 – CentOS 6.2 Página 79
Formação Intensiva Linux- 96 horas
Módulo 10 - Kernel
SS3187 - v1.0 – CentOS 6.2 Página 80
Formação Intensiva Linux- 96 horas
10.0 Entendendo o Kernel
O Kernel de um sistema operacional é entendido como o seu núcleo ou coração do
sistema operacional. Ele representa o nível mais baixo de troca de mensagens com o Hardware,
sendo responsável por todo o gerenciamento dos recursos do sistema operacional. No Kernel
estão definidas as formas de operação com todos os periféricos, gerenciamento de memória,
interrupções e outros.
Podemos dizer, de forma simples e direta, que o Kernel é um conjunto de aplicações
necessárias para fornecer a outro conjunto de aplicações, utilizadas pelos usuários, uma forma
de utilizar os recursos do sistema. Diferentemente de outros sistemas operativos (ex.: Windows),
no Linux, apenas parte dos drivers estão carregados em memória. A grande maioria pode ser
carregada dinâmicamente quando necessário. Por este comportamento “modular” do sistema, é
que costumamos nos referir aos ”módulos de dispositivo”, ao invés do termo “drivers”, mais
usual.
Versão Numérica do Kernel
O Kernel do Linux possui um número de versão numérica (ex.: “2.6.15”), sendo esse
número, constituído por uma série de campos, cada qual com um significado próprio:
Comando: uname –r
2 . 6 . 32-220.4.1 . el6.i686
A B C D
Versão numérica do kernel
ONDE:
A) VERSION: Número principal (raramente muda);
B) PATCH LEVEL: Indica mudanças importantes no funcionamento do kernel do Linux. Se
ímpar, indica um kernel experimental, se par, então é um kernel considerado estável (“de
produção”).
SS3187 - v1.0 – CentOS 6.2 Página 81
Formação Intensiva Linux- 96 horas
C) SUBLEVEL: Sua evolução indica o suporte a novos dispositivos, bem como correção de bugs
e pequenos melhoramentos no sistema.
D) EXTRA VERSION: Usado quando desejamos diferenciar duas compilações de um kernel de
mesma versão, a fim de constituírem dois diretórios de módulos separados.
Como referido acima, a série de Kernel que possui o número do “Patch Level”, par, é
considerada um “Kernel de produção” assim, as séries 2.0.X, 2.2.X, 2.4.X e 2.6.X são
consideradas, séries de Kernel estáveis. Os números ímpares representam as séries de
desenvolvimento.
Por um longo período, enquanto o Kernel 2.4 era a série estável, o Kernel 2.5 estava
sendo desenvolvido de forma a avançar para a atual série estável 2.6.
Para sabermos qual Kernel estamos utilizando em nossa máquina, podemos utilizar o
comando abaixo.
• Comando: uname –r
SS3187 - v1.0 – CentOS 6.2 Página 82
Formação Intensiva Linux- 96 horas
10.1 Módulos do kernel
No Linux os drivers, doravante aqui chamados módulos, ficam em um diretório, de
mesma versão numérica do kernel e situados em “/lib/modules”. Estes módulos fornecem o
suporte ao hardware e a todos os demais dispositivos (ex.: sistemas de arquivos), que devem
ser manipulados pelo sistema operativo, sendo construídos junto com o kernel. Assim, por
exemplo, caso existam as versão numéricas de kernel compiladas no sistema “2.6.20”, e 2.6.21”
existirão dois diretórios de mesma versão em /lib/modules.
O diretório de módulos de cada versão numérica de kernel contém várias pastas e
arquivos, sendo os módulos de suporte a dispositivos, existentes a partir do caminho
“/lib/modules/versão_do_kernel/kernel/drivers”, conforme podemos observar no quadro abaixo:
aluno1-1:/lib/modules/2.6.13-15-default # pwd
/lib/modules/2.6.13-15-default
aluno1-1:/lib/modules/2.6.13-15-default # ls
. extra [Link] [Link] [Link] [Link]
.. kernel [Link] [Link] [Link] source
build [Link] modules.ieee1394map [Link] [Link]
aluno1-1:/lib/modules/2.6.13-15-default
Listagem dos diretórios de módulos do kernel
Abaixo do diretório acima referido os módulos são divididos e organizados em pastas, de
acordo com o tipo de dispositivo a que se destinam. Por exemplo, abaixo listamos a localização
e o conteúdo da pasta “net”, que contém os módulos que dão suporte às interfaces de rede
suportadas nesta versão de kernel:
aluno1-1:/lib/modules/2.6.13-15-default/kernel/net # pwd
/lib/modules/2.6.13-15-default/kernel/net
aluno1-1:/lib/modules/2.6.13-15-default/kernel/net # ls
. appletalk bluetooth decnet ipv6 key netfilter rose sctp x25
.. atm bridge econet ipx lapb netrom rxrpc sunrpc xfrm
8021q ax25 core ipv4 irda llc packet sched wanrouter
aluno1-1:/lib/modules/2.6.13-15-default/kernel/net #
Diretório onde se encontram os módulos de placas de rede
SS3187 - v1.0 – CentOS 6.2 Página 83
Formação Intensiva Linux- 96 horas
Quando compilamos um novo kernel, também precisamos compilar os seus módulos e,
instalá-los abaixo de “/lib/modules”. Uma versão de kernel, não pode utilizar os módulos de outra
versão, ou vice-versa, portanto, devem existir tantos diretórios de módulos, quantas forem as
versões de kernel que forem compiladas.
10.2 Gerenciamento de módulos do kernel
Um aspecto importante, em se tratando de sistemas modulares, como é o caso do
LINUX, é o gerenciamento dos módulos, que fazem a interface do Sistema Operacional com os
dispositivos. Para o gerenciamento dos módulos, existe uma série de ferramentas, que
passaremos a estudar abaixo:
O comando lsmod
O comando lsmod, lista os módulos do kernel que estão atualmente carregados na
memória e, portanto, fornecendo suporte a algum tipo de dispositivo. Abaixo, um fragmento da
saída deste comando:
Module Size Used by
nls_iso8859_1 4096 0
nls_cp437 5760 0
sg 35744 0
sd_mod 18576 0
usb_storage 72512 0
scsi_mod 131304 3 sg,sd_mod,usb_storage
ipv6 242752 6
hfsplus 75140 0
vfat 12800 0
fat 49692 1 vfat
Saída do comando lsmod
Conforme podemos verificar acima, a saída deste comando é em formato de tabela.
Existe um total de 5 campos nesta tabela, os quais passamos a listar abaixo:
• Coluna 1: Nome do módulo
• Coluna 2: Tamanho em Kbytes do módulo
• Coluna 3: Indica se existe algum dispositivo utilizando o módulo
SS3187 - v1.0 – CentOS 6.2 Página 84
Formação Intensiva Linux- 96 horas
• Coluna 4: O número de módulos que dependem deste módulo (dependências)
Comando modprobe
O Comando modprobe, possui uma série de funções úteis no sistema. É um comando
multifuncional que permite diversas funções, dependendo de suas opções de comando:
• Comando: modprobe “modulo” (carrega o módulo e suas dependências).
Exemplo: modprobe 8139too (carrega o módulo da interface de rede Realtek 8139).
• Comando: modprobe –r “modulo” (remove o módulo da memória, caso o mesmo não
esteja em uso).
Exemplo: modprobe –r 8139too (remove o módulo da interface de Rede 8139).
• Comando: modprobe –l –t “tipo” (lista todos os módulos existentes, de um certo tipo de
dispositivo).
Exemplo: modprobe –l –t net (lista os módulos de todas as interfaces de rede suportadas nesta
versão de kernel).
SS3187 - v1.0 – CentOS 6.2 Página 85
Formação Intensiva Linux- 96 horas
Comando modinfo
O comando modinfo, permite obter informações variadas dos módulos.
Seguem abaixo, alguns exemplos:
• Comando: modinfo –a “modulo” (obtém o autor e responsável, por um módulo).
Exemplo: modinfo –a 8139too (obtém o autor do módulo 8139too).
• Comando: modinfo –p “modulo” (obtém os parâmetros disponíveis para um módulo).
Exemplo: modinfo –p 8139too (obtém os parâmetros disponíveis para o módulo 8139too).
• Comando: modinfo: -d “modulo” (exibe a descrição de um módulo).
Exemplo: modinfo –d 8139too (exibe a descrição do módulo 8139too).
Comando rmmod
O comando rmmod, permite remover um módulo da memória, porém ao contrário do
“modprobe”, este comando apenas remove o módulo, sem cuidar de suas dependências:
• Comando: rmmod “modulo”
Comando insmod
O comando insmod, permite carregar um módulo da memória, porém ao contrário do
“modprobe”, este comando apenas carrega o módulo, sem cuidar de suas dependências:
• Comando: insmod “modulo”
Comando depmod
O comando depmod, verifica as dependências de um módulo, e cria o arquivo
[Link], que lista as dependências dos módulos. Este arquivo fica na raiz do diretório dos
módulos (isto é, em “/lib/modules/versão do kernel”). Sempre que adicionarmos um novo módulo
ao kernel, devemos recriar este arquivo, usando para isto o comando abaixo:
• Comando: depmod -a
SS3187 - v1.0 – CentOS 6.2 Página 86
Formação Intensiva Linux- 96 horas
10.3 Compilando um Novo Kernel
O fato de sempre podermos dispor das fontes permite que, a qualquer momento,
possamos compilar um novo kernel para o nosso sistema.
Embora, seja sempre mais aconselhável utilizar o kernel oficial, fornecido pela própria
distribuição utilizada, existem algumas situações onde a compilação de um novo kernel poderá
ser uma opção interessante. São elas:
AÇÃO EFEITO CAUSADO
Compilar o kernel para um processador Aumento de desempenho geral do sistema.
específico.
Diminuir o número de módulos compilados. Torna o kernel menor e sua carga um pouco
mais rápida.
Compilar uma versão mais nova do kernel. Permite suportar dispositivos mais atuais, não
existentes no kernel utilizado.
Compilar uma versão mais nova do kernel. Permite corrigir algum “bug” encontrado.
Retirar módulos não necessários. Permite retirar dispositivos não necessários ou
indesejados (ex.: pendrives).
Motivações para se recompilar o kernel do Linux
Repetimos que, sempre que possível, o ideal é permanecer com o kernel original da
Distribuição, o qual já foi intensivamente testado. Ademais, a maioria das distribuições Linux,
adiciona “Patches”, os quais incorporam funcionalidades adicionais, inexistentes no kernel
original do Linux (“Vanilla”).
SS3187 - v1.0 – CentOS 6.2 Página 87
Formação Intensiva Linux- 96 horas
Pré-requisitos
O processo de compilação do kernel varia bastante, conforme Distribuição utilizada.
Sendo assim, tudo o que for discutido, a partir deste ponto é valido apenas para a Distro CentOs
(e, obviamente, para as Distribuições RedHat e Fedora também), devendo ser reconsiderado, no
caso de outras Distribuições.
Para configurarmos um novo Kernel, obviamente precisamos possuir as suas fontes
instaladas. Existem várias formas para obtermos as fontes do Kernel.
Uma delas é fazer o download do site [Link] onde são lançadas as
versões originais do Kernel, também conhecidas como versões Vanilla.
Pacotes de Desenvolvimento
Além das fontes do Kernel (baixado do [Link]), precisamos ainda dos seguintes
pacotes abaixo:
• Pacote Desenvolvimento em C: Contém as ferramentas para a compilação (make,
automake e GCC);
• Pacote “ncurses-devel” ( necessário para a interface de configuração do “menuconfig” )
• Pacote “bison” ( ferramenta para fazer “parse” de strings )
• Pacote “rpm-build” ( permite “empacotar” o kernel compilado)
Dependendo do tipo de instalação que foi feito (ex.: completa, mínima, etc), estes
pacotes poderão ou não se encontrar instalados. Para verificar se já se encontram instalados e
para instalar algum pacote, caso seja necessário, utilize, respectivamente, os comandos abaixo:
• Comando: rpm -qa | grep pacote
• Comando: yum install gcc make bison ncurses-devel rpm-build
ONDE:
• pacote: É o nome do pacote, a ser pesquisado/instalado
SS3187 - v1.0 – CentOS 6.2 Página 88
Formação Intensiva Linux- 96 horas
Conforme referido anteriormente, a compilação do Kernel tende a variar bastante,
conforme a Distribuição utilizada. No caso específico da Distribuição CentOs 6.2,, essa
compilação é irealizada, conforme os passos abaixo indicados:.
Procedimentos Genéricos
A compilação do kernel no CentOs, envolve os seguintes procedimentos abaixo:
Passo 1: Instalar as dependências:
• Comando: yum install gcc make bison ncurses-devel rpm-build
Passo 2: Fazer o download dos fontes do kernel ("Vanilla"):
• Comando: wget [Link]
Passo 3: Ir para o diretório dos fontes do kernel:
• Comando: cd /usr/src
Passo 4: Descompactar os fontes do kernel:
• Comando: tar xzvf [Link]
Passo 5: Criar o link simbolico de nome "linux", apontando para o kernel descompactado::
• Comando: ln -s linux-2.6.39 linux
Passo 6: Entrar no diretório das fontes do kernel. Todos os procedimentos de compilação devem
ser executados dentro deste diretório:
• Comando: cd /usr/src/linux
SS3187 - v1.0 – CentOS 6.2 Página 89
Formação Intensiva Linux- 96 horas
Passo 7: Copiar o arquivo de configuracao do kernel, para o diretorio de compilacao
("/usr/src/linux")::
• Comando: cp /boot/config-`uname -r` ./.config
Passo 8: A seguir precisamos efetuar a configuração do suporte aos dispositivos que será
fornecido ao usuário, pelo kernel a ser compilado. Esta configuração pode ser feita através de
três modos diferentes, abaixo referidos:
• Comando: make menuconfig
Na figura abaixo, podemos observar a tela inicial da interface do “menuconfig”:
Tela Inicial do “menuconfig”
SS3187 - v1.0 – CentOS 6.2 Página 90
Formação Intensiva Linux- 96 horas
Este é o método mais utilizado para a configuração do kernel do Linux, e o que será
adotado aqui. Cada opção corresponde a um módulo de kernel a ser compilado. Estas opções
permitem ao usuário, três possíveis decisões:
• Opção marcada com um “(X)”: Neste caso o módulo será criado dentro do
próprio kernel (“builtin”). Desta forma, o módulo será carregado automaticamente
no boot, junto com o próprio kernel.
• Opção marcada com um “(M)”: Neste caso o módulo será criado separado do
kernel, podendo ser carregado após o boot via comando ‘”modprobe” ou,
durante boot, via arquivo “initrd”.
• Opção marcada com um “( )”: Neste caso o driver não será compilado não
estando, portanto, disponível nem no kernel, nem como módulo.
Na tabela a seguir são referenciadas as opções existentes no menu principal de
configuração do kernel:
General setup --->
[*] Enable loadable module support --->
-*- Enable the block layer --->
Processor type and features --->
Power management options --->
Bus options (PCI etc.) --->
Executable file formats / Emulations --->
Networking --->
Device Drivers --->
Firmware Drivers --->
File systems --->
Kernel hacking --->
Security options --->
-*- Cryptographic API --->
[*] Virtualization --->
Library routines --->
---
Load an Alternate Configuration File
Save an Alternate Configuration File
Opções do menu principal de configuração do kernel do “menuconfig”.
SS3187 - v1.0 – CentOS 6.2 Página 91
Formação Intensiva Linux- 96 horas
Abaixo é descrito o que contém cada um dos grupos principais.
Opção Descrição
General Setup Aqui é encontrado um grande conjunto de opções que não
poderiam ter sido colocadas em nenhum outro grupo. Tais como
suporte a memória “swap”, “initrd” e “pae”, entre outros.
Enable loadable module Configura se o kernel será construído com suporte a módulos, ou
Support não.
Enable block layer Importante para alguns filesystems, como ext3 e dispositivos
SCSI. O “block layer, introduz um mecanismo de checksum por
setor de disco, para verificação e proteção contra erros.
Processor type and features Permite otimizar o kernel para o processador utilizado, assim
como habilitar opções relacionadas ao processador como
emulação de ponto flutuante e outros, suporte à mais de 4 GB
de ram e processamento simétrico (smp), entre outros...
Power management options Aqui ficam descritas as opções de gerenciamento de energia,
como APM e APIC.
Bus options Suporte a barramentos como, PCI, PCMCIA, ISA e HOTPLUG,
entre outros.
Executable file formats Suporte a arquivos ELF e [Link]
Networking Protocolos de comunicação, TCP/IP, Apple TAlk, “QoS” (controle
de banda) e Iptables (firewall).
Drivers de dispositivo, como interfaces de rede ethernet, serial
ata (sata), dispositivos raid, placas de som e de vídeo, entre
Device Drivers
outros.
Firmware Drivers Suporte ao “sysfs”, bem como a “frameworks” para criação de
drivers por ferramentas de terceiros (ex.: DELL DKMS)...
SS3187 - v1.0 – CentOS 6.2 Página 92
Formação Intensiva Linux- 96 horas
File systems Sistemas de arquivos como ext2, ext3, vfat, ntfs, etc.
Kernel hacking Usada quase que apenas por desenvolvedores, permite
configurar mensagens de debug de várias estrutras do kernel,
latências de mensagens, entre outras.
Security options Opções de segurança, como suporte ao SELinux e AppArmor..
Cryptographic API Suporte a algoritmos de criptografia, como DES, HMAC e SHA1.
Virtualization Habilita o suporte ao “KVM” (kernel virtualization machine).
Library Routines Habilita o suporte a funções utilizadas, por exemplo, por
bibliotecas de uso geral no sistema como a biblioteca de
compressão “ZILB”.
Existem muitas opções dentro dos itens acima listados. É recomendado que você leia
com atenção cada um deles. Se um item não tiver o nome auto-explicativo, você sempre poderá
usar a ajuda para ele, encontrada na parte de baixo da janela de configuração.
Após escolher todas as opções necessárias, você deve salvar suas opções, abandonar
o “menuconfig” e compilar o Kernel propriamente dito.
Passo 9: Apos sair salvando do menu de configuracao do kernel, compilar com o comando
abaixo:
• Comando: make ou
• Comando: make -jn (onde “n”=numero de núcleos do processador)
Passo 10: Instale os módulos do kernel novo: compilado:
• Comando: make modules_install
SS3187 - v1.0 – CentOS 6.2 Página 93
Formação Intensiva Linux- 96 horas
Passo 11: Copiar o kernel novo e demais arquivos, para o diretório "/boot":
• Comando: cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.39
• Comando: cp .config /boot/config-2.6.39
• Comando: cp [Link] /boot/[Link]-2.6.39
Passo 12: Criar agora o arquivo initramfs, para o kernel recem compilado (sistema de arquivos
Raiz temporário::
• Comando: dracut /boot/initramfs-2.6.39 2.6.39
Passo 13: Editar o arquivo /boot/grub/[Link], adicionando uma nova entrada para o kernel
novo compilado, afim de que este se torne disponível no menu de inicialização do grub, durante
o boot (pode ser preciso ajustar de acordo com o sistema):
• Comando: vim /boot/grub/[Link]
title CentOS (2.6.39)
root (hd0,2)
kernel /boot/vmlinuz-2.6.39 ro root=UUID=efc89d92-5324-4d74-93b4-411ede462387
rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=br-abnt2 LANG=pt_BR.UTF-8 rd_NO_MD quiet
SYSFONT=latarcyrheb-sun16 rhgb crashkernel=128M rd_NO_LVM rd_NO_DM
initrd /boot/initramfs-2.6.39
Passo 14: Finalmente, salve e abandone o "[Link]" e reinicie o computadort. Durante o
reboot, devera aparecer listada, a nova imagem adicionada, com o kernel recém compilado.
SS3187 - v1.0 – CentOS 6.2 Página 94
Formação Intensiva Linux- 96 horas
Procedimentos após o boot
Após o boot execute o comando abaixo, para verificar se o kernel em execução é o
kernel novo, adicionado ao arquivo [Link]:
• Comando: uname -r
A seguir, reinicie novamente o sistema, escolhendo após, o kernel original do CentOs.
OBSERVAÇÃO:
Pode ser preciso que se refaçam as dependências do kernel default. Isto será
confirmado, caso, após o reboot, não estejam disponíveis os módulos das interfaces de rede.
Para isso, execute (caso seja preciso) o comando abaixo e, uma vez mais, reinicie o sistema:
• Comando: depmod -a
SS3187 - v1.0 – CentOS 6.2 Página 95
Formação Intensiva Linux- 96 horas
10.4 Aplicando Patch a um Kernel
O termo “patch” (“remendo”) significa o conjunto de linhas de código que diferencia duas
versões de um mesmo software. Os patches podem ser de dois tipos:
• Incremental: Devem ser aplicados em sequência, e em ordem crescente, pois
cada “patch” só contém o seu próprio código, ignorando os demais (26.1, 2.62, 2.6.3...).
• Não incremental: Basta aplicar o mais recente, apenas, pois este já contém o
código dos patches anteriores.
No Linux, os patches são utilizados, principalmente por desenvolvedores, para alcançar
as seguintes possíveis metas:
• Correção de bugs; À medida que estes são descobertos e corrigidos.
• Adicionar suporte a novos dispositivos: Tanto de hardware (ex. Uma nova webcam
USB), quanto de software (rx. Um novo filesystem).
• Adicionar novas funcionalidades: As Distribuições, frequentemente adicionam recursos
extras, como forma de agregar valor ao seu produto, contudo, nem sempre estas novas
funcionalidades estão licenciadas por GPL e que, por isso mesmo NUNCA serão
incorporadas ao kernel default (codinome “Vanilla”).
OBSERVAÇÃO:
Após a aplicação de um novo patch, devemos recompilar o software, pois o patch é
aplicado apenas às fontes e não ao executável já compilado.
Específicamente no caso do kernel do Linux, os desenvolvedores também disponibilizam
do sistema de prepatch, para divulgar para a comunidade novas alterações no Kernel. O
prepatch nada mais é que um arquivo texto contendo as diferenças entre o seu atual Kernel e o
novo, que será aplicado. É nesse arquivo que se encontram as informações sobre quais arquivos
e linha que possuem a diferença entre as versões do Kernel. Usaremos o comando patch para
aplicar ele, como veremos a seguir.
Algumas vezes, esses prepatch são lançados com o intuito de modificar um Kernel
oficial atual. Neste caso ele será chamado de release candidate (Candidato a Lançamento – RC)
e não prepatch. Desta forma, se você encontrar um Kernel com o nome, por exemplo, 2.6.10-rc2,
é porque nele foi aplicado o patch.
SS3187 - v1.0 – CentOS 6.2 Página 96
Formação Intensiva Linux- 96 horas
Veremos agora os passos para aplicarmos um patch no nosso Kernel.
Nota: Lembre-se que é sempre recomendável fazer um backup do seu Kernel
atual para evitar problemas futuros. Algumas vezes os patches são tão
experimentais que podem não funcionar de maneira alguma e isso é algo que
não queremos para o nosso sistema.
Para fazermos um backup completo do nosso Kernel podemos utilizar o comando
abaixo.
# tar czvf [Link] /usr/src/linux-2.6.9
Após adquirir o patch, você deverá gravá-lo no diretório /usr/src. Vamos supor que o
seu Kernel atual é o 2.6.9 e você deseja aplicar o patch 2.6.9-ac16.bz2.
Sempre iremos aplicar o patch do diretório mais alto da estrutura de arquivos da fonte do
Kernel. Assim, iremos entrar no diretório /usr/src/linux-2.6.9 e digitar o comando:
• Comando: bzip2 -dc /usr/src/2.6.9-ac16.bz2 | patch -p1 -s –dry-run
Sempre que tratarmos de Kernel devemos ser muito precavidos! Assim, antes de aplicar
um patch, ou tentar aplicar um, é sempre indicado ter certeza que ele irá funcionar. Isso é
possível através de um teste para avaliar se o patch em questão pode ser aplicado sem
problemas. Tal teste é feito com o auxílio da opção –-dry-run.
A saída gerada por esse comando é muito rápida, ficando impossível de ler cada linha
na tela. Para que possamos enxergar somente o que nos interessa, utilizamos a opção –s que
instrui o comando a mostrar apenas as mensagens de erro.
Por fim, a opção –p1 mostra apenas a localização relativa dos arquivos modificados ao
invés de mostrar o caminho completo para eles.
SS3187 - v1.0 – CentOS 6.2 Página 97
Formação Intensiva Linux- 96 horas
Caso o nosso teste tenha sido executado com sucesso, podemos então aplicar nosso
patch com segurança. Isso é feito com o comando:
• Comando: bzip2 -dc /usr/src/2.6.9-ac16.bz2 | patch -p1
O comando acima irá aplicar o patch no código do Kernel. Depois de aplicar o patch
devemos recompilar o novo Kernel com suas melhorias.
Um último cuidado que deve ser levado em consideração é que nem todos os patch são
incrementais. Por exemplo, o prepatch do Linux é o exemplo de um não incremental, ou seja, se
quisermos aplicar o prepatch 2.6.7-pre2, então iremos utilizar ele sobre o Kernel 2.6.6 e não
sobre o Kernel já com o patch 2.6.7-pre1.
Se o patch já havia sido aplicado, então é necessário remover ele antes de aplicar o
novo. O comando abaixo remove um patch já aplicado:
• Comando: bzip2 -dc /usr/src/2.6.9-ac16.bz2 | patch -p1 -R
A opção –R instrui o comando patch a remover o patch especificado.
Novamente, após a aplicação de um novo patch, devemos recompilar o kernel, pois o
patch é aplicado apenas às fontes e não ao executável já compilado.
SS3187 - v1.0 – CentOS 6.2 Página 98
Formação Intensiva Linux- 96 horas
10.5 Definindo Configurações do Kernel
Um dos objetivos que sempre esteve presente durante a concepção do Sistema
Operacional Linux foi prover o máximo de flexibilidade, de modo a atender as mais variáveis
exigências possíveis.
Para alcançar este objetivo, muitos parâmetros de funcionamento do kernel, são
configurados através de variáveis. Desta forma, seus valores podem ser alterados durante a
execução do Sistema Operacional, sem necessidade de um reinício de sistema. Na verdade,
foram providos dois mecanismos independentes para esta tarefa:
Parâmetros em “/proc”
Podemos alterar um parâmetro, editando-se diretamente o seu valor. Ao fazê-lo,
contudo, estes valores só permanecem configurados até o próximo reboot, quando então,
retornam aos seus padrões originais. Seguem os exemplos abaixo:
• Comando: echo 1 > /proc/sys/net/ipv4/ip_forward (ativa o roteamento “IP”, entre
as interfaces de rede).
• Comando: echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter (ativa o roteamento filtro
“anti spoofing” do kernel).
Chamada de sistema “sysctl”
Este é um método alternativo, que possui como vantagem a permanência dos valores
arbitrados, após o “reboot”. Para isto, devemos adicionar os parâmetros e seus valores
adequados, ao arquivo /etc/sysctl. conf.
Exemplo:
Para configurar os dois parâmetros anteriores, diretamente no arquivo “[Link]”, adicione a
este (caso já não existam) as linhas abaixo:
net.ipv4.ip_forward = 1 (ativa o roteamento IP, entre as interfaces de rede).
[Link] = 1 (ativa o filtro “anti spoofing” do kernel).
SS3187 - v1.0 – CentOS 6.2 Página 99
Formação Intensiva Linux- 96 horas
Parâmetros “ip_forward” e “rp_filter”
Os parâmetros acima significam o seguinte:
• Variável ip_forward: Permite que um pacote IP atravesse uma interface de rede
em direção à outra. Por padrão, este parâmetro é desabilitado em qualquer Sistema
Operacional, por motivos de segurança. Devemos ativar este parâmetro, caso se deseje
prover comunicação entre duas redes.
• Variável rp_filter: Esta variável permite ao kernel do Linux, testar a classe de
endereço IP que está recebendo e decidir, baseado na interface de origem deste pacote,
se o aceita ou o rejeita.
Exemplo: Supondo que um pacote IP com o endereço “[Link]”, venha pela
interface externa, que liga o dispositivo com a Internet, este será desconsiderado, caso o
filtro “anti spoofing” tenha sido ativado.
Existem muitas outras configurações importantes dentro do “/proc”, por exemplo, para:
• Configurações de Memória Virtual: /proc/sys/vm
• Configurações de Filesystem: /proc/sys/fs
• Configurações de Kernel: /proc/sys/kernel
• Configurações da Pilha TCP/IP: /proc/sys/net
Uma documentação básica sobre estes, pode ser encontrada no diretório das fontes do
kernel em: /usr/src/linux/Documentation/sysctl. Como Administrador de Sistemas Linux, caberá a
você obter um conhecimento sólido sobre estes parâmetros.
SS3187 - v1.0 – CentOS 6.2 Página 100
Formação Intensiva Linux- 96 horas
10.6 Para Recordar
1. Kernel: É o coração do sistema operacional. Provê uma camada de abstração
entre os aplicativos e os dispositivos de Hardware.
2. Compilar / usar Patch: Após adquirir os arquivos fonte do Kernel, precisamos
compilar estes. Entretanto, entre uma versão estável e outra, pode ser lançado
um patch para resolver um problema específico. Para aplicar um patch
utilizamos a ferramenta patch.
3. Cuidados: Sempre que for compilar ou aplicar um patch no sistema, é
considerado uma boa prática fazer o backup do sistema e possuir um Kernel
funcional, a fim de reparar o novo Kernel em caso de problemas.
4. Especializados: Como cada máquina possui em geral, dispositivos de
Hardware diferentes. É sempre bom realizar um levantamento de todos os
dispositivos da máquina assim como ter conhecimento se estes são suportados
pela versão do Kernel que está sendo instalada.
SS3187 - v1.0 – CentOS 6.2 Página 101
Formação Intensiva Linux- 96 horas
10.7 Exercícios
1. Quais os cuidados que devemos ter na hora de aplicar um patch e quais tipos
existem?
2. Quais opções devem ser usadas, na compilação do Kernel, para permitir acesso
a uma impressora na porta paralela. Além disso, qual opção é necessária para
utilizarmos som e vídeo?
3. Como realizamos a configuração das opções do Kernel no modo texto,
permitindo a navegação entre os menus
4. Como realizamos a configuração das opções do Kernel no modo gráfico?
5. Quais os comandos necessários para compilar o Kernel e os módulos?
SS3187 - v1.0 – CentOS 6.2 Página 102
Formação Intensiva Linux- 96 horas
Notas:
SS3187 - v1.0 – CentOS 6.2 Página 103
Formação Intensiva Linux- 96 horas
Módulo 11 - Configuração de Hardware
SS3187 - v1.0 – CentOS 6.2 Página 104
Formação Intensiva Linux- 96 horas
11.0 Coletando Informações Importantes
Sempre que é necessário configurar algum dispositivo de Hardware devemos conhecer
todas as informações possíveis sobre esse dispositivo, como seu fabricante, modelo, número de
série e outros. Um comando muito utilizado para esse fim é o lspci. O lspci é um comando
que mostra informações sobre o barramento de comunicação PCI e todos os dispositivos
anexados a ele. Abaixo uma saída típica, deste comando:
• Comando: lspci
A sua saída será similar a mostrada abaixo:
...
[Link].1 ff00: Intel Corporation E7320 Error Reporting Registers
(rev 0a)
[Link].0 PCI bridge: Intel Corporation E7525/E7520/E7320 PCI Express
Port A (rev 0a)
[Link].0 PCI bridge: Intel Corporation E7525/E7520/E7320 PCI Express
Port A1 (rev 0a)
[Link].0 PCI bridge: Intel Corporation 6300ESB 64-bit PCI-X Bridge
(rev 02)
[Link].0 USB Controller: Intel Corporation 6300ESB USB Universal
Host Controller (rev 02)
[Link].1 USB Controller: Intel Corporation 6300ESB USB Universal
Host Controller (rev 02)
[Link].4 System peripheral: Intel Corporation 6300ESB Watchdog Timer
(rev 02)
[Link].5 PIC: Intel Corporation 6300ESB I/O Advanced Programmable
Interrupt Controller (rev 02)
[Link].0 VGA compatible controller: ATI Technologies Inc Rage XL
(rev 27)
...
Fragmento da saída do comando “lspci”
SS3187 - v1.0 – CentOS 6.2 Página 105
Formação Intensiva Linux- 96 horas
A listagem acima mostra os dispositivos reconhecidos pelo comando, em um barramento
PCI, de uma máquina específica. Cada máquina terá sua listagem específica e dependente dos
dispositivos PCI conectados ao seu barramento.
Se olharmos cuidadosamente para a saída acima, podemos identificar diversas
informações úteis para a configuração de um dispositivo específico, como o caso da placa de
vídeo, por exemplo. Sabemos que ela é uma placa da ATI e do modelo Rage por causa da linha:
[Link].0 VGA compatible controller: ATI Technologies Inc Rage XL
(rev 27)
De posse dessas informações podemos procurar os drivers para ela a fim de fazer sua
instalação corretamente.
O Comando lsusb
Outro comando, bastante útil para adquirir informações dos dispositivos de uma máquina
é o lsusb. Ele tem o mesmo propósito do lspci, entretanto, irá mostrar informações de todos
os dispositivos ligados na USB. A utilização deste vem crescendo cada vez mais devido ao
avanço das tecnologias que são empregas nos dispositivo USB como, mouse, teclado, modems
e outros. A saída para esse comando é semelhante como a seguinte:
• Comando: lsusb
...
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000
...
Fragmento de saída do comando “lsusb”
SS3187 - v1.0 – CentOS 6.2 Página 106
Formação Intensiva Linux- 96 horas
12.1 Coletando Informações no Diretório /proc
No “/proc”, ficam contidos os processos e informações sobre o Kernel em execução. O
/proc contém uma lista de interrupções, dispositivos, portas de entrada e saída, informações
sobre o processador, memória e muitos outros:
• Comando: cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 15
model : 3
model name : Intel(R) Xeon(TM) CPU 2.80GHz
stepping : 4
cpu MHz : 2793.681
cache size : 1024 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 1
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge
mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm
pni monitor ds_cpl cid xtpr
bogomips : 5505.02
Saída do comando cat /proc/cpuinfo
SS3187 - v1.0 – CentOS 6.2 Página 107
Formação Intensiva Linux- 96 horas
O arquivo /proc/cpuinfo possui diversas informações sobre o processador da
máquina. Na máquina do exemplo em questão, existem dois processadores HT. A saída
completa do comando acima mostra quatro vezes as mesmas informações, por serem dois
processadores HT.
Outro arquivo importante é o /proc/interrupts, que lista as interrupções (“IRQs”), de todos
os dispositivos de hardware instalados no sistema;
• Comando: cat /proc/interrupts
CPU0 CPU1 CPU2 CPU3
0: 2140245316 22 22 21 IO-APIC-edge timer
1: 7 1 0 0 IO-APIC-edge i8042
9: 0 0 0 0 IO-APIC-level acpi
16: 14812121 4143052 22907091 15447745 IO-APIC-level eth0
18: 404436 0 0 1 IO-APIC-level libata
23: 0 0 0 0 IO-APIC-level
ehci_hcd:usb1
25: 13593712 0 1 0 IO-APIC-level ioc0
NMI: 0 0 0 0
LOC: 2140683866 2140683866 2140683864 2140683863
ERR: 0
MIS: 0
Saída do comando cat /proc/interrupts
SS3187 - v1.0 – CentOS 6.2 Página 108
Formação Intensiva Linux- 96 horas
Já, o arquivo /proc/ioports, mostra o mapa de endereços de entrada/saída (“I/O”),
utilizados pelos dispositivos de hardware, para trocar informações com o processador:
• Comando: cat /proc/ioports
...
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0064-0064 : keyboard
0070-0077 : rtc
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
SS3187 - v1.0 – CentOS 6.2 Página 109
Formação Intensiva Linux- 96 horas
0170-0177 : ide1
0376-0376 : ide1
03c0-03df : vga+
03f8-03ff : serial
0960-0967 : [Link].0
...
Trecho da saída do comando cat /proc/ioports
SS3187 - v1.0 – CentOS 6.2 Página 110
Formação Intensiva Linux- 96 horas
Os próprios módulos de dispositivos, listados pelo comando “lsmod”, ficam listados no arquivo
/proc/modules:
• Comando: cat /proc/modules
...
ip_conntrack_ftp 74000 0 - Live 0xf89d0000
af_packet 25352 0 - Live 0xf89c8000
ipt_multiport 3584 2 - Live 0xf88fe000
ipt_LOG 8576 1 - Live 0xf8935000
ipt_state 2944 1 - Live 0xf8925000
ip_conntrack 46920 2 ip_conntrack_ftp,ipt_state, Live 0xf89b2000
ipt_limit 3584 3 - Live 0xf8927000
iptable_filter 4096 1 - Live 0xf8804000
ip_tables 23168 5
ipt_multiport,ipt_LOG,ipt_state,ipt_limit,iptable_filter, Live
0xf892a000
md5 4992 1 - Live 0xf88f5000
ipv6 272672 30 - Live 0xf8a01000
evdev 10752 0 - Live 0xf88f1000
hw_random 6676 0 - Live 0xf888b000
shpchp 103300 0 - Live 0xf8942000
pci_hotplug 12804 1 shpchp, Live 0xf8820000
ehci_hcd 34952 0 - Live 0xf885b000
...
Trecho de saída do comando cat /proc/modules
O arquivo /proc/modules possui as informações de todos os módulos carregados no
sistema atualmente. Para que um novo dispositivo de hardware funcione, o seu módulo deve
existir neste arquivo, o que implica em que o mesmo será listado na saída do comando lsmod,
estando, portanto, carregado em memória.
SS3187 - v1.0 – CentOS 6.2 Página 111
Formação Intensiva Linux- 96 horas
11.2 Configurando o Hardware
Embora a configuração de hardware no Linux ainda possa causar certa estranheza ou
confusão aos usários mais inexperientes, o sistema vem evoluindo bastante neste aspecto.
De fato, atualmente existem diversas ferramentas de auto-detecção e auto-configuração
para todos os tipos de dispositivos que podemos encontrar no mercado.
Um exemplo disso é o programa alsaconf.
O programa alsaconf é uma ferramenta baseada em texto que permite a você configurar
todos os arquivos necessários para utilizar uma placa de som no Linux. Instalado em todas as
distribuições Linux modernas, o alsaconf permite uma completa configuração da placa de som.
Até mesmo pelos usuários, mais inexperientes.
Outro programa, bastante conhecido, é o mdetect.
O mdetect é um programa de auto-configuração para mouse e pode ser usado para
configurar, de forma adequada, o mouse para o ambiente gráfico.
Além disso, existe uma série de escripts que automatizam essa detecção e
configuração, de modo automático, sem intervenção do usuário. Exemplos disso são os serviços
“hotplug” e “coldplug”, existentes em muitas distros diferentes.
Entretanto, muito antes dessas ferramentas existirem, obviamente que os dispositivos de
Hardware também precisavam ser configurados e utilizados. O processo de detecção de
hardware pode ser assim descrito:
1 – Leitura dos parâmetros de hardware, armazenados em “/proc” (Irq, dma, iobase);
2 – Carga do Driver de dispositivo (“módulo”), através do comando “modprobe”;
3 – Configuração de um nome de dispositivo em “/dev”, para o dispositivo detectado;
Vimos anteriormente que o Kernel possui uma série de opções para os dispositivos mais
comuns. Quando compilamos o Kernel, podemos definir que os drivers da nossa placa de som
devem ser compilados dentro do Kernel ou como módulo.
Caso utilizemos os módulos, então, para utilizarmos nossa placa de som precisamos
carregar o módulo. Isso é possível através do comando modprobe.
SS3187 - v1.0 – CentOS 6.2 Página 112
Formação Intensiva Linux- 96 horas
O modprobe é um programa que, inteligentemente, consegue inserir ou remover um
módulo no Kernel. Sua sintaxe é bem parecida com a do comando insmod.
# modprobe soundcore
O comando acima irá carregar o módulo soundcore para o Kernel.
NOTA: Se algum parâmetro adicional for colocado após o nome do módulo, no
exemplo, soundcore, essas informações serão passadas para o Kernel.
Como dito anteriormente, o modprobe é capaz de inserir e remover um módulo do
Kernel, assim, o comando abaixo retira o nosso módulo recém carregado.
• Comando: modprobe –r soundcore
O modprobe sempre vai procurar no diretório dos módulos do Kernel atual, ou seja, se
estamos utilizando o Kernel 2.6.9, então ele irá procurar no diretório /lib/modules/2.6.9.
Outra ferramenta bastante útil é o hdparm. O hdparm provê uma interface por linha de
comando para controle de I/O de diversos tipos de discos rígidos suportados pelo Kernel do
Linux. Veremos agora as opções mais utilizadas para este comando.
Opção Descrição
-B Define configurações para o APM (Advanced Power Management).
-c Define as configurações de I/O para IDE 32-bit
-C Verifica o estado do modo de força do IDE.
-d Define o uso do DMA acionando a flag using_dma.
-E Define a velocidade do CD-ROM.
-g Exibe a geometria do disco rígido.
-i Mostra a identificação do disco rígido.
-k Habilita ou desabilita a flag keep_settings_over_reset.
SS3187 - v1.0 – CentOS 6.2 Página 113
Formação Intensiva Linux- 96 horas
-p Habilita o modo PIO no chipset de inteface IDE.
-t Realiza o teste de leitura contabilizando o tempo.
-T Realiza o teste de leitura de cache contabilizando o tempo.
-y Coloca o disco IDE em modo standby.
-Y Coloca o disco IDE em modo sleep.
-Z Desabilita o modo de auto-powersaving dos discos Seagate.
SS3187 - v1.0 – CentOS 6.2 Página 114
Formação Intensiva Linux- 96 horas
11.3 Para Recordar
1. Gerenciando módulos: Usamos os comandos insmod e modprobe para
gerenciar nossos módulos. Ao carregarmos um módulo específico de um
dispositivo, este está disponível para configuração e uso.
2. Ferramentas: Existem diversas ferramentas de auto-detecção e auto-
configuração. Em alguns casos essas ferramentas pode ser a melhor escolha
para encontrar e configurar um dispositivo. A mais conhecida delas é o kudzu.
3. Informações: Sempre que precisarmos de informações sobre o nosso sistema,
assim como sobre nossos dispositivos, podemos usar o diretório /proc para
isso. Também podemos usar os comandos lspci e lsusb.
SS3187 - v1.0 – CentOS 6.2 Página 115
Formação Intensiva Linux- 96 horas
11.4 Exercícios
1. Como é possível habilitar um dispositivo de som para uso, sabendo que o nome
do módulo para isso é o [Link]?
2. Como posso descobrir detalhes do processo de PID 3456?
3. É possível configurar nossos dispositivos através de interface gráfica?
4. Se sim, como faço isso?
5. Como posso habilitar o modo DMA do meu disco rígido?
SS3187 - v1.0 – CentOS 6.2 Página 116
Formação Intensiva Linux- 96 horas
Notas:
SS3187 - v1.0 – CentOS 6.2 Página 117
Formação Intensiva Linux- 96 horas
SS3187 - v1.0 – CentOS 6.2 Página 118
Formação Intensiva Linux- 96 horas
Módulo 12 - Instalação de Programas
SS3187 - v1.0 – CentOS 6.2 Página 119
Formação Intensiva Linux- 96 horas
12.0 Gerenciamento de Pacotes RPM
O RPM é uma ferramenta poderosa para se fazer o gerenciamento de pacotes de uma
distribuição Linux, sendo utilizada também na Distribuição CentOs. O RPM originou-se na
distribuição Red Hat, com o nome de Red Hat Package Manager, e era utilizado para instalar,
desinstalar, verificar, pesquisar e atualizar o sistema de pacotes de um computador.
Antes do RPM, para a instalação de um aplicativo era necessário obter-se o código fonte
dele e então efetuar um complexo trabalho de compilação do código fonte. Esta tarefa nem
sempre era feita rapidamente pelo fato de que, algumas vezes, era preciso resolver diversos
problemas de dependência de bibliotecas ou outros programas.
Para resolver essa questão, nasceu o RPM. Seu funcionamento é bastante simples e
eficiente, visto que o RPM informa o usuário sobre as dependências necessárias para a
instalação de um determinado pacote.
Os pacotes RPM, em geral, utilizam os binários compilados do programa. Ou seja,
quando você escolhia instalar um programa apenas ocorria o download desse pacote e a cópia
dos binários, encontrados no pacote, para seus diretórios específicos. Entretanto, caso a pessoa
escolhesse fazer alterações no código fonte e compilar o pacote novamente, também é possível
através do download das fontes dos pacotes e não dos binários. O RPM possui diversas opções
de uso. Veremos aqui as mais comuns e usadas diariamente:
Pesquisa de Pacotes
• Comando: rpm -qa (procura por todos os pacotes)
• Comando: rpm -qa | grep squid (procura por um pacote específico)
• Comando: rpm -qf /etc/hosts (descobre a qual pacote, um arquivo pertence)
Instalação de Pacotes
• Comando: rpm -i [Link] (instalação apenas)
• Comando: rpm -ivh [Link] (instalação com barra de progresso)
• Comando: rpm -i(-ivh) [Link] –force (ignora dependências)
SS3187 - v1.0 – CentOS 6.2 Página 120
Formação Intensiva Linux- 96 horas
Assim, se quisermos fazer a instalação do pacote do grub, por exemplo, utilizaremos o
comando:
• Comando: rpm –i [Link]
O comando acima faz a instalação de um pacote, previamente adquirido, no sistema
operacional. Um bom costume é utilizar, junto com a opção –i, a opção –vh, pois assim teremos
mais informações sobre a instalação, além de uma barra de progresso (“h” = “hash”), informando
o progresso da sua instalação no sistema.
No caso do pacote não existir localmente, é possível usar o comando a seguir, para
fazer a instalação de um pacote remoto, em uma única linha de comando, exemplo:
rpm –i [Link]
Além disso, existe ainda a opção -f (force), que permite a instalação de um pacote,
ignorando eventuais dependências não satisfeitas. Esta opção deve ser utilizada com muito
cuidado, pois pode inclusive, danificar a base rpm do sistema.
Upgrade de Pacotes
• Comando: rpm -U [Link] (atualização, apenas)
• Comando: rpm -Uvh [Link] (atualização com barra de progressos)
• Comando: rpm -U(-Uvh) [Link] –force (ignora dependências)
No upgrade de pacotes, os arquivos de configuração anteriores, serão mantidos.
Da mesma forma, que na instalação, o comando de Upgrade de um pacote aceita as
opções de verbose (-v), e de barra de progresso, além da opção “force” (-f).
Desinstalação de Pacotes
• Comando: rpm -e pacote (remoção, apenas)
• Comando: rpm -e pacote –nodeps (ignora dependências)
SS3187 - v1.0 – CentOS 6.2 Página 121
Formação Intensiva Linux- 96 horas
Dessa forma, se quisermos, por exemplo, o nosso pacote recém instalado, grup,
utilizaremos o comando que segue:
• Comando: rpm –e grub-0.96-6
“Note que, agora, devemos informar APENAS o nome do pacote, sem informar sua
extensão (pois, uma vez que o software já se encontra instalado, não existe mais pacote) “.rpm”.
Caso ocorra de querermos remover um pacote, entretanto não lembrarmos o nome
completo dele, podemos fazer uma pesquisa na base de dados dos pacotes instalados. Isso é
possível com a sintaxe abaixo:
• Comando: rpm –qa | grep –i pacote
O parâmetro –i, passado para o comando grep indica que não queremos fazer
distinção entre maiúsculas e minúsculas. Abaixo, como exemplo, ilustramos como procurar e
saber se existe um pacote chamado xmms no nosso sistema:
• Comando: rpm –qa | grep –i xmms
Reindexando o Banco RPM
Eventualmente, poderá ocorrer algum dano à base RPM. No caso desta eventualidade,
não será possível, por exemplo, obterem-se informações sobre quais pacotes se encontram ou
não instalados no sistema. Para resolver este problema, podemos utilizar o comando abaixo,
para reindexar a base de dados RPM:
• Comando: rpm –rebuilddb
Após alguns segundos, o banco RPM, deverá ter se encontrar, novamente em
condições.
SS3187 - v1.0 – CentOS 6.2 Página 122
Formação Intensiva Linux- 96 horas
Ferramentas de gerenciamento de Dependências
Durante a instalação/desinstalação de um pacote, é possível que o sistema informe
sobre a necessidade de se instalar (ou desinstalar), o “software X”, entretanto, qual é o nome do
pacote rpm que contém o “software X”?? É para estes casos, que foi desenvolvido um tipo de
software especial, chamado de “Ferramentas de gerenciamento de Dependências”. Exemplos
deste tipo de ferramentas podem ser encontrados na Tabela abaixo:
FERRAMENTA DISTRIBUIÇÃO
APT DEBIAN
APTITUDE DEBIAN
YUM REDHAT (CentOs)
YAST SUSE
ZYPPER SUSE
Ferramentas de Gerenciamento de Dependências
De acordo com a tabela acima, o CentOs, utiliza a ferramenta YUM, originária da
Distribuição RedHat. Por exemplo, para instalarmos o servidor de SMTP Postfix, bem como
todas as suas dependências, basta utilizar o comando a seguir:
• Comando: yum install postfix
O YUM irá procurar e instalar o postfix e todas as suas dependências, a partir da lista de
servidores de ftp, existente a partir de “/var/cache/yum”.
SS3187 - v1.0 – CentOS 6.2 Página 123
Formação Intensiva Linux- 96 horas
12.1 Instalando Programas Através do Código Fonte
A instalação de programas a partir de um código fonte é mais complexa que a instalação
através de um gerenciador de pacotes, como o YUM. De modo geral, devemos utilizar os
pacotes pré-compilados, originais da Distribuição e, apenas em casos especiais, partir para a
compilação dos pacotes. Dentre as razões para este procedimento, podemos citar:
RAZÕES PARA COMPILAR RAZÕES PARA NÃO COMPILAR
Corrigir bugs, mais rápido Perde-se a garantia do fabricante
Ativar funcionalidades extras Perdem-se as atualizações automáticas
Incrementar a performance Procedimento manual e mais complexo
Razões pró/contra compilação de aplicações
Uma vez decidido que compilar o software seja o mais indicado, devemos proceder, de
acordo com o indicado, logo a seguir:
Passo 1: Obter as fontes do software e descompactar em:
• /usr/src: Se depender das fontes do kernel (ex. Drivers de dispositivo)
• Outro diretório qualquer (ex “/usr/local”): Maioria das aplicações
Passo 2: Entrar no diretório descompactado e LER o arquivo INSTALL, o qual contém as
orientações essenciais (ex. O diretório de instalação) para o procedimento de instalação.
Passo 3: Após ler o arquivo INSTALL executar o script “configure”, adicionando, se necessário
os parâmetros de instalação que forem indicados. Por exemplo, para compilar o Web Server
Apache, seria:
• Comando: ./configure –with-dir=/usr/local/apache2
SS3187 - v1.0 – CentOS 6.2 Página 124
Formação Intensiva Linux- 96 horas
Passo 4: Após a conclusão do “configure”, será criado o arquivo “Makefile”, que contém as
orientações e parâmetros para a compilação do software. A seguir, para compilar o software,
execute:
• Comando: make
Passo 5: Finalmente, para instalar os arquivos compilados e o software, nos diretórios corretos,
execute:
• Comando: make install
O comando acima fará com que os arquivos binários sejam copiados para os diretórios
específicos do sistema, como por exemplo, o diretório /usr/local/bin, onde podemos
encontrar diversos outros programas.
NOTA: Procure manter seu sistema atualizado, preferencialmente através dos
pacotes RPM, ou então, através das fontes compiladas. Misturar ambas as
formas de atualização certamente trará problemas com versões de software.
SS3187 - v1.0 – CentOS 6.2 Página 125
Formação Intensiva Linux- 96 horas
12.2 Gerenciando Bibliotecas Compartilhadas
As bibliotecas compartilhadas, ou dinâmicas como também são conhecidas, são
bibliotecas que são carregadas pelos programas quando eles são iniciados. Quando uma
biblioteca compartilhada é instalada de forma correta, todos os programas que forem iniciados
depois desta instalação usarão, automaticamente, essa biblioteca.
Na verdade, o conceito de biblioteca compartilhada é mais complexo e sofisticado que
isso pelo fato que o uso delas no Linux permite que você:
• Atualize todas as bibliotecas e ainda assim tenha suporte para os programas que
usam as antigas;
• Sobrescreva bibliotecas específicas ou, até mesmo, funções específicas de uma
biblioteca quando um determinado programa for executado,
• Fazer tudo isso enquanto os programas estiverem sendo executados usando as
bibliotecas existentes.
Para que as bibliotecas compartilhadas suportem todas essas propriedades desejadas,
uma série de convenções deve ser seguida. Para tanto, é importante que seja entendida a
diferença entre os nomes das bibliotecas, em particular os “nome so” e os “nomes reais”, além
da forma como elas interagem.
Todas as bibliotecas compartilhadas possuem um nome especial chamado de “nome
so”. Esses nomes tem um prefixo “lib” seguido do nome da biblioteca e da frase “.so”. “Depois do
“.so” encontramos outro ponto e a versão da biblioteca.
Além disso, cada biblioteca compartilhada possui também um “nome real”, que é o nome
da biblioteca contendo o código dela. O “nome real” adiciona ao “nome so” um ponto, um
número, outro ponto e o número de lançamento. Este último ponto e o número de lançamento
são opcionais.
A chave para gerenciar essas bibliotecas é realizar a separação desses nomes. Quando
os programas internamente listam as bibliotecas compartilhadas que eles necessitam, devem
apenas olhar nessa lista o “nome so” que procuram.
Ao contrário disso, quando você cria uma biblioteca compartilhada, você deve somente
criar a biblioteca com o nome específico. Quando se instala uma nova versão de uma biblioteca,
essa instalação é feita em um diretório especial e deve-se utilizar o programa ldconfig após
isso. O ldconfig irá examinar os arquivos existentes nesse diretório especial e irá criar os
“nome so” como links simbólicos dos nomes reais, assim como ajustar o arquivo de cachê
/etc/[Link] que será visto mais adiante.
SS3187 - v1.0 – CentOS 6.2 Página 126
Formação Intensiva Linux- 96 horas
Assim, /usr/lib/[Link].3 é um “nome so”, o qual será feito um link
simbólico, pelo comando ldconfig, para um nome real como
/usr/lib/[Link].3.0. Deve existir ainda um nome de ligação,
/usr/lib/[Link] o qual deve ser um link simbólico para
/usr/lib/[Link].3.
A localização padrão, de acordo com a GNU, para todas as bibliotecas é o diretório
/usr/local/lib, quando são distribuídas pelos códigos fonte.
Entretanto, A FHS (Filesystem Hierarchy Standard) discute que a maioria das bibliotecas
deve ser instalada no diretório /usr/lib, mas as bibliotecas necessárias para iniciar o sistema
devem ser colocadas no diretório /lib e as bibliotecas que não fazem parte do sistema devem
ser colocadas no diretório /usr/local/lib.
Na verdade não existe um conflito entre estes dois padrões. O GNU é recomendado
para desenvolvedores enquanto que o FHS é recomendado para os distribuidores.
Na prática essa idéia funciona bem: o último código fonte que você obter irá instalar,
automaticamente, no diretório “local” (/usr/local) e após esse código assumir maturidade
suficiente poderá ser anexado a um pacote distribuído e colocado no diretório padrão da
distribuição.
Sempre que formos utilizar uma biblioteca, é necessário que esta se encontre nos
diretórios listados no arquivo /etc/[Link]. Nesse arquivo se encontram todos os
diretórios onde os programas podem procurar por suas bibliotecas.
Caso uma biblioteca específica não seja encontrada em nenhum dos diretórios padrão, é
possível adicionar uma nova entrada no arquivo /etc/[Link]. Sempre que editarmos
esse arquivo é necessário fazer uma atualização de seus valores, executando o comando
ldconfig. Isso fará com que o novo diretório adicionado faça parte da lista procurada pelos
programas.
Além das bibliotecas compartilhadas, ainda existem as bibliotecas estáticas. As
bibliotecas estáticas são simplesmente uma coleção de arquivos objetos. Por convenção, as
bibliotecas estáticas terminam com “.a” no fim do nome.
SS3187 - v1.0 – CentOS 6.2 Página 127
Formação Intensiva Linux- 96 horas
Esta coleção de arquivos é criada usando o programa ar. As bibliotecas estáticas não
são usadas com freqüência atualmente por causa das vantagens que as bibliotecas
compartilhadas possuem. Ainda assim, algumas vezes elas são criadas.
As bibliotecas estáticas permitem aos usuários linkar os programas sem ter que
recompilar seu código fonte, economizando o tempo de recompilação. Note que este tempo é o
que menos importa, devido à grande velocidade dos compiladores atualmente. Estas bibliotecas
são úteis para os desenvolvedores, caso eles desejem permitir que programadores usem as
suas bibliotecas, mas não as obtenham.
Em teoria, códigos com bibliotecas estáticas ELF que forem linkados em um executável
devem rodar ligeiramente mais rápido, cerca de 5%, do que aquele que usarem bibliotecas
compartilhadas. Entretanto, na prática, isto é raro de ser visto.
Abaixo veremos algumas comparações entre as bibliotecas dinâmicas ou
compartilhadas e as bibliotecas estáticas usadas para gerar arquivos binários (executáveis).
• Binários linkados estaticamente são maiores do que os linkados
dinamicamente: aqueles linkados estaticamente têm a cópia do código da biblioteca
embutido no seu próprio código.
• Binários linkados estaticamente não precisam que a biblioteca
esteja em algum lugar em tempo de execução: quando você executa um binário
estaticamente linkado, todo o código que ele precisa está dentro dele.
• Fácil atualização: considerando o recente problema de segurança da
zlib. A zlib é uma biblioteca cheia de funções para compressão. Em alguma
parte desta biblioteca existia um bug que fazia com que os programas travassem. Se
você tem um programa estaticamente linkado à zlib, então o código com problema
está dentro do programa e você precisa atualizar a versão da zlib e então
recompilar o seu programa. Se você possui um programa dinamicamente linkado à
zlib, você somente precisa atualizar a biblioteca e reiniciar o seu programa.
• Memória usada: Dois programas dinamicamente linkados podem usar
uma única cópia de uma biblioteca.
SS3187 - v1.0 – CentOS 6.2 Página 128
Formação Intensiva Linux- 96 horas
• Velocidade de inicialização: Se você possui programas que dependam muito de
bibliotecas compartilhadas, por exemplo, KDE e OpenOffice, o programa ld-Linux
perderá muito tempo procurando por elas. Neste caso, binários estaticamente
linkados são mais rápidos para iniciar. Entretanto, se nós tivermos dependendo
apenas de poucas bibliotecas, comumente usadas, existe a chance que elas já
estejam carregadas na memória RAM, então o programa irá iniciar mais rápido do
que os que usam bibliotecas estáticas.
12.3 Módulos PAM
O PAM é um conjunto de bibliotecas especializadas com a função de interfacear o
processo de autenticação das aplicações com o Sistema Operacional (Linux). O objetivo final é
diminuir a necessidade de se reescrever código. Alguns sistemas procuram por seus módulos
PAM no diretório /usr/lib/security e outros no diretório /lib/security. Na lista destes
diretórios estão arquivos como pam_access.so, pam_console.so, pam_cracklib.so e
outros tantos. Esses arquivos são bibliotecas compartilhadas que possibilitam as diversas
capacidades do PAM.
O PAM utiliza quatro módulos básicos para autenticar usuários, gerenciar contas de
usuários, gerenciarem senhas e gerenciar as sessões de login atual:
• Módulo de autenticação: É responsável por verificar as credenciais dos usuários e
definir se ele pode proceder ou não.
• Módulo de gerenciamento de contas: Provê a capacidade de determinar se um
usuário possuiu ou não uma conta válida. Esse módulo verifica a senha ou a data de
expiração da conta e verifica se o login possui qualquer restrição, como por exemplo,
horas de acesso ou máximo de usuários conectados.
• Módulo de senha: Provê a funcionalidade para os usuários trocarem seu token de
autenticação ou sua senha.
• Módulo de gerenciamento de sessão: Provê a funcionalidade para iniciar e
terminar as sessões de login, além disso, ele efetua tarefas como montar diretórios
necessários, por exemplo.
Para que as aplicações funcionassem em conjunto com o PAM, elas tiveram que ser
desenvolvidas independentes no que diz respeito ao esquema de autenticação.
SS3187 - v1.0 – CentOS 6.2 Página 129
Formação Intensiva Linux- 96 horas
Isso significa que o programa não mais se preocupará com o esquema de autenticação
que irá usar. Ao invés disso ele terá módulos de autenticação, anexado a ele em tempo de
execução.
O administrador pode mudar o esquema de autenticação para uma aplicação que
funcione com o PAM sem ter que reescrever o código dela.
Isso é feito apenas editando o arquivo de configuração do PAM, que deve ser específico
da aplicação ou usado no sistema inteiro.
Os módulos referenciados dentro do arquivo de configuração implementam o esquema
de autenticação, assim, para mudar esses esquemas, você deverá editar o arquivo para incluir
módulos diversos. Se não existe módulo para sua necessidade, é possível escrever um novo e
então o incluir.
Para exemplificar melhor, vamos imaginar um caso onde uma aplicação que necessita
de autenticação do usuário para fazer alguma operação para ele. Antigamente, a aplicação
requisitaria e leria uma senha informada pelo usuário para validar essa senha em algum
esquema de autenticação. Atualmente, ao invés de usar um esquema de autenticação próprio,
as aplicações que usam o PAM podem usar este para garantir a autenticação.
Para tanto, a aplicação invoca o PAM, nomeando um arquivo de configuração que, em
geral, tem o mesmo nome da aplicação. Assim, o PAM irá procurar no diretório /etc/pam.d um
arquivo de configuração que possui o nome da aplicação. Por exemplo, o programa de login do
Linux tem um arquivo de configuração chamado /etc/pam.d/login. Se o PAM foi
configurado para aplicar o esquema de autenticação para todas as aplicações, este esquema é
definido no arquivo /etc/[Link].
Os módulos do PAM são conhecidos como pass-fail. Por padrão, um processo de
autenticação que falhar passará pelo módulo para prevenir que os usuários saibam onde ocorreu
a falha e usem essa informação para quebrar a autenticação.
O arquivo de configuração /etc/[Link] contém uma lista de serviços em par com o
módulo do serviço. Quando um serviço é requisitado, seu módulo associado é chamado. Cada
entrada tem o seguinte formato:
service_name module_type control_flag module_path [options]
Cada módulo referenciado no parâmetro module_patch para aquele serviço é então
processado na ordem em que aparece no arquivo de configuração. O parâmetro control_flag
determina a persistência e importância do módulo e pode possuir os seguintes valores: requisite,
required, optional ou sufficient.
SS3187 - v1.0 – CentOS 6.2 Página 130
Formação Intensiva Linux- 96 horas
Se todos os módulos requisite e required tiverem sucesso, então um estado de sucesso
será retornado e qualquer erro nos módulos optional ou sufficient são ignorados. Se qualquer
módulo requisite ou required falhar, o valor de erro do primeiro que falhar é retornado.
Se nenhum módulo de serviço for designado como requisite ou required, pelo menos um
módulo optional ou sufficient deve ter sucesso antes que um estado de sucesso seja retornado.
Se todos falharem, o valor de erro do primeiro que falhar será retornado. Caso duas ou
mais linhas tenham o mesmo par service_name e module_type, esse serviço é considerado
stacked. Isso permite que você efetue verificações incrementais com diferentes parâmetros e
ajuste essas verificação em diferentes níveis de importância.
Recentemente uma nova sintaxe foi adicionada para dar mais flexibilidade ao PAM.
Originalmente os módulos do PAM eram estritamente pass-fail. Enquanto este continua sendo
válido, uma vez que o módulo falhe ocorre uma falha para todo o módulo, existe agora um
controle mais profundo para o retorno dos códigos individualmente. A nova sintaxe é semelhante
a isso.
[value1=action1 value2=action2 …]
Onde os tokens aceitos são:
Sucess créd_expired open_err créd_err symbol_err
no_module_date service_err conv_err system_err authtok_err
buf_err authtok_recover_err perm_denied authtok_lock_busy auth_err
authtok_disable_aging créd_insufficient try_again authinfo_unavai ignore
user_unknown abort maxtries authtok_expired new_authlok_reqd
module_unknown acct_expired bad_item session_err default
créd_unavail
Existem seis tokens de ação: ignore, ok, done, bad, die, reset ou algum valor positivo. O
valor inteiro representa quantas ocorrências do valor para pular antes de efetuar a ação.
SS3187 - v1.0 – CentOS 6.2 Página 131
Formação Intensiva Linux- 96 horas
A ação ignore indica que o valor não deve ser passado de volta para a aplicação. Por
exemplo, uma falha deve, normalmente, causar uma falha de acesso ao usuário, e deve ser
mascarada pelo módulo PAM mesmo não tendo nenhum efeito.
A ação ok indica que o código de retorno é importante o suficiente para afetar toda a
pilha do PAM. Como antes, se a pilha do PAM retornar um código PAM_SUCESS antes de seu
par de value-action, este código de retorno irá afetar a pilha, entretanto, se a pilha do PAM já
indicou uma falha, um código de sucesso não irá sobrescrever o estado anterior da pilha, pelo
fato que apenas uma falha é o suficiente para a pilha do PAM falhar completamente.
A ação done é o mesmo que a ação ok exceto pelo fato que o PAM não continua através
da pilha e sim termina e retorna para a aplicação.
A ação bad indica uma falha para toda a pilha do PAM, mas ele continua através do
resto da pilha.
A ação die é similar a ação bad exceto pelo fato de que o processamento da pilha PAM
é terminado e retorna para a aplicação.
A ação reset limpa a memória da pilha PAM e continua no próximo módulo empilhado.
Originalmente, se qualquer entrada no arquivo /etc/[Link] estiver incorreta ou se
um módulo não poder ser aberto, todo o serviço do PAM irá falhar e os usuários não poderão
acessar o sistema. Usando o novo par value-action é possível permitir diferentes
comportamentos. Por exemplo, você pode permitir seis códigos de retorno para bad antes de
realmente o módulo falhar. Da mesma forma, se o sistema não tem o arquivo apropriado no
/etc/pam.d ou se o /etc/pam.d foi apagado, ninguém poderá logar no sistema desde que o
login é a primeira aplicação cuidada pelo PAM. Para resolver isso, o administrador deve entrar
no modo single para corrigir o PAM ou instalar novamente ele.
Geralmente, a sintaxe do arquivo de configuração /etc/pam.d é a seguinte.
module_type control_flag module_path [arguments]
SS3187 - v1.0 – CentOS 6.2 Página 132
Formação Intensiva Linux- 96 horas
Vamos olhar um exemplo de configuração agora:
auth required /lib/security/pam_securetty.so
auth required /lib/security/pam_stack.so service=system−auth
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_stack.so service=system−auth
password required /lib/security/pam_stack.so service=system−auth
session required /lib/security/pam_stack.so service=system−auth
session optional /lib/security/pam_console.so
No exemplo acima, a primeira biblioteca referenciada para o serviço de autenticação é a
pam_securetty.so. Esta biblioteca é usada para prevenir que o usuário root efetue o login no
sistema através da rede. Caso um usuário esteja tentando se logar como root, o módulo
determina de qual terminal a tentativa está vindo e analisa o arquivo /etc/securetty para ver
se aquele terminal está listado ali. Este arquivo lista apenas os terminais que são fisicamente
ligados na máquina por padrão. Este é um módulo required, assim, se acontecer uma falha aqui
todo o esquema de autenticação para esta aplicação irá falhar também.
A seguir, existe, uma referência ao arquivo system-auth no diretório /etc/pam.d.
Assim, a biblioteca pam_stack.so executa as funções na seção de autenticação do arquivo system-
auth mostrado abaixo:
auth required /lib/security/pam_env.so
auth sufficient /lib/security/pam_unix.so likeauth nullok
auth sufficient /lib/security/pam_smb_auth.so use_first_pass
nolocal
auth required /lib/security/pam_deny.so
account required /lib/security/pam_unix.so
password required /lib/security/pam_cracklib.so retry=3 type=
password sufficient /lib/security/pam_unix.so nullok use_authtok
md5 shadow
password required /lib/security/pam_deny.so
session required /lib/security/pam_limits.so
session required /lib/security/pam_unix.so
Como resultado, o primeiro módulo chamado pelo serviço de autenticação é o
pam_env.so. como podemos adivinhar, este módulo ajusta as variáveis de ambientes
necessárias.
SS3187 - v1.0 – CentOS 6.2 Página 133
Formação Intensiva Linux- 96 horas
Examinando o próximo módulo que será chamado, o pam_unix.so, que é o módulo
principal de autenticação. O parâmetro likeauth faz o módulo retornar o mesmo valor quando
chamado como módulo credential-setting e um módulo de autenticação. Por padrão, ele irá
rejeitar uma senha nula, mas o parâmetro nullok sobrescreve isso. É uma boa prática retirar esse
último parâmetro para evitar que o sistema aceite senhas nulas.
Depois de terminar de verificar essa pilha de bibliotecas, o controle retorna para o
/etc/pam.d/login onde o último passo no serviço de autenticação, pam_nologin.so, é
executado para verificar se o arquivo /etc/nologin requer que o login seja negado ou não.
NOTA: O arquivo /etc/nologin é usado para prevenir que qualquer usuário faça o
login do console. Este passo é necessário durante o desligamento da máquina para
que novos usuários não possam logar enquanto o sistema está se desligando.
As bibliotecas para o PAM estão localizadas no diretório /lib/security. Caso você
esteja enfrentando problemas com o processo de login, pode ser interessante olhar o arquivo
/etc/pam.d/login de modo a determinar qual biblioteca do PAM é necessária e ter certeza
que ela exista no diretório /lib/security.
Além disso, é importante reservar algum tempo para entender os arquivos comumente
usados pelo PAM. Quanto melhor você entender eles, mais fácil será resolver seus problemas.
Para aprender mais sobre o PAM, você pode consultar o endereço
[Link]
SS3187 - v1.0 – CentOS 6.2 Página 134
Formação Intensiva Linux- 96 horas
12.4 Para Recordar
Gerenciamento de Pacotes: Para gerenciarmos os nossos pacotes podemos
utilizar o modo gráfico ou o aplicativo rpm. rpm –ivh é usado para instalar
pacotes, rpm –qa é usado para consultar pacotes e rpm –e é usado para
remover pacotes.
Código fonte: De maneira geral, a instalação através da compilação do código
fonte dos arquivos segue a ordem: ./configure, make, make install.
Bibliotecas: O uso de bibliotecas compartilhadas permite a utilização de um
sistema e aplicações mais dinâmicos. Os arquivos de biblioteca são
reconhecidos pelo nome .so no final.
Autenticação: Através do PAM não precisamos nos preocupar com o sistema
de autenticação de uma aplicação. Todas as aplicações que utilizam o PAM têm
o mesmo processo para se autenticar. Isso permite a centralização deste
processo.
SS3187 - v1.0 – CentOS 6.2 Página 135
Formação Intensiva Linux- 96 horas
12.5 Exercícios
1. De que forma podemos instalar um pacote adquirido da internet, chamado
[Link]?
2. Como descobrir se eu possuo o aplicativo gcc no meu sistema?
3. Como eu posso incluir o diretório /opt/libs na procura padrão por bibliotecas?
4. Qual a funcionalidade principal do PAM?
SS3187 - v1.0 – CentOS 6.2 Página 136
Formação Intensiva Linux- 96 horas
Notas:
SS3187 - v1.0 – CentOS 6.2 Página 137
Formação Intensiva Linux- 96 horas
Módulo 13 - Monitoramento de eventos em Sistemas Linux
SS3187 - v1.0 – CentOS 6.2 Página 138
Formação Intensiva Linux- 96 horas
13.0 O que são logs de Sistema
O sistema de logs é a forma como o Linux informa a você o que está acontecendo,
desde informações sobre o estado geral até informações de erro. As informações dos logs são
muito importantes para o diagnóstico diário do sistema.
Os logs são a única maneira de você saber o que o sistema operacional e processos
estão fazendo. O Linux, assim como outros sistemas operacionais Unix, encara os logs muito a
sério e, tanto você sendo o administrador, quanto sendo um usuário normal, irá precisar analisar
logs uma hora ou outra.
A maioria dos logs são armazenados no diretório /var/log. Este é o lugar padrão onde
você encontrará diversos tipos de logs do seu sistema.
Os arquivos de log são escritos em texto puro e podem ser visualizados com qualquer
editor de texto. Além disso, eles contêm informações de forma padronizada, deste modo, se
você entender e conseguir ler um log em específico, muito provavelmente conseguirá ler todos
os outros.
SS3187 - v1.0 – CentOS 6.2 Página 139
Formação Intensiva Linux- 96 horas
Abaixo, a figura ilustra o conteúdo do diretório /var/log. Dependendo do número de
serviços sendo executados no computador esta lista pode variar.
Diretório de logs
SS3187 - v1.0 – CentOS 6.2 Página 140
Formação Intensiva Linux- 96 horas
Alguns serviços possuem um diretório dentro do /var/log onde armazenam diversos
tipos de logs das suas operações. A vantagem disso é que, em alguns casos, um serviço pode
gerar diversos tipos de logs diferentes, e se todos os logs fossem armazenados no mesmo lugar,
/var/log, poderia causar uma grande confusão na hora de examinar tais arquivos.
Na figura anterior podemos constatar que a maioria dos nomes dos arquivos listados
neste diretório indica o conteúdo de cada arquivo de log ou do programa que criou o arquivo. Por
exemplo, o arquivo mail refere-se ao nosso MTA (Mail Transfer Agent) tal como o programa
Postfix ou sendmail que é executado em nosso sistema.
Da mesma maneira, podemos observar o diretório cups. Esse diretório armazena
diversos outros arquivos de log que dizem respeito ao servidor de impressão.
A maioria dos logs não contém sistemas de segurança ou dados de usuários privados,
assim eles podem ser lidos por todos no sistema. Entretanto, alguns outros arquivos de log
possuem informações que devem ser visualizadas apenas pelo super usuário (root) tais como,
mensagens do Kernel, mensagens de autenticação e mensagens de mail.
13.1 O Daemon rsyslog
O serviço (“Daemon”), gerador de logs padrão de sistemas Unix/Linux é o “Syslog”.
Entretanto, devido a sua concepção já bastante antiga, este serviço vem sendo gradualmente
substituído por alternativas mais modernas. Uma destas alternativas é o sistema gerador de
Logs default no CentOS 6.2 o “Rsyslog”. O rsyslog, possui como vantagem principal, manter a
sintaxe tradicional do syslog padrão e ainda estender mais suas funcionalidades. Dentre as
novas funcionalidades que o rsyslog acrescenta ao sistema de geração de logs, podemos
destacar, entre muitas outras:
native support for writing to MySQL databases
native support for writing to Postgres databases
direct support for Firebird/Interbase, OpenTDS (MS SQL, Sybase), SQLLite, Ingres,
Oracle, and mSQL via libdbi, a database abstraction layer (almost as good as native)
native support for sending mail messages (first seen in 3.17.0)
support for (plain) tcp based syslog - much better reliability
support for sending and receiving compressed syslog messages
SS3187 - v1.0 – CentOS 6.2 Página 141
Formação Intensiva Linux- 96 horas
support for log files larger than 2gb
support for file size limitation and automatic rollover command execution
support for running multiple rsyslogd instances on a single machine
support for TLS-protected syslog (both natively and via stunnel)
ability to filter on any part of the message, not just facility and severity
ability to use regular expressions in filters
Recursos adicionai do “rsyslog”
A exemplo do syslog tradicional, o daemon rsyslog, utiliza um único arquivo de
configuração em “/etc”, de nome [Link] e sua sintaxe básica é a mesma do syslog
tradicional. Por exemplo, para adicionar o log de eventos do kernel e direcioná-los para o arquivo
de nome “[Link]”, precisamos adicionar a seguinte linha ao arquivo [Link]:
• Comando: vim /etc/[Link]
Kern.* /var/log/[Link]
A seguir, tudo o que precisamos fazer e reiniciar o serviço, com o comando abaixo:
• Comando: service rsyslog restart
A sintaxe da linha acima obedece ao formato:
facilidade . nivel alvo
ONDE:
• “Facilidade”: É o tipo de log a ser monitorado;
• “Nivel”: É o grau de importância ou “criticidade” do log;
• “Alvo”: É o destino final do log;
SS3187 - v1.0 – CentOS 6.2 Página 142
Formação Intensiva Linux- 96 horas
Nem todos os processos utilizam o syslog para registrar suas informações. Um total de
20 tipos ou “facilidade”, estão disponíveis para os recursos do syslog, e são também disponíveis
para o rsyslog..
Recurso Descrição
AUTH Antiquado. Substituído pelo AUTHPRIV.
AUTHPRIV Log de autenticação.
CRON Log para os daemons CRON e AT.
DAEMON Log geral para os deamons que não possuem sua própria entrada no
sistema de logs (facility).
FTP Log para os daemons de FTP.
KERN Log para o Kernel.
LOCAL0 - 7 Log personalizado para o uso local. De 0 até 7.
LPR Log para o sistema de impressão.
MAIL Log para o serviço de mail, MTA.
NEWS Log para o serviço de news, NNTP.
SYSLOG Entrada interna para o syslog. Usada para armazenar mensagens geradas
por ele mesmo.
USER Log de mensagens genéricas de usuários
UUCP Log para o serviço do protocolo UUCP (Unix-to-Unix Copy Protocol).
SS3187 - v1.0 – CentOS 6.2 Página 143
Formação Intensiva Linux- 96 horas
13.2 Classificação dos Logs de Sistema
Cada recurso do rsyslog possui um nível que pode ser associado com uma tabela de
severidade para a mensagem. Existe uma palavra de diferença entre o recurso MAIL informando
que a mensagem de email foi recebida e aquela palavra que indica um problema crítico de
configuração que impediu que o sistema de email continuasse sendo executado.
Para distinguir entre esses cenários, é possível específicar no arquivo [Link]
como gerenciar essas situações. Obviamente é trabalho do serviço de mail definir a severidade
da mensagem e não do syslog. Abaixo veremos os níveis de logs suportados.
Nível de log Descrição
EMERG Caráter emergencial. Possivelmente o sistema não poderá continuar.
ALERT Alguma ação deve ser tomada imediatamente.
CRIT Um erro crítico ocorreu.
ERR Nível padrão de erro.
NOTICE Notificações gerais.
INFO Informações gerais.
DEBUG Informações de debug. Usualmente geram muito tráfego.
SS3187 - v1.0 – CentOS 6.2 Página 144
Formação Intensiva Linux- 96 horas
13.4 Sistema de Rotatividade dos Logs
Possuir todas essas facilidades e tecnologias para armazenar o registro de todos os
processos e estados do nosso sistema é muito interessante e útil, entretanto, chegará um tempo
que você não irá mais precisar dos logs no seu formato original, ou seja, possuindo informações
da data que você instalou o sistema a 5 anos atrás. Você precisará desligar o armazenamento
dos logs.
Essa tarefa pode ser feita manualmente, entretanto, se você possui um grande número
do log a automação desta tarefa pode ser uma alternativa interessante.
Os logs, deixados por conta de seus dispositivos, especialmente aqueles encontrados
em um sistema muito grande, podem acabar com o espaço em disco do seu sistema. A
aplicação logrotate pode automatizar o processo de gerenciamento de logs copiando e
armazenando eles baseado em regras de ações.
Muitos scripts de logrotate podem ser encontrados no diretório /etc/logrotate.d.
Este diretório possui um arquivo de configuração de logrotate para cada processo que ele
gerencia. Abaixo, podemos identificar na figura, os scripts disponíveis para esse sistema
específico.
Scripts para logrotate
O principal arquivo de configuração para o logrotate é o /etc/[Link]. Ele contém
os arquivos padrão assim como uma entrada para juntar todos os arquivos de configuração para
aplicações que usam o logrotate. Qualquer arquivo localizado no diretório /etc/logrotate.d será
aberto e interpretado como diretivas do logrotate, quando este for executado.
O logrotate é executado, diariamente, as 4:14 horas da manhã pelo cron, que é um
processo do Linux que executa, automaticamente, um processo especificado em um
determinado tempo. O logrotate carrega o arquivo de configuração no /etc/logrotate.d e
então decide se ele precisa rotacionar algum dos arquivos de log que ele gerencia.
SS3187 - v1.0 – CentOS 6.2 Página 145
Formação Intensiva Linux- 96 horas
Agora iremos olhar um exemplo de entrada do logrotate para o Apache para termos uma
melhor idéia da utilidade e funcionalidade deste aplicativo.
Abaixo está o código do logrotate para o access_log. Este arquivo de log do Apache
contém informações sobre quem está acessando qualquer arquivo através do protocolo HTTP.
/var/log/apache2/access_log {
compress
dateext
maxage 365
rotate 99
size=+4096k
notifempty
missingok
create 644 root root
postrotate
/etc/init.d/apache2 reload
endscript
}
Como podemos ver acima, uma dada entrada no logrotate é feita por múltiplas diretivas.
Cada uma dessas diretivas instrui o logrotate de como o arquivo de log deve se comportar.
NOTA: Cada arquivo que você queira que seja rotacionado deve ter uma entrada
específica no logrotate. Você pode especificar um diretório para rotacionar todos os
arquivos, mas é necessário identificar grupos de arquivos de log usando a sintaxe
/full/path/to/log/file/*, o que é basicamente a mesma coisa.
SS3187 - v1.0 – CentOS 6.2 Página 146
Formação Intensiva Linux- 96 horas
Abaixo veremos as diretivas e suas respectivas descrições.
Diretiva Descrição
Compress Comprime o arquivo quando ele for rotacionado.
Dateex Adiciona uma data na extensão do arquivo, por exemplo,
acess_log.[Link].
maxage 365 Define uma idade para um arquivo rotacionado. Alcançando essa idade ele é
apagado. A idade é expresso em um inteiro representando dias.
rotate num Se um arquivo for rotacionado num vezes, então apaga o mais antigo.
Size Se um arquivo a ser rotacionado crescer mais que o tamanho especificado
aqui, então rotaciona-se ele. O tamanho pode ser especificado em kilobytes
(k) ou gigabytes (g).
notifempty Não rotaciona se o arquivo estiver vazio.
missingok Se um arquivo a ser rotacionado não existir, mostra um erro e continua.
create 644 root As permissões de um arquivo para ser criado novo.
root
Postrotate Quando um processo de rotação iniciar, executar o seguinte. Neste caso
/etc/init.d/apache2 estamos instruindo o Apache para recarregar sua configuração. Isto faz com
reload endscript que o Apache reabra seus arquivos de configuração, completando o
processo de rotação.
SS3187 - v1.0 – CentOS 6.2 Página 147
Formação Intensiva Linux- 96 horas
Os arquivos gerados, após cada rotação, serão semelhantes aos seguintes.
-rw-r----- 1 root adm 10815 2006-02-03 17:11 [Link]
-rw-r----- 1 root adm 12288 2006-01-26 23:01 [Link].1
-rw-r----- 1 root adm 32382 2005-11-26 23:52 [Link]
-rw-r----- 1 root adm 3409 2005-11-19 11:56 [Link]
-rw-r----- 1 root adm 54941 2005-11-11 15:25 [Link]
-rw-r----- 1 root adm 48803 2005-11-04 17:26 [Link]
-rw-r----- 1 root adm 13579 2005-10-31 18:19 [Link]
-rw-r----- 1 root adm 7060 2005-10-21 17:18 [Link]
-rw-r----- 1 root adm 341 2005-10-23 06:25 [Link]
-rw-r----- 1 root adm 2270 2006-01-21 19:15 [Link]
-rw-r----- 1 root adm 1382 2006-01-12 23:26 [Link]
-rw-r----- 1 root adm 3192 2006-01-07 00:09 [Link]
-rw-r----- 1 root adm 1515 2005-12-29 05:59 [Link]
-rw-r----- 1 root adm 5194 2005-12-24 01:46 [Link]
-rw-r----- 1 root adm 1513 2005-12-17 10:46 [Link]
-rw-r----- 1 root adm 15119 2005-12-11 02:06 [Link]
-rw-r----- 1 root adm 30494 2005-12-04 03:51 [Link]
SS3187 - v1.0 – CentOS 6.2 Página 148
Formação Intensiva Linux- 96 horas
13.5 Para Recordar
1. Diagnosticando o sistema: É muito importante termos o hábito de estar
sempre visualizando os arquivos de log chave do sistema. Assim, podemos
identificar possíveis problemas e agir de forma a evitar que eles aconteçam ou
ganhem proporções maiores. O diretório para a maioria dos logs é o /var/log.
2. Informações centralizadas: A grande maioria dos registros de logs que
podemos precisar se encontra no arquivo /var/log/syslog. Nesse arquivo
temos informações de todos os serviços que estão sendo executados. Alguns
serviços utilizam arquivos especializados para separar melhor seus logs.
3. Níveis de log: Se necessário, podemos definir níveis para registrar os eventos
que ocorrem no sistema. Assim é possível escolher quais se adaptam melhor a
cada situação.
4. Rotatividade: Para evitar que tenhamos arquivos de logs exageradamente
muito grandes e com informações que não são mais importantes, utilizamos o
sistema de rotatividade de logs através do logrotate.
SS3187 - v1.0 – CentOS 6.2 Página 149
Formação Intensiva Linux- 96 horas
13.6 Exercícios
1. Como podemos saber se os e-mails dos usuários estão sendo encaminhados
para o destino de forma correta?
2. Como é estruturado o arquivo de configuração do syslog e onde ele se
localiza?
3. Para que serve o logrotate?
SS3187 - v1.0 – CentOS 6.2 Página 150
Formação Intensiva Linux- 96 horas
Notas:
SS3187 - v1.0 – CentOS 6.2 Página 151
Formação Intensiva Linux- 96 horas
Módulo 14 - Automatizando Tarefas
SS3187 - v1.0 – CentOS 6.2 Página 152
Formação Intensiva Linux- 96 horas
14.0 Automatizando Tarefas com o Crond
Algumas vezes é necessário efetuarmos tarefas distintas diversas vezes ao dia, como,
por exemplo, executar um script de backup do nosso sistema ou uma atualização diária.
Para resolvermos essa questão, utilizamos a automatização desses processos. Em
outras palavras, definimos uma série de procedimentos necessários para resolver nossas tarefas
e instruímos o sistema Linux a executar todos esses procedimentos em tempos periódicos.
Podemos pegar como exemplo a tarefa de backup do sistema. Podemos escrever um
script que faça a compactação de todo o diretório dos arquivos dos usuários e grave esse
arquivo compactado em um servidor de backup. A tarefa de backup deve ser feita duas vezes
por semana, digamos terça-feira e sexta-feira.
Após escrevermos o nosso script de backup, precisamos executar ele duas vezes por
semana de forma automática. Isso é possível graças ao serviço CRON do Linux. O cron nada
mais é do que um daemon que executa tarefas periódicas no nosso sistema.
14.1 Quando Utilizar o Crond
A utilização do Crond é indicada sempre que precisamos executar tarefas repetitivas
periodicamente. Ou seja, sempre que executamos a mesma tarefa várias vezes ao dia, por
exemplo, podemos utilizar o Crond para automatizar o processo que queremos executar.
Algumas automações se tornaram comuns, como por exemplo, as abaixo:
• Atualização dos pacotes do sistema. Útil para quem usa alguma ferramenta
de atualização como o apt-get;
• Backup do sistema, como, por exemplo, o diretório dos usuários, bancos de
dados, página Web e outros,
• Disponibilizar serviços por tempo determinado. Por exemplo, disponibilizar o
serviço de FTP somente no horário comercial,
• Controle de cota dos usuários.
Enfim, sempre que precisarmos efetuar uma determinada tarefa em horários fixos,
podemos utilizar o Crond.
SS3187 - v1.0 – CentOS 6.2 Página 153
Formação Intensiva Linux- 96 horas
14.2 Configurando o Crond
A configuração do Crond é feita através do arquivo /etc/crontab. Abaixo veremos um
típico exemplo deste arquivo:
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file.
# This file also has a username field, that none of the other crontabs
do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
42 6 * * * root run-parts --report /etc/[Link]
47 6 * * 7 root run-parts --report /etc/[Link]
52 6 1 * * root run-parts --report /etc/[Link]
O primeiro comando, (SHELL), indica quem será o interpretador dos programas
executados pelo Crond, no caso o sh shell.
Depois encontramos um PATH. Esta é uma variável de ambiente que indica o diretório
onde estão os programas que podemos usar ou poderemos precisar futuramente. Após isso,
encontramos uma lista de três linhas separadas em sete colunas.
Cada linha dessas representa uma entrada do Crond e, em geral, é o script que
desejamos que seja executado em tempos periódicos. Os campos de cada tarefa representam:
• A primeira coluna representa o minuto que programa deverá ser executado.
• A segunda coluna representa a hora que o programa deverá ser executado.
• A terceira coluna representa o dia do mês que o programa deverá ser executado.
• A quarta coluna representa o mês que o programa deverá ser executado.
• A quinta coluna representa o dia da semana que o programa deve ser executado.
• A sexta coluna representa o usuário que irá executar o programa.
• A sétima coluna representa o programa a ser executado.
SS3187 - v1.0 – CentOS 6.2 Página 154
Formação Intensiva Linux- 96 horas
Desta forma, a nossa primeira linha indica que em todo minuto 47 e hora 6 o conteúdo
do diretório /etc/[Link] será executado. Exemplo:
Vamos utilizar o sistema de backup mostrado anteriormente, onde devemos efetuar o
backup duas vezes por semana. O script de backup, chamado backup_home.sh, localizado no
diretório /usr/local/bin/, será executado toda a terça-feira e sexta-feira as duas horas da
madrugada (02:00 am). A nossa entrada ficaria assim:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
0 2 * * 2,5 root /usr/local/bin/backup_home.sh
Os campos do crontab, na tabela possuem os seguintes valores admissíveis:
Minuto 0-59
Hora 0-23
Dia do mês 1-31
Mês 1-12
Dia da Semana 0-7 (0 e 7 são domingo. Você pode usar nomes se preferir)
Sempre que precisarmos indicar um período qualquer, como por exemplo, todo minuto
10 de qualquer hora, usaremos o asterisco (*).
Também é possível usar uma faixa de valores, como por exemplo, 3-9 para a hora. Isso
fará com que o comando seja executado na hora 3,4,5,6,7,8 e 9.
Por fim, podemos utilizar o comando “ao passo de”, ou seja, de quanto em quanto tempo
que deve ser executado. Por exemplo, se quisermos executar um comando de 2 em 2 horas,
colocaríamos todas as horas que desejamos ser executado o comando (2,4,6,8,10 e assim por
diante). Para simplificar, podemos usar o comando “ao passo de”, reconhecido por uma barra “/”.
Assim, se especificarmos */2 estamos dizendo que a qualquer hora, de duas em duas horas.
SS3187 - v1.0 – CentOS 6.2 Página 155
Formação Intensiva Linux- 96 horas
14.3 Usuários Comuns
O arquivo de configuração visto acima /etc/crontab é de propriedade do usuário root.
Assim, um usuário normal não possui permissão suficiente para editar ele e inserir entradas que
ele deseja automatizar.
Mesmo assim, os usuários comuns também podem se beneficiar da automatização de
tarefas propiciada pelo Crond. Isso é possível através do comando crontab.
O comando crontab é usado para gerenciar os processos que devem ser executados
periodicamente assim como a lista desses processos.
Se um usuário desejar inserir um comando periódico no Crond, ele deverá usar o
crontab para esse fim, como é ilustrado abaixo.
# crontab –e
A opção –e, passada para o comando crontab, fará com que ele entre no modo de
edição, usando o seu editor de texto padrão.
Assim, é possível gerenciar todas as entradas para o Crond de um determinado usuário.
Lembre-se que um usuário só pode gerenciar suas próprias entradas e de mais ninguém. Caso
você deseje listar todas as entradas definidas, é possível utilizar outra opção.
• Comando: crontab -l
A opção –l irá listar todas as entradas existentes do usuário em questão.
Por fim, para remover nossas entradas do Crond, devemos executar o comando:
• Comando: crontab –r
Esta opção fará com que as entradas do usuário em questão sejam excluídas da lista do
Crond.
SS3187 - v1.0 – CentOS 6.2 Página 156
Formação Intensiva Linux- 96 horas
14.4 Controlando o Acesso ao Crond
É possível, para o administrador do sistema, controlar o uso do Crond pelos usuários
normais. Isso é feito através de dois arquivos, o /etc/[Link] e o /etc/[Link]:
• [Link]: Este arquivo especifica, em uma lista com os nomes dos usuários,
todos os que tem acesso ao uso do Crond.
• [Link]: Este arquivo especifica, em uma lista com os nomes dos usuários,
todos os que não tem acesso ao uso do Crond.
NOTA: O acesso ao uso do daemon Crond somente acontecerá se esses arquivos
existirem, caso contrário todos os usuários terão acesso. Lembre-se também que,
se somente o arquivo [Link] existir, todos os usuários listados nele não
poderão usar o Crond, o resto dos usuários poderão usar sem problemas.
14.5 Monitorando o Crond
Além de definirmos todos os usuários que podem ou não utilizar o Crond, faz-se
necessário efetuar um monitoramento dos processos que cada um deles está automatizando.
Como vimos anteriormente, o Crond possui um recurso no syslog. Sabendo que o
volume de dados do syslog é muito grande, podemos utilizar um filtro para visualizarmos
somente os eventos do Crond, como segue abaixo.
• Comando: cat /var/log/syslog | grep –i cron
Isso fará com que, somente as linhas que tiverem a palavra “cron” sejam mostradas.
Feb 6 [Link] localhost crontab[27325]: (root) LIST (root)
A saída acima nos mostra que o usuário root executou o comando crontab –l,
identificado pelo LIST, ou seja, ele listou as entradas do Crond.
SS3187 - v1.0 – CentOS 6.2 Página 157
Formação Intensiva Linux- 96 horas
O comando AT
Enquanto o cron é usado para agendar tarefas recorrentes, o comando at é usado para
agendar tarefas únicas em uma hora específica. O comando batch é usado para agendar uma
tarefa única a ser executada quando a média de carga dos sistemas cai abaixo de 0,8.
Para usar o at ou o batch, o pacote RPM at deve ser instalado e o serviço atd deve estar
rodando. Para verificar se o pacote está instalado, use o comando rpm -q at. Para verificar se o
serviço está rodando, use o comando /sbin/service atd status.
Para agendar um trabalho único em uma hora específica, digite o comando at hora, onde
hora é a hora para executar o comando.
O argumento hora pode ser um dos seguintes:
• Formato HH:MM — Por exemplo: 04:00 especifica 4:00AM. Se a hora já passou,
será executado na hora especificada no dia seguinte.
• midnight — Especifica 12:00AM.
• noon — Especifica 12:00PM.
• teatime — Especifica 4:00PM.
• Formato nome-do-mês dia ano — Por exemplo: January 15 2004 especifica o 15o
dia de Janeiro no ano 2004. O ano é opcional.
• Formatos MMDDYY, MM/DD/YY, ou [Link] — Por exemplo: 011504 para o
15o dia de Janeiro no ano 2004.
• now + time — hora em minutos, horas, dias ou semanas. Por exemplo: 'now + 5
days' especifica que o comando deve ser executado na mesma hora daqui cinco dias.
A hora deve ser especificada primeira, seguida da data opcional. Para mais informações
sobre o formato hora, leia o arquivo texto /usr/share/doc/at-<version>/timespec.
Após digitar o comando at com o argumento da hora, será exibida uma janela de
comandos at>. Digite o comando a ser executado, pressione [Enter] e pressione Ctrl-D. Mais
de um comando pode ser especificado digitando cada comando seguido da tecla [Enter].
SS3187 - v1.0 – CentOS 6.2 Página 158
Formação Intensiva Linux- 96 horas
Após digitar todos os comandos, pressione [Enter] para ir para uma linha em branco e
pressione Ctrl-D. Alternativamente, um script shell pode ser inserido na janela de comandos,
pressionando [Enter] após cada linha do script e pressionando Ctrl-D em uma linha em branco
para sair. Se um script for inserido, a shell usada é aquela definida no ambiente SHELL do
usuário, ou a shell de login do usuário ou /bin/sh (a que for encontrada primeiro).
Por exemplo, para agendar a execução de um script de backup, existente em /bin, de
nome “[Link]”, em um período de tempo, cinco minutos adiante, os procedimentos seriam os
seguintes, abaixo mostrados:
Passo 1: Ative o daemon do AT pois, em geral, está desativado:
• Comando: service atd start
Passo 2: Chamar o shell do comando, indicando o intervalo de tempo desejado:
• Comando: at now+ 5 minutes
Passo 3: No shell do comando, adicionar a tarefa, com o seu PATH:
• Comando: /bin/[Link]
Passo 4: Fechar o shell do comando AT, para concluir o agendamento, pressionando
simultaneamente as teclas indicadas abaixo:
• Comando: <Ctrl> <D>
A tarefa agendada ficar descrita em “/var/spool/at”, até que seja executada, sendo, após
isso, apagada deste diretório, impedindo sua reexecução.
Finalmente, o comando AT, permite também a restrição de uso de agendamento, de
modo similar ao encontrado no Cron, através dos arquivos:
• [Link]: Usuário com o acesso negado ao agendamento
• [Link]: Usuários com o acesso autorizado, ao agendamento
SS3187 - v1.0 – CentOS 6.2 Página 159
Formação Intensiva Linux- 96 horas
14.6 Para Recordar
1. Automatizar = Velocidade: Sempre que automatizamos um processo,
ganhamos velocidade, pois podemos realizar outro processo ao mesmo tempo,
assim podemos concluir dois processos ao mesmo tempo! Tenha em mente,
tudo que é executado periodicamente pode (deve) ser colocado no cron.
2. Controlando acesso: Sempre controle os usuários que podem executar tarefas
periódicas. No cron, isso é feito através dos arquivos /etc/[Link] e
/etc/[Link].
3. Adicionado e gerenciando: Para adicionarmos uma tarefa no cron, utilizamos o
comando crontab –e, através desse comando podemos gerenciar todos os
nossos processos que serão executados periodicamente.
SS3187 - v1.0 – CentOS 6.2 Página 160
Formação Intensiva Linux- 96 horas
14.7 Exercícios
1. Como devemos fazer para executar o script de nome backup todos os dias da
semana às 0:00?
2. Como podemos negar o acesso ao crond para o usuário tourinho?
3. Como podemos listar todos os processos automatizados que possuímos?
4. Como remover um processo do crond?
SS3187 - v1.0 – CentOS 6.2 Página 161
Formação Intensiva Linux- 96 horas
Notas:
SS3187 - v1.0 – CentOS 6.2 Página 162
Formação Intensiva Linux- 96 horas
Módulo 15 - Backups e Compactação de Arquivo
SS3187 - v1.0 – CentOS 6.2 Página 163
Formação Intensiva Linux- 96 horas
15.0 Criando uma Estratégia de Prevenção de Desastres
Muito embora tenhamos visto diversas ferramentas que simplificam as tarefas do
administrador do sistema, ainda assim existe um elevado número cuidados que ele precisa ter
no intuito de manter o sistema sempre estável.
Da mesma forma que o administrador deve instalar o sistema operacional, gerenciar os
usuários, monitorar o sistema e outras tarefas, o administrador precisa se preocupar com os
dados armazenados nas máquinas sob seu controle. O cuidado com esses dados é de extrema
importância e deve ser levado muito a sério.
Imagine o seguinte caso. Você é contratado para administrar uma empresa com alguns
servidores. Esta empresa é responsável por desenvolver um sistema para uma grande
multinacional e um dos servidores que você deverá cuidar é justamente o servidor de produção
deste sistema.
Os servidores de produção são aqueles onde são desenvolvidos e testados os sistemas
antes de serem implantados no cliente. Todas as alterações e desenvolvimento de novas
funcionalidades são feitas nesse servidor.
Caso aconteça um problema no servidor de produção, como, por exemplo, estragar o
disco rígido, todos os dados armazenados ali devem ser recuperados em sua totalidade ou em
grande parte. Caso você, como administrador e responsável deste servidor, não tenha tomado
cuidados necessários para esse tipo de ocasião, certamente você se encontrará em sérios
problemas e possível demissão. Não pense que é exagero. Se os dados do servidor são tão
importantes ao ponto de ter uma pessoa específica para fazer sua administração, então é bem
possível que essa pessoa responda por sua má administração.
A melhor forma de evitarmos que isso aconteça é através da política de backup. Ou seja,
mesmo que ocorra um problema no servidor de produção os dados dele sempre serão
replicados em outro lugar. A replicação de dados importantes em lugares considerados mais
seguros é o que denominamos ação de backup.
No caso hipotético ilustrado aqui, o administrador que tivesse se preocupado em efetuar
o backup dos dados do servidor de produção teria o trabalho, apenas, de restaurar o último
backup daquela máquina. Desta forma os dados estariam à disposição mesmo após a falha do
disco rígido. Obviamente que a quantidade de dados perdidos ou recuperados vai depender da
política e da freqüência de backup adotada.
Desta maneira introduzimos um assunto muito importante sobre backups. Veremos ao
longo deste capítulo, formas de como elaborar backups de maneira segura e prática.
SS3187 - v1.0 – CentOS 6.2 Página 164
Formação Intensiva Linux- 96 horas
15.1 De que devemos nos proteger
Ao elaborar uma estratégia de backup devemos ser o mais pessimista possível, ou seja,
pensar que tudo vai dar errado em qualquer hipótese. Se conseguirmos elaborar uma estratégia
que, mesmo tudo dando errado, ainda assim teremos uma forma de resgatar nossas
informações, mesmo que parcialmente, então elaboramos uma estratégia de backup sólida.
Existe uma série de questões onde devemos ter uma atenção especial. Em outras
palavras, devemos nos proteger de diversos contratempos, desde os mais simples quanto os
mais complexos, como, por exemplo:
• Atualização errada de versão: Imagine uma empresa de
desenvolvimento que possui um servidor onde ficam os arquivos fonte de
seus produtos. Cada desenvolvedor escreve seus códigos em suas
máquinas locais e depois enviam para o servidor de produção, pois esse
centraliza todos os códigos e possui uma estratégia de backup que as
máquinas locais não têm. A cada atualização de código, o antigo é
sobrescrito, fazendo com que somente as novas alterações tenham efeito.
Caso um desenvolvedor, acidentalmente envie arquivos antigos, imaginado
ser códigos novos, para o servidor de produção causará um grande
problema no versionamento do sistema em desenvolvimento. Entretanto, se
o servidor possui uma boa estratégia de backup, é necessário apenas
resgatar os dados mais recentes e sobrescrever as alterações feitas pelo
desenvolvedor.
• Atualização de Sistema Operacional: Semelhante ao
controle de versão, a atualização do sistema operacional deve ser feita com
cuidado. Sempre que atualizamos nosso sistema, não podemos garantir que
a nova versão funcionará de acordo com as nossas expectativas devido a
vários fatores. Assim, antes de atualizar nosso sistema é muito importante
termos em mãos a última versão funcional dele, para o caso de acontecer
algum imprevisto. Estes imprevistos variam desde arquivos de configuração
posicionados em lugares diferentes de uma versão para outra, até
dispositivos de Hardware que não são mais suportados ou são suportados de
forma diferente.
SS3187 - v1.0 – CentOS 6.2 Página 165
Formação Intensiva Linux- 96 horas
• Problemas de disco: Entenda-se por problemas de disco, falhas que não
permitam o acesso às informações armazenadas nele. Esta é, sem dúvida, uma
das maiores preocupações que o administrador deve ter, é o acaso do disco
rígido que contém as informações importantes, falhar. Muito embora atualmente
isso não seja tão freqüente como era antigamente, ainda assim é necessário
manter-se sempre preocupado com essa questão. A única maneira de
contornarmos esse problema é fazendo, regularmente, um backup dos dados
mais importantes do servidor. Assim, caso o disco venha a falhar, termos
sempre as informações mais atualizadas possíveis.
• Problemas de invasão de sistema: Com a popularização da Internet, muitos
servidores foram ligados a ela, fazendo com que eles ficassem vulneráveis aos
diversos males que vieram junto com ela, como por exemplo, as pessoas de má
fé, que estão sempre procurando uma falha nos sistemas para poder usurpar de
suas informações ou denegrir a imagem da empresa na Internet. Possuindo um
bom sistema de segurança e um backup regular, caso esse tipo de problema
venha a acontecer, será necessário apenas atualizar o sistema danificado pelo
sistema íntegro do backup. Por isso é sempre bom possuir backups sempre
atualizados.
Existem outros problemas que podem ocorrer que nos forçam ter um backup, entretanto,
estes listados acima são os mais comuns.
Como foi possível perceber, se possuirmos uma boa política de backup, a maioria dos
problemas pode ser contornada sem perdas de informações. Como dito anteriormente, a
quantidade de perda será inversamente proporcional ao nível de backup e de cuidado que se
tenha para fazer esse, assim como sua periodicidade. Em outras palavras, quanto maior o
cuidado e mais recente for o backup, menor a quantidade de informações perdidas em caso de
problemas, como os listados anteriormente.
SS3187 - v1.0 – CentOS 6.2 Página 166
Formação Intensiva Linux- 96 horas
15.2 Criando uma Estratégia de Backup
Como vimos, é muito importante nos preocuparmos em realizar backups dos nossos
dados, entretanto, a forma como vamos fazer isso deve ser analisada com cuidado.
A estratégia de backup vale-se de duas premissas, a primeira diz respeito ao que se
deseja armazenar no backup e a segunda diz respeito ao período de tempo em que essa tarefa
se dará.
Existem algumas estratégias de backup bastante conhecidas que serão vistas aqui.
Tenha em mente que cada uma delas tem vantagens e desvantagens. O grande desafio dos
administradores atualmente é realizar uma mescla dessas estratégias, aproveitando o que cada
uma tem de melhor minimizando os pontos ruins. As principais estratégias de backup existentes:
• Backup Completo ou Total: Como o próprio nome diz, esse backup efetua
o armazenamento completo das informações gravadas no disco. Em geral,
essas informações são armazenadas na mídia de backup de forma
compactada, devido ao grande volume de dados que ela irá guardar. É
possível restaurar todo um sistema a partir do último backup completo feito,
entretanto, a principal desvantagem desta estratégia é justamente o espaço
necessário para realizar o backup, além do tempo para fazer a compressão
dos dados de todo o sistema.
• Backup incremental: O backup incremental é feito armazenando apenas as
informações que sofreram alterações desde o último backup total ou
incremental mais recente. Assim, para fazermos esse tipo de backup
precisaremos primeiro fazer um backup total. Para restaurar o sistema será
necessária a mídia com o backup total e todas as mídias que possuírem os
backups incrementais, sejam eles quantos forem. Por exemplo, se após o
backup total foram feitos 10 backups incrementais, todos eles serão
necessários para restaurar o sistema. A vantagem desta estratégia é o
tempo necessário para realizar todo o processo. A deficiência do incremental
é como vimos a necessidade de termos todos os backups feitos
anteriormente para restaurar o sistema inteiro. Caso uma restauração parcial
seja desejada, será preciso pesquisar em todas as mídias incrementais onde
está a informação requerida.
SS3187 - v1.0 – CentOS 6.2 Página 167
Formação Intensiva Linux- 96 horas
• Backup diferencial: O backup diferencial também parte do total. Ele
armazena todos os dados alterados desde o último backup total. Para a
restauração do sistema precisamos apenas da mídia do backup total e da
mídia do backup diferencial. Esta é, aliás a grande vantagem do diferencial,
precisa-se apenas de duas mídias para restaurar o sistema. A desvantagem
está no volume de dados que deve ser armazenado e no tempo que isso
levará. Quanto mais tempo se passar entre o backup total e o diferencial,
maiores serão estas proporções.
Após definirmos qual estratégia utilizar na hora de fazer o backup, é importante
escolhermos mais dois assuntos.
O primeiro deles diz respeito ao horário que será feita a operação. É importante escolher
o horário de menor uso dos recursos computacionais da máquina. Isso é muito individual,
depende de sistema para sistema. Cabe ao administrador monitorar os arquivos de log e traçar
uma linha, chamada de baseline, para definir qual é o melhor horário para o backup.
O segundo assunto a ser tratado é em relação às mídias de armazenamento dos
backups.
• CDRW ou DVD-RW: Dependendo do volume de informação a ser
armazenada, essa pode ser a melhor saída. Gravar as informações em um
CD-RW ou DVD-RW é rápido e barato.
• Fitas: É a forma de backup mais tradicional. Tem como vantagens a
velocidade de gravação, a capacidade de armazenamento e o preço. O
grande problema das fitas é o cuidado que se deve ter com a manutenção
dela. Deve ser guardada em ambientes secos e sempre feita a limpeza da
fita. Além disso, apresenta rápido desgaste.
• Discos magnéticos: Em geral, são os HDs. Atualmente possuem preços
acessíveis e podem armazenar grandes volumes de dados de forma rápida
e prática.
SS3187 - v1.0 – CentOS 6.2 Página 168
Formação Intensiva Linux- 96 horas
15.3 Realizando Backup do Sistema
A realização do backup é o processo de juntar todas as informações selecionadas e
armazenar estas em um lugar reservado e protegido. Existem diversas ferramentas que nos
auxiliam na tarefa de realizar o backup. Veremos aqui algumas das mais conhecidas no Linux.
As aplicações vistas aqui não dependem da estratégia de backup utilizada.
A Ferramenta tar
A ferramenta tar nos permite agrupar diversos arquivos em apenas um. Além disso, é
possível utilizarmos diversos tipos de compressão para os dados agrupados.
O tar possui diversas opções, veremos aqui as mais importantes para realizarmos o
backup de nosso sistema.
Por exemplo, se quisermos efetuar o backup do diretório dos usuários, podemos utilizar
o comando.
• Comando: tar –cvf backup_home_20060207.tar /home
O parâmetro –c irá criar um novo arquivo que agrupará todos os selecionados. Os
parâmetro –vf são utilizados para mostrar as informações sobre quais arquivos estão sendo
agrupados na tela.
Desta maneira, todo o conteúdo do diretório /home será agrupado em um único arquivo
chamado backup_home_20060207.tar.
Entretanto, além de agrupar podemos, também, comprimir esses dados, de forma a
diminuir o volume de informações armazenadas.
Assim, podemos utilizar o mesmo comando acima com a adição de mais um parâmetro.
• Comando: tar –czvf backup_home_20060207.[Link] /home
O comando acima adiciona a opção –z. Esta opção realiza a compressão dos dados no
formato gzip, quando usada em conjunto com a opção –c. Por esse motivo que o nome do
arquivo criado deverá mudar também. Repare que o arquivo agora possui o nome
backup_home_20060207.[Link] isso indica que ele foi agrupado e comprimido com o gzip.
SS3187 - v1.0 – CentOS 6.2 Página 169
Formação Intensiva Linux- 96 horas
Além do gzip, também podemos utilizar outra forma de compressão, como abaixo.
• Comando: tar –cjvf backup_home_20060207.tar.bz2 /home
Da mesma forma como a opção –z, a opção –j comprime as informações, mas no
formato bzip2. Repare também que o nome do arquivo comprimido indica a forma como ele foi
criado, backup_home_20060207.tar.bz2.
A Ferramenta dump
Uma outra ferramenta para realizarmos o backup de nossos dados é o dump. O dump é
muito utilizado, pois ele possibilita que seja determinado um nível de backup. Isso faz com que
ele procure no sistema de arquivos somente o que deve ser armazenado.
Ao contrário do tar, o dump é baseado no formato inode. Isso exige que todos os
diretórios sejam escritos antes de escrever outros arquivos no backup. Os diretórios são escritos
em ordem de inode ascendente, assim como os arquivos são adicionados.
É necessário informar dois parâmetros cruciais para o dump, o nível incremental e o
conjunto do sistema de arquivos que deve ser feito o backup.
A sintaxe do dump é relativamente simples, como segue:
dump [−level] [−b blocksize] [−B records] [−f file] [−u] directory
As opções são as seguintes:
• - level: O nível incremental,
• -b blocksize: O tamanho do bloco do dump (em bytes).
• -B records: O tamanho da fita em blocos do dump. Combinar o blocksize e o
records permite que o dump gerencie as fitas que são menores do que os dados a
serem guardados. Ou seja, se o arquivo de backup for maior do que os bytes de
blocksize x records o dump irá parar e pedir para que a fita seja trocada.
• -f file: O arquivo onde o backup deve ser escrito. Normalmente um dispositivo de fita
ou um CD/DVD-RW.
SS3187 - v1.0 – CentOS 6.2 Página 170
Formação Intensiva Linux- 96 horas
• -u: Este parâmetro faz com que o dump armazene informações sobre o backup no
arquivo /etc/dumpdates, gerando, assim, um histórico de suas operações. Sem
este parâmetro não é possível realizarmos backups incrementais.
• directory: O diretório ou dispositivo onde o backup deve ser realizado.
Assim, para fazermos um backup completo do diretório dos nossos usuários, usaríamos
o seguinte comando.
• Comando: dump 0uf /dev/nst0 /home
O comando acima fará um backup de nível 0 de todo o diretório /home em uma fita
SCSI, identificada pelo dispositivo /dev/nst0.
Depois disso, se quisermos fazer um backup incremental deste diretório, podemos usar
o comando abaixo.
• Comando: dump 5uf /dev/nst0 /home
Este comando fará um backup incremental de nível 5, por exemplo.
Lembre que o nível 0 garante que todo o sistema será copiado. Cada nível acima é
considerado o backup incremental, ou seja, irá copiar todos os arquivos modificados desde o
último backup do nível anterior.
O comando dump também permite que você faça um backup em um servidor remoto.
• Comando: dump 0uf buserver:/dev/nst0 /usr
Onde buserver é o nome do servidor onde você irá armazenar o backup. Entretanto,
esta maneira de realizar o backup pode ser bastante demorada. Ao invés disso, podemos utilizar
o [Link]:
• dump 0uf − /usr | rsh buserver dd of=/dev/rmt0
A desvantagem desta abordagem é que o servidor deve rodar o serviço rshd. Essa
escolha poderá trazer uma série de vulnerabilidades se não for tomado o cuidado necessário.
SS3187 - v1.0 – CentOS 6.2 Página 171
Formação Intensiva Linux- 96 horas
O administrador deverá sempre balancear as vantagens e desvantagens das técnicas e
tecnologias na hora de elaborar a estratégia de backup.
15.4 Restauração de Sistemas Linux
Uma vez efetuado o backup, poderá ser preciso restaurar as informações armazenadas
nele. A forma como isso é feito depende de como o backup foi gerado.
Como vimos anteriormente, se utilizarmos o comando tar para fazer o backup de
nossos arquivos, continuaremos utilizando ele para restaurar o nosso sistema.
• Comando: tar –xvf backup_home_20060207.tar
O comando acima irá separar o arquivo gerado pelo tar anteriormente. Esta separação
será feita no diretório em que o comando for chamado.
Podemos definir um diretório alvo para a restauração do sistema, como abaixo.
• Comando: tar –xvf backup_home_20060207.tar –C /
Este comando fará com que o tar vá para o diretório indicado pelo parâmetro –C, ou
seja, para o diretório / e então restaure o arquivo com as informações agrupadas.
Para restaurarmos nossos arquivos de backup gerados com algum método de
compressão, usaremos as mesmas opções. –j para arquivos comprimidos pelo bzip2 e –z para
arquivos comprimidos pelo gzip.
• Comando: tar –xjvf backup_home_20060207.tar.bz2 –C /
Irá descompactar com o bunzip2.
• Comando: tar –xzvf backup_home_20060207.[Link] –C /
Irá descompactar com o gunzip.
SS3187 - v1.0 – CentOS 6.2 Página 172
Formação Intensiva Linux- 96 horas
Para restaurarmos um backup gerado pelo dump, utilizaremos a ferramenta restore.
A ferramenta restore pode ser utilizada no modo interativo ou não interativo. O Modo
interativo permite que você selecione os arquivos que deseja restaurar, enquanto que no modo
não interativo todo o sistema é restaurado.
Primeiro iremos analisar o modo interativo do restore. Além disso, teremos como
premissa o uso da fita, como forma de backup, e o diretório /home que foi feito o backup.
• Comando: restore −i −f /dev/nst0
O comando acima faz com que o restore entre no modo interativo, por causa da opção
–i, e utilize a fita, representado pelo dispositivo /dev/nst0. Ou seja, ele irá procurar neste
dispositivo o backup para restauração. Após executarmos esse comando, o modo interativo do
restore aparecerá, como segue abaixo.
restore >
Dentro do modo interativo é possível executar alguns comandos, como, por exemplo, o
comando ls, que é usado para listar o conteúdo de um diretório, exatamente como ele funciona
no Linux.
restore > ls
.:
huguinho/ zezinho/ luisinho/
Como dito anteriormente, o modo interativo do restore permite que restauremos
informações de modo selecionado. Assim, se quisermos recuperar somente o diretório huguinho,
procederemos da seguinte forma:
restore > add huguinho
restore > extract
SS3187 - v1.0 – CentOS 6.2 Página 173
Formação Intensiva Linux- 96 horas
Os comandos acima fazem as seguintes operações:
• add: Adiciona o diretório atual ou o argumento, se passado, para ser extraído do
backup. No caso de um diretório ser especificado, todo o conteúdo dele e todos
seus subdiretórios também serão restaurados. Os arquivos que estão na lista de
extração são marcados com um asterisco (*).
• extract: Este comando fará a restauração de todos os arquivos marcados com
um asterisco, ou seja, todos aqueles que estiverem na lista de extração.
Com esses comandos nós conseguimos efetuar uma restauração selecionada do
sistema, além, é claro, de podermos restaurar o sistema por completo.
Caso exista mais de um arquivo de backup na fita, você pode especificar qual volume
deseja recuperar através da opção -s.
• Comando: restore -i -s 2 -f /dev/nrst0
O comando acima fará com que o restore utilize o segundo arquivo de backup da fita.
O segundo modo de operação do comando restore que veremos é o modo não
interativo. Para recuperar um backup, devemos estar localizados no diretório onde queremos
fazer a restauração. Por exemplo, se vamos restaurar o backup do diretório /home, então
faríamos o seguinte.
• Comando: cd /
• Comando: restore –rf /dev/nrst0
Primeiro entramos no diretório raiz (/), pois o diretório /home está localizado abaixo
dele. Depois executamos o processo de restauração.
A opção –r é utilizada para instruir o restore que queremos restaurar o volume de
backup encontrado na fita, referenciada pelo dispositivo /dev/nrst0.
Assim como no modo interativo, podemos específicar a opção –s para definir qual
volume queremos efetuar o backup, caso exista mais de um na fita.
Podemos também utilizar a opção –t para listar os arquivos contidos na fita e utilizar a
opção –x para extrair um determinado diretório.
SS3187 - v1.0 – CentOS 6.2 Página 174
Formação Intensiva Linux- 96 horas
15.5 Para Recordar
1. Estratégias de backup: Escolha sempre uma estratégia com base na
necessidade de dados que você precisa armazenar. Além disso, é preciso
avaliar o tempo gasto para realizar esse backup. Tenha em mente o que é mais
importante, se todos os dados ou o tempo para efetuar a tarefa de backup.
2. Realizando backup: O tar pode ser uma boa alternativa para realizarmos
backups de documentos pessoas, entretanto, o dump pode ser mais funcional
para fazermos o backup completo do nosso sistema por possuir controle dos
arquivos que foram modificados.
SS3187 - v1.0 – CentOS 6.2 Página 175
Formação Intensiva Linux- 96 horas
15.6 Exercícios
1. Quais são as estratégias de backup mais conhecidas atualmente? Comente
cada uma delas.
2. Como podemos realizar um backup, de forma rápida, do nosso diretório pessoal,
comprimindo os arquivos com o comando bzip?
3. Defina os passos que devemos realizar para fazermos um backup total com a
ferramenta dump?
4. Restaure o backup criado no exercício 4?
SS3187 - v1.0 – CentOS 6.2 Página 176
Formação Intensiva Linux- 96 horas
Notas:
SS3187 - v1.0 – CentOS 6.2 Página 177
Formação Intensiva Linux- 96 horas
Módulo 16 - Fundamentos de TCP/IP
SS3187 - v1.0 – CentOS 6.2 Página 178
Formação Intensiva Linux- 96 horas
16.0 Conceitos de redes e serviços
Um dos grandes inventos da ciência foram as redes de computadores. Não somente as
redes locais como, também as redes metropolitanas e depois a Internet.
As redes de computadores nasceram da necessidade de compartilhamento de
informações e junto com essa necessidade vieram os serviços prestados através das redes.
O conceito de redes de computadores é bem simples. Dois ou mais dispositivos, que
estão interligados entre si por meio de cabos ou ar, trocando informações entre eles, é
considerado uma rede.
Em geral, as redes, quanto a sua abrangência, podem ser diferenciadas entre rede local,
também conhecida como LAN (Local Area Network), e redes metropolitanas, também
conhecidas como WAN (Wide Area Network). Elas também podem ser classificadas pelo
protocolo de transporte utilizado, como, por exemplo, IP, ATM, Frame Relay, X.25 e outros.
Atualmente, a rede de computador mais conhecida é a Internet. A Internet é um conjunto
mundial de diversos tipos de redes trocando informações.
Com o crescimento da Internet, cresceu também a demanda e busca por serviços. Estes
serviços podem ser diversos, como, por exemplo, o serviço de páginas Web, o serviço de email,
o serviço de troca de arquivos e outros diversos. Diz-se que a Internet teve o seu crescimento
devido à disponibilização destes variados tipos de serviços.
Um sistema Linux pode disponibilizar qualquer um destes serviços vistos na Internet.
Para isso é necessário que o servidor Linux esteja conectado à rede e possua o serviço
configurado e rodando. Por exemplo, se quisermos ter um serviço de páginas Web, devemos
instalar nosso sistema Linux, configurar o servidor Apache, que é o responsável por prover o
serviço de Web, e conectar esta máquina na Internet, geralmente através de um provedor de
Internet.
SS3187 - v1.0 – CentOS 6.2 Página 179
Formação Intensiva Linux- 96 horas
16.1 Fundamentos de TCP/IP
O TCP/IP (Transmission Control Protocol / Internet Protocol) é o protocolo da Internet, ou
seja, ele define como os dispositivos da rede devem trocar informações. Além disso, também é
possível usar o TCP/IP em redes LAN ou WAN.
Esse protocolo é resultado da junção de dois outros protocolos, o TCP e o IP.
O TCP é o protocolo responsável pelo transporte das informações, ou seja, quando uma
aplicação vai trocar mensagens com outra essa mensagem é dividida em pacotes e então
enviada ao longo da rede. Na outra ponta deve existir, também, o protocolo TCP para que ele
seja capaz de remontar todos os pacotes que chegarem e entregar a mensagem para a
aplicação.
O IP é responsável pelo endereçamento de cada um dos pacotes. Quando um pacote
sai da máquina origem, ele deve seguir sua rota até seu destino. Para isso ele irá passar por
diversos pontos e cada um desses pontos deve saber qual é o destino final do pacote a fim de
encaminhar ele de forma correta. Além disso, nem todos os pacotes seguem o mesmo percurso
da origem até o destino final.
16.2 TCP/IP e o Modelo OSI
O modelo OSI (Open Systems Interconection) foi proposto pela ISO como forma de
padronizar a arquitetura do protocolo de comunicação de dados entre os computadores.
O OSI é um modelo muito complexo e por esse motivo ele nunca foi implementado. Na
verdade, ele é aplicado apenas conceitualmente enquanto que o TCP/IP é aplicado na prática,
ou seja, o TCP/IP é visto funcionando em computadores reais enquanto que o OSI é conhecido
apenas pelos estudiosos de redes de computadores.
O modelo OSI foi concebido formado por sete camadas. Cada uma delas descreve uma
fase na comunicação entre os computadores.
O TCP/IP utiliza apenas cinco camadas em sua pilha. Essas camadas são as realmente
necessárias para que dois dispositivos de rede possam trocar informações entre si.
Por esse motivo que o TCP/IP é adotado como modelo na prática e o OSI como modelo
conceitual. A implementação do OSI é muito complexa devido à quantidade de camadas que ele
possui, sendo que nem todas elas são de extrema necessidade para o funcionamento de um
protocolo de comunicação. A seguir iremos detalhar as camadas do modelo OSI e do TCP/IP.
SS3187 - v1.0 – CentOS 6.2 Página 180
Formação Intensiva Linux- 96 horas
16.3 Camadas do Modelo OSI
O modelo OSI possui sete camadas. Cada uma delas provê informações para a camada
abaixo ou para a camada acima, dependendo do fluxo. A figura, abaixo, mostra como esse
modelo funciona:
Modelo OSI
SS3187 - v1.0 – CentOS 6.2 Página 181
Formação Intensiva Linux- 96 horas
• Camada Física – 1: Camada responsável pela transmissão de uma seqüência
de bits em um meio físico. Trata das características mecânicas, elétricas,
funcionais e procedurais para acessar o meio físico.
• Camada de Enlace de Dados – 2: Camada responsável pela transmissão
confiável de informação através do enlace físico. Envia blocos de dados (frames)
com o necessário controle de erro e de fluxo.
• Camada de Rede – 3: Camada que fornece para as camadas superiores
independência das tecnologias de transmissão e comutação usadas para
conectar os sistemas. Responsável por estabelecer, manter e terminar
conexões.
• Camada de Transporte – 4: Camada responsável pela transferência de dados
entre dois pontos de forma transparente e confiável com funções como controle
de fluxo e correção de erro fim a fim.
• Camada de Sessão – 5: Camada que provê a estrutura de controle para a
comunicação entre as aplicações. Estabelece gerência e termina conexões
(sessões) entre aplicações.
• Camada de Apresentação – 6: Camada responsável por prover independência
aos processos de aplicação das diferenças na representação dos dados
(sintaxe).
• Camada de Aplicação – 7: Camada que fornece aos usuários acesso ao
ambiente OSI e provê sistemas distribuídos de informação.
As camadas efetuam a comunicação no sentido vertical, ou seja, a camada de rede, por
exemplo, realiza a comunicação com as camadas de enlace e de transporte. Se as informações
estiverem saindo da máquina, ou seja, a aplicação gerou os dados e está enviando, o sentido
será da camada mais alta (aplicação) descendo até a camada mais baixa (física). Caso as
informações estejam chegando ao destino, então a ordem inversa é respeitada.
SS3187 - v1.0 – CentOS 6.2 Página 182
Formação Intensiva Linux- 96 horas
A figura abaixo ilustra o encapsulamento dos dados como meio de transporte entre as
camadas do modelo OSI:
Encapsulamento dos dados
Na figura acima, cada camada irá receber os dados e anexar a eles o seu cabeçalho.
Por exemplo, podemos dizer que o pacote na camada de rede contém o cabeçalho de rede e os
dados da camada de transporte.
O cabeçalho contém as informações necessárias para que a camada abaixo ou acima
possa entender como tratar o pacote, ou seja, ela define onde começam e terminam os dados do
pacote.
SS3187 - v1.0 – CentOS 6.2 Página 183
Formação Intensiva Linux- 96 horas
16.4 Camadas do Modelo DOD
O Departamento de Defesa Americano (DOD – Departament of Defence) definiu um
modelo de rede conhecido como modelo DOD. Isso aconteceu antes do desenvolvimento do
modelo OSI. Este, com o passar do tempo, passou a ser conhecido como o tradicional modelo
TCP/IP, que é o modelo de camadas da Internet. Este modelo é constituído de cinco camadas,
simplificando o modelo OSI de referência, que possui sete. Abaixo podemos visualizar a figura
que ilustra tais camadas:
Figura - Modelo TCP/IP
SS3187 - v1.0 – CentOS 6.2 Página 184
Formação Intensiva Linux- 96 horas
• Camada 1: Nesta camada encontramos o frame ethernet. Estes frames são
usados na rede local. Dispositivos como HUBS atuam somente nesta camada,
ou seja, eles somente são capazes de replicar o sinal recebido em uma porta
para todas as outras.
• Camada 2: Encontramos na segunda camada o MAC e o checksum. O MAC é
um identificador único de um dispositivo de rede e o checksum é um cálculo feito
para garantir a integridade do pacote. Dispositivos como o switch atuam nesta
camada. Eles são capazes de identificar para qual MAC um determinado pacote
deve ser enviado e direcionar ele para a porta específica, sem que todos os
outros computadores da rede recebam o pacote.
• Camada 3: A terceira camada é onde encontramos as informações que são
tratadas pelos roteadores. Nesta camada encontramos os endereços IP de
origem e destino do pacote, permitindo assim, determinar a rota que o pacote
deve tomar para chegar ao seu destino.
• Camada 4: Na quarta camada encontramos os protocolos de transporte. Em
geral esta camada determina para qual porta no host o pacote deve ser enviado.
Em geral são encontrados os protocolos UDP e TCP, veremos eles mais
detalhadamente agora.
O protocolo TCP (Transmission Control Protocol) é um protocolo orientado à conexão,
ou seja, para que exista a troca e informações entre dois pontos primeiro é necessária uma fase
de estabelecimento da conexão.
Este protocolo possui mecanismos de controle de erro, ou seja, sempre que ele envia
um pacote, ele aguarda uma confirmação do outro host de que o pacote chegou e está correto.
Caso o host que originou o pacote não receber a confirmação, ou então, receber uma
confirmação de que o pacote não está correto, então ele irá retransmitir o pacote.
Além disto, o TCP também possui controle de fluxo, permitindo que a velocidade com
que os pacotes são injetados na rede seja controlada. Este protocolo é capaz de perceber que
existe um congestionamento na rede e então diminuir a freqüência com que está colocando os
pacotes na rede.
SS3187 - v1.0 – CentOS 6.2 Página 185
Formação Intensiva Linux- 96 horas
O protocolo UDP (User Datagram Protocol) é um protocolo que não é orientado à
conexão, ou seja, não existe garantia de que um pacote enviado irá chegar ao seu destino. A
confirmação de chegada dos pacotes deve ser feita pela aplicação, pois este protocolo não
possui este recurso.
Como este protocolo não possui mecanismos de controle de fluxo nem controle de erros,
ele é extremamente mais rápido que o TCP, pois seu único trabalho é enviar os pacotes para a
rede, sem ter que se preocupar com a integridade deles ou se eles chegaram ao destino como
desejado. Por este motivo, este protocolo é usado em aplicações que necessitem de velocidades
de transmissão muito altas, como é o caso da voz sobre IP (VoIP), por exemplo.
16.5 Conjunto de Protocolos do TCP/IP
Conforme visto anteriormente, o TCP/IP é uma pilha de protocolos que foi criada,
inicialmente, pelo Departamento de Defesa Americano. Além disso, vimos também que o TCP/IP
é uma simplificação do modelo de referência OSI, que por ser um modelo complexo, ele nunca
chegou a ser implementado. Vimos também a estrutura das camadas de cada um desses
modelos.
Agora veremos uma comparação entre eles, assim como os protocolos que são
utilizados em cada camada do TCP/IP.
Comparação entre Modelos
SS3187 - v1.0 – CentOS 6.2 Página 186
Formação Intensiva Linux- 96 horas
Na figura acima, à esquerda, podemos identificar as sete camadas do modelo OSI. No
meio identificamos a pilha TCP/IP.
Anteriormente vimos que o modelo TCP/IP possuía cinco camadas e agora ela está
apresentada com apenas quatro. Isso se dá pelo fato de que alguns autores definem que a
camada de enlace e a camada física fazem parte de uma camada composta, chamada interface
de rede. Bem à direita podemos observar, então, o conjunto de protocolos do TCP/IP.
Bem acima, na camada de aplicação, nos temos os protocolos de aplicação, como, por
exemplo, o protocolo HTTP (Hiper text Transfer Protocol), que é o protocolo para páginas Web e
o protocolo FTP (File Transfer Protocol), que é utilizado na transferência de arquivos.
Abaixo destes protocolos, encontramos os sockets, ainda na camada de aplicação. Os
sockets são utilizados pelas aplicações para realizar a comunicação com outros computadores.
Depois encontramos o TCP (Transmisson Control Protocol) e o UDP (User Datagram
Protocol). Estes dois se encontram na camada de transporte e são responsáveis por tal tarefa,
ou seja, são eles que realizam o transporte das informações das aplicações através dos sockets.
Abaixo do transporte, podemos encontrar a camada de rede ou Internet. O protocolo
utilizado é o IP (Internet Protocol). Junto com ele, podemos encontrar outros protocolos, como,
por exemplo, o ICMP (Internet Control Message Protocol) e o ARP (Address Resolution
Protocol).
Por fim encontramos a interface de rede. Em geral, essa interface é o modo como o
computador é conectado à rede. Podendo ser uma placa de rede com um conector RJ-45, por
exemplo, ou um dispositivo sem fio e outros.
SS3187 - v1.0 – CentOS 6.2 Página 187
Formação Intensiva Linux- 96 horas
16.6 Endereçamento TCP/IP
A forma como os computadores são encontrados na Internet é através de seu endereço
IP. O endereço IP é um número de 32 bits que representa um dispositivo de rede. Estes
dispositivos podem ser roteadores, impressoras, modems, placas de redes em computadores e
outros. A utilização de 32 bits para representar um dispositivo não é facilmente identificados por
nós, humanos. Assim, criou-se uma representação destes 32 bits divididos em 4 números
inteiros decimais separados por ponto. Abaixo, a figura ilustra como essa representação é feita.
Endereço IP
Acima é mostrado o endereço de um dispositivo de rede representado pelo decimal
separado por ponto [Link]. A representação decimal foi criada para que as pessoas
possam identificar endereços IP de forma mais natural.
Entretanto, esse endereço é enxergado pelos dispositivos de rede, como roteadores, por
exemplo, como sendo o número 11001000.10000100.01001001.01010000, ou seja, um
número IP representados por 32 bits separados de 8 em 8 bits. Desta forma os dispositivos de
rede são capazes de compreender o endereçamento visualizado.
SS3187 - v1.0 – CentOS 6.2 Página 188
Formação Intensiva Linux- 96 horas
16.7 Endereçamento de Rede
Anteriormente vimos que o endereço IP é formado por 32 bits agrupados em 8 bits e
separados por ponto.
Este endereço de 32 bits permite identificar a rede e o host dos computadores, sendo
que cada host só pode pertencer a uma rede. Para melhor agrupar as redes, foi definida uma
classificação das redes IP.
Todos os endereços IP estão classificados em classes de IP, que são: Classe A, Classe
B, Classe C, Classe D e ainda uma Classe E. Cada uma dessas classes define o tamanho da
rede, ou seja, define quantos hosts podem ser encontrados para cada rede, dependendo da sua
classe.
Classe A
Os endereços desta classe possuem os 8 primeiros bits fixos, podendo variar os 24 bits
posteriores. Desta maneira teremos um grande número de hosts para cada rede. O primeiro bit,
de uma classe A, tem sempre o valor zero, seguido dos outros 7 bits que completam a
identificação da rede. Os 24 bits restantes identificam um host desta rede.
Endereço classe A
Na figura acima, podemos identificar o primeiro bit, em negrito, com o valor 0 seguido de
7 letras “N”. Essas letras ilustram os outros 7 bits que devem formar o identificador da rede.
Após, podemos ver os 24 bits restantes preenchidos com a letra “H”, que ilustra o
identificador do host. Um endereço classe A permite 126 redes e 16.777.214 hosts por rede.
SS3187 - v1.0 – CentOS 6.2 Página 189
Formação Intensiva Linux- 96 horas
Classe B
Nos endereços de classe B os primeiros 16 bits são fixos e os últimos podem variar. Isso
permite que esse tipo de classe possua um nível médio de hosts para cada rede. Aqui, os dois
primeiros bits identificam a classe e os 14 restantes completam a identificação rede. Os últimos
16 bits identificam cada host da rede:
Endereço classe B
Acima, na figura, podemos identificar que os endereços classe B possuem seus dois
primeiros bits com o valor 10, seguidos de 14 bits que completam a identificação da rede. Os
últimos 16 bits são utilizados para identificar os hots. Um endereço classe B permite 16.384
redes e 65.534 hosts por rede.
Classe C
Os endereços de classe C permitem um número reduzido de hosts, entretanto, permitem
diversas redes. Nele, os primeiro 24 bits são usados para identificar a rede e os últimos 8 para
identificar o host. Os três primeiros bits da classe C têm o valor 110 sempre:
Endereço classe C
Acima, na figura, podemos identificar que os endereços classe C possuem seus três
primeiro bits com o valor 110, seguidos de 21 bits que completam a identificação da rede.
SS3187 - v1.0 – CentOS 6.2 Página 190
Formação Intensiva Linux- 96 horas
Os últimos 8 bits são utilizados para identificar os hots. Um endereço classe C permite
2.097.152 redes e 254 hosts por rede.
Classe D
Os endereços de classe D são usados para endereçar IP de Multicast. Os quatro
primeiros bits identificam a classe e seus valores são 1110. Os outros bits restantes são
utilizados para fazer o endereçamento do host para o Multicast.
Classe E
A classe E é experimental e está reservada para ser usada no futuro. Os quatro
primeiros bits identificam essa classe experimental com os valores 1111.
Sub-Redes
O conceito de sub-redes é bem simples. Ele realiza a divisão da rede disponível, ou seja,
vamos imaginar que nós possuímos um endereço de rede da classe C, ou seja, podemos ter 254
hosts na nossa rede.
Entretanto, precisamos de outra rede. A primeira solução que passa na cabeça é
requisitar uma nova faixa de endereços IP. Esta tarefa é mais complicada do que parece, e para
resolvermos essa questão podemos utilizar o conceito de sub-redes, dividindo a nossa única
rede em duas. Ou seja, ao invés de termos 254 hosts em uma rede, poderemos ter 126 hosts em
cada uma das duas redes.
Isso é feito através da máscara da rede. Lembre-se que na classe C nós possuímos 24
bits para identificar a rede e 8 bits para identificar o host.
Assim, se emprestarmos 1 bit do identificador de host para o identificador da rede,
teremos 25 bits para a identificação da rede e 7 para os hosts.
Em outras palavras, se tivermos o seguinte endereço de rede [Link] e quisermos
utilizar o conceito de sub-redes, primeiros iremos transformar este número para a representação
de bits.
11001000.10000100.01001001.00000000
SS3187 - v1.0 – CentOS 6.2 Página 191
Formação Intensiva Linux- 96 horas
O bit menos significativo do identificador de host será emprestado para a identificação de
rede, podendo a máscara de rede ficar da maneira como está acima ou da maneira abaixo.
11001000.10000100.01001001.10000000
Reparem agora que o bit menos significativo está setado, ou seja, tem o valor 1. Isto
indica que estamos em uma rede diferente de quando este bit não está setado.
Ou seja, o endereço de rede [Link] está na primeira rede e o endereço
[Link] está na segunda rede. Para conferir isto, vamos à visualização binária do
endereço.
[Link] = 11001000.10000100.01001001.00011001
[Link] = 11001000.10000100.01001001.10001100
Assim somos capazes de definir sub-redes dentro de um endereço de rede para
qualquer classe. Além disso, podemos não só dividir em duas redes e sim em quantas houver
endereços disponíveis.
NOTA: Lembre-se que sempre existiram dois endereços que não serão usados, o
primeiro e o último, ou seja, se tivermos uma rede de 256 host, que é o caso da
classe C, então o endereço 0 e o 255 não serão usados.
IPs Reservados e Classes Privadas
Na classe A de endereços, a rede [Link] não pode ser usada. Isto porque esta faixa
de endereços é reservada para testes de loopback e para processos de comunicação interna do
computador. Além desta, outras três redes que são consideradas privadas:
A rede privada [Link]/8 é uma identificação de rede classe A que permite o seguinte
intervalo de endereços IPs: [Link] até [Link]. A rede privada [Link]/8 tem 24 bits
de host que podem ser usados com qualquer esquema de sub-redes ou super-redes dentro da
organização.
A rede privada [Link]/12 pode ser interpretada com um bloco de 16 identificações
de rede classe B ou como um espaço de endereçamento com 20 bits atribuíveis (20 bits de host)
que pode ser usado com qualquer esquema de sub-redes ou super-redes dentro da organização.
SS3187 - v1.0 – CentOS 6.2 Página 192
Formação Intensiva Linux- 96 horas
A rede privada [Link]/12 permite o seguinte intervalo de endereços IPs: [Link]/12 até
[Link].
A rede privada [Link]/16, que pode ser interpretada com um bloco de 8
identificações de rede classe C ou como um espaço de endereçamento com 16 bits atribuíveis
(16 bits de host) que pode ser usado com qualquer esquema de sub-redes ou super-redes
dentro da organização. A rede privada [Link]/16 permite o seguinte intervalo de endereços
IPs: [Link]/16 até [Link].
16.8 Portas & Sockets
Os termos portas e sockets são bastante utilizados no ambiente de redes e veremos
seus conceitos aqui de forma clara e objetiva. Vimos anteriormente como é feito o
endereçamento de dispositivos nas redes de computadores. Entretanto, em cada dispositivo
pode ser encontrado um grande número de serviços sendo executados nele.
Desta maneira, além de endereçar um dispositivo é preciso, também, endereçar o
serviço o qual a pessoa está tentando acessar. O endereçamento no dispositivo é feito através
do uso de portas distintas.
Para esclarecer melhor, vamos imaginar a seguinte situação. Sabendo que o host
endereçado pelo IP [Link] possui um servidor de páginas e um servidor de
transferência de arquivos.
Partindo desta premissa, como você poderá definir qual dos dois serviços acessar? Em
outras palavras, você sabe que o host é endereçado pelo IP definido, mas isso não específica
qual serviço estamos tentando acessar.
Assim, como vimos recentemente, o endereçamento em um host é feito através do uso
de portas. Desta forma podemos identificar qual serviço queremos acessar, em um dispositivo
que possua diversos serviços.
Por padrão, o servidor de página escuta a porta 80, ou seja, sempre que quisermos
acessar esse serviço iremos utilizar o endereço IP, para identificar o dispositivo que está
servindo, e a porta que identifica o serviço propriamente dito.
SS3187 - v1.0 – CentOS 6.2 Página 193
Formação Intensiva Linux- 96 horas
Aplicações específicas, como, por exemplo, o browser usado para navegar na internet,
não necessita que você informe à porta que ele deve tentar acessar quando é digitado um
endereço. Isso porque, como dito anteriormente, a porta padrão para serviço de páginas é a 80,
e como você está utilizando um aplicativo para visualizar páginas, logo ele tentará acessar a
porta 80 do endereço IP especificado. Caso o servidor de páginas esteja configurado para utilizar
outra porta que não a padrão, então você deve especificar a porta.
Sockets
De forma geral, o socket é uma comunicação feita ponto a ponto, ou seja, de um
dispositivo até outro. Essa comunicação estabelece um canal por onde irão trafegar dados entre
os dois dispositivos em questão.
Como vimos anteriormente, os sockets estão localizados abaixo da camada de aplicação
e acima da camada de transporte. Assim, qualquer aplicação poderá utilizar sockets para
estabelecer uma conexão e os sockets, por sua vez, podem utilizar qualquer protocolo de
transporte para comunicar-se com o dispositivo alvo em questão.
Assim, quando digitamos o endereço que queremos acessar, o nosso browser irá efetuar
uma conexão com o destino através dos sockets. Após estabelecida a conexão, o servidor
poderá responder as requisições de páginas feitas pelo nosso browser, que por sua vez, irá
exibir elas.
SS3187 - v1.0 – CentOS 6.2 Página 194
Formação Intensiva Linux- 96 horas
16.9 Para Recordar
1. Modelos: O OSI é um modelo conceitual de pilha de protocolos e possui sete
camadas. O TCP/IP é o modelo usado na internet e possui cinco camadas,
sendo estas: aplicação, transporte, rede, enlace e física. Alguns autores
defendem o TCP/IP como tendo quatro camadas devido à junção da camada de
enlace e a camada física.
2. Endereçamento IP: O endereçamento IP é um número de 32 bits. Para facilitar
a visualização humana deste, ele é utilizado no formato decimal pontual, ou seja,
um endereço IP é representado com quatro números decimais separados por
ponto, como, por exemplo, [Link].
3. Portas: Para endereçarmos serviços diferentes em um endereço IP, utilizamos
as portas de serviço. Tais portas servem para sabermos qual serviço estamos
acessando.
4. Classes de rede: Para facilitar a organização das redes, os endereços IP foram
divididos em cinco classes: classe A, classe B, classe C, classe E e classe D.
Cada uma delas indica um número de redes e hosts possíveis. A classe E é
utilizada para multicast e a classe D é reservada para uso futuro.
SS3187 - v1.0 – CentOS 6.2 Página 195
Formação Intensiva Linux- 96 horas
16.10 Exercícios
1. Quantas camadas encontramos no modelo OSI?
2. Defina a utilização das camadas no modelo OSI e no modelo TCP/IP?
3. Qual a utilidade das portas de serviço?
4. Quais as classes de endereço existem?
5. Quais são as classes para os endereços IP: [Link], [Link] e
[Link]?
SS3187 - v1.0 – CentOS 6.2 Página 196
Formação Intensiva Linux- 96 horas
Notas:
SS3187 - v1.0 – CentOS 6.2 Página 197
Formação Intensiva Linux- 96 horas
Módulo 17 - Fundamentos de IPv6
Introdução
O IPv6 é a próxima versão do protocolo IP, a ser adotada. No IPv6 são usados
endereços com nada menos do que 128 bits. Prevendo o tamanho do problema que seria ter que
futuramente migrar novamente para um novo padrão, o IEFT (o órgão responsável) resolveu não
correr riscos. O número de endereços disponíveis é simplesmente absurdo. Seria o número
[Link] seguido por mais 27 casas decimais.
É ponto pacífico que o IPV6 vai ser adotado mais cedo ou mais tarde. Já existem
projetos de uso em larga escala em países como o Japão, China e Coréia do Sul e a adoção
tende a se acelerar rapidamente no decorrer dos próximos anos.
18.1 Porque usar IPv6
Existem algumas boas razões para isto:
• O espaço de endereçamento no protocolo IPV4 é de aproximadamente 4 bilhões
de endereços (2*32 x 1024) e está acabando. Sem endereços IP's adicionais, a
rede não poderia mais crescer, ficando estagnada.
• A explosão das redes wireless e a Internet móvel acrescentam a cada ano,
novos dispositivos os quais demandam novos endereços IP (dispositivos 3g,
tablets, netbooks, etc).
• Novos aplicativos são cada vez mais desenvolvidos para conexão direta ponto a
ponto (exemplo Voip, teleconferência, etc), trazendo dificuldades ao uso de nat e
demandando maior eficiência na parte de roteamento, para evitar atrasos nas
conexões com evidente perda de qualidade do serviço.
O IPV6 surgiu para solucionar estas dificuldades e acrescentar uma considerável folga
no espaço de endereçamento, prevendo novas funcionalidades e novos dispositivos por um
longo período de tempo sem necessidade de se projetar em curto prazo de tempo, novas
versões deste protocolo. Adicionalmente, o cabeçalho IPv6 possui otimizado para uso de
aplicações que demandem um fluxo de dados com alguma garantia de qualidade (QoS).
SS3187 - v1.0 – CentOS 6.2 Página 198
Formação Intensiva Linux- 96 horas
Endereçamento IPv6
Nos endereços IPv4, dividimos os endereços em 4 grupos de 8 bits, cada um
representado por um número de 0 a 255, como em "[Link]". Contudo, utilizar este
mesmo sistema para o IPV6 não seria prático, pois teríamos nada menos do que 16 octetos,
criando “endereços-monstro”, totalmente inviáveis de serem lidos e manipulados como:
"[Link].[Link].[Link].[Link]"
Ao invés disso, os endereços IPV6 são expressos em notação hexadecimal. “Neste tipo
de representação, temos oito quartetos de 16 bits cada, separados por “:", por exemplo:
“[Link]”. Para atenuar a complexidade deste tipo de
endereçamento, algumas simplificações são permitidas, de modo a encurtar graficamente o
endereço IPv6:
• Podem ser omitidos, todos os zeros à esquerda, dentro de um quarteto:
Assim, em vez de escrever "0341", podemos apenas escrever apenas "341"; em vez
de "0001" apenas "1" e, em vez de "0000" apenas "0", sem que o significado seja
alterado. É por isso que muitos quartetos dentro dos endereços IPV6 podem ter
apenas 3, 2 ou mesmo um único dígito. Os demais são zeros à esquerda que foram
omitidos. Isto é bastante comum já que atualmente poucos endereços são usados.
Graças a isso, o endereço "[Link]" pode ser abreviado para apenas
"[Link]", onde omitimos todo o trecho central "[Link]".
• Sequências "[Link]" podem ser omitidas: A posição da seqüência é marcada
pela cadeia "::". Exemplo: 2002::0015:0000:0000:0000:0001 (estendido) :
[Link] (reduzido)
Entretanto, é importante lembrar que apenas uma seqüência de zeros pode ser
contraída, pois se contraíssemos mais de uma, o endereço tornar-se-ia ambíguo: Exemplo:
2002::0015::0001 (inválido, qual a posição da palavra 0015 dentro do endereço?)
• Os zeros não significantes dentro de cada palavra podem ser omitidos: Exemplo:
2002::15:0:0:0:1
SS3187 - v1.0 – CentOS 6.2 Página 199
Formação Intensiva Linux- 96 horas
A divisão rede/host
Assim como no IPV4, os endereços IPV6 são divididos em dois blocos. Os primeiros 64
bits (os 4 primeiros quartetos) identificam a rede, enquanto os últimos 64 bits identificam o host.
Por exemplo, no endereço "[Link]", temos a rede "[Link]" e o host
"[Link]".
Máscara de Rede
No IPv6, não existem mais classes de endereços (exemplo A, B e C), como existem no
IPv4. O IPv6 utiliza o conceito de CIDR, onde um determinado número de bits corresponde ao
prefixo da rede, e os bits restantes identificam o nó, como no exemplo a seguir:
[Link]
A notação acima, expressa uma máscara de rede de 64 bits. Como são pouco práticas,
aparecem apenas em textos didáticos. A notação usual é a "notação de barra", com o número de
bits 1 da máscara sufixando o endereço IP. Exemplo: 2002:1/64
Faixas de endereçamento em IPv6
O grande espaço de endereçamento visa à criação facilitada de classes de
endereçamento. Tais classes, mais apropriadamente denominadas de faixas de endereçamento,
são registradas junto à IETF. Segue uma lista das principais faixas e os respectivos prefixos
Ipv6:
FAIXA USO
0000::/8 Reservado
0000::96 Endereços IPv6, compatíveis com IPV4
[Link]/96 Endereços Ipv4, mapeados em IPv6
0200::/8 Descontinuado (NSAP)
0400::/8 Descontinuado (IPX)
FEC0::/19 Descontinuado (site local).
2000::3 Endereços roteáveis na Internet (prefixos 2xxx e 3xxx)
FF00::/8 Multicast
- Anycast
- Unicast
SS3187 - v1.0 – CentOS 6.2 Página 200
Formação Intensiva Linux- 96 horas
Além disso, em Ipv6, existem 3 tipos de endereços:
• Endereços Multicast Este endereço identifica um grupo de interfaces ou um grupo
de nodes, mas um pacote destinado a um endereço multicast é enviado para todas
as interfaces do grupo. Um node pode pertencer a mais de um grupo multicast.
• Endereços Anycast: Identifica um grupo de interfaces de nodes diferentes. Um
pacote destinado a um endereço anycast é enviado para uma das interfaces
identificadas pelo endereço. Específicamente, o pacote é enviado para a interface
mais próxima de acordo com a medida de distância do protocolo de roteamento.
• Endereços Unicast: Identifica uma única interface. Um pacote destinado a um
endereço unicast é enviado diretamente para a interface associada ao endereço. Os
endereços Unicast podem ser dos tipos: Global, Link-local, Unique-local, Ipv4
mapeado para Ipv6, Loopback e Unspecified.
As faixas de endereços reservadas
Assim como no IPV4, existem alguns endereços e faixas de endereços reservadas. Os
endereços iniciados com "2001:" são reservados para provedores de acesso e carriers e podem
ser registrados, da mesma forma que as faixas de endereço IPV4 atuais. Os endereços iniciados
com "[Link]" e "[Link]" são reservados para uso em documentação, exemplos e testes e
por isso eles não são roteáveis.
Talvez o melhor exemplo de endereço reservado é o endereço da interface de loopback.
No IPV4, o endereço de loopback é o "[Link]", enquanto no IPV6 foi escolhido o endereço
"[Link]", que pode ser abreviado para apenas "::1"! :)
Em um micro com o suporte a IPV6 ativado, você pode usar o comando "ping6 ::1" para testar
isso:
$ ping6 ::1
PING ::1(::1) 56 data bytes
64 bytes from ::1: icmp_seq=1 ttl=64 time=0.041 ms
64 bytes from ::1: icmp_seq=2 ttl=64 time=0.045 ms
64 bytes from ::1: icmp_seq=3 ttl=64 time=0.045 ms
64 bytes from :1: icmp_seq=4 ttl=64 time=0.040 ms
SS3187 - v1.0 – CentOS 6.2 Página 201
Formação Intensiva Linux- 96 horas
17.3 Novas Funcionalidades do IPv6
A introdução do protocolo ipv6 incorpora profundas mudanças e novas funcionalidades,
que vêm de encontro aos novos serviços e funcionalidades hoje e futuras, sendo as principais:
• Maior Espaço de Endereçamento: O espaço de endereçamento do IPv6 é de 128
bits, contra os 32 bits do Ipv4, o que corresponde a incríveis 3,4x10*38 endereços
disponíveis ou 5,6x10*28 (5,6 octilhões) de endereços por ser humano na Terra!
• Endereçamento e Roteamento Hierárquico: Simplifica as Tabelas de roteamento
dos Roteadores da rede, diminuindo com isso a sobrecarga de processamento
destes e agilizando o processo de encaminhamento dos pacotes.
• Autoconfiguração: O IPv6 permite a atribuição automática de endereços IP. Esta
configuração pode ser alcançada através de dois métodos distintos: Stateless e
Statefull. Na autoconfiguração Stateless um endereço é automaticamente gerado
pela própria máquina usando uma combinação de informações locais, e informações
divulgadas pelos roteadores. Os roteadores divulgam o prefixo que identifica a sub-
rede, enquanto as máquinas clientes configuram seu endereço IP concatenando ao
prefixo divulgado o seu endereço MAC. Na autoconfiguração Statefull, as máquinas
obtêm endereços ou configurações de um servidor. Esses servidores mantêm uma
base de dados com todos os endereços que foram distribuídos na rede. Esse tipo de
autoconfiguração permite que máquinas cliente obtenham endereços, bem como
outras configurações, de um servidor centralizado, como ocorre no protocolo IPv4 e
a utilização de um servidor DHCP.
• Segurança: O IPv6, inclui segurança na camada de rede através de uma arquitetura
criada para tal, chamada IPSec. Baseada em criptografia, esta arquitetura é
bastante flexível, de modo a evitar problemas relacionados com restrições de
exportação de criptografia e não impede a utilização de outros mecanismos de
segurança por parte das aplicações. Deste modo, técnicas de ataque como
“sniffing”, são impedidas. Além disso, devido ao número astronômico de endereços,
outras técnicas de ataque como “portscaning” (varredura) à procura de máquinas
vulneráveis na rede, também são desencorajadas, devido ao tempo gasto neste
processo.
SS3187 - v1.0 – CentOS 6.2 Página 202
Formação Intensiva Linux- 96 horas
• QoS: O IPv6 foi especialmente projetado para incluir facilidades de QoS, às
aplicações que necessitem desta funcionalidade, possuindo um novo campo
chamado flow label, que pode conter um rótulo identificando um fluxo específico de
dados. Desta forma, o nó fonte gera uma rota de fluxo com rótulo, disponibilizando
QoS nesse caminho, onde cada roteador do caminho toma ações baseadas por
esse rótulo. Além disso, o cabeçalho IPv6 foi aliviado, possuindo apenas 8
[Link] Protocolo: O IPv6 Neighbor Discovery (ND), substitui o ARP
(protocolo de resolução de endereços), utilizado no IPv4. O ND tf habilita roteadores
e hosts IPv6 a determinar o MAC Address de seus vizinhos de mesmo enlace,
encontrar roteadores vizinhos e manter uma tabela de hosts vizinhos. O processo
Neighbor Discovery utiliza mensagens ICMPv6 e endereços Multicast, para
determinar os endereços MAC e verificar a alcançabilidade de algum host vizinho.
O processo Neighbor Discovery utiliza 2 mecanismos de operação: Neighbor Solicitation
e Neighbor Advertisement que serão apresentados a seguir. O Neighbor Solicitation é usado
quando um host precisa determinar o endereço MAC de um vizinho do mesmo enlace. Esta
função substitui o protocolo ARP no IPv6 sem utilizar endereços broadcast. O processo funciona
da seguinte forma: o host origem envia uma mensagem para os seus vizinhos com valor 135, no
campo type do protocolo ICMP. Ele utiliza como endereço de origem um do tipo Multicast
Solicited Node, relativo ao endereço IPv6 do vizinho a ser alcançado. Na área de dados, ele
envia o seu endereço MAC e também uma solicitação do endereço MAC do vizinho.
SS3187 - v1.0 – CentOS 6.2 Página 203
Formação Intensiva Linux- 96 horas
Quando o vizinho recebe a mensagem para o grupo Multicast, identifica como
endereçada a ele e responde o pedido utilizando o Neighbor Advertisement Message, que nada
mais é que uma mensagem de resposta à solicitação feita. Para isso, ele envia uma mensagem
com o valor 136 no campo type do ICMP e no campo data transmite o seu endereço MAC.
Abaixo podemos verificar um esquema deste processo:
Protocolo Neighbor Discovery (ND)
• Cabeçalho Extensível: O IPv6 introduz um novo formato de cabeçalho, onde todos
os campos deste novo cabeçalho possuem tamanho fixo, totalizando 64 bytes. O
fato de esse possuir um tamanho fixo acelera bastante o processamento dos
pacotes pelos roteadores, visto que não há necessidade de calcular a extensão de
certos campos, e nem o tamanho do cabeçalho como um todo. Além disso, ocorreu
uma redução dos números de campos utilizados, por meio da exclusão de campos
de pouca utilidade prática. Este fato também contribui para a diminuição do tempo
gasto em processamento pelos roteadores.
SS3187 - v1.0 – CentOS 6.2 Página 204
Formação Intensiva Linux- 96 horas
Com o IPv6, eventuais "opções" que devam acompanhar o pacote são especificadas em
cabeçalhos independentes (Extension Headers), que se agrupam após o cabeçalho IPv6. A
utilização destes, permitiu uma grande simplificação do cabeçalho IPv6 e é indicada por meio do
campo Next Header, que indica o tipo de cabeçalho que seque ao cabeçalho IPv6. Assim, alguns
dos campos excluídos podem aparecer como extension headers caso haja necessidade. Os
possíveis tipos e suas funções são:
• Hop-by-Hop options: Informações gerais para os roteadores;
• Routing: Rota completa ou parcial a ser seguida;
• Fragmentation: Gerenciamento de fragmentos de datagrama;
• Authentication: Verificação da identidade do remetente
• Encrypted security payload: Informação sobre a criptografia
• Destination options: Informação adicional sobre o destinatário.
Estes cabeçalhos, caso sejam utilizados, devem aparecer entre o cabeçalho IPv6 e o
bloco de dados (payload), conforme apresentado na figura, abaixo. Caso mais de um cabeçalho
de extensão seja utilizado, estes devem seguir a ordem especificada anteriormente:
Cabeçalhos de extensão no IPv6
SS3187 - v1.0 – CentOS 6.2 Página 205
Formação Intensiva Linux- 96 horas
17.4 Tecnologias de Transição do IPv6
O processo de transição do Ipv4 para o Ipv6 será necessariamente gradual e, para este
fim, foram desenvolvidas algumas tecnologias de transição. Essas tecnologias permitem a
utilização de ambas as versões do protocolo IP. Possibilitando uma gradual transição da infra-
estrutura de rede, para a nova versão. As tecnologias de transição do IPv4 para o IPv6 são as
seguintes:
• ISATAP (Intra-Site Automatic Tunnel Addressing Protocol): É uma alternativa ao
6over4, já que conecta máquinas e roteadores Ipv6 dentro de redes IPv4, sem
introduzir impacto no tamanho da tabela de roteamento e exigir serviços especiais
IPv4. Cada máquina precisa de um roteador ISATAP no enlace para obter endereço
e informação de roteamento. Este mecanismo é ilustrado na figura, a seguir:
SS3187 - v1.0 – CentOS 6.2 Página 206
Formação Intensiva Linux- 96 horas
• TEREDO: Teredo provê um mecanismo de transição, que permite a usuários, em
um ambiente IPv4 NAT com endereçamento privado, obter conectividade IPv6. A
idéia básica do Teredo é um nó encapsular pacotes IPv6 em UDP IPv4 e tunelá-los
para um servidor Teredo na Internet IPv4. É função deste servidor desencapsular e
entregar o pacote IPv6 (SANTOS, 2004). A figura a seguir ilustra este mecanismo:
SS3187 - v1.0 – CentOS 6.2 Página 207
Formação Intensiva Linux- 96 horas
• 6TO4: O 6to4 é uma técnica de encapsulamento descrita na RFC 3056. Quando o
6to4 é utilizado, o tráfego IPv6 é encapsulado com um cabeçalho IPv4 antes de ser
enviado pela Internet Ipv4. O 6to4 usa o prefixo de endereço global
2002:WWXX:YYZZ::/48, onde WWXX:YYZZ é a parte da identificação da agregação
do próximo nível (NLA ID) de um endereço global e também a representação
hexadecimal com dois-pontos de um endereço IPv4 público (w.x.y.z) atribuído ao
site ou host. O endereço 6to4 completo de um host 6to4 é 2002:WWXX:YYZZ:. Essa
tecnologia se encontra representada na figura abaixo:
Um exemplo prático
No Linux, você pode usar este comando para verificar se o suporte a IPV6 está ativo:
# test -f /proc/net/if_inet6 && echo "IPV6 ativo" || echo "IPV6 desativado"
Em algumas distribuições ele vem desativado por padrão. Nesse caso, ative-o carregando o
módulo "ipv6" do Kernel:
# modprobe ipv6
SS3187 - v1.0 – CentOS 6.2 Página 208
Formação Intensiva Linux- 96 horas
A seguir, podemos atribuir um endereço IPV6 usando o comando "ifconfig eth0 add", onde o
"eth0" é a interface de rede. Graças às abreviações, os endereços IPV6 podem ser bastante
curtos. Experimente por exemplo adicionar o endereço "fee::1":
# ifconfig eth0 add fee::1
Faça o mesmo em outro micro da rede, atribuindo agora o endereço "fee::2":
# ifconfig eth0 add fee::2
Para testar a conectividade entre os dois, você pode utilizar o comando "ping6", que é a versão
atualizada do ping, que trabalha com endereços IPV6. Caso ele não esteja disponível,
experimente instalar o pacote "iputils-ping":
# ping6 fee::1
PING fee::1(fee::1) 56 data bytes
64 bytes from fee::1: icmp_seq=1 ttl=64 time=5.82 ms
64 bytes from fee::1: icmp_seq=2 ttl=64 time=1.10 ms
64 bytes from fee::1: icmp_seq=3 ttl=64 time=1.09 ms
64 bytes from fee::1: icmp_seq=4 ttl=64 time=1.06 ms
Miredo
Outro exemplo prático é utilizando o protocolo Teredo, navegarmos através de um
endereço IPV6 tipo LinK-Global dinâmicamente alocado. Para realizar este procedimento,
devemos proceder de acordo com os passos a seguir:
Passo 1: Habilite os repositórios extras no CentOS, com os comandos abaixo:
• Comando: wget [Link]
[Link]
Comando: rpm -ivh [Link]
Passo 2: Instale o pacote miredo e suas dependências:
• Comando: yum install miredo
Passo 3: Execute o comando para ativar o cliente miredo;
• Comando: /usr/sbin/miredo
Passo 4: Verifique se foi atribuido um endereço ipv6 Link-Global:
• Comando: ifconfig | grep 2001
SS3187 - v1.0 – CentOS 6.2 Página 209
Formação Intensiva Linux- 96 horas
O resultado, deverá ser similar ao existente no exemplo, logo abaixo:
Comando: /usr/sbin/miredo
endereço inet6: [Link]/32 Escopo:Global
A partir deste ponto, ao abrir o navegador, para comprovar que estamos navegando com um
endereço IPV6 válido, podemos acessar um dos seguintes endereços:
[Link] (verifique se o Globo está girando);
[Link] ( o Google em IPV6);
[Link] ( testa se está ativo e exibe o endereço ipv6)
SS3187 - v1.0 – CentOS 6.2 Página 210
Formação Intensiva Linux- 96 horas
Módulo 18 - Configuração de Redes
SS3187 - v1.0 – CentOS 6.2 Página 211
Formação Intensiva Linux- 96 horas
19.0 Configuração Manual de Rede
A configuração da rede de um host pode ser feito de duas maneiras. A primeira é de
forma automática, através do protocolo DHCP que provê endereços IP. A segunda forma é
realizando a atribuição das configurações de rede manualmente, que será abordado agora.
No CentOs versão 6.2, a configuração manual pode ser feita através da edição de
arquivos de configuração, linha de comando ou através da ferramenta system-config-network.
Entretanto, antes de explicarmos a configuração manual, é necessário entender a
inicialização das interfaces de rede. A figura, abaixo ilustra um diagrama de bloco:
Diagrama de inicialização
A figura acima é explicada da esquerda pra direita. Primeiro é definido o nível de
execução que o sistema está sendo iniciado. Depois disso são executados os serviços de rede,
localizados no diretório /etc/rc.d. Além disso, os programa ifconfig e route são
executados. O ifconfig irá ler os arquivos “ifcfg” para determinar as configurações das
interfaces de rede e então habilitá-las.
SS3187 - v1.0 – CentOS 6.2 Página 212
Formação Intensiva Linux- 96 horas
O route, por sua vez, irá ler os arquivos “ifcfg” para verificar se existe alguma
configuração de rota que ele deva considerar. Depois disso, as informações sobre as rotas são
armazenadas na memória.
No diretório /etc/sysconfig/network-scripts existem diversos scripts que são
utilizados para configurarmos a rede de forma manual. Abaixo, a figura ilustra o conteúdo deste
diretório.
Os principais arquivos, utilizados para configurar as interfaces de rede, são os que o
nome começa com “ifcfg” de interface configuration (ex ifcfg-eth0, ifcfg-eth1, etc).
Assim, para cada interface de rede existente em um host, existe um correspondente
arquivo de configuração, em “/etc/sysconfig/network-scripts”;
As principais opções que podem ser colocadas como configurações deste arquivo são
as seguintes:
Opção Descrição
STARTMODE Define quando a interface deve ser iniciada. Seus valores são: manual,
auto, hotplug, ifplugd, off.
BOOTPROTO Define como a interface deve ser iniciada. Se esta opção estiver vazia ela
usará o modo estático. Seus parâmetros são: static, dhcp, autoip,
dhcp+autoip, 6to4.
IPADDR Define o endereço IP da interface.
NETMASK Define a máscara de rede.
BROADCAST Endereço de broadcast da rede. Se o valor não for informado, ele será
calculado a partir da máscara de rede.
REMOTE_IPADDR Endereço IP de um host remoto, usado na conexão ponto a ponto.
Arquivo ifcfg-eth (configurações da interface de rede)
Além disso, podemos configurar a rede através do comando ifconfig.
O ifconfig é uma ferramenta de rede que serve para configurarmos interfaces de rede
assim como monitorar e gerenciar seu estado. Abaixo, um exemplo de seu uso:
SS3187 - v1.0 – CentOS 6.2 Página 213
Formação Intensiva Linux- 96 horas
# ifconfig eth0 [Link] up
O comando acima define que estamos atribuindo um endereço IP estático
([Link]) para a interface de rede eth0 e definindo que após atribuído o endereço, a
interface deve se tornar funcional (up).
Quando os parâmetros especificados forem diretos assim, ou seja, não for específicado
um endereço de rede e de broadcast, então o ifconfig fará isso automaticamente baseado no
endereço IP que a interface irá receber.
Se a máquina fizesse parte de uma rede com a máscara diferente do padrão,
poderíamos utilizar o comando com a opção netmask, como segue:
ifconfig eth0 [Link] netmask [Link] up.
Além disso, este comando também permite que configuremos interfaces virtuais.
As interfaces virtuais permitem que você tenha comunicação com duas redes diferentes
mesmo possuindo apenas uma interface de rede. Para isso, usamos o seguinte comando:
# ifconfig eth0:1 [Link] up
A configuração é feita da mesma forma que para uma interface única, apenas pelo fato
de indicarmos que a interface possui uma interface virtual, ilustrada pelo parâmetro eth0:1
onde :1 é a interface virtual e eth0 é a interface física.
NOTA: O uso de interfaces virtuais é aconselhado somente quando não existe
alternativa, como, por exemplo, utilizarmos outra interface de rede. Alguns
programas não funcionam adequadamente quando precisam enviar seus pacotes
através de interfaces virtuais.
SS3187 - v1.0 – CentOS 6.2 Página 214
Formação Intensiva Linux- 96 horas
Além dessas duas formas de configurarmos manualmente nossas interfaces de rede,
também podemos utilizar o modo gráfico para essa tarefa.
Para isso, no CentOs, devemos Acessar a ferramenta “system-config-network”, através
do seguinte caminho:
Comando: system-config-network
Na figura, a seguir, o menu inicial desta ferramenta:
SS3187 - v1.0 – CentOS 6.2 Página 215
Formação Intensiva Linux- 96 horas
Configurarando as interfaces de rede
É importante observar que no CentOS versão 6.2, a configuração das interfaces de rede
é integrada a ferramenta network-manager do gnome, caso esta interface gráfica tenha sido
instalada. Para desabilitar esta integração e permitir a configuração manual das interfaces, via
ferramenta “system-config-network” é necessário se proceder da seguinte forma:
Passo 1: Parar o NetworkManager, para isso usando o comando abaixo:
• Comando: /etc/init.d/NetworkManager stop
Passo 2: Desativar o NetworkManager para o runlevel utilizado:
• Comando: chkconfig –level 35 NetworkManager off
Após este último comando, poderemos editar diretamente as configurações de rede
desejadas, para isto utilizando a ferramenta “system-config-network”.
18.1 Configuração do Roteador Padrão
O roteador padrão é o dispositivo de rede que é responsável por encaminhar os pacotes
que um host dentro da rede não conheça o destino. Por exemplo, se temos uma rede A com 5
hosts, cada um deles se conhecem, ou seja, se o host 1 quiser mandar uma mensagem para o
host 2 ele sabe como encaminhar esta mensagem até o destino.
Entretanto, se o host 1 quiser mandar uma mensagem para um host que está fora do
domínio da rede A, então ele deverá enviar a mensagem para o roteador padrão. Este possui
uma tabela de redes que conhece, se o destino está nessas tabelas ele encaminha a mensagem
para o destino, caso contrário ele irá encaminhar a mensagem para o roteador padrão que ele
tem configurado. Assim, uma mensagem pode ir passando por diversos roteadores até chegar
ao seu destino final, ou seja, até que o seu destino seja conhecido.
Sempre que configurarmos manualmente um dispositivo de rede, não podemos nos
esquecer deste item muito importante, caso contrário nosso pacotes não saberão como fazer
para sair da rede, ou seja, se a mensagem não for para um dos hosts da rede não poderemos
enviar.
SS3187 - v1.0 – CentOS 6.2 Página 216
Formação Intensiva Linux- 96 horas
Para realizarmos a configuração da rota padrão manualmente, através dos arquivos de
configuração, iremos precisar criar um arquivo chamado ifroute-config onde config é o
nome da configuração usado no arquivo ifcfg-config.
Dentro deste arquivo iremos colocar as informações referentes às rotas. Tais dados
estarão dispostos em quatro colunas, conforme abaixo.
# Destino Gateway Máscara Dispositivo
[Link] [Link] [Link] eth0
[Link] [Link] [Link] eht0
A primeira coluna indica o destino. No exemplo nós possuímos duas rotas, a primeira é a
rota para a rede e a segunda é a nossa rota padrão.
A segunda coluna indica o caminho para essa rota. A primeira rota não precisa de
caminho, pois estamos ligados fisicamente na rede, a segunda rota que é a padrão, precisa ter o
endereço IP do roteador que cuidará do envio dos pacotes até seu destino.
A terceira coluna indica a máscara de rede utilizada na roda.
A quarta coluna indica por qual dispositivo os pacotes devem sair para alcançar o
destino.
Outra forma de adicionarmos uma rota padrão, através da linha de comando, é com o
comando route.
O comando route é usado para manipular as tabelas de roteamento IP do Kernel. Sua
principal funcionalidade é configurar rotas para o host ou para a rede depois que a interface
tenha sido configurada com o ifconfig. Além disso, esse comando pode ser utilizado para
mostrar quais rotas estão na tabela do Kernel. O que veremos mais adiante. Para adicionarmos
uma rota à nossa interface, utilizamos o comando abaixo:
• Comando: route add default gw [Link]
O primeiro parâmetro, add, indica que queremos adicionar uma nova rota. Depois temos
o parâmetro default gw que indica que queremos adicionar uma rota padrão e o último
parâmetro é o endereço IP do roteador padrão [Link], ou seja, é ao endereço IP que
devem ser encaminhados os pacotes caso o destino seja fora da rede onde o host que está
gerando os pacotes se encontre.
A ferramenta “system-config-network”, também permite configurar o roteador default.
Caso prefira fazer editando o arquivo manualmente então, devemos utilizar o comando abaixo:
• Comando: vi /etc/sysconfi/network-scripts/ifcfg-ethx
SS3187 - v1.0 – CentOS 6.2 Página 217
Formação Intensiva Linux- 96 horas
ONDE:
ethx: Nome d a Interface de rede utilizada (eth0, eth1, etc)
Modifique, para isso, o parâmetro “GATEWAY”, existente no arquivo da interface
desejada. Após, salve o arquivo e reinicie as configurações de rede:
• Comando: service network restart
18.2 Configuração do Cliente DNS
O DNS (Domain Name System), de maneira simples, é um serviço de tradução de
nomes, ou seja, quando você digita um endereço, como, por exemplo,
[Link] esse nome é traduzido para um endereço IP. Assim nosso browser
pode fazer a conexão com o site. Para configurarmos os nosso cliente de DNS, de forma
manual, precisamos editar o arquivo /etc/[Link].
Neste arquivo deverão ser colocadas as informações referentes ao servidor de nomes
que iremos utilizar. Abaixo podemos ver um exemplo deste arquivo.
# cat /etc/[Link]
nameserver [Link]
Acima está a linha que encontramos no arquivo /etc/[Link]. O parâmetro
nameserver é usado para determinar o endereço IP do nosso servidor de nomes.
Podemos ter mais de um servidor de nomes. O [Link] irá procurar em ordem,
ou seja, se o primeiro não puder ser contatado, então ele passa para o segundo, e assim por
diante.
SS3187 - v1.0 – CentOS 6.2 Página 218
Formação Intensiva Linux- 96 horas
18.3 O comando ifconfig
Como dito anteriormente, o comando ifconfig é utilizado tanto para configurarmos
nossos dispositivos de rede quanto adquirir informações de tais dispositivos.
Assim, se executarmos o comando ifconfig sem parâmetro algum, visualizaremos
informações de nossas interfaces de rede. A figura, abaixo ilustra a saída deste comando:
Saída do comando ifconfig
Para esse caso específico, o ifconfig retornou informações para dois dispositivos que
são o eth0 e o l0. Se existissem mais dispositivos configurados eles seriam mostrados
também. A interpretação para os valores que são apresentados é a seguinte:
• Link encap: Como visto anteriormente, o Linux suporta diversos tipos de
dispositivos de rede. Aqui é mostrado qual dispositivo está sendo usado.
• HWaddr: Mostra o endereço físico da placa de rede (MAC).
• inet addr: Mostra o endereço IP associado ao dispositivo.
• Bcast: Mostra o endereço para broadcast.
• Mask: Mostra a máscara da rede.
• inet6 addr: Mostra o endereço IP versão 6 da interface.
• Scope: Mostra o escopo do endereço IPv6.
SS3187 - v1.0 – CentOS 6.2 Página 219
Formação Intensiva Linux- 96 horas
• UP: Indica o estado da interface, ou seja, ativa.
• BROADCAST: Indica que a interface irá aceitar tráfego broadcast ethernet.
• NOTRAILERS: Indica que a interface não suporta encapsulamento do trailer.
• RUNNING: Indica que a interface está em execução.
• MULTICAST: Indica o suporte a multicast.
• MTU: Mostra a unidade máxima de transmissão do dispositivo.
• Metric: Usada pelos algoritmos de roteamento.
• RX: Mostra informações sobre o número de pacotes recebidos, e outros.
• TX: Mesmas informações que o RX, mas para pacotes enviados.
• Collisions: Mostra o número de colisões ethernet detectadas pelo dispositivo.
• txqueuelength: Tamanho da fila de transmissão.
• RX bytes: Bytes recebidos pela interface.
• TX bytes: Mesmo que RX bytes, mas para informações enviadas.
• Interrupt: Mostra a irq que esta interface está usando.
• Base address: Mostra o endereço de Hardware desta interface de rede.
Assim, sempre que precisarmos saber quaisquer dessas informações, apenas utilizamos
este comando para verificarmos se as configurações estão de acordo com a realidade da rede,
como, por exemplo, o endereço IP e a máscara da rede que estão configurados.
Para maiores informações sobre o comando ifconfig, pode-se utilizar o manual do
Linux ou acessar o endereço [Link]
SS3187 - v1.0 – CentOS 6.2 Página 220
Formação Intensiva Linux- 96 horas
18.4 O comando route
Assim como o ifconfig, o comando route é utilizado para ajustar as rotas do
dispositivo de rede assim como mostrar informações sobre as rotas já adicionadas.
Se o comando for usado sem parâmetro algum, ele irá, justamente, mostrar as
informações sobre as rotas conhecidas.
Abaixo, podemos visualizar a saída deste comando, conforme figura, a seguir:
Saída do comando route
A saída mostrada pelo comando route é dividida em sete colunas.
• Destination: Mostra o destino que estamos tentando alcançar, ou seja, se o destino
do pacote for à rede especificada ele seguirá por esta rota.
• Gateway: Informa para onde o pacote deve ser enviado caso a rede destino seja
escolhida. Via de regra teremos somente um Gateway. As rotas marcadas com
asterisco (*) não precisam de Gateway para ser alcançadas.
• Genmask: Mostra a máscara da rede para a rota determinada.
• Flags: Indica, através de flags, o estado da rota. U significa que a rota está rodando
(up) e G indica que para chegar ao destino será usado o Gateway.
• Metric: Indica a distância até a rota determinada.
• Ref: Indica o número de referências para a rota (não é usado no Kernel do Linux).
• Use: Contador de lookups para a rota.
• Iface: Interface que os pacotes usaram para determinada rota.
Podemos também usar o comando route com a opção –n. Isso fará com que o
comando não tente resolver os nomes, mostrando as rotas apenas como endereços IP.
Abaixo podemos visualizar essa saída, conforme a figura abaixo:
SS3187 - v1.0 – CentOS 6.2 Página 221
Formação Intensiva Linux- 96 horas
Saída do comando route –n
Para maiores detalhes do comando route, pode-se utilizar o manual do Linux ou
acessar o endereço [Link]
18.5 O comando hostname
O comando hostname é usado para definir um nome para o host ou então para mostrar
o nome do host. Assim, se quisermos mudar o nome do host da máquina precisamos apenas
passar um parâmetro para o comando, conforme abaixo:
• Comando: hostname dexter
Este comando fará com que o nome do host passe a ser conhecido como “dexter”.
Caso o prompt mostre o nome do host, este só será atualizado quando o usuário se
logar novamente ou quando o sistema for reiniciado.
Para mostrar o nome do host que você está conectado no momento, caso essa
informação não seja providenciada pelo prompt, então você pode utilizar o comando hostname
sem parâmetros. A saída é semelhante à abaixo:
• Comando: hostname
dexter
A saída é o nome “dexter”, definida anteriormente.
SS3187 - v1.0 – CentOS 6.2 Página 222
Formação Intensiva Linux- 96 horas
18.6 O comando ping
O comando ping é muito utilizado para conhecermos o estado da nossa rede e poder
diagnosticar um problema quando ele ocorre.
Este programa envia pacotes ICMP (Internet Control Message Protocol) para um
endereço IP especificado, pedindo que a máquina destino responda com um pacote echo-
replay. Em geral, os pacotes ICMP são muito pequenos e não atrapalham o funcionamento
normal da rede. Estes pacotes são usados para testar a rota completa de rede, desde o
dispositivo de origem até o dispositivo de destino independente da localização física dos dois.
Para “pingar” um dispositivo você deve usar o comando ping e como parâmetro o
endereço IP da máquina alvo ou o hostname. Depois disso, uma série de informações será
mostrada na tela, como na figura, abaixo:
Saída do comando ping
Os dois campos que devemos observar nessa lista são o icmp_seq e o time.
O icmp_seq indica a seqüência de pacotes. Se a seqüência estiver incompleta significa
que estamos com problemas de perda de pacote entre os dois hosts.
Já o time indica o tempo que o pacote levou para sair do nosso dispositivo de origem,
chegar ao dispositivo alvo e retornar até nós novamente. A ocorrência de valores elevados nesse
campo pode indicar que a rede está congestionada.
Por fim encontramos as estatísticas geradas pelo comando após um tempo de
execução.
O ping informa o número de pacotes transmitidos e recebidos. A porcentagem de perda
e o tempo.
SS3187 - v1.0 – CentOS 6.2 Página 223
Formação Intensiva Linux- 96 horas
18.7 O comando traceroute
Caso você precise de informações mais detalhadas sobre as rotas que os pacotes estão
seguindo, ao invés somente do tempo que estão levando, então deverá usar uma ferramenta
mais refinada que o ping. O traceroute é essa ferramenta.
O protocolo TCP/IP utiliza uma notação de TTL (Time to Live). Este TTL é decrementado
em uma unidade toda vez que ele passa por um roteador. Assim que o TTL chega à zero, o
pacote é destruído. Este mecanismo evita que os pacotes fiquem eternamente viajando pela
rede sem destino o que acabaria congestionando-a.
O comando traceroute utiliza-se do TTL iniciando ele em 1. Assim, quando o pacote
chega no primeiro roteador, o TTL é decrementado para zero e o seu cliente receberá um pacote
ICMP informando que o pacote inicial foi destruído.
Para encontrar o próximo roteador para o destino específicado, o traceroute envia
outro pacote com o TTL no valor 2. Assim, este pacote conseguira ir a um roteador além, até que
seja destruído e você receba a mensagem de que o pacote foi destruído. Essa operação será
repetida até que um pacote seu chegue até o destino. O traceroute auxilia no diagnóstico de
problemas de conexão do seu dispositivo até o alvo. A figura abaixo ilustra o seu uso:
Saída do comando traceroute
Para cada roteador que o traceroute passar, uma linha será adicionada na lista que é
mostrada na figura acima.
Junto com o endereço do roteador, aparecem três tempos. Esses tempos são usados
para se obter uma média de resposta para cada rotedor.
SS3187 - v1.0 – CentOS 6.2 Página 224
Formação Intensiva Linux- 96 horas
18.8 Comandos de Testes de DNS
Depois de vermos algumas das ferramentas mais utilizadas para configurar e gerenciar
os dispositivos de rede veremos a utilização destes no diagnóstico de problemas de DNS.
Veremos agora alguns programas utilizados para testar o DNS.
O primeiro deles é o conhecido ping. Se pingarmos um endereço IP e obtivermos
resposta, ao contrário de quando pingamos um hostname, então temos um problema no nosso
servidor de nomes. Depois de diagnosticado esse problema, devemos editar o arquivo
/etc/[Link] e alterar o IP do nosso servidor de nomes.
A segunda forma de testarmos o DNS é através do comando nslookup.
O nslookup é um programa usado para fazer consultas no DNS. Essas consultas
podem ser feitas de forma interativa ou não. Para entrarmos no modo interativo, apenas
invocamos o nome do programa.
# nslookup
>
Acima, é mostrado o comando para entrar no modo interativo. Depois disso, devemos
definir qual é o servidor de nomes que queremos testar. Faremos isso com o comando server.
> server [Link]
Após o uso do comando server, aparecerão informações sobre o servidor de nome
escolhido.
Default server: [Link]
Address: [Link]#53
SS3187 - v1.0 – CentOS 6.2 Página 225
Formação Intensiva Linux- 96 horas
Pronto escolhido o servidor DNS pode começar as consultas. Para fazermos isto somente
precisamos colocar o nome de um host que queremos consultar.
> [Link]
Server: [Link]
Address: [Link]#53
Non-authoritative answer:
Name: [Link]
Address: [Link]
Acima podemos visualizar uma consulta feita no site [Link] e a resposta
retornada pelo DNS definido. Havendo resposta podemos concluir que o servidor de nomes está
funcionando de forma correta, caso contrário devemos testar outro DNS apenas usando o
comando server no modo interativo do nslookup.
O terceiro programa é o dig. Este está em fase de substituir o nslookup. A primeira
impressão com esse programa é que ele é bastante complexo de se entender. Abaixo podemos
visualizar, na figura, a saída do comando DIG:
Saída do comando dig
SS3187 - v1.0 – CentOS 6.2 Página 226
Formação Intensiva Linux- 96 horas
A saída deste programa é dividida em três partes.
A primeira parte da resposta é a seção QUESTION. Esta seção possui as informações
que foram enviadas originalmente para o servidor de nomes.
A segunda parte é a seção ANSWER. Nesta seção são apresentadas as respostas para
a requisição feita.
Por último encontramos a seção AUTHORITY. Esta seção informa o endereço IP do
controlador nos registros NS.
O último programa usado para testarmos o DNS é o host.
O host é uma alternativa user-friendly do nslookup. Sua saída é semelhante à figura
abaixo:
Saída do comando host
A saída ilustrada acima mostra diversas informações retornadas pelo servidor de nomes.
A primeira linha indica que o nome consultado, [Link], é na verdade
um apelido para [Link].
Na linha abaixo encontramos o endereço IP deste host e por fim encontramos
informações sobre os registros MX.
SS3187 - v1.0 – CentOS 6.2 Página 227
Formação Intensiva Linux- 96 horas
18.9 Usando Aplicativos Essenciais de Redes
Além dos programas já demonstrados, às vezes precisamos obter mais informações
sobre o tráfego da rede. Somente desta forma conseguimos fazer um levantamento do estado da
rede de forma mais precisa.
Para que possamos levantar estes dados, precisamos obter as informações de todos os
pacotes que passam em determinado ponto na rede, de preferência um ponto centralizado,
assim podemos obter dados sobre o real estado da rede. Uma ferramenta que obtêm essas
informações é o tcpdump.
O tcpdump é uma ferramenta que captura os pacotes da rede. Para capturar todos os
pacotes que chegam até a placa de rede, ele coloca a placa em modo promíscuo, ou seja,
mesmo que os pacotes que chegarem à placa não sejam endereçados para ela, eles serão
capturados pelo tcpdump e exibidos para o usuário.
Este comando possui diversas opções, abaixo serão mostradas apenas algumas mais
interessantes. Para visualizarmos os pacotes com as mínimas informações, utilizamos o
comando sem parâmetros.
SS3187 - v1.0 – CentOS 6.2 Página 228
Formação Intensiva Linux- 96 horas
A saída deste comando é mostrada na figura abaixo:
Saída do tcpdump
Se precisarmos visualizar a saída em formato hexadecimal, então podemos utilizar o
comando da seguinte forma.
SS3187 - v1.0 – CentOS 6.2 Página 229
Formação Intensiva Linux- 96 horas
A figura ilustra a saída deste comando.
Saída do comando tcpdump -x
Para mostrarmos mais informações sobre cada pacote capturado, podemos utilizar o modo
verbose através da opção –v. Quanto maior o número de “v” maior é a quantidade de
informações, ou seja, utilizando –v irá mostrar menos informações que se utilizado –vv que, por
sua vez, mostrará menos informações que –vvv. A saída deste comando é ilustrada na figura
abaixo:
# tcpdump –x –vvv
SS3187 - v1.0 – CentOS 6.2 Página 230
Formação Intensiva Linux- 96 horas
Saída do comando tcpdump -x -vvv
Dependendo do fluxo de dados que trafega na rede, as informações poderão passar
muito rápido na tela. Para registrar todas as informações podemos escrever a saída em um
arquivo binário do tcpdump da seguinte forma.
# tcpdump –x –vvv –w arquivo_de_saída
Podemos ainda direcionar a saída do tcpdump para um arquivo texto qualquer. Assim
não precisaremos utilizar a opção –w.
# tcpdump –x –vvv > arquivo_de_saída_texto
SS3187 - v1.0 – CentOS 6.2 Página 231
Formação Intensiva Linux- 96 horas
Para utilizarmos o arquivo gerado com a opção –w utilizaremos o comando abaixo.
# tcpdump -r arquivo_de_saída
Isso fará com que o arquivo seja interpretado e mostrado na tela.
Além destas opções, às vezes queremos filtrar todo o tráfego de um determinado IP ou
de uma determinada porta, para isso usamos as seguintes opções.
# tcpdump –x –vvv “src host [Link] && dst port 22”
O comando acima irá filtrar todos os pacotes que tiverem como destino o host
“[Link]” e a porta destino 22.
# tcpdump –x –vvv “dst port 80 || dst port 22”
Acima estamos filtrando todos os pacotes que tiverem a porta de destino 80 ou 22.
Além do tcpdump, podemos utilizar um programa gráfico para fazer esse tipo de
monitoramento. Através do ethereal, que é baseado no tcpdump, podemos visualizar de
forma muito mais amigável as informações dos pacotes.
SS3187 - v1.0 – CentOS 6.2 Página 232
Formação Intensiva Linux- 96 horas
Na figura abaixo, podemos visualizar o ethereal realizando a captura dos pacotes.
Wireshark (Ethereal) capturando os pacotes
Na figura acima é mostrada a fase de captura dos pacotes. À medida que vai obtendo
cada pacote, o ethereal vai mostrando o número deste obtido e classificado. No exemplo
acima podemos ver que foram capturados 83 pacotes TCP.
SS3187 - v1.0 – CentOS 6.2 Página 233
Formação Intensiva Linux- 96 horas
Depois de capturados os pacotes, é mostrada uma lista de informações sobre eles,
ilustrado na figura, abaixo.
Wireshak - Detalhes dos pacotes capturados
A figura acima é dividida em três partes. A parte mais acima mostra uma lista dos
pacotes capturados. Quando selecionamos um pacote em especial, seus detalhes são exibidos
na divisão do meio. Esses detalhes são as partes de um pacote. Se selecionarmos uma parte,
como, por exemplo, o protocolo HTTP selecionado, na divisão inferior será mostrado o conteúdo
desta seleção em hexadecimal.
SS3187 - v1.0 – CentOS 6.2 Página 234
Formação Intensiva Linux- 96 horas
18.10 FTP
O FTP é um protocolo para transferência de arquivos. Na linha de comando, teremos à
disposição uma série de comandos internos, os quais seguem:
Comando Descrição
Open Abre a conexão com um host remoto.
User Define o nome de usuário para efetuar o login no host remoto.
Ascii Define que a transmissão será no formato ascii.
Bin Define que a transmissão será no formato binário.
Hash Exibe “#” na transmissão do arquivo.
Cd Muda o diretório atual no host remoto.
Mkdir Cria um novo diretório no host remoto.
Get Realiza a transferência do host remoto para o local, de um arquivo.
Mget A mesma coisa que o get, entretanto para arquivos múltiplos.
Put Envia um arquivo do host local para o remoto.
Mput A mesma coisa que o put, entretanto para arquivos múltiplos.
Dir Lista o conteúdo do diretório remoto corrente.
Close Fecha a conexão com o host.
Bye Sai do programa ftp.
Help Mostra a lista completa dos comandos.
! Executa comando no shell local.
SS3187 - v1.0 – CentOS 6.2 Página 235
Formação Intensiva Linux- 96 horas
18.11 Telnet
O telnet é um programa utilizado para fazer o gerenciamento remoto dos dispositivos.
Entretanto, atualmente não é uma boa escolha devido à falta de segurança desta ferramenta.
Por não utilizar criptografia, toda a comunicação entre dois hosts pode ser capturada e
visualizada. Assim, é fácil obter informações importantes como senhas e nomes de usuários, por
exemplo.
Para executar esse comando usamos como abaixo.
# telnet [Link]
O comando acima irá realizar uma conexão com o host [Link].
Depois de estabelecida a conexão, estaremos operando no shell do dispositivo alvo
como se fosse localmente.
18.12 HTTP
A utilização deste protocolo se dá através de um navegador web ou browser como
também são conhecidos.
De forma direta, para navegarmos na Internet precisamos saber o endereço da página
que desejamos acessar, por exemplo, [Link]
Depois disso, só precisamos colocar o endereço no browser e utilizar o mouse para ir
clicando nos links mostrados, realizando a navegação do site.
SS3187 - v1.0 – CentOS 6.2 Página 236
Formação Intensiva Linux- 96 horas
18.13 Para Recordar
1. Configuração de rede: A configuração do dispositivo de rede é realizada em
dois passos. Primeiro configuramos o endereço IP, máscara e broadcast. Depois
precisamos configurar as rotas para esse dispositivo. Os comandos mais
utilizados para isso são o ifconfig e o route.
2. Configuração automática: Ainda que possamos configurar manualmente
nossos dispositivos de rede, podemos utilizar o protocolo DHCP para fazer isso
de maneira automática. Ele irá prover todas as informações necessárias, como,
por exemplo, endereço IP e roteador padrão.
3. Servidor de nome: Algumas vezes conseguimos acessar hosts pelo endereço
IP, mas não conseguimos acessar pelo nome do host. Em geral, isso caracteriza
um problema de DNS. Podemos editar o arquivo /etc/[Link] para
verificarmos se a configuração está correta. Além disso, podemos usar algumas
ferramentas de teste de DNS como: nslookup, dig e host.
4. Gerenciando tráfego: Algumas vezes é muito importante termos conhecimento
de qual tipo de tráfego está trafegando em nossa rede. Para fazermos isso é
necessário capturar tais fluxos. Isso pode ser feito através de ferramentas de
captura como o tcpdump ou ethereal.
5. Ferramentas de diagnóstico: Algumas ferramentas são muito importantes para
diagnosticarmos problemas na rede, tais como, ping, traceroute e
ifconfig.
SS3187 - v1.0 – CentOS 6.2 Página 237
Formação Intensiva Linux- 96 horas
18.14 Exercícios
1. Onde se localizam os scripts responsáveis pela configuração dos dispositivos de
rede?
2. Como eu configuro, de forma rápida, um dispositivo de rede eth0 com o
endereço IP [Link], máscara [Link] e roteador padrão
[Link]?
3. De que forma eu posso me certificar que a configuração está correta?
4. Cite três formas de descobrir o endereço IP para o nome [Link]?
5. Como fazer para gerenciar, remotamente, o host com endereço IP [Link]?
6. Como enviar o arquivo /home/tourinho/[Link] para o host [Link]?
SS3187 - v1.0 – CentOS 6.2 Página 238
Formação Intensiva Linux- 96 horas
Notas:
SS3187 - v1.0 – CentOS 6.2 Página 239