<chapt id="manut">Manutenção do Sistema
 <p>
Este capítulo descreve como fazer a manutenção de seu 
sistema de arquivos e os programas de manutenção automática 
que são executados periodicamente pelo sistema. 


<sect id="manut-checagem">Checagem dos sistemas de arquivos
 <p> 
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. As ferramentas de checagem de 
sistemas de arquivos costumam ter seu nome iniciado por <tt>fsck</tt> 
e terminados com o nome do sistema de arquivos que verifica, separados 
por um ponto: 
<list>
 <item>
<tt>fsck.ext2</tt> - Verifica o sistema de arquivos <tt>EXT2</tt> ou 
<tt>EXT3</tt>. Pode também ser encontrado com o nome <prgn>e2fsck</prgn>. 
 <item>
<tt>fsck.ext3</tt> - Um alias para <prgn>fsck.ext3</prgn>.
 <item>
<tt>fsck.minix</tt> - Verifica o sistema de arquivos <tt>Minix</tt>. 
 <item>
<tt>fsck.msdos</tt> - Verifica o sistema de arquivos <tt>Msdos</tt>. Pode 
também ser encontrado com o nome <prgn>dosfsck</prgn>. 
</list>
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 <prgn>fsck.ext2</prgn>. 


<sect1 id="manut-checagem-ext2">fsck.ext2
 <p>
Este utilitário permite verificar erros em sistemas de arquivos 
<tt>EXT2</tt> e <tt>EXT3</tt> (<em>Linux Native</em>). 
 <p>
<tt>fsck.ext2 [<em>opções</em>] [<em>dispositivo</em>]</tt>
 <p>
<![ %OPCOES [ 
 Onde:
<taglist compact>
 <tag>dispositivo</tag>
 <item>
É o local que contém o sistema de arquivos <tt>EXT2/EXT3</tt> que será verificado 
(partições, disquetes, arquivos). 

 <tag>opções</tag>
 <tag>-c</tag>
 <item>
Faz o <prgn>fsck.ext2</prgn> verificar se existem agrupamentos danificados 
na unidade de disco durante a checagem. 

 <tag>-d</tag>
 <item>
Debug - Mostra detalhes de processamento do <prgn>fsck.ext2</prgn>.

 <tag>-f</tag>
 <item>
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. 

 <tag>-F</tag>
 <item>
Grava os dados do cache no disco antes de iniciar. 

 <tag>-l [arquivo]</tag>
 <item>
Inclui os blocos listados no [arquivo] como blocos defeituosos no sistema 
de arquivos. O formato deste arquivo é o mesmo gerado pelo programa 
<prgn>badblocks</prgn>. 

 <tag>-L [arquivo]</tag>
 <item>
Faz o mesmo que a opção <tt>-l</tt>, só que a lista de blocos defeituosos 
do dispositivo é completamente limpa e depois a lista do [arquivo] é 
adicionada. 

 <tag>-n</tag>
 <item>
Faz uma verificação de <tt>somente leitura</tt> no sistema de arquivos. Com 
esta opção é possível verificar o sistema de arquivos montado. Será 
assumido <tt>não</tt> para todas as perguntas e nenhuma modificação 
será feita no sistema de arquivos. 
 <p>
Caso a opção <tt>-c</tt> seja usada junto com <tt>-n</tt>, <tt>-l</tt> ou 
<tt>-L</tt>, o sistema de arquivos será verificado e permitirá somente a 
atualização dos setores danificados não alterando qualquer outra área. 

 <tag>-p</tag>
 <item>
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. 

 <tag>-v</tag>
 <item>
Ativa o modo verbose (mais mensagens são mostradas durante a execução do 
programa). 

 <tag>-y</tag>
 <item>
Assume <tt>sim</tt> para todas as questões. 

</taglist> 
]]> 
Caso sejam encontrados arquivos problemáticos e estes não possam ser 
recuperados, o <prgn>fsck.ext2</prgn> perguntará se deseja salva-los 
no diretório <file>lost+found</file>. Este diretório é encontrado em 
todas as partições <em>ext2</em>. Não há risco de usar o <prgn>fsck.ext3</prgn> 
em uma partição <tt>EXT2</tt>.
 <p>
Após sua execução é mostrado detalhes sobre o sistema de arquivos 
verificado como quantidade de blocos livres/ocupados e 
taxa de fragmentação. 
<![ %EXEMPLO [
 <p>
Exemplos: <tt>fsck.ext2 /dev/hda2</tt>, <tt>fsck.ext2 -f /dev/hda2</tt>, 
<tt>fsck.ext2 -vrf /dev/hda1</tt>. ]]>


