(M)  s i s t e m a   o p e r a c i o n a l   m a g n u x   l i n u x ~/ · documentação · suporte · sobre

  Página seguinte Página anterior Índice

240. Dicas Curtas

240.1 Dica Útil do Syslog Paul Anderson, Mantenedor - Como Fazer - Dicas Linux

Edite o /etc/syslog.conf, e coloque a seguinte linha:

# Copia tudo em  tty8
*.*                                     /dev/tty8
Um detalhe: LEMBRE-SE DE USAR TAB ! syslog não gosta de espaços...

240.2 Programa de visualização dos Como Fazer. Didier Juges, dj@destin.nfds.net

De um iniciante para outro, segue aqui um programa curto que facilita a visualização e pesquisa em documentos Como Fazer - HOWTO. Meus documentos estão em /usr/doc/faq/howto/ e estão compactadas com gzip. O nome dos arquivos são XXX-HOWTO.gz, sendo XXX o assunto. Eu criei o seguinte programa, chamado "howto" no diretório /usr/local/sbin:


#!/bin/sh
if [ "$1" = "" ]; then
    ls /usr/doc/faq/howto | less
else
    gunzip -c /usr/doc/faq/howto/$1-HOWTO.gz | less
fi

Quando chamado sem argumentos, mostra o conteúdo do diretório que contém os COMO FAZER disponíveis. Então ao se informar a primeira parte do nome do arquivo (antes do hífen) como argumento, ele descompacta (mantendo o original intocado) e mostra o documento.

Por exemplo, para ver o documento Serial-HOWTO.gz , deve-se informar:

$ howto Serial

240.3 Há espaço livre disponível??? Hans Zoebelein, zocki@goldfish.cube.net

Segue aqui um pequeno programa que checa de tempos em tempos se há espaço em disco suficiente em qualquer dispositivo que esteja montado (discos, cdrom, disquetes, etc.).

Caso o espaço acabe, uma mensagem é apresentada a cada X segundos na tela e é enviado um email por dispositivo que esteja sem espaço.


#!/bin/sh
#
# $Id: Tips-HOWTO.pt_BR-240.html,v 1.1 2000/10/20 12:52:23 ricardo Exp $
#
#
# Desde que erros misteriosos ocorreram durante a compilação 
# quando arquivos encheram o diretório tmp
# eu escrevi este programa para ser avisado de que os discos estavam cheios.
#
# Caso este utilitário evite que o seu servidor exploda mande uma
# mensagem de agradecimento para zocki@goldfish.cube.net.
#
# Caso você realmente saiba como lidar com o sed, por favor desculpe-me!
#
# Atire e esqueça: ponha 'check_hdspace &' no rc.local.
# Cheque o espaço livre nos dispositivos a cada $SLEEPTIME segundos.
# Pode-se verificar inclusive disquetes e fitas.
# Caso o espaço livre esteja abaixo de $MINFREE (kb), será apresentada 
# uma mensagem e enviado um email por cada dispositivo em $MAIL_TO_ME.
# Caso haja mais espaço livre do que o limite definido, um email pode 
# também ser enviado.
#
# TODO: Diferentes $MINFREE para cada dispositivo.
# Liberar diretórios /*tmp de coisas antigas e inúteis caso não haja mais espaço # livre.


DEVICES='/dev/sda2 /dev/sda8 /dev/sda9'       # device; informe seus discos aqui
MINFREE=20480                                 # kb; abaixo daqui, avise-me
SLEEPTIME=10                                  # sec; tempo entre as checagens
MAIL_TO_ME='root@localhost'                   # fool; quem deve ser avisado


# ------ a partir daqui nenhuma alteração será necessária (eu espero :) ) ------

MINMB=0
ISFREE=0
MAILED=""
let MINMB=$MINFREE/1024         # sim, nós somos rígidos :)

