LINUX NEWBIE ADMINISTRATOR GUIDE
ver. 0.154 2001-09-02 by Stan, Peter and Marrei Klimas

A última versão deste guia está disponível em http://sunsite.dk/linux-newbie.
Copyright (c) <1999,2000,2001> by Peter and Stan Klimas. Sua resposta, comentários, correções, e melhorias são apreciados. Envie-os para linux_nag@canada.com Este material pode ser distribuído somente sob os termos e condições estabelecidas pela Open Publication License, v1.0, 8 ou posterior http://opencontent.org/openpub/ com as modificações estabelecidas em lnag_licence.html.




De volta ao início
Parte 3: FAQ sobre Operações Básicas



Conteúdo:
3.1 Básico
   3.1.1 Nomes de arquivos
   3.1.2 Para que servem os diferentes diretórios?
   3.1.3 Como eu rodo um programa?
   3.1.4 Como posso modificar o PATH?
   3.1.5 Como posso desligar meu computador?
   3.1.6 Como fazer com programas travados?
3.2  usuários, senhas, permissões de arquivos, e segurança.
   3.2.1 Diretórios home, root, adicionando usuários
   3.2.2 Sobre segurança de passwords
   3.2.3 Eu esqueci da senha de root
   3.2.4 Eu esqueci de minha senha de usuário
   3.2.5 Desabilitando ou removendo uma conta de usuário
   3.2.6 Eu tenho problemas de permissões. Como funcionam as permissões e propriedades dos arquivos?
   3.2.7 Meu player Mp3 soa horrível. O som é entrecortado(Como eu defino suid?)
3.3 Planejamento de execução de tarefas com ¨at", "batch", e cron
   3.3.1 Como eu executo um comando em background(segundo plano)?
   3.3.2 Como eu executo um comando em uma hora especifica(usando "at" ou "batch")?
   3.3.3 Como eu programo o cron?
3.4 Espaço de paginação/swap)
   3.4.1 Partições swap
   3.4.2 Arquivos de swap
3.5  Shell
   3.5.1 O que é um shell e eu preciso de algum shell diferente?
   3.5.2 Como eu customizo o prompt do shell?
   3.5.3 Cor em terminal texto
   3.5.4 Como eu imprimo símbolos na console ou em uma aplicação modo texto?
   3.5.5 Como eu escrevo um simples shell script?
   3.5.6 Significado das aspas
   3.5.7 Redirecionamento de entrada e saída
   3.5.8 Caracteres especiais do shell(metacaracteres)
3.6  Instalação de pacote e o gerenciador de pacotes rpm
   3.6.1 Como eu instalo um programa que baixei da Internet?


3.1 Básico

3.1.1 Nomes de arquivos

O Linux é sensível a maiúsculos/minúsculos. Por exemplo, meuarquivo, Meuarquivo, e meuARQUIVO são três arquivos diferentes. Sua password e nome de login são também sensíveis a maiúsculos/minúsculos(Isto segue a tradição em que tanto o Unix e a linguagem C são sensíveis a maiúsculos/minúsculos) A convenção de nomes para arquivos e diretórios é a mesma. Todos os arquivos e diretórios que eu crio (para mim, como um usuário) são em minúsculos, a menos que haja uma razão muito especial para faze-lo diferente. A maioria dos comandos Linux são também em minúsculos.
Os nomes de arquivos em Linux podem ter um tamanho de até 256 caracteres e eles contém normalmente letras, números, ¨.¨ (pontos), ¨_¨(travessões) e ¨-¨ (hífens). Outros caracteres são permitidos mas não recomendados. Em particular, não é recomendado usar caracteres metacaracteres: ¨*¨(asterisco), ¨?¨ (interrogação), e¨ ¨ (espaço), ¨$¨ (cifrão), ¨&¨ (e comercial), colchetes, etc. Isto é porque metacaracteres tem significado especial para o shell Linux(o0 shell é algo como COMMAND.COM, o processador de comandos do DOS). É possível ter espaço dentro de um nome de arquivo mas nós não recomendamos isto , usamos ¨_¨ (travessão) em seu lugar.
Não é possível de forma alguma ter uma ¨/¨ (barra) como parte do nome do arquivo por que ela é usada para representar o topo da árvore de diretórios e é um separador utilizado no caminho de um arquivo.( o mesmo que o ¨\¨ em DOS).
Tal como em DOS, eu não posso ter um arquivo chamado ¨.¨ ou um arquivo chamado ¨..¨ (ponto ou dois pontos) - - eles significam o diretório corrente e o diretório pai, exatamente como em DOS.
Para manipular arquivos como nomes que contem metacaracteres, eu uso um par de ¨'¨ (apostrofo), de forma que os metacaracteres são colocados entre aspas e portanto o shell não interpreta o significado deles. Por exemplo, para remover um arquivo meu arquivo* (contem espaço e um asterisco), eu faria:
rm 'meu arquivo*'
Por favor, note que eu uso um par de ' (apóstrofos) para deixa-los entre aspas. Usar as aspas diretamente para coloca-los entre aspas é geralmente mais fraco que delimitar com ¨'¨(apostrofo). Se você usa as aspas alguns metacaracteres podem ser interpretados.
Eis o significado de alguns metacaracteres:
*  = Casa com qualquer seqüência de zero ou mais caracteres(exceto . (ponto) no inicio do nome do arquivo).
?  = Casa com qualquer caracter único.
[abC1]  = Casa com um único caracter no conjunto enumerado. Neste exemplo o conjunto contém ¨a¨ 'b',  'C', e '1'.
[a-z] = Casa com qualquer letra em minúsculos.
[A-F] = Casa com qualquer letra em maiúsculo de A a F.
[0-9] = Casa com qualquer digito.
[a-zA-Z0-9] = Casa com qualquer letra(minúsculo ou maiúscula e qualquer digito).
Exemplos: Este comando mostrará qualquer nome de arquivo no diretório corrente com exceção daqueles que se iniciam por um ponto .
ls *
Um equivalente deste comando é digitar ls ou dir (sem o ¨*¨). Nomes de arquivos que se iniciam com . (ponto) não são mostrados por que o ponto como primeiro caracter não casa com ¨*¨. Imagine que arquivos que se iniciam com ponto sejam equivalentes aos arquivos com atributo ¨ hidden¨ do DOS. Use ls -a (list com a opção "all") ou ls .* para ver estes arquivos.  Os arquivos que se iniciam com ponto são comuns nos diretórios home e eles são tipicamente usados para conter configurações a nível de usuário.
Este comando mostrará qualquer nome de arquivo que contenha um ponto
ls *.*
Este comando mostrará qualquer nome de arquivo que contenha dois pontos:
ls *.*.*
Por favor, note que Linux não tem ¨extensões de nomes de arquivos¨ nos moldes do DOS mas você pode usa-las. Por exemplo, eu posso ter um arquivo meu_texto.zip. Algumas outras características da nomenclatura de nomes de arquivos em DOS estão completamente ausentes(¨Micros~1.doc¨ vem à memória).
Este comando mostrará todos os nomes de arquivos no diretório corrente que se iniciam com um ¨a¨ ou ¨b¨, ou qualquer letra em maiúsculos:
ls [abA-Z]*
Como um exemplo de problemas que você poderia encontrar usando caracteres não recomendados em um nome de arquivo, tente criar um arquivo com um nome que se inicie por um hífen e então o remova - - parece que não há maneira de fazer isto (um hífen normalmente é usado para incluir opções de um comando). Por exemplo, o comando
dir > -junk
criará um arquivo com um nome engraçado(tal como em DOS, o símbolo ¨>¨ redireciona a saída do comando dir para um arquivo de nome ¨junk¨ ). Como a forma normal de remover o arquivo -junk não funciona, eu uso :
rm ./-junk
O ponto e a barra no inicio do significa ¨o diretório corrente¨ e aqui serve ao propósito de esconder o ¨hifen¨ inicial e assim ele não é interpretado como se fosse incluir opções para o comando rm .

3.1.2 Quais são os diferentes diretórios?

Isto é muito bem explicado no Guia de Administrador de Sistemas Linux(SAG), o qual deveria estar disponível em seu sistema. Tente
cd /usr/doc/LDP/sag
lynx sag.html
Este comando chamará um browser em modo texto de nome lynx para ver este livro em html. Você pode também usar qualquer outro browser, Netscape, para Linux ou Windows para ver este livro. Estes livros e outros livros do LDP são realmente muito fáceis de serem lidos.
De forma resumida, o Linux contem cinco sistemas de arquivos. Estes sistemas de arquivos podem residir em um único ou em vários discos rígidos e/ou partições de disco rígido, dependendo do tamanho e necessidades de seu sistema. (Um único sistema de arquivo pode também ser distribuído entre diferentes dispositivos físicos, se necessário).
O sistema de arquivo "/" contem o sistema operacional básico e ferramentas de manutenção. O conteúdo deste sistema de arquivo seria o suficiente para inicializar o sistema e executar manutenção e consertos de emergência se eles forem necessários.
/usr contem todos os comandos, bibliotecas, documentação, e outros arquivos que não se alteram durante a operação normal. Ele também conterá as aplicações maiores, talvez aquelas que vieram com sua distribuição, por exemplo, Netscape.