<sect id="manut-checagem-reiserfsck">reiserfsck
 <p>
Verifica um sistema de arquivos <prgn>reiserfs</prgn> em sistema 
de arquivos.
 <p>
<tt>reiserfsck [<em>opções</em>] [<em>dispositivo</em>]</tt>
 <p>
<![ %OPCOES [
<taglist compact>
 <tag><em>dispositivo</em></tag>
  <item>
Dispositivo que contém o sistema de arquivos <prgn>reiserfs</prgn> que 
será verificado.

 <tag><em>opções</em></tag>
 <tag>-a</tag>
  <item>
Mostra detalhes sobre o sistema de arquivos e sai

 <tag>-j arquivo</tag>
  <item>
Especifica um arquivo de Journal alternativo usado pelo sistema de arquivos.

 <tag>-q quiet</tag>
  <item>
Não exibe mensagens sobre o status da checagem do sistema de arquivos.

 <tag>-S</tag>
  <item>
Constrói a árvore de todos os blocos do dispositivo.

</taglist>
]]>
O <prgn>reiserfsck</prgn> possui outros modos de operação além de 
checagem (o padrão), para detalhes veja a página de manual do 
programa.
<![ %EXEMPLO [
 <p>
Exemplos: <tt>reiserfsck /dev/hda1</tt>, <tt>reiserfsck -S /tmp/arq-reiserfs</tt>.
]]>



<sect id="manut-checagem-minix">fsck.minix
 <p>
Verifica o sistema de arquivos <em>minix</em> em um dispositivo. 
 <p>
<tt>fsck.minix [<em>opções</em>] [<em>dispositivo</em>]</tt>
<![ %OPCOES [
 <p>
Onde:
<taglist compact>
 <tag>dispositivo</tag>
 <item>
Partição, disquete ou arquivo que contém o sistema de arquivos <tt>Minix</tt> 
que será verificado

 <tag>opções</tag>
 <tag>-f</tag>
 <item>
Verifica o sistema de arquivos mesmo se ele estiver perfeito. 

 <tag>-r</tag>
 <item>
Permite reparo manual do sistema de arquivos

 <tag>-a</tag>
 <item>
Permite um reparo automático do sistema de arquivos. É recomendado fazer o 
reparo manual. 

 <tag>-v</tag>
 <item>
Verbose - Mostra detalhes durante a execução do programa

 <tag>-s</tag>
 <item>
Exibe detalhes sobre os blocos de root. 
</taglist>
]]>
<![ %EXEMPLO [
 <p>
Exemplo: <tt>fsck.minix -f /dev/hda8</tt>, <tt>fsck.minix -vf /dev/hda8</tt> ]]>


<sect id="manut-badblocks">badblocks
 <p>
Procura blocos defeituosos em um dispositivo. Note que este 
<strong>apenas</strong> pesquisa por blocos defeituosos, 
sem alterar a configuração do disco. Para marcar os blocos
defeituosos para não serem mais usados, utilize a 
opção <tt>-l</tt> do <prgn>fsck</prgn> (veja <ref id="manut-checagem-ext2">). 
 <p>
<tt>badblocks [<em>opções</em>] [<em>dispositivo</em>]</tt>
 <p>
<![ %OPCOES [
 Onde:
<taglist compact>
 <tag>dispositivo</tag>
 <item>
Partição, disquete ou arquivo que contém o sistema de arquivos que será 
verificado.

 <tag>opções</tag>
 <tag>-b [tamanho]</tag>
 <item>
Especifica o [tamanho] do bloco do dispositivo em bytes 

 <tag>-o [arquivo]</tag>
 <item>
Gera uma lista dos blocos defeituosos do disco no [arquivo]. Este lista 
pode ser usada com o programa <prgn>fsck.ext2</prgn> junto com a opção 
<tt>-l</tt>. 
 
 <tag>-s</tag>
 <item>
Mostra o número de blocos checados durante a execução do 
<prgn>badblocks</prgn>. 

 <tag>-v</tag>
 <item>
Modo verbose - São mostrados mais detalhes. 

 <tag>-w</tag>
 <item>
Usa o modo leitura/gravação. Usando esta opção o <prgn>badblocks</prgn> 
procura por blocos defeituosos gravando alguns padrões (0xaa, 0x55, 
0xff, 0x00) em cada bloco do dispositivo e comparando seu conteúdo. 
 <p>
Nunca use a opção <tt>-w</tt> em um dispositivo que contém arquivos 
pois eles serão apagados! 
</taglist> 
]]>
<![ %EXEMPLO [
 <p>
Exemplo: <tt>badblocks -s /dev/hda6</tt>, <tt>badblocks -s -o bad /dev/hda6
</tt> ]]>


