Escolar Documentos
Profissional Documentos
Cultura Documentos
ADMINISTRAÇÃO GNU/LINUX
Aos Participantes:
similares.
Sempre que não entender, tiver dúvidas ou necessitar de mais esclarecimentos, chame o
instrutor e peça que esclareça suas dúvidas. Não deixe pontos em aberto sobre
Cada pessoa possui sua própria maneira de aprender, seu próprio estilo de estudar e
geralmente se ajustam à cada tipo de curso. Entretanto, algumas dicas, dispostas
abaixo, podem ajudar a nos organizar e aprimorar nossa maneira de aprender:
Planejamento – Trace objetivos e estratégias para chegar onde deseja. Siga passo-a-
passo e não queime etapas. Faça o que for preciso primeiro, depois o que gostaria de
fazer e não esqueça: “Para se chegar mais longe, ande mais devagar.” Confúcio
Erros – Não se incomode com erros nos momentos de aprendizagem. Somente quem faz
é que tem o direito de errar. Os erros nos permitem aprender muito mais, pois errando
aprendemos como não fazer. Não se esqueça porém, de aprender com seus erros, isto é
o mais importante!
Motivação – Renove sua motivação a cada aula, pense sempre nos seus objetivos e onde
deseja chegar. A motivação muitas vezes rompe barreiras e derruba obstáculos, como a
preguiça e o mal humor.
Notas do Autor
O presente material é resultado de uma busca constante por informações sobre os sistemas
UNIX e GNU/Linux, os quais sempre estiveram presentes na vida daqueles que trabalham com
atividades relacionadas com a Tecnologia da Informação.
Diversos textos foram consultados na Internet, além dos livros e materiais citados no presente
documento e sites de busca, enfim, muita informação foi procurada mas muito pouco foi
aproveitada, pois muitas informações estão escritas sobre casos específicos, versando sobre
temas muito fechados, não abrindo exposições para uma melhor compreensão do contexto que
foram escritas.
Vários dos textos iniciais deste material foram extraídos da Apostila de Treinamento
GNU/LINUX Módulo 1 do CCUEC da UNICAMP, a qual foi elaborada por Fábio da Silva Santos,
onde aqui preservamos os direitos autorais dos respectivos textos, juntamente com a respectiva
licença, contida também neste documento.
Como citado anteriormente, este texto é livre para quem quiser se utilizar, copiar, recortar tudo
ou em parte. Não se teve aqui objetivos de direitos autorais, tampouco financeiros ou de qualquer
relação com temas que enfatizem uma propriedade de alguma coisa.
Procuramos citar todas as fontes e licenças agregadas nas informações aqui contidas, para
preservar os direitos de quem as escreveu. Entretanto, fica aqui registrada minhas desculpas
pela falta da citação que porventura poderia ter ocorrida neste material.
Não se objetiva nada mais do que passar informação, conhecimento e experiência profissional e,
se alguém achar o contrário estará veêmentemente enganado, pois “[...] a informação e o
conhecimento é um direito de todos os seres humanos.”, não somente dos privilegiados que
tiveram as oportunidades na vida de obtê-las.
Sumário
2 HISTÓRICO.................................................................................................................................... 13
2.1 Fatos Históricos do Unix..................................................................................................... 13
2.2 Fatos Históricos do Linux................................................................................................... 15
2.3 Informações Básicas Sobre o Linux.................................................................................. 16
2.4 O Padrão LSB – Linux Standard Base............................................................................... 20
3 VISÃO GERAL DO GNU/LINUX................................................................................................ 21
3.1 Características Gerais do GNU/Linux.............................................................................. 22
3.2 O Sistema de Arquivos do Linux........................................................................................ 23
3.3 Organização dos Arquivos em Disco................................................................................. 24
3.4 Endereçamento de Arquivos nos Discos........................................................................... 27
3.5 Estrutura de Diretórios no Linux...................................................................................... 28
3.6 Particionamento de Discos no Linux.................................................................................. 34
3.7 Ponto de Montagem............................................................................................................... 36
4 INSTALAÇÃO DO GNU/LINUX............................................................................................... 37
4.1 Procedimentos Pré-Instalação............................................................................................ 37
4.2 Instalação de um GNU/LINUX Básico............................................................................. 38
4.3 Iniciando o processo de Instalação................................................................................... 39
4.4 Configurações Iniciais do Sistema.................................................................................... 55
5 COMANDOS BÁSICOS.............................................................................................................. 63
5.1 - ls : lista conteúdos de diretórios.................................................................................... 63
5.2 - mkdir : cria diretórios....................................................................................................... 63
5.3 - rmdir : remove diretórios vazios.................................................................................... 64
5.4 - rm : remover diretórios e arquivos................................................................................ 64
5.5 - cd : muda o diretório de trabalho atual........................................................................ 64
5.6 - pwd : mostra o nome e caminho do diretório atual..................................................... 65
5.7 - clear : limpa tela do terminal e posiciona o cursos no início da tela.......................65
5.8 Comandos de Ajuda............................................................................................................... 65
5.9 O interpretador de comandos – O Shell.......................................................................... 68
5.10 Editor de textos “vi”........................................................................................................... 85
5.11 Ambiente do Usuário........................................................................................................... 87
6 EMPACOTADORES E COMPACTADORES............................................................................... 91
6.1 O Empacotador de arquivos tar...........................................................................................91
6.2 Os Compressores de arquivos compress, uncompress, gzip, gunzip, bzip2 e
bunzip2............................................................................................................................................ 92
7 PROGRAMAÇÃO BÁSICA EM SHELL SCRIPT...................................................................... 95
7.1 Shell Scripts........................................................................................................................... 95
7.2 Proteção de Caracteres Especiais (Quoting).................................................................. 95
7.3 Formas de Execução de Comandos.................................................................................... 96
7.4 Operadores............................................................................................................................. 98
7.5 Variáveis Especiais................................................................................................................ 98
2 HISTÓRICO
Não é possível falar em Linux sem antes apresentar a história de sua descendência e os fatos
históricos que o precederam. É importante que se tenha em mente que uma série de
acontecimentos propiciaram a evolução dos computadores e conseqüentemente dos sistemas
operacionais, como o Linux por exemplo.
No final da década de 60 e início dos anos 70, os computadores eram grandes artefatos de
eletrônica e o acesso à eles era restrito ao mundo de cientistas e pesquisadores, sem esquecer do
uso militar que tais equipamentos sempre tiveram.
Em 1969 Ken Thompson cria o Unix em um computador PDP-7 da DEC. Ele foi escrito inicialmente
em linguagem Assembly, a qual é altamente atrelada ao código interno do microprocessador,
impedindo sua disseminação para outros tipos de computadores.
Em 1971 é lançada a versão 1 do Unix a qual ainda era totalmente escrita em linguagem Assembly.
Em 1970 Dennis Ritchie cria a linguagem C, que era uma evolução da linguagem B e juntamente com
Thompson, portam o Unix para outras arquiteturas de hardware, fato que aconteceu somente em
1973, quando Thompson e Ritchie escreveram o primeiro compilador C para Unix.
Em 1973 foi criada a versão 4 do Unix agora escrita em linguagem C e foi o marco principal para a
evolução deste sistema operacional.
No inicio o Unix foi mantido pelos laboratórios da AT&T (American Telegraph And Telephone) e,
em 1974 foi distribuído gratuitamente para as universidades americanas. Mais tarde a AT&T
fechou o código do Unix devido ao grande interesse comercial pelo sistema.
Para que houvesse um padrão mínimo de Unix no mercado, em 1990 o IEEE (Instituto de
Engenheiros Elétricos e Eletrônicos) desenvolve o padrão POSIX (Portable Operanting System
Até no início da década de 80, o Unix ainda não possuía um sistema gráfico nativo. Entretanto, o
MIT (Instituto de Tecnologia de Massachusets) desenvolve um sistema gráfico baseado na
arquitetura cliente e servidor. Este sistema foi denominado X Window System, ou Sistema de
Janelas X.
Em 1988 o controle do X Window System foi passado para o X Consortium (Consórcio X), que era
uma instituição sem fins lucrativos criada para manter e garantir a evolução do sistema de janelas
X.
Richard Stallman, pesquisador do MIT, funda em 1983 a Free Software Foundation (Fundação do
Software Livre) e lança o projeto GNU (GNU is not Unix) o qual tinha o objetivo de criar um clone
do Unix que fosse melhorado, que não utilizasse seu código fonte e que fosse livre.
O desafio era enorme pois tudo precisava ser feito, inclusive o Kernel do sistema. Os utilitários
do sistema, ferramentas de administração, de rede, de programação, os comandos padrões, enfim,
muita coisa precisa ser desenvolvida. No final da década de 80, apenas os utilitários de
programação e os comandos-padrão estavam prontos e o projeto de Stallman fracassara.
Uma grande oportunidade então apareceu no horizonte quando o Dr. Andrew Tanenbaum
desenvolveu, para efeitos didáticos, o Minix como instrumento de ensino. Este sistema foi
desenvolvido originalmente para a plataforma Intel 8086, pois esta já estava amplamente
disponível e com preço baixo.
Linus B. Torvalds desejava construir um Kernel clone do Unix que tivesse memória virtual,
multitarefa preemptiva e multiusuário. Porém este trabalho seria enorme para uma pessoa
somente, mesmo que conhecesse muito bem as teorias que envolvem os sistemas operacionais.
Na primavera de 1991, Linus B. T. da início à um projeto particular inspirado no Minix. Ele queria
um Minix melhor que o Minix. Após algum tempo, seu projeto solitário de um Kernel, conseguia
executar os utilitários de programação e os comandos-padrão do Unix clonados pelo projeto GNU.
Vendo então que não conseguiria continuar sozinho nesta tarefa, Linus enviou para a lista de
discussão comp.os.minix, com o seguinte desafio:
“Você suspira por melhores dias do Minix-1.1, quando homens serão homens e escreverão seus
próprios device drivers? Você está sem um bom projeto e está morrendo por colocar as mãos em
um S.O. no qual você possa modificar de acordo com suas necessidades? Você está achando
frustrante quando tudo trabalha em Minix? Chega de atravessar noites para obter programas que
trabalhem correto. Então esta mensagem pode ser exatamente para você.
Como eu mencionei há um mês, estou trabalhando em uma versão independente de um S.O. similar
ao Minix para computadores AT-386. Ele está, finalmente, próximo do estágio em que poderá ser
utilizado (embora possa não ser o que você esteja esperando), e eu estou disposto a colocar as
fontes para ampla distribuição. ele está na versão 0.02.., contudo, eu tive êxito rodando bash,
gcc, gnu-make, gnu-sed, compressão, etc, nele”.
Então, em 5 de Outubro de 1991, Linus B. Torvalds lançou a primeira versão oficial do Linux: o
Linux 0.02. Desde então, vários programadores pelo mundo afora têm colaborado no
desenvolvimento do Linux e tornando o sistema o que ele é atualmente.
O Linux não é software de domínio público, pois está licenciado sob a licença GPL ( GNU Public
License), onde, por exemplo, o código-fonte do Linux poderá permanecer livremente disponível. É
possível cobrar pela cópia do Linux, desde que, não limitem a sua distribuição.
Diversas pessoas têm auxiliado no desenvolvimento do Linux pelo mudo afora. Este
desenvolvimento é dirigido por Linus B. Torvalds e cada colaborador mantém os direitos de
copyright sobre os códigos que escreveram.
A versão 1.0 do Linux foi liberada no dia 14 de março de 1994 e até hoje, inúmeras versões novas
foram feitas desde então.
O Linux segue um modelo de desenvolvimento aberto e a cada nova versão liberada, o produto
agrega mais qualidade. Como forma de padronizar as versões do Kernel do Linux, a equipe de
desenvolvimento adotou o seguinte esquema sobre as numerações de versões:
➢ SuSe: Distribuição alemã, adquirida pela americana Novell, que vem se destacando pelo
seu grande crescimento no mercado corporativo, sendo a distribuição que mais cresce
atualmente nesse setor. O SuSE Linux sempre se destacou por ter o melhor suporte a
hardware dentre as distribuições existentes, isso graças à inclusão de drivers não-
livres (gratuitos ou pagos) com seu sistema operacional. O SuSE possui uma ferramenta
muito versátil, o YAST, através da qual é possível configurar todo o sistema, além de
gerenciar os programas instalados, tudo ao alcance do mouse. A união dessa facilidade
como ótimo suporte comercial vem fazendo do SuSE uma das melhores alternativas
para grandes empresas, que não podem abrir mão de suporte técnico especializado e
sempre à mão.
➢ Red Hat :Lançada oficialmente em novembro de 1994, a Red Hat foi a empresa pioneira
no ramo de GNU/Linux, tornando-se rapidamente a maior empresa do mundo a
trabalhar exclusivamente com o sistema operacional livre. Ainda hoje, a Red Hat é a
distribuição mais utilizada no mundo, e muitas outras distribuições famosas como SuSe
e Mandriva são derivadas dela. Pioneira no uso de ferramentas para configuração e
manutenção do sistema, o Red Hat foi e, ainda é usado principalmente em servidores, a
contragosto de muitos que dizem que seu desempenho não é lá dos melhores, apesar da
extrema facilidade do gerenciamento do sistema, fornecida pelas ferramentas
incluídas na distribuição. No atual modelo de negócios, a Red Hat está desenvolvendo
somente soluções para empresas através de distribuições fechadas, não disponíveis
para download.
➢ Fedora : Quando a Red Hat decidiu mudar seu modelo de negócios e trabalhar apenas
com soluções para o mercado corporativo, deixou de disponibilizar a sua distribuição
para download sob uma licença de Software Livre. Isso causou uma certa revolta na
comunidade, que alegava que a Red Hat a estava traindo. Temendo retaliação e boicote,
a Red Hat decidiu criar uma versão livre de seu sistema operacional, voltado para o
desktop, e disponibilizá-la abertamente para download. Chamado de Fedora, o projeto
alcançou um grande sucesso, e atualmente é utilizado por um número expressivo de
usuários ao redor do mundo. Por possuir as mesmas ferramentas do Red Hat, a
migração dos usuários aconteceu de forma tranqüila e nem um pouco traumática. O
Fedora é mantido pela comunidade, e gerenciado pela Red Hat. Atualmente ele está na
versão Core 4.
gerenciador de pacotes Synaptic e o APT for RPM, uma adaptação do APT do Debian
para sistemas baseados no Red Hat. A Conectiva tornou-se rapidamente a maior
empresa de Linux da América Latina, tendo sido recentemente adquirida pela francesa
MandrakeLinux, tornando-se a distribuição Mandriva. A Conectiva sempre
disponibilizou os seus produtos sob a licença GPL, exceto as versões para empresas do
seu sistema operacional.
➢ Mandrake (Mandriva) : Distribuição francesa baseada no Red Hat, que com o tempo
tomou características próprias e assumiu um sucesso que tornou a Mandrakelinux a
maior empresa do ramo de Linux na Europa. O principal trunfo do Mandrake é a
facilidade de uso. Tudo é simples de fazer, desde a instalação do sistema até a sua
configuração, instalação de novos itens de hardware e gerenciamento dos programas
instalados. Suporta vários idiomas, incluindo o português brasileiro, e possui muitos
serviços para usuários, como o Mandrake Club, onde o membro recebe as últimas
atualizações sobre segurança, softwares, e outros, de forma rápida e automatizada.
Recentemente, a Mandrakelinux comprou a brasileira Conectiva, tornando-se também a
maior empresa do ramo de Linux da América Latina, e lançando a nova distribuição, o
Mandriva.
➢ Slackware : Mais antiga das distribuições, criada em abril de 1993 pelo irlandês,
Patrick Volkerding, o Slackware é uma distribuição tradicionalista, voltada para
usuários que conhecem o sistema e sabem o que estão fazendo. O objetivo de Patrick é
fornecer um ambiente o mais parecido possível com um sistema UNIX padrão,
mantendo a simplicidade e oferecendo total controle para o administrador. Além disso,
o Slackware é a única distribuição que não aplica patches (pacotes de correção e
modificações) nos seus pacotes, ficando essa tarefa a cargo do usuário, se assim achar
necessário. O melhor uso do Slackware é em servidores dedicados, geralmente
estáticos no sentido de não requererem atualizações constantes de software, e onde o
sistema seja administrado por uma pessoa apenas, que sabe muito bem o que está
fazendo. O Slackware tem a fama de ser uma distribuição difícil e sem muitos
recursos. É comum os iniciantes enfrentaram problemas com a configuração do
servidor gráfico.
➢ Debian : O Debian foi criado por Ian Murdock em 1993, inicialmente patrocinado pelo
projeto GNU da Free Software Fundation. Hoje, os projetistas do Debian entendem-no
como um descendente direto do Projeto GNU. O Debian atualmente inclui mais de
12000 pacotes de software, facilmente instaláveis através de uma ferramenta
chamada APT. Esses pacotes são em sua maioria softwares livres disponibilizados sob a
licença GPL. Alguns deles não são livres, mas ainda assim gratuitos. Você pode
encontrar uma lista e descrições dos pacotes atualmente disponíveis no Debian em
qualquer um dos seus sites mirrors (espelhos). Um diferencial do Debian sobre as
demais distribuições é que ele é o único sistema que não é mantido, supervisionado ou
patrocinado por alguém ou alguma organização. Todo o sistema, incluindo suas
ferramentas e os pacotes que utiliza são mantidos por diversos desenvolvedores ao
redor do mundo. Mas nem por isso o processo de desenvolvimento do Debian é
desorganizado, muito pelo contrário, é um dos processos mais organizados que se
conhece. As pessoas que se candidatam a serem mantenedores do sistema passam por
testes dificílimos, ficam um longo período em experiência e, se aprovados, têm de
assinar um termo de responsabilidade onde se comprometem a garantir a continuidade
do sistema operacional, zelando pela qualidade e segurança de tudo o que passar por
suas mãos. Prega-se que o Debian é a distribuição mais testada do mundo, e isso é de
fato verdade. O processo de inclusão de um recurso no sistema ou um pacote no
repositório é muito rígido, o que garante uma confiabilidade total na integridade e
segurança do sistema.
➢ Gentoo : Criado por Daniel Robins, o Gentoo é uma distribuição que pode ser definida
como um “ Linux From Scratch automatizado”. A instalação é feita segundo os mesmo
princípios de uma instalação de GNU/Linux a partir do zero, com todos os pacotes
sendo compilados um a um, incluindo o kernel. A diferença é que o Gentoo permite
automatizar essas tarefas, através de um sistema de gerenciamento de pacotes, o
Portage, que busca e baixa o pacote da Internet, compila-o e instala-o
automaticamente, de acordo com as configurações feitas pelo usuário. O Gentoo possui
arquivos de configuração próprios que definem as opções que devem ser utilizadas pelo
compilador, de forma a otimizar os pacotes para uso na máquina local. Quando bem
configurado, o Portage acaba produzindo um sistema onde o desempenho é o ponto mais
marcante. Outro ponto de destaque o Gentoo é a rica documentação disponível em seu
site oficial. Mesmo usuário de outras distribuições podem se beneficiar de documentos
que tratam de assuntos fundamentais como particionamento, formatação e sistema de
arquivos, muitos desses documentos já traduzidos pela comunidade brasileira do
Gentoo.
➢ Knoppix : Distribuição criada por Laus Knooper que oferece a possibilidade de rodar o
sistema a partir do CD-ROM. O Knoppix é muito popular, sendo muito utilizado para
demonstrações do GNU/Linux, uma vez que pode-se rodar um sistema completo,
repleto de aplicativos, a partir de um CD, sem necessidade de instalação.
próximo.
➢ Ubuntu : Desenvolvido na África do Sul, o Ubuntu tem feito muito sucesso desde o seu
lançamento, graças às suas ferramentas que tornam muito prático o uso do sistema, e
também pelo seu visual caprichado, utilizando X.org como servidor gráfico padrão.
O Linux na realidade é somente o Kernel do sistema operacional. Todos os demais aplicativos que
geralmente vêm nas distribuições, são desenvolvidos e mantidos por diversas organizações e
empresas pelo mundo.
Deste modo, a maneira correta de falar de um sistema operacional baseado no Kernel Linux é
denominá-lo de GNU/Linux.
As principais fontes de software para o Linux estão atualmente em várias partes do mundo.
Abaixo apresentamos algumas delas:
Tudo no sistema operacional Linux é tratado como arquivo. Desde um terminal de usuário, uma
impressora, um mouse e até mesmo o monitor de vídeo é tratado como arquivo. É desta maneira
que o sistema interage com os periféricos e as diversas interfaces do sistema.
Deste modo, o sistema de arquivos no Linux é de grande importância para se conhecer de fato sua
estrutura de funcionamento. Abaixo apresentamos algumas características importantes do
sistema de arquivos no Linux:
Para visualizar estes caracteres nos nomes dos arquivos, basta digitar o comando ls -F e para
visualizar os diretórios ocultos, digite ls -a.
Muitos tipos de arquivos simplesmente não existem em outros sistemas, como o MsDOS, por
exemplo. Abaixo então temos uma lista dos tipos de arquivos do Linux:
– Arquivos Comuns:
Suportam qualquer tipo de dado, seja ASCII, Unicode, arquivos comprimidos e até os
programas executáveis, ou também chamados de arquivos binários.
– Diretórios:
São arquivos especiais que contém os nomes dos arquivos que estão armazenados ou
organizados como um grupo. O agrupamento é arbitrário e você pode escolher a
combinação desejada, ou seja, você pode definir os arquivos de seus diretórios.
– Links simbólicos:
Um Link é um arquivo que faz uma referência a outro arquivo ou diretório dentro do
sistema de arquivos. Esta característica permite que um arquivo esteja em dois ou mais
lugares ao mesmo tempo, na sua localização original e no lugar referenciado pelo
arquivo de link.
Há dois tipos de arquivos de Links: O Hard Link cria novos nomes para um arquivo,
associando assim dois ou mais nomes de arquivos para um mesmo i-node e não podem
ser visualizados. O Soft Link, ou link simbólico são arquivos que fazem referência ao
arquivo original, contendo o caminho completo até o mesmo. Este tipo de arquivo pode
ser visualizado com o comando ls -F ou ls -l.
– Device (arquivos de dispositivos)
São arquivos especiais que representam dispositivos no sistema, como um disco rígido
IDE, por exemplo, seria o arquivo hda, se este disco for o Master da primeira
interface. Uma impressora paralela é um arquivo do tipo lp0. Os dispositivos de bloco,
como os discos rígidos (hda), são acessados em blocos de 1024 bytes por acesso. Já os
dispositivos a caracter como um terminal do tipo tty1 ou uma porta serial do tipo st0,
são acessados byte a byte, ou seja, seqüencialmente.
– Sockets
São arquivos utilizados para comunicação entre processos, estando estes processos
executando na mesma máquina ou então em outro computador dentro de uma rede.
– Pipes (dutos)
São arquivos utilizados para intercomunicação entre processos, normalmente
processos locais.
Em regra geral, todos os arquivos do tipo device estão residentes abaixo do diretório /dev, que é
um dos diretórios padrão do sistema Linux.
Alguns diretórios possuem notações especiais, algo que poderíamos chamar de "atalho" para o
acesso. Veja abaixo a lista dessas notações:
Normalmente este passo é feito durante a instalação de sua distribuição GNU/Linux. Cada
sistema de arquivos tem uma característica em particular mas seu propósito é o mesmo: oferecer
ao sistema operacional a estrutura necessária para ler/gravar os arquivos e diretórios. Entre os
sistemas de arquivos existentes pode-se citar:
3.3.1 EXT2
A partição EXT2 é o tipo usado para criar o sistema de arquivos Linux Native usado para
armazenar o sistema de arquivos EXT2 (após a formatação) e permitir o armazenamento de
dados. Este tipo de partição é normalmente identificado pelo código 83 nos programas de
particionamento de disco.
Logo que foi inventado, o GNU/Linux utilizava o sistema de arquivos Minix (e conseqüentemente
uma partição Minix) para o armazenamento de arquivos. Com a evolução do desenvolvimento, foi
criado o padrão EXT (Extended Filesystem) e logo evoluiu para o EXT2 (Second Extended
FileSystem) que é o usado hoje em dia. Ele é rápido, não se fragmenta tão facilmente pois permite
a localização do melhor lugar onde o arquivo se encaixa no disco, etc. Isto é útil para grandes
ambientes multiusuário onde várias pessoas gravam/apagam arquivos o tempo todo.
3.3.2 Journaling
O sistema de Journaling grava qualquer operação que será feita no disco em uma área especial
chamada journal, assim se acontecer algum problema durante a operação de disco, ele pode voltar
ao estado anterior do arquivo, ou finalizar a operação. Desta forma, o journal acrescenta ao
sistema de arquivos o suporte a alta disponibilidade e maior tolerância a falhas. Após uma falha de
energia, por exemplo, o journal é analisado durante a montagem do sistema de arquivos e todas as
operações que estavam sendo feitas no disco são verificadas.
3.3.3 EXT3
O sistema de arquivos EXT3 faz parte da nova geração Extended file System do GNU/Linux,
sendo que seu maior benefício é o suporte a Journaling O uso deste sistema de arquivos
comparado ao EXT2, na maioria dos casos, melhora o desempenho do sistema de arquivos através
da gravação seqüencial dos dados na área de metadados e acesso mhash a sua árvore de
diretórios.
3.3.4 ReiserFS
Utiliza uma eficiente estrutura de dados chamada balanced tree (árvore equilibrada), que trata
toda a partição como se fosse uma única tabela de banco de dados contendo diretórios, arquivos e
arquivos de meta-data, o que aumenta muito o desempenho de aplicativos que trabalham com
arquivos pequenos, porque estes são lidos de uma só vez, em apenas um ciclo de I/O do HD. Sua
versão 3 não trabalha perfeitamente com o sistema de arquivos de rede NFS (Network File
System). Existem alguns patches para resolver o problema, mas eles não o resolvem
completamente. O criador do ReiserFS é Hans Reiser. Atualmente o projeto é patrocinado pela
SuSE e mantido pela empresa NameSys. Aguarda-se o lançamento oficial da versão 4 do
ReiserFS, o Reiser4, que foi totalmente reescrito e possui um desempenho superior à da versão 3.
3.3.5 JFS
Criado pela IBM para uso em servidores corporativos, teve seu código liberado. O sistema de
arquivos JFS também usa a estrutura I-node para armazenar a localização dos blocos de cada
arquivo nas estruturas físicas do disco. A versão JFS2 armazena esses I-nodes em uma árvore
binária para acelerar o acesso a essas informações. Esses blocos podem variar de 512 a 4096
bytes, e a alocação dos I-nodes é feita conforme vai sendo necessário.
3.3.6 XFS
Este tipo de partição é usada para oferecer o suporte a memória virtual ao GNU/Linux em adição
a memória RAM instalada no sistema. Somente os dados na memória RAM são processados pelo
processador, por ser mais rápida.
Desta forma, quando você está executando um programa e a memória RAM começa a encher, o
GNU/Linux move automaticamente os dados que não estão sendo usados para a partição SWAP e
libera a memória RAM para continuar carregando os dados necessários pelo programa que está
sendo carregado. Quando os dados movidos para a partição SWAP são solicitados, o GNU/Linux
move os dados da partição SWAP para a memória. Por este motivo a partição SWAP também é
chamada de área de troca ou memória virtual. A velocidade em que os dados são movidos da
Nesse caso, a menos que você vá utilizar NFS, o sistema de arquivos mais indicado é o ReiserFS,
que possui comprovadamente um desempenho muito superior ao de outros sistemas de arquivos.
Se for utilizar NFS, uma vez que existe o problema de compatibilidade do ReiserFS, pode-se
utilizar o XFS, ou o EXT3. Entretanto, se você realmente não precisa das vantagens do
Journaling, o EXT2 pode ser a melhor alternativa para você.
O processo de formatação de discos no Linux cria uma estrutura de dados baseada no conceito de
i-node (nó índice). A estrutura organizacional dos discos fica então conforme mostra a figura
seguinte:
Se porventura o Superbloco for danificado, todo o sistema de arquivos ficará indisponível, pois é
através deste mapeamento que se consegue chegar nos arquivos.
Logo após o Superbloco está a tabela de i-nodes. Nos sistemas Unix e Linux, o i-node é a menor
unidade de informação em disco. É uma contrapartida ao conhecido Cluster nos sistemas MsDos e
MsWindows.
Os i-nodes são numerados de 1 até o número máximo possível, definido no momento da formatação
da partição. Cada um possui 64 bytes e contém as seguintes informações sobre um arquivo:
Nesta estrutura de dados, o nome do arquivo não fica no i-node do arquivo, mas dentro do arquivo
diretório. Lembre-se sempre que, no Unix e também no Linux, diretórios são arquivos.
Os diretórios são arquivos que contém várias entradas. Cada uma delas representa o nome de um
arquivo deste diretório. Para ler então um arquivo, o sistema operacional lê o arquivo de diretório
correspondente e compara o nome fornecido com os nomes ali contidos. Se o arquivo estiver no
diretório, o sistema faz o seguinte:
– Obtém o número do seu i-node;
– Procura este i-node na tabela de i-nodes e carrega para a memória;
– Tal i-node é armazenado em uma tabela de i-nodes do Kernel, a qual guarda todos os i-
nodes para arquivos abertos e para diretórios;
– A leitura então deste i-node fornece o endereço físico da localização dos blocos de
dados do arquivo correspondente, e assim ele é lido do disco.
Se um arquivo ou diretório for composto por mais de um bloco de dados, os demais blocos não
precisam estar em posições contíguas no disco, ou seja, os blocos de dados podem ficar
espalhados pelo disco. (isso gera a famosa fragmentação do disco).
Nada impede que você crie mais pastas no diretório raiz para armazenar seus arquivos. Apesar de
ser recomendável em termos de organização e segurança, você não é obrigado a concentrar seus
arquivos dentro do seu diretório de usuário. Nada impede que você autentique-se como root, crie
uma pasta /arquivos, abra o menu de permissões para que seu usuário geral tenha permissão para
acessá-la e a utilize para guardar seus arquivos, por exemplo.
Mas, as diferenças não param por aí. Para onde vão os programas que são instalados se não existe
uma pasta central como a C:\Arquivos de programas? E para onde vão os arquivos de configuração
se o GNU/Linux não possui nada semelhante ao registro do Microsoft Windows®?
A primeira coisa com que você precisa se habituar é que no GNU/Linux os discos e partições não
aparecem necessariamente como unidades diferentes, como o C:\, D:\, E:\ do Microsoft
Windows®. Tudo faz parte de um único diretório, chamado diretório raiz, ou '/'. Dentro deste
diretório temos não apenas todas as partições de disco, mas também o CD-ROM, drive de
disquete e outros dispositivos. Dentro da estrutura do sistema de arquivos, cada um dos
diretórios possui uma função específica, como vemos na lista abaixo.
/--
|-- bin
|-- boot
|-- dev
|-- etc
|-- home
|-- initrd
|-- lib
|-- media
|-- mnt
|-- opt
|-- proc
|-- root
|-- sbin
|-- srv
|-- sys
|-- tmp
|-- usr
|-- var
➢ /boot : Este diretórios contém tudo que é necessário para carregar o sistema, exceto os
arquivos de configuração. Contém arquivos estáticos relacionados à inicialização do sistema,
como o Kernel, e o boot-loader GRUB ou LILO.
➢ /dev : Contém arquivos de dispositivos de entrada e saída (I/O) como por exemplo, o CD-ROM
(/dev/cdrom), o disquete (/dev/fd0), e o HD (/dev/hda). Todo o mapeamento para o hardware
do sistema será encontrado neste diretório.
➢ /home : Este diretório é nitidamente um sistema de arquivos específico dos usuários locais,
sendo a localização sugerida para os diretórios locais dos usuários. Sua estrutura pode diferir
➢ /lib : Este diretório contém aquelas bibliotecas compartilhadas que são necessárias para
inicializar o sistema e executar comandos no sistema de arquivos raiz, mais especificamente os
comandos contidos em /bin e /sbin. Pode conter também módulos do kernel, localizados em
/lib/modules.
➢ /media : Este diretório contém os subdiretórios que são utilizados como pontos de montagem
para mídias removíveis, como por exemplo disquetes, drives CD-ROM, ZIP drives, gravadores
de CD/DVD, dispositivos USB, etc.
➢ /mnt : Este diretório contém os subdiretórios que são utilizados como pontos de montagem
para sistemas de arquivos temporários, que podem ser partições de outros sistemas
operacionais da máquina, como por exemplo, um sistemas de arquivos FAT32 ou NTFS do
Microsoft Windows®.
➢ /proc : Este diretório é um sistema de arquivos virtual utilizado para manipular informações de
processos do sistema. É recomendada sua utilização para o armazenamento e obtenção de
informações de processos, assim como outras informações do Kernel ou da memória.
➢ /root : Este é um diretório opcional no GNU/Linux. O diretório local da conta do usuário root
pode ser determinado por preferências, porém /root é a sua localização padrão.
➢ /sbin : Este diretório contém comandos essenciais para inicializar, restaurar, recuperar
e
reparar o sistema, complementando os comandos encontrados em /bin. Comandos como getty,
reboot, shutdown, ifconfig e fdisk são encontrados neste diretório.
➢ /srv : Este diretório contém os arquivos de aplicações como Apache, FTP e CVS. Ainda pouco
usado por ter sido implementado nas versões mais recentes do FHS.
➢ /tmp : Este diretório é utilizado para arquivos temporários gerados por programas, podendo
estar no disco rígido ou na memória RAM. Os programas não devem assumir que quaisquer
arquivos ou diretórios em /tmp sejam preservados entre execuções dos mesmos. Recomenda-
se que o conteúdo de /tmp seja apagado sempre que o sistema for inicializado (padrão).
➢ /usr : O diretório /usr é a segunda maior seção do sistema de arquivos. /usr é compartilhável
e somente de leitura. Isto significa que o /usr pode ser compartilhado entre várias máquinas
que utiliza GNU/Linux. Suas subdivisões consistem na seguinte estrutura:
➢ /var: Este diretório contém arquivos de dados variáveis. Inclui arquivos e diretórios em fila de
execução, dados de ordem administrativa e de login, além de arquivos temporários e
transitórios. Algumas partes de /var não são compartilháveis entre diferentes sistemas. Por
exemplo, /var/log, /var/lock e /var/run. outras partes podem ser compartilhadas,
notadamente em /var/mail, /var/cache/man, /var/cache/fonts e /var/spool/news. Ele também
contém subdiretórios importantes ao sistema, e os principais são:
➢ /var/mail: Contém as caixas postais de e-email dos usuários, que são arquivos
no formato mailbox do UNIX, com o nome do usuário.
As partições são divisões existentes no disco rígido que marcam onde começa e onde termina um
sistema de arquivos. Por causa destas divisões, nós podemos usar mais de um sistema operacional
no mesmo computador (como o GNU/Linux, Microsoft Windows® e DOS), ou dividir o disco rígido
em uma ou mais partes para ser usado por um único sistema operacional. Uma partição de disco
não interfere em outras partições existentes, por este motivo é possível existir mais de um
sistema operacional no mesmo disco rígido.
Para particionar (dividir) o disco rígido em uma ou mais partes é necessário o uso de um programa
de particionamento. Os programas mais conhecidos para particionamento de discos no GNU/Linux
são fdisk, cfdisk, Parted e o Disk Druid. Informações importantes para a criação e utilização das
partições:
➢ Para gravar os dados, o disco rígido deve ser primeiro particionado (usando o cfdisk por
exemplo), escolher o tipo da partição e depois aquela partição deve ser formatada com o
um tipo de sistema de arquivos. Após criada e formatada, a partição será identificada
como um dispositivo no diretório /dev e deverá ser montada para permitir seu uso no
sistema;
➢ Quando se apaga uma partição, você estará apagando TODOS os arquivos existentes nela!;
Para entender o particionamento é preciso antes saber como o Linux trata os discos rígidos no
sistema, pois estas unidades de armazenamento possuem nomes diferenciados de acordo com suas
configurações físicas de interface.
/dev/hda1
| |||
| |||_ Número que identifica o número da partição no disco rígido.
| ||
| ||_ Letra que identifica o disco rígido (a=primeiro, b=segundo, etc...).
| |
| |_ Sigla que identifica o tipo do disco rígido (hd=ide, sd=SCSI, xt=XT).
|
|_ Diretório onde são armazenados os dispositivos existentes no sistema.
As letras de identificação de discos rígidos podem ir além de hdb, em algumas máquinas, por
exemplo, a unidade de CD-ROM podem estar localizada em /dev/hdg (Primeiro disco - quarta
controladora IDE). É importante entender como os discos e partições são identificados no
sistema, pois será necessário usar os parâmetros corretos para montá-los e utilizá-los
adequadamente.
A figura seguinte nos mostra um exemplo de como são tratados os discos rígidos IDE no sistema.
Antes de um sistema de arquivos poder ser utilizado, ele necessita ser montado. O sistema
operacional executa diversas verificações para estar seguro de que tudo está funcionando bem.
Uma vez que todos os arquivos no GNU/Linux estão em uma única árvore de diretórios, a operação
de montagem fará com que o novo sistema de arquivos pareça um subdiretório existente em algum
sistema de arquivos já montado.
Como será visto mais para frente, o comando para montagem de um sistema de arquivos possui
dois argumentos. O primeiro é o arquivo de dispositivo correspondente ao disco ou partição que
contenha o sistema de arquivos. O segundo é o diretório sob o qual ele será montado. Por exemplo,
após a execução do comando: mount /dev/hda2 /mnt/backup, podemos dizer que /dev/hda2 está
montado em /mnt/backup.
Para examinar estes sistemas de arquivos, pode-se acessar estes diretórios exatamente da
mesma forma que qualquer outro, como veremos mais adiante. É importante ressaltar a diferença
entre o dispositivo /dev/hda e o o diretório montado /mnt/backup. Enquanto o primeiro dá
acesso aos dados brutos do disco, o segundo permite o acesso aos arquivos contidos no mesmo
disco. O diretório montado é chamado ponto de montagem.
4 INSTALAÇÃO DO GNU/LINUX
A instalação de um sistema GNU/Linux não é uma tarefa difícil como muitos usuários pensam, ela
é apenas um processo mais detalhado e customizável do que outros sistemas Para que este
procedimento seja bem sucedido, é indicado seguir algumas dicas básicas:
Para efeitos de treinamento, os endereços IPs serão obtidos automaticamente via servidor DHCP
disponível na rede.
O nome de cada microcomputador será definido pelo instrutor e no momento correto do processo
de instalação, você será questionado para informar o nome do computador para o script de
instalação.
➢ Detecção de hardware;
➢ Seleção do idioma;
➢ Perfis de instalação;
➢ Configurar rede;
➢ Particionamento de disco;
➢ Instalação de pacotes;
➢ Monitor;
➢ Placa de vídeo;
➢ Nº de cores / resolução;
➢ Disco de inicialização;
➢ Finalização da instalação;
Normalmente uma instalação de GNU/Linux possui estas características, porém, como existem
diversas distribuições com seus próprios instaladores, algumas destas etapas podem não existir,
podem fazer parte de outro item do instalador, ou mesmo podem ser executadas sem aparecerem
visualmente para o usuário.
A distribuição utilizada como base para o curso é o Debian GNU/Linux 3.1, ou Debian “Sarge”.
Esta distribuição é desenvolvida e atualizada através do esforço de voluntários espalhados ao
redor do mundo, seguindo o estilo de desenvolvimento GNU/Linux. Por este motivo, foi adotada
como a distribuição oficial do projeto GNU.
Apesar da sua instalação ser inteiramente em modo texto, pode-se instalar um sistema completo
com uma enorme facilidade e rapidez. Sua instalação é dividida nas seguintes etapas:
➢ Seleção do idioma;
➢ Configurar rede;
➢ Particionar disco;
➢ Monitor;
➢ Placa de vídeo;
➢ Nº de cores / resolução;
➢ Configurar o EXIM;
A partir de agora, vamos detalhar o processo de instalação do Debian GNU/Linux 3.1 “Sarge”,
passo-a-passo, com apresentação das telas que fazem parte do instalador. Lembrando que as
opções selecionadas farão parte dos exemplos deste curso.
A figura 4.1 mostra a tela de apresentação do instalador, logo após a inicialização do computador
pela mídia de instalação do Debian GNU/Linux Sarge, que pode ter sua imagem disponibilizada em
ftp://linorg.usp.br/iso/debian/. Precisa-se apenas do CD 1 para realizar uma instalação funcional
e enxuta.
Pressionando a tecla F1, podemos visualizar um menu com diversas informações sobre a instalação
e sobre o Projeto Debian GNU/Linux. Utilize o método de instalação “linux26” (figura 4.2).
Figura 4.2 – Menu de opções do instalador.
Nesta etapa, faz-se a seleção do idioma usado no processo de instalação (figura 4.3). Selecione a
opção “Portuguese (Brazil) - Português do Brasil”.
Escolha o layout do teclado que você está usando (figura 4.4). O instalador oferece a opção mais
comum, baseada na sua escolha de linguagem, mas obviamente, você pode mudar se desejar.
Selecione a opção “Português Brasileiro (layout ABNT2)”.
O instalador executa a detecção do CD-ROM (figura 4.5) para poder carregar na memória os
componentes necessários ao seu funcionamento (figuras 4.6 e figura 4.7).
Figura 4.10 – Mensagem de erro exibida por não achar nenhum servidor DHCP.
As informações de rede como endereço IP (figura 4.12), máscara de rede (figura 4.13), Gateway
(figura 4.14), servidores de nomes, ou DNS (figura 4.15), nome da máquina (figura 4.16) e domínio
da rede (figura 4.17), serão necessárias nesta etapa da instalação.
Nesta etapa é feita a detecção dos disco e outros hardwares relacionados (figura 4.18).
Após realizar a detecção automática dos discos, o instalador inicializa o particionador (figura
4.19) e exibe um menu onde é listado todos discos detectados (figura 4.20). Selecione a opção
“Editar manualmente a tabela de partições”.
Selecionando esta opção, o usuário tem um maior controle sobre como será a configuração das
partições do seu sistema, recurso não garantido no particionamento automático. Caso o seu disco
ainda não tenha uma tabela de partições por estar vazio ou não formatado, será exibida uma
mensagem notificando a necessidade desta criação (figura 4.21). Selecione a opção “Sim” para
continuar.
Nesta instalação será utilizado um esquema de particionamento conforme a tabela abaixo. Siga as
orientações enumeradas para criar as partições. Cada item contém a referência das telas exibidas
durante o particionamento, para que você possa localizar-se durante a execução dos
procedimentos.
Tabela 1 – Partições
1.Selecione a área do disco que contenha espaço livre para criar as partições (figura 4.22):
3. Coloque neste campo o valor “100 MB“ (Entre os valores “100” e “MB” coloque um espaço em
branco) (figura 4.24):
6. Selecione o item “Usar como” para selecionar o tipo de sistema de arquivos para esta partição
(figura 4.27):
7. Para a criação desta nova partição, seleciona-se a opção “sistema de arquivos com Journaling
ext3” (figura 4.28):
8. Nesta etapa, o instalador exibe a configuração da partição recém criada. Selecione a opção
“Ponto de Montagem” e selecione para /boot (figura 4.29):
9. Ative o Flag Inicializável para que a partição seja uma partição ativa para boot. Em caso de uso
com outros sistemas operacionais como o Ms Windows, não use esta opção pois o Ms Windows não
conseguirá inicializar.
12. Será exibida a configuração da sua tabela de partições (figura 4.30). Selecione a opção
“Finalizar o particionamento e gravar as mudanças no disco”:
13. Conforme a gravação da tabela de partições, selecionando a opção “Sim” (Figura 4.30):
14. Após a confirmação anterior, o instalador irá formatar as partições recém-criadas (figura
4.31):
A instalação do sistema básico é feita logo após a formatação das partições (figura 4.32):
Agora o instalador realiza as últimas configurações desta primeira etapa (figura 4.35), e exibe
uma mensagem notificando a finalização da instalação (figura 4.36). O CD será ejetado da bandeja
e o computador será reinicializado para a próxima etapa que é a configuração do sistema.
A configuração do sistema GNU/Linux é iniciada após a instalação do sistema básico (figura 4.38).
Agora serão feitas as configurações mais específicas do sistema, e a instalação de pacotes de
acordo com o uso da máquina. Mesmo que na mesma máquina exista outro sistema operacional
instalado, o novo gerenciador de inicialização será o GRUB, e a sua interface padrão tem a
configuração como a da figura 4.37:
Na tela anterior escolha o fuso horário Leste, pois este representa o horário de Brasília, pois no
caso do Brasil, há 4 fusos horários.
Para o usuário de utilização geral (curso), a configuração pede o seu nome completo (figura 4.43),
seu username (figura 4.44), sua senha (figura 4.45) e a confirmação para esta senha (figuras
4.46):
Repita o processo da escolha do CD-ROM caso você possua mais CDs da distribuição Debian. A
distribuição completa engloba mais de 16 CD-ROMs de pacotes.
5 COMANDOS BÁSICOS
Neste capítulo serão abordados os comandos básicos para que você comece a interagir com o
interpretador de comandos do Shell bash.
Sintaxe:
$ ls <opções>
Opções:
• - l : escreve no formato de colunas simples.
• - i : procede a saída para o arquivo pelo seu número serial (inode).
• - R : lista os diretórios encontrados recursivamente.
• - h : mostra o tamanho dos arquivos em KB, MB, GB.
• - a : lista todos os arquivos inclusive os ocultos.
• - F : insere um caracter após arquivos executáveis ('*'), diretórios ('/'), sockets ('=')
e pipe ('|'). Seu uso é útil para identificar de forma fácil tipos de arquivos nas listagens
de diretórios.
Exemplo:
$ ls /
bin cdrom etc initrd lib mnt proc sbin sys usr vmlinuz
boot dev home initrd.img media opt root srv tmp var
Sintaxe:
Opções:
✔ - p : cria toda a estrutura de diretórios passada como parâmetro.
✔ --verbose : imprime uma mensagem para cada diretório criado.
Exemplo:
$ mkdir teste
Sintaxe:
Opções:
➢ - p: remove a estrutura de diretórios passadas como parâmetro, porém, o último
diretório passado como parâmetro deve estar vazio.
➢ -- verbose: imprime uma mensagem para cada diretório apagado.
Exemplo:
$ rmdir teste
Sintaxe:
Opções:
➢ - i : pergunta antes de remover, esta é ativada por padrão.
➢ - v : mostra os arquivos/diretórios na medida que são removidos
➢ - r : usado para remover arquivos em sub-diretórios. Esta opção também pode ser usada para
remover sub-diretórios.
➢ - f : remove os arquivos sem perguntar.
Exemplo:
$ rm arquivo.txt
$ rm -r teste2
Sintaxe:
$ cd <diretório>
Exemplo:
$ cd teste2
Sintaxe:
$ pwd
Exemplo:
$ pwd
/home/curso/teste2
Sintaxe:
$ clear
5.8.1 man
Este comando exibe as páginas de manual do comando ou programa passado como parâmetro. Elas
trazem uma descrição básica desta comando ou programa e detalhes sobre o funcionamento de
uma determinada opção. Uma página de manual é visualizada na forma de texto único com rolagem
vertical. Também documenta parâmetros usados em alguns arquivos de configuração.
Sintaxe:
Opções de navegação:
➢ q : sai da página de manual.
➢ f ou PageDown : rola 25 linhas abaixo
➢ w ou PageUp : rola 25 linhas acima
➢ k ou seta para cima : rola uma linha acima.
➢ e ou seta para baixo : rola uma linha abaixo.
➢ p ou g : Início da página.
➢ h : ajuda sobre as opções da página de manual.
➢ s : salva a página de manual em formato texto no arquivo especificado.
Exemplo:
$ man bash
5.8.2 apropos
Procura por comandos através da descrição. É útil quando precisamos fazer alguma coisa mas não
sabemos qual comando usar. Ele faz sua pesquisa nas páginas de manual existentes no sistema e
lista os comandos/programas que atendem a consulta.
Sintaxe:
Exemplo:
$ apropos bash
bash (1) - GNU Bourne-Again Shell
bash-builtins (7) - bash built-in commands, see bash(1)
bashbug (1) - report a bug in bash
builtins (7) - bash built-in commands, see bash(1)
checkbashisms (1) - check for bashisms in /bin/sh scripts
gst-complete-0.8 (1) - do bash completion for gst-launch command-lines
ispellconfig (8) - Bash script to select a new ispell default dictionary.
rbash (1) - restricted bash, see bash(1)
update-ispell-dictionary (8) - Bash script to select a new ispell default dictionary.
5.8.3 info
Opções Descrição
-d <nomedir> Adiciona um diretório à lista procura por arquivos
-f <arquivo> Especifica o diretório a ser utilizado pelo comando info.
-h Exibe uma mensagem de ajuda.
Exemplo:
$ info ls
<mostra toda a ajuda do comando ls>
Para sair do info, pressione <q>
5.8.4 whatis
Este comando consulta manuais on-line do sistema a partir de um banco de dados. Esse banco de
dados deve ser atualizado periodicamente pelo comando makewhatis (executado pelo root). Este
comando não possui páginas de manual. Para auxílio com ele, digite makewhatis -?.
Sintaxe:
whatis <palavra-chave>
Exemplo:
$whatis find
find (1) - search for files in a directory hierarchy
5.8.5 apropos
Exibe informações sobre um assunto a partir de uma base de dados. Esse comando se utiliza da
mesma base que o comando whatis. Ele apresenta todas os comandos que tenham relação com a
palavra-chave pesquisada.
sintaxe:
$apropos <palavra-chave>
Exemplo:
$ apropos find
5.8.6 Which
Sintaxe:
$ which <comando>
Exemplo:
$ which clear
/usr/bin/clear
Além dos comandos man, apropos, info, whatis e which, você pode conseguir mais informações
sobre os comandos ou programas através do comando help. Outra maneira de conseguir
informações mais rápidas sobre os parâmetros que o comando suporta é utilizando o parâmetro –-
help.
Exemplo:
$ mkdir --help
Usage: mkdir [OPTION] DIRECTORY...
Create the DIRECTORY(ies), if they do not already exist.
Argumentos obrigatórios para opções longas também o são para opções curtas
-m, --mode=MODE set permission mode (as in chmod), not rwxrwxrwx - umask
-p, --parents no error if existing, make parent directories as needed
-v, --verbose print a message for each created directory
--help display this help and exit
--version output version information and exit
➢ Não-interativa : São usados arquivos de comandos criados pelo usuário (scripts) para o
computador executar os comandos na ordem encontrada no arquivo. Neste modo, o
computador executa os comandos do arquivos um a um e dependendo do término do
comando, o script pode checar qual será o próximo comando que será executado e dar
continuidade ao processamento.
$ ls tes<TAB>
O bash localizará todos os arquivos que iniciam com “tes” e completará o restante do nome. Caso a
complementação de nomes encontre mais do que uma expressão que satisfaça a pesquisa, ou
Se você apertar novamente a tecla TAB imediatamente após o beep, o interpretador de comandos
irá listar as diversas possibilidades que satisfazem a pesquisa, para que você possa escolher o que
lhe interessa. A complementação de nomes funciona sem problemas para comandos internos.
Aviso de comando (prompt), é a linha mostrada na tela para digitação de comandos que serão
passados ao interpretador de comandos para a sua execução. A posição onde o comando será
digitado é marcado por um traço piscante chamado cursor.
Tanto em shell texto como em gráficos é necessário o uso do cursor para sabermos onde iniciar a
digitação de textos e nos orientarmos quanto a posição na tela.
O aviso de comando do usuário root é identificado pela caractere “#” (tralha, cerquilha), e o aviso
de comando de usuários é identificado pelo caractere “$”. Isto é padrão em sistemas Unix®.
Coringas (ou referência global) é um recurso usado para especificar ou potencializar pesquisas
feitas para um ou mais arquivos ou diretórios do sistema de uma só vez. Este é um recurso
permite que você faça a filtragem do que será listado, copiado, apagado, etc. São usados 4 tipos
de coringas no GNU/Linux:
Exemplo:
$ ls /home/curso/teste/*.txt
teste10.txt teste1.txt teste3.txt teste5.txt testeA.txt testeC.txt testeE.txt teste11.txt
teste2.txt teste4.txt teste6.txt testeB.txt testeD.txt testeF.txt
Lista todos os arquivos que tiverem a extensão .txt no diretório /home/curso/teste.
$ ls teste*
teste10.txt teste1.txt teste3.txt teste5.txt testeA.txt testeC.txt testeE.txt teste11.txt
teste2.txt teste4.txt teste6.txt testeB.txt testeD.txt
Lista todos os arquivos que tiverem o prefixo teste.
$ ls teste*txt
teste10.txt teste1.txt teste3.txt teste5.txt testeA.txt testeC.txt testeE.txt teste11.txt
teste2.txt teste4.txt teste6.txt testeB.txt testeD.txt
Lista todos os arquivos que tiverem o prefixo teste e terminarem com a string txt.
$ ls *5*
teste5.txt
Lista todos os arquivos que tiverem string 5.
Exemplo:
$ ls teste?.txt
teste1.txt teste3.txt teste5.txt testeA.txt testeC.txt testeE.txt teste2.txt teste4.txt
teste6.txt testeB.txt testeD.txt testeF.txt
Lista todos os arquivos que tiverem um único caracter depois da string teste, e que tiverem a
extensão .txt.
$ ls teste??.txt
teste10.txt teste11.txt
Lista todos os arquivos que tiverem dois caracteres depois da string teste, e que tiverem a
extensão .txt.
$ ls /bin/??
/bin/cp /bin/dd /bin/df /bin/ed /bin/ln /bin/ls /bin/mt /bin/mv /bin/ps /bin/rm /bin/sh
/bin/su
Lista todos os arquivos que tiverem nome com apenas dois caracteres no diretório /bin.
$ ls /etc/???.conf
/etc/fam.conf /etc/ntp.conf /etc/pam.conf /etc/ucf.conf /etc/vnc.conf
/etc/xmp.conf
Lista todos os arquivos que tiverem nome com três caracteres e a extensão .conf no diretório
/etc.
➢ [ ] - O coringa "[...]" define um padrão que casa com o conjunto de caracteres entre "[" e "]".
O conjunto ainda pode conter intervalos de caracteres, como por exemplo "1-2" ou "a-z" e
também caracteres que não podem fazer parte do conjunto, indicados por "^" ou "!".
Exemplo:
$ ls teste[0-9].txt
teste1.txt teste2.txt teste3.txt teste4.txt teste5.txt teste6.txt
Lista todos os arquivos que tiverem o intervalo de número de 0 até 9 entre o prefixo teste, com a
extensão .txt.
$ ls teste[5-9].txt
teste5.txt teste6.txt
Lista todos os arquivos que tiverem o intervalo de número de 5 até 9 entre o prefixo teste, com a
extensão .txt.
$ ls teste[0-9].txt
teste1.txt teste2.txt teste3.txt teste4.txt teste5.txt teste6.txt
Lista todos os arquivos que tiverem o intervalo de número de 0 até 9 entre o prefixo teste, com a
extensão .txt.
$ ls teste[A-Z].txt
testeA.txt testeB.txt testeC.txt testeD.txt testeE.txt testeF.txt
Lista todos os arquivos que tiverem o intervalo de A até Z entre o prefixo teste, com a extensão
.txt.
$ ls teste[B-D].txt
testeB.txt testeC.txt testeD.txt
Lista todos os arquivos que tiverem o intervalo de B até D entre o prefixo teste, com a extensão
.txt.
$ ls [a-z][0-9]*
t1.txt t2.txt t3.txt
Lista todos os arquivos que tiverem em seu nome na primeira posição um caracter no intervalo de a
à z, e na segunda posição um número no intervalo de 0 à 9, com qualquer sufixo ou extensão.
$ ls t[a-d,0-9]*
t1.txt t2.txt t3.txt ta1.txt ta2.txt
Lista todos os arquivos que tiverem o prefixo t, seguido por um caracter no intervalo de a à d, ou
um número no intervalo de 0 à 9, com qualquer sufixo ou extensão.
$ ls teste[0-9][^0-9]*
teste1.txt teste2.txt teste3.txt teste4.txt teste5.txt teste6.txt
Lista todos os arquivos que tiverem o prefixo teste, seguido por um número no intervalo de 0 à 9,
e que não contenham um outro número na seqüência, com qualquer extensão. o caracter ^ significa
negação.
➢ { } - O coringa "{...}" define um padrão que casa com o conjunto de caracteres entre "{" e "}",
separados por vírgula.
Exemplo:
$ ls teste{[0-9],[A-Z]}.txt
teste1.txt teste3.txt teste5.txt testeA.txt testeC.txt testeE.txt teste2.txt teste4.txt
teste6.txt testeB.txt testeD.txt testeF.txt
Lista todos os arquivos que tiverem o prefixo teste, seguido por um conjunto composto por um
número no intervalo de 0 à 9, ou, caracteres no intervalo de A à Z, e. que contenham a extensão
.txt.
$ ls teste*.{txt,log}
teste10.txt teste1.log teste2.log teste3.log teste4.txt teste6.txt testeB.txt testeD.txt
testeF.txt teste11.txt teste1.txt teste2.txt teste3.txt teste5.txt testeA.txt testeC.txt
testeE.txt teste.log
Lista todos os arquivos que tiverem o prefixo teste, seguido por qualquer conjunto de caracteres,
e que contenham as extensões .txt ou .log.
5.9.3. Direcionadores
Uma boa parte dos programas executados no terminal possuem alguma saída. Essas saídas são
enviadas por padrão para o terminal, sendo impressas na tela. Assim, consideremos o exemplo
abaixo:
$ ls teste[0-9].txt
teste1.txt teste2.txt teste3.txt teste4.txt teste5.txt teste6.txt
➢ entrada: ls teste[0-9].txt
➢ saída: teste1.txt teste2.txt teste3.txt teste4.txt teste5.txt teste6.txt
Sendo que a entrada foi enviada pelo teclado (stdin) e a saída foi enviada para o terminal, que é a
saída padrão (stdout), o que fazer se o usuário quiser gravar a saída do comando ls em um arquivo
de texto, por exemplo?
Para isso existem os direcionadores de fluxo, de grande utilidade no GNU/Linux e essenciais para
a realização de diversas tarefas de manutenção do sistema.
Direcionadores de fluxo fazem o que o nome sugere: direcionam o fluxo da saída dos programas,
enviando-as para locais diferentes da saída padrão. Esses locais podem ser arquivos, dispositivos,
processos e outros programas. O direcionadores utilizados no GNU/Linux são:
➢ O Direcionador > : O direcionador > direciona a saída padrão de um comando para um arquivo.
Caso o arquivo exista, o seu conteúdo é substituído.
$ ls teste[0-9].txt
teste1.txt teste2.txt teste3.txt teste4.txt teste5.txt teste6.txt
Para gravar essa lista em um arquivo chamado ls_out, utiliza-se o direcionador, da seguinte forma:
Agora, nada é impresso no terminal. Por que? Porque a saída foi direcionada para o arquivo ls_out.
Veja o conteúdo desse arquivo com o comando cat, que concatena e envia arquivos para a saída
padrão:
$ cat ls_out
teste1.txt
teste2.txt
teste3.txt
teste4.txt
teste5.txt
teste6.txt
➢ O Direcionador 2> : Uma restrição ao uso do direcionador > é que ele não funciona para
mensagens de erro (stderr). No exemplo abaixo, usa-se o comando ls, e como parâmetro, um
diretório que não existe:
Observe que mesmo usando o direcionador >, a mensagem de erro foi exibida. Se o usuário
visualizar o conteúdo do arquivo ls_out, verá que nada foi gravado. Para gravar as mensagens de
erro, deve-se usar o direcionador 2>:
Agora sim, nenhuma mensagem de erro foi exibida na tela, porque ela foi enviada para o arquivo
ls_out, como pode-se verificar:
$ cat ls_out
ls: dir_fantasma: Arquivo ou diretório não encontrado
➢ O Direcionador &> : Podemos usar os direcionadores > e 2> em conjunto, para gerar um arquivo
com a saída padrão e outro com a saída de erros, dessa forma:
O comando acima pede para listar todos os arquivos que contenham o nome teste, seguido por um
intervalo de 0 à 9, com a extensão .txt, e o conteúdo do diretório dir_fantasma. Ao ver o
conteúdo dos arquivos ls_out e ls_error, têm-se:
$ cat ls_out
teste1.txt
teste2.txt
teste3.txt
teste4.txt
teste5.txt
teste6.txt
$ cat ls_error
ls: dir_fantasma: Arquivo ou diretório não encontrado
Mas, e se for necessário gravar todas as mensagens em um arquivo apenas? Para isso existe o
direcionador &>, que direciona tanto as mensagens padrão quanto as mensagens de erro para um
arquivo. Repetindo o teste anterior:
$ cat ls_out
ls: dir_fantasma: Arquivo ou diretório não encontrado
teste1.txt
teste2.txt
teste3.txt
teste4.txt
teste5.txt
teste6.txt
Você pode usar o comando acima para enviar o conteúdo do arquivo ls_out ao comando cat, que
mostrará seu conteúdo. É claro que o mesmo resultado pode ser obtido com cat teste.txt, mas
este exemplo serviu para mostrar a funcionalidade do <.
➢ O Direcionador << : O direcionador << é utilizado para marcar o fim de exibição de um bloco.
Um dos usos mais freqüentes desse direcionador é em conjunto com o comando cat. O comando
abaixo termina o comando cat quando for digitada a palavra "fim".
Como visto, a palavra "fim" foi usada para determinar o fim do comando cat. Perceba que a linha
onde digitamos "fim" não é exibida na saída do comando cat, logo abaixo.
O Direcionador | (pipe) : O direcionador | , também conhecido como pipe (duto, cano), é utilizado
para direcionar a saída de um comando para outro comando, e utilizado todo o tempo para a
realização de todo tipo de tarefas e procedimentos.
Um dos usos mais comuns do | é com os comandos ls e more, para ver o conteúdo de um diretório,
quando este não cabe na tela, como o diretório /usr/bin, por exemplo. Para que se possa ver todos
os arquivos, direciona-se a saída do ls para o more, que faz a paginação do conteúdo:
$ ls /usr/bin | more
411toppm
822-date
a2p
aaxine
abcde
abiword
AbiWord-2.2
--Mais--
Agora, basta pressionar Enter para rolar a lista, de forma que podemos ver todos os arquivos.
Pode utilizar o pipe para contar o número de linhas de um arquivo, em conjunto com os comandos
cat e wc:
O comando wc é utilizado para contar número de linhas, palavras e bytes do fluxo, que neste caso,
é um arquivo texto. Um outro exemplo é em conjunto com o gerenciador de pacotes apt, e com o
comando grep, que é utilizado para selecionar linhas que contém uma determinada expressão.
5.9.4 Alias
Permite criar um apelido a um comando ou programa. Por exemplo, se você quiser otimizar o nome
do comando ls -lh para ver uma listagem longa e com todos os atributos dos arquivos, você pode
usar o comando alias para facilitar as coisas digitando:
Todos os comandos executados em uma sessão são memorizados pelo shell, e podem ser
consultados e re-executados quando desejado. Para consultar o histórico basta executar o
comando history.
Os comandos que são digitados são armazenados dentro do arquivo .bash_history que está em seu
diretório de trabalho. Os comandos de uso do histórico começam sempre pelo sinal "!" . Vejamos
os mais comuns:
5.9.6 tee
Envia o resultado do programa para a saída padrão (tela) e para um arquivo ao mesmo tempo. Este
comando deve ser usado com o pipe "|".
Sintaxe:
Opções:
• - a : acrescenta ao arquivo passo ao invés de sobrescrevê-lo.
Exemplo:
5.9.7 grep
Sintaxe:
Opções:
• - A [número] : Mostra o [número] de linhas após a linha encontrada.
• - B [número] : Mostra o [número] de linhas antes a linha encontrada.
• - n : Mostra o número cada de linhas encontrada.
• - i : Ignora diferenças entre minúsculas e maiúsculas.
Exemplo:
O grep faz sua pesquisa em arquivos texto. Use o comando zgrep para pesquisar diretamente em
arquivos compactados com gzip, os comandos e opções são as mesmas.
5.9.8 cat
Concatena arquivos e imprime na saída padrão (exibe na tela). Em arquivos, usa-se o cat para listar
seu conteúdo na tela. Com o uso de direcionadores, podemos usá-lo para unir diferentes arquivos
em um só, dentre outra funções.
Sintaxe:
Opções:
• - b : Numera as linhas, com exceção das linhas em branco.
• - E : Mostra um $ para indicar fim de linha.
• - n : Numera todas as linhas, incluindo as em branco .
• - s : Não mostra mais do que uma linha em branco. Se houver duas ou mais linhas
em branco consecutivas, elas são truncadas e apenas uma é mostrada.
• - T : Substitui tabulações pelos caracteres ^I.
• - v : Substitui os caracteres não imprimíveis por símbolos, exceto tabulações e final
de linha.
Exemplo:
$ cat lista.txt
-rw-r--r-- 1 fabio fabio 0 2005-06-14 15:35 testeB.txt
-rw-r--r-- 1 fabio fabio 0 2005-06-14 15:35 testeC.txt
-rw-r--r-- 1 fabio fabio 0 2005-06-14 15:35 testeD.txt
-rw-r--r-- 1 fabio fabio 0 2005-06-14 15:35 testeE.txt
Exibe todas as linhas do arquivo lista.txt, este é o exemplo mais simples da utilização deste
comando.
O comando cat também trabalha na junção de conteúdos de arquivos binários. Por exemplo, se
você quiser concatenar duas músicas sem precisar.
O comando cat trabalha com arquivos texto. Use o comando zcat para ver diretamente arquivos
compactados com gzip.
5.9.9 tac
Faz o mesmo que o cat, mas exibe o arquivo pela ordem inversa, ou seja, começando pela última
linha e terminando com a primeira.
Sintaxe:
$ tac <arquivo>
Exemplo:
$ tac lista_lognew
-rw-r--r-- 1 fabio fabio 0 2005-06-15 14:02 teste5.log
-rw-r--r-- 1 fabio fabio 0 2005-06-15 14:02 teste4.log
-rw-r--r-- 1 fabio fabio 0 2005-06-15 14:02 teste3.log
-rw-r--r-- 1 fabio fabio 0 2005-06-15 14:02 teste2.log
-rw-r--r-- 1 fabio fabio 0 2005-06-15 14:02 teste1.log
-rw-r--r-- 1 fabio fabio 0 2005-06-15 14:03 teste5.new
-rw-r--r-- 1 fabio fabio 0 2005-06-15 14:03 teste4.new
-rw-r--r-- 1 fabio fabio 0 2005-06-15 14:03 teste3.new
-rw-r--r-- 1 fabio fabio 0 2005-06-15 14:03 teste2.new
-rw-r--r-- 1 fabio fabio 0 2005-06-15 14:03 teste1.new
Exibe todas as linhas do arquivo lista.txt, este é o exemplo mais simples da utilização deste
comando.
5.9.10 wc
Conta o número de linhas, palavras, caracteres e bytes nos arquivos. Se as opções forem omitidas,
o wc mostra a quantidade de linhas, palavras, e bytes.
Sintaxe:
$ wc <opções> <arquivo>
Opções:
Exemplo:
$ wc lista_lognew
10 80 560 lista_lognew
Se as opções forem omitidas, o wc mostra a quantidade de linhas, palavras, e bytes.
$ wc -w lista_lognew
80 lista_lognew
Exibe apenas o número de palavras.
Procura por arquivos/diretórios no disco. O find pode procurar arquivos através de sua data de
modificação, tamanho, etc, através do uso de opções.
Sintaxe:
Opções:
• -name : Procura arquivos cujo nome coincida com a expressão digitada.
• -type [tipo]: Procura por arquivos que sejam de um tipo específico.
• b : Dispositivos de bloco.
• c : Dispositivos de caractere.
• d : Diretório.
• p : Duto nomeado (FIFO).
• f : Arquivo regular.
• l : Link simbólico.
• s : Socket.
Exemplo:
$ find teste[A-Z].txt
testeA.txt
testeB.txt
testeC.txt
Utilizado desta maneira, sem informar um diretório para pesquisa, faz uma busca dentro diretório
atual.
5.9.12 more
Permite fazer a paginação de arquivos ou da entrada padrão. O comando more pode ser usado
como comando para leitura de arquivos que ocupem mais de uma tela. Quando toda a tela é
ocupada, ele efetua uma pausa e permite que você pressione <ENTER> ou <espaço> para continuar
avançando no arquivo sendo visualizado. Para sair do more pressione <q>.
Sintaxe:
$ more <arquivo>
Exemplo:
$ more /etc/adduser.conf
# /etc/adduser.conf: `adduser' configuration.
# See adduser(8) and adduser.conf(5) for full documentation.
# The DSHELL variable specifies the default login shell on your
# System
DSHELL=/bin/bash
# The DHOME variable specifies the directory containing users' home
# directories.
DHOME=/home
# If GROUPHOMES is "yes", then the home directories will be created as
# /home/groupname/user.
GROUPHOMES=no
# If LETTERHOMES is "yes", then the created home directories will have
# an extra directory - the first letter of the user name. For example:
# /home/u/user.
LETTERHOMES=no
--Mais--(55%)
Faz a paginação do arquivo /etc/adduser.conf.
$ ls -lh | more
total 24K
-rw-r--r-- 1 fabio fabio 560 2005-06-15 14:10 lista_lognew
-rw-r--r-- 1 root root 2,1K 2005-06-17 12:34 lista_pag
-rw-r--r-- 1 fabio fabio 968 2005-06-15 11:34 lista.txt
-rw-r--r-- 1 fabio fabio 280 2005-06-15 14:03 ls_log
-rw-r--r-- 1 fabio fabio 280 2005-06-15 14:03 ls_new
-rw-r--r-- 1 fabio fabio 0 2005-06-14 15:34 teste10.txt
-rw-r--r-- 1 fabio fabio 0 2005-06-14 15:34 teste11.txt
-rw-r--r-- 1 fabio fabio 0 2005-06-15 14:02 teste1.log
-rw-r--r-- 1 fabio fabio 0 2005-06-15 14:03 teste1.new
-rw-r--r-- 1 fabio fabio 0 2005-06-14 15:34 teste1.txt
--Mais--
Faz a paginação da saída do comando ls.
Para visualizar diretamente arquivos texto compactados pelo utilitário gzip (arquivos
.gz), use o comando zmore.
5.9.13 less
Permite fazer a paginação de arquivos ou da entrada padrão. Ele pode ser usado como comando
para leitura de arquivos que ocupem mais de uma tela. Quando toda a tela é ocupada, o less efetua
uma pausa (semelhante ao more) e permite que você pressione <seta para cima> e <seta para baixo>
ou <PgUP>/<PgDown> para fazer o rolamento da página. Para sair do less pressione <q>.
Sintaxe:
$ less <arquivo>
Exemplo:
$ less /etc/adduser.conf
# /etc/adduser.conf: `adduser' configuration.
# See adduser(8) and adduser.conf(5) for full documentation.
# The DSHELL variable specifies the default login shell on your
# System
DSHELL=/bin/bash
# The DHOME variable specifies the directory containing users' home
# directories.
DHOME=/home
# If GROUPHOMES is "yes", then the home directories will be created as
# /home/groupname/user.
GROUPHOMES=no
# If LETTERHOMES is "yes", then the created home directories will have
# an extra directory - the first letter of the user name. For example:
# /home/u/user.
LETTERHOMES=no
:
Faz a paginação do arquivo /etc/adduser.conf.
$ ls -lh | less
total 24K
-rw-r--r-- 1 fabio fabio 560 2005-06-15 14:10 lista_lognew
-rw-r--r-- 1 root root 2,1K 2005-06-17 12:34 lista_pag
-rw-r--r-- 1 fabio fabio 968 2005-06-15 11:34 lista.txt
-rw-r--r-- 1 fabio fabio 280 2005-06-15 14:03 ls_log
-rw-r--r-- 1 fabio fabio 280 2005-06-15 14:03 ls_new
-rw-r--r-- 1 fabio fabio 0 2005-06-14 15:34 teste10.txt
-rw-r--r-- 1 fabio fabio 0 2005-06-14 15:34 teste11.txt
-rw-r--r-- 1 fabio fabio 0 2005-06-15 14:02 teste1.log
-rw-r--r-- 1 fabio fabio 0 2005-06-15 14:03 teste1.new
-rw-r--r-- 1 fabio fabio 0 2005-06-14 15:34 teste1.txt
:
Faz a paginação da saída do comando ls.
Para visualizar diretamente arquivos texto compactados pelo utilitário gzip (arquivos
.gz), use o comando zless.
5.9.14 touch
Muda a data e hora que um arquivo foi criado. Também pode ser usado para criar arquivos vazios.
Caso o touch seja usado com arquivos que não existam, por padrão ele criará estes arquivos.
Sintaxe:
$ touch <opções> <arquivo>
Opções:
• -a : Modifica apenas a data do última acesso.
• -c: Não cria arquivos, caso eles não existam.
• -m : Modifica apenas a data de modificação.
• -t : Usa Minutos (MM), Dias (DD), Horas (hh), minutos (mm) e opcionalmente o ANO e
segundos para modificação do(s) arquivo(s) ao invés da data e hora atual.
Exemplo:
$ ls -lh teste1.txt
-rw-r--r-- 1 fabio fabio 0 2005-06-14 15:34 teste1.txt
$ touch teste1.txt
$ ls -lh teste1.txt
-rw-r--r-- 1 fabio fabio 0 2005-06-20 14:16 teste1.txt
Supondo que o arquivo teste1.txt tenha como última modificação, a data 14/06/2005 às 15:34.
utilizando o comando touch sem nenhum parâmetro, o arquivo automaticamente fica com a data
atual, como sendo a sua data de última modificação.
$ ls -lh teste1.txt
-rw-r--r-- 1 fabio fabio 0 2003-02-11 10:30 teste1.txt
Neste exemplo, utiliza-se a opção -t para o comando touch gravar uma data específica no arquivo.
No exemplo acima, o arquivo teste1.txt terá como data de última modificação, a data 15/04/2004
às 14:30.
5.9.15 ln
Sintaxe:
Opções:
• -s : Cria um link simbólico. Usado para criar ligações com o arquivo/diretório de
destino.
$ ln -s teste1.txt teste1.documento
$ ls -lh teste1*
-rw-r--r-- 1 fabio fabio 0 2005-06-14 15:34 teste10.txt
-rw-r--r-- 1 fabio fabio 0 2005-06-14 15:34 teste11.txt
lrwxrwxrwx 1 fabio fabio 10 2005-06-20 16:30 teste1.documento -> teste1.txt
-rw-r--r-- 1 fabio fabio 0 2005-06-15 14:02 teste1.log
-rw-r--r-- 1 fabio fabio 0 2005-06-15 14:03 teste1.new
-rw-r--r-- 1 fabio fabio 0 2004-04-15 14:30 teste1.txt
Neste exemplo, foi criado um link simbólico para o arquivo teste1.txt com o nome de
teste1.documento.
$ ln -s -v teste1.txt teste1.documento
criar link simbólico `teste1.docs' to `teste1.txt'
$ ls -lh teste1*
-rw-r--r-- 1 fabio fabio 0 2005-06-14 15:34 teste10.txt
-rw-r--r-- 1 fabio fabio 0 2005-06-14 15:34 teste11.txt
lrwxrwxrwx 1 fabio fabio 10 2005-06-20 17:00 teste1.docs -> teste1.txt
lrwxrwxrwx 1 fabio fabio 10 2005-06-20 16:30 teste1.documento -> teste1.txt
-rw-r--r-- 1 fabio fabio 0 2005-06-15 14:02 teste1.log
Neste exemplo, foi criado um link simbólico para o arquivo teste1.txt com o nome de teste1.docs,
exemplificando a saída com a opção -v.
$ ln /etc/passwd
$ ln /etc/passwd passwd_curso
$ ls -lh pass*
-rw-r--r-- 3 root root 1,2K 2005-06-17 11:31 passwd
-rw-r--r-- 3 root root 1,2K 2005-06-17 11:31 passwd_curso
Neste exemplo, foram criados dois links absolutos, um para o arquivo /etc/passwd no diretório
atual com mesmo nome, e outro com o nome de passwd_curso, mas os dois referenciam o mesmo
arquivo.
Em seu primeiro login no sistema GNU/Linux, será criado o arquivo .bashrc dentro de seu
diretório home e caso deseje então customizar seu ambiente, basta editar diretamente este
arquivo.
Sintaxe:
# alias <seu_comando>=<'comando do Shell'>
Exemplo:
#alias cls='clear --> Comando para limpar a tela do terminal
# alias learq=”ls -l | grep '^-' | more” --> Comando para listar somente arquivos
# alias ledir=”ls -l | grep '^d' | more” --> Comando para listar somente diretórios
Para remover um alias, basta digitar o comando # unalias <nome_alias> que o Shell irá removê-lo
da lista de alias.
No Shell bash, a variável de ambiente PS1 (prompt string 1) representa o seu estilo de prompt.
Você pode personalizar o seu prompt, conforme os exemplos abaixo:
Detalhe importante:
Com as definições acima, o prompt fica dinâmico, ou seja, se você navegar pela estrutura de
diretórios do sistema, automaticamente seu prompt irá lhe mostrar onde você está posicionado.
O comando export possui a finalidade de exportar a variável PS1 para todos os processos filhos
criados pelo seu Shell. Com isso, se novos programas ou scripts forem iniciados a partir de seu
Shell atual, eles terão a visibilidade desta variável de ambiente.
O seu ambiente Shell possui configurado várias variáveis de ambiente. Estas variáveis são
definidas por pacotes do sistema e/ou aplicativos que necessitam delas para que funcionem
corretamente.
Para visualizar as variáveis que estão definidas em seu ambiente de execução Shell, execute o
comando:
# set | more
Resultado:
BASH=/bin/bash
BASH_COMPLETION=/etc/bash_completion
BASH_COMPLETION_DIR=/etc/bash_completion.d
BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release" [5]="i386-pc-linux-gnu")
BASH_VERSION='2.05b.0(1)-release'
COLORTERM=gnome-terminal
COLUMNS=125
DESKTOP_SESSION=default
DIRSTACK=()
DISPLAY=:0.0
EUID=0
GDMSESSION=default
GDM_XSERVER_LOCATION=local
GNOME_DESKTOP_SESSION_ID=Default
GNOME_KEYRING_SOCKET=/tmp/keyring-kWU8q4/socket
GROUPS=()
GTK_RC_FILES=/etc/gtk/gtkrc:/root/.gtkrc-1.2-gnome2
HISTFILE=/root/.bash_history
HISTFILESIZE=500
HISTSIZE=500
HOME=/root
HOSTNAME=sc7448nb100
HOSTTYPE=i386
IFS=$' \t\n'
LANG=pt_BR
LANGUAGE=pt_BR:pt:pt_PT
LINES=39
LOGNAME=root
...
É possível também ver as variáveis de ambiente através do comando env:
Dentro do sistema de Shell e, especificamente no Shell bash, alguns arquivos são responsáveis por
definir uma ambiente de execução mínimo para os usuários. Os mais importantes são:
/etc/profile --> Define variáveis globais, para todos os usuários. É executado no login.
/etc/bashrc --> Define os aliases para todos os usuários. É executado no login.
/home/usuário/.bash_profile --> Define as variáveis de ambiente para o usuário. Este arquivo é
executado no momento de login.
/home/usuário/.bashrc --> Define os aliases para o usuário. É executado no momento de login.
/home/usuario/.bash_logout --> Executa os comandos que estiverem neste arquivo, no processo
de logout do usuário.
/home/usuario/.bash_history --> Contém os últimos comandos digitados pelo usuário. Veja o
comando history.
/etc/issue --> Contém mensagem inicial aos usuários no momento de proceder o
login no sistema.
/etc/issue.net --> Contém mensagem inicial aos usuários no momento de proceder o login no
sistema via rede.
/etc/motd --> Contém mensagem que será apresentada ao usuário, após o processo de login no
sistema. Geralmente uma mensagem de boas-vindas.
6 EMPACOTADORES E COMPACTADORES
Neste sentido, na seqüência serão abordados os comandos tar, gzip, bzip e bzip2, os quais
realizam, trabalhando em conjunto, o empacotamento e a compressão de arquivos.
Sintaxe:
tar [opções] <arquivos_ou_diretórios>
Opções disponíveis:
Parâmetro Descrição
-c Cria um novo pacote tar e agrega e ele os arquivos especificados.
-x Extrai os arquivos de dentro de um pacote tar (tarball).
-f Indica que o destino dos arquivos é para um arquivo em disco ou device,
como uma unidade de fita magnética (dat, dlt, ait, etc).
-t Lista o conteúdo de um arquivo tar.
-v Exibe o nome de cada arquivo processado, é o modo verbose.
-Z Compacta ou Descompacta utilizando o comando compress.
-z Compacta ou Descompacta utilizando o comando gzip.
-j Compacta ou Descompacta utilizando o comando bzip2.
-C <dir> Descompacta os arquivos em dir.
-M Multi-volume, mas não pode ser utilizado para compressão ou
descompressão de arquivos.
-b <n> Define o tamanho do bloco de dados a ser utilizado pela tar, no
formato n*512 bytes. Default n=20.
Exemplos:
# cd /tmp
# tar -cvzf etc_conf.tar.gz /etc/*.conf
Empacota e comprime com bzip os arquivos *.conf do diretório /etc, criando o arquivo
etc_conf.tar.gz
Empacota e comprime com bzip2 os arquivos *.conf do diretório /etc, criando o arquivo
etc_conf.tar.bz2. Compare o tamanho deste arquivo com o do exemplo anterior, para verificar a
compressão do programa bzip2.
Empacota e comprime com bzip2 todos os arquivos dos diretórios /home, /sistemas e /backup,
gravando o pacote diretamente para a fita que está em /dev/st0. Será gravado um log do backup
em /var/log/bkp.log e um log de erros em /var/log/bkp_erro.log.
Lista o conteúdo do pacote /tmp/etc_conf.tar.bz2. Observe que o caminho absoluto dos arquivos
também foi gravado no pacote tar.bz2.
Importante:
Note que o comando tar por default, retira a “/” de todos os arquivos que está inserindo no
pacote. Este procedimento serve para que você ao restaurar o arquivo, ele sempre fique abaixo do
diretório de execução do programa, exceto se você utilizar o parâmetro -C <dir>, conforme os
exemplos aplicados.
Dica!
É possível visualizar um arquivo comprimido, sem no entanto descompactá-lo diretamente. Este
procedimento pode ser feito pelos programas:
zcat Igual ao comando cat, porém para arquivos comprimidos com gzip ou compress.
zless Igual ao comando less, porém para arquivos comprimidos com gzip ou compress.
zmore Igual ao comando more, porém para arquivos comprimidos com gzip ou compress.
bz2cat Igual ao comando cat, porém para arquivos comprimidos com o bzip2.
Para aqueles que desejam se aprofundar na programação em Shell Script é recomendável a leitura
do livro: Programação Shell Script, do Júlio Neves, da Editora Brasport Livros e Multimídia Ltda.
Entretanto, as informações que serão apresentadas, liberam grandes possibilidades de
programação no ambiente Shell bash, onde as principais estruturas de controle e comandos
adicionais, serão apresentadas.
É importante também que o leitor procure conhecer mais sobre as expressões regulares. Estas
expressões são muito utilizadas e aceitas por diversos comandos do ambiente Shell,
principalmente pelos comandos Sed, Awk, grep, dentre outros.
Shell scripts nada mais são que arquivos que contém uma seqüência de comandos para execução
seqüencial pelo Shell. Como o tipo de interpretador de comandos que iremos descrever será o
bash, a primeira linha de um arquivo de Shell script deverá conter a seguinte seqüência:
#!/bin/bash
Os arquivos do tipo Shell scripts precisam também possuir a permissão de execução, no mínimo
para o usuário dono do arquivo. Esta permissão pode ser concedida pelo comando abaixo:
Nunca é demais lembrar que, para o Shell ao executar o seu arquivo de Shell script, ele precisa
estar contido dentro dos diretórios da variável PATH, caso contrário você terá que informar o
caminho completo até o arquivo. Se estiver posicionado no mesmo diretório onde reside seu Shell
script para sua execução basta informar #./<arquivo_shell_script>.
Os caracteres ' (aspas simples), “ (aspas duplas) e \ (contra-barra) são utilizados para a função
Regras básicas:
➢ Qualquer string entre aspas simples ( ' ) é considerada literalmente, mas não é
permitido a substituição de parâmetros;
➢ Qualquer string entre aspas duplas ( “ ) é considerada literalmente e a substituição de
parâmetros é permitida;
➢ Qualquer caracter depois da contra-barra ( \ ) é considerado literalmente. Ele protege
o caracter seguinte;
➢ Nunca confundir aspas simples ( ' ) com a crase ( ` ).
Exemplos:
# echo $PATH
/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/X11
# echo '$PATH'
$PATH
A forma de execução de comandos no bash também possui suas características. Vejamos abaixo as
seguintes formas de executar comandos:
;\ Executa múltiplos comandos e linhas separadas. O caracter especial “\” permite que
se adicione comandos em várias linhas.
Exemplo:
# cd /var/log ;\
ls -lrt ;\
tail -f auth.log
Exemplo:
# >mount -a &
[1] 8503 --> Número do processo que foi gerado em background
[1] Done mount -a --> Informa que o processo em background com Id [1] encerrou.
Exemplo:
# cd /etc ; ls -la --> Vai para o diretório /etc e executa o comando ls -la.
# echo Ola $USER, hoje é `date` ; echo Veja o calendário abaixo: ; cal
comando1 `comando2` --> Substituição de comandos. Esta sintaxe utiliza a saída do comando2
como entrada de parâmetros para comando1
Exemplo:
Exemplo:
#ls -l /etc/*.conf | wc -l
Este comando informa o número de arquivos com a extensão .conf no diretório /etc.
Exemplo:
# df -h && du -hs /etc
Apresenta a utilização dos discos no sistema e o total de espaço utilizado pelo diretório
/etc.
Exemplo:
O comando cat password irá falhar, logo o segundo comando será executado.
7.4 Operadores
A implementação do Shell bash, libera algumas variáveis especiais que são pré-definidas quando
ele é iniciado, permitido grande flexibilidade na programação, inclusive a passagem de parâmetros.
Variáveis do Shell:
Sintaxe:
read [-ers] [-u fd] [-t timeout] [-p prompt] [-a array] [-n nchars] [-d delim] [name ...]
Onde:
-t <segundos> Timeout para a entrada de dados, em segundos;
-p <prompt> Prompt a ser apresentado na digitação dos dados;
-n <número_caract> Número de caracteres que serão lidos pelo comando;
-d <delimitador> Caractere delimitador. Read lê entrada até encontrar o delimitador;
name <nome_camp> Nome da variável que guardará os valores lidos pelo read.
Exemplo:
#!/bin/bash
#
echo -n "Entre com Nome e Sobrenome: "
read NOME SOBRENOME
echo "Olá $NOME ! seu Sobrenome é: $SOBRENOME"
Sintaxe:
let <expressão> --> Faz expressões aritméticas com números inteiros.
Exemplo:
#!/bin/bash
#
clear
echo -n "Entre com dois números inteiros: "
read A B
let C=0; let D=0
let C=A+B
let D=A*B
echo "A soma deles é: $C, seu produto é: $D"
Sintaxe:
test <expressão> ou
[ <expressão> ] --> Avalia a expressão e, se o valor for verdadeiro, retorna o código de saída
em $? igual a zero, senão retorna o código de saída diferente de zero. Veja também os
operadores utilizados pelo comando test.
Exemplos:
Verifica se ambos (AND) os daemon do samba são executáveis. Esta comparação toda é o
primeiro comando, executada com sucesso, logo o comando exit 0 não será executado.
O resultado do comando find é passado ao comando tar para criar um pacote de arquivos em
$STODEV (pode ser arquivo ou fita magnética), com compressão bzip2. O parâmetro -T-
informa ao tar para pegar os arquivos da entrada padrão, que é na verdade a saída do comando
find.
Tanto a saída padrão do tar, quanto sua saída de erros, irão gerar um log no diretório /var/log
indicando no nome do arquivo o ano, dia, mês, hora, minuto e segundo. Todo o comando será
executado em background e seu PID será armazenado na variável $TPID.
7.6.4 Comando if
Sintaxe:
if <expressão1>
then
lista de comandos 1
elif <expressão2>
then
lista de comandos 2
else
outros comandos
fi
Exemplo:
#!/bin/bash
#
if [ $# -ge 2 ]
then
echo $2
elif [ $# -eq 1 ]
then
echo $1
else
echo “Nenhum parâmetro!”
fi
Executa comandos da entrada do case na qual a variável valor é igual a um dos parâmetros
passados, onde são comparados como padrões, padrão1, padrão2, ...,. Se nenhum valor for
coincidente com os valores esperados, o case executará os comandos da entrada definida com o
padrão *.
Sintaxe:
case <valor> in
padrão1)
comandos 1;;
padrão2)
comandos 2;;
*)
outros
comandos;;
esac
Exemplos:
case "$1" in
start)
echo -n "Iniciando Samba daemons:"
echo -n " nmbd"
start-stop-daemon --start --quiet --exec /usr/sbin/nmbd -- -D;;
stop)
echo -n "Parando o Samba daemons: "
start-stop-daemon --stop --quiet --pidfile $NMBDPID;;
*)
echo "Uso: /etc/init.d/samba {start|stop|reload|restart|force-reload}"
exit 1
;;
esac
Executa uma interação do laço de controle para cada elemento da “lista_de_valores”. A cada
iteração, “variável” assume o valor de um elemento de “lista_de_valores”.
Sintaxe:
for <variável> in <lista_de_valores>
do
lista de comandos
done
Exemplos:
#!/bin/bash
#
clear
for i in 1 2 3 4 5
do
echo "Valor de i=$i"
done
Este comando executa os comandos dentro do laço enquanto a <expressão> for verdadeira.
Sintaxe:
while <expressão>
do
lista de comandos
done
Exemplo:
#!/bin/bash
#
clear
let cont=0
while [ $# -gt 0 ]
do
echo "Parâmetros passados = $1"
shift
let cont=cont+1
done
if [ $cont -eq 0 ]
then
echo "você não digitou parâmetros..."
exit 1
else
echo "você digitou $cont parâmetros."
fi
exit
Tecnicamente não há limitação no número de parâmetros a serem passados, via linha de comandos,
para os Shell scripts. Entretanto, somente conseguimos ler diretamente as variáveis de $1 até $9.
Não existe a variável $10.
Para resolver este pequeno problema há o comando shift, o qual faz o deslocamento de todos os
parâmetros em $*, para a esquerda em n posições e decrementa a variável $# em n. O valor
default para n é 1.
Sintaxe:
Exemplo:
#!/bin/bash
#
clear
args=$*
echo "Foram passados $# parâmetros"
echo "Eles foram: $*"
shift 2
echo "Agora existem $# parâmetros"
echo "Eles são: $*"
echo "Os parâmetros iniciais eram: $args"
Sintaxe:
Sinais Descrição
0 Saída normal do programa;
1 Equivale ao comando kill -HUP;
2 Interrompe o processo, enviado via teclas <ctrl> + <c>;
9 Interrompe o processo incondicionalmente. Trap não trata este sinal;
15 Encerra o processo de forma correta. Equivale ao comando kill pid_processo;
18 Coloca o processo em background, enviado via teclas <ctrl> + <z>.
Exemplo:
#!/bin/bash
#
clear
trap 'echo Você digitou Ctrl-C ; exit;' 2
trap 'echo Você digitou Ctrl-Z; exit;' 18
trap 'echo Processo saindo por -HUP ; exit;' 1
trap 'echo Processo saindo por Kill; exit;' 15
trap 'echo Processo saindo pelas próprias pernas (exit 0); exit;' 0
while true
do
echo "Ainda estou no ar..$$ "
sleep 3
done
Este comando possui a finalidade de encerrar a execução do Shell script. Se não for especificado
um código de saída, ele será o mesmo do último comando executado imediatamente antes do
comando exit.
Para informar um erro ocorrido num determinado procedimento, onde tenha que encerrar então o
script, informe um número maior que zero. Tipicamente um código de erro igual a 1 (um) já
informa erro de execução.
Sintaxe:
exit [n]
Exemplo:
Retorna de uma função dentro do Shell script. Deverá ser informado o seu código de saída, caso
contrário será o mesmo do último comando executado dentro da função.
Sintaxe:
return [n]
Encerra um laço, do tipo while, until ou for, após n iterações. O padrão para n é 1.
Sintaxe:
break [n]
Interrompe a iteração atual de um laço e salta para a n-ésima iteração. O padrão para n é 1.
Sintaxe:
continue [n]
Esta declaração permite ao programador em Shell script elaborar uma função dentro do seu
arquivo. A função declarada funciona da mesma forma que uma função em outra linguagem de
programação.
Sintaxe:
function <nome_função> ()
{ comandos }
ou
<nome_função> () { comando }
Exemplo:
#!/bin/bash
#
#
function fatorial () {
let A=1
num=$N
while [ $N -gt 0 ]
do
let A=A*N
let N=N-1
done
echo "Fatorial de $num = " $A
}
clear
echo -n "Entre com um número inteiro: "
read N
if [ x"$N" == "x" ]
then
let N=0
fi
echo `fatorial $N`
exit
Sintaxe:
Exemplos:
O comando tput é utilizado para posicionamento do cursor de entrada dos terminais. Ele também
possui outras funcionalidades mais avançadas, como por exemplo, setar o terminal para imprimir os
caracteres em negrito e informar o número de linhas do terminal.
Exemplos:
#!/bin/bash
#
clear
tput bold
tput cup 20 20 ; echo Sistema de Cadastro Nome-Telefone
tput cup 22 20 ; echo [ 1 ] Consulta
tput cup 23 20 ; echo [ 2 ] Altera
tput cup 23 35 ; echo -n "Opção [ ]"
tput cup 23 43 ; read -n 1 opc
tput cup 23 50 ; echo Escolhi a opção: $opc
O sed (stream editor) é um editor de textos simples que executa procura, substituição, inserção e
eliminação de caracteres, oriundos de arquivos textos ou de qualquer outra fonte de stream de
textos, como uma simples variável de ambiente.
O sed não transforma os arquivos originais, pois ele recebe o stream de textos da entrada
padrão, realiza o processamento e então devolve os resultados para a saída padrão. Se houver
necessidade de gravar estas alterações, basta redirecionar a saída do comando, através do
direcionador “>”, para um arquivo em disco.
Sintaxe:
Exemplos:
# sed 's/tux/pinguim/g' /etc/passwd --> Troca tux por pinguim em todo arquivo passwd;
# sed 's/bash/csh/g' /etc/passwd --> Troca a palavra bash por csh em todo arquivo passwd;
# sed 's/\/usr\/local\/bin/\/usr\/bin/' texto.txt --> Troca /usr/local/bin por /usr/bin em
texto.txt;
# sed '3,5d' arq.txt --> Deleta as linhas 3,4,5 do arquivo arq.txt
# sed '8,10!d' arq.txt --> Deleta todas as linhas, exceto as linhas 8, 9 e 10 de arq.txt;
#sed '/Maria/,/João/d` arq.txt --> Deleta as linhas entre Maria e João, do arquivo arq.txt;
O comando sed trabalha muito com expressões regulares. Abaixo temos uma tabela com as
expressões mais utilizadas.
Símbolo Descrição
[a-z] Indica que o intervalo de caracteres, de a até z são válidos.
[0-9] Indica que qualquer número de 0 à 9 são válidos para a pesquisa.
[^abc] Qualquer caracter, menos a, b ou c são válidos para a busca.
/texto/ Indica que texto procurado deverá estar entre espaços.
. O ponto decimal indica qualquer caracter menos uma linha em branco.
Adaptada do livro Certificação Linux, de Uirá Ribeiro, Edição 2004, Editora Excel, páginas 105 e 106.
O awk na verdade é uma linguagem de programação. Entretanto, sua utilização na forma simples
auxilia muito no tratamento de campos de dados. É mais eficiente que o comando cut. Vejamos
alguns exemplos:
# cat /etc/passwd | awk -F : '{print $1}' --> Imprime a primeira coluna do arquivo passwd;
# cat /etc/passwd | awk -F : '{print $1 “ “ $5}' --> Imprime a primeira e a quinta colunas;
# awk -F : '$3 >= 1000 {print $1}' /etc/passwd --> Imprime usuários com UID >= 1000;
# echo 10.112.5.32 | awk -F . '{print $4 “.” $3 “.” $2 “.” $1}' --> Imprime o IP Reverso.
Desafio 1:
Elabore um script em Shell que permita incluir, excluir, consultar e alterar um registro
contendo nome e telefone de uma pessoa.
Desafio 2: Crie um usuário local no sistema com nome cadastro e coloque o script anterior
como seu único Shell de execução, não permitindo que o usuário cancele o script e, se ele o
fizer, o sistema fará o seu logout.
➢ Cópia: Uma vez compilados, os arquivos precisam ser copiados para os diretórios corretos,
para poder funcionar adequadamente. Nesse processo, alguns diretórios precisam ser
criados, eventualmente.
O processo natural não é nem um pouco animador. Instalar todos os programas do sistema
operacional seguindo esse método leva muito tempo, e a chance de ocorrer algum erro é muito
grande. Pensando nisso, os mantenedores dos pacotes de cada distribuição fazem por você o
processo de compilação e configuração dos programas, e juntam tudo em um só arquivo, chamado
pacote. Esse pacote, será interpretado pela ferramenta de gerenciamento de pacotes, que o
instalará automaticamente, com apenas um comando. Abaixo, encontra-se a listagem dos tipos de
pacotes e seus respectivos gerenciadores de algumas distribuições comentadas anteriormente:
O Debian utiliza o formato DEB para os seus pacotes pré-compilados. Muitos pacotes (mais de
12.000) são mantidos pela equipe de desenvolvedores Debian, e encontram-se disponíveis em
diversos repositórios oficiais espalhados ao redor do mundo. Programas que não possuem pacotes
DEB devem ser instalados a partir do código-fonte. É possível gerar pacotes DEB manualmente
através da ferramenta dpkg-deb ou através de utilitários que automatizam essa tarefa, como o
checkinstall. Os nomes dos pacotes são geralmente formados da seguinte forma:
[foo]_[versão]-[revisão]_[arquitetura].deb
Onde:
➢ ladccad_0.4.0-4_i386.deb
➢ inkscape_0.41-2_i386.deb
➢ rsync_2.6.4-6_i386.deb
➢ mysql-server-4.1_4.1.11a-4_i386.deb
➢ openoffice.org-bin_1.1.3-9_i386.deb
8.2.1 dpkg
Algumas opções são usadas com o nome do pacote, outras são usadas com o nome do arquivo .deb.
As principais são:
➢ --info: Exibe as informações sobre o pacote especificado, tais como descrição, versão,
dependências, mantenedor, etc.
➢ -i, --install: Instala o pacote no sistema, desde que ele não possua nenhuma dependência
não resolvida.
➢ --unpack: Apenas extrai os arquivos do pacote, copiando-os para os locais corretos, mas
não faz a configuração. Isso pode deixar o programa não utilizável, pois ele pode precisar
ser configurado, o que, nesse caso, não é feito.
➢ --configure: Configura o pacote desempacotado através do –unpack.
➢ -r, --remove: Remove um pacote, mantendo os arquivos de configuração. A importância
de se manter os arquivos de configuração é que, no caso da reinstalação do pacote, as
configurações não serão perdidas, permitindo usar o programa como se ele nunca tivesse
sido removido.
➢ --purge: Remove um pacote e também os seus arquivos de configuração. Só use essa
opção quando tiver certeza de que deseja acabar com qualquer vestígio do pacote em
questão, geralmente quando ele realmente não for mais necessário;
➢ -l, --list: Lista o estado de instalação do pacote. Útil para saber se um pacote está
instalado, ou se apresenta algum problema, como dependências quebradas ou se está
desconfigurado;
➢ --get-selections [arquivo]: Grava no arquivo uma lista com os pacotes do sistema, bem
Exemplos:
$ dpkg -i opera_8.01-20050615.5-shared-qt_en_sarge_i386.deb
Selecionando pacote previamente não selecionado opera.
(Lendo banco de dados ... 91345 arquivos e diretórios atualmente instalados.)
Descompactando opera (de opera_8.01-20050615.5-shared-qt_en_sarge_i386.deb) ...
Instalando opera (8.01-20050615.5) ...
Instala o pacote do navegador Opera no sistema operacional.
$ dpkg --info opera_8.01-20050615.5-shared-qt_en_sarge_i386.deb
novo pacote debian, versão 2.0.
tamanho 4257754 bytes: arquivo de controle= 4241 bytes.
34 bytes, 2 linhas conffiles
826 bytes, 20 linhas control
5932 bytes, 85 linhas md5sums
1654 bytes, 55 linhas * postinst #!/bin/sh
1068 bytes, 38 linhas * postrm #!/bin/sh
1011 bytes, 40 linhas * prerm #!/bin/sh
Package: opera
Version: 8.01-20050615.5
Section: non-free/web
Priority: optional
Architecture: i386
Depends: libc6 (>= 2.1.3), xlib6g (>= 3.3.6) | xlibs, libqt3c102-mt
Recommends: libmotif (>= 2) | lesstif2, libaspell15
Conflicts: opera-static
Replaces: opera-static
Provides: opera-static, www-browser
Installed-Size: 9508
Maintainer: Christian Westgaard <christian.westgaard@opera.com>
Description: The Opera Web Browser
Welcome to the Opera Web browser. It is smaller, faster,
customizable, powerful, yet user-friendly. Opera eliminates
sluggish performance, HTML standard violations, desktop
domination, and instability. This robust Web browser lets you
navigate the Web at incredible speed and offers you the best
Internet experience.
The binaries were built on a RedHat-9.0 (shrike) installation using gcc-3.2.2.
Exibe as informações do pacote do navegador Opera.
$ dpkg -r opera
(Lendo banco de dados ... 91447 arquivos e diretórios atualmente instalados.)
Removendo opera ...
Remove o programa do sistema operacional.
$ dpkg -l dnsutils
Desejado=U=Desconhecido/Instalar/Remover/aPagar/H=Manter
| status=Não/Instalado/arquiv.-Config./U=Descomp./Falhou-config/H=semi-inst.
|/ Erro?=(nenhum)/H=Mantido/precisa-Reinst./X=os dois problemas (status,Erro:
maiúsculas=ruim)
||/ Nome Versão Descrição
+++-===============-==============-==============================
||/ Nome Versão Descrição
+++=============================================================
ii dnsutils 9.2.4-1 Clients provided with BIND
Lista o estado do pacote dnsutils.
$ dpkg -l |less
Desejado=U=Desconhecido/Instalar/Remover/aPagar/H=Manter
| status=Não/Instalado/arquiv.-Config./U=Descomp./Falhou-config/H=semi-inst.
|/ Erro?=(nenhum)/H=Mantido/precisa-Reinst./X=os dois problemas (status,Erro:
maiúsculas=ruim)
||/ Nome Versão Descrição
+++-===============-==============-=====================================
||/ Nome Versão Descrição
+++-==============-=====================================================
ii aalib1 1.4p5-22 ascii art library
ii adduser 3.63 Add and remove users and groups
ii akode 3.3.2-1 akode arts plugin
ii apache2-common 2.0.54-4 next generation, scalable, extendable web se
ii apache2-mpm-pr 2.0.54-4 traditional model for Apache2
ii apache2-utils 2.0.54-4 utility programs for webservers
ii apt 0.5.28.6 Advanced front-end for dpkg
ii apt-utils 0.5.28.6 APT utility programs
ii aptitude 0.2.15.9-2 terminal-based apt frontend
ii ardour-doc 0.9beta28-1 Ardour documentation
ii ardour-gtk 0.9beta28-1 digital audio workstation (graphical gtk int
ii ardour-session 0.9beta28-1 Ardour session collaboration tool
ii ark 3.3.2-1 KDE archiving tool
ii arts 1.3.2-3 Analog Realtime Synthesizer (aRts) metapacka
ii artsbuilder 3.3.2-1 Arts synthesizer designer
ii at 3.1.8-11 Delayed job execution and batch processing
ii avidemux 2.0.40-0.0 a small editing software for avi (especially
ii base-config 2.53.10 Debian base System configurator
ii base-files 3.1.2 Debian base System miscellaneous files
ii base-passwd 3.5.9 Debian base System master password and group
ii bash 2.05b-26 The GNU Bourne Again SHell
Caso não seja passado o nome do pacote no uso a opção -l, o dpkg lista a situação de todos os
pacotes. Neste caso utilizou-se o direcionador | para que a listagem tenha quebra de página.
Utilizando o dpkg com esta opção, ele direcionará para o arquivo lista-pkg.txt, a listagem de todos
os pacotes instalados em seu sistema operacional, com seus respectivos estados de instalação.
Utilizando o dpkg com esta opção, ele direcionará para o arquivo lista-pkg.txt, a listagem de todos
os pacotes instalados em seu sistema operacional, com seus respectivos estados de instalação.
/usr/share/nero/libFATImporter.so
/usr/share/nero/libGenCueSheet.so
/usr/share/nero/libGenFAT.so
/usr/share/nero/libGenHFS.so
/usr/share/nero/libGenHyb.so
/usr/share/nero/libGenISO.so
/usr/share/nero/libGenUDF.so
/usr/share/nero/libGenerator.so
/usr/share/nero/libISOFS.so
/usr/share/nero/libImage.so
/usr/share/nero/libImageGen.so
/usr/share/nero/libMmc.so
/usr/share/nero/libNRPrimeraComposer.so
/usr/share/nero/libNeroRobo.so
/usr/share/nero/libUDFImporter.so
/usr/share/nero/pixmaps
/usr/share/nero/pixmaps/nero.png
$ dpkg -S nero
nerolinux: /usr/share/nero/libGenUDF.so
nerolinux: /usr/share/nero/docs/Manual.pdf
nerolinux: /usr/share/nero/libGenHFS.so
nerolinux: /usr/share/nero/pixmaps/nero.png
nerolinux: /usr/share/nero/desktop/NeroLINUX.template
nerolinux: /usr/bin/nero
nerolinux: /usr/share/nero/libMmc.so
nerolinux: /usr/share/nero/libNeroRobo.so
nerolinux: /usr/share/nero/DosBootImage.ima
kdebase-data: /usr/share/wallpapers/seaofconero.jpg
nerolinux: /usr/share/nero/libGenFAT.so
nerolinux: /usr/share/nero/libImage.so
nerolinux: /usr/share/nero/docs
nerolinux: /usr/share/nero/libNRPrimeraComposer.so
nerolinux: /usr/share/nero/libGenHyb.so
nerolinux: /usr/share/nero/libCDROM.so
nerolinux: /usr/share/nero/libImageGen.so
nerolinux: /usr/share/nero
nerolinux: /usr/share/nero/libGenCueSheet.so
nerolinux: /usr/share/nero/libGenerator.so
nerolinux: /usr/share/nero/libUDFImporter.so
nerolinux: /usr/share/nero/docs/EULA
nerolinux: /usr/share/nero/desktop
nerolinux: /usr/share/nero/libISOFS.so
nerolinux: /usr/share/nero/pixmaps
nerolinux: /usr/share/nero/Nero.txt
nerolinux: /usr/share/nero/libFATImporter.so
nerolinux: /usr/share/nero/libGenISO.so
nerolinux: /usr/share/nero/CDROM.CFG
8.2.2 APT
O APT (Advanced Packaging Tool) é uma avançada interface para o sistema de gerenciamento de
pacotes Debian, consistindo de vários programas cujos nomes tipicamente começam com 'apt-'.
O apt-get, apt-cache e o apt-cdrom são ferramentas de linha de comando para gerenciar pacotes.
Eles também funcionam como programas back-end para outras ferramentas, como o dselect e o
aptitude.
Para utilizar o APT é necessário, antes de mais nada, configurá-lo. A primeira coisa a ser fazer é
escolher um repositório de pacotes do Debian, de onde os pacotes serão baixados. Essa
➢ CD-ROM's do Debian
➢ repositórios FTP
➢ repositórios HTTP
➢ repositórios locais
## Security updates
deb http://security.debian.org/ sarge/updates main
Cada uma das linhas corresponde a uma fonte utilizada pelo APT. As linhas comentadas com um #
não serão utilizadas. Cada linha é formada da seguinte forma:
Sendo:
➢ pacote: Os repositórios do Debian contém, além dos binários .deb, os fontes de alguns
pacotes, que podem ser baixados com o APT. Para configurar o APT para baixar os pacotes
.deb, colocamos deb, para baixar os fontes, colocamos deb-src.
➢ URI: A localização principal dos arquivos. O APT pode buscar pacotes de diversos locais,
utilizando os seguintes protocolos:
Pode-se ver que ela configura o APT para baixar pacotes .deb. Se quiser configurar o APT para
baixar códigos-fontes, basta trocar deb por deb-src:
Neste caso, ele baixa pacotes da distribuição unstable. Se estiver utilizando o Debian num
servidor, é interessante baixar os pacotes da versão stable. Para isso, basta trocar unstable por
stable:
O APT vai procurar pacotes em todas as seções, ou seja, main, contrib e non-free. Se você
desejar apenas Software Livre no seu sistema, vamos deixar apenas a seção main configurada,
removendo as seções non-free e contrib:
Para utilizar pacotes de um CD-ROM Debian, utilizaremos a ferramenta apt-cdrom. Basta colocar
o CD contendo os pacotes Debian na unidade, e digitar o seguinte comando:
$ apt-cdrom add
O CD será analisado e, se forem achados pacotes Debian nele, será criada automaticamente uma
entrada no sources.list, como essa:
deb cdrom:[Debian GNU/Linux testing _Sarge_ - Official Snapshot i386 Binary-1 (20050226)]/
unstable contrib main
O apt-setup oferece uma lista de repositório oficiais Debian, organizados por país. Pode-se
utilizar o apt-setup para adicionar CD-ROM's Debian e repositórios locais (protocolos file:/ e
copy:/) ao sources.list. Sua sintaxe é simples:
$ apt-setup
Uma vez configurado o sources.list, o APT já pode ser utilizado para baixar e instalar os pacotes.
A primeira coisa a se fazer é atualizar o APT, baixando a lista de pacotes disponíveis. Para isso,
usa-se o seguinte comando:
$ apt-get update
Atingido http://security.debian.org stable/updates/main Packages
Atingido http://security.debian.org stable/updates/main Release
Atingido http://security.debian.org stable/updates/contrib Packages
Atingido http://security.debian.org stable/updates/contrib Release
Atingido ftp://ftp.nerim.net stable/main Packages
Atingido ftp://ftp.nerim.net stable/main Release
Atingido ftp://ftp2.fr.postgresql.org sarge/pgadmin Packages
Atingido ftp://ftp2.fr.postgresql.org sarge/pgadmin Release
Atingido ftp://ftp.br.debian.org stable/main Packages
Atingido ftp://ftp.br.debian.org stable/main Release
Atingido ftp://ftp.br.debian.org stable/main Sources
Atingido ftp://ftp.br.debian.org stable/main Release
Lendo Lista de Pacotes... Pronto
Nesse procedimento, o APT procura na lista de pacotes (gerada através do comando apt-get
update) pelo pacote vncserver. Uma vez encontrado, ele verifica se a versão disponível para
instalação é mais nova que a versão instalada. Se for, ele verifica se existem dependências, ou
seja, se existe algum pacote necessário para o vncserver funcionar. Se existir, ele insere esses
pacotes na lista de instalação. Depois disso, ele exibe a lista dos pacotes que serão instalados.
O APT ainda mostra uma lista de pacotes sugeridos. Os pacotes sugeridos são aqueles que
fornecem alguma funcionalidade extra ao pacote selecionado para instalação. Por fim, o APT exibe
a lista dos pacotes que serão instalados, e mostra o resumo da instalação, especificando quantos
pacotes serão instalados, atualizados, removidos e não atualizados, e qual o tamanho do download
que precisa ser feito.
Se algum pacote além dos que você especificou precisar ser instalado, o APT pedirá a confirmação
antes de iniciar a instalação. Para confirmar, digite s ou pressione Enter. Os pacotes são baixados
e instalados, automaticamente.
O procedimento aqui é parecido. Primeiro, o APT procura na lista de pacotes para ver se existe
um pacote instalado com o nome informado. Se existir, ele procura na lista de dependências, para
ver se existe algum outro pacote que precisa do pacote informado para funcionar.
Depois disso, o APT informa o número de pacotes que serão removidos. Depois, exibe a quantidade
de espaço em disco que será liberado. O APT solicita a confirmação para realizar a desinstalação.
Para confirmar, digita-se <s> ou pressiona-se Enter.
O Debian possui em seu repositório milhares de pacotes. Seria muito complicado se você
precisasse saber antecipadamente o nome do pacote que deseja instalar ou remover. Por isso
mesmo, o APT conta com uma ferramenta para localizar pacotes e exibir informações sobre eles:
o apt-cache.
Por exemplo, vamos procurar os pacotes de impressão do GIMP, utilizando as palavras-chave gimp
e print:
Para exibir informações mais detalhadas sobre um programa, podemos utilizar os parâmetros
show e showpkg. Vejamos, por exemplo, as informações detalhadas do pacote gimp:
A diferença entre show e showpkg é que show mostra detalhes relativos ao pacote, como
descrição, mantenedor, etc., enquanto showpkg exibe informações referentes às dependências
simples e reversas do pacote.
O APT possui um recurso que permite atualizar todos os pacotes instalados no sistema. Isso pode
ser feito utilizando as opções upgrade e dist-upgrade do apt-get:
$ apt-get upgrade
$ apt-get dist-upgrade
Pode-se usar o dpkg para marcar os pacotes que não devem ser atualizados em hipótese alguma.
Esse recurso é útil para evitar a atualização de componentes importantes do sistema, cujas
atualizações podem ser instáveis, ou no caso de programas que tenham sido instalados
manualmente.
$ apt-get clean
Já o autoclean apaga apenas os pacotes que possuem versões mais novas disponíveis para
download. É recomendável utilizar o autoclean sempre após fazer a atualização da lista de pacotes
do APT (apt-get update).
O Red Hat Package Manager – RPM é um gerenciador de pacotes que permite ao administrador
instalar, remover e obter informações sobre pacotes que possuem o formato .rpm.
Ele permite também a criação de pacotes a partir de arquivos fonte, verificar a assinatura digital
de um pacote e até simular uma instalação.
Sintaxe:
Exemplos praticos:
# rpm -qa | less --> Lista todos os pacotes rpm instalados no sistema;
# rpm -q bash --> Consulta informações do pacote bash;
# rpm -V snort-2.0.1-98.i586.rpm --> Verifica o status do pacote snort 2.0.1;
# rpm -K libpcap-0.7.2-37.i586.rpm --> Verifica assinatura e integridade do pacote;
# rpm -i snort-2.0.1-98.i586.rpm --> Instala o pacote snort, versão 2.0.1;
# rpm -U libpcap-0.7.2-37.i586.rpm --> Faz upgrade do pacote libpcap;
# rpm -e snort-2.0.1-98.i586.rpm --> Exclui o pacote snort, versão 2.0.1;
# rpm -qi snort-2.0.1-98.i586.rpm --> Ver informações de pacote rpm não instalado;
# rpm -qi snort-2.0.1 --> Ver informações de pacote rpm já instalado;
# rpm -ql snort-2.0.1 --> Ver arquivos e diretórios de pacote já instalado.
Importante:
É possível transformar um pacote rpm em um pacote deb. Para isso utilize o programa Alien. Este
aplicativo lê as informações do pacote rpm e tenta convertê-las para o formato deb. Não há
garantias de que funcione completamente o novo pacote convertido, pois para o gerenciamento
correto de pacotes deb todas as informações devem estar presentes no pacote, principamente as
relacionadas com as dependências de pacotes.
O controle de acesso aos recursos do computador são controlados pelo sistema operacional. Este
controle acontece a nível de usuário e grupo, ou seja, para que alguém consiga executar qualquer
programa ou script no sistema, ele antes deve iniciar uma sessão com o sistema e para isso deverá
ser validado.
O sistema então verifica se o login e a senha são válidos de acordo com informações cadastradas
no arquivo /etc/passwd, para dados do usuário, no arquivo /etc/shadow para a senha e no arquivo
/etc/group para suas definições de grupo.
O processo não verifica somente usuário e senha, mas também outras restrições e configurações
de segurança, as quais serão apresentadas no decorrer deste treinamento.
Em grandes redes de computadores, o GNU/Linux pode ser configurado para não utilizar uma
base de dados de usuários local, mas sim um sistema completo de autenticação, o qual pode prover
outros mecanismos e bases de dados de usuários.
É possível por exemplo juntar os sistemas SAMBA e Open Ldap e prover um sistema de
autenticação de usuários mais robusto e que consegue agregar uma grande quantidade de tipos de
sistemas operacionais para utilizarem este mecanismo, como por exemplo sistemas Windows,
GNU/Linux, MacOS e UNIX, além é claro de que vários serviços também podem se utilizar desta
solução, como o Apache e o Squid.
Estas soluções de autenticação somente são possíveis através do PAM – Pluggable Authentication
Module, o qual provê um suporte a módulos de autenticação que conseguem mudar a maneira
tradicional de autenticação, baseada em arquivos locais, para um modelo de serviço centralizado.
Os usuários seguem uma padronização de informações, segundo o modelo Posix, onde estas
informações devem estar disponíveis no sistema, caso seja necessário, por exemplo, realizar uma
integração entre modelo de contas de usuários do GNU/Linux e do MS Windows, por exemplo.
/etc/passwd --> Este arquivo contém todas as informações dos usuários, menos a
senha.
O formato deste arquivo é apresentado abaixo:
<usuário>:<senha>:<UID>:<GID>:<comentários>:<home>:<shell>
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
Como podemos ver, neste exemplo acima não existe a senha dos usuário no segundo campo, mas
somente há o caracter x. Esta característica é devido à medidas de segurança, onde as senhas
foram retiradas deste arquivo e colocadas no arquivo /etc/shadow.
/etc/shadow --> Contém as senhas criptografadas dos usuários, além de outras configurações.
Formato:
<usuário>:
<senha criptografada>:
<n dias após 01/01/1970 que a senha foi alterada pela última vez>:
<n dias após a criação do usuário, a senha pode ser modificada>:
<n dias depois da criação do usuário, a senha deve ser modificada>:
<notifica o usuário n dias antes que a senha expire>:
<desabilita a conta do usuário n dias após a senha ter expirado>:
<n dias após 01/01/1970 a conta será encerrada>:
<campo reservado>:
root:$1$7KPoeEqW$ZC9l2q0bqhLte1Q70fEbG1:13175:0:99999:7:::
daemon:*:13175:0:99999:7:::
bin:*:13175:0:99999:7:::
sys:*:13175:0:99999:7:::
gdm:!:13175:0:99999:7:::
c031193:$1$zHMMg7Km$iOojKduk5Ol92zj8cNzlo.:13175:0:99999:7:::
logcheck:!:13213:0:99999:7:::
tux:$1$5GR0w7kX$FLfZmtgHRHoZ3YE1VnrO3/:13224:0:99999:7:::
coisa:!:13260:0:99999:7:::
Formato:
<grupo>:<senha criptografada>:<GID>:<comentário>:<lista de usuários>
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:logcheck
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:c031193
fax:x:21:
voice:x:22:
cdrom:x:24:hal,c031193
floppy:x:25:hal,c031193
Existem outros arquivos no sistema de autenticação do GNU/LINUX que servem para armazenar
diversas informações, necessárias para a correta administração de usuários, grupos e senhas.
9.3.1 useradd
Sintaxe:
Opções Descrição
-d <dir_home> Diretório home do usuário em criação;
-c <comentário> Comentários adicionais;
-g <grupo> Grupo primário do novo usuário no sistema;
-G <grupo> Demais grupos que o usuário irá pertencer;
-s <programa> Primeiro programa a ser executado, geralmente o Shell;
-e <mm/dd/aa> Data para desabilitar a conta;
-f <num_dias> Quantidade de dias, após a senha expirar, p/desabilitar a conta.
Exemplos:
Veja também o comando adduser o qual adiciona usuários, mas que possui maior interatividade com
o usuário.
9.3.2 passwd
Comando para mudar a senha do usuário atualmente logado, ou outro usuário do sistema (requer
nível administrativo).
Sintaxe:
passwd <usuário>
Exemplos:
# passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
#passwd tuxes
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
O comando anterior alterou a senha do usuário tuxes no sistema. Em todos os casos é preciso
nível administrativo para a execução da troca de senhas.
9.3.3 chage
Sintaxe:
Opções Descrição
-l Exibe informações de expiração da senha de um usuário;
-M <num_dias> Número máximo de dias até que a senha expire;
-m <num_dias> Número mínimo de dias entre alterações de senha. Um valor
zero indica que o usuário pode alterar sua senha quando
desejar.
-d <mm/dd/aa> Data da última alteração da senha;
-I <num_dias> Número de dias entre a expiração da senha e o bloqueio da
conta do usuário;
-E <mm/dd/aa> Data de expiração da conta do usuário;
-W <num_dias> Número de dias que a mensagem para troca de senha será
exibida para o usuário, anteriormente à sua data de expiração.
Exemplos:
# chage tux -M 20 -m 30 -W 2
# chage tux -M 20 -m 30 -W 2 -E 12/31/2099
# chage -l tux
Mínimo :t30
Máximo : 20
Aviso : 2
Inativa : -1
Última Mudança : Mar 17, 2006
Senha Expira : Abr 06, 2006
Senha Inativa : Nunca
Conta Expira : Nunca
9.3.4 usermod
Opção Descrição
-c <comentário> Altera comentários da conta do usuário;
-d <dir_home> Novo diretório home;
-s <programa> Novo programa inicial (novo Shell);
-l <novo_login> Novo nome de login do usuário no sistema;
-g <novo_grupo> Novo grupo primário do usuário;
Exemplos:
9.3.5 userdel
Sintaxe:
Se for utilizada a opção -r, todos os arquivos e diretório home do usuário serão removidos do
sistema.
Exemplos:
# userdel tux
# userdel -r jan --> Remove o usuário jan e todos os seus arquivos e home dir.
9.3.6 chfn
Muda configurações das informações do usuário, como seu Full Name (nome completo) e telefones.
Sintaxe:
Opção Descrição
-f <nome> Nome completo do usuário (full name);
-r <sala> Especifica a sala do usuário (room), sua localização, por exemplo.
-w <fone> Telefone de trabalho.
-h <fone> Telefone residencial.
Exemplos:
# chfn -f “Tux Pingüim da Silva” tux
# chfn -w “48 4009 0320” jan
9.3.7 id
Sintaxe:
id [opções] [usuário]
Opção Descrição
-g Exibe o nome do grupo primário do usuário;
-G Exibe o nome de todos os grupos que o usuário pertence;
-u Exibe o UID do usuário;
-n Exibe os nomes dos grupos, usados com as opções g e G.
Exemplos:
# id -u c031193
# id -Gn tux
# id
9.3.8 su
É o comando para trocar de usuário corrente, sem o processo formal de login. O comando su
(switch user) não deve ser liberado para qualquer usuário, mas somente para os administradores
do sistema.
Sintaxe:
su [opções] [usuário]
Opções Descrição
Exemplos:
# su -
# su -c “ls -l”
# su -c “pwd” tux
9.3.9 groupadd
Sintaxe:
Exemplos:
9.3.10 gpasswd
Este comando é usado para administrar os arquivos /etc/group e /etc/gshadow e cada grupo deve
possuir um administrador, membros e uma senha.
Os administradores dos sistema poderão usar as opções -A para definir o administrador do grupo
e -M para definir os membros com direitos administrativos ao grupo. As demais opções serão
apresentadas na seqüência.
Sintaxe:
Opção Descrição
-a Adiciona usuário ao grupo;
-d Deleta usuário do grupo;
-r Remove a senha do grupo;
-A Define o Administrador do grupo;
-M Define os membros administrativos do grupo;
-R Desabilita o acesso ao grupo pelo comando newgrp.
Exemplos:
9.3.11 groupmod
Sintaxe:
Opção Descrição
-g <novo GID> Troca o GID para um novo número, que não deve existir.
-n <novo nome> Troca o nome do Grupo.
Exemplos:
9.3.12 groupdel
Sintaxe:
Exemplo:
# groupdel curso --> Remove o grupo curso.
# groupdel grupoNovo --> Removo o grupo grupoNovo.
9.3.13 sudo
A edição deste arquivo é realizada pelo aplicativo visudo, que somente o usuário root pode
executá-lo.
Sintaxe:
sudo [opções] [comando]
Opções Descrição
-l Lista os comandos permitidos e proibidos para o usuário
-h Exibe a ajuda do comando.
-S Força a solicitação da senha do usuário;
-u <usuário> Força a execução do comando como se fosse o usuário.
Exemplos:
$ sudo shutdown -r +15 "reboot do sistema!"
$ sudo -u www vi ~www/htdocs/index.html
$ sudo -u yazza ls ~yazza
Abaixo temos um segmento do arquivo /etc/sudoers, onde podemos colocar os logins dos usuários
que porventura possam ter acesso à comandos de administração do sistema.
# /etc/sudoers
# This file MUST be edited with the 'visudo' command as root.
# See the man page for details on how to write a sudoers file.
A seguir temos uma relação de comandos que podem ser utilizados para auxiliar os usuários no seu
ambiente de trabalho.
Comando Objetivos
groups Exibe grupos de um usuário;
newgrp Troca de grupo o usuário corrente, somente em tempo de execução;
users Exibe os usuários ativos no sistema;
w Exibe usuários conectados ao sistema e o que estão executando;
who Exibe usuários utilizando os terminais/
whoami Mostra o UID efetivo do usuário.
# useradd poder
# passwd poder
Edite o arquivo /etc/passwd e modifique o UID e GID deste usuário, ambos para 0.
Antes:
poder:x:1006:100::/home/poder:/bin/bash
Depois:
poder:x:0:0::/home/poder:/bin/bash
Suspendendo um usuário:
Para suspender um usuário, basta comentar a linha de seu registro no arquivo /etc/passwd,
ficando como abaixo:
# poder:x:0:0::/home/poder:/bin/bash
Para remover um usuário manualmente, basta remover as linhas que contém referências ao seu
login nos arquivos: /etc/passwd, /etc/group e /etc/passwd. Remova também os diretórios
/home/usuário e /var/spool/mail/usuário, se existirem. Deste modo você exclui o usuário
localmente no sistema.
As permissões de acesso aos arquivos e diretórios na estrutura das partições, num sistema
GNU/Linux, obedecem o modelo adotado nos sistemas UNIX. Dentro deste modelo de permissões,
há três tipos básicos de permissões de acesso aos arquivos e diretórios.
Dono do arquivo é normalmente que cria o arquivo ou aquele definido pelo root.
Grupo do arquivo é normalmente o grupo primário ao qual o seu Dono pertence.
Para cada tipo de categoria, há três tipos básicos de permissões que são:
Existem também permissões especiais que possuem funções diferentes das citadas acima. Estas
permissões são as seguintes:
Exemplos:
Assim, as permissões totais do arquivo são: Especiais + Dono + Grupo + Outros, o que equivale à
4755.
1 0 0 1 1 1 1 0 1 1 0 1
4 7 5 5
Independentemente de quem executar este arquivo, o perfil utilizado será o do seu dono, no caso
o root, pois o SetUID está ativo na categoria dono do arquivo.
É importante frisar que, esta característica é importantíssima no comando passwd, pois este
comando altera as senhas dos usuários e a gravação das senhas no arquivo /etc/shadow somente é
permitida para o usuário root, logo sem esta permissão específica, nenhum outro usuário
conseguiria alterar suas senhas.
Para listar as permissões dos arquivos utilize o comando “ls -l”. Veja um exemplo abaixo:
# ls -l /usr/sbin
total 13504
-rwxr-xr-x 1 root root 47276 2005-09-05 08:16 ab
lrwxrwxrwx 1 root root 2 2006-03-06 20:00 ab2 -> ab
-rwxr-xr-x 1 root root 6284 2005-12-12 11:54 accept
-rwxr-xr-x 1 root root 15240 2005-01-05 14:30 accessdb
-rwxr-xr-x 1 root root 18456 2004-11-01 08:26 acpid
lrwxrwxrwx 1 root root 7 2006-01-27 18:09 addgroup -> adduser
-rwsr-xr-- 1 root cdrom 351404 2005-01-09 14:55 cdrecord.shm
-rwxr-xr-x 1 root root 70060 2004-11-24 22:24 c++filt
-rwxr-sr-x 1 root shadow 34488 2005-04-19 14:48 chage
lrwxrwxrwx 1 root root 9 2006-01-27 18:23 charmap -> gucharmap
-rwxr-xr-x 1 root root 2431 2005-02-05 08:23 charset
-rwxr-xr-x 1 root root 7368 2005-04-09 22:49 chattr
-rwsr-xr-x 1 root root 28056 2005-04-19 14:48 chfn
-rwxr-xr-x 1 root root 3676 2005-03-22 11:21 chkdupexe
-rwsr-xr-x 1 root root 28088 2005-04-19 14:48 chsh
-rwxr-xr-x 1 root root 5564 2005-02-05 08:23 chvt
Importante:
As permissões especiais (Sguid, Sgid, Sticky) ocupam a posição da permissão de execução (x).
Caso a permissão de execução (x) esteja definida no arquivo, a representação das permissões
especiais é apresentada em letras minúsculas (s e t) conforme o caso. Se a permissão de execução
(x) não estiver definida, estas letras serão apresentadas em maiúsculas (S e T).
Exemplo:
-rwSr--r-- 1 root root 0 2006-04-28 08:25 arq1
-rwsr--r-- 1 root root 0 2006-04-28 08:25 arq1
9.5 chmod
Este comando é a principal ferramenta para a mudança das permissões em arquivos e diretórios.
Sintaxe:
chmod [opções] <modo_arquivo> <arquivo>
Opções Descrição
-c Mostra informações dos arquivos em modificação.
-f Não apresenta mensagens de erro.
-R Atua recursivamente em todos os sub-diretórios, se houverem.
-v Mostra os detalhes das alterações dos arquivos
Identificador: Operando:
u Usuário + Adiciona a permissão
g Grupo - Remove a permissão
o Outros = Adiciona explicitamente e remove as
a Todos outras permissões.
Valor:
r Permissão de leitura.
w Permissão de escrita.
x Permissão de execução.
s Bit SetUid se atribuído a usuário, bit SetGid se atribuído a Grupo.
t Bit Sticky.
Exemplos:
Lembretes Importantes!
1- Se o bit SetUid for ativado em um arquivo, ao executá-lo, será feito com o perfil do dono do
arquivo.
2- Se o bit SetGid for ativado em um arquivo, ao executá-lo, será feito com o perfil do Grupo do
arquivo. Se for um diretório, todos os arquivos dentro deste terão seus grupos definidos para o
grupo do diretório.
3- Se o bit Sticky for ativado em um diretório, somente os donos dos arquivos neste diretórios,
poderão excluir estes arquivos, com excessão do usuário root.
4- Se ativar a permissão de escrita (w) em um diretório, então os arquivos dentro deste poderão
ser excluídos, mesmo que não tenham explicitamente esta permissão.
5- Somente o usuário administrador do sistema (root) poderá sobrepor qualquer restrição sobre
arquivos, podendo alterar qualquer uma de suas permissões.
9.6 chown
Sintaxe:
Opções Descrição
-c Exibe detalhes do arquivo em modificação.
-f Não apresenta mensagens de erros.
-R Atua recursivamente nos sub-diretórios, se houverem.
-v Apresenta detalhes das alterações realizadas nos arquivos.
Exemplos:
9.7 chgrp
Sintaxe:
Opções Descrição
-c Exibe detalhes do arquivo em modificação.
-f Não apresenta mensagens de erros.
-R Atua recursivamente nos sub-diretórios, se houverem.
-v Apresenta detalhes das alterações realizadas nos arquivos.
Exemplos:
#chgrp www-data /sistemas/index.htm
#chgrp tux /tmp/arq_tux.doc
9.8 umask
Este comando altera os valores padronizados para a criação de arquivos e diretórios. Por
definição, os diretórios são criados com a permissão padrão 777, ou seja, permissões totais de
leitura, escrita e execução para dono, grupo e outros usuários, do respectivo diretório.
Os arquivos são criados, por padrão, com as permissões 666, ou seja, leitura e escrita para dono,
grupo e outros usuários.
Então, por questões de segurança, tornou-se uma padronização redefinir a máscara de permissões
de arquivos e diretórios, através do comando umask.
O comando umask geralmente é definido nos scripts de inicialização do ambiente dos usuários,
Para redefinir a máscara, basta colocar o comando dentro dos arquivos que são executados no
momento de login dos usuários, como os arquivos .bashrc ou .bash_profile.
umask [máscara]
Existem alguns atributos especiais sobre os arquivos no sistema GNU/Linux que devem ser
esclarecidos, pois afetam diretamente o comportamento das atualizações destes arquivos,
principalmente se considerarmos as facilidades de backup.
Atributo Descrição
A Não permite a atualização da hora de acesso do arquivo. Em diretórios, seus arquivos
internos não terão a hora de acesso modificada.
a Só permite adicionar informações no arquivo (Append-Only). Em diretórios só
permite a adição de arquivos e, em todos os casos, estes arquivos não podem ser
excluídos.
c Este atributo informa ao Kernel para comprimir em disco o conteúdo do arquivo. No
momento da leitura o Kernel descompacta e entrega os dados sem a compressão.
D Sincroniza a gravação de dados em disco, somente para diretórios.
d Não permite o backup do arquivo pelo programa Dump.
E Atributo experimental para compressão de dados. Não utilizar.
l Em diretórios, indica que o mesmo estará sendo indexado por algoritmos do tipo
“hashed trees”. Não utilizar.
i Torna o arquivo imutável. Nada pode ser feito com ele, somente pode ser lido.
j Faz com os dados do arquivo sejam escritos no Journaling do ext3, antes que o
próprio arquivo seja gravado em disco, se o Filesystem estiver montado com a opção
“data=ordered” ou “data=writeback”. Não possui efeito se o filesystem for montado
com a opção “data=journal”.
s Faz com que, na deleção do arquivo, seus blocos sejam zerados em disco,
impossibilitando assim a sua recuperação (undelete).
S Sincroniza a gravação do arquivo em disco, em sistemas Ext2. Não possui efeito
sobre diretórios.
Os atributos “c”, “s” e “u” não são respeitados pelos filesystem do tipo Ext2 e Ext3, conforme a
corrente implementação dos mesmos. Deverão ser implementados nas futuras versões destes
sistemas de arquivos.
O Atributo “j” é apenas funcional de o filesystem for do tipo Ext3 e o atributo “D” é usado
somente pelo kernel 2.5.19, ou superior (instáveis).
9.9.1 chattr
Sintaxe:
Opções Descrição
-R Recursivamente altera atributos em arquivos e sub-diretórios.
-V Mostra detalhes das alterações.
Modo Descrição
+ <atributo> Adiciona atributo
- <atributo> Retira atributo
= <atributo> Atributo exato (retira outros se for o caso).
Exemplos:
9.9.2 lsattr
Sintaxe:
Opções Descrição
-R Lista recursivamente diretórios e arquivos.
-a Lista todos os arquivos, inclusive arquivos ocultos.
-d Lista diretórios como arquivo.
10 QUOTAS DE DISCO
O recurso de Quotas de disco é implementado diretamente por módulos no Kernel, sem os quais
não é possível utilizar este importante recurso.
Nos sistemas Debian, por exemplo, os módulos para gerência e suporte de Quotas de disco estão
disponíveis no diretório /lib/modules/2.6.8-2-686/kernel/fs, através dos módulos quota_v1.ko
e quota_v2.ko.
Até o presente momento, o sistema de Quotas em disco somente funciona para partições com
filesystem do tipo Ext2 ou Ext3 e os limites para controle das quotas é baseado em três
parâmetros:
Parâmetro Descrição
soft limits Número máximo de blocos de 1k Bytes que um usuário, ou grupo, pode alocar.
Também é o número máximo de i-nodes (arquivos) que ele pode criar. Usuário ou
Grupo podem ultrapassar este limite por um período de tempo limitado.
hard limits É o número máximo de blocos de 1k Bytes que um usuário, ou grupo, pode alocar.
Também é o número máximo de i-nodes (arquivos) que ele pode criar. Porém, este
limite não pode ser ultrapassado.
grace É o período de tolerância em que um usuário, ou grupo, podem ultrapassar o soft
period limits. Caso o usuário ou grupo não consiga reverter o uso do espaço em disco, até
este período de tempo, o sistema de Quotas não permitirá mais alocação de espaço
em disco para o usuário ou grupo.
1- Escolher uma partição para a implementação das Quotas, por exemplo /home.
5- Reiniciar o sistema
# reboot
8- Definir um limite para 30 MB de espaço em disco, com limite máximo de 40 MB, conforme
exemplo abaixo:
13- Definir um limite para 50 arquivos em disco, com limite máximo de 60 arquivos, conforme
exemplo abaixo:
10.2.1 quota
Sintaxe:
quota [opções] usuário/grupo
Opções: Descrição
-u Mostra a quota definida para usuário.
-g Mostra a quato definida para grupo.
-q Mostra somente quando a quota for excedida.
-v Mostra as quotas, mesmo que não estejam definidas.
Exemplos:
# quota -u tux
# quota -v aluno
10.2.2 quotaon
Sintaxe:
Opções Descrição
-a Habilita quotas para todos os dispositivos configurados em /etc/fstab.
-g Habilita quotas para grupos em um dispositivo.
-u Habilita quotas para usuário em um dispositivo.
-v Mostra os dispositivos onde o quota está habilitado.
Exemplo:
# quotaon -avug --> Habilita quota em todos os devices, p/todos grupos e usuários.
10.2.3 quotaoff
Sintaxe:
quotaoff [opções] [dispositivo]
Opções Descrição
-a Desabilita quotas para todos os dispositivos configurados em /etc/fstab.
-g Desabilita quotas para grupos em um dispositivo.
-u Desabilita quotas para usuário em um dispositivo.
Exemplo:
# quotaoff -ug /dev/hda3
10.2.4 quotacheck
Faz uma verificação no sistema de arquivos e cria, verifica e repara os arquivos de configurações
das quotas.
Sintaxe:
Opções Descrição
-a Varre todos os dispositivos configurados em /etc/fstab.
-g grupo Constrói a base de dados das quotas para o grupo.
-u usuário Constrói a base de dados das quotas para o usuário.
-v Apresenta os procedimentos executados.
Exemplos:
# quotacheck -a
# quotacheck -aug
10.2.5 edquota
Este comando edita as propriedades das quotas dos usuários e grupos. Ele se utiliza do editor vi,
ou outro editor padrão no sistema, para configurar as quotas de disco.
Opções Descrição
-g grupo Edita configurações de quota para o grupo.
-T usuário Edita configurações de quota para usuário.
-p pad_usr Copia as configurações de quota do usuário pad_usr, para outro.
-t Configura o período de tolerância (grace period) para usuário e grupo.
Exemplos:
# equota -T aluno
# equota -t
10.2.6 repquota
Comando para gerar um relatório das quotas e utilização dos discos no sistema.
Sintaxe:
Opções Descrição
-a Gera relatório para todos os dispositivos configurados.
-u Gera relatório por usuários.
-g Gera relatório por grupos.
-v Cria um cabeçalho descritivo no relatório.
Exemplo:
# repquota -va
O tratamento lógico das unidades de discos físicas no sistema GNU/Linux é bem diferente de
outros sistemas operacionais como o MS Windows ou Novell Netware. Não há por exemplo a
associação de letras do alfabeto para indicar partições lógicas no sistema.
Como já abordado, tudo no GNU/Linux é tratado como arquivo, inclusive as unidades físicas de
discos. Elas são tratadas através de drivers de dispositivos, os quais ficam residentes abaixo do
diretório /dev.
Abaixo temos algumas representações de discos físicos e sua correlação com o arquivo de driver
de dispositivo, residente em /dev.
As letras de identificação de discos rígidos podem ir além de hdb, em algumas máquinas, por
exemplo, a unidade de CD-ROM podem estar localizada em /dev/hdg (Primeiro disco - quarta
controladora IDE). É importante entender como os discos e partições são identificados no
sistema, pois será necessário usar os parâmetros corretos para montá-los e utilizá-los
adequadamente.
Os sistemas de arquivos no GNU/Linux somente podem ser criados sob as partições de disco. A
padronização desta estrutura de partições permite que se tenha até quatro (4) partições
primárias.
Somente em uma partição primária é que o sistema poderá ser carregado e, neste caso específico,
esta partição deve ser marcada como ativa.
Num primeiro exemplo, para o caso de um disco rígido IDE master da primeira interface do
computador, poderíamos então ter as seguintes partições primárias:
/dev/hda1
/dev/hda2
/dev/hda3
/dev/hda4
As partições estendidas são uma variante das partições primárias, entretanto, estas não podem
conter sistemas de arquivos. Elas servem para acomodar as partições lógicas, ou seja, são um
compartimento para partições lógicas.
Num disco físico, somente pode haver uma (1) partição estendida, a qual ocupa o lugar de uma
partição primária. Podem ser configuradas até doze (12) partições estendidas, e sua nomeação vai
da partição /dev/hda5 até /dev/hda16.
Deste modo, num disco físico pode haver até quinze (15), sendo três (3) partições primárias, e
doze (12) partições lógicas (acomodadas em uma partição primária).
Ao ser criada uma partição lógica, o sistema automaticamente nomeia a partição /dev/hda4 como
primária, para que esta então receba a primeira partição lógica, a qual será nomeada como
/dev/hda5.
O CFDISK executado diretamente, procura pelo primeiro disco físico do sistema, tipicamente o
disco representado pelo driver /dev/hda, no caso de um disco rígido IDE ou /dev/sda, para o
primeiro disco SCSI.
Para executar o CFDISK, bastar digitar seu nome no prompt de comando. Entretanto, é preciso
de direitos administrativos para que você possa gravar na tabela de partições.
Se desejar particionar um outro disco, informe o seu dispositivo como parâmetro para o comando
CFDISK. Exemplo: # cfdisk /dev/hdc.
Abaixo temos a tela do programa CFDISK, o qual foi executado diretamente, sem parâmetros.
Vamos utilizar o programa CFDISK para criar uma nova partição no sistema e então
realizar os demais procedimentos para que a mesma fique disponível para uso pelos usuários.
1- Posicione o cursor em uma área livre do disco (Free Space) e selecione a opção New .
7- Observe qual foi o nome do dispositivo (hd??) que o CFDISK definiu para esta partição recém
criada (anote), então reinicialize o sistema (init 6, ou reboot).
9- Crie um ponto de montagem para a nova partição criada e monte nele a nova partição.
# cd /
# mkdir pteste
# mount -t ext3 /dev/hda5 /pteste
# cat /proc/mounts
11- Configurar o sistema para montar a partição automaticamente ao iniciar o sistema. Editar o
arquivo /etc/fstab:
# vi /etc/fstab
# /etc/fstab: static file System information.
#
# <file System> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/hda1 / ext3 defaults,errors=remount-ro 0 1
/dev/hda2 none swap sw 0 0
/dev/hdc /media/cdrom0 iso9660 ro,user,noauto 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto 0 0
/dev/hda5 /pteste ext3 defaults 0 2
12- Após salvar o arquivo (comando do vi “:wq”), faça o sistema ler o arquivo /etc/fstab e montar
todos os filesystems:
# mount -a
Importante:
Coluna Descrição
1a Coluna Informa o dispositivo a ser montado: (/dev/hda1, /dev/hdc1, etc).
2a Coluna Ponto de montagem do filesystem (/mnt, /backup, etc.). Já deve existir.
3a Coluna Tipo do FileSystem, que podem ser:
ext2 Sistema de arquivos do Linux
ext3 Sistema ext2 + Journaling
reiserfs Sistema de arquivos com Journaling do Linux.
msdos Sistema de arquivos do MS-DOS
vfat Sistema de arquivos do MS-Windows 95/98
iso9660 Sistema de arquivos padronizado para unidades de CD-ROM
auto Detecta automaticamente o sistema de arquivos.
4a Coluna Informa as opções de montagem:
defaults Montagem padrão do dispositivo (rw, suid,auto,
exec,nouser,async)
exec Permite a execução de programas da partição.
noexec Não permite a execução de programas da partição.
auto Monta automaticamente a partição.
noauto Montagem somente manual.
user Permite que usuários comuns montem a partição.
user Permite que usuários comuns montem a partição, mas proibe que
outros usuários desmontem.
nouser Somente o administrador (root) pode montar a partição.
rw Monta somente para leitura e escrita.
ro Monta somente leitura (read only).
sync Habilita a transferência de dados síncrona no dispositivo.
async Habilita a transferência de dados assíncrona no dispositivo.
dev Dispositivo especial de caractere.
suid Habilita que executáveis tenham bits suid e sgid
nosuid Desabilita que executáveis tenham os bits suid e sgid.
5a Coluna Dump do dispositivo
0 Não fará o Dump do dispositivo em tempo de montagem.
1 Executará o Dump (dumpe2fs) na partição
Dump executa verificações no superbloco do dispositivo em tempo de inicialização.
6a Coluna Executa ou não a Verificação do Filesystem.
0 Não faz a verificação no Filesystem (fsck).
11.3.1 mount
Opções Descrição
-a Monta todos os dispositivos do arquivo /etc/fstab
-h Exibe a ajuda do comando.
-r Monta o dispositivo somente para leitura.
-w Monta o dispositivo para leitura e gravação.
-t <tipo_fs> Especifica o tipo de Filesystem, que podem ser:
msdos vfat ntfs ext2 ext3 xfs
reiserfs iso9660 nfs smbfs
Exemplos:
#mount -t ext2 /dev/hda5 /mnt/dados
#mount -t vfat /dev/fd0 /mnt/floppy.
11.3.2 umount
Exemplos:
# umount /dev/hdc
# umount /dev/fd0
11.3.3 fsck
Opções Descrição
-A Verifica todos os filesystems em /etc/fstab.
-C Apresenta a barra de progresso da ferramenta.
-N Não executa, somente simula as ações que seriam executadas.
-p Repara automaticamente o sistema de arquivos.
-r Repara interativamente (pede confirmações ao usuário).
-f Força a reparação do Filesystem, mesmo que esteja correto.
-t <tipo_fs> Tipo de Filesystem: ext2, ext3, reiserfs, ou msdos.
Exemplos:
# fsck -t ext3 /dev/hda2
# fsck -t msdos /dev/fd0
# fsck -A
Comandos relacionados:
– fsck.ext2 - fsck.ext3 - fsck.reiserfs
– fsck.mdos - e2fsck - reiserfsck - dosfsck
11.3.4 mkfs
Comando para a criação de um sistema de arquivo. Ele formata logicamente a partição, conforme
o tipo de FileSystem utilizado
Opções Descrição
-v Apresenta todos os comandos que estão sendo executados.
-c Verifica blocos ruins no dispositivo.
-t <tipo_fs> Tipo de Filesystem: ext2, ext3, reiserfs ou msdos.
Exemplos:
# mkfs -t ext2 /dev/hdb1
# mkfs -t reiserfs /dev/hdc2
# mkfs -t vfat /dev/hda3
Comandos relacionados:
11.3.5 resize2fs
Este comando permite o re-dimensionamento do tamanho dos Filesystems do sistema. Ela não
aumenta o tamanho das partições, pois isso somente é possível com o aplicativo fdisk ou cfdisk.
Opções Descrição
-f Força o redimensionamento do dispositivo.
-p Exibe a barra de progresso do aplicativo
tamanho Pode ser referenciado em setores, kilobytes, megabytes ou gigabytes,
através dos sufixos s, K, M ou G. Se não for especificado a unidade,
será adotada o tamanho do bloco da partição.
Não é possível aumentar o tamanho do FileSystem acima do tamanho
da partição associada.
Exemplos:
# resize2fs /dev/hda3 55G
# resize2fs /dev/sda1 110G
Este comando formata fisicamente a unidade de disquete, gerando as trilhas e setores. É muito
útil para a re-utilização de disquetes.
Opções Descrição
-n Não realiza a verificação após a formatação.
tipo_drive É o tipo de drive de disquete:
H1200 – Drive de 5 1/4” com 1,2 MB.
H1440 – Drive de 3 1/2” com 1.44 Mb.
Exemplos:
# fdformat -n /dev/fd0H1440 --> Formata o Drive fd0 (A) com 1.44 Mb.
# fdformat /dev/fd1h1440 --> Formata do Drive fd1 (B) com 1,44 Mb.
Importante!
Os utilitários df (disk free) e du (disk usage) podem ser utilizadas para a visualização dos
espaços em discos e partições, utilizados no sistema. Estes comandos são muito utilizados em
scripts de backup e para verificação constante do uso do espaço em disco, além é claro dos
comandos relacionados ao controle de quotas de disco por usuários e grupos.
O utilitário dumpe2fs pode ser utilizado para informar detalhes mais específicos dos Filesystems
do sistema. Ele apresenta uma série de informações sobre o status e a situação real dos blocos,
superblocos, datas de montagem, última verificação, etc. É muito útil para o acompanhamento da
saúde dos Filesystems do sistema.
O RAID – Redundant Array of Independent Disks, que significa Arranjo Redundante de Discos
Independentes é uma forma de se obter maior segurança no sub-sistema de discos.
Existem basicamente dois conceitos que são utilizados pelas ferramentas que implementam o
array de discos, que são: espelhamento de dados e a divisão de dados (data striping). Nestes
conceitos então nós temos o Espelhamento de Discos, também denominado de Raid nível 1 e a
Distribuição de Dados, ou Data Striping, que é denominada de Raid nível 5, caso esta última divida
os dados em discos distintos, mas mantenha a integridade via paridade.
Existem outras definições mais profundas com relação aos Array de Discos, entretanto, como as
principais inovações nesta área da tecnologia estão basicamente empregadas diretamente em
placas de RAID e/ou poderosas interfaces HBA, não haverá necessidade e aprofundamento, pois o
Raid que iremos implementar será baseado em software.
O sistema de Raid no GNU/Linux que apresentaremos será baseado na ferramenta mdadm que
está contida no pacote de mesmo nome. Há também o pacote raidtools que apresenta outras
alternativas de comandos e, caso necessário, você também poderá instalar no sistema.
1- Verificar se o pacote mdadm está instalado no sistema, caso contrário o mesmo deverá ser
instalado:
# apt-get install mdadm
2- Se você desejar ver a sincronização dos discos na criação do Array, execute a seguinte linha
de comando:
# while [ 1 ]; do clear; cat /proc/mdstat > /dev/tty10; sleep 1; done;
Importante:
Se no sistema não existirem os devices de Array em /dev, ou seja, os dispositivos md0,
md1,..md15, então deverão ser criados manualmente, conforme segue:
a- Copiar o comando MAKDEV do diretório /dev para o diretório /tmp.
b- Executar o comando: /tmp/MAKDEV md
c- Mover os arquivos md* para o diretório /dev: # mv /tmp/md* /dev.
7- Crie um ponto de montagem chamado array para este novo dispositivo em /mnt:
# mkdir /mnt/array
Neste sentido deve então haver uma prioridade na carga dos processos e no caso do GNU/Linux,
assim como nos sistemas UNIX, esta prioridade é dada ao processo init Ele será o primeiro
processo carregado no sistema, sendo portanto o processo pai de todos os demais e não pode ser
interrompido.
No momento de carga, a BIOS procura na Master Boot Record o programa responsável pela carga
do sistema operacional. Os programas de carga utilizados são o LILO (Linux Loader) ou o GRUB
(Grand Unifield Bootloader) e serão vistos com mais detalhes em outro capítulo.
Ao iniciar sua execução, o Kernel faz uma verificação e detecção no hardware do computador,
onde neste momento são apresentadas as mensagens dos dispositivos encontrados e/ou com
problemas.
Após o processo de detecção e verificação do hardware, o Kernel monta o root Filesystem (/) e
executa o processo init, a partir do diretório /sbin/init. Uma vez carregado o init se encarrega de
carregar todos os demais processos necessários.
O processo de carga gerenciado pelo programa init possui dois modos de trabalho. O modo de
carga BSD, ou BSD Init e o modo de carga SysV init. A maioria dos sistemas Unix do mercado e
também das distribuições Linux, utilizam o modelo de carga SysV Init, por ser mais flexível e
permitir configurações personalizadas.
Não será abordado detalhes do processo BSD init, mas os interessados podem ler o capítulo 7 do
livro “Linux – Guia do Administrador do Sistema”, escrito por Rubem E. Ferreira, da Editora
Novatec. Neste capítulo há mais informações sobre o processo de inicialização do BSD.
Na seqüência será apresentado e detalhado todo o processo de carga do SysV init, inclusive os
níveis de execução do Kernel e demais informações sobre os arquivos e scripts para a inicialização
completa do sistema.
Uma vez carregado, o Init muda o estado do Kernel para multitarefa, porém ainda ficando em
modo mono-usuário. Ele então lê o arquivo /etc/inittab, onde estão as configurações que
determinam qual é o nível de execução em que o Kernel irá ser iniciado, bem como toda a
seqüência de scripts shell que serão executados para iniciar todos os demais processos e serviços
do sistema.
Os níveis de execução definem como de fato o sistema irá funcionar e são divididos por números
de 0 à 6 mais os níveis s e S. Estas definições de níveis estão configuradas no arquivo
/etc/inittab e possuem o seguinte formato:
[id]:[níveis_execução]:[ação]:[processo]
Onde:
Campo Descrição
id Seqüência de 1 a 4 caracteres para identificar a linha (deve ser única).
níveis_execução Definem o nível de execução do Kernel, que podem ser:
Cada diretório /etc/rc?.d representa um nível de execução, por exemplo: o diretório /etc/rc2.d
possui os links simbólicos que apontam para os scripts de inicialização residentes dentro do
diretório /etc/init.d. Estes scripts então inicializam os diversos processos e serviços, que ora
estão definidos para a execução no nível 2 (rc2.d), que é um nível multiusuário.
Os links simbólicos nos diretórios /etc/rc?.d que começam com a letra “K” (kill) dizem que o
respectivo serviço será interrompido (killed), onde ele executará o script correspondente, do
diretório /etc/init.d com o parâmetro stop.
Da mesma forma, os links simbólicos que começam com a letra “S” (start) dizem que o respectivo
serviço será iniciado (start), onde então ele executará o script correspondente, do diretório
/etc/init.d com o parâmetro start.
Primeiramente são executados os scripts que iniciam com a letra “K” e depois os scripts que
iniciam com a letra “S”. Em todos os casos, a ordem de execução segue a numeração que segue
após as letras K ou S, definida para cada link simbólico.
Abaixo temos uma relação dos arquivos do diretório /etc/rc2.d, onde serão executados caso o
sistema inicialize em nível de execução 2 – multiusuário.
# ls -l /etc/rc2.d/
total 0
lrwxrwxrwx 1 root root 6 2006-02-08 17:54 K09samba -> /samba
lrwxrwxrwx 1 root root 18 2006-01-27 18:11 S10sysklogd -> ../init.d/sysklogd
lrwxrwxrwx 1 root root 15 2006-01-27 18:11 S11klogd -> ../init.d/klogd
lrwxrwxrwx 1 root root 14 2006-01-27 18:11 S12alsa -> ../init.d/alsa
lrwxrwxrwx 1 root root 13 2006-01-27 18:10 S14ppp -> ../init.d/ppp
lrwxrwxrwx 1 root root 17 2006-01-27 18:27 S18portmap -> ../init.d/portmap
lrwxrwxrwx 1 root root 15 2006-01-27 18:10 S20acpid -> ../init.d/acpid
lrwxrwxrwx 1 root root 14 2006-04-14 11:09 S20apmd -> ../init.d/apmd
lrwxrwxrwx 1 root root 16 2006-01-27 18:30 S20cupsys -> ../init.d/cupsys
lrwxrwxrwx 1 root root 16 2006-01-27 18:28 S20dbus-1 -> ../init.d/dbus-1
lrwxrwxrwx 1 root root 15 2006-01-27 18:10 S20exim4 -> ../init.d/exim4
lrwxrwxrwx 1 root root 21 2006-01-27 18:35 S20firestarter -> ../init.d/firestarter
lrwxrwxrwx 1 root root 15 2006-01-27 18:10 S20inetd -> ../init.d/inetd
lrwxrwxrwx 1 root root 17 2006-01-27 18:08 S20makedev -> ../init.d/makedev
lrwxrwxrwx 1 root root 16 2006-01-27 18:12 S20pcmcia -> ../init.d/pcmcia
lrwxrwxrwx 1 root root 20 2006-03-06 20:03 S20squidtaild -> ../init.d/squidtaild
lrwxrwxrwx 1 root root 13 2006-01-27 18:28 S20ssh -> ../init.d/ssh
lrwxrwxrwx 1 root root 16 2006-03-06 20:03 S20webmin -> ../init.d/webmin
lrwxrwxrwx 1 root root 26 2006-01-27 18:40 S20xdebconfigurator -> ../init.d/xdebconfigurator
lrwxrwxrwx 1 root root 13 2006-01-27 18:28 S21fam -> ../init.d/fam
lrwxrwxrwx 1 root root 15 2006-03-06 20:02 S30squid -> ../init.d/squid
lrwxrwxrwx 1 root root 24 2006-03-06 20:03 S31squid-prefetch -> ../init.d/squid-prefetch
lrwxrwxrwx 1 root root 13 2006-01-27 18:10 S89atd -> ../init.d/atd
lrwxrwxrwx 1 root root 14 2006-01-27 18:10 S89cron -> ../init.d/cron
lrwxrwxrwx 1 root root 16 2006-03-06 20:03 S91apache -> ../init.d/apache
lrwxrwxrwx 1 root root 13 2006-01-27 18:35 S99gdm -> ../init.d/gdm
lrwxrwxrwx 1 root root 19 2006-01-27 18:09 S99rmnologin -> ../init.d/rmnologin
lrwxrwxrwx 1 root root 23 2006-01-27 18:09 S99stop-bootlogd -> ../init.d/stop-bootlogd
Na seqüência temos um arquivo de inicialização /etc/inittab de um sistema Debian Sarge 3.1, onde
podemos ver a seqüência de execução das linhas, de acordo com as informações anteriormente
descritas.
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# Normalmente não executado, mas em caso de emergência.
z6:6:respawn:/sbin/sulogin
Algumas distribuições possuem comandos adicionais que auxiliam no processo de controle dos
scripts de inicialização. Porém, estes comandos somente procedem a execução dos scripts
propriamente ditos.
Comando Descrição
service Inicia, interrompe, reinicializa e apresenta o status dos serviços.
chkconfig Gerencia os scripts de inicialização. Adiciona ou remove serviços.
ntsysv Gerencia através de menus os scripts de inicialização.
A seqüência canônica de carga do sistema, de acordo com o padão SysV Init é a seguinte:
Como podemos ver, na distribuição Debian não é seguido completamente o padrão de inicialização
SysV Init, porém é mais simples e funcional.
13 GERENCIAMENTO DE PROCESSOS
No sistema, são entidades independentes e cada uma destas entidades possui suas permissões de
acesso e atributos, além de outras características. O controle da execução dos processos permite
a otimização da CPU e a correta utilização da memória, permitindo assim que vários processos
possam ser executados quase simultaneamente.
Em termos básicos um processo passa por vários estágios durante seu tempo de execução. Estes
estágios indicam a situação dos processos em execução e permitem assim, uma melhor gerência
sobre os mesmos.
Estado Descrição
Ready Quando o processo é iniciado pelo Init.
Running Processo que ganhou o controle da CPU e está em execução.
Waiting Processo em estado de espera, por dados de i/o por exemplo.
Zombie Processo em estado zumbi é um processo morto, porém seu processo
pai não foi informado. É também referenciado como Defunct.
A execução dos processos também recebe uma classificação formal, onde podemos diferenciar os
processos, conforme segue:
Atributo Descrição
PID É o process Identification. Identifica o processo na fila de processos. É um número
único e não pode ser repetido. O init recebe o PID 1.
PPID É o Parent Process Identification. É o PID do processo PAI que gerou o processo.
UID É o User Identification. É a identificação do usuário que criou o processo e por
conseqüência, todos os seus direitos ficam atrelados às permissões deste usuário.
GID É o Group Identification. É o GID do grupo ao qual o processo pertence.
Effective User Identification. Representa a identificação efetiva do usuário, ou seja,
para aqueles arquivos que possuem o bit SetUid ativado (passwd), onde o sistema
EUID
assume as permissões do dono do arquivo e não do usuário que chamou o programa. O
EUID nestes casos será o do dono do arquivo.
EGID É o Effective Group Identification. É a identificação efetiva do grupo, similar à
descrição do EUID para usuários.
O escalonador do Kernel possui uma ordem de prioridade para os processos. Esta ordem possui o
seguinte padrão:
- 20 = Maior Prioridade
+ 19 = Menor Prioridade
+ 10 = Prioridade Padrão
O comando nice permite executar um programa ou comando, com uma determinada prioridade,
diferente da prioridade padrão (+10). Já o comando renice permite que seja alterada a prioridade
de um processo em execução. Esta prerrogativa é concedida somente ao usuário root.
Comando Descrição
Ctrl + C Aborta um programa em execução.
Ctrl + Z Suspende um programa em execução.
& Executa um programa/script em segundo plano
Ex: # ls -l > lista_dir.txt &
Coloca um processo em segundo plano
Exemplo: # vi
bg Ctrl Z
[1] + Stopped vi
bg %1
[1] + vi
fg Coloca um processo em primeiro plano. (inverso do comando bg)
Exibe os jobs em execução pelo Shell.
Sintaxe: jobs [opções]
jobs Opções:
-l Exibe nome e número de cada processo.
-s Exibe o nome de cada processo.
-p Exibe o número de cada processo.
Exibe informações sobre os processos.
Sintaxe: ps [opções]
Opções:
-A Exibe informações de todos os processos (similar à opção e).
ps a Exibe informações de processos de outros usuários.
u Exibe usuário e a hora de início de cada processo.
x Exibe processos não associados à terminal (exemplo: daemon).
-e Exibe todos os processos de forma resumida.
-f Exibe uma lista completa dos detalhes do processo (full list).
Veja mais informações no manual on-line Exemplo: # man ps
Exibe os processos em forma de uma árvore hierárquica.
Sintaxe: pstree [opções] [pid]
Opções:
pstree -a Exibe os argumento da linha de comando do processo.
Comando Descrição
-c Não compacta as sub-árvores (lista toda a hierarquia).
-l Lista detalhada (long list).
-n Classifica processos pelo ID ao invés do Nome do processo.
-p Mostra os aids dos processos.
Exibe processos com maior utilização de CPU, por faulhes. As informações são
apresentadas em tempo real. O comando atualiza a tela a cada 3 segundos, mas
você pode alterar este tempo através da opção -d <n> na linha de comando, onde
n é o tempo em segundos para atualizar a tela.
Comandos digitados dentro da execução do top:
top s=Altera o tempo de refresh em segundos
P=Ordena pelo uso de CPU.
M=Ordena pelo uso de memória.
A=Ordena por tempo em memória.
z=Muda a cor.
Z=Configura as cores.
k=Cancela um processo pelo PID.
free Apresenta a quantidade de memória livre e utilizada pelo sistema
vmstat Apresenta as estatísticas de utilização da memória virtual do sistema.
Executa um processo com prioridade diferente da padrão (+10).
Sintaxe: nice <prioridade> <comando>
nice Opções Descrição
prioridade de -20 até +19 (-20 é a mais alta e +19 a mais baixa).
comando Comando a ser executado com a prioridade especificada.
Exemplo: # nice -3 “fsck /dev/hda3”
Modifica a prioridade de um processo em execução.
Sintaxe: renice <prioridade> [opções]
Opções Descrição
renice <prioridade> -20 até +19
-p <PID> Altera prioridade para o processo com o PID especificado.
-u <usuário> Altera prioridade para todos os processos do usuário.
-g <grupo> Altera prioridade para todos os processos do grupo.
Exemplos:
# renice +4 -u tux
#renice -5 -g curso
Comando Descrição
Exibe de forma mais elaborada as informações dos processos em execução,
apresentando a utilização das memórias físicas e virtual e as cargas de
htop
processamento em todas as CPUs detectadas pelo Kernel.
Finaliza um processo pelo PID.
Sintaxe: kill [sinal] <PID>
Opções Descrição
kill -n Sinal a ser enviado ao processo com o PID informado onde:
0 = Saída normal do programa.
1= -HUP, faz o programa re-ler seus arquivos
2= Interrupção de teclado (ctrl + c)
3= Interrupção de teclado (ctrl + \).
9= Cancela incondicionalmente o processo.
15=Cancela o processo de forma normal.
Exemplos: # kill -9 `lsof -t -u tux` --> cancela todos os processos do usuário
tux.
Finaliza processos pelo nome.
Sintaxe: killall [sinal] <nome_processo>
Opções Descrição
-n Sinal a ser enviado ao processo com o nome_processo informado
onde:
killall
0 = Saída normal do programa.
1= -HUP, faz o programa re-ler seus arquivos (flush)
2= Interrupção de teclado (ctrl + c)
3= Interrupção de teclado (ctrl + \).
9= Cancela incondicionalmente o processo.
15=Cancela o processo de forma normal.
Exemplo: # killall -9 httpd --> Cancela todos os processos httpd (apache).
Gerenciadores de boot são programas que ficam residentes na Master Boot Record – MBR e
possuem a finalidade de carregar o sistema operacional em memória. No sistema GNU/Linux
existem dois programas para esta finalidade, o LILO - Linux Loader e o GRUB – Grand Unified
Bootloader.
Até onde sabemos, somente o Grub está sendo mantido pelo comunidade mundial. O Lilo está em
processo de descontinuidade, entretanto, a situação atual do sistema é funcional e atende às
necessidades dos sistemas.
O Grub possui mais facilidades, está mais atualizado e permite, por exemplo, definir uma senha
para o acesso às configurações de boot, não permitindo que pessoas, mesmo com acesso físico aos
setores, possam editá-lo. É uma segurança a mais ao sistema.
O LILO é um dos programas mais antigos do GNU/Linux, mas ainda algumas distribuições o
mantém devido ao amplo conhecimento deste aplicativo pela comunidade de software livre, o que
facilita muito o suporte.
O LILO é um programa dividido em duas partes. A primeira fica residente na MBR e a outra no
disco rígido. A divisão em dois arquivos é necessária pois o espaço disponível na MBR é muito
pequeno e não caberia todo o sistema.
As configurações do LILO ficam residentes no arquivo /etc/lilo.conf. Este arquivo possui seção
global, seções por imagem e opções de Kernel.
As opções globais configuram o sistema LILO como um todo. As seções por imagem se referem às
configurações específicas de cada sistema operacional instalado na máquina. As opções de Kernel
são necessárias para a eventual passagem de parâmetros ao Kernel no momento de sua chamada
para carga. As opções configuradas nas seções por imagem, têm precedência sobre as opções
globais.
Opções Globais
timeout=<segs> Tempo de espera pelo LILO para a carga do sistema
default.
prompt Libera um prompt para u usuário escolher o sistema.
boot=<dispositivo> Nome do dispositivo, ou partição que contenha o setor de
inicialização. Se omitido, será lido o dispositivo que
contenha o root Filesystem.
Opções de Kernel
Append=<string> Parâmetros de hardware passados ao Kernel.
ramdisk=<tamanho> Se necessário definir um disco em RAM. Se não
informado, será utilizado a definição do Kernel a ser
carregado.
root=<dispositivo> Indica qual partição deverá ser montada como raiz.
read-only Monta o root Filesystem em modo somente leitura.
read-write Monta o root Filesystem em modo leitura-escrita.
message=/boot/mensagem.txt
prompt
timeout=100
single-key
Devido à sua grande flexibilidade o GRUB está sendo adotado por cada vez mais distribuições do
GNU/Linux. É possível, por exemplo, buscar imagens do Kernel pela rede, por cabos seriais,
suporta sistemas de discos rígidos e terminais remotos.
Opções Descrição
timeout=<segs> Tempo de espera para seleção, caso contrário carrega o sistema default.
default=<nro_imagem> Define o número da imagem default a ser carregada.
fallback=<nro_img> Define a imagem alternativa, caso a default não consiga carregar.
color=<nro_cores> Define o número de cores a serem utilizadas no menu do Grub.
foreground=<hexa> Define a cor de primeiro plano.
background=<hexa> Define a cor de fundo.
splashimage=<arq> Informa o arquivo a ser utilizado como imagem de papel de parede.
password=<senha> Senha de acesso aos comandos do Grub.
Pode ser gerada via grub-md5-crypt.
hiddenmenu Esconde o menu do Grub até que seja pressionada a tecla ESC. Se o
tempo de timeout expirar, então o sistema default será iniciado.
title=<nome> Define um nome para a imagem a ser carregada. Ex. Linux, Kernel2.6.8
root=(hd?,pt) Inform qual hd (?) e qual partição (pt) da imagem a ser carregada.
Exemplo: root (hd0,0), root (hd1,2).
kernel=<dir_img> Informa o caminho da imagem do Kernel. Exemplo:
/boot/vmlinuz-2.6.8-2-k7 root=/dev/hda1 rw
initrd=<dir_initrd> Informa o caminho para a imagem do tipo initrd, a qual contém os
módulos do Kernel, gerados no processo de compilação. Exemplo:
Opções Descrição
initrd /boot/initrd.img-2.6.8-2-k7.
chainloader <arq> ou +1 Define um arquivo (arq) a carregar de forma encadeada ou o primeiro
setor da partição +1 (somente para DOS/Windows).
## default num
# Set the default entry to the entry number NUM. Numbering starts from 0, and
# the entry number 0 is the default if the command is not used.
#
# You can specify 'saved' instead of a number. In this case, the default entry
# is the entry saved with the command 'savedefault'.
default 0
timeout 5
# Pretty colours
color cyan/blue white/blue
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
title Debian GNU/Linux, kernel 2.6.8-2-686
root (hd0,0)
kernel /boot/vmlinuz-2.6.8-2-686 root=/dev/hda1 ro
initrd /boot/initrd.img-2.6.8-2-686
savedefault
boot
Para utilizar e atualizar as configurações do GRUB e proceder sua cópia para o setor de boot,
execute:
# grub-install /dev/hda
Para configurar um papel de parede diferenciado para ser apresentado no menu de inicialização do
GRUB, a imagem deve possuir as seguintes características:
- formato .xpm
- 14 cores
- resolução de 640x480
- deve ser compactada com gzip.
Exemplo: # gzip -9 imagem.xpm.
Copiar então a imagem acima para o diretório /boot/grub e atualize suas referências no arquivo
/boot/grub/menu.lst.
A base de trabalho do PAM é baseada em serviços. Os programas que se utilizam do pam definem
seu próprio nome de serviço e seu respectivo arquivo de configuração. O programa Login, por
exemplo, define um serviço chamado login e seu arquivo de configuração na estrutura do PAM é o
/etc/pam.d/login e é deste modo para os demais serviços baseados no PAM.
As configurações dos arquivos do PAM possuem uma sintaxe definida e para que os módulos
funcionem corretamente é preciso obedecer e entender o que faz cada linha dentro destes
arquivos.
Flag Descrição
Controle
required Indica que o módulo é requerido e não pode falhar, ou seja, no caso de um usuário
se autenticando, este deve passar nesta etapa. Se falhar, o usuário não receberá
mensagens até que todos os outros módulos do mesmo tipo sejam verificados.
requisite indica que o módulo é requerido para que a autenticação seja bem-sucedida.
Flag Descrição
Controle
Entretanto, se ocorrer uma falha, ou seja, o usuário não passar nesta etapa, ele é
notificado imediatamente, indicando o que falhou.
sufficient Indica que se houver falha na autenticação, não implica em falhar todo o processo
de autenticação, ou seja, é suficiente mas não obrigatório, pois se a autenticação
sufficient for bem sucedida e os módulos anteriores com required obtiveram
sucesso, os demais módulos do mesmo tipo não serão executados.
optional Significa que se um módulo deste tipo falhar, não implica na falha do processo de
autenticação. Este módulo é necessário para se ter uma autenticação bem
sucedida, quando os módulos anteriores falharem, ou seja, ele é á última fronteira
de execução, se todos os anteriores tiverem falhado.
include Permite a inclusão de outros arquivos de configuração utilizados no PAM.
Abaixo temos alguns dos principais módulos do PAM que são utilizados no dia-a-dia, dentro das
configurações de segurança dos servidores. Estão relacionados os que foram encontrados, porém
qualquer pessoa que conheça um pouco de programação, poderá desenvolver seu próprio módulo do
PAM.
Módulo Descrição
pam_securetty Controla o login em terminais seguros para o root. Verifica no arquivo
/etc/securetty se o terminal do root, em processo de login, está contido neste
arquivo. Para demais usuários retorna como sucesso. Deve ser utilizado com o
Flag required.
pam_nologin Desabilita o login de qualquer usuário que não seja o root, se e somente se,
existir o arquivo /etc/nologin.
pam_cracklib Este módulo é utilizado somente no módulo passwd e faz verificações
relacionadas à senha utilizada, por exemplo, se a senha é uma senha forte, se é
uma senha já utilizada, etc. Esta verificação é realizada antes que a senha seja
alterada.
Exemplos com os parâmetros:
...pam_cracklib.so retry=3 minlen=8 difok=3
pam_pwdb É um modo genérico para autenticação no PAM. Ele solicita usuário e senha e
faz as verificações pertinentes Aceita vários parâmetros: use_first_pass,
try_first_pass, use_authtok, md5, shadow,nullok, debug. Nos sistemas Debian
este módulo não é instalado por default.
pam_whell Este módulo somente permite o login de usuários que pertençam ao grupo do
root (gid=0). Qualquer outro usuário não terá acesso. Se utilizado com o
parâmetro “group=suporte” somente permite login dos usuários membro deste
grupo.
pam_unix É o módulo para autenticação padrão do Unix/Linux. Ele solicita as chamados
do sistema para verificação da autenticação e informações de contas de
usuários, obtidas dos arquivos /etc/passwd e /etc/shadow.
Módulo Descrição
pam_time Faz verificações no arquivo /etc/security/time.conf para permitir o não o login
do usuário.
pam_mkhomedir É usado para criar o diretório home dos usuários, quando estes estão em bases
centralizadas como no SAMBA, Ldap, etc. Exemplo:
... pam_mkhomedir.so skel=/etc/skel/ umask=0022
pam_access Permite ou não o login de usuários, baseado nas configurações do arquivo
/etc/security/access.conf.
Arquivo /etc/pam.d/login
auth requisite pam_securetty.so
auth requisite pam_nologin.so
auth required pam_env.so
@include common-auth
account requisite pam_time.so
account required pam_access.so
@include common-account
@include common-session
session optional pam_motd.so
@include common-password
Arquivo /etc/pam.d/gdm
#%PAM-1.0
auth requisite pam_nologin.so
auth required pam_env.so
@include common-auth
@include common-account
session required pam_limits.so
@include common-session
@include common-password
Serão apresentados os comandos AT e Crontab, que são os mais tradicionais e também oferecem
todos os recursos necessários para o agendamento de tarefas repetitivas no ambiente, como por
exemplo, backups e rotação de Logs.
16.1 O Comando at
O padrão e a existência do arquivo /etc/at.deny, o qual vêm contido com todas as contas de
serviços do sistema, ou seja, todos os usuários que porventura se logarem no sistema, poderão
agendar tarefas.
Onde:
Opções:
-m Envia e-mail ao usuário avisando que o comando foi executado.
-l Lista os trabalhos na fila de execução do comando at
-f <arq> Lê os comandos do arquivo arq para execução.
-d <job> Exclui o comando agendado.
Exemplos:
# at 19:40 05/04/2006
> ls -lrt /var/log
pressione <Enter>
pressione <Ctrl> + <D>
# at -f /home/suporte/agenda.sh 10:40 05/08/2006
Para que o comando at esteja funcional no sistema é preciso que o daemon atd esteja executando.
Verifique no sistema, através do comando ps -e | grep Atd, bem como se está no script de
inicialização de serviços em /etc/init.d/atd.
Da mesma forma que o comando at, o sistema de agendamento baseado no Cron (deus do tempo na
mitologia Grega) necessita de um daemon para seu funcionamento. Este daemon é o cron.
O sistema Cron possui duas formas de trabalho. Uma é a forma de usuário, onde os usuários
podem agendar tarefas pessoais e que afetam somente seus domínios. A outra forma de trabalho
é baseado no arquivo de configuração /etc/crontab, o qual é o principal meio para agendamento de
tarefas administrativas no sistema.
Opções: Descrição
-u <usuário> <arq> Nome do usuário para o qual o arquivo (arq) crontab será usado.
-u <usuário> -e Edita o arquivo de comandos.
-l Lista os comandos do arquivo crontab.
-r Deleta o agendamento.
Ao chamar o crontab com os comandos apropriados, será aberto na verdade um editor de textos
padrão no sistema (vi) para que você edite o arquivo de agendamento.
Este arquivo possui o seguinte formato, com 6 (seis) colunas, separadas por, pelo menos um
espaço, ou tabulação:
Exemplo:
$ crontab -e
30 20 * * * “ls -l /etc/*.conf > /tmp/arqs_confs.txt”
Para realizar agendamentos no sistema, de forma que fique configurado para execução de acordo
com definições do administrador, o daemon crond se utiliza do arquivo /etc/crontab, o qual
contém as definições gerais de agendamento.
A sintaxe deste arquivo é semelhante à dos arquivos de agendamento dos usuários, porém agora
engloba um campo a mais, o qual solicita o nome do usuário com o qual o crond irá executar o
comando.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
Se existir algum sistema operacional que nasceu para trabalhar em rede, este sistema é o UNIX,
e por conseguinte o GNU/Linux.
Desde os primórdios de sua história, o UNIX já nasceu testando o protocolo TCP/IP, pois neste
sistema é que a pilha de protocolos teve suas funções básicas implementadas. Daí por diante, a
evolução dos diversos protocolos que compõem a pilha TCP/IP sempre foram implementadas nos
sistemas UNIX e GNU/Linux.
Neste contexto, o suporte pelo GNU/Linux aos protocolos TCP/IP é completo e apresenta todas
as funcionalidades e aplicativos relacionados.
É importante porém, uma pequena introdução nos conceitos gerais de rede e do protocolo TCP/IP
para que fiquem elucidadas possíveis dúvidas sobre as relações entre os modelos RM-OSI e a
pilha de protocolos TCP/IP, além de algumas características importantes deste último.
Abaixo temos as definições formais das camadas de comunicação dos protocolos, no modelo de
referência OSI:
É importante lembrar que, somente os protocolos oficiais da OSI é que seguem o modelo completo
das camadas acima. Na verdade e como o próprio nome nos diz, este é um modelo de referência.
Na arquitetura dos protocolos TCP/IP, o modelo de camadas é um pouco diferente, não tendo
algumas definidas como no modelo de referência, mas estas estão na verdade englobadas em
outras camadas.
Pela figura anterior podemos notar que a pilha de protocolos TCP/IP implementa as camadas de
referência OSI em apenas quatro (4), entretanto, todas as funcionalidades necessárias à
comunicação estão presentes.
No lado direito da figura podemos ver alguns protocolos que compõem a switch TCP/IP e também
algumas aplicações e protocolos que se utilizam dos serviços de rede desta arquitetura.
Os endereços IPs são também divididos em classes de endereçamento, tendo também algumas
faixas de endereços reservadas e outras que são consideradas inválidas para a comunicação
global, ou seja, na Internet.
Cl 0 7 8 15 16 23 24 31
A 0 Rede Host
B 0 1 Rede Host
C 0 0 1 Rede Host
D 0 0 0 1 Endereço de MultiCast
E 0 0 0 0 1 Endereços Reservados
Apenas as Classes (Cl) A, B e C acima definidas podem ser utilizadas para endereçamento de
redes e hosts. A classe D é reservada para tráfego multicast. Este tipo de tráfego é utilizado nas
comunicações entre servidores de mídia e estações de recepção.
De acordo com a RFC 1918, foram definidas faixas de endereços IPs que não podem ser utilizadas
na Internet, mas somente em redes privadas. As faixas são as seguintes:
Classe Faixa início Faixa fim
A 10.0.0.0 10.255.255.255
B 172.16.0.0 172.31.255.255
C 192.168.0.0 192.168.255.255
Os endereços de rede no protocolo TCP/IP, além das características inerentes à sua formação,
possuem também definições importantes que podem alterar o comportamento das comunicações
entre o computador e a rede e até mesmo entre os processo.
Endereço de Loopback
O endereço 127.0.0.1é chamado de Endereço de Loopback. Ele é utilizado para comunicação no
mesmo host, pelos seus processos, sem necessitar gerar tráfego na rede. Nos sistemas
UNIX/Linux é definida a interface “lo” e nesta interface é adicionado o endereço de Loopback
Endereço de Rede
Com foi a apresentado anteriormente, os endereços IPs possuem uma divisão para endereçar a
rede e outra para endereçar os hosts (computadores). Um endereço que possui todos os bits da
Por exemplo:
Endereço do host = 200.201.10.52 máscara de rede 255.255.255.0
Address: 200.201.10.52 11001000.11001001.00001010. 00110100
Netmask: 255.255.255.0 11111111.11111111.11111111. 00000000
Network: 200.201.10.0 11001000.11001001.00001010. 00000000
Podemos ver pelos bits que estão zerados na linha Network acima, que este endereço é o
endereço da rede (ou melhor, sub-rede) do computador que está configurado com o endereço
200.201.10.52, tendo como máscara de rede a definição 255.255.255.0.
Endereço de Broadcast
É o inverso do endereço de rede, ou seja, todos os bits do campo que representa os hosts serão
ligados para 1.
Este endereço é utilizado quando uma mensagem deve ser encaminhada para todos os hosts de
uma mesma rede, sem a necessidade de atravessar um roteador.
Máscara de Rede
A máscara de rede não é um endereço propriamente dito. Ela possui a finalidade de classificar as
redes em suas diversas classes, bem como sub-dividir as redes IP em redes menores.
A máscara de rede é quem acaba definindo em qual rede o host está inserido e por tabela, qual
seu endereço de Broadcast. Ela possui todos os bits de endereços da parte de rede configurados
para 1 e todos os bits de endereços da parte host configurados para 0, a não ser que se deseje
sub-dividir uma rede em sub-redes.
Regras Básicas
Deste modo, se em meu projeto eu preciso de quatro (4) sub-redes, então minha máscara deverá
ser: 255.255.255.192, pois eu emprestei 2 bits dos reservados para hosts, para criar 4 sub-
redes.
Estas configurações são muito aplicadas em vários exemplos do dia-a-dia, para aqueles que
trabalham com a administração de redes e servidores, pois é comum sempre ter que instalar novos
computadores e não haver endereços disponíveis.
1- Defina com clareza, quantos endereços IPs deverão possuir cada sub-rede;
2- Calcule a máscara de rede apropriada e os endereços de rede;
3- Agrupe, se necessário, algumas sub-redes em uma sub-rede maior;
4- Faça as conexões físicas corretamente (switchs, hubs, roteadores, etc);
5- Atribua os endereços adequados de cada sub-rede nas interfaces de rede e a
máscara de rede anteriormente definida;
6- Configure as rotas nos roteadores ou gateways.
7- Teste as comunicações entre as sub-redes e se possível, redes externas.
Exercício Prático:
1- Dado o endereço IP 192.168.0.0, crie 4 sub-redes e calcule a máscara correta para cada uma
delas. Encontre para cada sub-rede: Máscara, End. Rede, End. Broadcast e Endereços de Hosts.
3- Configure um computador em cada sub-rede para servir de roteador para todas as outras sub-
redes da sala.
Observações:
Você pode utilizar o aplicativo ipcalc para realizar os cálculos e mostrar para você todas as
informações, restando somente as configurações das interfaces de rede.
As configurações das interfaces de rede no GNU/Linux podem ser realizadas de duas formas. A
definitiva que é baseada na edição e configuração do arquivo /etc/Network/interfaces. E também
existe a possibilidade de configurar as interfaces de rede de forma on-line.
Em qualquer caso, é preciso que você tenha as seguintes informações, antes de iniciar o processo
de configura:
– Endereço IP
– Máscara de Rede
– Endereço do Gateway
– Endereço de Broadcast.
– Identificação da interface de rede (eth0, eth1, eth2....)
De posse destas informações a configuração poderá ser realizada com o comando ifconfig que é
um dos comandos de responsabilidade do administrador do sistema.
Exemplos Diversos:
Este último exemplo mostra como colocar mais de um endereço IP na mesma interface Física,
bastando somente criar um alias para a mesma interface, neste caso eth0:1.
2- Adicionando rotas:
# dhclient eth0
# dhclient eth1
18 SERVIÇO SSH
O serviço SSH (Secure Shell) implementa um canal seguro de comunicação entre um usuário
remoto e o servidor de rede. Neste canal todo tráfego é criptografado e caso alguém queira
capturar os pacotes para possíveis tentativas de quebra, não irá ter sucesso.
Este serviço é quase um padrão nas distribuições GNU/Linux porque o SSH implementa segurança
no sistema e isso sempre agrega mais estabilidade, principalmente em servidores de rede que
necessitam trabalhar com missão crítica.
Se você não optou por instalar o serviço SSH no início, ou por algum motivo o mesmo ainda não
está instalado, então os passos seguintes irão apresentar um roteiro para instalação e
configuração deste serviço.
# vi /etc/ssh/sshd_config
# fuser -v 22/tcp
# ssh suporte@10.112.11.32
19 TCP WRAPPER
O daemon tcpd é o responsável pela proteção dos servidores de rede que está protegendo,
liberando ou negando o acesso. Ele se utiliza dos arquivos /etc/hosts.allow, /etc/hosts.deny e
/etc/inetd.conf é o arquivo base dos serviços baseados no protocolo TCP/IP
Nos arquivos /etc/hosts.allow e /etc/hosts.deny é que são registrados os servidores que poderão
se conectar nos serviços configurados no arquivo base, que é o /etc/inetd.conf.
Onde:
- serviço: É uma lista de um ou mais serviços ou palavras-chave
separados por espaços ou vírgulas. O serviço deve estar
definido em /etc/services.
- computadores: É uma lista com um ou mais nomes de máquinas, ou endereços
IPs de computadores.
- comandos: São os comandos a serem executados na conexão.
Palavra-Chave Descrição
ALL Todos os computadores.
LOCAL Todos os computadores locais, ou seja, que não possuem o
caracter “.”, são válidos.
UNKNOW Todos os computadores que não possuem resolução DNS.
KNOW Todos os computadores que possuem resolução DNS.
PARANOID Derruba as conexões dos computadores, mesmo antes das
verificações de controle.
Dentro dos campos <serviço> e <computadores> a palavra EXCEPT designa uma exceção à regra.
Exemplo: ALL EXCEPT in.telnetd:
Arquivo /etc/inetd.conf:
Arquivo /etc/hosts.allow
Arquivo /etc/hosts.deny
# /etc/hosts.deny: list of hosts that are _not_ allowed to access the System
#
ALL: some.host.name, .some.domain
ALL EXCEPT in.fingerd: other.host.name, .other.domain
sshd : 192.168.200. EXCEPT 192.168.200.10
Talvez não pareça trivial, mas o sistema que gerencia toda a interface gráfica nos ambientes
UNIX e GNU/Linux é um sistema cliente/servidor. Nesta estrutura de software há um software
que é o servidor gráfico, no caso, o X Window e também os clientes destes serviços gráficos, no
caso, os gerenciadores de janelas.
Aparentemente pode parecer um tanto complicado configurar o ambiente gráficos nos sistemas
GNU/Linux, porém isso não é um fato, mas sim mais uma lenda tecnológica.
A primeira ação que temos que ter em mente é a seguinte: é preciso identificar, no mínimo, qual é
a placa de vídeo que meu sistema possui e, se possível, qual é o tipo e as características do
monitor de vídeo.
Estas informações são possíveis através do comando lspci, o qual possui a finalidade de apresentar
o hardware que o Kernel encontrou nos barramentos PCI, isso também inclui as placas AGP.
Nas distribuições da Red Hat, há o comando superprobe que mostra mais detalhes importantes
das placas de vídeo, mas não é essencial para o nosso caso.
Adotaremos como padrão de configuração o sistema gráfico Xfree86 que é a versão livre do X
Window, o qual foi desenvolvimento originalmente para sistemas UNIX no MIT.
Todas as configurações necessárias serão informadas e as telas que o aplicativo vai apresentando
também serão mostradas.
This program will create a basic XF86Config file, based on menu selections you make.
640x480 resolution. This program will ask for a pathname when it is ready to write the file.
You can either take the sample XF86Config as a base and edit it for your configuration, or let
this program produce a base XF86Config file for your configuration and fine-tune it.
Before continuing with this program, make sure you know what video card you have, and
preferably also the chipset it uses and the amount of video memory on your video card.
SuperProbe may be able to help with this.
First specify a mouse protocol type. Choose one from the following list:
1. Auto
2. SysMouse
3. MouseSystems
4. PS/2
5. Microsoft
6. Busmouse
7. IMPS/2
8. ExplorerPS/2
9. GlidePointPS/2
10. MouseManPlusPS/2
11. NetMousePS/2
12. NetScrollPS/2
13. ThinkingMousePS/2
14. AceCad
The recommended protocol is Auto. If you have a very old mouse or don't want OS support or
auto detection, and you have a two-button or three-button serial mouse, it is most likely of type
Microsoft.
If your mouse has only two buttons, it is recommended that you enable Emulate3Buttons.
Now give the full device name that the mouse is connected to, for example /dev/tty00.
Just pressing enter will use the default, /dev/mouse.
description of your keyboard. If nothing really matches, choose 1 (Generic 101-key PC)
1 Generic 101-key PC
2 Generic 102-key (Intl) PC
3 Generic 104-key PC
4 Generic 105-key (Intl) PC
5 Dell 101-key PC
6 Everex STEPnote
7 Keytronic FlexPro
8 Microsoft Natural
9 Northgate OmniKey 101
10 Winbook Model XP5
11 Japanese 106-key
12 PC-98xx Series
13 Brazilian ABNT2
14 Acer AirKey V
15 ACPI Standard
16 Advance Scorpius KI
Enter a number to choose the keyboard. --> escolha a opção 13 Brazilian ABNT2
9- Selecione um País:
1 U.S. English
2 U.S. English w/ ISO9995-3
3 U.S. English w/ deadkeys
4 Albanian
5 Arabic
6 Armenian
7 Azerbaijani
8 Belarusian
9 Belgian
10 Bengali
11 Bosnian
12 Brazilian
13 Bulgarian
14 Burmese
15 Canadian
16 French Canadian
17 Croatian
18 Croatian (US)
Please enter a variant name for 'br' layout. Or just press enter for default variant -->
Informe abnt2
12- Sistema apresenta uma tela informando da necessidade das configurações de freqüência
do monitor e demais dados.
Now we want to set the specifications of the monitor. The two critical parameters are the
vertical refresh rate, which is the rate at which the the whole screen is refreshed, and most
importantly the horizontal sync rate, which is the rate at which scanlines are displayed.
The valid range for horizontal sync and vertical sync should be documented in the manual of your
monitor. If in doubt, check the monitor database /usr/X11R6/lib/X11/doc/Monitors to see if
your monitor is there.
You must indicate the horizontal sync range of your monitor. You can either select one of the
predefined ranges below that correspond to industry- standard monitor types, or give a specific
range.
It is VERY IMPORTANT that you do not specify a monitor type with a horizontal sync range that
is beyond the capabilities of your monitor. If in doubt, choose a conservative setting.
Enter your choice (1-11): -->> Vamos tentar a opção 5 (veja seu caso).
You must indicate the vertical sync range of your monitor. You can either select one of the
predefined ranges below that correspond to industry-standard monitor types, or give a specific
range. For interlaced modes, the number that counts is the high one (e.g. 87 Hz rather than 43
Hz).
1 50-70
2 50-90
3 50-100
4 40-150
5 Enter your own vertical sync range
You must now enter a few identification/description strings, namely an identifier, a vendor name,
and a model name. Just pressing enter will fill in default names.
16- Sistema apresenta mensagem que irá solicitar informações da placa de vídeo do
computador, as quais você já possui anotadas.
Now we must configure video card specific settings. At this point you can choose to make a
selection out of a database of video card definitions. Because there can be variation in Ramdacs
and clock generators even between cards of the same model, it is not sensible to blindly copy the
settings (e.g. a Device section). For this reason, after you make a selection, you will still be asked
about the components of the card, with the settings from the chosen database entry presented
as a strong hint.
The database entries include information about the chipset, what driver to run, the Ramdac and
ClockChip, and comments that will be included in the Device section. However, a lot of definitions
only hint about what driver to run (based on the chipset the card uses) and are untested.
If you can't find your card in the database, there's nothing to worry about. You should only
choose a database entry that is exactly the same model as your card; choosing one that looks
similar is just a bad idea (e.g.a. GemStone Snail 64 may be as different from a GemStone Snail
64+ in terms of hardware as can be).
17- Sistema irá apresentar uma tela com todas as interfaces de vídeo as quais ele provê
suporte. A lista é grande, porém muitos drivers são genéricos e funcionam muito bem.
Escolha conforme seu hardware detectado.
Now you must give information about your video card. This will be used for the "Device" section
of your video card in XF86Config.
It is probably a good idea to use the same approximate amount as that detected by the server
you intend to use. If you encounter problems that are due to the used server not supporting the
amount memory you have, specify the maximum amount supported by the server.
1 256K
2 512K
3 1024K
4 2048K
5 4096K
6 8192K
7 16384K
8 32768K
9 65536K
10 131072K
11 262144K
12 Other
Enter your choice: --> Em meu caso, Opção 6 8 Megabytes de Ram de Vídeo.
20- Sistema solicita que você informe um nome para sua Placa de Vídeo.
You must now enter a few identification/description strings, namely an identifier, a vendor name,
and a model name. Just pressing enter will fill in default names (possibly from a card definition).
21- Sistema solicita qual a quantidade de bits de cores que seu sistema irá trabalhar e
informa os valores disponíveis, conforme informações anteriores.
For each depth, a list of modes (resolutions) is defined. The default resolution that the server
will start-up with will be the first listed mode that can be supported by the monitor and card.
Currently it is set to:
22- Sistema solicita quais resoluções de vídeo você deseja deixar configurado. Selecione na
ordem, pois a primeira seleção será a default.
1 "640x400"
2 "640x480"
3 "800x600"
4 "1024x768"
5 "1280x1024"
6 "320x200"
7 "320x240"
8 "400x300"
9 "1152x864"
a "1600x1200"
b "1800x1400"
c "512x384"
d "1400x1050"
Please type the digits corresponding to the modes that you want to select.
For example, 432 selects "1024x768" "800x600" "640x480", with a
default mode of 1024x768.
23- Sistema agora solicita se você deseja configurações de uma tela virtual, sendo possível
como maior do que a tela física. Não recomenda-se esta opção.
You can have a virtual screen (desktop), which is screen area that is larger than the physical
screen and which is panned by moving the mouse to the edge of the screen. If you don't want
virtual desktop at a certain resolution, you cannot have modes listed that are larger. Each color
depth can have a differently-sized virtual screen
24- Sistema informa se as configurações de Bits por cores e resolução estão Ok. Se
concordar, basta escolher a opção 4, abaixo.
For each depth, a list of modes (resolutions) is defined. The default resolution that the server
will start-up with will be the first listed mode that can be supported by the monitor and card.
Currently it is set to:
1 1 bit (monochrome)
2 4 bits (16 colors)
3 8 bits (256 colors)
4 16 bits (65536 colors)
5 24 bits (16 million colors)
Enter a number to choose the default depth. --> Escolha a opção 4 (16 bits de cores)
I am going to write the XF86Config file now. Make sure you don't accidently
overwrite a previously configured one.
27- Sistema apresenta mensagem informativa que o arquivo foi salvo e mais detalhes de
configurações necessárias.
File has been written. Take a look at it before running 'startx'. Note that the XF86Config file
must be in one of the directories searched by the server (e.g. /etc/X11) in order to be used.
Within the server press ctrl, alt and '+' simultaneously to cycle video resolutions. Pressing ctrl,
alt and backspace simultaneously immediately exits the server (use if
the monitor doesn't sync for a particular mode).
28- Abaixo segue um resumo das configurações que foram geradas anteriormente, onde
foram suprimidas todas as linhas de comentários.
Section "Module"
Load "dbe" # Double buffer extension
SubSection "extmod"
Option "omit xfree86-dga" # don't initialise the DGA extension
EndSubSection
Load "type1"
Load "speedo"
EndSection
Section "Files"
RgbPath "/usr/X11R6/lib/X11/rgb"
FontPath "/usr/X11R6/lib/X11/fonts/misc/"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/Speedo/"
FontPath "/usr/X11R6/lib/X11/fonts/Type1/"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi/"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi/"
EndSection
Section "InputDevice"
Identifier "Keyboard1"
Driver "Keyboard"
Option "AutoRepeat" "500 30"
Option "XkbRules" "xfree86"
Option "XkbModel" "abnt2"
Option "XkbLayout" "br"
Option "XkbVariant" "abnt2"
EndSection
Section "InputDevice"
Identifier "Mouse1"
Driver "mouse"
Option "Protocol" "PS/2"
Option "Device" "/dev/psaux"
Option "Emulate3Buttons"
EndSection
Section "Monitor"
Identifier "Monitor1"
HorizSync 31.5 - 37.9
VertRefresh 50-90
EndSection
Section "Device"
Identifier "Standard VGA"
VendorName "Unknown"
BoardName "Unknown"
Driver "vga"
EndSection
Section "Device"
Identifier "ATI"
Driver "ati"
#VideoRam 32768
# Insert Clocks lines here if appropriate
EndSection
Section "Screen"
Identifier "Screen 1"
Device "ATI"
Monitor "Monitor1"
DefaultDepth 16
Subsection "Display"
Depth 8
Modes "1280x1024" "1024x768" "800x600" "640x480"
ViewPort 0 0
EndSubsection
Subsection "Display"
Depth 16
Modes "1280x1024" "1024x768" "800x600" "640x480"
ViewPort 0 0
EndSubsection
Subsection "Display"
Depth 24
Modes "1024x768" "800x600" "640x480"
ViewPort 0 0
EndSubsection
EndSection
Section "ServerLayout"
Identifier "Simple Layout"
Screen "Screen 1"
InputDevice "Mouse1" "CorePointer"
InputDevice "Keyboard1" "CoreKeyboard"
EndSection
Importante:
As configurações anteriormente realizadas criaram o arquivo /etc/X11/XF86config, tendo seu
conteúdo apresentado anteriormente. As seções deste arquivo podem ser editadas diretamente,
caso se tenha algum tipo de problema e/ou incompatibilidades nas configurações.
Uma das seções mais importantes neste arquivo é a seção ServerLayout. Neste local é onde são
reunidas as informações dos Input Devices, Screens, etc para montar o servidor gráfico.
Abaixo temos, por exemplo, uma alternativa de configuração para um mouse serial:
Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "Microsoft"
Option "Device" "/dev/ttyS0"
EndSection
# dpkg-reconfigure xserver-xfree86
Com o comando anterior o script de configuração será chamado e ele irá gerar um novo arquivo
XF86config-4.
Como já temos o servidor gráfico configurado, vamos seguir em frente com a instalação de um
Gerenciador de Janelas, como o KDE, o Gnome ou o WindowMaker.
1- Instalar o WindowMaker
2- Executar o gerenciador
# startx
3- Instalar o KDE
4- Inciando o KDE
# startx
5- Para mudar a carga de qual gerenciador de janelas carregar, edite o arquivo que fica em
/root/.xinitrc alterando a linha conforme o caso (um ou outro):
6- Para que esta alteração entre em vigor para o sistema, edite o arquivo
/etc/X11/xinit/xinitrc, colocando os mesmos valores do arquivo pessoal do root. Importante
lembrar que os arquivos pessoas sempre irão sobrepor os arquivos globais, caso os dois
existam.
Não é usual manter uma configuração desta natureza, uma vez que cada gerenciador destes possui
uma enorme carga de bibliotecas e com certeza vão utilizar bastante espaço em disco.
- xdm -> É mais antigo, com poucos recursos mas já vem junto com o Xfree86.
- kdm -> É o gerenciador do KDE.
- gdm -> É o gerenciador do projeto Gnome.
Cada um destes gerenciadores pode carregar qualquer gerenciador de janelas que esteja
configurado. Não significa, por exemplo, que o gdm que é do projeto Gnome, não consiga carregar
o Gerenciador de Janelas KDE.
Responder as perguntas sobre qual o Display Manager que será o default, no caso escolher o KDM.
Deste modo o kdm irá iniciar automaticamente no terminal tty7, por default.
# /etc/init.d/kdm start
Se houver necessidade de alteração de qual display manager será o default do sistema. Edite o
arquivo /etc/X11/default-display-manager, colocando a linha:
De acordo com as informações iniciais. O X Window é uma ferramenta gráfica que trabalho em
modo Cliente/Servidor. Devido à esta característica, é possível por exemplo que uma estação com
poucos recursos, possa executar aplicações gráficas remotamente em um servidor.
O serviço Xterminal se utiliza do protocolo XDMCP para se comunicar com o servidor gráfico.
# vi /etc/kde3/kdm/kdmrc
Procurar o bloco [Xdmcp] e alterar a linha de Enable=false para Enable=true.
# vi /etc/kde3/kdm/Xaccess
Descomentar a linha:
A linha acima permite que clientes contatem os servidores gráficos para obterem uma lista com
todos os demais servidores XDM disponíveis na rede.
# X -query 192.168.0.10 :1
Onde:
-X Comando que chama o servidor X;
-query Opção para consulta ao servidor remoto;
-192.168.0.10 Endereço IP do servidor X Window remoto;
-:1 Especifica o terminal local que será utilizado, geralmente o :0 já está em uso.
Estes dois servidores que serão abordados representam duas grandes possibilidades de serviço
de impressão. O LPRng é uma evolução do antigo LPD e que já era muito estável e funcional. O
CUPS veio implementar grandes funcionalidades ao serviço de impressão, agregando até mesmo
um novo protocolo para o serviço.
21.1 LPRng
O Line Printer daemon next generation é uma evolução natural do antigo LPD – Line Printer
Daemon e possui recursos aprimorados, porém mantém os mesmos comandos do LPR.
Exemplo:
# /etc/printcap
lp: \
:lp=/dev/lp0:\
:sd/var/spool/lpd/lp:\
:mx#0:\
:if=/var/spool/lpd/lp/filter:\
:lf:/var/spool/lpd/lp/imp.log:\
:sh:\
Parâmetro Descrição
lp Device da impressora (Paralela = /dev/lp0).
sd Diretório de Spool.
mx#<n>Tamanho máximo em n blocos do arquivo a ser impresso. Se informado 0
(zero) o arquivo pode ter qualquer tamanho.
if É o filtro de impressão, na verdade o Driver da impressora.
lf Arquivo de mensagens de estado do servidor de impressão.
sh Não imprime banner.
rm Nome do computador remoto (para impressoras remotas)
rp Nome da impressora remota (Remote Printer).
O filtro de impressão é em sua maioria um shell script que faz as conversões para as linguagens
de impressoras, como a PCL ou PostScript.
#/etc/lpd.perms
ACCEPT SERVICE=* REMOTEHOST=sc7448nt004.sc.caixa
DEFAULT REJECT
#
# Para rejeitar tentativas de impressão:
# REJECT SERVICE=* REMOTEHOST=*
#/etc/printcap
rlp: \
:sd/var/spool/lpd/lp:\
:mx#0:\
:rm=sc7448nt004.sc.caixa:\
:rp=sc7448pr002:\
:if=/var/spool/lpd/lp/filter:\
:lf:/var/spool/lpd/lp/imp.log:\
:sh:\
Comando Descrição
lpr Imprime arquivos.
Exemplos: $ lpr arq1.txt $ lpr -Psc7448pr002 /home/docs/arquivo.doc
lpq Exibe a fila de impressão.
Exemplos: $ lpq -Psc7448pr002 $ lpq -Psc7448pr002 -l
lprm Remove trabalhos de impressão:
Exemplos: $ lprm -Psc7448pr002 13 tux $ lprm - (cancela todos os
trabalhos)
lpc Controla a impressora. Recebendo os parâmetros conforme exemplos:
# lpc status # lpc start # lpc stop # lpc restart
Deveremos instalar junto com o sistema, os pacotes gs e gs-esp os quais são os interpretadores
da linguagem PostScript.
Mãos à obra:
4- Se não houver suporte é possível instalar uma base de drivers do foomatic, conforme
abaixo:
# apt-get install foomatic-db-hpijs
# apt-get install foomatic-filters (provavelmente já estará instalado)
# apt-get install foomatic-filters-ppds (também já poderá estar instalado).
5- Se mesmo assim não houver suporte, nem mesmo genérico à sua impressora, procure no
site www.linuxprinting.org que poderá existir um driver mais específico.
<Location />
Encryption IfRequested
Satisfy All
Order deny,allow
Deny From All
Allow From 127.0.0.1
</Location>
<Location /jobs>
AuthType Basic
AuthClass User
Encryption IfRequested
Satisfy All
Order allow,deny
</Location>
<Location /admin>
AuthType Basic
AuthClass System
Encryption IfRequested
Satisfy All
Order deny,allow
Deny From All
Allow From 127.0.0.1
</Location>
Importante:
Muitos parâmetros de configuração não estão citados nos exemplos acima, somente os mais
relevantes. É fundamental que você procure conhecer os demais parâmetros do arquivo
cupsd.conf e verifique outras possibilidades que o sistema permite, podendo customizar ainda
mais o serviço, deixando-o conforme suas necessidades.
Será solicitado usuário e senha, onde você deverá digitar as credenciais do usuário root.
22 SERVIÇO SAMBA
Para configurar o serviço Samba é preciso antes saber qual será o papel do computador numa rede
com outros servidores Microsoft. Para efeito de ilustração e como de fato é o modelo mais
adotado no mercado, as configurações serão apresentadas para uma máquina que será um member
server de domínio, o qual será visto na rede Microsoft como mais um servidor da sua rede.
Associado ao Samba se faz necessário também a instalação do Winbind. Ele é um pacote que faz o
mapeamento de usuários e grupos do Windows para o padrão Posix do GNU/Linux. Este módulo
também provê os mecanismos de autenticação nos Domínios NT, através da utilização do NSS e do
PAM.
extensão .old
Define a prioridade do log. Com o valor ajustado para 0
(zero), o log tem a mesma prioridade de um log de
ERRO. O nível 1 (um) recebe prioridade de ALERTA, o
syslog = 0
nível 2 (dois), prioridade de AVISO, o nível 3 (três),
INFORMAÇÂO e qualquer outro nível maior, é tratado
com DEBUG.
panic action = Comando a ser executado caso ocorra algum problema
/usr/share/samba/panic-action %d com o smbd.
Torna o samba compatível, em nível de autenticação, com
o Windows NT 4.0. Pois requer inclusive, que a
security = domain
estação/servidor Linux, seja inserida no domínio, através
do comando: ' net rpc join -U usuario '.
encrypt passwords = true Força o uso de senhas criptografadas
password server = pdcserv bdcserv Informa ao SAMBA, os servidores de autenticação.
Força o SAMBA obedecer as restrições do PAM de
obey pam restrictions = yes
account e session.
client ntlmv2 auth = yes Utiliza autenticação dos clientes com NTLMv2.
client plaintext auth = no Não permite o uso de autenticação em texto puro.
invalid users = root Usuários que não estão autorizados a utilizar o serviço.
Define a conta de usuário a ser usada para acessar
guest account = nobody recursos onde usuário convidado é permitido, através do
parâmetro 'guest ok = yes'.
short preserve case = yes Mantém a nomenclatura original dos arquivos.
hide dot files = yes Oculta arquivos precedidos por '.' (ponto final).
Não permitir recursão aos diretórios informados. Neste
dont descend = /proc,/sys
caso, /proc e /sys.
socket options = TCP_NODELAY Ajusta as configurações de socket para a comunicação
SO_RCVBUF=8192 com o cliente, definindo os tamanhos dos buffers de
SO_SNDBUF=8192 comunicação.
Range permitido para mapeamento de uid's de domínio
idmap uid = 10000-150000
para uid's locais
Range permitido para mapeamento de gid's de domínio
idmap gid = 10000-30000
para gid's locais
winbind cache time = 10 Tempo limite do cache do winbind, em milisegundos.
Faz com que o winbind enumere os grupos internamente,
winbind enum groups = yes
permitindo o retorno de dados das chamadas do sistema.
Faz com que o winbind enumere os usuários internamente,
winbind enum users = yes
permitindo o retorno de dados das chamadas do sistema.
winbind use default domain = yes Se o usuário não informar DOMÍNIO, o winbind utilizará
o domínio corrente.
Caractere utilizado pelo winbind, como separador entre
winbind separator = ;
DOMINIO e usuário. Ex.: DOMINIO\X919192
template shell = /bin/bash Define o shell que será usado pelo usuário.
Diretório onde será criado o perfil do usuário. A variável
template homedir = /home/%U
%U representa o nome de usuário.
[sistemas]
comment = Diretorio restrito equipe WEB
path = /sistemas
writeable = yes
browseable = yes
force directory mode = 0775
force create mode = 0664
force user = "www-data"
force group = "www-data"
write list = @"Grupo Ambiente" DOMINIO\tux
valid users = @"Grupo Ambiente" @"Grupo opweb", DOMINIO\aluno10
Para que a estação Linux possa resolver nomes NetBIOS e utilizar usuários e grupos da rede
Windows, deve-se incluir o winbind e wins na base de pesquisa de arquivos de usuários, senhas e
grupos, editando o arquivo nsswitch.conf, presente em /etc, como segue:
# /etc/nsswitch.conf
#
passwd: files winbind
group: files winbind
shadow: compat
hosts: files dns wins
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
Para que os usuários do Domínio NT possam se autenticar nas estações Linux, algumas
configurações do PAM devem ser alteradas. Os arquivos de configuração do PAM, encontram-se
em /etc/pam.d e as bibliotecas utilizadas pelo sistema, residem em /lib/security.
/etc/pam.d/login
auth requisite pam_securetty.so
auth requisite pam_nologin.so
auth required pam_env.so
@include common-auth
@include common-account
@include common-password
session optional pam_lastlog.so
session optional pam_motd.so
@include common-session
/etc/pam.d/common-auth
auth sufficient pam_winbind.so
auth required pam_unix.so use_first_pass
/etc/pam.d/common-account
account sufficient pam_unix.so
/etc/pam.d/common-session
#
session required pam_mkhomedir.so skel=/etc/skel umask=0022
session required pam_unix.so
/etc/init.d/common-password
password required pam_unix.so nullok obscure min=4 max=8 md5
# password required pam_cracklib.so retry=3 minlen=6 difok=3
# password required pam_unix.so use_authtok nullok md5
Para inserir a estação Linux com SAMBA no domínio Windows, execute o seguinte comando:
#net rpc join -U usuário
Onde, usuário, corresponde à conta do usuário com permissão para adicionar máquinas ao Domínio
Windows.
Nas configurações do Samba, muitas vezes são utilizados parâmetros que referenciam variáveis
internas do sistema. Abaixo são apresentadas as principais variáveis utilizadas no Samba.
Variável Descrição
%h Nome do computador.
%v Versão do Samba.
%S Nome do serviço atual (compatilhamento).
%u Nome do usuário.
%g Nome do Grupo.
%H Nome do diretório pessoal do usuário (home diretório)
%m Nome da máquina cliente, via NetBios.
%L Nome do servidor Netbios.
%M Nome da Internet (FQDN) do computador cliente.
%a Sistema operacional da máquina remota.
%i O endereço IP da máquina remota.
%t Data e Hora.
Observações:
O sistema Samba é tão complexo e flexível que suas possibilidades de configurações tornam-se
complexas. Não é objetivo deste material cobrir todas as possibilidades de configurações do
Samba.
O melhor conselho no momento é, no mínimo, uma leitura atenta das configurações do Samba no
seu manual de configuração, disponível no site www.samba.org.
23 SERVIÇO DHCP
O primeiro serviço de rede que estará sendo descrito neste material será o DHCP. Ele possui a
finalidade de disponibilizar endereços IPs para as estações de rede, de forma automática. Pode
trabalhar com interfaces virtuais (alias) ou também com interfaces do tipo VLAN.
O DHCP é um pacote de software desenvolvido pelo Internet Software Consortium – ISC. Ele é
um software livre e possui pacotes para quase todas as distribuições existentes. Obedece os
padrões definidos nas RFCs rfc951, rfc2489 e rfc2485, rfc2131 e rfc2132, o que o torna um
pacote totalmente padronizado, garantindo deste modo que o serviço implementado deverá ser
compatível com qualquer cliente de rede que necessite de endereços IPs dinâmicos.
1- Instalar o pacote DHCP, caso o mesmo ainda não esteja instalado no sistema.
# apt-get install dhcp3-server
# apt-get install dhcp3-common
Ao conceder os aluguéis de endereços IPs para as estações de rede o servidor DHCPD então
grava as informações no arquivo /var/lib/dhcp3/dhcpd.leases. Veja abaixo um fragmento deste
arquivo.
# All times in this file are in UTC (GMT), not your local timezone. This is
# not a bug, so please don't ask about it. There is no portable way to
# store leases in the local timezone, so please don't request this as a
# feature. If this is inconvenient or confusing to you, we sincerely
# apologize. Seriously, though - don't ask.
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-V3.0pl1
lease 100.112.12.253 {
starts 4 2005/07/14 13:10:10;
ends 6 2005/07/16 13:05:49;
tstp 6 2005/07/16 13:05:49;
binding state free;
hardware ethernet 00:0f:ea:90:2f:f5;
uid "\001\000\017\352\220/\365";
client-hostname "MICRO1";
}
lease 100.112.56.108 {
starts 4 2006/05/04 15:25:06;
ends 6 2006/05/06 15:25:06;
binding state active;
This is an unofficial translation of the GNU General Public License into Brazilian Portuguese. It
was not published by the Free Software Foundation, and does not legally state the distribution
terms for software that uses the GNU GPL -- only the original English text of the GNU GPL does
that. However, we hope that this translation will help Brazilian Portuguese speakers understand
the GNU GPL better.
Esta é uma tradução não-oficial da Licença Pública Geral GNU ("GPLGNU") para o português do
Brasil. Ela não foi publicada pela Free Software Foundation, e legalmente não afirma os termos de
distribuição de software que utiliza a GPL GNU -- apenas o texto original da GPL GNU, em inglês,
faz isso. Contudo, esperamos que esta tradução ajude
aos que utilizam o português do Brasil a entender melhor a GPL GNU.
Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave,
Cambridge, MA 02139, USA
A qualquer pessoa é permitido copiar e distribuir cópias desse documento de licença, desde que
sem qualquer alteração.
Introdução
As licenças de muitos softwares são desenvolvidas para restringir sua liberdade de compartilhá-lo
e mudá-lo. Contrária a isso, a Licença Pública Geral GNU pretende garantir sua liberdade de
compartilhar e alterar software livres -- garantindo que o software será livre e gratuito para os
seus usuários. Esta Licença Pública Geral aplica-se à maioria dos software da Free Software
Foundation e a qualquer outro programa cujo autor decida aplicá-la. Alguns outros software da
FSF são cobertos pela Licença Pública Geral de Bibliotecas, no entanto. Você pode aplicá-la
também aos seus programas.
Quando nos referimos a software livre, estamos nos referindo a liberdade e não a preço. Nossa
Licença Pública Geral foi desenvolvida para garantir que você tenha a liberdade de distribuir
cópias de software livre (e cobrar por isso, se quiser); que você receba o código-fonte ou tenha
acesso a ele, se quiser; que você possa mudar o software ou utilizar partes dele em novos
programas livres e gratuitos; e que você saiba que pode fazer tudo isso.
Para proteger seus direitos, precisamos fazer restrições que impeçam a qualquer um negar estes
direitos ou solicitar que você deles abdique. Estas restrições traduzem-se em certas
responsabilidades para você, se você for distribuir cópias do software ou modificá-lo.
Por exemplo, se você distribuir cópias de um programa, gratuitamente ou por alguma quantia, você
tem que fornecer aos recebedores todos os direitos que você possui. Você tem que garantir que
eles também recebam ou possam obter o código-fonte. E você tem que mostrar-lhes estes termos
para que eles possam conhecer seus direitos.
Nós protegemos seus direitos em dois passos: (1) com copyright do software e (2) com a oferta
desta licença, que lhe dá permissão legal para copiar, distribuir e/ou modificar o software.
Além disso, tanto para a proteção do autor quanto a nossa, gostaríamos de certificar-nos que
todos entendam que não há qualquer garantia nestes software livres. Se o software é modificado
por alguém mais e passado adiante, queremos que seus recebedores saibam que o que eles
obtiveram não é original, de forma que qualquer problema introduzido por terceiros não interfira
na reputação do autor original.
Esta licença se aplica a qualquer programa ou outro trabalho que contenha um aviso colocado pelo
detentor dos direitos autorais informando que aquele pode ser distribuído sob as condições desta
Licença Pública Geral. O "Programa" abaixo refere-se a qualquer programa ou trabalho, e
"trabalho baseado no Programa" significa tanto o Programa em si como quaisquer trabalhos
derivados, de acordo com a lei de direitos autorais: isto quer dizer um trabalho que contenha o
Programa ou parte dele, tanto originalmente ou com modificações, e/ou tradução para outros
idiomas. (Doravante o processo de tradução está
incluído sem limites no termo "modificação".) Cada licenciado é mencionado como "você".
Atividades outras que a cópia, a distribuição e modificação não estão cobertas por esta Licença;
elas estão fora de seu escopo. O ato de executar o Programa não é restringido e o resultado do
Programa é coberto apenas se seu conteúdo contenha trabalhos baseados no Programa
(independentemente de terem sido gerados pela execução do
Programa). Se isso é verdadeiro depende do que o programa faz.
1. Você pode copiar e distribuir cópias fiéis do código-fonte do Programa da mesma forma que
você o recebeu, usando qualquer meio, deste que você conspícua e apropriadamente publique em
cada cópia um aviso de direitos autorais e uma declaração de inexistência de
garantias; mantenha intactas todos os avisos que se referem a esta Licença e à ausência total de
garantias; e forneça a outros recebedores do Programa uma cópia desta Licença, junto com o
Programa.
Você pode cobrar pelo ato físico de transferir uma cópia e pode, opcionalmente, oferecer
garantia em troca de pagamento.
2. Você pode modificar sua cópia ou cópias do Programa, ou qualquer parte dele, assim gerando um
trabalho baseado no Programa, e copiar e distribuir essas modificações ou trabalhos sob os temos
da seção 1 acima, desde que você também se enquadre em todas estas condições:
a) Você tem que fazer com que os arquivos modificados levem avisos proeminentes
afirmando que você alterou os arquivos, incluindo a data de qualquer alteração.
b) Você tem que fazer com que quaisquer trabalhos que você distribua ou publique, e que
integralmente ou em partes contenham ou sejam derivados do Programa ou de suas partes,
sejam licenciados, integralmente e sem custo algum para quaisquer terceiros, sob os termos
desta Licença.
Estas exigências aplicam-se ao trabalho modificado como um todo. Se seções identificáveis de tal
trabalho não são derivadas do Programa, e podem ser razoavelmente consideradas trabalhos
independentes e separados por si só, então esta Licença, e seus termos, não se aplicam a estas
seções quando você distribui-las como trabalhos em separado. Mas quando você distribuir as
mesmas seções como parte de um todo que é trabalho baseado no Programa, a distribuição como
um todo tem que se enquadrar nos termos desta Licença, cujas permissões para outros licenciados
se estendem ao todo, portanto também para cada e toda parte independente de quem a escreveu.
Desta forma, esta seção não tem a intenção de reclamar direitos os contestar seus direitos sobre
o trabalho escrito completamente por você; ao invés disso, a intenção é a de exercitar o direito
de controlar a distribuição de trabalhos, derivados ou coletivos, baseados no Programa.
Adicionalmente, a mera adição ao Programa de outro trabalho não baseado no Programa (ou de
trabalho baseado no Programa) em um volume de armazenamento ou meio de distribuição não faz o
outro trabalho parte do escopo desta Licença.
3. Você pode copiar e distribuir o Programa (ou trabalho baseado nele, conforme descrito na
Seção 2) em código-objeto ou em forma executável sob os termos das Seções 1 e 2 acima, desde
que você faça um dos seguintes:
b) O acompanhe com uma oferta escrita, válida por pelo menos três anos, de
fornecer a qualquer um, com um custo não superior ao custo de distribuição física do
material, uma cópia do código-fonte completo e em forma acessível por máquinas, que
tem que ser distribuído sob os termos das Seções 1 e 2 acima e em meio normalmente
utilizado para o intercâmbio de software; ou,
4. Você não pode copiar, modificar, sub-licenciar ou distribuir o Programa, exceto de acordo com
as condições expressas nesta Licença. Qualquer outra tentativa de cópia, modificação,
sub-licenciamento ou distribuição do Programa não é valida, e cancelará automaticamente os
direitos que lhe foram fornecidos por esta Licença. No entanto, terceiros que de você receberam
cópias ou direitos, fornecidos sob os termos desta Licença, não terão suas licenças terminadas,
desde que permaneçam em total concordância com ela.
5. Você não é obrigado a aceitar esta Licença já que não a assinou. No entanto, nada mais o dará
permissão para modificar ou distribuir o Programa ou trabalhos derivados deste. Estas ações são
proibidas por lei, caso você não aceite esta Licença. Desta forma, ao modificar ou distribuir o
Programa (ou qualquer trabalho derivado do Programa), você estará indicando sua total aceitação
desta Licença para fazê-los, e todos os seus termos e condições para copiar, distribuir ou
modificar o Programa, ou trabalhos baseados nele.
6. Cada vez que você redistribuir o Programa (ou qualquer trabalho baseado nele), os recebedores
adquirirão automaticamente do licenciador original uma licença para copiar, distribuir ou
modificar o Programa, sujeitos a estes termos e condições. Você não poderá impor aos
recebedores qualquer outra restrição ao exercício dos direitos então adquiridos. Você não é
responsável em garantir a concordância de terceiros a esta Licença.
Se qualquer parte desta seção for considerada inválida ou não aplicável em qualquer circunstância
particular, o restante da seção se aplica, e a seção como um todo se aplica em outras
circunstâncias.
Esta seção destina-se a tornar bastante claro o que se acredita ser conseqüência do restante
desta Licença.
8. Se a distribuição e/ou uso do Programa são restringidos em certos países por patentes ou
direitos autorais, o detentor dos direitos autorais original, e que colocou o Programa sob esta
Licença, pode incluir uma limitação geográfica de distribuição, excluindo aqueles países de forma a
tornar a distribuição permitida apenas naqueles ou entre aqueles países então não excluídos.
Nestes casos, esta Licença incorpora a limitação como se a mesma constasse escrita nesta
Licença.
9. A Free Software Foundation pode publicar versões revisadas e/ou novas da Licença Pública
Geral de tempos em tempos. Estas novas versões serão similares em espírito à versão atual, mas
podem diferir em detalhes que resolvem novos problemas ou situações.
10. Se você pretende incorporar partes do Programa em outros programas livres cujas condições
de distribuição são diferentes, escreva ao autor e solicite permissão. Para o software que a Free
Software Foundation detém direitos autorais, escreva à Free Software
Foundation; às vezes nós permitimos exceções a este caso. Nossa decisão será guiada pelos dois
objetivos de preservar a condição de liberdade de todas as derivações do nosso software livre, e
de promover o compartilhamento e reutilização de software em aspectos gerais.
AUSÊNCIA DE GARANTIAS
11. UMA VEZ QUE O PROGRAMA É LICENCIADO SEM ÔNUS, NÃO HÁ QUALQUER
GARANTIA PARA O PROGRAMA, NA EXTENSÃO PERMITIDA PELAS LEIS APLICÁVEIS.
EXCETO QUANDO EXPRESSADO DE FORMA ESCRITA, OS DETENTORES DOS DIREITOS
AUTORAIS E/OU TERCEIROS DISPONIBILIZAM O PROGRAMA "NO ESTADO", SEM
QUALQUER TIPO DE GARANTIAS, EXPRESSAS OU IMPLÍCITAS, INCLUINDO, MAS NÃO
Se você desenvolver um novo programa, e quer que ele seja utilizado amplamente pelo público, a
melhor forma de alcançar este objetivo é torná-lo software livre que qualquer um pode
redistribuir e alterar, sob estes termos.
Para isso, anexe os seguintes avisos ao programa. É mais seguro anexá-los logo no início de cada
arquivo-fonte para reforçarem mais efetivamente a inexistência de garantias; e cada arquivo deve
possuir pelo menos a linha de "copyright" e uma indicação de onde o texto completo se encontra.
<uma linha que forneça o nome do programa e uma idéia do que ele faz.>
Copyright (C) <ano> <nome do autor>
Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo sob os termos da
Licença Pública Geral GNU, conforme publicada pela Free Software Foundation; tanto a versão 2
da Licença como (a seu critério) qualquer versão mais nova.
Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER GARANTIA; sem
mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO A QUALQUER
PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para obter mais detalhes.
Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este programa; se não,
escreva para a Free SoftwareFoundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-
1307, USA.
Se o programa é interativo, faça-o mostrar um aviso breve como este, ao iniciar um modo
interativo:
Os comandos hipotéticos `show w' e `show c' devem mostrar as partes apropriadas da Licença
Pública Geral. Claro, os comandos que você usar podem ser ativados de outra forma que `show w'
e `show c'; eles podem até ser cliques do mouse ou itens de um menu -- o que melhor se adequar
ao programa.
Você também deve obter do seu empregador (se você trabalha como programador) ou escola, se
houver, uma "declaração de ausência de direitos autorais" sobre o programa, se necessário. Aqui
está um exemplo; altere os nomes:
Esta Licença Pública Geral não permite incorporar seu programa em programas proprietários. Se
seu programa é uma biblioteca de sub-rotinas, você deve considerar mais útil permitir ligar
aplicações proprietárias com a biblioteca. Se isto é o que você deseja, use a Licença Pública Geral
de Bibliotecas GNU, ao invés desta Licença.
Licenciamento de Uso
Texto extraído da apostila GNU/Linux Módulo 1 – Introdução, elaborada por Fábio da Silva
Santos, da Diretoria de Transferência Tecnológica – Centro de Computação – Unicamp – Aqui
preservados todos os seus direitos, em conformidade com a licença CCUEC constante no material
citado e aqui também presente.
Suítes de Escritórios
Koffice : O KOffice é a suíte de escritórios do KDE, bastante completa e bem mais leve que o
OpenOffice.org, ideal para uso em máquinas mais modestas e por aqueles usuários que utilizam
tão somente os recursos básicos de uma suíte de escritórios.
Internet
Navegadores (Browsers)
Mozilla Firefox : Desenvolvido pela Fundação Mozilla, o Mozilla Firefox é um browser leve,
poderoso, fácil de usar e com vários recursos. Possui versões para GNU/Linux, Windows® e
MacOS®. Entre os seus recursos estão a navegação por abas, pesquisa inteligente, controles
avançados de privacidade e segurança, acelerador de downloads, suporte a temas para
personalizar a aparência e a extensões que fornecem todo tipo de funcionalidades extras para o
navegador.
Epiphany : Navegador padrão do ambiente GNOME, desenvolvido sobre a engine Gecko, a mesma
usada pelo Mozilla. As versões novas permitem adicionar recursos ao navegador em forma de
extensões. Infelizmente ele não é compatível com as extensões do Firefox.
Lynx : Navegador para modo texto, incrivelmente leve, ideal para testes de acesso a sites e
acesso a serviços configuráveis via Web. Extremamente simples, o lynx não suporta cores e
outros recursos como renderização de tabelas e frames.
Links : O links é um navegador em modo texto como o lynx, porém com alguns recursos adicionais,
como renderização de tabelas, suporte a frames, download em background e suporte a cores.
Existe ainda uma versão modificada do links, chamada links2, que fornece a esse navegador o
suporte a imagens e mouse através de framebuffer.
Clientes de E-Mail
Evolution : Desenvolvido pela Ximian, empresa de Miguel de Icaza recentemente adquirida pela
Novell®, o Evolution é um cliente de email tão ou mais poderoso que o Mozilla Thunderbird,
rápido, seguro, fácil de usar, altamente configurável e totalmente integrado ao sistema (se o
ambiente gráfico em uso for o GNOME). Suas novas versões possuem suporte a servidores
Microsoft® Exchange e Novell® Groupwise.
Mutt : O Mutt é um cliente de email em modo texto pra *NIX. Extremamente leve pelo fato de
não utilizar interface gráfica, mas nem por isso limitado. O Mutt é extremamente poderoso. Sua
interface, ao contrário do que se possa esperar de um programa em modo texto, é bastante
intuitiva, e entre seus recursos estão a visualização de emails por threads, recurso muito útil para
quem faz parte de vários listas de discussão (comum entre usuários de GNU/Linux).
Mensagens Instantâneas
GAIM : O GAIM é muito popular entre os usuários de GNU/Linux, pela sua praticidade, velocidade
e estabilidade. Utilizando a biblioteca gráfica GTK, o Gaim oferece suporte a 7 protocolos
diferentes: AIM/ICQ, Gadu-Gadu, GroupWise, IRC, Jabber, MSN, Napster e Yahoo, além de
suportar conexões múltiplas, o que permite, entre outras coisas, que todas as pessoas que utilizam
o computador possam estar conectadas ao mesmo tempo. Outro ponto muito interessante é o
excelente controle de privacidade, onde pode-se determinar facilmente quais as pessoas que
podem conversar com você, além do excelente número de recursos de personalização da exibição
de informações, temas para personalizar sua aparência e plugins que lhe adicionam recursos.
GAIM-vv : O GAIM-vv é uma versão do Gaim com suporte a áudio e vídeo, não suportados pelo
Gaim original.
Kopete : Outro programa de mensagens instantâneas muito popular, o Kopete, assim como o Gaim,
possui suporte a diversos protocolos e conexões múltiplas. A diferença maior está na interface, na
localização das opções e nos recursos.
aMSN : Esse poderoso aplicativo é um clone do MSN Messenger da Microsoft®, muito similar
tanto na aparência quanto nos recursos. Suporta apenas o protocolo MSN, e possui suporte a
temas para personalizar a aparência e plugins para adicionar recursos.
Xchat : Excelente cliente de IRC, com diversas ferramentas para a utilização desse protocolo de
comunicação tão difundido, tais como lista de servidores, busca de canais, notificação de amigos,
gerenciador de transferência de arquivos, múltiplas conexões, além de uma interface muito bela,
com suporte a transparências e plugins/scripts.
Irssi : Cliente de IRC para modo texto, extremamente leve e versátil. Um dos seus recursos mais
úteis é o suporte ao bash completion, que completa o caminho de diretórios e arquivos
automaticamente através do uso da tecla TAB, muito útil na hora de enviar arquivos.
Multimídia
Reprodutores (Players)
XMMS : O X Multimedia System é um clone do popular Winamp para Windows®, sendo muito
compatível com esse, suportando suas skins e alguns de seus plugins. A princípio, o XMMS
reproduz apenas áudio, mas existem plugins que permitem que ele reproduza vídeo.
Amarok : Reprodutor para o KDE, extremamente poderoso, utiliza um banco de dados MySQL ou
SQLite para armazenar seus dados. Sua playlist inteligente analisa as preferências musicais do
usuário, e reproduz seqüencialmente as músicas no seu estilo preferido. Outro recurso
interessante é a busca por capas, que procura na Internet pela capa do álbum a que cada música
pertence, para que seja exibido durante a reprodução. Sua aparência é totalmente personalizável
através de skins, e possui suporte a plugins que lhe incorporam recursos adicionais.
Conversores
RipperX : O RipperX é um excelente programa para converter áudio de CD para formato digital,
com suporte a CDDB, que procura na Internet informações sob o álbum a ser convertido, como
artista e nomes das faixas. O RipperX utiliza o cdparanoia para extrair as músicas dos CD's, e
depois convertê-as para o formato escolhido (MP3, Ogg Vorbis, WMA, WAV) através do codec
apropriado.
Grip : Como o RipperX, o Grip utiliza o cdparanoia para extrair as músicas do CD, possui suporte a
CDDB e suporta diversos formatos de áudio. As diferenças maiores ficam por conta da interface.
Avidemux : Esse é, sem dúvida, um dos mais poderosos conversores multimídia que se conhece.
Leve e versátil, o avidemux pode converter entre formatos de áudio e vídeo. Possui suporte a
extração de áudio e vídeo de DVD's, pode extrair áudio de arquivos de vídeo, possui diversos
filtros, inclusive suporte a legendas, ajuste de volume, controle de cor, desentrelace e recursos
básicos de edição.
Editores
Protux : Criado por brasileiros e hoje mantido por desenvolvedores de todo o mundo, o Protux é
um software de edição de áudio profissional, desenvolvido por profissionais como engenheiros de
som, que incluem no Protux os recursos que precisam, o que o tornou uma alternativa muito
superior à maioria das soluções proprietárias da categoria, como o SoundForge®, da Sony®.
Gráficos
The GIMP : O GNU Image Manipulator Program é um dos softwares livres de maior destaque,
graças ao seu grande poder, que o tornam uma alternativa real ao onipotente Photoshop®, da
Adobe®. Dentre os seus recursos, merecem destaque os seus filtros extremamente poderosos,
além do Script-fu, que permite criar rapidamente botões, animações e todo tipo de efeito para
uso em layouts de páginas para a Web.
Sodipodi : Excelente software de desenho vetorial, cuja interface é parecida com a do GIMP,
dividida em várias janelas. O Sodipodi conta com as principais ferramentas para desenho, como
bézier e formas prontas, sendo uma boa alternativa para o CorelDRAW®, para trabalhos que não
sejam extremamente complexos.
Inkscape : Outro software de desenho vetorial que utiliza o mesmo engine do sodipodi. A
diferença principal está na interface, que no caso do Inkscape é unificada, com todas as janelas
de ferramentas dispostas em uma única janela.
básicos de desenho, além de outras ferramentas para a criação de formas de texto avançadas.
Scribus : Uma das áreas ainda pouco explorada no GNU/Linux é o DTP (Desktop Publishing), onde
encontramos o Scribus, um software poderoso que pode tranqüilamente substituir o já conhecido
(e extinto) Adobe® PageMaker®.
Visualizadores de Imagem
Emuladores
DosEmu: Emulador que permite rodar aplicações para DOS® sob o GNU/Linux.
Wine : O Wine permite rodar aplicativos para Windows® no GNU/Linux, funcionando para uma
grande quantidade de softwares comerciais como Office®, Photoshop®, Dreamweaver®, Flash® e
para uma quantidade ainda maior de jogos, entre eles o popular Counter Strike, que roda
perfeitamente no GNU/Linux através do Wine.
Cedega: O Cedega é um projeto derivado do Wine especialmente para jogos. Pode-se usar uma
versão GPL do Cedega, ou então assinar o serviço da Transgaming, que dá assistência necessária
para rodar praticamente qualquer jogo no Linux através desse emulador.
Editores de Texto
Gedit : Editor de texto do GNOME, que vem sendo desenvolvido com a tecnologia GTK+.
Apresenta uma interface gráfica amigável, suporte a abas como o Mozilla Firefox, simples de
usar, além de suporte a realce de código de várias linguagens de programação.
Kate : Editor de texto que acompanha o KDE, utiliza a biblioteca gráfica QT. Seus recursos são
mais focados para programação em si, não sendo muito diferentes dos do Gedit.
Pico : Outro editor de texto para console, mais simples de utilizar. Seus comandos são feitos pela
tecla CTRL+<letra>, sendo que há um menu na parte inferior da tela, com algumas teclas de atalho
mais usadas.
Desenvolvimento
Quanta Plus : O Quanta Plus é o aplicativo de desenvolvimento Web do KDE, com todos os
recursos principais necessários para o webmaster desenvolver desde sites simples em HTML até
complexos sistemas Web em PHP.
Bluefish : Tão ou mais poderoso que o Quanta, o Bluefish utiliza a biblioteca gráfica GTK, possui
suporte a diversas linguagens, além de ferramentas para configuração de CSS e acesso a banco de
dados MySQL.
Eclipse : IDE para desenvolvimento em Java, que oferece com amplos e inovadores recursos de
produtividade como refactoring, geração de código e muitos outros auxílios. Sua interface gráfica
é própria, o que lhe confere uma interface com o usuário muito rica de componentes gráficos sem
abrir mão do desempenho, e possui suporte a plugins que lhe conferem todo tipo de
funcionalidades extras.
Anjuta : Anjuta é uma IDE para desenvolvimento em C/C++, com muitos recursos e suporte a
integração com softwares para RAD, como o Glade.
Glade : Ferramenta para RAD (Rapid Application Development), que permite desenvolver
facilmente aplicativos gráficos para a biblioteca GTK. Utiliza várias linguagens, entre elas Python.
Seus códigos são gravados em arquivos XML, o que permite a fácil integração com outros
aplicativos de desenvolvimento, como o anjuta. Outro recurso interessante é a geração do código
em linguagem C que realiza a chamada dos componentes gráficos GTK.
jEdit : O jEdit é uma IDE de desenvolvimento para mais de 130 linguagens, suportando destaque
de sintaxe para todas elas. Desenvolvido em Java, ele roda em MacOS®, OS/2, UNIX®, VMS e
Windows®. Seu forte é o suporte a macros e plugins, desenvolvidos pelos seus usuários e
disponibilizados no site oficial do jEdit, que agilizam o desenvolvimento dos aplicativos.
Terminais Gráficos
Xterm : O terminal mais simples e minimalista, é o terminal que acompanha o XFree/X.org. Não
possui muitos recursos, sendo o seu grande atrativo a velocidade de abertura, ideal para máquinas
modestas e para usuários que costumam abrir um grande número de janelas de terminal
simultaneamente.
Aterm : O terminal usado pelo AfterStep, muito popular entre os usuários por permitir a
completa personalização, com transparências, cores de fundo, etc.
RXVT : Outro terminal minimalista. Como o Xterm, ele é presente na maior parte das
distribuições.
FreshMeat : Outro lugar parecido com esse é o FreshMeat http://freshmeat.net, que também
conta com uma grande quantidade de softwares. Se você for ver a lista de projetos mais
populares, verá grandes projetos, como o Mplayer, o MySQL, etc. Um diferencial do FreshMeat é
a seção de temas http://themes.freshmeat.net, com temas para gerenciadores de janelas.
Ferreira, E. Ruben. Linux Guia do Administrador do Sistema. Editora Novatec, Edição 2003.
Neves, Júlio Cezar, Programação Shell Linux, Editora Brasport, 5a Edição 2005.
FIM