while [ 1 ]; do
        DF="`/bin/df`"
                for DEVICE in $DEVICES ; do
                ISFREE=`echo $DF | sed s#.\*$DEVICE" "\*[0-9]\*""\*[0-9]\*" "\*## | sed s#" ".\*##`
                
                if [ $ISFREE -le $MINFREE ] ; then
                        let ISMB=$ISFREE/1024
                        echo  "WARNING: $DEVICE only $ISMB mb free." >&2
                        #echo "more stuff here" >&2
                        echo -e "\a\a\a\a"
                        
                        if [ -z  "`echo $MAILED | grep -w $DEVICE`" ] ; then
                                echo "WARNING: $DEVICE only $ISMB mb free.      (Trigger is set to $MINMB mb)" \
                                | mail -s "WARNING: $DEVICE only $ISMB mb free!" $MAIL_TO_ME
                                MAILEDH="$MAILED $DEVICE"
                                MAILED=$MAILEDH
                                # put further action here like cleaning
                                # up */tmp dirs...
                        fi
                        elif [ -n  "`echo $MAILED | grep -w $DEVICE`" ] ; then
                                # Remove mailed marker if enough disk space
                                # again. So we are ready for new mailing action.
                                MAILEDH="`echo $MAILED  | sed s#$DEVICE##`"
                                MAILED=$MAILEDH
                        fi
                        
                done
                sleep $SLEEPTIME

done

240.4 Utilitário para limpar os arquivos de históricos Paul Anderson, Mantenedor - Como Fazer - Dicas Linux

Caso você seja como eu, deve manter uma lista com centenas de inscritos, mais de cem mensagens por dia chegando pelo UUCP. Bem, o que fazer para lidar com históricos enormes? Instalar chklogs. Chklogs foi escrito por Emilio Grimaldo, grimaldo@panama.iaehv.nl, e a versão atual é a 1.8 disponível em ftp.iaehv.nl:/pub/users/grimaldo/chklogs-1.8.tar.gz. Ele é auto explicativo na instalação (obviamente você verificará o conteúdo do subdiretório info). Uma vez instalado, adicione uma entrada ao crontab como esta:

# Executar chklogs as 3:00AM diariamente.
00 21 * * *       /usr/local/sbin/chklogs -m

Enquanto você estiver lidando isso, avise ao autor quão bom seu software é. :)

240.5 Programa útil para limpar arquivos core. Otto Hammersmith, ohammers@cu-online.com

Crie um arquivo chamado rmcores (o autor chama isso de trata-cores) com o seguinte conteúdo:


#!/bin/sh
USAGE="$0 <directory> <message-file>"