/var contem arquivos que são alterados: diretórios de spool, arquivos de log, arquivos de trava, arquivos temporários, e paginas formatadas de manual.
/home contem arquivos de usuários (definições próprias do usuário, arquivos de customização, documentos, correios, etc...)
/proc contem inteiramente arquivos virtuais. Eles realmente não existem no disco e não ocupam nenhum espaço ali.(embora ls -l mostre os tamanhos deles). Quando você os vê, você na realidade está tendo acesso a arquivos na memória. Ele é usado para se ter acesso a informações sobre o sistema.
As partes do sistema de arquivos root são:
/bin\executáveis(binários) necessários durante o boot e que podem ser usados por usuários normais.
/sbin\executáveis(binários do sistema) não direcionados para uso por usuários gerais(Os usuários podem ainda usa-los, mas este diretório não está no PATH).
/etc - - arquivos de configuração de âmbito do sistema para seu sistema operacional.
/root - - o diretório home do administrador do sistema (chamado superusuario ou root)
/dev - - arquivos de dispositivos. Os dispositivos aparecem nos UNIXes como arquivos de forma que é fácil ler ou gravar utilizando-os.
/mnt\ponto de montagens para medias removíveis(disquetes, cdrom, zipdrive), partições de outros sistemas operacionais (MS Windows, por exemplo), compartilhamentos de rede, e qualquer outra coisa que esteja montada no sistema de arquivos temporariamente. Ele normalmente contem um subdiretório separado para cada tipo de montagem. O conteúdo destes dispositivos/compartilhamentos aparecem nestes subdiretórios - - não existem letras de drives em Linux.
/lib - - bibliotecas compartilhadas para programas que residem no sistema de arquivos ¨/¨.
/boot - - arquivos usados pelo LiLO (um carregador de bootstrap, a coisa que se carrega primeiro quando se dá boot na maquina e talvez dê a você uma opção sobre qual sistema operacional a ser carregado, se você tem mais que um no seu computador. Ele tipicamente também contem o kernel do Linux, mas isto pode ser armazenado em qualquer outro lugar, se somente LILO está configurado para conhecer onde ele está .
/opt - - grandes aplicações opcionais, por exemplo, kde sob RedHat 5.2(no RedHat 6.0, kde é distribuído como qualquer outra distribuição X-Windows, executáveis principais estão no diretório /usr/bin ).
/tmp - - arquivos temporários.  Este diretório pode ser limpado automaticamente.
/lost+found - - arquivos recuperados durante correção do sistema de arquivos.
As partes mais interessantes do sistema de arquivos /usr são:
/usr/X11R6- -sistema X-windows (version 11, release 6).
/usr/X11- -o mesmo como /usr/X11R6 (é um link simbólico para /usr/X11R6).
/usr/X11R6/bin - -pequenas aplicações X-windows, e talvez links simbólicos para os executáveis de algumas aplicações maiores X-windows que residem em seus próprios subdiretórios em algum outro lugar.
/usr/doc- -Documentação Linux .
/usr/bin and /usr/sbin- -similares a seus equivalentes no sistema de arquivos ¨/¨ (/bin and /sbin), mas não necessários para o boot básico .
/usr/local- -as aplicações instaladas locais, por exemplo, Netscape(cada aplicação em um subdiretório separado).
/usr/local/bin- -talvez aplicações pequenas dos usuários, mais links simbólicos para grandes executáveis contidos em subdiretórios separados sob /usr/local .
É importante entender que todos os subdiretórios aparecem em uma única arvore de diretórios, mesmo se os diretórios estão contidos em diferentes partições, drives físicos (incluindo disquetes, etc.) ou mesmo se eles estão distribuídos sobre a rede. Portanto, não há letras de discos¨ tal como em DOS. O que seria um drive sob DOS ou MS Windows, aparece em Linux como um subdiretório em uma localização de montagem especial.
O sistema de diretórios é bem definido e padrão na maioria das distribuições Linux(as pequenas diferenças estão sendo tratadas pelo Linux Standard Base). Ela é também bastante similar a aquelas encontradas em muitos Unix comerciais)

3.1.3 Como faço para rodar um programa?