<sect id="manut-defrag">defrag
 <p>
Permite desfragmentar uma unidade de disco. 
<![ %DESCRICAOD [ A fragmentação é o armazenamento 
de arquivos em áreas não seqüenciais (uma parte é armazenada no 
começo a outra no final, etc), isto diminui o desempenho da unidade de disco 
porque a leitura deverá ser interrompida e feita a movimentação da 
cabeça para outra região do disco onde o arquivo continua, por este 
motivo discos fragmentados tendem a fazer um grande barulho na leitura 
e o desempenho menor. 
 <p>
A desfragmentação normalmente é desnecessária no <prgn>GNU/Linux</prgn> porque o 
sistema de arquivos <em>ext2</em> procura automaticamente o melhor local para 
armazenar o arquivo. Mesmo assim, é recomendável desfragmentar um sistema 
de arquivos assim que sua taxa de fragmentação subir acima de 10%. A taxa de 
fragmentação pode ser vista através do <prgn>fsck.ext2</prgn>. Após o 
<prgn>fsck.ext2</prgn> ser executado é mostrada a taxa de fragmentação 
seguida de <tt>non-contiguos</tt>. ]]> 
 <p>
A ferramenta de desfragmentação usada no <prgn>GNU/Linux</prgn> é o 
<prgn>defrag</prgn> que vem com os seguintes programas: 
<list compact>
 <item>
<tt>e2defrag</tt> - Desfragmenta sistemas de arquivos <em>Ext2</em>.

 <item>
<tt>defrag</tt> - Desfragmenta sistemas de arquivos <em>Minix</em>.

 <item>
<tt>xdefrag</tt> - Desfragmenta sistemas de arquivos <em>Xia</em>.
</list>
O sistema de arquivos deve estar desmontado ao fazer a 
desfragmentação. 
Se quiser desfragmentar o sistema de 
arquivos raíz (<file>/</file>), você precisará inicializar 
através de um disquete e executar um dos programas de 
desfragmentação apropriado ao seu sistema de arquivos. 
A checagem individual de fragmentação em arquivos pode ser 
feita com o programa <prgn>frag</prgn>. 
<![ %OBS [
 <p>
ATENÇÃO: Retire cópias de segurança de sua unidade antes de fazer 
a desfragmentação. Se por qualquer motivo o programa de desfragmentação 
não puder ser completado, você poderá perder dados! ]]> 
 <p>
<tt>e2defrag [<em>opções</em>] [<em>dispositivo</em>]</tt>
<![ %OPCOES [ 
 <p>
Onde:
<taglist compact>
 <tag>dispositivo</tag>
 <item>
Partição, arquivo, disquete que contém o sistema de arquivos que será 
desfragmentado. 

 <tag>-d</tag>
 <item>
Debug - serão mostrados detalhes do funcionamento 

 <tag>-n</tag>
 <item>
Não mostra o mapa do disco na desfragmentação. É útil quando você inicializa 
por disquetes e recebe a mensagem "Failed do open term Linux" ao tentar 
executar o <prgn>e2defrag</prgn>. 

 <tag>-r</tag>
 <item>
Modo somente leitura. O defrag simulará sua execução no sistema de arquivos 
mas não fará nenhuma gravação. Esta opção permite que o defrag seja usado 
com sistema de arquivos montado. 

 <tag>-s</tag>
 <item>
Cria um sumário da fragmentação do sistema de arquivos e performance do 
desfragmentador. 

 <tag>-v</tag>
 <item>
Mostra detalhes durante a desfragmentação do sistema de arquivos. Caso mais 
de uma opção -v seja usada, o nível de detalhes será maior.

 <tag>-i [arquivo]</tag>
 <item>
Permite definir uma lista de prioridades em que um arquivo será gravado no 
disco, com isto é possível determinar se um arquivo será gravado no 
começo ou final da unidade de disco. Esta lista é lida do [arquivo] e deve 
conter uma lista de prioridades de -100 a 100 para cada inodo do sistema 
de arquivos. Arquivos com prioridade alta serão gravados no começo do disco. 
 <p>
Todos os inodos terão prioridade igual a zero caso a opção <tt>-i</tt> não 
seja usada ou o inodo não seja especificado no [arquivo]. O [arquivo] 
deverá conter uma série de linhas com um número (inodo) ou um número 
prefixado por um sinal de igual seguido da prioridade. 

 <tag>-p [numero]</tag>
 <item>
Define o [numero] de buffers que serão usados pela ferramenta de 
desfragmentação na realocação de dados, quanto mais buffers mais 
eficiente será o processo de realocação. O número depende de quantidade 
memória RAM e Swap você possui. Por padrão 512 buffers são 
usados correspondendo a 512Kb de buffer (em um sistema de arquivos 
de blocos com 1Kb). 

</taglist> 
]]>
<![ %EXEMPLO [
 <p>
Exemplo: <tt>e2defrag -n -v /dev/hdb4</tt>, <tt>e2defrag -r /dev/hda1</tt> ]]>


