1. 1 Sistemas Operacionais Luiz Arthur
O sistema de arquivos do Linux é tão robusto e flexível que possibilita ao usuário
criar e manter arquivos em diferentes partições, diferentes discos, diferentes
dispositivos e até em computadores remotos.
É neste contexto que o Linux tem suporte a inúmeros dispositivos como discos
IDE, SCSI, disquetes, CD-ROM, DVD, CD-RW, Pen-Drivers, Jaz-Drivers, Memórias
Flash, dentre outros. Cada um destes dispositivos pode ser formatado para o
sistema de arquivos EXT2, padrão Linux, ou outros formatos como: ReiserFS,
FAT, FAT32, NTFS, EXT3, etc. Poucos sistemas operacionais oferecem esta
liberdade.
Antes de falar dos dispositivos é preciso fazer uma pequena introdução nos tipos
de discos mais comuns no mercado: Os padrões IDE e SCSI.
Os discos IDE (Integrated Device Eletronics) são os mais utilizados pelos usuários
caseiros e oferecem uma relativa performance e baixo custo. As placas-mãe
comuns possuem duas interfaces IDE chamadas de primária e secundária. E cada
interface possibilita a conexão com dois discos. Dependendo de em qual interface
o disco esta conectado, ele pode ser configurado como mestre primário, escravo
primário, mestre secundário e escravo secundário.
Os discos SCSI (Small Computer System Interface) oferecem uma performance
melhor que os discos IDE. Geralmente são mais caros e utilizados em servidores
de rede.
2. 2 Sistemas Operacionais Luiz Arthur
Por padrão, os discos são nomeados da seguinte forma:
Nome Lógico do Dispositivo Dispositivo Físico (disco)
/dev/hda Disco IDE conectado na interface primária mestre
/dev/hdb Disco IDE conectado na interface primária escravo
/dev/hdc Disco IDE conectado na interface secundária
mestre
/dev/hdd Disco IDE conectado na interface secundária
escravo
/dev/sda Disco SCSI conectado no primeiro canal
/dev/sdb Disco SCSI conectado no segundo canal
/dev/sdc Disco SCSI conectado no terceiro canal.
O padrão SCSI não tem limitação de quatro discos como o IDE, podendo chegar
até pelo menos 15 discos.
3. 3 Sistemas Operacionais Luiz Arthur
Cada disco pode ter de uma a dezesseis partições. As partições funcionam como
um contêiner para os sistemas de arquivos.
No Windows cada partição pode ser representada por uma letra (como por
exemplo C:). No Linux cada partição é representada por um número inteiro.
Por exemplo, a primeira partição de um disco IDE conectado na interface
primária mestre vai ser nomeada como /dev/hda1. Se neste disco existir uma
segunda partição o nome será /dev/hda2 e assim por diante.
Existem quatro tipos de partições possíveis:
Partições Primárias
Cada disco pode conter no máximo quatro partições primárias. Estas partições
contêm necessariamente um sistema de arquivos e pelo menos uma deve ser
criada.
As partições primárias podem ser nomeadas como: /dev/hda1, /dev/hda2,
/dev/hda3 e /dev/hda4.
Uma destas partições primárias deve ser marcada como ativa para que a carga
do sistema operacional (boot) seja possível.
4. 4 Sistemas Operacionais Luiz Arthur
Partições Estendidas
As partições estendidas são uma variação das partições primárias, mas não
podem conter um sistema de arquivos. Elas funcionam como um contêiner para
as partições lógicas.
Um disco somente pode ter uma partição estendida e que toma lugar de uma
partição primária. Em uma configuração padrão, pode-se ter o seguinte esquema
de particionamento dos discos:
/dev/hda1 (partição primária)
/dev/hda2 (partição estendida)
Partições Lógicas
As partições lógicas existem em conjunto com uma partição estendida e pode-se
ter de uma a doze partições deste tipo. Elas são nomeadas à partir do número
cinco até dezesseis.
/dev/hda1 (partição primária)
/dev/hda2 (partição estendida)
/dev/hda5 (partição lógica) ... /dev/hda16 (partição lógica)
5. 5 Sistemas Operacionais Luiz Arthur
Podemos ter no máximo 15 partições com sistema de arquivos em um único
disco, sendo três primárias e doze lógicas.
Partição de Swap (Arquivo de Troca)
Existe ainda outro tipo especial de partição no Linux chamado de partição de
swap. Esta possibilita que o Linux tenha uma memória virtual em disco. Este tipo
de memória é usado como arquivo de troca de dados entre a memória física e o
disco. Seu objetivo é aumentar a performance do sistema. Este partição precisa
de uma designação especial e uma formatação especial também.
Uma vez definidos os tamanhos das partições, é difícil aumentar ou diminuir sem
a perda dos dados.
Criando partições e sistema de arquivos
Os programas fdisk e cfdisk são responsáveis por criar as partições de disco.
Existem outros utilitários para particionar os discos para as interfaces gráficas.
fdisk
uso:
# fdisk [dispositivo]
6. 6 Sistemas Operacionais Luiz Arthur
O fdisk é um utilitário para criar, listar, alterar e apagar partições de disco. Ele
é muito importante robusto e possibilita criar uma lista grande de tipos de
partições para o Linux e diferentes sistemas operacionais.
O fdisk funciona em modo texto e com um menu pouco amigável.
O fdisk recebe como parâmetro o dispositivo a ser trabalhado.
# fdisk /dev/hda
neste exemplo o fdisk vai poder particionar o disco primário mestre IDE.
As opções de menu mais freqüentes são:
a Marca ou desmarca a partição como ativa para o processo de carga do
sistema (boot).
d Apaga uma partição. Após selecionar está opção é necessário escolher o
número da partição a ser apagada.
l Lista dos tipos de partições possíveis.
m Mostra uma pequena ajuda.
7. 7 Sistemas Operacionais Luiz Arthur
m Adiciona uma nova partição no disco.
p Mostra a tabela de partições que existe na memória. Enquanto as alterações
na tabela de partições não for gravada em disco, nenhuma alteração é feita.
q Sai do fdisk sem salvar as alterações.
r Muda o tipo de partição indicando o tipo de sistema de arquivos que ela vai
suportar. O sistema ext2 é representado pelo número 83 e a partição de swap
pelo número 82. A lista de tipos pode ser visto pela opção l.
w Gravar as alterações efetuadas em discos.
Para criar uma nova partição escolha a opção 'n' no fdisk depois escolha se a
nova se a nova partição será primária ou estendida. Se a partição for primária ou
estendida, entre o número de partição de 1 à 4. Se a partição for lógica o fdisk
se encarrega de numera-la.
O tamanho da partição deverá ser escolhido digitando o cilindro inicial e o
cilindro final desejado ou pelo tamanho em Megabytes ou Gigabytes. Por
exemplo, para criar uma partição de 1Gb , digite +1024M ou +1G.
Todas as partições são criadas com o tipo 83 ext2. Para um outro tipo de partição,
como a swap, crie a partição depois mude o seu tipo com a opção 'r'.
8. 8 Sistemas Operacionais Luiz Arthur
mkfs
Uso:
# mkfs [-t tipo] [opções] dispositivo
O comando mkfs formata a partição criada pelo fdisk com um sistema de
arquivos. O tipo de sistema de arquivo é definido pela opção -t que suporta os
formatos: EXT2, EXT3, ReiserFS ou msdos.
Os comandos mke2fs e mkdosfs são variações do mkfs.
As opções possíveis do mkfs são:
-c Verifica a existência de bad blocks (defeitos no dispositivo).
-L nome Configura o nome do dispositivo.
-n nome Configura o nome do dispositivo par ao msdos.
-q Faz com que o mkfs trabalhe com o mínimo de saída no vídeo
possível.
-v Faz com que o mkfs trabalho com o máximo de saída no vídeo
possível.
9. 9 Sistemas Operacionais Luiz Arthur
Exemplo:
# mkfs -t ext2 -L discoprincipal /dev/hda4
mkswap
Uso:
# mkswap partiçãoswap
O comando mkswap prepara o dispositivo para ser utilizado como área de
memória virtual (swap). Antes de formatar uma partição para swap, é necessário
que ela seja do tipo 82 (Linux Swap).
Exemplo:
# mkswap /dev/hda6
10. 10 Sistemas Operacionais Luiz Arthur
Trabalhando com o Sistema de Arquivos
Nesta sessão será abordado como trabalhar com o sistema de arquivos, montar e
desmontar dispositivos e fazer checagem de integridade.
df
Uso:
# df [opções] [diretórios]
O comando df mostra a capacidade utilizada de um sistema de arquivos exibindo
informações de espaço e inodes.
Como o número de inodes está diretamente ligado ao número de arquivos que um
dispositivo pode armazenar, é possível que ele acabe e ainda tenha espaço
disponível em disco. Isso é raro, mas pode acontecer quando se tem muitos
arquivos. O número de inodes é definido na formatação do disco.
As opções mais freqüentes são:
-h Mostra as informações de forma mais amigável (em megabytes e gigabytes).
-i Mostra o número de inodes no disco ao invés do espaço disponível.
11. 11 Sistemas Operacionais Luiz Arthur
du
Uso:
$ du [opções] [diretórios]
O comando du do inglês disk usage vai fornecer uma lista detalhada sobre a
utilização do disco. É muito útil para determinar para onde foi o espaço
disponível em disco.
Se não for fornecido um diretório como parâmetro, ele usa o diretório corrente
como base de pesquisa.
As opções mais freqüentes são:
-a Mostra todos os arquivos e não somente diretórios.
-c Mostra um total no final da listagem.
-h Mostra as informações de forma 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.
12. 12 Sistemas Operacionais Luiz Arthur
Exemplos:
#du -h /home
2M /home/carla
4M /home/cristiane
5m /home/michel
# du -sh /home
164M /home
Checagem dos sistemas de arquivos
A checagem do sistema de arquivos permite verificar se toda a estrutura para
armazenamento de arquivos, diretórios, permissões, conectividade e superfície
do disco estão funcionando corretamente. Caso algum problema exista, ele
poderá ser corrigido com o uso da ferramenta de checagem apropriada.
O comando fsck checa e corrige erros no sistema de arquivos. Por padrão, o
fsck assume o sistema de arquivos ext2 e, após fazer uma checagem no disco,
pergunta ao usuário se ele deseja fazer as correções necessárias.
13. 13 Sistemas Operacionais Luiz Arthur
As ferramentas de checagem de sistemas de arquivos costumam ter seu nome
iniciado por fsck e terminados com o nome do sistema de arquivos que verifica,
separados por um ponto:
fsck.ext2 Verifica o sistema de arquivos EXT2 ou EXT3. Pode também ser
encontrado com o nome e2fsck.
fsck.ext3 Um alias para fsck.ext3.
fsck.reiserfsVerifica o sistema de arquivos ReiserFS.
fsck.minix Verifica o sistema de arquivos Minix.
fsck.msdos Verifica o sistema de arquivos Msdos. Pode também ser
encontrado com o nome dosfsck.
Para verificar um sistema de arquivos é necessário que ele esteja desmontado
caso contrário poderá ocorrer danos em sua estrutura. Para verificar o sistema
de arquivos raíz (que não pode ser desmontado enquanto o sistema estiver sendo
executado) você precisará inicializar através de um disquete e executar o
fsck.ext2.
14. 14 Sistemas Operacionais Luiz Arthur
fsck.ext2
Este utilitário permite verificar erros em sistemas de arquivos EXT2 e EXT3
(Linux Native).
fsck.ext2 [opções] [dispositivo]
Onde:
dispositivo - É o local que contém o sistema de arquivos EXT2/EXT3 que será
verificado (partições, disquetes, arquivos).
opções:
-c Faz o fsck.ext2 verificar se existem agrupamentos danificados na unidade de
disco durante a checagem.
-d Debug - Mostra detalhes de processamento do fsck.ext2.
-f Força a checagem mesmo se o sistema de arquivos aparenta estar em bom
estado. Por padrão, um sistema de arquivos que aparentar estar em bom estado
não são verificados.
15. 15 Sistemas Operacionais Luiz Arthur
-F Grava os dados do cache no disco antes de iniciar.
-l [arquivo] Inclui os blocos listados no [arquivo] como blocos
defeituosos no sistema de arquivos. O formato deste arquivo é o mesmo gerado
pelo programa badblocks.
-L [arquivo] Faz o mesmo que a opção -l, só que a lista de blocos defeituosos
do dispositivo é completamente limpa e depois a lista do [arquivo] é adicionada.
-n Faz uma verificação de somente leitura no sistema de arquivos. Com esta
opção é possível verificar o sistema de arquivos montado. Será assumido não
para todas as perguntas e nenhuma modificação será feita no sistema de
arquivos.
Caso a opção -c seja usada junto com -n, -l ou -L, o sistema de arquivos será
verificado e permitirá somente a atualização dos setores danificados não
alterando qualquer outra área.
-p Corrige automaticamente o sistema de arquivos sem perguntar. É
recomendável fazer isto manualmente para entender o que aconteceu, em caso
de problemas com o sistema de arquivos.
-v Ativa o modo verbose (mais mensagens são mostradas durante a execução do
programa).
-y Assume sim para todas as questões.
16. 16 Sistemas Operacionais Luiz Arthur
Caso sejam encontrados arquivos problemáticos e estes não possam ser
recuperados, o fsck.ext2 perguntará se deseja salva-los no diretório
lost+found. Este diretório é encontrado em todas as partições ext2. Não há
risco de usar o fsck.ext3 em uma partição EXT2.
Após sua execução é mostrado detalhes sobre o sistema de arquivos verificado
como quantidade de blocos livres/ocupados e taxa de fragmentação.
Exemplos:
fsck.ext2 /dev/hda2, fsck.ext2 -f /dev/hda2, fsck.ext2 -vrf /dev/hda1
reiserfsck
Verifica um sistema de arquivos reiserfs em sistema de arquivos.
reiserfsck [opções] [dispositivo]
dispositivo - Dispositivo que contém o sistema de arquivos reiserfs que será
verificado.
17. 17 Sistemas Operacionais Luiz Arthur
opções:
-a Mostra detalhes sobre o sistema de arquivos e sai
-j arquivo
Especifica um arquivo de Journal alternativo usado pelo sistema de arquivos.
-q quiet Não exibe mensagens sobre o status da checagem do sistema de
arquivos.
-S Constrói a árvore de todos os blocos do dispositivo.
O reiserfsck possui outros modos de operação além de checagem (o padrão),
para detalhes veja a página de manual do programa.
Exemplos:
#reiserfsck /dev/hda1, reiserfsck -S /tmp/arq-reiserfs
18. 18 Sistemas Operacionais Luiz Arthur
which
Mostra a localização de um arquivo executável no sistema. A pesquisa de
arquivos executáveis é feita através do path do sistema.
which [comando]
Exemplos: which ls, which shutdown, which which
O comando which é especialmente útil para testar diversas versões de um
comando e para ter certeza de que está executando a versão correta.
19. 19 Sistemas Operacionais Luiz Arthur
find
Uso:
$ find caminho expressão
O comando find localiza a partir de um caminho ou diretório recursivamente
uma expressão diretamente no sistema de arquivos. O comando é rico em
expressões, como descrito a seguir:
Para localizar arquivos pelo nome, utiliza-se a expresão -name:
$ find / -name bash
/bin/bash
Para localizar os arquivos pelo nome desconsiderando maiúsculo e minúsculas,
utilizando a expressão -iname:
$ find / -iname linux
Para os links simbólicos de um arquivo, utiliza-se a expressão -lname
$ find / -lname apache
/etc/init.d/apache
/etc/rc.d/rc3.d/s19apache
20. 20 Sistemas Operacionais Luiz Arthur
Para localizar arquivos que foram alterados nos últimos 30 dias, utiliza-se a
expressão -ctime 30:
$ find /home -ctime 30
/home/aula/texto1.txt
/home/aula/texto2.txt
Para localizar arquivos que foram acessados nos últimos 10 dias, utiliza-se a
expressão -used 10:
$ find / -used 10
/etc/passwd
Para localizar arquivos com pelo menos 30k, utiliza-se a expressão -size nk:
$ find / -size 30k
/home/aula/backup.tar.gz
21. 21 Sistemas Operacionais Luiz Arthur
Então todas as opções são:
-name [expressão]
Procura pelo nome [expressão] nos nomes de arquivos e diretórios processados.
-depth
Processa os sub-diretórios primeiro antes de processar os arquivos do diretório
principal.
-maxdepth [num]
Faz a procura até [num] sub-diretórios dentro do diretório que está sendo
pesquisado.
-mindepth [num]
Não faz nenhuma procura em diretórios menores que [num] níveis.
-mount, -xdev
Não faz a pesquisa em sistemas de arquivos diferentes daquele de onde o
comando find foi executado.
-amin [num]
Procura por arquivos que foram acessados [num] minutos atrás. Caso for
antecedido por "-", procura por arquivos que foram acessados entre [num]
minutos atrás até agora.
22. 22 Sistemas Operacionais Luiz Arthur
-atime [num]
Procura por arquivos que foram acessados [num] dias atrás. Caso for antecedido
por "-", procura por arquivos que foram acessados entre [num] dias atrás e a
data atual.
-gid [num]
Procura por arquivos que possuam a identificação numérica do grupo igual a
[num].
-group [nome]
Procura por arquivos que possuam a identificação de nome do grupo igual a
[nome].
-uid [num]
Procura por arquivos que possuam a identificação numérica do usuário igual a
[num].
-user [nome]
Procura por arquivos que possuam a identificação de nome do usuário igual a
[nome].
-inum [num]
Procura por arquivos que estão localizados no inodo [num].
23. 23 Sistemas Operacionais Luiz Arthur
-links [num]
Procura por arquivos que possuem [num] links como referência.
-mmin [num]
Procura por arquivos que tiveram seu conteúdo modificado há [num] minutos.
Caso for antecedido por "-", procura por arquivos que tiveram seu conteúdo
modificado entre [num] minutos atrás até agora.
-mtime [num]
Procura por arquivos que tiveram seu conteúdo modificado há [num] dias. Caso
for antecedido por "-", procura por arquivos que tiveram seu conteúdo modificado
entre [num] dias atrás até agora.
-ctime [num]
Procura por arquivos que teve seu status modificado há [num] dias. Caso for
antecedido por "-", procura por arquivos que tiveram seu conteúdo modificado
entre [num] dias atrás até agora.
-nouser
Procura por arquivos que não correspondam a identificação do usuário atual.
-nogroup
Procura por arquivos que não correspondam a identificação do grupo do usuário
atual.
24. 24 Sistemas Operacionais Luiz Arthur
-perm [modo]
Procura por arquivos que possuam os modos de permissão [modo]. Os [modo] de
permissão pode ser numérico (octal) ou literal.
-used [num]
O arquivo foi acessado [num] vezes antes de ter seu status modificado.
-size [num]
Procura por arquivos que tiverem o tamanho [num]. [num] pode ser antecedido
de "+" ou "-" para especificar um arquivo maior ou menor que [num]. A opção
-size pode ser seguida de:
b - Especifica o tamanho em blocos de 512 bytes. É o padrão caso [num] não
seja acompanhado de nenhuma letra.
c - Especifica o tamanho em bytes.
k - Especifica o tamanho em Kbytes.
25. 25 Sistemas Operacionais Luiz Arthur
-type [tipo]
Procura por arquivos do [tipo] especificado. Os seguintes tipos são aceitos:
b - bloco
c - caracter
d - diretório
p - pipe
f - arquivo regular
l - link simbólico
s - sockete
A maior parte dos argumentos numéricos podem ser precedidos por "+" ou "-".
Para detalhes sobre outras opções e argumentos, consulte a página de manual.
26. 26 Sistemas Operacionais Luiz Arthur
locate
Localiza uma palavra na estrutura de arquivos/diretórios do sistema. É útil
quando queremos localizar onde um comando ou programa se encontra (para
copia-lo, curiosidade, etc). A pesquisa é feita em um banco de dados construído
com o comando updatedb sendo feita a partir do diretório raíz / e sub-diretórios.
Para fazer uma consulta com o locate usamos:
locate [expressão]
A expressão deve ser o nome de um arquivo diretório ou ambos que serão
procurados na estrutura de diretórios do sistema. Como a consulta por um
programa costuma localizar também sua página de manual, é recomendável usar
"pipes" para filtrar a saída do comando (para detalhes veja | (pipe).
Por exemplo, para listar os diretórios que contém o nome "cp": locate cp. Agora
mostrar somente arquivos binários, usamos: locate cp|grep bin/
slocate
Idem ao locate porém com alguns recursos a mais, com o slocate para se
atualizar ou criar o banco de dados basta executar o comando:
# slocate -u
27. 27 Sistemas Operacionais Luiz Arthur
apropos/whatis
Apropos procura por programas/comandos através da descrição. É útil quando
precisamos fazer alguma coisa mas não sabemos qual comando usar. Ele faz sua
pesquisa nas páginas de manual existentes no sistema e lista os
comandos/programas que atendem a consulta. Para usar o comando apropos
digite:
# apropos [descrição]
Digitando apropos copy, será mostrado todos os comandos que tem a palavra
copy em sua descrição (provavelmente os programas que copiam arquivos, mas
podem ser mostrados outros também).