Modulo 5 - Gerenciamento do Sistema

Transcrição

Modulo 5 - Gerenciamento do Sistema
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
- Módulo 5 GERÊNCIA DE SISTEMA
Linux é um sistema operacional tipo Unix que foi desenvolvido por Linus Torvalds inspirado
no sistema Minix, que é uma versão simplificada do Unix, e que por fim veio do sistema Multics. O
Linux é um exemplo de desenvolvimento com código aberto e de software livre. O seu código
fonte está disponível sob licença GPL para qualquer pessoa utilizar, estudar, modificar e distribuir
livremente.
Um sistema Linux é capaz de funcionar em um grande número de arquiteturas
computacionais. É utilizado em supercomputadores, computadores pessoais e até em aparelhos
celulares.
O sistema operacional linux não amarra ambiente ou contexto a condições prefixadas de
fábrica pelos seus fornecedores.
A idéia de uso de um software livre e a de customizar e configurar as necessidades do seu
usuário.
Alguns sistemas operacionais têm seu Kernel prefixado de fábrica, exigindo o upgrade ou
até troca de sistema a cada bug corrigido pelo fornecedor. Nesse contexto o linux permite que
possa ser feito um estudo e compilação de recursos segundo as necessidades de uso.
Inicialmente um sistema linux tem um nível de segurança considerável. Todo usuário tem
uma identificação personalizada tendo roles de acesso às funcionalidades.
Por questões de operacionalidade é criado um usuário denominado como root (raiz) que não
possui limitações operacionais.
Diante do “poder” do superusuário, a NSA (National Security Agency) dos estados unidos
determinou que os sistemas linux não deverão possuir a funcionalidade de identificação de usuário
como root diretamente. Quando necessário, um super usuário pode ser invocado para executar
uma atividade a partir do comando sudo, onde emula a identificação de superusuário na hora de
executar atividades:
#sudo ls-la /etc
Assim, gerenciar o sistema operacional Linux bem como manipulá-lo passa pela correta
compreensão dos comandos no prompt de comandos.
1. GERENCIAMENTO DE PROCESSOS
Comandos no Linux para administração de processos:
a) top
Permite que sejam visualizadas as informações dos processos e estados de memórias e
processadores.
É uma ferramenta de tempo real e, portanto não precisa ser atualizada para ver os
diferentes momentos de leitura.
Permite a verificação de trabalho de cada um dos processadores em forma opcional.
Os parâmetros mais importantes são:
-p id só visualiza os dados desse processo
1
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
-H mostra as threads vinculadas com tal processo
b) htop
Possui recursos similares aos do comando top.
O comando htop pode não estar disponível nas instalações padrão do Linux. O uso de
aplicativos como apt-get (para distribuições Debian e derivadas) ou yum (para Red-hat ou
derivadas) podem fazer a instalação do item em questão de poucos minutos.
c) ps
Permite a visualização de um ou todos os processos em andamento. A variedade de
parâmetros faz impossível a reprodução dos mesmos aqui. Destacam-se:
-e para a visualização de todos os parâmetros;
-H para a visualização em forma de árvore hierárquica de processos;
-F para visualização de threads
d) kill e killall
São comandos que acabam com processos em andamento. O comando kill mata um único
processo informado pelo id.
O comando killall matará todos os comandos que obedeçam a um nome determinado.
e) renice
Altera a prioridade de funcionamento de um determinado processo. Os processos podem
ser individuais, de um usuário ou de um grupo.
f) strace
Este comando realiza o trace (roteamento) de todas as chamadas de sistema que são feitas
num determinado comando.
A saída deste comando pode ser realizada a um arquivo. Os dados resultantes são a
seqüência de chamadas de threads, com sua posição de memória, id de processos e um conjunto
de dados vinculados.
2. GERENCIAMENTO DE MEMÓRIA
Os comandos abaixo permitem a visualização e gerenciamento da memória:
a) free
Mostra espaços livres e ocupados da memória RAM e SWAP.
Parâmetros:
-b Visualiza os dados em bytes
-k Visualiza os dados em kilobytes
-m Visualiza os dados em megabytes
-g Visualiza os dados em gigabytes
2
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
Como se vê na figura abaixo há 249 Mb livres de memória RAM e, portanto não há uso de
memória SWAP.
Figura 1 - Comando Free
Na linha Mem é mostrada a memória física, em -/+ buffers/cache são mostrados
somente os processos que estão em execução e quanto tem disponível, ignorando os resíduos de
outros processos e em SWAP é mostrada a área de troca usada.
b) memstat
Lista todos os processos, executáveis e Libraries partilhadas que usam memória virtual.
Identifica quem está usando a memória virtual alta. De acordo com o manual do Linux, este
comando tem as seguintes opções de visualização:
-w Mostra os resultados estendidos sem truncar informações em 80 colunas
A desvantagem experimentada com o comando memstat é a quantidade de informações
que ele retorna. Por este motivo pode ser avaliada a praticidade de concatenar comandos com
filtros específicos.
Exemplo:
memstat -w | grep /var/cache
O resultado obtido mostra o consumo de memória por módulo, o nome de cada um deles e
os processos ao qual está vinculado.
c) pmap
Reporta o mapa de memória de um determinado processo. Este comando é específico de
um processo em particular. Ele poderá mostrar os módulos que são carregados nesse processo.
Para obter as informações deverá ser usado o comando ps para que seja visualizado o id
do processo para depois fornecê-lo como atributo do pmap.
3. GERENCIAMENTO DE MEMÓRIA VIRTUAL
Um comando útil para verificação da memória virtual no Linux é o vmstat. Como seu
nome sugere, são relatórios de estatísticas de memória virtual. Isso mostra o quanto de memória
virtual existe, quanto é livre e atividade de paginação. É possível ainda observar Page-ins e Pageouts.
3
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
Para monitorar a atividade de memória virtual em seu sistema, é melhor usar o vmstat com
um atraso. Um atraso é o número de segundos entre as atualizações. Se não for fornecido um
atraso, o relatório constará as médias desde a última inicialização. Dessa forma, cinco segundos é
o intervalo de atraso recomendado.
A sintaxe do comando é:
vmstat [intervalo] [contagem]
Para executar vmstat com um atraso de cinco segundos, digite:
vmstat 5
Ainda é possível especificar uma contagem, que indica quantas atualizações deseja-se
visualizar antes do comando ser encerrado.
Para executar vmstat com dez atualizações, cinco segundos de diferença, o comando é o
seguinte:
vmstat 5 10
Se não for especificado nenhum parâmetro, o vmstat mostra o status da memória virtual e
volta imediatamente para a linha de comando. A descrição dos campos do vmstat são as
seguintes:
Processos
r - Número de processos aguardando execução.
b - Número de processos em espera não interrompíveis.
w - Número de processos extraí-dos do arquivo de troca ou caso contrário em execução.
Memória
swpd - A quantidade de memória virtual usada em Kb.
free - Quantidade de memória livre em Kb.
buff - Quantidade de memória usada como buffer em Kb.
Memória Virtual
si - Quantidade de memória gravada para o disco Kb/s.
so - Quantidade de memória retirada do disco em Kb/s.
Entrada/Saída
bi - Blocos enviados para um dispositivo de bloco (medido em blocos por segundo).
bo - Blocos recebidos de um dispositivo de bloco (em blocos por segundo).
Sistema
in - Número de interrupções por segundo, incluindo o clock.
cs - Número de mudanças de contexto por segundo.
Porcentagem do total de tempo da CPU
us - Tempo do usuário
sy - Tempo do sistema
id - Tempo ocioso
Pode-se também usar o comando top para mostrar memória e estatísticas swap como
vimos no módulo anterior.
4
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
4. GERENCIAMENTO DE SISTEMA
Durante a utilização cotidiana do Linux é necessário acessar a algumas informações do
sistema, bem como alterar configurações. Para o administrador Linux bem desempenhar suas
funções é essencial poder identificar espaços livres, verificar os comandos, hora do sistema,
partições, etc.
a) df
O comando df mostra o espaço livre/ocupado de cada partição. Pode ser utilizado junto
com várias opções, se for utilizado sozinho, mostrará o espaço usado e disponível de todos os
sistemas de arquivos atualmente montados.
A sintaxe é: df [opções]
Opções:
-a - inclui sistema de arquivos com 0 blocos
-h - mostra o espaço livre/ocupado em MB, KB, GB em vez de bloco.
-k - lista em Kbytes
-l - somente lista sistema de arquivos locais
-m - lista em Mbytes
-T - lista o tipo de sistema de arquivos de cada partição.
Exemplo:
# df -a
b) du
O comando du é utilizado para saber o espaço utilizado em disco, por pastas ou arquivos,
de maneira rápida e fácil, diretamente no terminal.
A sintaxe é: du [opções] [arquivo|diretório]
Opções:
-a - Mostra todos os arquivos e não somente os diretórios.
-c - Mostra um total no final da listagem.
-h - Mostra as informações de maneira mais amigável.
-s - Mostra um sumário do diretório especificado e não o total de cada subdiretório.
-S - Exclui os subdiretórios da contagem.
Exemplo:
# du –h /home
c) durep
Cria relatórios de uso de disco com gráficos de barras, permitindo que se possa deduzir
facilmente que os diretórios estão usando mais espaço. Embora durep pode produzir saída de
texto semelhante ao du, o seu poder real reside na capacidade de armazenar relatórios em um
arquivo, que pode então ser visto como uma página web com o script fornecido cgi. Necessita ser
instalado.
d) last
Mostra a listagem dos últimos usuários logados.
5
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
A sintaxe é: last [opções]
Opções:
-n [num] - Mostra [num] linhas. Caso não seja usada, todas as linhas são mostradas.
-R - Não mostra o campo HostName.
-a - Mostra o hostname na última coluna. Será muito útil se combinada com a opção -d.
-d - Usa o DNS para resolver o IP de sistemas remotos para nomes DNS.
-x - Mostra as entradas de desligamento do sistema e alterações do nível de execução do
sistema.
Exemplos:
# last - Mostra a listagem geral
# last -a - Mostra a listagem geral incluindo o nome da máquina
# last aluno - Mostra somente atividades do usuário aluno
# last reboot - Mostra as reinicializações do sistema
# last tty1 - Mostra todas as atividades no tty1
e) history
O comando history (histórico) mostra a lista dos últimos comandos executados pelo usuário
corrente. Isso é útil quando há a necessidade de executar um comando extenso, com muitos
parâmetros, do qual não consigamos nos lembrar, ou para fazer auditoria.
A sintaxe é: history [opções]
Opções:
-c – Limpa os últimos comandos digitados.
-r – Recupera os últimos comandos digitados.
Exemplo:
# history
# history -c
# history -r
f) dmesg
O comando dmesg reapresenta as mensagens explicitadas pelo kernel durante a
inicialização do sistema, permitindo examiná-las já com o sistema iniciado.
A sintaxe é: dmesg [opções]
Opções:
-n num - mostra apenas mensagens de inicialização do nível num.
-c - apaga as mensagens após exibi-las (apenas o root pode usar este parâmetro).
Exemplo:
# dmesg -n1
g) arch
Exibe a arquitetura do computador. Equivale ao comando “uname –m”
Exemplo:
# arch
6
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
h) date
Mostrar a hora atual no formato dado, ou definir a data do sistema.
A sintaxe é: date [opção] ... [ +format] [format +]
date [ -u|--utc|--universal ] [ MMDDhhmm [[ CC ] YY ][ .ss ]] data [-u | - utc
| - universal] [. MMDDhhmm [[CC] YY] [ss]]
Opções:
-D, - date - tempo de exibição descrito por STRING.
-r , --reference - exibir a última modificação de ARQUIVO
-R , --rfc-822 - tempo definido descrito por STRING
-u , --utc , --universal - imprimir ou conjunto de Tempo Universal Coordenado
Parâmetros:
%A - dia da semana (domingo,..., sábado).
%B - nome do mês (janeiro,..., dezembro).
%H - hora do dia (0 a 23).
%M - minuto (0 a 59).
%S - segundos (0 a 61).
%T - hora no formato hh:mm:ss.
%Y - ano.
%a - dia da semana abreviado (dom,..., sab).
%b - nome do mês abreviado (jan,..., dez).
%c - dia da semana, data e hora.
%d - dia do mês (00-31).
%j - dia ano (1 a 366).
%m - mês (1 a 12).
%s - número de segundos desde das zero horas de 01/01/1970.
%w - dia da semana, onde 0 = domingo, 1 = segunda,..., 6 = sábado.
%x - representação da data local.
%y - os dois últimos dígitos do ano.
%r - formato de 12 horas completo (hh:mm:ss AM/PM)
Exemplos:
# date +%d/%m/%y
# date "+%d %B %Y"
# date mmddHHMMYYYY
# date
Para definir e sincronizar com o relógio do hardware:
# date 091418302008 | hwclock -w
i) hwclock
Consulta ou define o relógio do hardware.
A sintaxe é hwclock [Opção]
Opções:
-a – Adiciona ou subtrai tempo ao relógio.
7
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
--date=data – Data e a hora que dever atribuída ao relógio. Serve como argumento para o
comando date.
- r – Consulta o relógio do hardware.
- w – Atribui ao hardware a data/hora atuais do sistema.
Exemplos:
# date 091418302008
# hwclock -w
j) fdisk/sfdisk
Os comandos fdisk e sfdisk na verdade são utilitários completos para criar/remover/alterar
partições de um ou mais discos. Enquanto o fdisk, mais popular, lida com o usuário de forma
interativa, o sfdisk aceita somente linhas de comandos e parâmetros.
O parâmetro -l destes dois comandos mostram informações sobre um disco e sua lista de
partições com detalhes. Por isso, estes comandos são extremamente úteis para saber qual o atual
esquema de particionamento de um computador.
A sintaxe é: fdisk [Opção] [disco|partição]
Opções:
-v - Mostra o número da versão do fdisk
-l - Lista a tabela de partições
-b - Na listagem de tabelas de partições, imprime uma coluna de início.
-u - Na listagem de tabelas de partições, mostra os tamanhos em setores ao invés de
cilindros.
-s partição - O tamanho da partição (em blocos)
Exemplos:
# fdisk –l
# fdisk /dev/hda
k) tty
Imprimir o nome do arquivo do terminal conectado à entrada padrão.
A sintaxe é: tty [Opções]
Opções:
--help - Mostra mensagem de ajuda e sai.
-s ou --silent ou –quiet - Não mostra nada na saída padrão, mas retorna um estado de
saída.
--version - Mostra informações sobre a versão e sai.
Exemplo:
# tty
l) runlevel
Mostra o runlevel anterior e o atual. Seguindo o padrão anterior atual. Se o anterior for "N"
é porque não houve alteração.
Para altetar o runlevel utiliza-se o comando init.
A sintaxe é: runlevel
8
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
Exemplo:
#runlevel
#init 0 (Desliga a máquina)
m) rcconf
Utilitário usado para gerenciar os serviços do seu servidor. Necessita ser instalado. Depois
de instalado abrirá uma tela azul. Marque para ativar a inicialização e desmarque para desativar a
inicialização.
4.1. Parar e inicializar serviços
Primeiramente é necessário diferenciar service, daemon e process.
- Service (serviço), como a própria tradução para português diz, tem a função de oferecer
serviços à outros programas. Ele geralmente é iniciado/controlado por um shell script (arquivo
executável que contém várias linhas de comandos em shell). Exemplo, para colocar o serviço SSH
no ar, utilizamos o comando "/etc/init.d/ssh start". Esse arquivo "/etc/init.d/ssh" nada mais
é do que um shell script que, dentre suas várias linhas, executa o daemon "sshd" que fica em
background oferecendo serviços à quem precisar (por exemplo, um cliente ssh).
- Daemon (tarefa) é um arquivo binário executável que quando chamado pelo serviço
correspondente (ex: /etc/init.d/ssh) se torna um processo em background. Um exemplo é o
"/usr/sbin/sshd" que é um daemon do SSH que abre a porta 22 TCP, oferecendo serviços de
conexão remota segura.
- Process (processo) é um binário executável que está na memória. Esse binário
executável pode ser um daemon ou qualquer outro tipo binário executável. Além disso, ele pode
está background ou não ou pode está oferecendo serviços ou não.
O daemon "/usr/sbin/sshd" quando executado é enviado para a memória do
computador, virando um processo do sistema. Numa outra mão, temos os binários que não são
daemons, como o soffice.bin (OpenOffice) que são processos que ficam em foreground, ou seja, é
possível vê-los na tela do meu computador e geralmente não oferecem serviços à outros
programas.
Exemplos:
# /etc/init.d/ssh start
# /etc/init.d/ssh stop
# /etc/init.d/ssh restart
# /etc/init.d/ssh reload
5. GERENCIAMENTO DE HARDWARE
A forma como o sistema operacional trabalha com o hardware é fator decisivo no
desempenho e estabilidade do sistema.
Um processador pode ser muito rápido por possuir diversos recursos, mas se o sistema
operacional não tiver suporte a esses recursos, não será possível extrair o máximo de desempenho
do processador.
9
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
Da mesma forma, um sistema pode ter muita memória RAM disponível, mas se o
gerenciamento de memória do sistema operacional for ineficaz, inevitavelmente teremos
problemas de lentidão e até mesmo travamentos.
Uma grande vantagem do GNU/Linux sobre outros sistemas operacionais está na
quantidade de itens de hardware que são suportados nativamente, ou seja, que não requerem a
instalação de drives externos. Geralmente, ao término da instalação de um sistema GNU/Linux
todos os itens já estão instalados, configurados e funcionando, isso porque, quando se desenvolve
o suporte a um novo item de hardware, ele é adicionado ao kernel Linux, tornando-se nativo. “
Entre o sistema operacional e o sistema computacional existem diversas camadas que
conversam umas com as outras permitindo uma resposta em conjunto.
Quando instalado um hardware podem existir atualizações de determinadas camadas para
aproveitamento maior dos recursos produzidos. No ambiente UNIX/Linux estas camadas são
denominadas de Hardware Abstraction Layer ou HAL. O HAL permite que aplicações desktop
façam a descoberta e uso do hardware dos sistemas computacionais a traves de simples, portáveis
e abstratas API´s.
Figura 2 - Hardware Abstraction Layer
O Linux se refere aos itens de hardware como dispositivos (devices), e os referencia como
arquivos. Os arquivos de dispositivo ficam no diretório /dev/. Dentro desse diretório existem vários
arquivos, um para cada dispositivo, além de subdiretórios que agrupam dispositivos de mesmo
tipo.
Veja abaixo alguns exemplos de arquivos de dispositivo:
/dev/fd0: Primeira unidade de disquete;
/dev/hda1: Primeira partição do primeiro disco rígido IDE;
/dev/psaux: Mouse PS/2;
/dev/dsp: Placa de som;
/dev/ttyS0: Primeira porta serial de comunicações, geralmente aquela
utilizada pelo mouse serial (COM1);
/dev/usb/lp0: Primeira impressora ligada USB;
/dev/video0: Primeira placa de captura de vídeo;
/dev/lp0: Primeira porta paralela, geralmente usada por impressoras;
/dev/null: Dispositivo nulo, usado para descartar saídas de programas;
10
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
5.1. Criando novos dispositivos
As distribuições GNU/Linux atuais possuem sistemas que criam automaticamente os
arquivos de dispositivos para os novos itens de hardware que são instalados.
Entretanto, como já dito, isso só é válido para o hardware que possui suporte nativo no
kernel Linux. Os demais vão requerer uma instalação manual, incluindo, eventualmente, a criação
do arquivo de dispositivo correspondente no diretório /dev/.
Para isso, vamos utilizar duas ferramentas:
a) MAKEDEV
O MAKEDEV fica localizado em /sbin/, possuindo um link simbólico dentro do diretório
/dev/. Ele é utilizado para criar, remover e atualizar novos arquivos de dispositivo no diretório
/dev/.
b) mknod
O mknod é usado para criar manualmente um arquivo de dispositivo dos tipos caracter ou
bloco. Os dispositivos de bloco são os que trabalham com armazenamento de dados, como
unidades de disco rígido, CD-R/RW, disquete, etc., e utilizam buffer.
Para MAKEDEV, basta acessar o diretório /dev/ e executá-lo com os devidos parâmetros.
# cd /dev
# ./MAKEDEV [opções] [parâmetros]
As opções do MAKEDEV são:
-n: Não atualiza os arquivos de dispositivo, apenas exibe as ações que seriam feitas;
-d: Apaga os dispositivos existentes;
-v: Exibe mensagens informando o que está sendo feito durante a execução do MAKEDEV.
Os principais parâmetros são:
update: Atualiza os dispositivos, criando arquivos para os novos e apagando os que não
existem mais;
generic: Cria uma lista genérica de dispositivos, o básico para o uso do sistema;
ram: Cria os dispositivos de ramdisk;
initrd: Cria a ramdisk que será carregada pelo sistema operacional durante a inicialização;
cpu ou microcode: Cria os dispositivos da interface de atualização do microcódigo do
processador no diretório /dev/cpu/;
rom: Cria os dispositivos de memória ROM (somente leitura);
console: Cria novos consoles virtuais (terminais);
std: Cria os dispositivos do tipo mem, kmem, port, core, full, random, urandom, tty e loop.
Para criar um novo dispositivo, acesse o diretório /dev/, e utilize o mknod seguido dos
parâmetros adequados.
# cd /dev
# mknod [opções] [nome] [tipo] [maior] [menor]
11
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
As principais opções são:
-m: Determina as permissões do arquivo gerado;
--help: Exibe os principais parâmetros do mknod;
--version: Exibe a versão do mknod.
Em [nome], coloque o nome do arquivo de saída. Pode ser qualquer nome formado de
apenas uma palavra, sem espaços ou caracteres especiais, e de preferência todo em minúsculas.
Os tipos que podem ser usados são:
b: Cria um dispositivo de bloco;
c ou u: Cria um dispositivo de caracter;
p: Cria um FIFO, que possibilita monitorar o tráfego de informações através de um
determinado dispositivo.
Depois, temos que colocar o número maior e o menor do dispositivo. Para isso, veja o
arquivo /proc/devices, procure o dispositivo que você criar, e anote o número que aparece na
primeira coluna.
5.2. Ferramentas para visualização e alteração do ambiente computacional
Algumas das funcionalidades mais práticas que os ambientes operacionais abertos
oferecem de forma transparente é que o administrador do ambiente operacional, seja ele um
usuário de um único equipamento ou de uma vasta rede de computadores, tem comandos que lhe
permitem realizar verdadeiras “fotografias” do sistema computacional que se encontra em suas
mãos.
A seguir são apresentadas algumas ferramentas que permitem a visualização e alteração
do ambiente computacional:
a) lspci
Identificar o hardware de um computador. Obtém onde (qual barramento PCI) o hardware
está localizado, o tipo de hardware, sua marca e modelo.
A sintaxe é: lspci[Opções]
Opções:
-b – Exibe os IRQ’s e os endereços conforme são vistos pelas placas no barramento PCI.
-d[fabricante]:[id] – Exibe apenas os dispositivos com o fabricante e o ID de dispositivo
especificados.
-M – Aciona o mapeamento do barramento PCI, para localizar todos os dispositivos.
-t – Exibe os barramentos PCI em formato de árvore.
-v – Exibe informações detalhadas sobre os dispositivos.
Exemplo:
# lspci -v
b) lsusb
Exibe informações sobre os barramentos USB do computador e sobre os dispositivos a eles
conectados.
12
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
A sintaxe é lsusb[Opções]
Opções:
-D – Exibe informações sobre um dispositivo.
-t – Exibe os barramentos USB em um formato de árvore.
-v – Exibe informações detalhadas sobre os dispositivos.
Exemplo:
# lsusb –t
c) disktype
Exibe qual sistema de arquivos está sendo utilizado. Necessita ser instalado.
A sintaxe é disktype[Opções]
Exemplo:
# disktype /dev/hda1
d) lshw
Fornece informações detalhadas da configuração do hardware de uma máquina. Ele pode
relatar a exata configuração da memória, versão do firmware, configuração da placa mãe, versão
e velocidade da CPU, configuração da memória cache, velocidade do barramento, etc.
A sintaxe é lshw[Opções]
Opções:
-short - Lista o hardware de forma resumida.
-businfo - Mostra as informações do barramento.
-C xxxxx - Lista apenas os dispositivos de uma determinada classe, exemplo:
-C disk -C storage - Essas classes estão explicadas no arquivo gerado pelo meu hardware e
disponível no artigo.
-enable xxx - Habilita o modo de detecção de hardware, exemplo: lshw -enable dmi
-disable xxx - Habilita e desabilita os modos de detecção de hardware, exemplo:lshw disable dmi
-html - Gera um relatório em html.
-xml - Gera um arquivo em xml.
Exemplo:
Para gerar os relatórios basta redirecionar a saída do lshw para um arquivo, exemplo:
# lshw -html >> hardware.html
# lshw -short >> hardware_short.txt
# lshw -xml -C system >> hardware.xml
# lshw >> hardware.txt
e) hwinfo
Exibe informações sobre todos, ou um hardware em específico.
A sintaxe é hwinfo[Opções]
Opções:
--short – Exibe uma pequena lista.
--hw_item – Exibe informações de um hardware em específico.
13
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
hw_item pode ser all, bios, block, bluetooth, braille, bridge, camera, cdrom, chipcard, cpu,
disk, dsl, dvb, fingerprint, floppy, framebuffer, gfxcard, hub, ide, isapnp, isdn, joystick, keyboard,
memory, modem, monitor, mouse, netcard, network, partition, pci, pcmcia, pcmcia-ctrl, pppoe,
printer, scanner, scsi, smp, sound, storage-ctrl, sys, tape, tv, usb, usb-ctrl, vbe, wlan, zip
Dentro do diretório /proc/ estão diversos arquivos que contém informações avançadas
sobre o sistema. Para ver essas informações, basta usar o cat.
f) cat /proc/interrupts
Exibe os IRQ’s em uso no sistema.
Exemplo:
# cat /proc/interrupts
g) cat /proc/dma
Exibe os canais de DMA em uso no sistema.
Exemplo:
# cat /proc/dma
h) cat /proc/ioports
Exibe os endereços de I/O, em uso no sistema.
Exemplo:
# cat /proc/ioports
i) cat /proc/iomem
Mostra o mapa de memória de sistema para cada periférico físico instalado. Na coluna da
esquerda tem os endereços de memória ocupados e na coluna da direita tem o recurso que a
ocupa.
Exemplo:
# cat /proc/iomem
j) cat /proc/cpuinfo
Exibe informações sobre o processador. Apresenta um relatório de cada um dos núcleos de
processamento do sistema computacional.
Exemplo:
# cat /proc/cpuinfo
k) cat /proc/swaps
Mensura o tamanho da memória swap em uso e a sua localização.
Exemplo:
# cat /proc/swaps
l) cat /proc/meminfo
Exibe informações sobre o total da memória e seu uso por outros aplicativos.
14
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
Exemplo:
# cat /proc/meminfo
m) cat /proc/partitions
Exibe informações as partições do disco rígido.
Exemplo:
# cat /proc/partitions
n) memtest86+
Memtest86 e Memtest86+ são softwares de código aberto que permitem o teste físico e de
stress de memórias RAM nos sistemas computacionais.
Figura 3 - Memtest86+
6. GERENCIAMENTO DE KERNEL
Para o gerenciamento e inserção de alguns recursos no sistema operacional, em alguns
casos é necessária a recompilação do kernel. Para poder realizar esta tarefa são apresentados
conceitos e comandos que venham contribuir com o melhoramento da performance de recursos do
sistema computacional.
Uma distribuição Linux como Debian, Red Hat, SuSE, Slackware, dentre outras, utiliza um
kernel que foi compilado pelos desenvolvedores da distribuição. Esse kernel deve ser capaz de
rodar em praticamente qualquer computador e dar suporte a qualquer tipo de recurso que o
usuário pretenda utilizar. O desenvolvedor compila um kernel que fornece todas as funcionalidades
básicas e, em separado, compila pedaços de código que dão suporte a funcionalidades mais
específicas denominadas módulos. Dessa forma, quando o sistema é carregado, um kernel básico
se coloca na memória e passa a controlar a máquina.
15
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
Neste ponto são verificadas outras funcionalidades como as que permitem ao kernel dar
suporte a uma partição XFS. Se o kernel não possuir suporte nativo a esse sistema de arquivos, é
necessário que tal módulo seja compilado e instalado. Se esse módulo for encontrado, ele será
carregado expandindo as funcionalidades do kernel.
6.1. Comandos para Gerenciamento do Kernel
a) lsmod
Lista os módulos que estão carregados em memória. Cada módulo não chega a ser um
device, porem são libraries que contribuem com o melhoramento de serviço de recursos.
Na imagem ao lado podem ser vistos módulos como ip_tables (segurança) e usb_storage
(para manuseio de armazenamentos em usb) convivendo no sistema operacional.
Figura 4 – lsmod
b) insmod
Programa que permite inserir módulos no kernel para posterior compilação.
A sintaxe é insmod [filename] [module options ...]
Opções:
-f force - Força a remoção
-v verbose - mostra o andamento
-s syslog - manda log ao sistema
-V version - mostra a versão
c) rmmod
Programa que permite remover módulos no kernel para posterior compilação.
A sintaxe é rmmod [-f] [-w] [-s] [-v] [modulename]
16
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
d) modprobe
Programa que permite adicionar e remover módulos no kernel. O modprobe verifica no
diretório /lib/modules/'uname -r' por todos os módulos e arquivos que estão disponíveis, exceto
pelos opcionais que se encontram na configuração do arquivo /etc/modprobe.conf e do diretório
/etc/modprobe.d
Figura 5 - modprobe.d
e) depmod
Os utilitários depmod e modprobe são orientados a fazer um kernel modular e manipulável
pelos usuários autorizados para tal fim. depmod cria um arquivo de dependências similar ao
"Makefile", baseado em símbolos que procuram um conjunto de módulos mencionados na linha de
comando ou dos diretórios especificados no arquivo de configurações. Este arquivo de
dependências será usado pelo modprobe para ser carregar automaticamente no módulo certo da
pilha de módulos.
f) /etc/modules
A função deste arquivo é carregar módulos especificados na inicialização do sistema e
mantê-los carregado todo o tempo. É útil para módulos de placas de rede que precisam ser
carregados antes da configuração de rede feita pela distribuição e não podem ser removidos
quando a placa de rede estiver sem uso.
Seu conteúdo é uma lista de módulos (um por linha) que serão carregados na inicialização
do sistema. Os módulos carregados pelo arquivo /etc/modules pode ser listados usando o
comando lsmod.
Se o parâmetro auto estiver especificado como um módulo, o kmod será ativado e
carregará os módulos somente em demanda, caso seja especificado noauto o programa kmod será
desativado. O kmod é ativado por padrão nos níveis de execução 2 ao 5.
Ele pode ser editado em qualquer editor de textos comum ou modificado automaticamente
através do utilitário modconf.
6.2. Atualização de kernel/Aplicando patches no kernel
Patches são modificações geradas pelo programa diff em que servem para atualizar um
programa ou texto. Este recurso é muito útil para os desenvolvedores, pois podem gerar um
arquivo contendo as diferenças entre um programa antigo e um novo (usando o comando diff) e
enviar o arquivo contendo as diferenças para outras pessoas.
As pessoas interessadas em atualizar o programa antigo, podem simplesmente pegar o
arquivo contendo as diferenças e atualizar o programa usando o patch.
17
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
Isto é muito usado no desenvolvimento do kernel do GNU/Linux em que novas versões são
lançadas freqüentemente e o tamanho kernel completo compactado ocupa cerca de 18MB. Para
atualizar o kernel é possível fazê-lo baixando um patch em ftp://ftp.kernel.org/.
Para aplicar um patch que atualizará o kernel 2.6.23 para a versão 2.6.24 o procedimento
será o seguinte:
- Descompactar o código fonte do kernel 2.6.23 em /usr/src/linux ou certificar-se que
existe um link simbólico do código fonte do kernel para /usr/src/linux.
- Copiar o arquivo patch-2.6.24.gz de ftp://ftp.kernel.org/ para /usr/src.
- Usar o comando gzip -dc patch-2.6.24|patch -p0 -N -E para atualizar o código fonte em
/usr/src/linux para a versão 2.6.24.
Alternativamente pode-se primeiro descompactar o arquivo patch-2.6.24.gz com o gzip e
usar o comando patch -p0 -N -E <patch-2.6.24 para atualizar o código fonte do kernel. O
GNU/Linux permite que se obtenha o mesmo resultado através de diferentes métodos.
Para a atualização em questão é necessário aplicar os patches em seqüência (do patch
2.6.20 ao 2.6.24). Vale a pena observar se o tamanho total dos patches ultrapassa ou chega
perto o tamanho do kernel completo, pois dependendo da quantidade de alterações pode ser mais
viável baixar diretamente a nova versão.
7. COMPACTAÇÃO DE ARQUIVOS
Os compactadores são programas que diminuem o tamanho de um arquivo (ou arquivos)
através da substituição de caracteres repetidos. Para entender melhor como eles funcionam, veja
o próximo exemplo:
A frase “compactadores compactam e deixam arquivos compactados.” após a compactação seria
vista da seguinte forma:
“%dores %m e deixam arquivos %dos”
Para controle dos caracteres que são usados nas substituições, os programas de
compactação mantêm cabeçalhos com todas as substituições usadas durante a compactação. O
tamanho do cabeçalho pode ser fixo ou definido pelo usuário, depende do programa usado na
compactação.
Este é um exemplo bem simples para entender o que acontece durante a compactação, os
programas de compactação executam instruções muito avançadas e códigos complexos para
atingir uma alta taxa de compactação.
Observações:
- Não é possível trabalhar diretamente com arquivos compactados! É necessário
descompactar o arquivo para usá-lo. Note que alguns programas atualmente suportam a abertura
de arquivos compactados, mas na realidade eles apenas simplificam a tarefa descompactando o
arquivo, abrindo e o recompactando assim que o trabalho estiver concluído.
- Arquivos de texto têm uma taxa de compactação muito melhor que arquivos binários,
porque possuem mais caracteres repetidos. É normal atingir taxas de compactação de 10 para 1
ou mais quando se compacta um arquivo texto. Arquivos binários, como programas, possuem uma
taxa de compactação média de 2:1.
18
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
- Note que também existem programas compactadores especialmente desenvolvidos para
compactação de músicas, arquivos binários, imagens, textos.
7.1. Extensões de arquivos compactados
As extensões identificam o tipo de um arquivo e assim o programa o programa necessário
para trabalhar com aquele tipo de arquivo. Existem dezenas de extensões que identificam arquivos
compactados. Quando um arquivo (ou arquivos) é compactado, uma extensão correspondente ao
programa usado é adicionada ao nome do arquivo (caso o arquivo seja compactado pelo gzip
receberá a extensão .gz, por exemplo). Ao descompactar acontece o contrário: a extensão é
retirada do arquivo. Abaixo segue uma listagem de extensões mais usadas e os programas
correspondentes:
a) .gz
Arquivo compactado pelo gzip. Use o programa gzip para descompactá-lo.
b) .bz2
Arquivo compactado pelo bzip2. Use o programa bzip2 para descompactá-lo.
b) .Z
Arquivo compactado pelo programa compress. Use o programa uncompress para
descompactá-lo.
c) .zip
Arquivo compactado pelo programa zip. Use o programa unzip para descompactá-lo.
d) .rar
Arquivo compactado pelo programa rar. Use o programa rar para descompactá-lo.
e) .tar.gz
Arquivo compactado pelo programa gzip no utilitário de arquivamento tar. Para
descompactá-lo, pode-se usar o gzip e depois o tar ou somente o programa tar usando a opção -z.
f) .tgz
Abreviação de .tar.gz.
g) .tar.bz2
Arquivo compactado pelo programa bzip2 no utilitário de arquivamento tar. Para
descompactá-lo, pode-se usar o bzip2 e depois o tar ou somente o programa tar usando a opção j.
19
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
h) .tar.Z
Arquivo compactado pelo programa compress no utilitário de arquivamento tar. Para
descompactá-lo, pode-se usar o uncompress e depois o tar ou somente o programa tar usando a
opção -Z.
7.2. Ferramentas para compactação/descompactação
A seguir algumas das ferramentas mais comumente utilizadas na compactação de arquivos:
a) gzip
É praticamente o compactador padrão do GNU/Linux, possui uma ótima taxa de
compactação e velocidade. A extensão dos arquivos compactados pelo gzip é a .gz, na versão para
DOS, Windows NT é usada a extensão .z.
A sintaxe é gzip [opções] [arquivos]
Onde:
Arquivos
Especifica quais arquivos serão compactados pelo gzip. Caso seja usado um -, será
assumido a entrada padrão. Curingas podem ser usados para especificar vários arquivos de uma
só vez.
Opções
-d, --decompress [arquivo] - Descompacta um arquivo.
-f - Força a compactação, compactando até mesmo links.
-l [arquivo] - Lista o conteúdo de um arquivo compactado pelo gzip.
-r - Compacta diretórios e sub-diretórios.
-c [arquivo] - Descompacta o arquivo para a saída padrão.
-t [arquivo] - Testa o arquivo compactado pelo gzip.
-[num], --fast, --best - Ajustam a taxa de compactação/velocidade da compactação.
Quanto melhor a taxa menor é a velocidade de compactação e vice versa. A opção --fast
permite uma compactação rápida e tamanho do arquivo maior. A opção --best permite uma
melhor compactação e uma velocidade menor.
O uso da opção -[número] permite especificar uma compactação individualmente usando
números entre 1 (menor compactação) e 9 (melhor compactação). É útil para buscar um bom
equilibro entre taxa de compactação/velocidade (especialmente em computadores muito lentos).
Quando um arquivo é compactado pelo gzip, é automaticamente acrescentada a extensão
.gz ao seu nome.
O gzip também reconhece arquivos compactados pelos programas zip, compress, compress
-H e pack. As permissões de acesso dos arquivos são também armazenadas no arquivo
compactado.
20
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
Exemplos:
gzip -9 texto.txt - Compacta o arquivo texto.txt usando a compactação máxima
(compare o tamanho do arquivo compactado usando o comando ls -la).
gzip -d texto.txt.gz - Descompacta o arquivo texto.txt
gzip -c texto.txt.gz - Descompacta o arquivo texto.txt para a tela
gzip -9 *.txt - Compacta todos os arquivos que terminam com .txt
gzip -t texto.txt.gz - Verifica o arquivo texto.txt.gz.
b) tar
Na verdade o tar não é um compactador e sim um "arquivador" (ele junta vários arquivos
em um só), mas pode ser usado em conjunto com um compactar (como o gzip ou zip) para
armazená-los compactados. O tar também é muito usado para cópias de arquivos especiais ou
dispositivos do sistema. É comum encontrar arquivos com a extensão .tar, .tar.gz, .tgz, .tar.bz2,
.tar.Z, .tgZ, o primeiro é um arquivo normal gerado pelo tar e todos os outros são arquivos
gerados através tar junto com um programa de compactação (gzip (.gz), bzip2 (.bz2) e compress
(.Z).
A sintaxe é tar [opções] [arquivo-destino] [arquivos-origem]
Onde:
Arquivo-destino
É o nome do arquivo de destino. Normalmente especificado com a extensão .tar caso seja
usado somente o arquivamento ou .tar.gz/.tgz caso seja usada a compactação (usando a opção z).
Arquivos-origem
Especifica quais arquivos/diretórios serão compactados.
Opções
-c, --create - Cria um novo arquivo .tar
-t, --list - Lista o conteúdo de um arquivo .tar
-u, --update - Atualiza arquivos compactados no arquivo .tar
-f, --file [HOST:]F - Usa o arquivo especificado para gravação ou o dispositivo /dev/rmt0.
-j, --bzip2 - Usa o programa bzip2 para processar os arquivos do tar
-l, --one-file-system - Não processa arquivos em um sistema de arquivos diferentes de
onde o tar foi executado.
-M, --multi-volume - Cria/lista/descompacta arquivos em múltiplos volumes. O uso de
arquivos em múltiplos volumes permite que uma grande cópia de arquivos que não cabe em um
disquete, por exemplo, seja feita em mais de um disquete.
-o - Grava o arquivo no formato VT7 ao invés do ANSI.
-O, --to-stdout - Descompacta arquivos para a saída padrão ao invés de gravar em um
arquivo.
--remove-files - Apaga os arquivos de origem após serem processados pelo tar.
-R, --record-number - Mostra o número de registros dentro de um arquivo tar em cada
mensagem.
--totals - Mostra o total de bytes gravados com a opção --create.
21
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
-v - Mostra os nomes dos arquivos enquanto são processados.
-V [NOME] - Inclui um [NOME] no arquivo tar.
-W, --verify - Tenta verificar o arquivo gerado pelo tar após gravá-lo.
-X - Extrai arquivos gerados pelo tar
-X [ARQUIVO] - Tenta apagar o [ARQUIVO] dentro de um arquivo compactado .tar.
-Z - Usa o programa compress durante o processamento dos arquivos.
-z - Usa o programa gzip durante o processamento dos arquivos.
--use-compress-program [PROGRAMA] - Usa o [PROGRAMA] durante
processamento dos arquivos. Ele deve aceitar a opção -d.
-[0-7][lmh] - Especifica a unidade e sua densidade.
o
A extensão precisa ser especificada no arquivo de destino para a identificação correta:
- Arquivos gerados pelo tar precisam ter a extensão .tar
- Caso seja usada a opção -j para compactação, a extensão deverá ser .tar.bz2
- Caso seja usada a opção -z para compactação, a extensão deverá ser .tar.gz ou .tgz
- Caso seja usada a opção -Z para a compactação, a extensão deverá ser .tar.Z ou .tgZ
É importante saber qual o tipo de compactador usado durante a geração do arquivo .tar
pois será necessário especificar a opção apropriada para descompactá-lo.
Exemplos:
tar -cf index.txt.tar index.txt - Cria um arquivo chamado index.txt.tar que
armazenará o arquivo index.txt. Pode-se notar digitando ls -la que o arquivo index.txt foi somente
arquivado (sem compactação), isto é útil para juntar diversos arquivos em um só.
tar -xf index.txt.tar - Desarquiva o arquivo index.txt criado pelo comando acima.
tar -czf index.txt.tar.gz index.txt - O mesmo que o exemplo de
arquivamento anterior, só que agora é usado a opção -z (compactação através do programa gzip).
Você agora pode notar digitando ls -la que o arquivo index.txt foi compactado e depois arquivado
no arquivo index.txt.tar.gz (você também pode chamá-lo de index.txt.tgz que também identifica
um arquivo .tar compactado pelo gzip)
tar -xzf index.txt.tar.gz - Descompacta e desarquiva o arquivo index.txt.tar.gz
criado com o comando acima.
gzip -dc index.tar.gz | tar -xf - Faz o mesmo que o comando acima só que de
uma forma diferente: Primeiro descompacta o arquivo index.txt.tar.gz e envia a saída do arquivo
descompactado para o tar que desarquivará o arquivo index.txt.
tar -cjf index.txt.tar.bz2 index.txt - Arquiva o arquivo index.txt em
index.txt.tar.bz2 compactando através do bzip2 (opção -j).
tar -xjf index.txt.tar.bz2 - Descompacta e desarquiva o arquivo index.txt.tar.bz2
criado com o comando acima.
bzip2 -dc index.txt.tar.bz2 | tar -xf - Faz o mesmo que o comando acima só
que de uma forma diferente: Primeiro descompacta o arquivo index.txt.tar.bz2 e envia a saída do
arquivo descompactado para o tar que desarquivará o arquivo index.txt.
tar -t index.txt.tar - Lista o conteúdo de um arquivo .tar.
22
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
tar -tz index.txt.tar.gz - Lista o conteúdo de um arquivo .tar.gz.
c) bzip2
É um novo compactador que vem sendo cada vez mais usado porque consegue atingir a
melhor compactação em arquivos texto se comparado aos já existentes (em conseqüência sua
velocidade de compactação também é menor; quase duas vezes mais lento que o gzip). Suas
opções são praticamente as mesmas usadas no gzip e também pode-se usá-lo da mesma forma. A
extensão dos arquivos compactados pelo bzip2 é a .bz2
A sintaxe é bzip2 [opções] [arquivos]
Onde:
Arquivos
Especifica quais arquivos serão compactados pelo bzip2. Caso seja usado um -, será
assumida a entrada padrão. Curingas podem ser usados para especificar vários arquivos de uma
só vez (veja Curingas, Seção 2.3).
Opções
-d, --decompress [arquivo] - Descompacta um arquivo.
-f - Força a compactação, compactando até mesmo links.
-l [arquivo] - Lista o conteúdo de um arquivo compactado pelo bzip2.
-r - Compacta diretórios e sub-diretórios.
-c [arquivo] - Descompacta o arquivo para a saída padrão.
-t [arquivo] - Testa o arquivo compactado pelo bzip2.
-[num], --fast, --best - Ajustam a taxa de compactação/velocidade da compactação.
Quanto melhor a taxa menor é a velocidade de compactação e vice versa. A opção --fast
permite uma compactação rápida e tamanho do arquivo maior. A opção --best permite uma
melhor compactação e uma velocidade menor.
O uso da opção -[número] permite especificar uma compactação individualmente usando
números entre 1 (menor compactação) e 9 (melhor compactação). É útil para buscar um bom
equilibro entre taxa de compactação/velocidade (especialmente em computadores muito lentos).
Quando um arquivo é compactado pelo bzip2, é automaticamente acrescentada a extensão
.bz2 ao seu nome. As permissões de acesso dos arquivos são também armazenadas no arquivo
compactado.
Exemplos:
bzip2 -9 texto.txt - Compacta o arquivo texto.txt usando a compactação máxima
(compare o tamanho do arquivo compactado usando o comando ls -la).
bzip2 -d texto.txt.bz2 - Descompacta o arquivo texto.txt
bzip2 -c texto.txt.bz2 - Descompacta o arquivo texto.txt para a saída padrão (tela)
bzip2 -9 *.txt - Compacta todos os arquivos que terminam com .txt
bzip2 -t texto.txt.bz2 - Verifica o arquivo texto.txt.bz2.
23
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
8. COMPILAÇÃO DE PROGRAMAS
A compilação é a transformação de um programa em código fonte (programa escrito pelo
programador) em linguagem de máquina (programa executável).
Existem centenas de linguagens de programação diferentes umas das outras, cada uma
oferece recursos específicos para atender melhor uma necessidade ou características particulares,
algumas são voltadas para bancos de dados, outras somente para a criação de interfaces
comunicação (front-ends), aprendizado, etc. Cada linguagem de programação possui comandos
específicos que desempenham alguma função, mas todas trabalham com variáveis de memória
para a manipulação de dados de entrada/processamento.
A compilação de programas é uma tarefa necessária quando se deseja instalar um
programa na qual só se tem os fontes. Assim sendo o que deve fazer é descompactar, compilar e
instalar o programa.
Para essa tarefa é necessário ter acesso root ao sistema assim como possuir o(os)
arquivo(os) fontes já descompactados.
No exemplo abaixo adotamos a instalação de uma calculadora científica que pode ser
encontrada em ftp.gnu.org/gnu/bc/.
Como regra geral entre no diretório onde os fontes foram descompactados e leia o arquivo
README e INSTALL, pois neles contém informações sobre o programa e a instalação.
A sequência de comandos é a seguinte:
#./configure
#make
#make install
O comando ./configure é na verdade um script, uma série de instruções gravadas em um
arquivo texto que são entendidas pelo Linux como comandos. O que estes comandos fazem
basicamente é verificar a existência de uma série de arquivos do sistema operacional,
imprescindíveis para que se possa gerar o arquivo executável. O produto final do comando é um
arquivo chamado Makefile que contém parâmetros que serão lidos pelo comando make, detalhado
a seguir.
O comando make gera o programa final através da checagem de diversas dependências e
da execução de programas de compilação e link-edição.
A grande maioria dos programas para o ambiente Linux é codificada nas linguagens C e
C++. Por exemplo, dois módulos que compõem o bc são o numeric.c e o string.c, cada um
contendo funções que executam tarefas específicas: o numeric.c faz todo o tratamento de
operações aritméticas, enquanto o string.c trata as cadeias de caracteres digitadas.
O comando make checa ainda os módulos e os includes dos quais os módulos dependem,
para verificar se não houve nenhuma mudança, comparando as datas de criação de cada um. O
comando make é bastante poderoso e genérico. Ele é um dos integrantes da “caixa de
ferramentas” do Linux. Seu principal objetivo é o de automatizar as tarefas relativas à geração de
programas, desde a compilação até a instalação dos programas no sistema. O make não serve
apenas para programas escritos em linguagem C/C++, mas para virtualmente qualquer
linguagem.
Com o make install está literalmente instalando o programa bc em seu sistema.
24
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
9. LOGS
Muitas são as vezes que em é necessário avaliar o acontecido diante de um fato
indesejado. O acesso indevido a uma parte de informações por um usuário ou um deadlock
produzido pela exclusão mútua de uma ação sempre requer uma avaliação do acontecido para
prevenir futuras repetições do fato. Para isso o registro de eventos em arquivos, geralmente de
texto, torna-se uma ferramenta muito útil. Estes arquivos recebem o nome de log.
Em linux existem alguns logs específicos que são incluídos nas distribuições como
procedimento natural, podendo o administrados inibir a existência deles.
No geral os logs que estão vinculados a um sistema operacional Linux são armazenados no
diretório /var/log.
Os sistemas Unix-like possuem um serviço exclusivo de manutenção de logs que pode ser
utilizado por qualquer aplicação. Na maioria das vezes esse mecanismo é utilizado pelo kernel e
pelos serviços conhecidos como deamons, pois eles não têm o terminal como saída para suas
mensagens, uma vez que são executados em background.
Os daemons de log do sistema registram as mensagens de saída do kernel (klogd) e
sistema (syslogd) nos arquivos em /var/log.
A classificação de qual arquivo em /var/log receberá qual tipo de mensagem é controlado
pelo arquivo de configuração /etc/syslog.conf através de facilidades e níveis.
Assim como todo servidor o syslog é iniciado como um daemon, ou seja, inicia
automaticamente durante o boot. Sendo um daemon, normalmente, será inicializado com as
rotinas que são incluídas em /etc/init.d. Para o caso do syslog será iniciado com o daemon de
/etc/init.d/syslog.
9.1. O sistema de Logs do Linux
9.1.1. SYSLOGD
O syslog é um daemon simples porém de utilidade incomparável, que fornece a ambientes
Unix a opção comum de gravação de registros para programas mais diferentes, ele por si só
determina o que fazer com qual registro, estes registros são muito importantes, para analises de
problemas, ocorrências e segurança da maquina.
Todas as mensagens gravadas pelo syslog por um recurso e também por um nível
específico. Todas as regras do programa syslog são definidas no arquivo /etc/syslog.conf
conforme os parâmetros definidos a seguir.
Os recursos de syslog é a definição para que um programa relate em que grupo de
registros se enquadra. Os recursos são:
- auth - Mensagens de segurança/autorização (é recomendável usar authpriv ao invés
deste).
- authpriv - Mensagens de segurança/autorização (privativas).
- cron - Daemons de agendamento (cron e at).
- daemon - Outros daemons do sistema que não possuem facilidades específicas.
- ftp - Daemon de ftp do sistema.
- kern - Mensagens do kernel.
25
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
- lpr - Subsistema de impressão.
- local0 a local7 - Reservados para uso local.
- mail - Subsistema de e-mail.
- news - Subsistema de notícias da USENET.
- security - Sinônimo para a facilidade auth (evite usa-la).
- syslog - Mensagens internas geradas pelo syslogd.
- user - Mensagens genéricas de nível do usuário.
- uucp - Subsistema de UUCP.
- * - Confere com todas as facilidades.
O registro de log de sistema pode ser armazenado segundo níveis, isto é, não é necessário
armazenar eventos definidos dependendo o uso do sistema computacional.
Os Programas usam cada entrada dos registros com um nível de registro, de tal maneira
que o daemon syslog possa registrá-lo ou apenas ignorá-lo, dependendo somente da
configuração. Os níveis de registros são classificados em ordem de grau crítico:
- emerg: O sistema está inutilizável.
- alert: Deverá ser providenciada algum tipo de ação logo de imediato.
- crit:Condições críticas.
- err: Condições de erro.
- warning: Condições de alerta.
- notice: Condições normais do sistema.
- info: Mensagens de informação.
- debug: Mensagens de depuração.
Além dos níveis, podem ser tratados 3 grupos de mensagens que poderão ser habilitadas
ou inibidas.
- Error: Sinônimo para o nível err.
- Panic: Sinônimo para o nível emerg.
- Warn: Sinônimo para o nível warn.
Para gerência de logs a sintaxe do comando é syslogd [opções].
Opções
-f - Especifica um arquivo de configuração alternativo ao /etc/syslog.conf.
-h - Permite redirecionar mensagens recebidas a outros servidores de logs especificados.
-l [computadores] - Especifica um ou mais computadores (separados por ":") que
deverão ser registrados somente com o nome de máquina ao invés do FQDN (nome completo,
incluindo domínio).
-m [minutos] - Intervalo em minutos que o syslog mostrará a mensagem --MARK--. O
valor padrão é 20 minutos, 0 desativa.
-n - Evita que o processo caia automaticamente em background. Necessário principalmente
se o syslogd for controlado pelo init.
-p [soquete] - Especifica um soquete UNIX alternativo ao invés de usar o padrão
/dev/log.
26
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
-r - Permite o recebimento de mensagens através da rede através da porta UDP 514. Esta
opção é útil para criar um servidor de logs centralizado na rede. Por padrão, o servidor syslog
rejeitará conexões externas.
-s [domínios] - Especifica a lista de domínios (separados por ":") que deverão ser
retirados antes de enviados ao log.
-a [soquetes] - Especifica soquetes adicionais que serão monitorados. Esta opção será
necessária se estiver usando um ambiente chroot. É possível usar até 19 soquetes adicionais.
-d - Ativa o modo de depuração do syslog. O syslog permanecerá operando em primeiro
plano e mostrará as mensagens no terminal atual.
No geral, os logs são registrados por default na pasta /var/log. Porém, administradores
podem alterar o registro destes arquivos em pastas diversas.
Este motivo é no sentido de limitar os direitos de consulta e leitura às pessoas que
realmente tem a função de administrar o ambiente computacional.
Para configuração de logs, o caminho mais prático é o de delimitar o que será armazenado
dentro do arquivo /etc/syslog.conf. Dentro deste poderão ser informadas as categorias que o
administrados deseja registrar os eventos que acontecem no sistema computacional.
O formato de registro no arquivo /etc/syslog.conf será algo do tipo:
- recurso.nível
destino
Figura 6 - syslog.conf
Recurso - É usada para especificar que tipo de programa está enviando a mensagem.
9.1.2. KLOGD
O klogd é outro daemon que controla o registro de mensagens do kernel. Ele
monitora as mensagens do kernel e as envia para o daemon de monitoramento syslogd,
por padrão.
27
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
A sintaxe do comando é klogd [opções].
Opções:
-d - Ativa o modo de depuração do daemon
-f [arquivo] - Envia as mensagens do kernel para o arquivo especificado ao invés de
enviar ao daemon do syslog
-i - Envia um sinal para o daemon recarregar os símbolos de módulos do kernel.
-I - Envia um sinal para o daemon recarregar os símbolos estáticos e de módulos do
kernel.
-n - Evita a operação em segundo plano. Útil se iniciado pelo init
-k [arquivo] - Especifica o arquivo que contém os símbolos do kernel. Exemplos deste
arquivo estão localizados em /boot/System.map-xx.xx.xx.
-o - Faz com que o daemon leia e registre todas as mensagens encontradas nos buffers do
kernel, após isto o daemon é encerrado.
-p - Ativa o modo paranóia. Isto fará o klogd somente carregar detalhes sobre os módulos
quando os caracteres ‘Oops’ forem detectados nas mensagens do kernel. É recomendável ter
sempre a última versão do klogd e evitar a utilização desta opção em ambientes críticos.
-s - Força a utilização da interface de chamadas do sistema para comunicação com o
kernel.
-x - Esconde tradução EIP, assim ele não lê o arquivo /boot/System.map-xx-xx-xx.
A especificação de um arquivo com a opção -k é necessária se desejar que sejam
mostradas a tabela de símbolos ao invés de endereços numéricos do kernel.
9.1.3. LOGCHECK
É um programa usado para enviar um e-mail periodicamente ao administrador do sistema
(através do cron ou outro daemon com a mesma função) alertando sobre os eventos que
ocorreram desde a última execução do programa.
As mensagens do logcheck são tratadas por arquivos em /etc/logcheck e organizadas em
categorias antes de ser enviada por e-mail, isto garante muita praticidade na interpretação dos
eventos ocorridos no sistema.
As categorias são organizadas das mais importantes para as menos importantes, e vão
desde "Hacking em andamento" (providências devem ser tomadas imediatamente para resolver a
situação) até "eventos anormais do sistema" (mensagens de inicialização, mensagens dos
daemons do sistema, etc.).
O tipo de mensagem que será incluída/ignorada nos logs enviados podem ser
personalizadas pelo administrador do sistema através dos arquivos/diretórios dentro de
/etc/logcheck. Nomes de arquivos/diretórios contendo a palavra "ignore" são usados para
armazenar expressões regulares que NÃO serão enviadas pelo logcheck. É permitido o uso de
expressões regulares perl/sed para especificar as mensagens nos arquivos de log.
28
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
9.1.4. LOGROTATE
Usado para fazer backups dos logs atuais do sistema (programado via cron, ou outro
daemon com a mesma função) e criando novos arquivos de logs que serão usados pelo sistema.
Opcionalmente os arquivos de logs antigos serão compactados para diminuir a utilização de
espaço em disco ou enviados por email ao administrador. A rotação dos arquivos de logs
proporciona maior agilidade quando precisamos encontrar algum detalhe útil (que seria mais difícil
de achar em um arquivo de log de 10MB ou maior).
A rotação de logs é feita de acordo com o tamanho do arquivo de logs especificado, mas a
opção -f pode ser usada para "forçar" a rotação de logs. A opção -d fornece mais detalhes sobre o
que o logrotate está fazendo. Seu arquivo principal de configuração é o /etc/logrotate.conf.
29

Documentos relacionados