Digitando o nome do executável na linha de comando não resolve? Há três possibilidades.
A primeira possibilidade: você não digitou o nome do executável corretamente. Verifique se digitou maiúsculos ou o contrario - o Linux é sensível a isto. Por exemplo, Pico ou PICO não executarão o editor pico.
A segunda possibilidade: talvez o programa não esteja no seu PATH.  Em Linux (ou UNIX), um executável deve estar no PATH para ser executado, e o diretório corrente normalmente não esta no seu PATH. Digite o caminho completo para o executável , ou execute::
cd o diretório do programa
./nome-do-programa
Você deve colocar o ponto e a barra em frente ao nome do programa ou então o programa não será executado. (Isto é uma característica de segurança, a não colocação do diretório corrente no path.  Ela torna a ação dos trojans(cavalos de Tróia) mais difíceis. Um cavalo de Tróia é um programa malicioso que pretende ser algo diferente do que realmente é. O ponto significa o diretório corrente e a barra é um separador entre o nome do diretório e o nome do arquivo(exatamente como o \ em DOS).
Você pode verificar seu path usando:
echo $PATH
Para aprender como mudar o seu PATH ou adicionar seu diretório corrente para ele, veja a próxima resposta.
Se seu executável está perdido em algum lugar em sua arvore de diretório, você pode então desejar encontra-lo usando(por exemplo):
find / -name "netscape"
para encontrar um arquivo chamado "netscape" pesquisando a partir do diretório raiz "/". Você pode obter o mesmo resultado de maneira mais rápida usando:
locate netscape
(Locate roda mais rápido porque ele se baseia em um banco de dados pré-carregado de nomes de arquivos de seu sistema. Este banco de dados é atualizado por um processo do cron em background(segundo plano) que normalmente roda a noite, por isto não conte com locate para encontrar um arquivo se você regularmente desliga seu computador a noite ou se você pesquisa por um arquivo que acabou de instalar.
Note que o PATH é normalmente diferente para o usuário root (o path do root inclui /sbin e /usr/sbin e os path de usuários normais, não). Portanto, usuários não podem executar comandos localizado no diretório sbin a menos que eles especifiquem o caminho completo para o comando. Também, se vc se tornar um superusuario executando o comando su, você herda o PATH do usuário, e para executar o comando em sbin, você deve especificar o caminho completo.
Trocando em miúdos, se você precisa saber onde um executável que está em seu PATH se encontra no sistema(por exemplo, o executável roda digitando-se seu nome em qualquer lugar no sistema, mas você gostaria de saber onde ele está), você pode usar algo como :
which netscape
which mostra o caminho completo para o programa executável chamado "netscape".
A terceira possibilidade:  talvez o arquivo não seja executável. Se ele for, mude as permissões para torna-lo um executável. Por exemplo,(como root ou o usuário que é o dono do arquivo):
chmod a+x meu-arquivo
fará com que o arquivo ¨meu-arquivo¨ se torne um executável para todos os usuários. Verifique se funcionou usando:
ls -l  meu-arquivo
Leia aqui se você não entende a saída deste comando ou nada desta terceira possibilidade.
Note que sob Linux (ou UNIX), não é uma extensão de nome de arquivo(por exemplo, .exe ou .com ou .bat) que que tornará um arquivo executável. O arquivo precisa ter um modo de acesso executável o qual não é diferente de um atributo de arquivo em DOS.

3.1.4 Como posso alterar PATH?

Normalmente, você não tem que alterar o seu PATH, mas pode ser muito útil entender o que é o PATH.
O PATH é uma lista de diretórios onde um programa a ser executado é pesquisado. Você pode verificar o conteúdo do PATH através de:
echo $PATH
o qual no meu sistema, mostra o seguinte PATH para o usuário "yogin":
/opt/kde/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/yogin/bin
O ":" é um separador, portanto o PATH acima representa uma lista dos seguintes diretórios:
/opt/kde/bin
/usr/local/bin
/bin
/usr/bin
/usr/X11R6/bin
/home/yogin/bin
Eis a saída do comando "echo $PATH" executado em meu sistema sob o usuário "root":
/opt/kde/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
Você pode modificar o PATH para todos os usuários do sistema editando o arquivo /etc/profile e ajustando (como root) a linha que se inicia com "PATH=".  Eu faço isto usando o editor pico (como root):
pico -w /etc/profile
(A opção -w desliga a quebra de linhas longas.)
Faça um novo login para que as mudanças se efetivem. Para definir um PATH para um determinado usuário somente, edite o arquivo /home/nome_de_login_do_usuário/.bash_profile (observe o ponto na frente do nome do arquivo \- - arquivos começando com um ponto são normalmente invisíveis, você tem que usar ls -a para vê-los).
Se você realmente quer ter o diretório corrente em seu PATH, adicione "." (ponto) a seu PATH.  Quando usado em um lugar onde um nome de diretório é esperado, um ponto significa o diretório corrente. A especificação do path em /etc/.bash_profile pode então ser algo como:
PATH="$PATH:$HOME/bin:"."
export PATH
Este comando pega o conteúdo da variável de ambiente chamada PATH (como está definido em /etc/profile), e acrescenta a ela o nome de seu diretório corrente como está definido pela variável HOME com um /bin ao final e então um ponto. Finalmente, o comando atribui este conteúdo de volta a variável chamada PATH. É necessário usar o comando ¨export¨ depois de modificar PATH ou outra variável de ambiente, de forma que a variável seja visível fora do script que a definiu.

3.1.5 Como posso encerrar meu sistema(shutdown)?

Em um terminal texto pressione <Ctrl><Alt><Del> (a saudação dos três dedos, você pressiona as três teclas simultaneamente), espera que o processo de shutdown termine, e desliga sua maquina somente depois que ela começa a se reinicializar. Se você estiver dentro do X-windows, primeiro mude para um terminal texto pressionando <Ctr><Alt><F1>  (as três teclas simultaneamente). Não desligue sua maquina sem executar o shutdown, caso contrario você pode ter mensagens de erros em disco na próxima vez que a ligar. (Tipicamente, os erros resultantes desta saída não apropriada do sistema serão reparados automaticamente durante o próximo boot, mas ocasionalmente problemas mais sérios poderão ocorrer, e então você precisará reparar o sistema de arquivos manualmente ou reinstalar o Linux!!!!)
Se você preferir que seu computador pare após pressionar <Ctrl><Alt><Del> (ao invés de reinicializar), você pode definir isto editando o arquivo etc/inittab. Este arquivo especifica algo como :
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
Como root, substitua a opção "-r" por "-h" de forma que fique :
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -h now
A linha que se inicia com um "#" é apenas um comentário(isto é para humanos, não tem nenhum efeito para o sistema). A opção "-t3" diz ao comando shutdown para aguardar 3 segundos antes de iniciar o shutdown. A opção "-r" e "-h" significam ¨reboot" e "halt" respectivamente, assim elas executam um shutdown para reinicializar ou um shutdown para uma parada do sistema.
O Root pode também usar o comando shutdown diretamente. Este comando pode ser usado para ou um shutdown local ou um remoto de sua maquina, mas é mais usado para shutdown remoto quando o teclado local não está disponível de forma que não se pode usar <Ctrl><Alt><Del>. Pode também ser muito útil se um programa travar de forma que o teclado não fique mais funcional. Por exemplo: :
telnet nome_da_maquina_com_teclado_não_disponível
[login como um usuário]
su
[ forneça a password]
Agora ou execute ps axu |more, encontre a identificação do processo do comando com problema na saída do ps e execute
kill identificação_do_comando_com_problema, ou reinicialize sua maquina com :
/sbin/shutdown -rn now
Este comando fará o shutdown rapidamente, ignorando o procedimento padrão((mais longo) - - de muito uso quando o sistema se torna realmente com problemas ( a opção -n fará o shutdown matar todos os processos antes de reinicializar)
Note que por razoes de segurança, você não pode se logar como root em uma maquina remota(por exemplo, com o comando telnet) Você precisa se logar como um usuário qualquer e então executar su e dar a senha para se tornar root root.
O comando shutdown pode também ser usado para executar um shutdown posteriormente. Por exemplo(como root):
/sbin/shutdown -r 23:59
reinicializará a maquina 1 minuto antes da meia-noite.
Se o comando shutdown é muito longo para você, você pode então usar estes dois comandos, os quais fazem exatamente o que seus nomes sugerem(como root):
reboot
halt
Um modo diferente de dar shut down em seu computador é mudar seu sistema para o nível 0 (para parar) ou para o nível 6 (para reinicializar). Tente usando(como root):
init 0
O significado dos diferentes níveis é explicado no arquivo /etc/inittab e aqui

3.1.6 O que fazer com um programa que está travado?

Programas mal escritos podem travar sob o Linux. Um problema com uma aplicação não deve, entretanto, afetar o sistema operacional de forma que não seja necessário frequentemente reinicializa-lo. Os servidores Linux são conhecidos por trabalharem mais de um ano sem serem reinicializados. Em nossa experiência, um falha de sistema operacional pode ser um sinal de problema de hardware ou problemas de configuração: nós repetidamente encontramos problemas com o superaquecimento de processadores Pentium (o ventilador do processador não gira tão rápido quanto deveria ou ele para), chips de memória com problemas, chips de memória com diferentes timings(você pode rearranja-los na seqüência dos chips, pode ajudar), configuração incorreta da Bios(você deve desativar todas as opções "Avançadas", o Linux cuida destas coisas sozinho). A mensagem de erro " signal 11" é tipicamente associada com problemas de hardware e é mais comum se manifestar em atividades de maior carga no processador, carga do Linux, compilação do kernel, etc.
O programa não está realmente travado. Alguns programas podem dar a impressão de travamento, embora na realidade eles estejam esperando por alguma entrada de dados. Tipicamente isto acontece se um programa espera por um nome de arquivo como um argumento na linha de comando e nenhum nome de arquivo é passado pelo usuário, assim o comportamento normal do programa é esperar por dados em " standard input" (o teclado, normalmente). Por exemplo, o comando
cat
pode parecer que esteja travado mas ele está esperando por uma entrada via teclado. Pressione <Ctrl>d  (que significa " fim de arquivo) para ver que isto irá satisfazer o comando cat )  Um outro exemplo, Eu tenho visto muitas questões em newsgroups a respeito de um " tar" furado que trava quando tenta descompactar um arquivo baixado da Internet, por exemplo:
tar -zxv meu_arquivo [errado!]
Ele espera por uma entrada de usuário também, por que nenhuma opção "-f nome-de-arquivo" foi especificada de forma que que "meu_arquivo" não foi reconhecido como um nome de arquivo. O comando correto é: :
tar -zxvf meu_arquivo
Note que o nome de arquivo deve seguir imediatamente a opção "f" (que significa "filename" (nome de arquivo)). O comando seguinte não funcionará (erro muito comum):
tar -zxfv meu_arquivo  [errado!]
Qualquer programa travado pode ser cancelado.
Um programa modo-texto em primeiro plano pode frequentemente ser cancelado pressionando-se <Ctrl>c. Isto não funcionará para aplicações maiores que bloqueiam o <Ctr>c, para que ele não seja usado acidentalmente. Você ainda poderá ter o controle ou enviando o programa para segundo plano pressionando <Ctrl>z  (nenhuma garantia que isto funcionará)  ou indo para outro terminal usando, por exemplo, <Alt><F2> e logando-se com o mesmo usuário onde o programa foi executado(isto sempre funcionará). Uma vez que você esteja no controle encontre o programa que você quer cancelar, por exemplo:
ps
Isto significa "print status" e mostra a lista de programas que estão sendo executados para o usuário corrente. Na saída do comando ps eu encontro a identificação do processo (PID) do programa que travou, e agora eu posso cancela-lo. Por exemplo:
kill 123
cancelará o programa com identificação de processo(PID) igual a "123".
Como usuário, eu posso somente cancelar processos que eu possuo(isto é, aqueles que eu executei). O superusuario pode cancelar qualquer processo. Para ver a lista completa de processos rodando em um sistema execute
ps axu | more
Isto mostra todos os processos que estão rodando no momento(opção "a"), mesmo aqueles sem o terminal de controle(opção "x"), e juntos com o nome do login do usuário que possui cada processo("u"). Como esta lista de processos normalmente não cabe em uma tela, eu uso a opção o " pipe" more de forma que a listagem pare a cada vez que a tela ficar cheia.
O comando kill tem um atalho killall para cancelar programas por nome, por exemplo:
killall netscape
cancelará qualquer programa como "netscape" em seu nome.
Programas baseados em X-windows-based não tem terminal de controle e podem ser facilmente cancelados usando-se em um terminal X:
xkill
o cursor mudará para algo parecendo uma sentença de morte, você aponta sobre a janela do programa a ser cancelado e pressiona o botão esquerdo do mouse; a janela desaparece e o programa associado é encerrado.
Um atalho para este último comando é pressionar <Ctrl><Alt><Esq>, o cursor mudará para algo parecendo uma sentença de morte - - você aponta sobre a janela do programa problema, clica o mouse, e a janela fecha e o programa é encerrado.
Se seu sistema X-windows sofre um crash do qual ele não pode se recuperar, a maneira mais fácil de encerrar o servidor X é pressionar <Ctrl><Alt><BkSpace>. Depois de tudo seria uma boa idéia rodar o comando ps axu, encontrar qualquer programa X-programs que ainda poderia estar rodando, e então encerra-lo. Se você não fizer isto, e houver um programa rodando de forma mal-comportada que provocou o crash no X-Windows, ele pode causar problemas novamente.
Se você tem programas em segundo plano, o sistema operacional irá bloquear o seu logout e dará uma mensagem parecida com "There are stopped jobs"("Há serviços parados" ). Para contornar e sair de qualquer forma, repita o comando logout (ou exit) imediatamente - - o programa em segundo plano(background) será automaticamente encerrado e sua sessão de login terminará(o logout será executado)
arquivos Core. Quando um programa sofre um crash, ele frequentemente grava um "core" no seu diretório. Isto é acompanhado por uma mensagem apropriada. Um "core" é uma imagem de memória(mais informação de debug) e tem a finalidade de ser um material para depuração. Se você é um usuário que não pretende depurar o programa simplesmente delete este arquivo core:
rm core
ou não faça nada(o core será sobregravado quando um outro core aparecer). Você pode desabilitar a gravação de arquivos core usando o comando :
ulimit -c 0
Checked if it worked using:
ulimit -a
(Isto mostra "user limits(limites do usuário)", a opção "-a" significa "all(todos)".) Para fazer a opção de desabilitar gravação de core permanente para todos os usuários, edite o arquivo /etc/profile (como root), onde ulimit é definido, e ajuste a definição Faça o login novamente para que as mudanças em /etc/profile tenham efeito.
Se você quiser ver como um arquivo core pode ser usado, tente(no diretório onde existe o arquivo core):
gdb -c core
O programa gdb (GNU debugger) é executado para este arquivo core e mostra o nome do programa que criou o arquivo core, o sinal para o qual o programa foi terminado, etc... Digite "quit" para sair do debugger. Para aprender o significado dos diferentes sinais, tente:
cat /usr/include/bits/signum.h |more

3.2 Usuários, senhas, permissões de arquivos, e segurança

3.2.1 Diretórios do usuário, root, adicionando usuários

O (quase) único lugar no disco que usuários normais (não root) podem gravar é no seu diretório home(não vou traduzir), o qual é /home/nome_de_login
Este diretório home é para todos os arquivos do usuário: definições, arquivos de configuração de programa, documentos, dados, cache do netscape, correio, etc. Como um usuário, você pode criar subdiretórios em seu diretório home para manter-se organizado. Outros usuários não podem ler seus arquivos ou gravar em seu diretório home a menos que você lhes dê permissão para isto.
Usuários normais podem também ver, ler e executar muitos outros arquivos no sistema(alem de seu diretório home), mas normalmente eles não podem modificar ou remove-los.
O root(também chamado super usuário) é uma conta especial de administração que tem o poder de modificar qualquer arquivo no sistema. Não é uma boa idéia trabalhar habitualmente em seu sistema como root- - se você fizer isto, seus erros podem lhe custar muito caro. Defina e use uma conta de usuário normal para o trabalho no dia a dia para você mesmo., uma outra conta para seu filho, e ainda uma outra conta para sua esposa. A conta root é tipicamente a única conta que existe em Linux. Depois de sua instalação inicial. Dai, você tem que explicitamente criar contas de usuários para o trabalho normal para seu sistema Linux.
Uma conta de usuário pode ser criada por "root" usando, por exemplo:
adduser joe
passwd joe
[type the password for the user joe]
[retype the password for the user joe so as to avoiod mistakes]
Assim primeiramente, eu fiz o login como root, então, na linha de comando dei o comando "adduser" com o parâmetro "joe". Isto faz com que o usuário "joe" seja criado em meu sistema. A seguir, dei o comando "passwd joe" para trocar a password para o usuário "joe" para algo seguro. Agora, eu posso dizer a "joe" qual é a sua senha inicial, e ela pode fazer o login e mudar a senha a seu gosto. Note que o nome de usuário ("joe" ) e a senha são sensíveis a maiúsculos e minúsculos.
O root pode mudar a senha de qualquer usuário embora ele não possa le-la. [As senhas são criptografadas usando um algoritmo de mão-única e somente a versão criptografada é gravada no sistema, no arquivo /etc/passwd (sistemas mais antigos) ou /etc/shadow (sistemas mais novos), e a versão "aberta" (o texto) da senha nunca é armazenado no sistema. Quando você faz o login a senha que você digita é criptografada novamente usando o mesmo algoritmo de mão-única e o resultado comparado com a versão criptografada gravada em /etc/passwd ou /etc/shadow.]
A separação do administrador e do usuário torna os sistemas Linux mais seguros e robustos - - tornando difícil a ação de vírus em Linux(os programas que um usuário roda podem gravar somente em seus próprios diretórios, e portanto não podem afetar partes vitais do sistema operacional).
É costume que o usuário troque sua senha imediatamente após o seu primeiro login, por exemplo:
passwd
(current) UNIX password:  pass_OLD
New UNIX password:  pass_NEW
Retype New UNIX password:  pass_NEW
Na realidade, a senha não aparece na tela quando você a digita(por razoes de segurança). Gaste seu tempo se você estiver alterando a senha pela primeira vez - - pode ser difícil digitar " no escuro"
Nos sistemas Linux a mesma senha é usada para :
- login em terminais texto,
- login em telas gráficas,
- destravar um terminal texto travado
- destravar uma proteção de tela protegida por senha em uma interface gráfica(por exemplo, KDE ou GNOME)

3.2.2 Sobre a segurança com senhas.

Senhas fracas são provavelmente a fonte de problemas de segurança mais comum. Mesmo em casa, você pode se expor a sérios problemas porque alguém pode ser capaz de "entrar" em seu computador quando você usa a internet e ler/remover seus arquivos, ou usar seu computador para fazer algo mais sujo com sua rede. Portanto, mantenha todos os seus nomes e senhas seguros, mesmo em casa. Uma vez que alguém faça login em sua máquina(mesmo como um usuário comum), ele pode encontrar uma maneira de ganhar o acesso root (dependendo de quão bem administrado/atualizado seja o seu sistema e do quão bom hacker seja a pessoa).
Eis alguns exemplos de passwords ruins:
- Nenhuma senha(isto é possível).
- A palavra "password" (esta é realmente fraca!).
- Seu nome de login (O nome de login e a password são os mesmos? Hmm.).
- Seu primeiro nome ou o primeiro nome de sua filha, filho, marido, esposa, namorada, ou qualquer outro primeiro nome. O número de primeiros nomes em uso é relativamente limitado - basta verificar o livro " Que nome dar para seu filho". Não assuma que o primeiro nome que você pensou é seguro por que ele veio da Índia - o Canada é realmente uma sociedade multinacional e uma lista de nomes parece cobrir todas as espécies de primeiros nomes.
- Seu último nome ou qualquer outro último nome. O número de últimos nomes é surpreendentemente limitado! Verifique o censo dos EUA para ver que seu "raro" ultimo nome da ilha abamamahaba faz parte dos 30000 nomes mais frequentes. Ou simplesmente verifique a lista de telefones de Toronto. Uma outra prova que somos todos da mesma família :))
- O nome de seu cachorro, esposa, canário ou computador(são poucos nomes que os humanos usam)
- Data de seu nascimento, número do seguro, etc.... Seqüências de dígitos podem ser facilmente testadas.
- Nome de sua empresa, departamento, grupo de trabalho, etc.
- Senhas escritas no calendário de sua escrivaninha ou ao lado de seu computador.
- Uma senha a qual você também usa em um local publico inseguro, por exemplo, uma loja na Internet ou em uma lista de correio.
- Qualquer palavra do dicionário ingles. O dicionário Inglês não contem tantas palavras como parece conter. Um hacker cuidadoso pode facilmente escrever um programa para criptografar todas as palavras do dicionário (100000? É abaixo de 1 MB!) e então comparar todos os strings criptografados com sua senha criptografada.
- Qualquer outra palavra, ultimo nome, primeiro nome,, não importa em qual linguagem. Para um cracker, para cobrir a maioria das linguagens é somente um pequeno gasto de tempo a mais se ele já cobriu uma. Quantas linguagens significativas existem por ai? 40? É questão de pegar uns poucos arquivos e acrescentar a lista de cracking. O ponto aqui é que subconjuntos de palavras que os humanos usam é bem abaixo do limite teórico de combinações randômicas de letras.
- Qualquer um dos citados acima com uma adição de uma letra/numero no inicio ou no fim. "yuoping1" é realmente uma senha muito fraca.
Uma boa senha é relativamente longa (mínimo de 6 caracteres), contem uma mistura de letras (maiúsculos e minúsculos, se possível), números e caracteres especiais, e é mudada regularmente(8 a 16 semanas?)
O administrador do sistema pode definir uma política de senhas (comprimento mínimo, requisitos de caracteres especiais, tempo de expiração) através de um utilitário incluído neste programa de configuração(rodado como root):
linuxconf
sob o menu "user account"-"policies"-"password & account policies".  Usuários normais não serão capazes de escolher uma senha curta demais. É uma palavra de dicionário, ou não contem o número prescrito de caracteres especiais(mas o root pode mudar qualquer senha para qualquer coisa que ele gostar, será dado apenas um aviso)
Também tenha certeza que qualquer arquivo que contenha qualquer de suas senhas (por exemplo, ., /root/.kde/share/config/kppprc) tenha permissões de segurança apropriadas de forma que não possam ser lidos por ninguém. Por exemplo,
chmod 600 kppprc
Se você usa conexão internet via linha discada por umas duas horas por semana, você pode ficar tranquilo mesmo com uma senha fraca em seu sistema. Mas reconsidere sua segurança se você usa um modem a cabo ou fica conectado a Internet por um bom tempo.

3.2.3 Eu esqueci a password do root

Mesmo se eu nunca esquecesse quaisquer passwords, eu deveria estudar este problema em detalhe porque ele pode me dar uma dica em como minha mãe poderia ler meus históricos de chats no ICQ :-)
Primeiro método. A maneira mais fácil de resolver o seu problema de "esquecimento da senha do root" é reinicializar seu linux em modo mono usuário (single user mode), ao surgir o prompt "lilo" digitar:
linux single
Isto o tornará "root" sem pedir por nenhuma senha. Agora, sendo root, você pode alterar a senha do root usando este comando(não será necessário saber a senha antiga)
passwd
Se isto parece inseguro para você, isto é porque nenhum sistema de computador é seguro se outras pessoas tem acesso físico a sua máquina. De qualquer forma, eu não gosto do furo "linux single" em meu computador em casa e retirei-o adicionando as seguintes linhas ao arquivo /etc/lilo.conf (no fim da seção "image="):
password="my_password"
restricted
[Esta senha de "lilo" é requerida quando, ao surgir o prompt LILO durante a inicialização alguém entrar com a palavra "linux" com quaisquer parâmetros(a inicialização normal sem qualquer parâmetro será possível sem uma senha). Para que as mudanças no /etc/lilo.conf façam efeito você deve executar o comando lilo .  Como minha senha de lilo não é criptografada eu devo fazer com que /etc/lilo.conf com permissão de leitura apenas pelo root:
chmod 600 /etc/lilo.conf
Segundo método.  Uma outra forma de resolver este problema é reinicializar sua máquina a partir de um disquete de boot, encontre a partição root de seu Linux no disco rígido, monte-a, e edite o arquivo /etc/shadow.  (Eu posso fazer isto porque depois do boot a partir do disquete eu me torno root sem que seja requerida uma senha). No arquivo de senhas eu apago a senha criptografada do root(por exemplo, usando o editor pico), de forma que ela fique vazia
Para remover uma conta de usuário de forma irreversível remova a conta do usuário do meu computador domestico eu faço o seguinte:
- login como root
- mudo minha identidade para a do usuário a ser removido para verificar se há algum novo importante email:
su nome_do_login_do_usuário
mail
logout
- deleto a conta do usuário
userdel nome_do_login_do_usuário
- forço a remoção do diretório home com todos o seu conteúdo incluindo sub-diretórios:
rm -fr /home/nome_do_login_do_usuário

3.2.6  Eu tenho problemas com permissões. Como funcionam as permissões e posse de um arquivo?

Linux (da mesma forma como qualquer UNIX) é um sistema operacional multiusuário seguro, e cria um nível de complexidade com " permissões de arquivos". Os problemas com permissões de arquivos podem levar a situações de erros. O entendimento de permissões de arquivos é de suma importância para ser capaz de administrar um sistema operacional multiusuário(seja Unix, WinnT, ou Linux). Meu conselho seria: aprenda as convenções de permissões de arquivos do Linux(ou de qualquer Unix), você não se arrependerá.
As convenções de permissões são as mesmas para arquivos normais e diretórios, assim o que quer que seja dito a respeito de arquivos abaixo aplica-se também a diretórios. É também importante lembrar-se que diretórios de níveis menores herdam as permissões de seus pais(ou níveis superiores). Portanto, não expere ter quaisquer permissões a um subdiretório(ou arquivo nele residente) se você não tem permissões ao nível superior(diretório pai).
Donos do arquivo.  Cada arquivo pertence a um proprietário(normalmente um nome de login) e a um grupo. O proprietário é tipicamente a pessoa que criou (ou copiou) o arquivo. O grupo frequentemente consiste de uma pessoa - - o proprietário, e tem o nome idêntico ao do proprietário, mas não necessariamente sempre assim. Um arquivo pode ser removido(deletado) somente pelo dono do arquivo, ou um membro do grupo que possui o arquivo, ou o root. Outros usuários, entretanto, podem ser capazes de modificar o conteúdo do arquivo se a eles são dadas permissões para tanto. O dono e o grupo que possui o arquivo serão mostrados na saída do comando ls -l command (="listagem no formato longo"). Por exemplo, o comando:
ls -l junk
produziu esta saída em minha tela:
-rwx------   1 yogin    inca           27 Apr 24 14:12 junk
Isto mostra o arquivo "junk" pertencendo ao dono "yogin" e ao grupo "inca".
O proprietário de um arquivo pode ser modificado usando-se o comando chown (change owner[mude o dono]) e chgrp (change group[mude o grupo]), os quais são normalmente executados pelo root:
chown peter junk
chgrp peter junk
ls -l junk
Depois de executar os 3 comandos acima o comando ls-l junk produz esta saída em minha tela:
-rwx------   1 peter    peter           27 Apr 25 20:27 junk
Mudar a propriedade do arquivo é fácil se você copia/move os arquivos como root para uso por outros usuários. Ao fim da manutenção você tipicamente quer alterar a propriedade do arquivo para o devido usuário
Permissões de arquivos.  Agora, como dono de um arquivo, pode-se tornar o arquivo acessível em três mods: leitura(r), escrita(w) e execução (x) as três classes de usuários: o proprietário (u), membros de um grupo(g), os outros usuários do sistema(o). Você pode verificar as permissões correntes de acesso usando:
ls -l filename
Se o arquivo pode ser acebado por todos os usuários (o dono, grupo e outros) em todos os três modos(leitura, escrita e execução ) ele mostrará:
-rwxrwxrwx
Salte o primeiro "-" (ele mostra "d" para diretórios, "-" para arquivos normais, "l" para links, "c" para dispositivos caracter, "b" para dispositivos blocados, "p" para "named pipes" como os arquivos FIFO). Depois deste caracter inicial , os três primeiros mostram as p permissões para o dono do arquivo, as três próximos mostram as permissões para o grupo que possui o arquivo, e os três últimos mostram as Permissões para os demais usuários. Uma falta de permissão é mostrada como "-". Eis uma saída de um comando ls -l de um arquivo que é possuído pelo root, cujo proprietário tem todas as permissões, mas o grupo e os outros usuários somente podem ler e executar.
drwxr-xr-x   2 root     root        21504 Apr 24 19:27 dev
A primeira letra "d" mostra que o arquivo é na realidade um diretório.
Você pode alterar as Permissões em um arquivo que você possui usando o comando chmod (do ingles, change mode). Por exemplo, este comando acrescentará a permissão para leitura do arquivo "junk" para todos (usuário, grupo e outros):
chmod a+r junk
No comando acima, ao invés de "a" ("all"), poderia ter usuário "u", "g", ou "o" (usuário, grupo e outros). Ao invés de "+" (adicione a permissão ), poderia ter sido usado "-" (retire a permissão). Ao invés de "r" (permissão de leitura), poderia ter usado "w" or "x" (permissão de gravação ou permissão de execução ).
Segundo exemplo. Este comando removerá as Permissões de execução do arquivo "junk" dos usuários "outros".
chmod o-x junk
Ao invés de letras, pode-se usar também números para especificar as permissões. Para entender como isto funciona, veja:
execução=1
escrita=2
leitura=4
A permissão total para uma classe de usuários é a soma dos três . Dai
0 = nenhuma permissão (nem para leitura, nem para gravação e nem para execução)
1 = execução somente (aparentemente sem uso)
2 = gravação somente(aparentemente sem uso)
3 = gravação e execução (aparentemente sem uso)
4 = leitura somente (comum)
5 = leitura e execução (comum)
6 = leitura e gravação (comum)
7 = leitura, gravação e execução (comum).
A permissão para todas as três classes de usuários (dono, grupo e outros) é obtida juntando-se os três dígitos em um único numero. Por exemplo, o comando.
chmod 770 junk
dará ao dono e ao grupo todas as Permissões, mas nenhuma permissão será dada a outros. O comando
chmod 666 junk
dará as três classes de usuários as Permissões para leitura e gravação (mas não a execução) no arquivo exemplo chamado "junk". Por favor, note o "666". É frequentemente usado e, para no mínimo uma pessoa que conheço, é uma prova que Linux(qualquer Unix) é um trabalho do demônio >:-0.
Este comando :
chmod 411 junk
daria ao dono do arquivo a permissão de leitura somente, e ao grupo e aos outros a permissão de execução somente. Isto não parece ser de nenhum uso mas poderia ser engraçado, no mínimo para aqueles usuário norte-americanos que discam 411 (numero de telefone) para suporte de diretório. Envie-me um email se você sabe de outras Permissões engraçadas(talvez 007 ?).
O modo numérico de representar Permissões de arquivos é chamado "octal" por que os números tem base 8 (A base do sistema decimal é 10). O maior digito no sistema octal é 7 (o sistema octal tem oito dígitos: 0 a 7, análogo ao sistema decimal que tem 10 dígitos: 0a 9). A representação octal é realmente uma notação conveniente para uma representação binaria de Permissões, onde cada permissão é configurada como "permitida" ou "negada" com um ou zero e o tal é representado com uma cadeia de zeros e um, como no diagrama:
classe de usuário:                                    proprietário  grupo outros
permissões de exemplo:                            rwx    rw-    r--
permissões ausentes:                             ---    --x    -wx
representação binaria das permissões:       111    110    100
representação octal do binário:             7      6      4
Definição de permissões default de arquivos com umask.  Quando um novo arquivo é criado a ele são dadas permissões default. Em meu sistema elas são:
-rw-r--r--
Isto significa que os arquivos criados por um usuário podem ser lidos e gravados por este usuário; o grupo e outros podem somente ler este arquivo. Ainda, no meu sistema RedHat, os usuários não podem ler os arquivos nos diretórios de outros usuários porque as permissões para estes diretórios home são:
drwx------
Pode-se verificar as permissões default dadas aos meus novos arquivos criados usando:
umask -S
(A opção "-S" significa "simbólico" e diz ao comando umask para mostrar as permissões em uma forma facilmente legível. )
Eu posso mudar as permissões default para novos arquivos criados usando um comando como :
umask u=rw,g=,o=
o qual dará ao proprietário as permissões de leitura e escrita em novos arquivos criados(r+w). e nenhuma permissão para o grupo e outros usuários.
Usando números para definir as permissões default com umask é um pouquinho mais complicado. O numero mostra as permissões que você está retirando dos usuários(ao contrario de chmod).  Dai:
umask 000
dará permissões totais a todos em novos arquivos criados.  O próximo exemplo dará permissões de leitura e escrita ao dono, e nenhuma permissão para os demais(parece com o que alguém poderia desejar):
umask 177
Para tornar as definições permanentes para todos os usuários no sistema, ajustar as linhas apropriadas em /etc/profile .

3.2.7 Meu player mp3 está falhando. O som parece estar sendo interrompido(como setar o suid?).

O player MP3 player poderia não estar recebendo bastante poder de processamento(ele requer um bocado). Poderia ser por que seu sistema está ruidoso. Ou por que você pode estar rodando muitos programas que consomem muita cpu ao mesmo tempo. Ou, o mais comum, você pode precisar de rodar o player em uma prioridade mais alta. (A prioridade de um programa pode ser definida com o comando nice -- veja man nice ou info nice). Tente rodar o player como root - - programas rodados como root recebem maior prioridade que aqueles rodados pelos usuários normais. Se isto resolver o problema, defina o "suid" no executável de forma que todos os usuários recebam o " user id efetivo" do proprietário do arquivo(normalmente o root) quando o rodar. Por exemplo:
chmod a+s /usr/bin/xmms
fará isto para o programa xmms program. A saída de
ls -l /usr/bin/xmms
em meu computador agora é:
-rwsr-sr-x  1 root  root  908k Feb 22  2000 /usr/bin/xmms
O primeiro "s" indica que o bit suid (usuário substituto) está ligado. O segundo "s" indica que o bit sgid (grupo substituto) está também ligado. Dai quem executar xmms terá o identificador de usuário efetivo igual ao do proprietário do programa e grupo efetivo de usuário igual ao grupo proprietário, os quais no exemplo acima são o usuário "root" e o grupo "root".i
Setar o suid de um programa pode possivelmente se tornar um furo de segurança em seu sistema. Isto não é o caso em um sistema domestico fechado. Entretanto, mesmo em casa, eu não setaria o suid para uma pedaço de código cuja origem seja incerta, mesmo se as instruções de configuração solicitem que isto seja feito. Também, é definitivamente uma má idéia ligar o suid para muitos executáveis em seu sistema - isto vai contra a idéia inteira de segurança em UNIX.
Alguns programas entretanto requerem suid para o funcionarem adequadamente, por exemplo, kppp (o utilitário de conexão dialup "ppp" sob a interface gráfica KDE). Isto se deve ao fato que eles requerem acesso direto ao hardware - algo que só é permitido ao root.
Se você tem problemas constantes com a performance de seu sistema, ou alguns problemas de hardware(por exemplo, o gravador de CD), tente reduzir o numero de daemons no seu sistema Linux. Rode (como root) o comando Redhat setup e desabite todos os serviços os quais você realmente não necessita.

3.3 Programação de serviços utilizando "&", "at", "batch", and cron

3.3.1 Como eu executo um comando em segundo plano("background")?

Usando o "&" no fim do comando. Por exemplo, o comando a seguir iniciará licq (um cliente icq) no terminal X em segundo plano, assim depois de executar o comando meu terminal X não ficará bloqueado.
licq &
O número de identificação do processo, número-da-tarefa, é mostrado na tela, de forma que você possa usa-lo com comandos relacionados. Os comandos relacionados são fg número-da-tarefa (="foreground", traz o processo do segundo para o primeiro plano e o coloca sob meu controle, reinicia-o se ele estava parado), bg número-da-tarefa (="background", envia o processo para segundo plano, reinicia-o se ele estava parado como se ele tive sido executado usando-se o & ), <Ctrl>z (envia o corrente processo em primeiro plano para o segundo plano e o interrompe), jobs (lista as tarefas ativas, kill identificador-do-processo(termina o processo, use o comando ps para encontrar o identificador-do-processo do processo a ser eliminado)..

3.3.2 Como executar um comando em uma hora especificada(usando "at" ou "batch")?

O comando at executará os comandos que você especificar na data e hora de sua escolha. Por exemplo, eu poderia começar a tocar música a partir de meu CDROM as 7 horas da manhã.
at 7:00
cdplay<Ctrl>d
    No exemplo acima, eu entrei com a primeira linha "at 7:00" na linha de comando e pressionei ENTER. Em resposta, o comando at mostra um prompt "at>". Neste prompt eu entro com meu comando "cdplay" e então pressione ctrl-d para terminar o comando at. . Se, ao invés de pressionar <Ctrl>d ,  eu tivesse pressionado "ENTER", o próximo prompt "at>" iria aparecer, o qual iria me permitir entrar com o próximo comando a ser executado exatamente após "cdplay", também as 7:00. E assim por diante, eu poderia programar muitos comandos um a um iniciando-se as 7:00. Depois de digitar o último comando, eu terminaria a entrada do mesmo com <ctrl-d>. Imagine o <ctrl-d> como sendo um <fim-de-arquivo> da digitação que está sendo feita. Não pressione <ctrl-d> duas vezes por que assim vc sairá do sistema - é o que o <ctrl-d> faz quando você o pressiona na linha de comando.
Você pode listar as tarefas que você programou para execução usando
at -l
o qual dará a você uma lista das tarefas que estão a espera de serem executadas.
Se você mudar de idéia você poderá remover uma tarefa desta lista. Por exemplo:
atrm 8
removerá a tarefa com o número 8 na lista.
Eu poderia também programar uma tarefa para execução mais tarde, por exemplo:
at 23:55 12/31/00
startx
iniciaria meu servidor X justamente a tempo de estar sendo executado na entrada do novo milênio.
Se você não pode executar o comando at, verifique se o daemon at ("atd") está carregado(como root use setup-"system services"). Se você não pode executar o comando at como um usuário comum embora o possa como root, verifique se existe um arquivo vazio le /etc/at.deny e que não haja o arquivo /etc/at.allow. Isto deveria ser a configuração padrão e ela permite que todos os usuário executem at.  Se você quer que somente certos usuários usem at, crie um arquivo /etc/at.allow e informe ali estes usuários.
Para outras opções, verifique:
man at
Se você quer executar uma tarefa pesada em termos de cpu em segundo plano quando a carga do sistema estiver baixa, você pode escolher o comando batch.  Por exemplo, eu poderia rodar setiathome (um programa que colhe dados para ajudar na pesquisa de inteligência extra-terrestre, SETI) usando:
batch
at>setiathome<Ctrl>d
Neste exemplo, eu entrei com o comando batch e então, no prompt "at>", eu entrei com o comando o qual quero que seja executado em segundo plano. A tarefa tenta se iniciar imediatamente, mas somente prossegue somente quando a carga do sistema estiver abaixo de 0.8. Você pode verificar a carga do sistema vendo o conteúdo do arquivo (virtual) /proc/loadavg . Por exemplo, :
cat /proc/loadavg
Quando uma tarefa iniciada por batch termina, o resultado da mesma é enviado para mim via e-email.

3.3.3 Como usar o cron?

Cron (um processo Linux que executa um trabalho em segundo plano, frequentemente a noite) é programado de forma padrão em seu sistema RedHat Assim você não tem que fazer nada a menos que você queira adicionar algumas tarefas a serem executadas em seu sistema de maneira regular ou mudar o tempo no qual cron executa suas obrigações.
Note que algumas das tarefas do cron podem ser essenciais para que seu sistema funcione adequadamente por um longo período de tempo . Entre outras coisas o cron pode:
- reconstruir o índice de arquivos utilizado pelo comando locate,
- limpar o diretório /tmp,
- reconstruir as páginas de manuais,
- "rotate" nos arquivos de log, isto é, descartar os arquivos mais antigos, trocar o nome das logs intermediárias e criar novas logs.,
- fazer algumas outras verificações, por exemplo, adicionar fontes que você recentemente trouxe para seu sistema.
Portanto, pode não ser uma boa idéia sempre desligar sua maquina Linux a noite - - em tal caso cron nunca terá a chance de executar seu trabalho. Se você gosta de desligar seu computador a noite, você pode então ajustar o cron para que ele execute suas tarefas em alguma outra hora.
Para saber como o cron acorda para executar suas atividades, dê uma olhada no arquivo /etc/crontab, por exemplo:
cat /etc/crontab
Ele pode conter alguma coisa como o seguinte:
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
Você pode ver que há quatro categorias de tarefas do cron: aquelas executadas de hora em hora, aquelas executadas diariamente, as semanais e as mensais. Você pode modifica-las e adicionar a sua própria categoria. Eis como ele funciona:
As colunas nas entradas mostram: minutos(0-59), hora(0-23), dia do mês (1-31), mês do ano (1-12), dia da semana(0-6 -- Domingo a Sábado ) O “*” significa qualquer valor válido.
Daí, no exemplo mostrado, os jobs programados com freqüência em horas são executados cada vez que o relógio do computador mostra “e um minuto”, o que acontece a cada hora, exatamente um minuto depois daquela hora. As tarefas diárias são executadas cada vez que o relógio mostra 2 minutos após as 4 horas, o que acontece uma vez ao dia. As tarefas semanais são executadas aos vinte e dois minutos após 4 horas da manhã dos domingos. As tarefas mensais são executadas 42 minutos após as 4 horas do primeiro dia de cada mês. O diretório com o arquivo script que contém o(s) comando(s) a serem executados é mostrado como a última entrada de cada linha.
Se você quer que suas tarefas sejam executadas a tarde ao invés de 4 da manhã, simplesmente troque os 4 por 12. O cron acorda a cada minuto e verifica se o /etc/crontab foi alterado de forma que não há necessidade de reiniciar nada depois que você tiver feito suas mudanças.
Se você quiser adicionar uma tarefa ao seu cron, coloque um script que executa a sua tarefa (ou um link para o seu script) no diretório /etc/cron.hourly or cron.daily ou /etc/cron.weekly, ou /etc/cron.monthly .
Eis um exemplo de uma entrada no /etc/crontab que faz com que uma tarefa seja executada três vezes na semana(Segunda, Quarta e Sexta):
02 4 * * 1,3,5 root run-parts/etc/cron.weekly

3.4  Espaço de swap(arquivo de troca/paginação)

O swap é uma extensão da memória física do computador. Na maior parte das vezes você criou uma partição de swap durante a configuração inicial do RedHat. Você pode verificar a quantidade de espaço de swap disponível em seu sistema usando:
cat /proc/meminfo
A recomendação geral é que se tenha no mínimo 4 MB de espaço de swap, no mínimo 32 MB no total(memória física(RAM)+swap) de memória para um sistema que será executado somente em linha de comando(sem X-windows), no mínimo 64 MB de memória total(física+swap) para um sistema rodando X-windows, e o espaço de swap no mínimo igual a 1,5 vezes a quantidade de memória física do sistema.
Se isto parece muito complicado, você pode quer ter um espaço de swap duas vezes maior que sua memória RAM física, mas não menos de 64MB.
Se você precisar alterar seu espaço de swap aqui vão algumas dicas básicas.

3.4.1 Partições de swap.

Você pode ter diversas partições de swap. Alguns Kernels linux mais antigos limitavam o tamanho da partição de swap a até aproximadamente 124 MB, mas os kernels 2.2.x e acima não tem esta restrição). Aqui estão os passos para criar e habilitar uma partição de swap.
- Crie a partição no tamanho apropriado usando o comando fdisk (tipo de partição 82, "Linux swap").
- Formate a partição verificando os “bad blocks”, ou seja, trilhas defeituosas, por exemplo:
mkswap -c /dev/hda4
Você tem que substituir /dev/hda4 com o nome de sua partição de swap que você criou. Como eu não especifiquei o tamanho da partição, ele será automaticamente detectado.
- Habilite o swap, por exemplo:
swapon /dev/hda4
Para ter o novo espaço de swap automaticamente habilitado em tempo de boot, você tem de incluir a entrada apropriada no arquivo /etc/fstab, por exemplo:
/dev/hda4 swap swap defaults 0 0
Se você, por acaso, precisar desabilitar o espaço de swap, você pode fazer isto(como root) através do comando:
swapoff /dev/hda4

3.4.2 Arquivos de swap

Fazer o swap para arquivos é normalmente mais lento que o swap para uma partição de swap, portanto esta não é uma técnica recomendada de swap permanente. Entretanto, a criação de um arquivo de swap pode ser uma solução rápida se você precisa temporariamente de mais espaço de swap. Você pode ter até 8 arquivos de swap, cada um com tamanho de até 16 MB. Eis os passos para a criação de um arquivo de swap:
- Crie um arquivo com o tamanho de seu arquivo de swap:
dd if=/dev/zero of=/swapfile bs=1024 count=8192
Isto fisicamente cria o arquivo de swap /swapfile, o tamanho do bloco é de 1024 bytes, o arquivo contém 8192 blocks, o tamanho total é cerca de 8MB(O comando dd copia arquivos. No exemplo acima, o arquivo de entrada (if) foi /dev/zero, o arquivo de saída (of) foi /swapfile. Você não pode usar o comando cp (copy) para criar um arquivo de swap porque p arquivo de swap deve ocupar um espaço contíguo no disco).
- Defina o arquivo com o comando :
mkswap /swapfile 8192
- Force a gravação dos cache buffer com o comando :
sync
- Habilite o swap com o comando:
swapon /swapfile
Quando você não precisar mais do arquivo de swap você poderá desabilita-lo e remove-lo:
swapoff /swapfile
rm /swapfile
Se você quiser ver a informação escrita por Linus Torvalds a respeito :
man mkswap

3.5  Shell

3.5.1 O que é um shel e porque eu posso querer usar um diferente?

Um shell é o programa que interpreta o que digitamos na linha de comando e decide o que fazer com aquilo. Um shell pode também ser invocado de uma forma não interativa, por exemplo, para executar uma lista de comandos digitada previamente contida em um arquivo texto(um shell script) Imagine o shell como algo equivalente aos arquivos de comandos do tipo batch do DOS(*.bat). Em comparação com os seus primos no DOS, o shell Linux e os scripts estão nas estrelas.
Existem diversos shell em um sistema Linux(se você os instalou): bash ("Bourne Again" shell), sh (Bourne shell, padrão em muitos sistemas UNIX), csh (C shell, com uma sintaxe parecida com a linguagem de programação "c", disponível na maioria dos sistemas UNIX), pdksh (public domain Korn shell), tcsh (tiny C shell, frequentemente usado em pequenos sistemas), ash, zsh, e talvez uns dois a mais.
O shell default em meu sistema(e muito provavelmente no seu também) é o bash , o qual é um excelente shell padrão, e eu realmente não consigo ver uma razão por que um novato como eu iria querer troca-lo, bash é totalmente compatível com o Bourne shell (o shell mais popular em UNIX) e incorpora muitas melhorias e as melhores características de outros shell) Da perspectiva de um novato, os diferentes shell são incluídos no Linux por uma razão histórica e a compatibilidade com os vários shell scripts podem requerer que um shell particular seja executado.(Alguns shell podem ser de muita utilidade se você escreve programas destinados para dispositivos especializados embutidos, que poderia rodar um shell reduzido).
Você pode verificar qual shell você está utilizando através do comando :
echo $SHELL
Caso queira, você pode tentar executar um outro shell, por exemplo:
tcsh
o qual irá executar (iniciar) o shell c reduzido. Quando você tiver acabado o serviço, digite
exit
o que fará com que você volte para o shell anterior(usando exit no shell de primeiro nível você sairá do sistema). Você pode determinar qual o nível de profundidade” dos shells verificando o conteúdo da variável de ambiente nível de shell”:
echo $SHLVL
O shell de cada usuário é especificado no último campo da linha do usuário no arquivo de password /etc/passwd .  Se você quiser realmente altera-lo, edite(como root) este arquivo e substitua o “/bin/bash” com o shell de sua escolha.

3.5.2 Como eu customizo o prompt do shell?

Em minha maquina, o prompt é da seguinte forma:
[stan@marie stan]$ _
"stan" é o meu usuário de login, “marie” é o nome do computador, o segundo "stan" especifica o diretório corrente, e "_" representa o cursor.
O prompt é especificado pela variável de ambiente de nome PS1.  Para mostrar a especificação corrente você pode usar o comando :
echo $PS1
A definição do prompt valida para todo o sistema(para todos os usuários no sistema) está no arquivo /etc/bashrc o qual no meu computador contem a seguinte linha:
PS1="[\u@\h \W]\$ "
Para personalizar o prompt, eu posso editar o arquivo /etc/bashrc (como root) e inserir praticamente qualquer texto dentro das aspas. Eis o significado de alguns códigos especiais que se pode usar.
\u-nome do usuário corrente,
\h- o nome do computador que está rodando o shell(hostname),
\W-A base do nome do diretório corrente.
\w-o nome completo do diretório corrente,
\$- mostra "$" para usuários normais "#" para o root,
\!- Número no histórico do corrente comando,
\#- O número do corrente comando,
\d- a data corrente,
\t - a hora corrente,
\s -o nome do shell,
\n - forca um salto de linha,
\\- para exibir uma barra invertida
\[ - inicia uma seqüência de caracteres não exibiveis,
\]- termina uma seqüência de caracteres não exibiveis,
\nnn - o caracter ASCII correspondente ao número octal nnn.
$(date) - saída do comando date (ou qualquer outro comando para isto).
Eis um exemplo de como adicionar cor. Veja o próximo capitulo para detalhes a respeito de cor:
PS1="\[\033[1;32m\][\u@\h \W]\$\[\033[0m\] "
Existe também um prompt de segundo nível especificado pela variável de ambiente PS2. O shell usa o prompt de segundo nível quando ele espera que dados adicionais sejam digitados, e no meu sistema o prompt secundário é "> ". Eu não me preocupo muito a respeito do PS2, mas se quisesse poderia defini-lo da mesma forma que faço para PS1.Existe até o PS3 e o PS4, mas estes são raramente vistos.

3.5.3  Cor em terminais texto.

A cor em um terminal texto pode ser produzida usando-se seqüências escaoe ANSI). Por exemplo,
echo -e "\033[44;37;5m ME \033[0m COOL"
O comando acima define o fundo em cor azul , a frente(o texto) na cor branca, vídeo piscante, e mostra " ME ", a seguir reseta o terminal de volta as definições padrão e mostra " COOL".  O "-e" é uma opção especifica do comando echo -- ela habilita a interpretação de caracteres especiais. O "\033[" introduz a seqüência escape. O "m" significa "definição de atributo" e ai termina a seqüência. Os códigos reais no exemplo acima são 44;37;5" e "0".
Altere o "44;37;5" para produzir diferentes combinações de cores--o número/ordem dos códigos não interessa. Os códigos são listados abaixo:
Código Ação/cor
---------------------------
0 reseta todos os atributos de volta aos valores padrões.
1 negrito
2 meio brilhante (simulado com cor em um terminal display)
4 sublinhado (simulado com cor em um terminal display)
5 piscante
7 vídeo reverso
22 intensidade normal
24 desliga o sublinhado
25 desliga o piscante
27 desliga o vídeo reverso
30 estabelece o preto para o primeiro plano
31 estabelece o vermelho para a fonte
32 estabelece o verde para primeiro plano
33 estabelece o marron para o primeiro plano
34 estabelece o azul para primeiro plano
35 estabelece o rosa para o primeiro plano
36 estabelece o azul piscina para primeiro plano
37 estabelece o branco para primeiro plano
38 liga o sublinhado, estabelece a cor padrão de primeiro plano
39 desliga o sublinhado, estabelece a cor padrão de primeiro plano
40 estabelece o preto como o fundo
41 estabelece o vermelho como o fundo
42 estabelece o verde como fundo
43 estabelece o marrom como fundo
44 estabelece o azul como fundo
45 estabelece o rosa como fundo
46 estabelece o azul piscina como o fundo
47 estabelece o branco como fundo
49 estabelece a cor padrão de fundo
Outros códigos interessantes.:
\033[2J limpa a tela
\033[0q desliga todos os leds do teclado(não funciona a partir de Xterm)
\033[1q liga o led "Scroll Lock"
\033[2q liga o led "Num Lock"
\033[3q liga o led Caps Lock
\033[15;40H move o cursor para a linha 15, coluna 40
\007 campainha(bip)
led (="Light Emitting Diods, em português, diodos emissores de luz) são as luzes do teclado as quais indicam se <CapsLock>, <NumLock> e <ScrollLock> estão acionados.
Veja man console_codes para saber mais a respeito.
 

3.5.4 Como faço para imprimir símbolos na console ou em aplicações em modo texto?

O procedimento aqui descrito me dá um rápido acesso ao conjunto de caracteres extendidos do PC (códigos 128-255) e é facilmente portável no mundo PC: ele trabalha em MS Windows, DOS, (se você tem driver ANSI instalado), e dentro de qualquer aplicação em modo texto em Linux(inclusive na linha de comando), mas não funciona em X-windows(não me pergunte porque). Descobri que economizava meu tempo memorizando os códigos para os poucos caracteres que mais uso.
Funciona da seguinte forma. Tenha certeza que <NumLock> esteja ligado. Então pressione <Alt> e mantenha-a presa. Enquanto e <Alt> estiver presa, use o teclado numérico para digitar estes quatro dígitos: 0181. Agora libere a tecla <Alt> e a letra grega mu "µ" aparecerá   Também achei de muito uso estes caracteres do conjunto de caracteres: 176 °(grau), 177 ±(mais ou menos), 178 ² (quadrado), 179 ³(cubo, potência 3), 181 µ (letra grega mu), 0183 · (sinal de multiplicação), 232 è  (French accent agrave), 233 é (French accent aigu), 228  ä (German a-umlaut), 243 ó (Polish u-zamkniete), 248 ø (Scandinavian o-bar) 252 ü (German u-umlaut). Alguns outros caracteres também são possíveis.:
128 ? 147 ? 166 ¦ 185 ¹ 204 Ì 223 ß 242 ò
129 ? 148 ? 167 § 186 º 205 Í 224 à 243 ó
130 , 149 * 168 ¨ 187 » 206 Î 225 á 244 ô
131 f 150 - 169 © 188 ¼ 207 Ï 226 â 245 õ
132 ? 151 - 170 ª 189 ½ 208 Ð 227 ã 246 ö
133 ? 152 ~ 171 « 190 ¾ 209 Ñ 228 ä 247 ÷
134 ? 153 ? 172 ¬ 191 ¿ 210 Ò 229 å 248 ø
135 ? 154 s 173 ­ 192 À 211 Ó 230 æ 249 ù
136 ^ 155 > 174 ® 193 Á 212 Ô 231 ç 250 ú
137 ? 156 ? 175 ¯ 194 Â 213 Õ 232 è 251 û
138 S 157 ? 176 ° 195 Ã 214 Ö 233 é 252 ü
139 < 158 ? 177 ± 196 Ä 215 × 234 ê 253 ý
140 ? 159 Y 178 ² 197 Å 216 Ø 235 ë 254 þ
141 ? 160   179 ³ 198 Æ 217 Ù 236 ì 255 ÿ
142 ? 161 ¡ 180 ´ 199 Ç 218 Ú 237 í
143 ? 162 ¢ 181 µ 200 È 219 Û 238 î
144 ? 163 £ 182 ¶ 201 É 220 Ü 239 ï
145 ? 164 ¤ 183 · 202 Ê 221 Ý 240 ð
146 ? 165 ¥ 184 ¸ 203 Ë 222 Þ 241 ñ

3.5.5 Como escrever um simples shell script?

Crie um arquivo texto (ASCII) que irá conter o shell script. Por exemplo, eu poderia usar o editor pico para escrever o script que rode o programa tar com todos os parâmetros normalmente necessários para extrair os arquivos de um “tarball”(arquivo tar) baixado da internet(Parece que nunca me lembro das opções do tar. Eu decidi chamar meu script de "untar":
pico untar
Como o arquivo "untar" não existia em meu diretório corrente, ele foi então criado pelo editor de texto pico.  Agora, eu digito o conteúdo do meu script:
#!/bin/bash
echo este é o arquivo script $0
echo untarring o arquivo $1
# tar é chamado com as opções -xvzf (extrair,
# de maneira informativa, filtrar através de gzip o arquivo de entrada)
tar -xvzf $1
Eu salvo o arquivo com <Ctrl>o e saio com <Ctrl>x
A primeira a linha do script começando com "#!" (chamada pound-bang), é especial -- ela diz ao shell qual programa que deve ser usado para interpretar o shell script. Neste exemplo, o script é interpretado pelo shell bash /bin/bash .  A primeira linha deve começar #! caso contrario o shell nunca rodará (o arquivo seria interpretado como um arquivo texto). Outras linhas que começam com # são comentários para o autor(leitores, usuários) do shell e são totalmente ignoradas pelo computador.
Os $0, $1, $2 ... no meu script são os parâmetros passados para o meu script. Por exemplo, se eu executar um script chamado "myscript" com sete parâmetros tal como :
myscript a b c d e f g
então $0 conteria "myscript"(o nome do script que está sendo executado) , $1 conteria o valor "a",  $2 conteria "b",  $3 conteria "c", etc.
Na segunda e terceira linha de meu script exemplo, o comando echo mostra na tela tudo que se segue na mesma linha substituindo $0 e $1 pelos valores dos parâmetros passados para o script. A quarta e quinta linha contem um comentário que escrevi para mim mesmo para lembrar-me o que estava querendo fazer para o caso de ter que alterar o script. A ultima linha é que executa o trabalho a ser feito.
Uma vez que o script esteja escrito, eu faço com que o arquivo se torne executável pelo seu dono:
chmod u+x untar
e meu script está pronto para ser usado:
./untar my_tar.tar.gz
Scripts em Linux são ricos, flexíveis, poderosos e podem ser complexos. Entretanto, não requerem nenhum conhecimento especial para que scripts simples sejam escritos para automação de tarefas comuns. Você pode juntar um grupo de comandos frequentemente usados, um a um, em um arquivo. Eu uso scripts por que não vou perder tempo para digitar os mesmos grupos de comandos a cada vez que precisar deles.
Uma seqüência realmente simples de comandos pode também ser digitada em um arquivo texto e passada ao shell para execução usando :
source my_file
[Não há aqui a necessidade do "pound bang" inicial ou permissões de execução.]
 

3.5.6 Significado dos delimitadores

Normalmente, estes caracteres são especiais para o shell:
\ ' " ` < > [ ] ? | ; # $ ^ & * ( ) = <Espaço> <Tab> <Newline>
Existem quatro diferentes tipos de delimitadores: barra invertida (\), aspas simples (apostrofe, '), aspas duplas ("),  e o apóstrofe invertido(a crase`).
A barra invertida \ significa: desabilitar o significado especial do caracter subseqüente.
A delimitação com apóstrofes significa: desabilitar quaisquer caracteres especiais entre os apóstrofes.
Delimitar com as aspas significa: desabilitar os caracteres especiais entre as aspas exceto o $
O texto entre as crases significa: faça uma substituição de comando entre as crases primeiro. Assim, o que estiver entre elas é executado pelo shell primeiramente, e a saída do comando é passado para o que estiver fora das crases. O mesmo pode ser efetuado com $(comando o qual permite uma melhor especificação dos comandos que as crases.
Exemplos: Eu posso criar um diretório engraçado chamado "*" através da \ ou do '' :
mkdir \*
mkdir '*'
Isto esconde do shell o significado especial do "*" (sem o delimitador significaria todos os arquivos no diretório corrente).

3.5.7 Redirecionamento de entrada e saída

Existem três importantes fontes/destino de dados: entrada padrão(standard input ,"stdin"), saída padrão(standard output "stdout"), e saída padrão de erros (error standard output “stderr"). Elas são padrões. para a console (console significa o teclado para entrada e a tela para a saída) mas podem ser redirecionadas.
Para redirecionar a saída padrão(standard output ) eu uso ">". Por exemplo:
dir meudiretorio > listagemdosarquivos.txt
redirecionar a saída padrão do comando dir para o arquivo texto listagemdosarquivos.txt e nada apareceria na tela. O arquivo pode ser subsequentemente editado(por exemplo, com pico listagemdosarquivos.txt) ou embutido em um documento.
Para redirecionar a saída padrão de erros (error standard output) eu uso "2>". Por exemplo:
dir meudiretorio > listagemdosarquivos.txt
Isto enviara a saída normal para a tela e nada para o arquivo a menos que o comando dir produza um erro. Neste caso, nada seria mostrado na tela, e o arquivo listagemdosarquivos.txt conterá a mensagem de erro, a qual poderia ser algo como:
dir: meudiretorio: Permission denied
Finalmente, eu posso redirecionar tanto a saída padrão como a saída padrão de erros para um arquivo usando:
dir meudiretorio > listagemdearquivoseerros.txt 2>&1
a qual primeiro redireciona a saída padrão para um arquivo texto, e então redireciona a saída padrão de erro para o mesmo local da saída padrão.
Nos exemplos acima, se o arquivo já existir, ele será regravado. Para acrescentar a um arquivo já existente, eu uso ">>" como nestes exemplos:
dir meudiretorio >> listagemdearquivos.txt
dir meudiretorio 2>> listagemdeerros.txt
dir meudiretorio >> listagemdearquivoseerros.txt 2>&1
Se você estiver confuso pelo símbolo "2>" , eis aqui como racionaliza-lo facilmente. As fonte/destino de dados padrões. tem descritores padrões., "0" é a entrada padrão (standard input), "1" a saída padrão (standard output) e "2" a saída padrão de erros(error standard output).
dir meudiretorio > arquivo.txt
é uma forma mais simplificada de se escrever
dir meudiretorio 1> arquivo.txt
e portanto o exemplo abaixo redireciona a saída padrão de erros:
dir meudiretorio 2> arquivo.txt
Pode-se usar o símbolo "|" para enviar ("pipe") a saída de um comando como se fosse a entrada para um outro comando. Neste popular exemplo , a saída do comando dir é enviada(piped) para o comando more (more interrompe a exibição da saída de um comando quando a tela fica cheia):
dir | more
Pode-se também enviar a saída do comando tanto para a tela como também simultaneamente para um arquivo usando-se “tee":
dir | tee listagemdearquivos.txt
Esta seção trata muito mais do redirecionamento das saídas padrões. O redirecionamento da entrada padrão(standard input)) não é tão utilizado como redirecionar a saída, mas ele pode ser feito da seguinte forma:
cat < meuarquivo
Existe também alguma coisa chamada redirecionamento in-line da saída padrão, executada com "<<". Esqueça-a, parece não ter nenhum uso para mim. Ainda com relação a entrada padrão, eis um exemplo se você realmente vir a precisar disto  (aqui, o ">" significa o prompt secundário):
cat << meumarcador
> minha_linha_do_teclado
> uma_outra_linha_do_teclado
> meumarcador [o marcador de minha escolha finaliza o redirecionamento da entrada].
 

3.5.8 Caracteres especiais do shell (metacaracteres)

Normalmente estes caracteres tem significados especial para o shell:
\ ' " ` < > | ; <espaço> <Tab> <Newline> ( ) [ ] ? # $ ^ & * =
Eis aqui o significado de alguns deles:
\ ' " e ' são usados como delimitadores e foram descritos antes.
< e > são usados para redirecionamento de entrada e saída como descritos antes.
| (pipe) envia a saída do comando a esquerda do símbolo de pipe ("|") como entrada para o comando a direita do símbolo de pipe.
; separa múltiplos comandos escritos em uma única linha.
<espaço> e <Tab> separam as palavras do comando.
<Newline> completa um comando ou conjunto de comandos.
( ) fecha comandos a serem executados a serem executados em um shell separado(subshell). Por exemplo, ( dir ).
{ } fecha um grupo de comandos a serem executados com o shell corrente. Por exemplo, { dir }. Os espaços são necessários.
& faz com que o comando precedente seja executado em segundo plano(assincronamente, por que ele possui seu próprio processo separado) de forma que o próximo comando não precisa esperar que ele termine.
*   quando um nome de arquivo é esperado, ele casa com qualquer nome de arquivo exceto aqueles começando com um ponto (ou qualquer parte de um nome de arquivo, exceto o ponto inicial).
? quando um nome de arquivo é esperado, ele casa com um caracter qualquer.
[ ]  quando um nome de arquivo é esperado, ele casa com qualquer caracter que esteja dentro do par [].
&&  é um "AND" ligando dois comandos.

comando1 && comando2 executará o comando2 somente se terminar com o status 0 (nenhum erro).  Por exemplo,

cat arquivo1 && cat arquivo2 mostrará o arquivo2 somente se a exibição do arquivo1 terminar ok.
||   é um "OR" ligando dois comandos.

comando1 || comando2 executará comando2 somente se o comando1 terminar com um status não-zero(com um erro).

Por exemplo, cat file1 || cat file2 mostrará o arquivo 2 somente se a exibição do arquivo 1 terminar com erro.
=  atribui um valor a uma variável.
Exemplo. Este comando:
eu=blahblah
atribui o valor "blahblah" a variável chamada "eu".Eu posso exibir o nome da variável usando :
echo $eu
$    precede o nome de uma variável a ser expandida.


3.6  Instalação de pacotes e o gerenciador de pacotes rpm

3.6.1 como faço para instalar um pacote que baixei da Internet?

A resposta depende do tipo de pacote que você baixou. Você pode evitar muitas dores de cabeça na instalação se você baixar programas no formato de pacotes binários Red Hat(recomendado).
o Se o programa é um pacote binário RedHat (*.rpm),  eu uso o gerenciador de pacotes rpm . Primeiro eu leio a informação do conteúdo do pacote :
rpm -qpi pacote_rpm.rpm
Este comando solicita(modo “q “ , deve ser a primeira letra depois do hífen) o pacote ainda não instalado (opção “p”) de forma que seja mostrado a informação(opção “i”) que o pacote contem. Se eu quero instalar o programa, eu rodo (como root):
rpm -ihv pacote.rpm
Este comando roda o rpm dizendo-lhe para instalar o pacote (modo "i", deve ser a primeira letra após o hífen) enquanto mostra mais informações que o usual (opção "h"= mostre "arvores" para mostrar o processo de desempacotamento, opção "v"  = seja explicito).  O conteúdo do pacote é distribuído aos diretórios aos quais pertence(rpm conhece esta informação). Depois desta instalação, o programa está pronto para ser executado, eu tenho que saber o nome do executável e sua localização. Se eu tiver dificuldades em encontrar o executável, comando a seguir lista todos os arquivos que o pacote contem junto com seus diretórios de destino:
rpm -qpl pacote.rpm
Este comando solicita (opção "q") que o pacote ainda não instalado(opção"p") mostre a listagem(opção "l") de todos os arquivos que o pacote contem.
Existem também alguns programas gráfico para interação com o rpmglint (muito lento, vem com o RH5.2), gnopro (confuso, vem com o RH6.0), e kpackage (de longe, o melhor dos três mas disponível somente com as distribuições mais recentes).
o Se aquilo que baixei da internet é um código fonte Linux na forma de um pacote tar comprimido (*.tar.gz ou *.tgz) o procedimento de instalação é mais longo e mais sujeito a problemas que o pacote binário rpm. Eu tipicamente instalo o programa como root.
Primeiro, eu mudo meu diretório corrente para /usr/local  :
cd /usr/local
Segundo, eu descompacto o pacote que baixei da internet:
tar -xvzf /diretório/o_diretório_onde_o_pacote_está/meu_pacote.tar.gz
Este comando extrai (opção "x") o conteúdo do pacote *.tar.gz (or *.tgz) ,  descompacta-o (opção "z"), enquanto me dá mais informações que o usual (opção “v”). Por favor, note que a opção "f" significa "file"(arquivo), de forma que o nome deve imediatamente seguir aquela letra "f".  O conteúdo do pacote é extraído para dentro do subdiretório que o tar ira' criar dentro do corrente diretório , o qual é tipicamente /usr/local/ .  O pacote sabe como o novo diretório deve ser chamado.
Se o pacote não estiver comprimido, eu posso usar:
tar -xvf /diretório/o_diretório_onde_o_pacote_está/pacote.tar
Terceiro, eu dou uma olhada em como o novo diretório é chamado, e então uso cd para entrar nele:
cd o_subdiretório_do_novo_programa
Como alguns dos diretórios tem nomes longos, eu uso a opção de autocompletar para economizar digitação -- digito as primeiras letras e pressiono <TAB> .
Quarto, a maioria dos programas são compilados executando-se estes três comandos:
./configure
make
make install
Os comandos acima podem levar algum tempo para serem executados . Se algum deles falha, pode ser uma boa idéia ler os arquivos README ou INSTALL ou quaisquer informações que acompanham o pacote. Alguns programas podem requerer uma customização do ambiente(por exemplo, adição de seu subdiretório ao PATH) ou instalação de uma biblioteca adicional, ou qualquer outra coisa mais. Este processo pode ser as vezes doloroso. Muitos programas simples podem não precisar dos passos "./configure" e/ou “make install", nestes casos, o “make” cuidará de tudo.
Quinto, se tudo correu bem, eu encontro o novo executável que acabei de compilar. Os nomes de executáveis são mostrados em verde quando se executa o comando
ls --color
Agora, eu posso rodar o executável, por exemplo, :
./o_executável
Sexto, se eu planejo rodar o programa frequentemente, eu crio um link simbólico para o executável a partir do diretório /usr/local/bin (que faz normalmente parte do PATH) :
cd /usr/local/bin
ln -s /usr/local/diretório_do_novo_programa/o_executável .
Desta forma, o executável(na realidade, um link simbólico para ele) está no meu PATH e ele pode ser executado simplesmente digitando-se seu nome (sem necessidade de digitar o caminho completo). Alguns programas colocarão o executável (ou um link para ele) em um diretório “bin”. Neste caso, você deve saltar o ultimo passo.
o Existem também programas distribuídos como “ pacotes de código fonte rpm”. Eles requerem a instalação do pacote rpm com o utilitário rpm e então a compilação do código fonte executando-se os mesmos passos: "./configure ;  make ; make install" da mesma forma que para os pacotes tar.gz.


Ir para a Parte 4: FAQ do Administrador Novato em Linux