<sect id="manut-hdbadblocks">Verificando e marcando setores danificados em um HD
 <p>
Um dos sintomas de um disco rígido que contém setores danificados (bad blocks) 
é a mudança repentina do sistema de arquivos para o modo somente leitura, 
o aparecimento de diversas mensagens no syslog indicando falha de leitura 
do hd, uma pausa se segundos no sistema junto com o led de atividade de 
disco ligado. Se isto acontece com você, uma forma de solucionar este 
inconveniente é executar o teste na superfície física do disco para procurar 
e marcar os blocos problemáticos como defeituosos.
 <p>
Em alguns casos, os blocos defeituosos ocorrem isoladamente no disco rígido, 
não aumentando mais sua quantidade, entretanto, se o número de blocos danificados 
em seu disco está crescendo em um curto espaço de tempo, comece a pensar 
na troca do disco rígido por um outro. Existem empresas que recuperam 
HDs mas pelo valor cobrado por se tratar de um serviço delicado, só compensa 
caso você não tenha o backup e <strong>realmente</strong> precisa dos dados 
do disco. 
 <p>
Para fazer uma checagem de HD no sistema de arquivos <file>ext2</file> ou 
<file>ext3</file>, proceda da seguinte forma:
<list compact>
 <item>
Se possível, faça um backup de todos os dados ou dos dados essenciais da 
partição será checada.
 <item>
Inicie o sistema por um disquete de boot ou CD de recuperação. Este passo é
útil pois em alguns casos, pode ocorrer a perda de interrupção do disco 
rígido e seu sistema ficar paralisado. Só o método de checar o HD usando 
um disquete de boot lhe fará agendar uma parada no sistema e notificar os 
usuários, evitando sérios problemas do que fazendo isto com um sistema em 
produção.
 <item>
Execute o <prgn>badblocks</prgn> usando a opção <tt>-o</tt> para gravar os 
possíveis blocos defeituosos encontrados para um arquivo: <tt>badblocks -v -o blocos-defeituosos.lista /dev/hd??</tt>. 
 <p>
Substitua o dispositivo <file>/dev/hd??</file> pelo dispositivo que deseja 
verificar. A checagem do <prgn>badblocks</prgn> deverá ser feita para cada 
partição existente no disco rígido. O tempo de checagem dependerá da velocidade
do disco rígido, velocidade do barramento, cabo de dados utilizado, velocidade
de processamento e é claro, do estado do disco rígido (quantos setores 
defeituosos ele tem).
 <item>
Após concluir o <prgn>badblocks</prgn>, veja se foram encontrados blocos 
defeituosos. Caso tenha encontrado, siga para o próximo passo.
 <item>
Para marcar os blocos encontrados pelo <prgn>badblocks</prgn> como defeituosos, 
execute o comando: <tt>fsck.ext3 -l blocos-defeituosos.lista -f /dev/hd??</tt>.
 <p>
Substitua o dispositivo, pelo dispositivo que verificou com o <prgn>badblocks</prgn>.
O arquivo <file>blocos-defeituosos.list</file> contém a lista de blocos gerada pelo 
<prgn>badblocks</prgn> que serão marcados como defeituosos.

</list>
Para mais detalhes sobre as opções de checagem usada pelos programas, veja 
<ref id="manut-badblocks"> e <ref id="manut-checagem-ext2">.


<sect id="manut-logs-l">Limpando arquivos de LOGS
 <p>