if [ $# != 2 ] ; then
        echo $USAGE
        exit
fi

 echo Apagando...
find $1 -name core -atime 7 -print -type f -exec rm {} \;

echo email
for name in `find $1 -name core -exec ls -l {} \; | cut -c16-24`
do
        echo $name
        cat $2 | mail $name
done

E adicione uma tarefa ao cron para executar este utilitário periodicamente.

240.6 Movendo diretórios ente sistemas de arquivos. Alan Cox, A.Cox@swansea.ac.uk

Uma maneira rápida de mover uma árvore de diretórios e arquivos de um disco para outro.

(cd /origem/diretório && tar cf - . ) | (cd /destino/diretório && tar xvfp -)
[Mude de cd /origem/diretório: tar;.etc; para prevenir possíveis danos ao diretório em caso de problemas. Agradecimentos a Jim Dennis, jim@starshine.org, por avisar-nos.]

240.7 Descobrindo os maiores diretórios. Mick Ghazey, mick@lowdown.com

Quer saber quais são os maiores diretórios em seu computador? Veja como descobrir.

du -S | sort -n

240.8 A Gazeta Linux

Congratulações a John Fisk, criador do Linux Gazette. Esta é uma excelente revista eletrônica e é GRÁTIS!!! Agora o que mais você poderia perguntar? Visite A Gazeta Linux em:

http://www.linuxgazette.com
É bom saber que LG tem periodicidade mensal, e (2) John Fisk não mais a mantém e sim o pessoal da SSC.

240.9 Ponteiro para uma atualização do GNU Make 3.70 para mudar o comportamento do VPATH. Ted Stern, stern@amath.washington.edu

Eu não sei se muita gente tem esse problema, mas há uma funcionalidade da versão 3.70 do GNU make que eu não gosto. É que o VPATH age estranhamento caso se informe um caminho de nome absoluto. Há uma atualização muito robusta que conserta isso em Paul D. Smith <psmith@wellfleet.com>. Ele também envia mensagens e documentação após cada revisão do GNU make em "gnu.utils.bug" geralmente, eu aplico as atualizações e compilo gmake em todos os sistemas nos quais trabalho.

240.10 Como evitar que o meu sistema faça a checagem de integridade a cada inicialização? Dale Lutz, dal@wimsey.com

P: Como evitar que e2fsck cheque o sistema de arquivos de meu disco a cada vez que o sistema for inicializado.

R: Ao reconstruir o kernel, o sistema de arquivos é marcado como ´sujo´ e então o disco será checado a cada inicialização do sistema. Para corrigir isso execute: rdev -R /zImage 1

Isso avisa ao kernel de que os sistemas de arquivos não apresentam nenhum problema.

Nota: caso se esteja usando LILO, então adicione read-only à configuração do Linux no arquivo de configuração do LILO (normalmente /etc/lilo.conf) .

240.11 Como evitar a checagem dos sistemas de arquivos, causados por dispositivos ocupados durante a inicialização do sistema. Jon Tombs, jon@gtex02.us.es

Caso você tenha erros de dispositivo ocupado ao desligar o sistema e que deixam os sistemas de arquivos com indicação para verificação de integridade em tempo de inicialização, segue uma correção simples:

Em /etc/rc.d/init.d/halt ou /etc/rc.d/rc.0, adicione a linha

mount -o remount,ro /mount.dir
para todos os sistemas de arquivos montados, exceto /, antes de chamar o comando umount -a. Isto significa que, se por alguma razão, o desligamento falhar ao finalizar todos os processos e desmontar os discos, eles estarão limpos para reinicialização. Isso economiza bastante tempo durante a carga do sistema.

240.12 Como encontrar os maiores arquivos de um disco rígido.

Simon Amor, simon@foobar.co.uk

ls -l | sort +4n

Ou, para aqueles que realmente necessitam de espaço, segue uma alternativa que demora um pouco mas funciona perfeitamente:

cd /
ls -lR | sort +4n

240.13 Como imprimir páginas com margem para arquivamento. Mike Dickey, mdickey@thorplus.lib.purdue.edu


        #!/bin/sh
        # /usr/local/bin/print
        # um formatador simples, que permite uma margem 
        # para encadernações 
        cat $1 | pr -t -o 5 -w 85 | lpr

240.14 Um meio de pesquisar em árvores de arquivos por uma expressão regular específica. Raul Deluth Miller, rockwell@nova.umd.edu

Eu chamo este programa ´forall´. Pode-se usar da seguinte forma:

forall /usr/include grep -i ioctl
forall /usr/man grep ioctl
Aqui está forall:

#!/bin/sh
if [ 1 = `expr 2 \> $#` ]
then
        echo Uso: $0 dir cmd [opcargs]
        exit 1
fi
dir=$1
shift
find $dir -type f -print | xargs "$@"

240.15 Um programa para limpeza após programas que criam arquivos de cópias de segurança e salvamento automático. Barry Tolnas, tolnas@nestor.engr.utk.edu

Segue uma dica simples em duas linhas com recursividade em uma hierarquia de diretórios removendo arquivos emacs de salvamento automático (#) e cópias de segurança (~), arquivos .o e arquivos .log do Tex. Ele ainda comprime arquivos .tex e arquivos README. Eu chamo isso de encolhimento no meu sistema.


#!/bin/sh
#ENCOLHER remove arquivos desnecessários e comprime arquivos .tex e README
#De Barry tolnas, tolnas@sun1.engr.utk.edu
#
echo encolhendo $PWD
find  $PWD \( -name \*~ -or -name \*.o -or -name \*.log -or -name \*\#\) -exec
rm -f {} \;
find $PWD \( -name \*.tex -or -name \*README\* -or -name \*readme\* \) -exec gzip -9 {} \;

240.16 Como encontrar os processos que estão utilizando mais memória. Simon Amor, simon@foobar.co.uk

ps -aux | sort +4n
-OU-
ps -aux | sort +5n

240.17 Configurando o vi para Programação C Paul Anderson, Mantenedor - Como Fazer - Dicas Linux

Eu programo bastante em C em meu tempo livre, e eu usei algum tempo para melhorar o vi para ser mais amigável com o C. Segue o meu arquivo .exrc:


set autoindent
set shiftwidth=4
set backspace=2
set ruler

Como isso funciona? Autoindent faz com que o vi automaticamente indente cada linha, saltando para direita a distância de ^T em 4 espaços, backspace configura o valor da tecla de retorno e ruler mostra a régua com os números. Lembre-se que para ir a uma linha especifica, digamos número 20, use:


vi +20 myfile.c

240.18 Usando ctags para facilitar a programação.

Muitos programadores já tem ctags em seus computadores, mas não as usam. Podem ser muito úteis em diversas ocasiões. Suponha que se tenha uma função, em um dos diversos arquivos de fontes em um diretório, para um programa que está em desenvolvimento, e se deseja editar a função para sua atualização. Chamaremos esta função de foo(). Porém não lembramos onde está o fonte. É aqui que ctags começa a ser muito útil. Ao executar ctags ele produz um arquivo chamado tags no diretório atual, o qual é uma lista de todas as funções, em quais arquivos eles estão presentes e onde elas estão naqueles arquivos. O arquivo de resultado se parece com algo como:



ActiveIconManager       iconmgr.c       /^void ActiveIconManager(active)$/
AddDefaultBindings      add_window.c    /^AddDefaultBindings ()$/
AddEndResize    resize.c        /^AddEndResize(tmp_win)$/
AddFuncButton   menus.c /^Bool AddFuncButton (num, cont, mods, func, menu, item)$/
AddFuncKey      menus.c /^Bool AddFuncKey (name, cont, mods, func, menu, win_name, action)$/
AddIconManager  iconmgr.c       /^WList *AddIconManager(tmp_win)$/
AddIconRegion   icons.c /^AddIconRegion(geom, grav1, grav2, stepx, stepy)$/
AddStartResize  resize.c        /^AddStartResize(tmp_win, x, y, w, h)$/
AddToClientsList        workmgr.c       /^void AddToClientsList (workspace, client)$/
AddToList       list.c  /^AddToList(list_head, name, ptr)$/

Para editar, digamos AddEndResize() no vim, execute:

vim -t AddEndResize
Isto irá trazer o arquivo apropriado ao editor, com o cursor localizado no início da função.

240.19 O que faz com que o sendmail demore 5 minutos na inicialização do Red Hat? Paul Anderson, paul@geeky1.ebtech.net

Este é um problema muito comum, quase no ponto de tornar-se um FAQ. A Red Hat já deve ter corrigido este problema em sua distribuição, mas isso pode ser corrigido por você mesmo. Ao se verificar o conteúdo do arquivo /etc/hosts, pode-se encontrar algo como:

127.0.0.1               localhost       suamáquina

Quando sendmail é iniciado, ele procura pelo nome da máquina (neste exemplo suamáquina). Após, ele verifica que o IP de suamáquina é 127.0.0.1, porém ele não gosta desta definição e procura novamente, continuando neste processo por um longo período até desistir e finalizar. Corrigir este problema é muito simples, bastando editar o arquivo /etc/hosts e alterá-lo para algo como:

127.0.0.1               localhost
10.56.142.1             yourbox

240.20 Como configurar o Red Hat para utilizar o comando ls em cores? Paul Anderson, paul@geeky1.ebtech.net

A distribuição da Red Hat vem com o comando ls em cores, porém ele não é configurado automaticamente na instalação. Vejam como fazê-lo.

Primeiro, digite eval `DIRCOLORS`

Após, alias ls='ls --color=auto'

E deve-se incluir o 'alias.....' no arquivo /etc/bashrc

240.21 Como descobrir qual biblioteca em /usr/lib contém determinada função? Pawel Veselow, vps@unicorn.niimm.spb.su

O que fazer quando se está compilando um programa e não se sabe a biblioteca que está faltando? Todas as informações geradas pelo gcc são com nomes de funções. Veja aqui como um simples comando pode encontrar o que você está procurando:

for i in *; do echo $i:;nm $i|grep nome_função 2>/dev/null;done

Onde nome_função é o nome da função que se está procurando.

240.22 Eu compilei um pequeno programa de testes em C, mas ao executá-lo não aparece nenhuma informação de saída!

Provavelmente o programa foi compilado em um binário chamado test. Porém Linux tem um programa de mesmo nome, o qual testa se determinada condição é verdadeira, e nunca produz resultados na tela. Para testar seu programa, estando no diretório onde ele está localizado, digite: ./test


Página seguinte Página anterior Índice