Tudo que acontece em sistemas <prgn>GNU/Linux</prgn> pode ser registrado em 
arquivos de log em <file>/var/log</file>, como vimos anteriormente. Eles 
são muito úteis por diversos motivos, para o diagnóstico de problemas, 
falhas de dispositivos, checagem da segurança, alerta de eventuais 
tentativas de invasão, etc. 
 <p>
O problema é quando eles começam a ocupar muito espaço em seu disco. 
Verifique quantos Megabytes seus arquivos de LOG estão ocupando através 
do comando <tt>cd /var/log;du -hc</tt>. Antes de fazer uma limpeza nos 
arquivos de LOG, é necessário verificar se eles são desnecessários e só 
assim zerar os que forem dispensáveis. 
 <p>
Não é recomendável apagar um arquivo de log pois ele pode ser criado com 
permissões de acesso indevidas (algumas distribuições fazem isso). 
Você pode usar o comando: <tt>echo -n &gt;arquivo</tt> ou o seguinte 
shell script para zerar todos os arquivos de LOG de uma só vez (as 
linhas iniciante com <tt>#</tt> são comentários): 
<example>
#! /bin/sh
cd /var/log
for l in `ls -p|grep '/'`; do
 echo -n >$l &>/dev/null
 echo Zerando arquivo $l...
done
echo Limpeza dos arquivos de log concluída!
</example>
Copie o conteúdo acima em um arquivo com a extensão <file>.sh</file>, 
dê permissão de execução com o <prgn>chmod</prgn> e o execute como 
usuário <tt>root</tt>. É necessário executar este script para zerar 
arquivos de log em subdiretórios de <file>/var/log</file>, caso sejam 
usados em seu sistema. 
 <p>
Algumas distribuições, como a <prgn>Debian</prgn> GNU/Linux, fazem o 
arquivamento automático de arquivos de LOGs em arquivos <file>.gz</file> 
através de scripts disparados automaticamente pelo <prgn>cron</prgn>. 
<![ %OBS [ 
ATENÇÃO: LEMBRE-SE QUE O SCRIPT ACIMA APAGARÁ TODOS OS ARQUIVOS DE LOGs DO 
SEU SISTEMA SEM POSSIBILIDADE DE RECUPERAÇÃO. TENHA ABSOLUTA CERTEZA DO 
QUE NÃO PRECISARÁ DELES QUANDO EXECUTAR O SCRIPT ACIMA! ]]> 


<sect id="manut-recpart">Recuperando partições apagadas
 <p>
Caso tenha apagado uma partição acidentalmente ou todas as 
partições do seu disco, uma forma simples de recuperar todos os 
seus dados é simplesmente recriar todas as partições com o tamanho
<strong>EXATAMENTE</strong> igual ao existente anteriormente. Isto deve 
ser feito dando a partida com um disquete ou CD de inicialização. Após
recriar todas as partições e seus tipos (83, 82 8e, etc), execute
novamente o lilo para recriar o setor de boot do HD e garantir que 
a máquina dará o boot.
 <p>
A recuperação desta forma é possível porque quando se cria ou apaga
uma partição, você está simplesmente delimitando espaço onde cada 
sistema de arquivos gravará seus dados, sem fazer nenhuma alteração
dentro dele. Assim, é também útil manter uma cópia dos tamanhos usados
durante o processo de criação das partições para ser usado como 
recuperação em uma possível emergência.


<sect id="manut-senhaperdida">Recuperando a senha de root perdida
 <p>
Uma situação que você deve ter se deparado (ou algum dia ainda vai se deparar) é 
precisar alterar a senha de root e não sabe ou não lembra a senha atual. Esta 
situação também pode ser encontrada quando ocorre uma falha de disco, 
falha elétrica, reparos em uma máquina que não detém sua manutenção, etc. A 
melhor notícia é que a alteração da senha de root é possível e não apresenta 
problema qualquer para o sistema. Existem várias formas para se fazer isto, a forma 
que descreverei abaixo assume que você tem acesso a um outro dispositivo de partida 
que não seja o HD do Linux (<em>CD-ROM</em>, <em>disquetes</em>, 
<em>outro disco rígido</em>, etc). Assim, mesmo que encontre uma senha de BIOS 
em uma máquina, poderá colocar o disco rígido em outra máquina e executar estes 
procedimentos. 
<![ %OBS [
 <p>
<strong>OBS: </strong> Estes procedimentos tens fins didáticos e administrativos, 
não sendo escritos com a intenção de fornecer mal uso desta técnica. Entender a 
exposição de riscos também ajuda a desenvolver novas técnicas de defesa para sistemas
críticos, e estas são totalmente possíveis e as mais usadas documentadas neste guia.
]]>

<list compact>
 <item>
Como primeiro passo consiga um CD de partida ou disquete de uma distribuição
<prgn>Linux</prgn>. Normalmente os mesmos CDs que usou para instalar sua 
distribuição também são desenvolvidos para permitir a manutenção do sistema, 
contendo ferramentas diversas e um terminal virtual disponível para trabalhos
manuais (tanto de instalação como manutenção). 

 <item>
Vá até a BIOS da máquina e altere a ordem de inicialização para que seu sistema
inicialize a partir do disquete ou CD-ROM (dependendo do método escolhido no 
passo anterior).

 <item>
Inicialize a partir do Disquete/CD-ROM.

 <item>
Na maioria dos casos você provavelmente estará utilizando o CD-ROM que usou para
instalar sua distribuição. Imediatamente quando o programa de instalação for 
iniciado, pressione <em>ALT</em>+<em>F2</em> para alternar para o segundo 
terminal virtual do sistema. O segundo terminal esta sempre disponível nas 
distribuições distribuições <prgn>Debian</prgn>, <prgn>Red Hat</prgn>, 
<prgn>Mandriva</prgn>, <prgn>Fedora</prgn>, etc.

 <item>
O próximo passo será montar sua partição raíz para ser possível alterar sua 
senha de root. Para isto, crie um diretório onde a partição será montada 
(por exemplo, <file>/target</file>) e execute o comando mount:
<tt>mount /dev/hda1 /target</tt> (assumindo que <file>/dev/hda1</file> é 
a partição que contém seu sistema de arquivos raíz (<file>/</file>).

 <item>
Entre no diretório <file>/target</file> (<tt>cd /target</tt>) e torne-o seu 
diretório raíz atual com o comando: <tt>chroot .</tt>.

 <item>
digite <tt>passwd</tt> e entre com a nova senha de superusuário.

 <item>
saia do <prgn>chroot</prgn> digitando <tt>exit</tt>

 <item>
Digite <tt>sync</tt> para salvar todas as alterações pendentes para o disco e 
reinicie o sistema (pressionando-se as teclas <tt>CTRL+ALT+DEL</tt>, <tt>init 6</tt>, 
<tt>reboot</tt>).

 <item>
Retire o CD da unidade de discos e altere sua BIOS para dar a partida a partir do 
disco rígido.

 <item>
Teste e verifique se a senha de root foi alterada.
</list>
Normalmente as distribuições seguem o padrão FHS, mantendo binários de 
administração necessários para recuperação do sistema em caso de panes dentro 
da partição <file>/</file>, se este não for o caso de sua distribuição (hoje em 
dia é raro), você terá que montar sistemas de arquivos adicionais (como o 
<file>/usr</file>, <file>/var</file>) ou então o comando <prgn>passwd</prgn> 
não será encontrado ou terá problemas durante sua execução.


<sect id="manut-tarefas">Tarefas automáticas de manutenção do sistema
 <p>
Os arquivos responsáveis pela manutenção automática do sistema se 
encontram em arquivos individuais localizados nos diretórios 
<file>/etc/cron.daily</file>, <file>/etc/cron.weekly</file> e 
<file>/etc/cron.montly</file>. A quantidade de arquivos depende 
da quantidade de pacotes instalado em seu sistema, porque alguns 
programam tarefas nestes diretórios e não é possível descrever todas, 
para detalhes sobre o que cada arquivo faz veja o cabeçalho e o código 
de cada arquivo.  
 <p>
Estes arquivos são executados pelo <prgn>cron</prgn> através do arquivo 
<file>/etc/crontab</file>. Você pode programar quantas tarefas 
desejar, para detalhes veja <ref id="manut-cron"> e <ref id="manut-at">. 
Alguns programas mantém arquivos do <prgn>cron</prgn> individuais em 
<![ %DEBIAN [ <file>/var/spool/cron/crontabs</file> ]]> 
que executam comandos periodicamente. 
 

<sect id="manut-cron">cron
 <p>
O <prgn>cron</prgn> é um daemon que permite o agendamento da execução de 
um comando/programa para um determinado dia/mês/ano/hora. 
<![ %DESCRICAOD [
É muito usado em tarefas de arquivamento de logs, checagem da integridade 
do sistema e execução de programas/comandos em horários determinados. ]]>
 <p> 
As tarefas são definidas no arquivo <file>/etc/crontab</file> 
e por arquivos individuais de usuários em 
<![ %DEBIAN [ <file>/var/spool/cron/crontabs/[usuário]</file> ]]> (criados 
através do programa <prgn>crontab</prgn>). Adicionalmente a distribuição 
<prgn>Debian</prgn> utiliza os arquivos no diretório <file>/etc/cron.d</file> 
como uma extensão para o <file>/etc/crontab</file>. 
 <p>
Para agendar uma nova tarefa, basta editar o arquivo <file>/etc/crontab</file> 
com qualquer editor de texto (como o <prgn>ae</prgn> e o <prgn>vi</prgn>) e 
definir o mês/dia/hora que a tarefa será executada. Não é necessário 
reiniciar o daemon do <prgn>cron</prgn> porque ele verifica seus 
arquivos a cada minuto. Veja a seção <ref id="manut-cron-formato"> para 
entender o formato de arquivo <prgn>cron</prgn> usado no agendamento de 
tarefas. 


<sect1 id="manut-cron-formato">O formato de um arquivo crontab
 <p>
O arquivo <file>/etc/crontab</file> tem o seguinte formato:
<example>
52  18    1   *   *    root     run-parts --report /etc/cron.montly
|   |     |   |   |      |      |
|   |     |   |   |      |      \_Comando que será executado
|   |     |   |   |      |      
|   |     |   |   |      \_ UID que executará o comando
|   |     |   |   |            
|   |     |   |   \_ Dia da semana (0-7)
|   |     |   |
|   |     |   \_ Mês (1-12)
|   |     |
|   |     \_ Dia do Mês (1-31)
|   |
|   \_ Hora
|
\_ Minuto
</example>
Onde:
<taglist compact>
 <tag>Minuto</tag>
 <item>
Valor entre 0 e 59

 <tag>Hora</tag>
 <item>
Valor entre 0 e 23

 <tag>Dia do Mês</tag>
 <item>
Valor entre 0 e 31

 <tag>Mês</tag>
 <item>
Valor entre 1 e 12 (identificando os meses de Janeiro a Dezembro) 

 <tag>Dia da Semana</tag>
 <item>
Valor entre 0 e 7 (identificando os dias de Domingo a Sábado). Note que 
tanto 0 e 7 equivalem a Domingo. 

 <tag>usuário</tag>
 <item>
O usuário especificado será usado para executar o comando (o usuário 
deverá existir). 

 <tag>comando</tag>
 <item>
Comando que será executado. Podem ser usados parâmetros normais usados na 
linha de comando. 
</taglist>
Os campos do arquivo são separados por um ou mais espaços ou tabulações. 
Um asterisco <tt>*</tt> pode ser usado nos campos de data e hora para 
especificar todo o intervalo disponível. O hífen <tt>-</tt> serve para 
especificar períodos de execução (incluindo a o número inicial/final). 
A vírgula serve para especificar lista de números. Passos podem ser 
especificados através de uma <tt>/</tt>. Veja os exemplos no final 
desta seção. 
 <p>
O arquivo gerado em 
<![ %DEBIAN [ <file>/var/spool/cron/crontabs/[usuário]</file> ]]> pelo 
<prgn>crontab</prgn> tem o mesmo formato do <file>/etc/crontab</file> 
exceto por não possuir o campo <tt>usuário (UID)</tt>, pois o nome 
do arquivo já identifica o usuário no sistema. 
 <p>
Para editar um arquivo de usuário em 
<![ %DEBIAN [ <file>/var/spool/cron/crontabs</file> ]]> ao invés de 
editar o <file>/etc/crontab</file> use <tt>crontab -e</tt>, 
para listar as tarefas daquele usuário <tt>crontab -l</tt> e 
para apagar o arquivo de tarefas do usuário <tt>crontab -r</tt> 
(adicionalmente você pode remover somente uma tarefa através 
do <tt>crontab -e</tt> e apagando a linha correspondente). 
<![ %OBS [
 <p>
OBS: Não esqueça de incluir uma linha em branco no final do arquivo, caso 
contrário o último comando não será executado. ]]>
 <p>
O <prgn>cron</prgn> define o valor de algumas variáveis automaticamente 
durante sua execução; a variável <file>SHELL</file> é definida como 
<tt>/bin/sh</tt>, <file>PATH</file> como <tt>/usr/bin:/bin</tt>, 
<file>LOGNAME</file>, <file>MAILTO</file> e <file>HOME</file> são 
definidas através do arquivo <file>/etc/passwd</file>. Os valores 
padrões destas variáveis podem ser substituídos especificando um 
novo valor nos arquivos do <prgn>cron</prgn>. 
<![ %EXEMPLO [
 <p>
Exemplos de um arquivo <file>/etc/crontab</file>:
<example>
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin

00 10  * * *  root sync
# Executa o comando sync todo o dia as 10:00
00 06  * * 1  root updatedb
# Executa o comando updatedb toda segunda-feira as 06:00.
10,20,40 *  * * *  root runq
# Executa o comando runq todos os dias e a toda a hora em 10, 20 e 40 minutos. 
*/10 *  * * *  root fetchmail
# Executa o comando fetchmail de 10 em 10 minutos todos os dias
15 0  25 12 * root echo "Feliz Natal"|mail john
# Envia um e-mail as 0:15 todo o dia 25/12 para john desejando um feliz natal. 
30 5  * * 1-6   root  poff
# Executa o comando poff automaticamente as 5:30 de segunda-feira a sábado. 
</example> ]]>


<sect id="manut-at">at
 <p>
O <prgn>at</prgn> agenda tarefas de forma semelhante ao <prgn>cron</prgn> com uma 
interface que permite a utilização de linguagem natural nos agendamentos. Sua 
principal aplicação é no uso de tarefas que sejam disparadas somente uma vez. 
Uma característica deste programa é a execução de aplicativos que tenham passado
de seu horário de execução, muito útil se o computador é desligado com freqüência 
ou quando ocorre uma interrupção no fornecimento de energia. 
 <p>
Para utilizar o <prgn>at</prgn>, instale-o com o comando: 
<tt>apt-get install at</tt>. O próximo passo é criar os arquivos
<file>/etc/at.allow</file> e <file>at.deny</file>. Estes arquivos 
são organizados no formato de um usuário por linha. Durante o 
agendamento, é verificado primeiro o arquivo <file>at.allow</file> 
(lista de quem pode executar comandos) e depois o <file>at.deny</file> 
(lista de quem NÃO pode executar comandos). Caso eles não existam, 
o agendamento de comandos é permitido a todos os usuários.
 <p>
Abaixo seguem exemplos do agendamento através do comando <prgn>at</prgn>:
<taglist compact>
 <tag>echo ls | at 10am today</tag>
  <item>
 Executa as 10 da manha de hoje

 <tag>echo ls | at 10:05 today</tag>
  <item>
Executa as 10:05 da manha de hoje

 <tag>echo ls | at 10:05pm today</tag>
  <item>
Executa as 10:05 da noite de hoje

<tag>echo ls | at 22:05 today</tag>
  <item>
Executa as 22:05 da noite de hoje

<tag>echo ls | at 14:50 tomorrow</tag>
 <item>
Executa o comando amanhã as 14:50 da tarde

<tag>echo ls | at midnight</tag>
 <item>
Executa o comando a meia noite de hoje

<tag>echo ls | at midnight tomorrow</tag>
 <item>
Executa o comando a meia noite de amanhã

<tag>echo ls | at noon</tag>
 <item>
Executa o comando de tarde (meio dia).

<tag>at -f comandos.txt teatime</tag>
 <item>
Executa os comandos especificados no arquivo "comandos.txt" no horário do café da
tarde (as 16:00 horas).

<tag>at -f comandos.txt +3 minutes</tag>
 <item>
Executa os comandos especificados no arquivo "comandos.txt" daqui a 3 minutos. 
Também pode ser especificado "hours" ou "days". 

<tag>at -f comandos.txt tomorrow +3 hours</tag>
 <item>
Executa os comandos especificados no arquivo "comandos.txt" daqui a 3 horas no 
dia de amanhã. (se agora são 10:00, ela será executada amanhã as 13:00 da tarde).
</taglist>
Todas as tarefas agendadas são armazenadas em arquivos dentro do diretório
<file>/var/spool/cron/atjobs</file>. A sintaxe de comandos para gerenciar as 
tarefas é semelhante aos utilitários do <prgn>lpd</prgn>:
Para ver as tarefas, digite <tt>atq</tt>. Para remover uma tarefa, use o comando
<tt>atrm</tt> seguido do número da tarefa obtida pelo <tt>atq</tt>.


