You are on page 1of 359

LINUX

Módulo I
Princípios do Linux
Capítulo 1 – Introdução ao Linux

 História do Linux;
Introdução
 Software livre;
 Free Software Foundation;
Muitos desconhecem a real história e
origem do sistema operacional comumente
 Distribuições GNU/Linux;
chamado de Linux quando iniciam o  Distribuições livres e corporativas;
trabalho com o mesmo. Antes de
explicarmos o que é de fato o Linux, é  Distribuições from scratch e provenientes;
preciso conhecer a origem e função do
projeto GNU, assim como saber observar e
 Certificação LPI.
manipular o sistema operacional de uma
forma mais técnica e detalhada.

Um sistema operacional é formado por um conjunto de funções que, trabalhando em perfeita


harmonia, manipulam o hardware e, através de uma interface de comunicação, oferecem todos os
recursos úteis para o seu gerenciamento. Conhecer detalhadamente as camadas que envolvem um
sistema operacional é um diferencial no aprendizado.

O projeto GNU surgiu em meados de 1983, com o seu idealizador Richard Stallman, que tinha o
objetivo de criar um sistema operacional que fosse completamente livre e seguisse os padrões do
Unix, que, na época, cobrava licenças de alto custo. Cada ferramenta, função, etc. deveria seguir
esta ideologia: ser livre.

Nesse contexto, quando fazemos referência à palavra livre, é no sentido de liberdade ao código-
fonte e forma de usar o software. Essa necessidade surgiu pelo fato de que praticamente todos os
softwares da época estavam tomando o caminho oposto, ou seja, do software proprietário. Nesse
tipo de software, o usuário geralmente detém apenas a permissão de uso sobre o software, sem
nenhum acesso ao código-fonte.

O sistema GNU estava sendo desenvolvido por uma comunidade imensa, que seguiu os passos e as
ideologias de Richard Stallman. Porém, com o tempo, o projeto foi ganhando tal consistência e
volume que necessitou urgentemente de um órgão para gerenciar todo o seu desenvolvimento.
Nasceu, então, a Free Software Foundation (FSF).

Todas as ferramentas desse sistema operacional estavam sendo preparadas do zero, como o editor
de texto (Emacs), o ambiente gráfico (servidor X), compiladores (gcc, g++) e também um kernel
(GNU/Hurd). Assim, um novo sistema operacional livre surgia, mas com um detalhe muito
importante: o desenvolvimento desse sistema livre deveria seguir os padrões de sistemas
operacionais Unix, que é, sem dúvida, um padrão muito respeitado e conhecido por seu alto grau de
segurança e confiabilidade.

Certamente, muitos devem se perguntar o que houve com o Sistema Operacional GNU, que não
existe oficialmente. Para se ter um sistema operacional completo, é preciso ter todas as ferramentas
e funções em perfeito funcionamento, como no desenvolvimento de um carro, em que cada peça
terá sua função essencial e específica. Um dos grandes motivos do sistema operacional GNU não ter
sido lançado foi pelo formato do desenvolvimento do seu kernel, o GNU/Hurd, que seguiu um
modelo complexo, não se adequando ou obtendo uma estabilidade segura para assumir a posição de
um kernel maduro e confiável.

Eis que, no ano de 1991, o finlandês Linus Torvalds criou um kernel denominado Linux, o qual
pôde ser unido aos programas GNU. Dessa junção, nasceu o sistema GNU/Linux.

Costumamos nos referir aos sistemas GNU/Linux apenas como sistemas Linux, denominação que
não faz justiça aos desenvolvedores de softwares e ferramentas GNU, afinal, estamos nos referindo
apenas ao nome do kernel criado por Linus.

Os sistemas operacionais que muitos usam atualmente, através das inúmeras distribuições existentes
e muito conhecidas, têm a contribuição das diversas ferramentas e utilitários desenvolvidos pelo
projeto GNU no decorrer dos anos.

Graças ao projeto GNU, o software livre se tornou uma ideologia respeitada e seguida
mundialmente e, principalmente, defendida juridicamente, tornando-se o grande motivo para que
pessoas de toda a parte possam trocar informações e aprimorar sempre as tecnologias de software
desenvolvidas. Muitos outros projetos ainda são mantidos pelo projeto GNU, como o Gnash (Flash
Player livre), o Coreboot (BIOS em formato de software livre), cliente VOIP Skype com base em
software livre, etc.

Mais informações do projeto GNU podem ser encontradas em www.gnu.org.


GNU é um acrônimo recursivo para a frase Gnu Is Not Unix (Gnu não é Unix), fazendo uma
grande oposição ao formato proprietário que a maioria dos sistemas Unix seguia.

Free Software Foundation

A Free Software Foundation surgiu em 1985, com o propósito de organizar o projeto GNU em
formato técnico e jurídico. A FSF é uma organização sem fins lucrativos, que se mantém com a
doação de empresas que apoiam a mesma causa: defender o software livre. Hoje, o foco principal da
FSF é manter a GPL (General Public License), que é a licença utilizada para defender juridicamente
um software livre, assim como disseminar a ideologia de software livre pelo mundo. Mais
informações sobre a FSF podem ser encontradas em www.fsf.org.

Software livre

Até o momento, o termo software livre, que foi idealizado por Richard Stallman e defendido pela
Free Software Foundation através da GPL, foi muito citado. Antes de detalharmos o termo software
livre, é preciso entendermos o que é essa ideia que moveu milhões de pessoas por todo o mundo.

Primeiramente, é preciso estar atento à tradução de free software, pois a palavra free pode ter
sentidos diferentes: livre e grátis. Quando nos referimos ao software livre, estamos nos referindo à
sua liberdade e não ao preço, ou seja, o usuário terá a liberdade de estudar, executar, alterar,
melhorar, copiar e até mesmo distribuir um software livre.
Essa ideia toda foi minuciosamente detalhada em quatro tipos de liberdades, conforme veremos a
seguir:

• Liberdade número 0: É a liberdade de executar o software para qualquer


propósito ou finalidade;

• Liberdade número 1: É estudar o funcionamento do software, podendo fazer


alterações e adaptá-las conforme a necessidade. Um pré-requisito para atingir
essa liberdade é ter o acesso total ao código-fonte;

• Liberdade número 2: O usuário tem a liberdade de redistribuir cópias do


software para quem quiser;

• Liberdade número 3: Esta liberdade garante que um software que foi


aperfeiçoado possa ser redistribuído tranquilamente, beneficiando também
outras pessoas com essa melhoria. O acesso ao código-fonte é pré-requisito para atender essa
liberdade.

As 4 liberdades do Software Livre são: Executar, Estudar, Redistribuir e Modificar. Nas citações
acima a quarta liberdade não me parece muito clara.
Notei que o texto de referência foi o texto do wikipedia sobre a GPL
(http://pt.wikipedia.org/wiki/GNU_General_Public_License). Talvez o texto que aborda o mesmo
assunto contido na página do wikipedia sobre Software Livre seja mais fácil para o entendimento de
iniciantes (http://pt.wikipedia.org/wiki/Software_livre). Ou uma mesclagem deles.

A junção dessas quatro liberdades é a essência do software livre, no qual a ideia principal é sempre
prorrogar a liberdade de um software, de forma que jamais um usuário possa se apoderar de um
software livre e torná-lo algo como um software proprietário. Para tal função, existe a GPL.

GNU GPL (General Public License)

A GPL (General Public License) teve sua primeira versão (GPLv1) lançada em janeiro de 1989.

Ela foi rapidamente substituída, para correção de vulnerabilidades, pela GPL versão 2 (GPLv2),
lançada em junho de 1991. Atualmente, também temos a GPL na versão 3 (GPLv3), que foi lançada
oficialmente em junho de 2007.

A GPL, que é uma importante ferramenta jurídica criada pela Free Software
Foundation, tinha inicialmente, como principal função, defender a liberdade dos softwares
desenvolvidos pelo projeto GNU. Posteriormente, foi utilizada e empregada por centenas de outros
softwares envolvidos em projetos de terceiros e particulares por todo o mundo.

A Licença Pública Geral segue, desde a sua primeira versão, as quatro liberdades citadas
anteriormente, sendo também sua intenção poder defender o software livre de forma prorrogada. O
documento oficial da GPL, válido oficialmente como ferramenta de proteção ao software livre,
existe somente em inglês.
Outras licenças passaram a ser criadas com a finalidade de manter a defesa da liberdade do código
aberto, do conhecimento e da informação, como foi iniciado pela GPL. Algumas delas estão na
tabela a seguir:

Licença Site
GFDL (GNU Free
www.gnu.org/copyleft/fdl.html
Documentation License)
OPL (Open Publication
www.opencontent.org/openpub/
License)
CC (Creative Commons) creativecommons.org/about/licenses
BSD (Berkley Software
www.freebsd.org/copyright/license.html
Distribution)
SPL (Sun Public
java.sun.com/spl.html
License)

Nota: Para mais informações sobre as versões da GPL, acessar


http://www.gnu.org/licenses/licenses.html.

Origem do Linux

Depois de uma breve introdução sobre o projeto GNU, que tinha a intenção de criar um sistema
operacional livre que seguisse os padrões do Unix, é hora de entender e conhecer, de uma forma
mais técnica, o que é de fato o Linux, e principalmente a sua origem.

Primeiramente, é importante entendermos que, tecnicamente falando, o Linux não é um sistema


operacional, mas sim um kernel, ou o centro de execução do seu sistema operacional. Cada sistema
operacional, independente da plataforma, possui o seu próprio kernel, com suas características
peculiares.

A história do Linux é um tanto aventureira, pois surgiu pelas mãos de um jovem


estudante Finlandês chamado Linus Benedict Torvalds, que estudava Ciências da Computação na
universidade de Helsinki.

Linus Torvalds, como é mais conhecido, começou o desenvolvimento do Linux a partir de um


projeto pessoal. Teve como base um sistema operacional Unix-like chamado Minix, que foi
desenvolvido por Andrew Tanenbaum em meados de 1987. O Minix era um sistema operacional
básico, porém seguia os padrões do Unix e era muito utilizado no meio acadêmico para auxiliar no
ensino de sistemas operacionais. Linus Torvalds iniciou seu projeto a partir do Minix e pretendia
criar um Minix melhor que este original.

Nota: Unix-like é um termo para referenciar o padrão de sistemas operacionais Unix, em que
temos um padrão robusto, seguro e estável. Basicamente, um sistema Unix-like tem o suporte
fundamental aos recursos de multiusuário e multitarefa.
Foi a partir dessa ideia que Linus Torvalds começou o desenvolvimento do seu projeto,
conseguindo, na versão 0.01, melhorar o kernel do Minix, acrescentando suporte a novos recursos,
que estavam indisponíveis na versão anterior. O nome Linux é uma junção de Linus com Unix, e foi
escolhido pela nova comunidade que estava surgindo, devido ao convite público de Linus Torvalds
ao anunciar seu projeto na Usenet (internet da época), pedindo ajuda de colaboradores.
Inicialmente, o desenvolvimento do kernel Linux foi simplesmente um passatempo para Linus
Torvalds.

O kernel Linux é um grande exemplo de software livre licenciado utilizando-se a GPL. A iniciativa
ganhou milhares de adoradores e conta atualmente com muitos desenvolvedores que trabalham de
forma minuciosa, adicionando diariamente novas funções e corrigindo bugs, através da criação de
correções (patches).

Em sua primeira versão, o kernel Linux já conseguia trabalhar em conjunto com algumas
ferramentas desenvolvidas pelo projeto GNU, como o compilador GCC e o interpretador de
comandos bash.

A junção das milhares de ferramentas desenvolvidas pelo projeto GNU com o


kernel Linux forma todas as camadas de preenchimento para se ter um sistema operacional
completo. Mais informações sobre o kernel Linux podem ser encontradas em www.kernel.org.

Distribuições GNU/Linux

Com a junção das ferramentas GNU e o kernel Linux, temos tecnicamente um sistema operacional
GNU/Linux. Em suas primeiras versões, instalar um sistema GNU/Linux era extremamente
complexo, pois era necessário praticamente instalar e compilar manualmente quase todas as
ferramentas, incluindo o próprio kernel. Ou seja, o GNU/Linux era geralmente utilizado por
usuários avançados.

Foi a partir dessa dificuldade que surgiram as primeiras distribuições GNU/Linux – também
chamadas de distros –, que tinham a finalidade de facilitar a instalação do sistema, disponibilizando
todas as ferramentas necessárias, com um kernel Linux e um instalador para automatizar o processo
de instalação. Tudo isso era disponibilizado através de um CD, disquete ou outro tipo de mídia.

Hoje, existe uma quantidade imensa de distribuições disponíveis para instalação, com praticamente
todos os níveis de dificuldade e focos específicos.

Em 1993, Patrick Volkerding reuniu o kernel Linux e diversos aplicativos, o que originou a
distribuição denominada Slackware, tida como a primeira a ser disponibilizada em CD.

A maioria das distribuições existentes hoje em dia é ramificação da Slackware e de outras três
distribuições: Debian, Red Hat e SUSE. As mais antigas e tradicionais são Slackware e Debian,
que surgiram em meados de 1993.

Nota: No site DistroWatch.Com (distrowatch.com), é possível conferir a lista de distribuições


existentes, bem como notícias e últimas atualizações de cada uma delas. O endereço também
disponibiliza links para aquisição das distros.
Distribuições livres e corporativas

A maioria das distros é mantida por comunidades de colaboradores localizados em toda parte do
mundo e por corporações. Dada essa característica, as distribuições podem ser divididas em duas
categorias: livres e corporativas. O primeiro tipo é disponibilizado por comunidades de
colaboradores que não visam absolutamente nenhum lucro sobre suas distribuições, como é o caso
das distros Slackware, Debian, Knoppix, Gentoo e centOS.

Dentro das distribuições livres, diferem-se ainda as convencionais, tradicionalmente distribuídas,


em algum tipo de mídia, para instalação em disco rígido, e as distribuições Live, cuja execução se
dá a partir da própria mídia, sem instalação no HD e, portanto, sem risco ao sistema operacional
original do servidor. Quase todos os componentes do sistema já vêm previamente configurados
numa distribuição Live, o que a torna conveniente e fácil de usar. A Knoppix é um exemplo bem
conhecido de distribuição Live, e dele surgiram o Kurumin e o Kalango, já traduzidos para o
português e adaptados à nossa realidade.

Já as distribuições corporativas, como Ubuntu, Suse, Red Hat e Mandriva, são administradas por
empresas que cobram pelo suporte prestado. É importante notar que, embora um custo esteja
envolvido, isso não contradiz os princípios da licença GPL, pois a liberdade de software é mantida.
Qualquer usuário tem acesso ao código-fonte das distribuições corporativas, de forma que o que é
vendido não é o produto, mas uma prestação de serviço de assistência.

Distribuições from scratch e provenientes (baseadas)

As distribuições também podem ser categorizadas de acordo com a maneira como são
desenvolvidas. Assim, são classificadas como from scratch (do zero) ou provenientes (baseadas).

A diferença básica entre os dois tipos é que as distribuições from scratch não derivam de nenhuma
já existente, sendo todas as suas características desenvolvidas específica e exclusivamente para elas,
como é o caso da Debian, Red Hat, Slackware e Gentoo, enquanto as provenientes baseiam-se em
alguma distribuição anterior e fazem ajustes visando a um objetivo funcional definido. Exemplos
desse tipo são os mencionados Kubuntu e Kurumin, além de Ubuntu, DreamLinux, BrDesktop e
Slax.

Red Hat Linux

A distro Red Hat Linux, criada em 1993, é a pioneira em distribuições GNU/Linux corporativas.
Tem grande aceitação por parte das empresas pelo fato de oferecer suporte técnico e grande
compatibilidade com as tecnologias mais utilizadas, tendo conquistado no mercado corporativo o
posto de uma das maiores produtoras de soluções open source. Sua interface padrão é a GNOME e
utiliza o sistema de pacotes RPM (RedHat Package Manager).

Proveniente da Red Hat Linux, a Red Hat Enterprise Linux é uma versão corporativa de distribuição
original. Outro projeto relacionado é o Fedora Project, cuja proposta é ser uma distribuição para a
comunidade.

Mandriva

Voltada para usuários tanto iniciantes quanto avançados, a distro Mandriva Linux vem da fusão das
antigas distribuições Mandrake e Conectiva. Trata-se de uma distribuição corporativa criada pela
empresa francesa Mandriva que é uma fusão ocorrida em 2005 da empresa francesaMandrake com
a brasileira Conectiva Linux. A Mandriva Linux usa o sistema de pacotes RPM e a interface KDE
como padrão.

Todas as edições da Mandriva, sejam elas pagas ou gratuitas, contam com suporte por doze meses,
no caso dos pacotes para ambiente de trabalho, ou dezoito, nos pacotes do sistema, período durante
o qual podem ser oficialmente atualizadas. Além disso, todas partem da mesma base e estão
disponíveis para todas as edições nos espelhos oficiais da Mandriva.

Nota: Para mais informações sobre essa distribuição, acessar www.mandriva.com.

Slackware

Criada por Patrick Volkerding, a distribuição livre Slackware Linux foi a primeira a ser distribuída
em CD e é um sistema Unix-like multitarefa completo de 32-bits. Utiliza o sistema de pacotes tgz,
orientado por menus, e sua interface padrão é a KDE. É compatível com 486 sistemas, incluindo os
servidores x86 mais modernos, possui extensa documentação online e um programa de instalação
fácil de usar.

A instalação completa da Slackware proporciona ao usuário o Sistema X, os ambientes de


desenvolvimentos C/C++, o Perl, um servidor de notícias, um servidor de e-mail, um servidor web e
um servidor FTP, o GNU Image Manipulation Program, o navegador Mozilla Firefox, utilitários de
rede, além de muitos outros programas.

Nota: Para mais informações sobre essa distribuição, acessar www.slackware.com.

Debian GNU/Linux
Com interface padrão GNOME, a distribuição livre Debian é atualmente uma das maiores distros e
uma das principais bases para outras distros. Ela faz uso do sistema de pacotes DEB - Debian
Package e roda em quase todos os computadores pessoais, inclusive os mais antigos, sendo que
cada nova versão normalmente fica compatível com mais máquinas.

A Debian, criada em 1993 por Ian Murdock, foi uma das primeiras distribuições criadas, com o
intuito de ser desenvolvida abertamente, seguindo os moldes do Linux em si. Embora possa ser
baixada virtualmente e instalada normalmente com uma conexão rápida, a Debian é
tradicionalmente distribuída para instalação em CDs, que podem ser comprados pelo preço somente
da mídia.

Nota: Para mais informações sobre essa distribuição, acessar www.debian.org.

Ubuntu

Baseado no Debian, o Ubuntu, cujo nome significa “Humanidade para os outros” ou “Sou o que sou
pelo que nós somos” em africano, conta com diversas ferramentas, como servidores web,
ferramentas de programação, processador de texto e leitor de e-mails. Distribuído de forma
convencional e Live, o Ubuntu é usado em laptops, desktop e servidores, e esses dois últimos
contam com atualizações de segurança gratuitas por, no mínimo, 18 meses.

O Ubuntu, que utiliza o sistema de pacotes DEB, serviu de derivação para outras distros, como
Kubuntu, Xubuntu e Lubuntu, só para citar algumas. Sua interface padrão é a GNOME ou KDE.
Esta última é adotada pela distro Kubuntu.

Nota: Para mais informações sobre essa distribuição, acessar www.ubuntu.com.

Fedora

Outro sistema operacional baseado em Linux é o Fedora, de distribuição livre.


Tem como interface padrão a GNOME e o gerenciamento de pacotes é feito, de forma padrão, pelo
software YUM. O YUM automaticamente baixa e gerencia a instalação do que for exigido pelo
sistema, administrando pacotes instalados, a atualizar ou possivelmente removíveis.

Patrocinado pela Red Hat, o Fedora tem uma média de lançamento de versões novas a cada seis
meses pelo Fedora Project, que é uma parceria formada por membros da comunidade de Software
Livre. Diversas aplicações estão disponíveis para essa distro, como players de vídeo e áudio, que é
o caso do MPlayer e do Amarok, e suites de escritório, como o OpenOffice, além de uma coleção de
jogos.

Nota: Para mais informações sobre essa distribuição, acessar fedoraproject.org.

SUSE

Uma das principais concorrentes da Red Hat, a distribuição corporativa SUSE foi adquirida pela
empresa Novell em 2003. Atua no mercado corporativo oferecendo soluções para servidores e
desktop. Sua interface padrão é a GNOME e adota o RPM como sistema de pacotes, incorporando
suas próprias variações a esse sistema. A fim de sustentar uma alta compatibilidade com produtos de
outras empresas, a SUSE cultiva muitas parcerias.

Nota: Para mais informações sobre essa distribuição, acessar www.novell.com/linux.

OpenSUSE

Com a interface padrão GNOME ou KDE e o sistema de pacotes RPM, a distro OpenSUSE é uma
distribuição livre, patrocinado pela Novell e disponibilizada gratuitamente pelo openSUSE.org,
visando a disseminar o uso do Linux. Tanto o OpenSUSE quanto as outras distribuições da SUSE
Linux Enterprise têm como ferramenta de instalação e configuração o YaST

Nota: Para mais informações sobre essa distribuição, acessar www.opensuse.org.

Knoppix

Distribuição do tipo Live, a Knoppix é executada a partir de um CD ou DVD, e pode se mostrar


produtiva para desktops, CDs educacionais, sistemas de recuperação ou ainda adaptada para versões
demo de softwares. Consiste na plataforma GNU/Linux, com detecção automática dos dispositivos
de hardware e suporte para vários periféricos, incluindo dispositivos USB e placas gráficas.

Seu sistema de pacotes é o DEB e tem como interface padrão a KDE. Em razão de sua ferramenta
de remasterização, o Knoppix contribuiu significantemente para que as distribuições do tipo Live
ganhassem popularidade. Essa ferramenta facilitou a tarefa de produzir novas distros.

Nota: Para mais informações sobre essa distribuição, acessar www.knoppix.org.


Gentoo

Gentoo é o que se chama de metadistribuição, devido à sua quase ilimitada adaptabilidade. Não só
sua interface padrão fica à escolha do usuário, como o sistema pode ser otimizado e personalizado
para praticamente qualquer aplicativo ou necessidade, provando-se eficiente como servidor seguro,
workstation de desenvolvimento, desktop profissional, sistema de jogos, e solução embutida, para
citar alguns exemplos.

O sistema operacional é baseado no Linux ou no FreeBSD e seu sistema de pacotes é o emerge, que
interage com o Portage, um sistema de distribuição de software, construção de pacotes e instalação.
Mantido por mais de 300 desenvolvedores e milhares de usuários e distribuído de forma Live, o
Gentoo conta com ferramentas de documentação, infraestrutura, engenharia de lançamento,
portagem de software e garantia de qualidade, entre outras.

Nota: Para mais informações sobre essa distribuição, acessar www.gentoo.org.

Certificação LPI

A certificação LPI é mantida pela instituição Linux Professional Institute – LPI, que foi criada em
1999 e tem sede no Canadá. A finalidade da sua criação foi elaborar uma forma de certificar os
muitos usuários que julgam conhecer e gerenciar sistemas GNU/Linux. É uma das 10 certificações
mais procuradas por profissionais da área no mundo, por ser uma certificação internacional que é
reconhecida por empresas, empregadores e profissionais do mundo de TI, além de ter grande
destaque entre outras certificações Linux.

Uma das grandes vantagens da certificação LPI em relação a outras certificações é que a mesma
segue os padrões LSB (Linux Standard Base) e procura ser neutra em relação às centenas de
distribuições existentes. A Linux Standard Base rege regras e normas que mantêm a compatibilidade
em qualquer distribuição GNU/Linux existente.

A instituição LPI é uma importante figura no mundo do software livre e open source, sendo
praticamente a primeira organização a defender e estimular o uso profissional de sistemas
operacionais GNU/Linux.

As provas são aplicadas constantemente em todo o mundo e em diversas línguas, sendo possível
realizá-las através de centros internacionais de certificação, como Paerson VUE ou Thomson
Prometric, que geralmente são centros especializados que disponibilizam provas eletrônicas. Outra
opção é prestar os exames através de provas em papel, nas instituições conveniadas à LPI.

A certificação LPI atualmente é dividida em três níveis:

 Certificação LPIC-1 (Nível 1) – Administrador Linux Júnior: Provas: 101 e 102;

 Certificação LPIC-2 (Nível 2) – Administrador Linux Pleno: Provas: 201 e 202;


 Certificação LPIC-3 (Nível 3) – Administrador Linux Sênior: Provas 301 / 302; 303; 304; 305; 306 (Nível de
especialista em determinadas áreas).

Mais informações sobre a certificação LPI podem ser encontradas em


www.lpi.org.

Tópicos para revisão do capítulo

Atente para os tópicos a seguir. Eles devem ser estudados com muita atenção, pois
representam os pontos mais importantes do capítulo.

 Um sistema operacional é formado por um conjunto de funções que, trabalhando em perfeita harmonia,
manipulam o hardware e, através de uma interface de comunicação, oferecem todos os recursos úteis para o
seu gerenciamento;

 A Free Software Foundation é uma organização sem fins lucrativos cujo foco principal é manter a GPL;

 O Linux segue os princípios do software livre, ou seja, o usuário terá a liberdade de estudá-lo, executá-lo,
alterá-lo, melhorá-lo, copiá-lo e até mesmo distribuí-lo;

 O Linux não é um sistema operacional, mas sim um kernel, ou o centro de execução do seu sistema
operacional. Cada sistema operacional, independente da plataforma, possui o seu próprio kernel, com suas
características peculiares;

 Existe uma quantidade imensa de distribuições disponíveis para instalação, com praticamente todos os níveis
de dificuldade e focos específicos, como Debian, Slackware, Reh Hat, SUSE, entre outras;

 A certificação LPI é uma das 10 certificações mais procuradas por profissionais da área no mundo, por ser uma
certificação internacional que é reconhecida por empresas, empregadores e profissionais do mundo de TI, além
de ter grande destaque entre outras certificações Linux.

1. Exercícios de Fixação

1. Assinale a alternativa que melhor representa o Software Livre?


a) Software grátis disponibilizado na internet para download.
b) Programa desenvolvido por Richard Stallman que pode ser vendido mediante sua autorização
regida pela GPL.
c) Software Livre é Linux.
d) Qualquer programa de computador que pode ser usado, distribuído, estudado e modificado de
acordo com a licença GPL.
e) Software como o Linux que é amplamente desenvolvido por uma enorme comunidade, porém
sem qualquer controle ou suporte a usuários.
Alternativa Correta: D

2. Quais as duas características das distribuições Linux?


a) Aberta e Fechada
b) Livre e Proprietária
c) Livre e Corporativa
d) Red Hat e Debian
e) GNU e Proprietária
Alternativa Correta: C

3. Qual organização sem fins lucrativos foi fundada por Richard Stallman para eliminar
restrições sobre cópia, redistribuição, estudo e modificação de programas de computadores?
a) GPL
b) FSF
c) GNU
d) LPI
e) Mandriva
Alternativa Correta: B

4. Qual foi a primeira distribuição disponibilizada em CD?


a) Red Hat
b) Mandriva
c) Conectiva
d) Slackware
e) Debian
Alternativa Correta: D

5. De acordo com seu desenvolvimento, quais são as categorias das distribuições?


a) Software Livre e Software Proprietário
b) Debian e Red Hat
c) From Scratch e Desenvolvidas do zero
d) Baseadas e Provenientes
e) From Scratch e Provenientes
Alternativa Correta: E
Capítulo 2 – Primeiros contatos com o Linux

 Características herdadas do Unix;


Introdução  Estrutura do sistema operacional;
 Shell e shell scripts;
 Bash;
No presente capítulo, aprenderemos a  Sessões;
executar comandos para realizar tarefas
básicas no sistema GNU/Linux, como, por  Inicialização, encerramento, reinicialização e
exemplo, a inicialização de uma sessão. No desligamento do sistema;
entanto, antes de executá-los, é importante
compreender as características que esse
 Comandos man e history.
sistema herda do padrão Unix, a estrutura do
sistema operacional GNU/Linux e os
conceitos de shell e bash. Este último é o interpretador de comandos comumente utilizado por
sistemas Unix-like.

Características herdadas do padrão Unix

Os sistemas GNU/Linux herdaram muitas características do padrão Unix, o que refletirá na maneira
como executaremos os comandos a partir do interpretador de comandos. O sistema operacional
MAC-OSX, da Apple, por ser Unix-like, também herda tais características.

Representação por arquivos

Esta é uma herança fundamental do sistema Unix, em que tudo que estiver presente no sistema será
representado por um arquivo. Para tanto, teremos várias classificações para tipos de arquivos, que
representarão dispositivos de armazenamento de dados, memória física, portas seriais ou paralelas,
arquivos especiais, arquivos de texto comuns, binários e até mesmo diretórios. É importante
dizermos que um diretório também é um arquivo; um arquivo especial que aponta para outros
arquivos e subdiretórios presentes dentro do mesmo.

No momento de gerenciar o sistema, é importante saber lidar com todos esses tipos de arquivos e
tomar as devidas precauções na hora de manipulá-los.
Aspecto case-sensitive

Uma característica forte em sistemas Unix-like é a presença da característica case-sensitive, em que


letras maiúsculas serão completamente diferentes de letras minúsculas, e vice-versa. No início,
quando não se tem prática e costume com essa característica, é um tanto desconfortável, mas
depois, com o domínio, ela é útil e prática. A funcionalidade case-sensitive estará presente no
sistema através de nomes de arquivos, diretórios, comandos, etc. Por exemplo, o comando LS é
completamente diferente de ls.

Permissão para executar arquivos

É outra característica fundamental, que torna o sistema mais seguro e o diferencia bastante de
sistemas Microsoft. Em sistemas Unix-like, para que um arquivo possa ser executado, inclusive
pelo administrador do sistema, deve haver, obrigatoriamente, permissões de execução. Esse arquivo
pode ser um arquivo binário de um comando qualquer, um shell script, etc. A permissão de
execução protege o sistema contra arquivos auto-executáveis e faz que os sistemas Unix-like sejam
praticamente imunes a vírus ou arquivos com funções mal-intencionadas.

Arquivos e diretórios ocultos

Por padrão, a forma utilizada para identificar arquivos ou diretórios ocultos no sistema é iniciar seus
respectivos nomes por um ponto (.). Uma vez que na linha de comandos não há como utilizar
efeitos como os usados nos ambientes gráficos, para visualizar tais arquivos ou diretórios ocultos,
basta utilizar uma simples opção com o comando de visualização ls, o qual será abordado
posteriormente neste treinamento.

Divisão em camadas

O sistema é todo dividido e trabalhado em camadas, não sendo necessária a execução obrigatória de
um ambiente gráfico, por exemplo. Teremos o kernel como o centro de execução do nosso sistema,
o qual controlará todo
o hardware e fará a interface de controle e gerenciamento dos usuários, aplicações e processos em
execução.
Superusuário (root)

O superusuário root é, por padrão, o único usuário com permissões completas de administração e
gerenciamento do sistema. Sua utilização deve ser restrita e extremamente cautelosa, exatamente
pela liberdade que o usuário root terá ao executar qualquer tipo de tarefa, como excluir um diretório
importante, por exemplo.

O login do superusuário é root e o que define esse login como superusuário não é simplesmente o
nome root, mas sim a UID (User Identification), que é o número de identificação que cada
usuário terá no sistema. O superusuário possui UID de número 0 (zero).

Aspecto multitarefa / multiusuário

Uma característica herdada dos primórdios Unix é poder executar várias tarefas ao mesmo tempo,
com vários usuários trabalhando simultaneamente no sistema.

Estrutura do sistema operacional

A estrutura de um sistema GNU/Linux é composta por porções denominadas camadas (layers). A


ilustração a seguir demonstra a estrutura em camadas do sistema operacional GNU/Linux:

Ambiente de trabalho
(Desktop environment)

DM (Display Manager)

tty1 tty2 tty3 tty4 tty5 tty6

Sistema operacional

Kernel Linux

Hardware
Para compreendermos de fato o que é esse sistema, é fundamental saber do que se trata cada uma de
suas camadas. Vejamos.

 Ambiente de trabalho (Desktop environment): Essa camada hospeda todos os programas cujo
funcionamento depende de um ambiente gráfico;

 DM (Display Manager): Aqui são gerenciados os logins na interface gráfica e selecionado o tipo de ambiente
gráfico que será executado;

 ttyn: Terminais Virtuais que interpretam os comandos introduzidos por um usuário e convertem-nos para uma
linguagem inteligível pelo computador. Nessa camada os comandos são executados e as configurações são
definidas;

 Sistema Operacional: Camada que auxilia e hospeda todos os aplicativos das camadas superiores,
mencionadas anteriormente;

 Kernel Linux: Mediadora entre as camadas superiores e o hardware, essa camada é o núcleo do sistema
operacional;

 Hardware: Layer que compreende os dispositivos do sistema disponíveis para uso, como cd-rom, teclado,
monitor, entre outros.

Shell

Shell é o mediador entre o usuário e o computador num sistema Unix-like, já que é ele o
responsável por interpretar e executar os comandos enviados por um usuário. Sua aparência é a de
um traço piscante, chamado prompt ou cursor, que fica numa linha de comandos, onde é possível
digitar comandos separados um após o outro ou vários comandos combinados na mesma linha. Um
grupo de comandos num arquivo de texto simples compõe um shell script.

Script é, resumidamente, o nome dado a qualquer programa cuja linguagem não seja compilada,
mas interpretada. Os shell scripts são muito usados, em sistemas Unix-like, em atividades
administrativas e de manutenção do sistema, uma vez que são eficientes na automação de tarefas e
podem ser usados um número ilimitado de vezes.

As instruções digitadas no shell podem ser executadas por dois níveis de usuário: super usuário
(root) e usuário comum, os quais apresentam permissões diferentes. O diretório padrão do usuário
root, administrador do sistema, é o /root, enquanto os usuários comuns usam por padrão o diretório
/home. Outra diferença entre os dois é que, antes do cursor do usuário root no shell, aparece um #,
ao passo que, para os usuários comuns, o cursor segue um $.
(Repetido, foi citado exatamente igual no tópico 2.6

Bash

O shell usado no sistema operacional GNU é chamado de bash. Hoje, ele é praticamente o padrão
em sistemas Unix-like. O bash, que é o sucessor do interpretador de comandos sh, apresenta mais
funcionalidades e praticidades na hora de realizar tarefas na linha de comandos, principalmente
quando o assunto é a interpretação de caracteres especiais.

Por se tratar de um interpretador de comandos, o bash terá diversas particularidades, como poder
ser utilizado como uma linguagem de programação para automatizar tarefas em um shell script, por
exemplo. Dominar seu funcionamento faz a diferença para o administrador.

Sessões

Uma sessão é composta por um login efetuado com sucesso por um usuário previamente cadastrado
no sistema. Esse login dará acesso direto ao interpretador de comandos padrão determinado no
sistema, que geralmente será o bash. As sessões são iniciadas através dos terminais, que são
caracterizados como terminal virtual somente em modo texto ou pseudoterminal inicializado
a partir de um ambiente gráfico. A única diferença entre eles é a forma de acesso. A seguir,
falaremos sobre esses terminais.

 Terminal virtual em modo texto

O conjunto teclado/monitor conectado à máquina compreende o que chamamos de terminal, ou


console. Por meio de terminais virtuais, o GNU/Linux permite que diversos usuários se mantenham
simultaneamente conectados, pondo em prática o aspecto multiusuário/multitarefa, característico do
padrão Unix.

Com programas como rlogin, ssh, rsh, rdesktop e telnet, podemos acessar terminais virtuais
remota ou localmente.

Um terminal virtual em modo texto é prático e rápido, pois não é necessário esperar o ambiente
gráfico carregar para iniciar uma sessão a partir do mesmo.
Geralmente, em servidores, o recurso de ambiente gráfico não está habilitado.
Em casos como esse, assim que o processo de inicialização do sistema for concluído, o primeiro
terminal estará disponível aguardando um login para início de uma sessão.

É possível ter acesso a outros terminais que trabalham de forma completamente independente. O
GNU/Linux apresenta mais de 60 terminais em modo texto, mas, por questões de consumo de
memória RAM, somente 6 são disponibilizados por padrão. Para acessá-los é muito simples. Basta
manter pressionada a tecla ALT e, em seguida, pressionar a tecla de função correspondente ao
terminal que desejamos acessar (teclas F1 até F6). Se estivermos no primeiro terminal, temos o
seguinte:

Terminal Nome Tecla de atalho para acesso


Primeiro tty1 *(CTRL+) ALT+F1
Segundo tty2 *(CTRL+) ALT+F2
Terceiro tty3 *(CTRL+) ALT+F3
Quarto tty4 *(CTRL+) ALT+F4
Quinto tty5 *(CTRL+) ALT+F5
Sexto tty6 *(CTRL+) ALT+F6

Nota: *(CTRL+): Caso o terminal padrão não seja um terminal em modo texto, é preciso utilizar
também a tecla CTRL.

Teremos, então, na primeira linha, o nome e a versão do sistema operacional, o nome do


computador e o nome do terminal em que estamos localizados.

 Pseudoterminal

Um pseudoterminal é, basicamente, um terminal virtual inicializado a partir do ambiente gráfico.


Tem a mesma função do terminal em modo texto, porém depende da execução do ambiente gráfico
para que seja carregado. Os gerenciadores de janelas, como o KDE ou o GNOME, têm aplicações
específicas que emulam um terminal no ambiente gráfico, como konsole no KDE, ou o próprio
terminal no GNOME.

Executando os primeiros comandos

Vejamos, a seguir, como executar os primeiros comandos a partir do shell do GNU/Linux, a fim de
iniciar e encerrar uma sessão, desligar e reiniciar o sistema e obter ajuda a respeito da utilização de
comandos.

Iniciando uma sessão (logon)

Depois de conhecer melhor os terminais, que são a porta de entrada para o nosso sistema, é hora de
iniciar uma sessão em modo texto (fazer o logon), pois esta exigirá, em um sistema configurado de
modo seguro, que seja feita uma autenticação com um usuário previamente cadastrado. Em
qualquer um dos terminais virtuais em modo texto, basta inserir o login e a senha, lembrando-se da
característica case-sensitive presente no sistema.

Ao digitar a senha, por segurança, nenhum caractere como o tradicional * é exibido na tela, e o
cursor não se move, porém, todas as informações digitadas estão sendo enviadas para o sistema de
autenticação. Isso garante que observadores mal-intencionados não visualizem a quantidade de
caracteres que compõe a senha.

Então, a sessão é iniciada:

Assim que a autenticação for executada com sucesso, o prompt principal do interpretador de
comandos utilizado é apresentado, e o sistema já pode ser operado.

Sobre o prompt principal citado anteriormente, teremos muitas informações caso o interpretador de
comandos seja o bash.
Caracteres como [], :, - e @ são utilizados apenas para separar informações e formar o prompt
principal. O caractere $ identifica que o usuário atual não tem permissões ou poderes de
administrador.

Para executar comandos com poderes administrativos, é necessário alterar o nível de usuário
comum para superusuário. Para isso, podemos utilizar o comando su (super user). Ao digitarmos su
na linha de comando e teclarmos ENTER, é pedida a senha do administrador. Basta que a digitemos
e, após teclarmos ENTER, teremos elevado o nível para root. Em vez de um $, teremos o caractere
#, o qual indica que o usuário agora é um superusuário.

Nota: Todas essas informações sobre o prompt principal poderão ser alteradas através de variáveis
de ambiente futuramente apresentadas.

Encerrando uma sessão (logout)

Após uma sessão em modo texto ser inicializada, é possível fechar a mesma (fazer o logout) com os
comandos logout ou exit. A ilustração a seguir exibe o shell com o comando exit digitado:

Nota: A sequência de teclas CTRL+ D também pode ser utilizada para finalizar uma sessão.

Desligando o sistema

Sob o nível de usuário root, o desligamento do computador pode ser realizado por um dos seguintes
comandos:

 shutdown –h now;
 halt;

 poweroff;

Ainda que o computador possa ser desligado diretamente pelo botão liga/desliga, sem a utilização
de nenhum dos comandos citados, esse procedimento deve ser evitado sempre que possível, pois os
programas que não forem fechados e os dados não gravados podem gerar falhas no sistema de
arquivos e perda de dados.

Dessa forma, para garantir a segurança do sistema, o usuário deve escolher um dos três comandos
de desligamento disponíveis, que automaticamente executam esses processos de encerramento da
maneira adequada. Salvar manualmente os arquivos antes do desligamento e considerar o uso de um
nobreak são outras medidas de segurança possíveis.

O comando shutdown poderá ser utilizado para desligar ou reiniciar o sistema.

Para desligar o sistema, utiliza-se a sintaxe shutdown -h <tempo>, em que <tempo> define o
momento (em minutos) em que ocorrerá o desligamento e “h” significa “halt” ou seja, desligar o
sistema.

Para desligarmos o sistema imediatamente, digitamos a seguinte linha:

shutdown -h now

Ao utilizarmos o parâmetro now, os processos atualmente executados são encerrados antes do


desligamento da máquina. Outro meio de desligar o sistema imediatamente é utilizar o valor 0
(zero).

shutdown -h 0

Para desligarmos o sistema daqui a 10 minutos, por exemplo, digitamos o seguinte:

shutdown -h 10

Para desligarmos o sistema exatamente às 5 horas da tarde, por exemplo, digitamos o seguinte:

shutdown -h 17:00

Os comandos halt ou poweroff também podem ser utilizados para desligar o sistema de forma
simples e direta, mas sem a opção de poder especificar o tempo. Em computadores antigos, o
usuário precisará apertar o botão liga/desliga, quando a mensagem power down aparecer, após o
envio do comando halt.

Reiniciando o sistema

É recomendável não reiniciar o sistema através dos botões liga/desliga e RESET, pois, como já foi
visto, o desligamento abrupto do computador pode causar não só a perda de dados não salvos
adequadamente, mas também falhas nos sistemas de arquivos. Existem comandos específicos para
reiniciar o sistema de forma segura, e os botões citados devem ser evitados e usados somente em
último caso.

Para reiniciarmos o sistema, podemos utilizar, como no desligamento, o comando shutdown. No


entanto, utilizamos o parâmetro –r (de “reboot”) em vez de –h, como mostra esta sintaxe:
shutdown -r <tempo>

<tempo> define o momento em que deve ocorrer a reinicialização. No exemplo a seguir, o


comando shutdown reiniciará o sistema daqui a 10 minutos:

shutdown -r 10

Para reiniciarmos imediatamente o sistema, digitamos a seguinte linha:

shutdown -r now

O comando reboot , ou a sequência de teclas CTRL+ ALT+ DEL, também pode ser utilizado de
forma simples para reiniciar o sistema, mas sem a opção de poder especificar o tempo. Antes de
reiniciar o sistema, todos os arquivos abertos devem ser salvos, para evitar acidentes.

Obtendo ajuda sobre comandos

Em sistemas Unix-Like, temos um recurso extremamente útil quando o assunto é obter ajuda sobre
o funcionamento de comandos com sua respectiva sintaxe e opções. Tal funcionalidade se dá ao
comando man, que é utilizado como uma fonte rápida de comando, exibindo uma página de
manual detalhada sobre o funcionamento dos principais comandos.

Sua sintaxe é a seguinte:

man <comando>

Na linha anterior, <comando> é o comando para o qual se deseja obter informações. O exemplo a
seguir oferece informações sobre o comando ls:

man ls

Histórico de comandos

Centenas de comandos podem ser armazenados pelo terminal do sistema GNU/Linux. Do ponto de
vista prático, esse recurso traz grande praticidade ao usuário, pois não é necessário redigitar
diversas vezes um mesmo comando. Para mantermos o histórico dos comandos utilizados, basta
digitarmos history na linha de comando e teclarmos ENTER. Então, por meio das teclas direcionais
para cima e para baixo do teclado, temos acesso ao histórico.
Atalhos de teclado utilizados na linha de comando

Ao digitarmos comandos no shell do sistema GNU/Linux, podemos fazer uso de atalhos de teclado
para agilizar tarefas, como apagar e copiar caracteres, mover o cursor para o local desejado, abrir
uma nova linha de comando, entre outras descritas na seguinte tabela:

Tecla ou atalho Ação


HOME ou CTRL + A Leva o cursor para o início da linha de comandos.
END ou CTRL + E Leva o cursor para o fim da linha de comandos.
BACK SPACE Apaga o caractere à esquerda do cursor.
Apaga tudo o que estiver à esquerda do cursor, porém
CTRL + U permite colar o conteúdo apagado com o atalho CTRL
+ Y.
DELETE Apaga o caractere à direita do cursor.
Apaga tudo o que estiver à direita do cursor, porém
CTRL + K permite colar o conteúdo apagado com o atalho CTRL
+ Y.
Como o comando clear, limpa a tela e joga o cursor
CTRL + L para a primeira linha. Com o atalho SHIFT + PAGE
UP, ainda é possível visualizar o conteúdo.

CTRL + C Abre uma nova linha de comando na posição do


cursor.

CTRL + R Busca algum caractere específico no último comando


digitado.
CTRL + D Como o comando exit, sai do shell.

Tópicos para revisão do capítulo

Atente para os tópicos a seguir. Eles devem ser estudados com muita atenção, pois
representam os pontos mais importantes do capítulo.
 Os sistemas GNU/Linux herdaram muitas características do padrão Unix, como a representação por arquivos
de tudo que estiver no sistema, a característica case-sensitive, a necessidade de permissões de execução de
arquivos para todos os usuários, a divisão do sistema em camadas, entre outras;

 Existem basicamente dois tipos de usuários no Linux: o usuário root ou superusuário, que possui funções
administrativas, e os usuários comuns;

 O shell é o mediador entre o usuário e o computador num sistema Unix-like, já que é ele o responsável por
interpretar e executar os comandos enviados por um usuário;

 O shell usado no sistema operacional GNU é chamado de bash, que apresenta mais funcionalidades e
praticidades na hora de realizar tarefas na linha de comandos que seu antecessor, o interpretador de comandos
sh;

 Uma sessão é composta por um login efetuado com sucesso por um usuário previamente cadastrado no
sistema;

 Iniciar, desligar e reiniciar o sistema adequadamente são processos que fazem parte dos primeiros comandos
que devem ser compreendidos pelo usuário, já que sua execução inadequada pode gerar danos, como falhas no
sistema de arquivos e perda de dados;

 O comando man fornece ajuda sobre o funcionamento de comandos com sua respectiva sintaxe e opções.

Exercícios de Laboratório
Laboratório 1
A - Login no Sistema
1 - Efetue login no sistema com o usuário aluno.
Note no prompt do sistema há o símbolo “$”, isto significa que você está logado como um
usuário comum.
2 – Reinicie o sistema com o comando
$ reboot
Como resultado você receberá uma mensagem de erro dizendo que o comando não
existe. Isto acontece porque você não é administrador do sistema (root).
3 - Eleve sua permissão para root, digitando o seguinte comando:
$ su
Coloque a senha do root
Note que o símbolo no prompt de comando agora é "#".
Agora tente novamente reiniciar o sistema com o comando:
# reboot

Laboratório 2
A - Aprendendo um pouco mais sobre comandos
1 - Efetue login no sistema com o usuário aluno.
2 - digite o comando:
$ ls
Observe o resultado
3 - digite agora o comando “ls –a”
$ ls -a
Note um resultado diferente, você agora vê arquivos que iniciam com ".", como por
exemplo o .bash_history. Estes são arquivos ocultos.
4 - Para conhecer mais sobre as possibilidades do comando ls, vamos usar o "man",
digite agora:
$ man ls
Para sair, digite "q".
5 - Veja todos os comandos que você já digitou, digite:
$ history
6 - Para encerrar a sessão, digite:
$ logout

B - Alterando entre Terminais


1 - Observe na tela de login a informação "tty1", isto significa que você está no primeiro
terminal virtual
2 - Logue no sistema como aluno
3 - Pressione CTLR+F2
4 - Note na tela de login a informaço "tty2", isto significa que você está no segunto
terminal virtual.
5 - Logue como root
Note que em um terminal você possui privilégios de usuário, enquanto ao mesmo tempo
no outro terminal você é Super Usuário.
6 - Verifique os outros terminais pressionando CTRL+3, CTRL+4, CTRL+5 e CTRL+6

Exercícios de Fixação
1. Logado em um sistema GNU/Linux, você está tentando listar os arquivos de um
determinado diretório, mas ao digitar o comando Ls, você recebe a seguinte
mensagem:
-sh: Ls: command not found
Qual o motivo desta mensagem?
a) Faltou o parâmetro -a no comando.
b) Deveria ter digitado "man ls" para dar carga no comando.
c) O comando "Ls" não existe. O correto é "ls".
d) O comando "Ls" só pode ser executado pelo root.
e) O comando "Ls" não existe. O correto é "LS".
Aternativa Correta: C

2. Você está logado no sistema e seu prompt está escrito: "aluno@computaodor1$"


Você tenta desligar o computador com o comando "halt", mas obtém o seguinte
resultado:
-sh: halt: command not found
Qual o motivo desta mensagem?
a) Faltou o parâmetro -a no comando.
b) "halt" não é um comando para desligar o sistema
c) Seu usuário não tem permissão para desligar o sistema
d) O comando "halt" no existe. O correto é "Halt".
e) O GNU/Linux está com erro.
Alternativa Correta: C

3. Qual o shell mais utilizado em ambientes GNU/Linux?


a) sh
b) bash
c) Unix-like
d) besh
e) Shell
Alternativa Correta: B

4. Você pretende programar o desligamento do seu sistema pra 10 minutos adiante,


qual comando você pode digitar?
a) shutdown -r 10
b) halt 10
c) poweroff -h 10
d) logout
e) shutdown -h 10
Alternativa Correta: E

5. Há algum tempo atrás você digitou um comando super complexo e agora


você precisa fazer novamente, porém você esqueceu detalhes do comando e
precisa relembrar. Qual comando você pode utilizar?
a) reboot
b) history
c) man ls
d) halt
e) commands
Alternativa Correta: B
Capítulo 3 – FHS – Árvore de diretórios

 Diretórios;
Introdução  Hierarquia de diretórios;
 FHS;
 Tipos de diretórios;
Compreender a estrutura de diretórios em  Diretórios opcionais e especiais;
sistemas GNU/Linux não é algo complexo,
entretanto, usuários não acostumados a  Navegação por diretórios.
utilizar a linha de comandos como em
sistemas MS-DOS podem encontrar certa
dificuldade. De modo geral, entender a
forma como os diretórios estão organizados
e a principal distinção entre eles é essencial
para manipular o sistema de forma ágil e poder trabalhar de forma segura.

Antes de iniciarmos uma abordagem sobre o padrão FHS (Filesystem Hierarchy Standard), é
necessário que tenhamos uma visão mais abrangente dessa hierarquia de diretórios, navegando e
conhecendo os principais aspectos, particularidades e diferenças.

Diretórios

Diretórios são basicamente os lugares onde os arquivos do sistema são armazenados. Como tudo em
sistemas GNU/Linux são arquivos, a estrutura de diretórios do sistema operacional organiza
hierarquicamente todos os textos, imagens, programas, dispositivos, planilhas, entre outros.

Conforme foi visto no capítulo anterior, os sistemas GNU/Linux herdam do Unix o aspecto case-
sensitive, que consiste na habilidade de diferenciar caracteres maiúsculos de minúsculos, de forma
que o usuário deve lembrar-se disso quando for nomear seus arquivos e diretórios para que, quando
precisar futuramente, possa localizar e acessar exatamente o que procura.

Hierarquia de diretórios

A estrutura de diretórios GNU/Linux, que segue o padrão POSIX (Portable Operating System
Interface), está dividida de forma hierárquica, na qual temos o conceito de diretório pai e diretório
filho. Diferentemente de outros sistemas operacionais que dividem sua estrutura por discos e
partições, em sistemas Unix-Like, essa estrutura será dividida hierarquicamente em uma árvore de
diretórios, em que praticamente tudo é um arquivo, inclusive os próprios dispositivos, como discos
ou partições, que são representados pelos respectivos arquivos especiais e acessados por meio do
processo de montagem.

Essa diferença e o conceito de tipos de arquivos que podem ser utilizados para
representar os dispositivos permitem que a estrutura e, inclusive, a forma de
manipular e gerenciar o sistema, sejam diferenciadas. Um bom exemplo é comparar essa estrutura
de diretórios a uma árvore, em que o principal diretório presente nos sistemas Unix-Like é
referenciado pelo nome raiz e é representado por uma barra (/).

O diretório raiz é o diretório pai de todos os diretórios do sistema. É o primeiro diretório da


hierarquia e aloca, consequentemente, toda a estrutura detalhada adiante.

O nome raiz é justamente comparado à raiz de uma árvore e, ao virá-la de cabeça para baixo,
teremos a raiz no topo da hierarquia, o tronco representando a estrutura estendida, e os galhos, que
estão ligados a esse tronco principal, são representados pelos subdiretórios, e assim
sucessivamente.

A imagem adiante ilustra a hierarquia de diretórios descrita:

FHS

As primeiras iniciativas em criar uma padronização para sistemas de arquivos para distribuições
GNU/Linux surgiram em 1994, denominado Filesystem Standard (FSSTND). Mais tarde, foram
adotados regras de estrutura e armazenamento de diretórios estabelecidas pelo Filesystem Hierarchy
Standard, ou FHS.

O FHS (Filesystem Hierarchy Standard) foi desenvolvido pela LSB (Linux Standard Base), uma
instituição sem fins lucrativos que foi criada em 1998 para desenvolver e manter padrões para
certificar distribuições GNU/Linux.
O FHS provém das especificações de sistemas Unix, formando uma rica base para manter a
compatibilidade e a portabilidade entre as distribuições GNU/Linux. Dessa forma, fabricantes de
software podem aproveitar esse padrão para gerar aplicações que podem ser executadas em
distribuições distintas, certificadas pela Linux Standard Base, e que seguem o padrão FHS. Mais
informações sobre a LSB podem ser encontradas em www.linuxfoundation.org/en/LSB.

O padrão FHS, desenvolvido e mantido pela LSB, é um dos padrões que uma distribuição
certificada pela LSB deve seguir em relação à posição e à estrutura dos diretórios no sistema.

Tal definição sobre a distinção dos diretórios se dá por dois motivos essenciais: os aplicativos
desenvolvidos para distribuições que seguem o FHS poderão, automaticamente, presumir a
localização de diretórios específicos e, ainda, os usuários em geral poderão ter uma ideia dessa
estrutura de diretórios, deixando o gerenciamento do sistema mais ágil e prático no momento de
encontrar determinados arquivos em uma manutenção. É possível encontrar as versões completas
do FHS em www.pathname.com/fhs/.

A seguir, abordaremos o formato do padrão FHS, com base em sua última versão.

Distinção dos diretórios

Existem duas categorias nas quais poderemos encaixar os diretórios do sistema GNU/Linux. Definir
os diretórios em suas respectivas categorias ajuda a entender melhor seu conteúdo e sua importância
para o sistema. Temos a primeira categoria, em que iremos definir o diretório como
compartilhado ou não-compartilhado. Já a segunda categoria poderá definir o conteúdo de
um diretório como estático ou variável. Ambas as categorias foram criadas para definir quais
tipos de diretórios poderemos compartilhar em rede ou, até mesmo, definir como o conteúdo
daquele diretório poderá ser acessado.

• Compartilhados vs. não-compartilhados

Os diretórios se enquadrarão nessas categorias dependendo de seu conteúdo presente. Caso não seja
um conteúdo essencial para a inicialização do sistema, ou for informações específicas da máquina
com o hardware presente nela.
Quando um diretório é considerado compartilhado, significa que o mesmo poderá ser
compartilhado entre diversos hosts em uma rede, como o diretório /home.
Se um diretório, agora, for considerado um diretório não-compartilhado, é porque,
provavelmente, o mesmo armazena informações específicas do seu sistema, como o diretório /etc
ou /boot.
• Estáticos vs. variáveis

Esta categoria também seguirá as regras impostas na categoria anterior, porém, quando um diretório
contiver alguma informação específica do sistema atual ou essencial para a inicialização, ele será
considerado um diretório estático, em que apenas o superusuário terá permissão para editar as
informações nele contidas, como o /bin. Um diretório é considerado variável quando suas
informações puderem ser editadas por qualquer usuário do sistema. Provavelmente, serão
informações não relevantes à inicialização do sistema, ou específicas do host atual, como o diretório
/var/spool/. Assim, poderemos definir quando um diretório terá permissões de leitura e gravação.
44

Estrutura de diretórios

O padrão FHS mantém a existência dos diretórios descritos na tabela a seguir:

Diretório Descrição
Representado por uma barra, este diretório contém todos
os outros diretórios do sistema. Trata-se do principal
/ (raiz) diretório de um sistema GNU/Linux e todos os arquivos e
diretórios estão situados sob ele, mesmo os dispositivos
externos.
Contém arquivos binários de comandos que são essenciais
bin
para a inicialização básica do sistema.
Contém informações dos gerenciadores de inicialização,
boot
arquivos de imagem do kernel e auxiliares.
Arquivos orientados a dispositivos gerais e outros
dev
arquivos especiais.
Contém arquivos de configuração para o sistema,
etc
aplicações e serviços.
Contém bibliotecas dinâmicas, essenciais à inicialização
lib
básica do sistema. Armazena, também, módulos do kernel.
media Pontos de montagem para mídias removíveis.
mnt Utilizado em pontos de montagem de uso temporário.
Utilizado para instalar pacotes adicionais por meio do
opt
processo de compilação.
Como o /bin, contém arquivos binários essenciais à
sbin inicialização básica do sistema, porém, é utilizado
somente em nível administrativo.
Contém informações estáticas de serviços
srv
disponibilizados pelo sistema.
tmp Armazena arquivos de ordem temporária.
Mantém informações estáticas de aplicativos e serviços
usr
gerais instalados no sistema.
Contém informações variáveis, tanto do sistema como de
var aplicativos em geral (ex. arquivos de log e caixa de
correio).
A seguir, temos os diretórios opcionais, que podem ser instalados no sistema:

Diretório Descrição
Diretório para centralizar dados pessoais dos usuários
home
comuns.
Diretório para centralizar dados pessoais do superusuário
root
root.

Acompanharemos, adiante, informações detalhadas sobre os subdiretórios contidos em /.

/bin

O diretório /bin contém os arquivos binários dos comandos essenciais à inicialização do sistema,
que podem ser utilizados tanto pelo usuário do tipo administrador (root), como por usuários
comuns, pois é um diretório público.

Esses comandos também podem ser utilizados de forma indireta por algum shell script, um
aplicativo criado por meio dos recursos dos interpretadores de comandos bash ou sh, por
exemplo. O shell script segue a ideia de uma linguagem interpretada, que é lida e executada, linha
por linha. Por convenção, não devemos criar subdiretórios nessa estrutura.

Por ser um diretório essencial à inicialização básica do sistema, como uma inicialização em modo
de segurança, tal diretório não pode ficar em uma partição diferente daquela em que se encontra o
diretório raiz (/).

Na tabela a seguir, podemos ver alguns dos comandos presentes em /bin:

Comando Descrição
alias Define um alias (nome alternativo) para algum comando.
Exibe o conteúdo do(s) arquivo(s) na saída padrão
cat
(stdout).
Comando utilizado para gerenciar as permissões de
chmod
arquivos e diretórios.
cp Utilitário para cópia de arquivos e diretórios.
date Exibe a data e a hora atuais do sistema.
echo Copia um texto específico ou conteúdo da variável.
Quando usado sem argumentos, exibe as variáveis de
env ambiente e seus conteúdos. Pode executar um comando
com variável de ambiente modificada.
exec Substitui a sessão atual do shell.
Seleciona uma variável de ambiente para a sessão e todas
export
as sessões iniciadas a partir dela.
ls Comando para listar o conteúdo de diretórios.
mkdir Cria diretórios.
mv Move ou renomeia arquivos e diretórios.
ps Exibe uma lista de processos em execução.
pwd Exibe o caminho completo do diretório corrente.
sed Editor de textos em nível de linha de comando.
Define o valor de uma variável. Quando usado sem
set
argumentos, mostra todas as variáveis já definidas.
unset Exclui uma variável na sessão.

/boot

O diretório /boot mantém informações essenciais à inicialização básica do sistema. Podemos citar,
como exemplo, arquivos estáticos dos gerenciadores de inicialização (boot-loaders) e o próprio
arquivo binário de imagem do kernel, que dará início ao sistema, assim como seus auxiliares.

Nota: O gerenciador de inicialização GRUB armazena seu arquivo de configuração dentro da


estrutura do /boot, no subdiretório grub.
Já o gerenciador de inicialização LILO, devido à limitação de hardware em alguns micros i386,
necessita de uma alocação do /boot em uma partição separada e que esteja, preferencialmente,
entre os primeiros 1024 cilindros do dispositivo de boot primário.

/dev

O diretório /dev armazenará, em sua estrutura, arquivos especiais de sistema que poderão ser
utilizados para acessar determinados dispositivos, como uma partição, uma unidade de CD, DVD
ou, até mesmo, um pen drive. É através desses arquivos no /deb que o GNU/Linux estabelece o
diálogo entre o sistema e os dispositivos periféricos do computador.

Tais arquivos especiais também poderão ser utilizados em simples transferências de informações,
utilizando portas seriais, paralelas, etc.

Nota: Por ser um diretório essencial à inicialização básica do sistema, como uma inicialização em
modo de segurança, tal diretório não pode ficar em uma partição diferente da partição em que se
encontra o diretório raiz (/).

/etc

O diretório /etc mantém toda a estrutura de arquivos e diretórios para configurar tanto o sistema
quanto os serviços e aplicações. Configurações padrão de logins de usuários, scripts de inicialização
do sistema, tabela do sistema de arquivos, entre outros, ficam armazenados nesse diretório.
Por convenção, não devemos alocar arquivos binários executáveis dentro dessa estrutura. A tabela
adiante ilustra a descrição dos principais arquivos:

Arquivo Descrição
/etc/hostname Arquivo para definir o nome da máquina (hostname).
/etc/network Diretório com as configurações das interfaces de rede.
Diretório com as configurações do servidor X atualmente
/etc/X11
instalado.

Nota: Por ser um diretório essencial à inicialização básica do sistema,


como uma inicialização em modo de segurança, tal diretório não pode ficar
em uma partição diferente da partição em que se encontra o diretório raiz (/).

/lib

Nessa estrutura, estão armazenadas as bibliotecas dinâmicas que são essenciais à inicialização
básica do sistema. Diversos programas do sistema operacional fazem uso de bibliotecas.

Essas bibliotecas dinâmicas são utilizadas pelos comandos que se encontram em /bin e /sbin, por
exemplo.

Na estrutura do diretório /lib, teremos os arquivos binários de bibliotecas dinâmicas em questão,


que são chamados de real-name, além de diversos links simbólicos, chamados de so-name, que
são ponteiros para os real-name de bibliotecas. Essa estrutura se dá pelo fato de gerenciarmos
bibliotecas dinâmicas de forma prática.

O diretório /lib armazena um subdiretório importante, como apresentado a seguir:

Diretório Descrição
Estrutura de armazenamento de módulos e
modules
informações das versões de kernel instaladas.

Nota: Por ser um diretório essencial à inicialização básica do sistema, como uma inicialização em
modo de segurança, tal diretório não pode ficar em uma partição diferente da partição em que se
encontra o diretório / (raiz).

/media

O diretório /media é utilizado para manter pontos de montagem para dispositivos de mídia
removíveis, como CD-ROM, DVD, disquetes, dispositivos USB, etc.
Antigamente, a convenção para montar tais dispositivos era dentro do diretório /mnt, ou no próprio
diretório / (raiz). Essa organização mantém a localização para o acesso a esses pontos de montagem,
de maneira mais intuitiva e prática.

/mnt

O diretório /mnt era utilizado, antigamente, para armazenar os pontos de montagem para
dispositivos em geral, como CD-ROM, disquetes, etc. Com a criação do /media, esse diretório
ficou responsável por manter pontos de montagem para sistemas de arquivos temporários, para
acessar uma partição temporariamente, copiar um dado específico e prover o compartilhamento de
arquivos entre sistemas, por exemplo.

/opt

É utilizado para manter uma organização importante no sistema no que diz respeito a programas
que serão instalados e que não pertencem à distribuição em uso, os quais, geralmente, são instalados
por meio do método de compilação. Também lida com a organização de softwares proprietários. Os
programas que serão instalados a partir de /opt deverão ter um diretório específico com o seu
respectivo nome, e esse diretório poderá ser utilizado futuramente para removê-lo, por exemplo.

/sbin

Este diretório também armazena arquivos binários de comandos essenciais à inicialização do


sistema, porém, esses comandos são de uso específico do usuário administrador. Além dos
comandos de inicialização, outros de restauração, reparo e/ou recuperação do sistema ficam
guardados nesse diretório.

Existem outros diretórios sbin no sistema, como em /usr/sbin ou /usr/local/sbin/.

Existem semelhanças e diferenças entre eles, as quais serão abordadas a seguir.

Adiante, acompanharemos exemplos de comandos presentes no /sbin:

Comando Descrição
fdisk Gerencia a tabela de partições.
fsck Ferramenta para checar e reparar sistemas de arquivos.
halt Comando para desligar o sistema.
ifconfig Utilizado para gerenciar as interfaces de rede.
mkfs Formata partições com o sistema de arquivos indicado.
reboot Reinicia o sistema.

Nota: Por ser um diretório essencial à inicialização básica do sistema, como uma inicialização em
modo de segurança, tal diretório não pode ficar em uma partição diferente da partição em que se
encontra o diretório / (raiz).

/srv

Este diretório possibilita obter informações estáticas de serviços disponibilizados pelo sistema, que
poderão ser compartilhadas. O /srv é usado para centralização de dados de serviços disponíveis a
todos os usuários. As informações poderão ser compartilhadas somente para leitura, e é importante
ressaltar que só poderão ser removidas pelo administrador do sistema.

Protocolos como CVS, FTP, www e rsync são exemplos de utilização de tal diretório em nível
administrativo.

/tmp

Este diretório é utilizado apenas como um centralizador de dados temporário, que é, geralmente, de
uso exclusivo do próprio sistema e, principalmente, das aplicações.

Também pode ser utilizado por usuários para alocar informações temporárias,
porém, é importante ressaltar que qualquer informação alocada no diretório /tmp é
automaticamente apagada ao desligar o sistema.

Por ser um diretório com permissões abertas, em que qualquer usuário pode gravar dados,
recomenda-se alocar o /tmp em uma partição separada da partição / (raiz), ou redefinir suas
permissões especiais e utilizar um controle
de limites no sistema, para não gerar danos por usuários mal-intencionados.

/usr

O diretório /usr é conhecido por manter a segunda maior estrutura de subdiretórios do sistema.
Sendo um diretório portável, ele contém praticamente uma segunda árvore de diretórios inteira,
independente da primeira. Os dados desse diretório são, geralmente, informações estáticas de
programas, comandos, serviços e outros, que seguem o padrão GNU/Linux e que não são essenciais
à inicialização básica do sistema.

É um diretório que poderá ser compartilhado entre vários hosts que seguem o FHS, disponíveis
somente para leitura; porém, seu conteúdo só poderá ser modificado pelo superusuário. A maior
recomendação para tal diretório é que não se aloque ou modifique nenhum tipo de informação de
forma manual.

Há muitas semelhanças com alguns diretórios já vistos, mas também há diferenças, justamente pela
organização que o diretório /usr apresenta.
Seus subdiretórios organizam as informações, como dados de programas, comandos e serviços, de
forma classificatória e são divididos conforme a tabela a seguir:

Diretório Descrição
Contém, como o /sbin, arquivos binários executáveis, não
bin essenciais para a inicialização básica do sistema, e de uso
geral por parte dos usuários.
Armazena arquivos de cabeçalho, muito utilizados na
include
linguagem C e, geralmente, com a extensão .h.
Mantém bibliotecas dinâmicas, que serão utilizadas,
lib
geralmente, pelos programas em /usr/bin e /usr/sbin.
Hierarquia local não compartilhada (utilizada por
local aplicativos que são instalados de forma local, instalações a
partir do código-fonte).
Contém, como o /bin, arquivos binários executáveis não
sbin essenciais à inicialização básica do sistema, porém de uso
específico do usuário root.
Contém dados e informações específicas das aplicações
que podem ser compartilhadas e são independentes de
share
alguma arquitetura específica. Há também muita
documentação sobre o sistema e programas nesse diretório.
Utilizado para armazenar o código-fonte de programas e,
Src principalmente, do kernel, no momento de sua
recompilação.

Nota: Apesar de alguns diretórios citados em /usr já existirem dentro da / (raiz), esses são
completamente diferentes, visto que o conteúdo do diretório /usr poderá ser compartilhado
(exceto /usr/local) e não é essencial à inicialização básica do sistema.

/var

O diretório /var mantém informações e dados que sofrerão variações constantemente (conteúdo
dinâmico). Uma infinidade de serviços utiliza alguns subdiretórios de /var para armazenar seus
dados, como o gerenciador de fila de impressão, e-mail, log, etc. É um diretório muito importante
para o funcionamento geral do sistema e serviços implantados.

É necessário redobrar a atenção ao querer particionar esse diretório. Um tamanho mal calculado
poderá sobrecarregá-lo, e o sistema poderá ficar indisponível durante a manutenção.

Podemos acompanhar, no quadro a seguir, alguns subdiretórios presentes em /var:

Diretório Descrição
Diretório utilizado por aplicações, como o gerenciador de
cache
pacotes apt.
Armazena os logs gerados pelo sistema, aplicações e
log
serviços.
Diretório para armazenar a estrutura de serviços de e-mail,
mail
como contas de e-mail dos usuários, domínios, etc.
Armazena informações que serão futuramente processadas,
spool
como fila de impressão e agendamento de tarefas.
Arquivos temporários que poderão ser reutilizados mesmo
tmp
após o reboot.

Diretórios opcionais

Dois subdiretórios do diretório raiz (/) merecem destaque: /home e /root. Ambos não precisam
necessariamente existir no sistema, ou seja, são opcionais. No entanto, para fins de adequação ao
padrão FHS, é recomendável mantê-los.

Uma peculiaridade desses dois subdiretórios é a possibilidade de alteração de seus nomes sem gerar
problemas para a estrutura do sistema. Podemos alterar o nome do /home para /pessoal, por
exemplo.

/home

O diretório /home é utilizado para centralizar os diretórios pessoais de cada usuário comum
presente no sistema. A presença desse diretório é opcional, porém, caso o mesmo exista no sistema,
para seguir o padrão FHS, é recomendável centralizar os diretórios pessoais dos usuários comuns
nessa estrutura.

Teremos, como conteúdo para esses diretórios, os arquivos de profile específicos dos usuários,
configurações de aplicações e, também, o armazenamento dos arquivos pessoais. Manter essa
estrutura organizada facilita o processo de backup, por exemplo.

/root
O diretório /root tem uma grande semelhança com o diretório /home, porém,
é utilizado para armazenar apenas os arquivos pessoais, profiles e configurações específicas do
administrador do sistema (usuário root). Apesar de ser opcional, manter o diretório /root é uma boa
escolha, pois os arquivos do usuário administrador ficarão separados dos que pertencem aos
usuários comuns.

Diretórios especiais

Também são subdiretórios do diretório raiz o /proc e o /sys, considerados arquivos especiais. O
primeiro armazena configurações do sistema. O segundo, arquivos graváveis que permitem a
execução de modificações imediatas por meio de seus valores.

/proc

Podemos utilizar o diretório virtual /proc para obter informações instantâneas. É importante notar
que as informações contidas nesse diretório não são consideradas logs, apesar de serem, também,
informações do sistema. São apenas um meio de o kernel, que é o responsável pela manutenção do
/proc, comunicar-se com as aplicações.

Podemos encontrar três tipos de informações no diretório /proc, que são:

 Variáveis do sistema: Arquivos dentro do diretório /proc/sys – um diretório que possui vários arquivos
graváveis que permitem interagir com o kernel e, assim, fazer modificações imediatas através dos seus valores;

 Informações de processos: Identificadas por diretórios de formato numérico como, por exemplo,
/proc/N, onde N é o PID (Process ID) do processo;

 Informações gerais do sistema: Compostas por arquivos restantes, que fornecem informações gerais
sobre os dispositivos, os sistemas de arquivos, as partições, e muitos outros tipos de informações. Como essas
informações dependem dos módulos carregados pelo kernel, podem variar muito de sistema para sistema.

Os subdiretórios do /proc são nomeados de acordo com o PID dos processos a que eles dizem
respeito. A seguir, podemos visualizar a relação dos arquivos comumente encontrados no diretório
/proc:

Arquivo Descrição
Parâmetros de inicialização que o gerenciador de boot
cmdline
repassa para o kernel.
Detalhes sobre o processador do sistema, como fabricante,
cpuinfo
velocidade, etc.
devices Principais números (majors) para os vários tipos de
dispositivos utilizados pelo kernel.
Exibe os sistemas de arquivos disponíveis e é utilizado pelo
filesystems
comando mount.
Exibe uma lista das IRQs e suas associações com os
interrupts
dispositivos correspondentes.
Exibe a relação de faixas da memória associadas aos
ioports
dispositivos do sistema.
kcore Exibe informações do conteúdo atual da memória RAM.
meminfo Exibe as estatísticas de uso da memória.
modules Exibe os módulos carregados atualmente no sistema.
Exibe os sistemas de arquivos atualmente montados no
mounts
sistema.
pci Exibe os detalhes dos dispositivos PCI do sistema.
uptime Informa há quanto tempo o sistema está ativo.

/sys

Dentro do diretório /sys podemos encontrar quase o mesmo conteúdo existente em /proc, mas de
uma forma mais organizada para os administradores. O /sys existe desde a versão 2.6 do kernel e
traz funcionalidades no que diz respeito a dispositivos PnP.

Uma diferença de enfoque entre o /sys e o /proc é que o primeiro hospeda especificamente
informações de dispositivos, ao passo que o segundo abarca também diversos dados de processos.

Navegação pelos diretórios

Para nos movimentarmos pelos diretórios do sistema, é importante saber utilizar os comandos cd e
pwd.

cd

O comando cd é utilizado para a movimentação entre os diretórios


do sistema. Não devemos esquecer como os diretórios são estruturados em sistemas GNU-Linux,
conforme explicado anteriormente.

Sua sintaxe básica é a seguinte:


cd <diretorio>

Em que diretorio é o caminho do diretório que desejamos acessar.

O comando cd também poderá ser utilizado com alguns caracteres que executam funções especiais,
como:

Caractere Função
. Link utilizado para fazer referência ao diretório atual.
.. Link utilizado para fazer referência ao diretório anterior.
Caractere que representa o diretório home do usuário que o
~
está utilizando.
Com o comando cd, volta ao último diretório acessado
-
antes do diretório atual.

Vejamos como utilizar o comando cd:

Para ir para o diretório home do usuário atualmente logado, digitar apenas cd ou cd ~.

Para ir para o diretório raiz (/), digitar o seguinte:

cd /

Para ir para o subdiretório /tmp, por exemplo, digitar o seguinte:

cd /tmp

Para ir para o subdiretório cache do diretório var, por exemplo, digitar o seguinte:

cd /var/cache

Para subir um nível na árvore de diretório, digitar o seguinte:

cd ..

Para subir dois níveis na árvore de diretório, digitar o seguinte:

cd ../../

Para retornar um nível na árvore de diretórios, digitar o seguinte:

cd -

pwd

O comando pwd é utilizado para exibir o caminho completo do diretório atual. Podemos recorrer a
ele caso não nos recordemos do diretório em que estamos atualmente localizados. Basta digitarmos
pwd e teclarmos ENTER para exibir o nome do diretório.

Tópicos para revisão do capítulo

Atente para os tópicos a seguir. Eles devem ser estudados com muita atenção, pois
representam os pontos mais importantes do capítulo.

 Diretórios são basicamente os lugares onde os arquivos do sistema são armazenados. A estrutura de diretórios
do sistema operacional organiza hierarquicamente todos os textos, imagens, programas, dispositivos, planilhas,
entre outros;

 A estrutura de diretórios em sistemas GNU/Linux assemelha-se a uma árvore. O diretório raiz é o diretório pai
de todos os diretórios do sistema. É o primeiro diretório da hierarquia e aloca, consequentemente, toda a
estrutura de diretórios do sistema;

 Um diretório pode ser classificado como compartilhado ou não-compartilhado, dependendo das condições
de acesso em rede a ele e ao seu conteúdo, ou ainda como estático ou variável, variando de acordo com o tipo
de usuário autorizado a modificar seu conteúdo;

 Os diretórios /home e /root não são necessários, porém são úteis na organização das informações pessoas de
cada usuário do sistema. O primeiro armazena dados dos usuários comuns, e o segundo preocupa-se somente
com o administrador;

 Os comandos cd e pwd auxiliam a navegação entre diretórios. Enquanto o cd permite o envio de comandos
para promover a movimentação rápida entre diretórios, o pwd exibe o caminho completo do diretório atual.

Laboratório 1
A – Analisando a estrutura de diretórios
Para poder executar este laboratório usaremos também os comandos citados neste
capítulo.
1. Logue no sistema com o usuário aluno
2. Eleve suas permissões para root com o comando:
$ su
3. Observe em qual diretório você está no momento, utilize o comando:
# pwd
4. Vá para o diretório raiz (/)
# cd /
5. Liste os diretórios existentes e compare com tópico 4.2 da apostila e releia suas
funções.
# ls

B – Analisando alguns dos principais diretórios


1. Entre no diretóio /etc (observe, como o diretório etc está abaixo do raiz, devo citar o
caminho completo.
# cd /etc
2. Liste o conteúdo deste diretório
# ls
Observe que neste diretório há diversos arquivos e muitos deles terminam com o nome
“.conf”. Esta nomenclatura não é obrigatória, mas ajuda na orientação.
De qualquer maneira, todos os arquivos contidos neste diretório e sub-diretórios são
arquivos de configuração do sistema ou aplicativos.
3. Vá para o diretório /dev e liste o conteúdo com os seguintes comandos:
# cd /dev
# ls
Observe o conteúdo listado, tudo se refere a dispositivos, entre eles você verá o “cdrom”,
ele é um alias (link simbólico) para seu dispositivo de CD.
4. Vá para o diretório /bin e liste seu conteúdo com os seguintes comandos:
# cd /bin
# ls
Note que os arquivos listados, são os comandos que mais utilizamos, entre eles você
encontrará o “ls” e o “pwd”

Laboratório 2
A – Utilizando o comando CD
1. Logue no sistema com o usuário aluno
2. Veja em qual diretório você está com o comando:
$ pwd
3. Vá para o diretório sbin contido dentro do diretório /usr
$ cd /usr/sbin
4. Vá para seu diretório pessoal
$ cd ~
5. Retorne ao último diretório que você visitou
$ cd -

Exercícios de fixação
1. Qual diretório NÃO pode estar em uma partição separada
a) /tmp
b) /etc
c) /srv
d) /var
e) /boot
Alternativa Correta: B

2. Qual diretório ficam todos os arquivos de configurações dos sistema?


a) /conf
b) /usr/conf
c) /srv
d) /etc
e) /boot
Alternativa Correta: D

3. O executável do comando “pwd” fica dentro de qual diretório?


a) /sbin, pois é o diretório onde ficam todos os executáveis administrativos
b) /bin, pois é o diretório onde ficam todos os executáveis administrativos
c) /usr/bin, pois é onde ficam os principais executáveis de interesse geral
d) /usr/sbin, pois é onde ficam os principais executáveis do sistema
e) /bin, pois é onde ficam os principais executáveis de interesse geral
Alternativa Correta: E

4. Analisando cada comando digitado abaixo, qual deles é capaz de nos direcionar ao diretório
sbin que está dentro do diretório /usr?
a) aluno@localhost: ~$ cd usr/sbin
b) aluno@localhost: ~$ cd pwd
c) aluno@localhost: ~$ cd /usr/sbin
d) aluno@localhost: ~$ cd /sbin
e) aluno@localhost: ~$ cd /usr/bin
Alternativa Correta: C

5. Qual diretório contém todos os dispositivos do sistema?


a) /disp
b) /dev
c) /usr/devices
d) /pci
e) /etc
Alternativa Correta: B
Capítulo 4 – Comandos GNU/Linux

 Comandos do GNU/Linux;
Introdução
 Listagem de arquivos;
 Criação, exclusão, cópia e renomeação de arquivos e
diretórios;
Como foi visto, o shell é o responsável por
fazer a mediação entre o usuário e o
 Caracteres curinga;
computador, interpretando os comandos  Redirecionadores;
enviados. Esses comandos nada mais são do
que instruções que o usuário manda pelo  Visualização de arquivos e diretórios;
shell para a execução de alguma tarefa.  Filtragem de dados;
Os sistemas GNU/Linux contam com uma  Verificação do tipo de um arquivo;
grande variedade de comandos disponíveis
para sua administração, que possibilitam a  Substituição e exclusão de caracteres;
execução de diversas operações e ainda  Numeração de arquivos;
podem ser colocados e documentados em
scripts. Neste capítulo, abordaremos os  Formatação de parágrafos;
principais comandos GNU/Linux,
organizados aqui em categorias, a fim de
 Criação de links;
facilitar o entendimento e aprendizado.  Tabulações;
Lembre-se, cada comando aqui
demonstrado, pode ser mais explorado  Divisão de arquivos em partes;
utilizando o comando “man” conforme  Administração do sistema;
mencionado anteriormente. Ex.
$ man ls  Outros comandos.

Listando arquivos e diretórios

O comando ls lista o conteúdo ou informações detalhadas de diretórios e arquivos. Sua sintaxe é a


seguinte:

ls [opcoes] [arquivo(s)/diretorio(s)]

Se o usuário não especificar um diretório na sintaxe do comando, será mostrado o conteúdo do


diretório em que ele estiver no momento.

Esse comando possui muitos parâmetros. A tabela a seguir descreve os principais deles:
Opção
Opção GNU Descrição
Unix
-a --all
Exibe todo o conteúdo de diretórios,
incluindo arquivos e diretórios ocultos,
que iniciam com um . (ponto) em seu
nome.

--color=[opção] Ativa o recurso de cores para os tipos de


arquivos com os parâmetros always
opção: auto (sempre usa cores na saída do comando
always ls), auto (usa cores apenas se a saída do
never comando ls for um terminal), never (não
usa cores, é padrão).

Cores:
 Azul: Diretório;

 Branco: Arquivo comum, texto, sem


permissões de execução;
 Verde: Arquivo com permissões de
execução;
 Azul claro: Link simbólico;
 Amarelo: Arquivo especial orientado a
comunicação, bloco ou caractere;
 Marrom: Arquivo especial do tipo FIFO;
 Rosa: Arquivo especial do tipo socket;

 Vermelho: Arquivo compactado,


empacotado ou link quebrado.
-d --directory
Opção que é útil quando combinada com
a opção -l. Exibirá as informações
detalhadas do diretório corrente ou
indicado, e não dos arquivos presentes
dentro dele.

-F --classify Adiciona ao final dos arquivos um sufixo


que faz referência ao seu respectivo tipo.
-h --human-
readable Opção útil quando combinada com a
opção -l, exibe o tamanho de arquivos em
formato legível por humanos (human-
readable).

-i --inode Exibe o número de identificação que


cada arquivo tem (i-node).
-l --format=long Exibe as informações detalhadas dos
arquivos do diretório corrente ou do
diretório indicado, conforme será
visto em detalhe no próximo tópico.
Opção
Opção GNU Descrição
Unix
-n --numeric-giduid Semelhante à opção -l, porém, exibe
a identificação dos donos (UID –
UserIdentification) e grupos (GID –
GroupIdentification) dos arquivos e
diretórios em vez de seus respectivos
nomes.
-R --recursive Lista o conteúdo de diretórios e seus
respectivos subdiretórios em modo
recursivo.
-r --reverse
Inverte a ordem de classificação.
-S --sort=size Classifica a listagem pelo tamanho
dos arquivos.
-t --sort=time Classifica a listagem pelo tempo de
modificação ou acesso.
-x --sort=extension Classifica a listagem pela extensão
dos arquivos.

Obtendo uma lista detalhada

O parâmetro –l, visto na tabela anterior, é bastante usado e tem como função listar detalhadamente
os arquivos do diretório atual ou do diretório indicado. Em seu resultado, o usuário obtém
informações sobre os tipos de arquivos, as permissões, o número de links para outros arquivos, os
donos, os grupos, o tamanho dos arquivos, seus nomes e rótulos de tempo.

Por padrão, o rótulo de tempo que é exibido é sobre a última modificação. Para poder
visualizar o rótulo de tempo sobre acesso, usa-se a opção –u em conjunto com a opção -l.
Quando o comando ls –l é executado, a saída que ele traz mostra caracteres específicos no começo
da cada linha, o primeiro caracter indica o tipo dos arquivos listados, conforme o seguinte
esquema:

 - : Para um arquivo comum;

 d: Para um diretório;

 b: Para arquivo especial orientado à comunicação em bloco;

 c: Para arquivo especial orientado à comunicação a caractere;

 l: Para ligação (link) simbólica;

 p: Para um arquivo FIFO;

 s: Para um arquivo socket.

Listando todos os arquivos

Se o usuário precisar que o comando ls liste todos os arquivos existentes em um determinado


diretório, deve usar o parâmetro –a. Com ele, até os arquivos ocultos são exibidos e podem ser
identificados por um . (ponto) no começo de seu nome.

Vejamos:
Listando recursivamente

Com o parâmetro R, podemos listar arquivos e mostrar também os subdiretórios contidos no


diretório especificado, ou seja, podemos listar arquivos recursivamente.

Criando arquivos e diretórios

Simplesmente abrir um editor de texto e salvar o documento é suficiente para criar um arquivo novo
em sistemas GNU/Linux, porém existem outras maneiras para isso, como será mostrado adiante.

touch

O comando touch gera um arquivo com zero byte de tamanho. Sua sintaxe é a seguinte:

touch [opcoes] <arquivo>

O comando touch tem várias funcionalidades, como poder alterar a data e/ou hora (timestamp) de
acesso ou modificação de um arquivo de qualquer tipo.

Em [opcoes], podemos utilizar os parâmetros descritos na tabela a seguir:

Opção
Opção GNU Descrição
Unix
-a --time=atime Altera a data de acesso de um
arquivo.
Opção
Opção GNU Descrição
Unix
-c --no-create Não cria arquivos caso eles não
existam.
-m --time=mtime Altera a data de modificação de um
arquivo.
-t Especifica o formato de data e hora
para alteração, com as opções -m ou
–a. O formato passado junto com a
opção –t é
[[CC]YY]MMDDhhmm[.SS], sendo:
 CCYY: Ano no intervalo de 1969-2068;

 MM: Define o mês;


 DD: Define o dia;

 hh: Define a hora;


 mm: Define o minuto;

 .SS: Define o segundo.

mkdir

Para criarmos um diretório no sistema, podemos utilizar o comando mkdir.

Sua sintaxe é a seguinte:

mkdir [opcoes] <diretorio>

Em [opcoes], podemos utilizar os parâmetros descritos na tabela a seguir:

Opção
Opção GNU Descrição
Unix
-p --parents Cria uma estrutura de diretórios com
o diretório pai, filho, etc.
-v --verbose Imprime, em modo visual, os
diretórios sendo criados.

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos

A linha a seguir cria o diretório impacta:

mkdir impacta

Na criação de subdiretórios, o diretório pai deve já existir. Vejamos a seguinte linha:


/home/arquivos/aulas/linux/aluno/lucas

A criação de uma estrutura como a que acabamos de exibir pede que utilizemos o comando mkdir
cinco vezes. Vejamos a sequência de comandos para criá-la:

mkdir /home/arquivos
mkdir /home/arquivos/aulas
mkdir /home/arquivos/aulas/linux
mkdir /home/arquivos/aulas/linux/aluno
mkdir /home/arquivos/aulas/linux/aluno/lucas

No entanto, há uma maneira mais simples de criar estruturas como essa. Para isso, podemos utilizar
mkdir junto com o parâmetro –p. A linha a seguir cria a estrutura anterior com uma única execução
do comando mkdir:

mkdir -p /home/arquivos/aulas/linux/aluno/lucas

Excluindo arquivos e diretórios

Vejamos, a seguir, como utilizar os comandos rm e rmdir para excluir arquivos e diretórios do
sistema.

rm

O comando rm é utilizado para excluir arquivos e diretórios, independentemente de estarem vazios.


Sua sintaxe é a seguinte:

rm [opcoes] <origem>

Em [opcoes], podemos utilizar uma das opções descritas na tabela adiante:

Opção
Opção GNU Descrição
Unix
-i --interactive Questiona se a origem pode ser removida.
-f --force Remove arquivos ou diretórios sem
questionamento e suprimindo qualquer
tipo de mensagem de erro.
-r, -R --recursive Utilizada para remover diretórios em
modo recursivo.
-v --verbose Remove arquivos e diretórios em modo
visual, exibindo seus respectivos nomes
no momento da remoção.
O exemplo a seguir exclui o arquivo impacta.txt:

rm impacta.txt

No uso de rm, há uma forma de que uma mensagem de confirmação seja exibida antes da exclusão
ocorrer. Para isso, utilizamos o parâmetro –i. No exemplo a seguir, excluímos impacta.txt, mas
antes precisamos confirmar a ação (y):

rm -i impacta.txt
rm: remove arquivo comum “impacta.txt” y

Para a remoção de um diretório e todo o seu conteúdo, utilizamos rm com o parâmetro –r. O
exemplo a seguir exclui o diretório arquivos e todo seu conteúdo:

rm –r arquivos

Nota: Arquivos e diretórios excluídos com o comando rm não podem ser recuperados.

rmdir

O comando rmdir remove diretórios vazios, que não contenham arquivos. Também remove
diretórios que contêm outros subdiretórios, mas apenas se estes também estiverem sem arquivos.
Sua sintaxe é a seguinte:

rmdir [opcoes] <origem>

O rmdir pode ser utilizada com a opção -p, que remove a árvore de diretórios indicada apenas se
não existir qualquer arquivo presente na estrutura que será removida.

A linha a seguir exclui o diretório aulas:

rmdir aulas

Já a linha a seguir exclui tanto o diretório aulas quanto o subdiretório linux:

rmdir -p aulas/linux

Copiando arquivos e diretórios

O comando cp copia arquivos ou, opcionalmente, diretórios, de determinada origem para um


determinado destino. Sua sintaxe é a seguinte:

cp [opcoes] <origem><destino>
No caso de diretórios, utilizamos o parâmetro –R junto com o comando.

Em [opcoes], podemos utilizar uma das opções descritas na tabela a seguir:

Opção Descrição
Opção GNU
Unix
-a --archive Preserva todos os atributos possíveis
para o arquivo copiado (dono, grupo,
rótulos de tempo, etc.).
-i --interactive Questiona se a origem pode ser
sobrescrita.
-f --force Sobrescreve o destino sem
questionar, ou pedindo confirmações.
-R --recursive Faz uma cópia em modo recursivo,
Ou ideal para cópia de diretórios.
-r
-v --verbose Faz cópias em modo visual, exibindo
o nome de cada arquivo no momento
da cópia.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

Vejamos a seguinte tela:

No primeiro exemplo (primeira linha), temos a cópia do arquivo /etc/services sendo colada no
diretório dir-pai com o nome de services.

No segundo uso do cp (quinta linha), temos uma cópia de todos os arquivos – é utilizado o caractere
curinga asterisco (*), o qual explicaremos posteriormente neste capítulo - do diretório
/etc/cron.daily indicando o destino em dir-pai/dir-filho.

Já o terceiro exemplo (décima linha) copia apenas o arquivo /etc/hosts para o diretório atual, que
é representado pelo ponto (.).

No último exemplo (décima quarta linha), o diretório /etc/apt é copiado por completo, com todo
seu conteúdo, sendo ele arquivos e subdiretórios, por meio da opção –r (recursivo), sendo o
diretório de destino o diretório atual. Como o nome do diretório foi alterado para .novo-apt, isso
significa que o diretório foi renomeado com o novo nome, e o caractere . (ponto) no início do
nome caracteriza-o agora como um diretório oculto.

Para que uma cópia conserve os metadados dos arquivos, utilizamos cp com o parâmetro –p.
Assim, as informações de data e hora de criação, proprietário e suas permissões não sofrem
alterações.

Renomeando e movendo arquivos e diretórios

O comando mv é utilizado para mover ou renomear arquivos e diretórios.

mv [opcoes] <origem> <destino>

Opção
Opção GNU Descrição
Unix
-i --interactive Questiona se o destino pode ser
sobrescrito.
-f --force Sobrescreve o destino sem
questionar, ou pedindo confirmações.
-v --verbose Move ou renomeia arquivos e
diretórios em modo visual, exibindo o
nome no momento de mover ou
renomear.

Utilizando caracteres curinga

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos

Existem caracteres especiais, nos ambientes GNU/Linux, que são reconhecidos pelo sistema
operacional como curingas e têm como função especificar, selecionar ou substituir um caractere ou
uma sequência de caracteres, auxiliando em todas as tarefas relacionadas a arquivos ou diretórios,
como cópia, exclusão, movimentação, entre outras.

Falar sobre esses curingas de maneira unicamente teórica pode deixar sua compreensão muito vaga,
portanto vamos tratar dos três principais tipos de curingas utilizados pelos sistemas GNU/Linux
separadamente, oferecendo alguns exemplos. São eles o asterisco (*), o ponto de interrogação (?) e
os colchetes ([ ]).

O caractere * substitui parte do nome de um arquivo ou até seu nome inteiro, como nos exemplos a
seguir:

# ls *
Nesse exemplo, todos os arquivos contidos no diretório atual serão listados, já que o curinga não
reduziu a busca a nenhum caractere ou termo específico.

# ls *teste*

Nesse caso, serão listados todos os arquivos que contenham a palavra teste no diretório em que o
usuário estiver, porque o curinga, da forma que foi usado, seleciona todos os nomes em que a
palavra teste venha seguida ou antecedida de qualquer sequência de caracteres.

# ls *.pic

Aqui, o curinga mantém aberto apenas a seção do nome do arquivo que antecede a sequência .pic
de forma que todos os arquivos cujo nome terminam com .pic serão listados.

O curinga ? substitui um ou mais caracteres numa posição específica, permitindo ao usuário filtrar
mais a busca do que o curinga * conforme o exemplo adiante:

# ls album?.pic

Dessa forma, serão listados os arquivos cujos nomes comecem com a palavra album, tenham
qualquer caractere no lugar do curinga, e terminem com .pic.

Por fim, o curinga [ ] especifica ainda mais o que o usuário pretende buscar, porque permite dar
opções concretas, sejam elas alfabéticas ou numéricas, que o curinga pode substituir. Novamente, os
exemplos a seguir devem tornar seu funcionamento mais claro.

# ls album[1,3].pic

Esse comando promoverá a listagem de arquivos cujo nome seja album1.pic ou album3.pic
podendo o curinga ser substituído pelos caracteres 1 ou 3.

# ls album[0-9].pic

Agora todos os arquivos começados pela palavra album, terminados em .pic e que tenham, no lugar
do curinga, um dos números existentes no intervalo de 0 a 9 serão listados. Note-se portanto a
diferença entre a vírgula (,) e o hífen (-) na sintaxe desse curinga.

Os curingas podem ser utilizados de forma complementar, de acordo com a necessidade do usuário,
e normalmente haverá mais de uma forma de chegar num mesmo resultado.

Redirecionando a saída e entrada de dados

O usuário deve estar familiarizado com os termos convencionalmente usados para entrada e saída
de dados e comandos no shell. Para entrada de dados, usa-se o termo stdin (Standar Input); para
saída, o termo stdout (Standard Output); caso a saída venha com algum erro, o termo é stderr
(Standard Error).
Normalmente, é através do teclado que a entrada de dados e comandos é feita. Já a saída, seja ela
bem sucedida ou com erro, é exibida no monitor.

Redirecionar a saída e a entrada de dados dos comandos é uma tarefa importante e essencial no dia-
a-dia de um administrador, pois é possível deixar o uso dos comandos mais flexível e avançado.

Conforme demonstrado na figura a seguir, é possível redirecionar as saídas geradas na execução de


um comando, como também sua própria entrada de dados. Para isso, conheceremos a partir de agora
os principais redirecionadores para executar tais funções.

Redirecionador > ou 1>

O redirecionador 1> ou > pode ser utilizado para transferir o resultado executado com sucesso de
um comando, que seria exibido na tela ou no prompt atual, para um tipo de arquivo especificado.
Sua sintaxe é a seguinte:

[comando] [codigo de saida] > <arquivo>

É preciso ter muita cautela na hora de utilizá-lo com arquivos comuns, pois, caso o arquivo
especificado já exista, um novo arquivo será criado em seu lugar, sobrescrevendo o conteúdo do
anterior. O redirecionador > também é utilizado para criar arquivos vazios (0 byte), como o
comando touch, porém, caso o arquivo já exista, este será apagado e o novo arquivo será criado.

O código de saída 1 é utilizado para representar a saída de um comando executado com sucesso. A
não indicação desse código também é aceita pelo redirecionador >, interpretando-o como 1>.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

Vejamos o seguinte exemplo:

No primeiro exemplo (terceira linha), o arquivo chamado novo-arq foi apenas criado com o
redirecionador >. Se já existir um arquivo com o mesmo nome, o mesmo será sobrescrito pelo novo
arquivo recém-criado, de tamanho 0 byte. No segundo exemplo (oitava linha), o resultado com
sucesso do comando ls foi redirecionado para um arquivo chamado lista, que é criado pelo próprio
redirecionador >, ou sobrescrito, caso já exista.

Para desabilitar a característica do redirecionador > de sobrescrever


um arquivo existente eliminando seu conteúdo, é possível fazer esse
controle através do comando set. Para desabilitar essa característica,
usa-se set -o noclobber e, para habilitar, set +o noclobber.
O exemplo a seguir jamais deverá ser executado: cat -n arq-teste >arq-teste.

Redirecionador 2>

O redirecionador 2> tem por finalidade tratar a saída de erro gerada na execução de um comando,
podendo encaminhá-la para um tipo de arquivo especificado.
Sua sintaxe é a seguinte:

[comando] [codigo de saida] 2> <arquivo>

As características do redirecionador 2> são semelhantes às do redirecionador >. A única diferença é


que agora o tratamento de redirecionamento será sobre os erros gerados.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

Exemplo:

O exemplo anterior está redirecionando os supostos erros gerados na execução no momento de listar
o arquivo de nome naoexiste, encaminhando-os para um arquivo chamado erro e,
posteriormente, visualizando seu conteúdo, que serão os erros gerados no comando anterior.

Assim como no redirecionamento de uma saída com sucesso, o redirecionamento de erros também
criará o arquivo especificado caso não exista, e sobrescreverá o arquivo se o mesmo já existir. Caso
o bloqueio com o comando set -o noclobber seja definido, a característica de sobrepor arquivos
também será desabilitada.

Redirecionador >>

O redirecionador >> também é utilizado para redirecionar um resultado executado com sucesso
para um arquivo, porém, de forma concatenada, não mais sobrescrevendo o conteúdo do arquivo
existente, mas sim apenas adicionando o resultado ao final dele. É uma forma segura de se adicionar
mais informações ao final de um arquivo, sem perder o mesmo.

Sua sintaxe é a seguinte:

[comando] [codigo de saida] >> <arquivo>

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

Exemplos:
Nos exemplos anteriores, os resultados do comando date foram adicionados ao final do arquivo
chamado data-hora, que, caso não exista, será criado automaticamente pelo primeiro
redirecionador >>.

Também não é possível redirecionar um resultado obtido em um arquivo para ele mesmo. Porém,
com o redirecionador >>, não corremos o risco
de perder o arquivo caso o comando set –o nocobbler tenha sido definido.

Redirecionador 2>>

O redirecionador 2>> também consegue tratar resultados de erros quando o código 2 for informado.
Será possível anexar uma saída sem sucesso ao final de um arquivo, mantendo todas as
características do redirecionamento de uma saída com sucesso, como no exemplo anterior.

Sua sintaxe é a seguinte:

[comando] [codigo de saida] 2>> <arquivo>

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

Exemplo:
Dessa forma, é possível adicionar quantas saídas de erros forem possíveis. No exemplo anterior, os
supostos erros gerados na execução desses comandos foram enviados ao final do arquivo chamado
erro. Caso tal arquivo não exista, o mesmo será criado automaticamente na primeira execução.

Redirecionador <

O redirecionador < terá a finalidade de redirecionar a entrada de dados do comando, indicando que
esta entrada de dados será agora o conteúdo de um arquivo.

Sua sintaxe é a seguinte:

[comando] < <arquivo>

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos

Exemplos:
No primeiro exemplo (primeira linha), o conteúdo do arquivo data-hora foi encaminhado para o
comando cat -n, que irá visualizar tal conteúdo colocando uma numeração no início de cada linha e
exibindo o tal resultado na saída padrão.

No exemplo seguinte (sétima linha), a listagem do diretório atual é transformada em um arquivo


virtual e encaminhada para o comando cat -n, para que o mesmo numere seu conteúdo.

Redirecionador <<

O redirecionador << é utilizado para poder criar, de forma simples e dinâmica, uma entrada de
dados que poderá ser aproveitada por um comando qualquer.

[comando] << <finalizador>

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos

Exemplos:

Com o primeiro exemplo visto na imagem anterior, o comando cat –n foi


simplesmente iniciado, porém, sem indicação de uma entrada de dados como um arquivo. O
comportamento do mesmo foi aceitar a entrada de dados do próprio teclado enquanto a informação
era passada. O encerramento se dá com a entrada do caractere . (ponto) no início da linha.

No segundo exemplo, é possível inserir mais informações no final do arquivo chamado data-hora,
sem precisar de um editor de textos. A entrada de dados é redirecionada novamente, conforme o que
vai sendo digitado. Para encerrar e enviar as informações, é preciso digitar o finalizador
determinado nos parâmetros (FIM). Assim, tudo o que foi digitado será adicionado ao final do
arquivo indicado, conforme a característica do redirecionador >>.
Redirecionador |

O redirecionador | (PIPE) é, sem dúvida, um dos mais utilizados nas tarefas administrativas do dia-
a-dia. Com esse redirecionador, podemos fazer com que comandos distintos se comuniquem,
tornando-os muito mais flexíveis e avançados.

O | (PIPE) permite que o resultado com sucesso de um comando possa ser transferido para uso em
um outro comando, e assim sucessivamente. Com, ele, a saída de um comando é redirecionada
como entrada de outro.

Sua sintaxe é a seguinte:

<comando1> | <comando2> ...

Dessa forma, criamos grandes filtros e conseguimos atender a qualquer tipo de


necessidade que requer a utilização de vários comandos ao mesmo tempo.

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos

Exemplos:

ls /etc | less
ls /var | cat –n

Nos exemplos anteriores, as saídas geradas pelo primeiro comando foram


encaminhadas para uso nos comandos posteriores ao | (PIPE). É possível usar qualquer sequência
de comandos, apenas é preciso ter atenção à perfeita sintonia com que os mesmos deverão trabalhar.

tee

O comando tee é uma extensão dos redirecionadores apresentados anteriormente, sendo possível
encaminhar o resultado de um comando para um destino especificado, um arquivo qualquer e, ao
mesmo tempo, visualizá-lo na saída padrão (tela).

Sua sintaxe é a seguinte:

<comando1> |tee [opcao] <arquivo> ...

Em [opcao], podemos utilizar a opção -a, para adicionar o resultado do comando ao final de
um arquivo existente, não sobrescrevendo o mesmo.

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos


Exemplos:

Com o exemplo anterior, foi possível visualizar na saída padrão o conteúdo do arquivo chamado
data-hora e também enviar o resultado da visualização para um novo arquivo chamado data-
hora-novo.

Deve-se atentar à utilização do comando tee, pois o mesmo sobrescreve um arquivo no processo de
redirecionamento, como o redirecionador >, mesmo que o comando set -o noclobber esteja
definido. Para que o comando tee apenas adicione ao final do arquivo indicado um determinado
resultado, é preciso utilizar a opção -a, como no último exemplo, com a visualização do arquivo-
lista e seu respectivo redirecionamento para o arquivo data-hora-novo e a saída padrão.

Visualizando arquivos e diretórios

Os sistemas GNU/Linux oferecem uma série de comandos para visualização de arquivos e


diretórios, cada qual com propósitos de exibição particulares.

É comum nos depararmos com arquivos cuja extensão ultrapassa as dimensões do monitor do
computador no momento em que são exibidos. Arquivos grandes são exibidos na tela
sequencialmente até a sua última linha, e isso é feito em uma velocidade que impossibilita a leitura
dos dados. Nesses casos, podemos controlar o fluxo de exibição e aquilo que desejamos visualizar
por meio de comandos de paginação.

A seguir abordaremos os principais comandos de paginação e visualização de arquivos e diretórios.

Exibindo a estrutura de um diretório em árvore


O comando tree exibe a estrutura de um diretório e seu conteúdo em formato de árvore. Sua sintaxe
é a seguinte:

tree [opcoes] [diretorio]

Se utilizarmos o parâmetro –d, serão exibidos somente os diretórios.

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos

O exemplo adiante exibe a estrutura do diretório dir-pai, com seu respectivo conteúdo.

Exibindo e concatenando o conteúdo de arquivos

O comando cat é utilizado para visualizar o conteúdo de um ou mais arquivos, exibindo seu
resultado na saída padrão. Também pode ser utilizado para capturar informações da entrada de
dados padrão, exibindo-as depois na saída padrão.

Sua sintaxe é a seguinte:

cat [opcao] [arquivo]

A tabela a seguir descreve alguns parâmetros que podem ser utilizados com cat:

Opção
Opção GNU Descrição
Unix
-b -- Numera apenas as linhas com
numbernonblan conteúdo na exibição.
k
-n --number Numera todas as linhas na exibição.
-s --squeezeblank Suprime linhas em branco, que se
repetem de forma sequencial na
exibição.

O exemplo a seguir exibe os conteúdos dos arquivos impacta.txt e aula.txt:

cat impacta.txt aula.txt


Este outro exemplo utiliza o redirecionador > para gravar a saída do comando cat no arquivo
treinamentosimpacta.txt:

cat impacta.txt aula.txt > treinamentosimpacta.txt

O comando tac também é utilizado para visualizar um ou mais arquivos, exibindo seu resultado na
saída padrão, porém de forma invertida. Também, pode ser utilizado para capturar informações da
entrada de dados padrão, exibindo-as depois na saída padrão, de forma invertida. Sua sintaxe é a
seguinte:

tac [opcao] [arquivo]

Repare acima o resultado do comando “cat” executado sobre o arquivo exemplo_tac.

Sobre o mesmo arquivo, foi executado com comando “tac”, veja o resultado invertido.

Ajustando a leitura de arquivos

Para obtermos uma leitura ágil de arquivos grandes na linha de comando, podemos utilizar os
comandos more e less. Vejamos:
more

more [opcao] [arquivo(s)]

O comando more é utilizado para visualizar um ou mais arquivos na saída padrão, porém, de forma
mais dinâmica. O comando cat, por exemplo, apresentado anteriormente, não é eficiente para
visualizar arquivos grandes. O more tem uma interface própria, que aceitará diversos comandos
internos, o que facilitará a navegação no arquivo.

Quando o monitor do computador é preenchido com dados do arquivo, o comando more aguarda
uma ação do usuário para continuar a exibir o restante do conteúdo:

 Ao pressionar ENTER, é exibida uma nova linha de conteúdo;


 Ao pressionar a barra de espaços, é exibida uma nova página de dados.

A tabela a seguir descreve as principais opções que podemos utilizar com o comando more:

Opção Unix Descrição


-s Suprime linhas em branco que se repetem
de forma sequencial na exibição
+/”expressao” Inicializa o more, fazendo uma busca pela
expressão indicada, exibindo a primeira linha
que contém tal expressão no arquivo.
+”numero” Inicializa o more no número de linha
indicado.

O comando more utiliza comandos internos, que têm validade apenas com ele em funcionamento.
Esses comandos são representados por teclas específicas, como é apresentado na tabela a seguir:

Comando interno Descrição

h ou ? Exibe a ajuda do more.


ENTER Tecla de navegação. Desce linha a linha, no sentido
do final do arquivo.
SPACE Tecla de navegação. Desce página a página, no
sentido do final do arquivo.
^b Tecla de navegação. Sobe página a página, no
sentido do início do arquivo.
/”expressão” Localiza a expressão no arquivo, porém, a busca é
feita a partir da página atual, no sentido do final do
arquivo. A característica case-sensitive é habilitada
nas buscas.
N Localiza a próxima expressão caso ela exista.
Comando interno Descrição

v Carrega o arquivo com o editor de textos padrão


definido no sistema.
Q Finaliza o more.

less

O comando less também é utilizado para visualizar arquivos de forma dinâmica, com uma
melhoria significativa nas teclas de navegação e comandos internos em relação ao comando more.
O comando more só permite navegar para baixo durante a leitura de um arquivo, ao passo que o less
possibilita também a navegação para cima.

Sua sintaxe é a seguinte:

less [opcao] [arquivo(s)]

A tabela a seguir descreve as principais opções que podemos utilizar com o comando less:

Opção Unix Opção GNU Descrição


-s --squeezeblank- Suprime linhas em branco que
linese se repetem de forma
sequencial na exibição.
+/”expressao” Inicializa o less, fazendo uma
busca pela expressão
indicada, exibindo a primeira
linha que contém tal expressão
no arquivo.
+”numero” Inicializa o less no número de
linha indicado.
-i --ignore-case Ignora o recurso case-sensitive
Opção Unix Opção GNU Descrição
na busca por alguma
expressão na inicialização do
less.

Assim como o comando more, o comando less também utiliza comandos internos, que têm
validade apenas com ele em funcionamento. Esses comandos são representados por teclas
específicas, como é apresentado na tabela a seguir:

Comando interno Descrição


H Exibe a ajuda do less.
←↑→↓ Teclas de navegação linha a linha dentro do
less.
PAGEDOWN Tecla de navegação. Desce página a página, no
sentido do final do arquivo.
PAGEUP Tecla de navegação. Sobe página a página, no
sentido do início do arquivo.
/”expressão” Localiza a expressão no arquivo, porém a busca
é feita a partir da página atual, no sentido do
final do arquivo. A característica case-sensitive
é habilitada nas buscas.
N Localiza a próxima expressão, caso ela exista.
n Retorna à última expressão localizada.
v Carrega o arquivo com o editor de textos
padrão definido no sistema.
Q Finaliza o less.
H Exibe a ajuda do less.

Visualizando as primeiras e últimas linhas de um arquivo

Há situações nas quais desejamos exibir apenas as linhas finais ou iniciais de um arquivo. Para
esses casos, dispomos dos comandos head e tail. Vejamos como utilizá-los:

head

O comando head é utilizado de forma bem simples para visualizar apenas as primeiras linhas de
um arquivo. Por padrão, o comando head exibe apenas as 10 primeiras linhas do arquivo indicado,
podendo haver alteração para quantas linhas forem necessárias, com a utilização do parâmetro –n.
Sua sintaxe é a seguinte:
head [opcao] [arquivo]

Podemos utilizar o redirecionador | para exibição de trechos entre linhas específicas.

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos

No exemplo a seguir, são exibidas as 17 primeiras linhas do arquivo arq-teste:

head -n17 arq-teste

Caso não queira que a exibição seja medida por linhas, mas pelo número de caracteres (byte), o
usuário pode usar o parâmetro –c, conforme o seguinte exemplo:

head –c 100 arq-teste

Nesse exemplo, os cem primeiros caracteres do arquivo arq-teste serão exibidos.

tail

O comando tail é utilizado de forma simples para visualizar apenas as últimas linhas de um
arquivo. Por padrão, o comando tail exibe apenas as 10 últimas linhas do arquivo indicado,
podendo haver alteração para quantas linhas forem necessárias. Sua sintaxe é a seguinte:

tail [opcao] [arquivo]

A tabela a seguir descreve as principais opções que podemos utilizar com o comando tail:

Opção Descrição
Opção GNU
Unix
-n[N] --lines=[N] Exibe as [N] últimas linhas de um
arquivo.
-n[+N] --lines=[+N] Exibe o arquivo a partir da linha [+N]
especificada.
-f --follow=name Prende as 10 últimas linhas do
arquivo, exibindo em tempo real
qualquer nova informação adicionada
ao final do arquivo monitorado.

Como head, o comando tail também aceita o uso do redirecionador | para exibição de trechos entre
linhas específicas.

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos

No exemplo a seguir, inicialmente todas as linhas são numeradas e seu resultado redirecionado ao
comando tail, que exibe apenas as três últimas linhas do arquivo messages:
cat –n /var/log/messages | tail -n3

Neste outro exemplo, também depois de numerar o arquivo por inteiro, a visualização do mesmo
inicia a partir da linha de número 50, até o final do arquivo.

cat –n /var/log/messages | tail -n+50

Já no exemplo a seguir, com a opção -f é feito um monitoramento em tempo real do arquivo


messages. Qualquer incremento de informação no final desse arquivo poderá ser visualizado em
tempo real.

tail -f /var/log/messages

Nota: Para finalizar a visualização em tempo real das 10 últimas linhas de um arquivo ativado
com a opção -f é preciso finalizar o processo com a sequência de teclas CTRL + C.

Preparando um arquivo de texto para impressão

O comando pr prepara um arquivo de texto comum para ser impresso, exibindo o resultado na saída
padrão e podendo dividir o arquivo por páginas e aplicar cabeçalhos com informações de data,
número de página, nome do arquivo, etc. Sua sintaxe é a seguinte:

pr [opcao] [arquivo]

A tabela a seguir descreve algumas opções que podemos utilizar com pr:

Opção Unix Opção GNU Descrição


+[primeira --pages=[primeira Indica um intervalo com os
página]: página]:[última números das páginas
[última página] página] desejadas para impressão.

-D<data> --date- Define uma data específica


format=<data> para anexar ao cabeçalho de
cada página.
-t --omit-header Omite a exibição de
cabeçalhos nas páginas.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

Exemplo:

pr +2:4 -D 07/07/2007 /etc/services


Com o exemplo anterior, foi possível visualizar apenas o intervalo de páginas que vai da página 2
até a página 4, inserindo a data de 07/07/2007 nos cabeçalhos.

Unindo linhas de arquivos distintos

Os comandos paste e join possuem funções semelhantes de união de informações de arquivos


separados, porém cada um tem suas características específicas, como será visto a seguir.

paste

O comando paste faz uma junção de linha a linha de dois arquivos indicados, separando a
informação de cada linha, por padrão, com uma tabulação TAB, e exibindo o resultado da junção
dos arquivos na saída padrão. Sua sintaxe é a seguinte:

paste [opcao] [arquivo] [arquivo]

A tabela a seguir descreve as principais opções que podemos utilizar com paste:

Opção Unix Opção GNU Descrição


-d[delimitador] --delimiters= Indica um delimitador que irá
[delimitador substituir a tabulação TAB no
] momento de separar uma
informação da outra.
-s --serial Define que a junção das linhas
será feita em formato paralelo.

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos

Exemplos:
No exemplo anterior, os arquivos numeros e letras foram respectivamente criados através de
métodos vistos anteriormente com redirecionadores. No primeiro exemplo com tais arquivos, foi
feita uma junção dos conteúdos, exibindo na saída padrão cada linha de cada arquivo lado a lado,
separadas apenas pela tabulação TAB. No segundo exemplo, outra junção foi feita, só que agora em
formato paralelo. É importante lembrar que a tabulação TAB pode ser substituída por um
delimitador qualquer, como no exemplo a seguir:

join

O comando join também faz a junção de linhas de arquivos distintos, porém, essas linhas que serão
unidas deverão ter um campo em comum, um índice que seja idêntico em cada linha, exibindo o
resultado do processo na saída padrão. O comando join trata os arquivos como uma espécie de
banco de dados primitivo, permitindo tratar as informações linha a linha. O índice das linhas deverá
seguir algumas regras, como ser numérico ou alfabético, e também estar ordenado tanto de forma
crescente como decrescente.

A sintaxe de join é a seguinte:

join [opcao] <arquivo> <arquivo>

A tabela a seguir descreve as principais opções que podemos utilizar com join:

Opção Unix Descrição


a [arquivo] Exibe também as linhas que não têm um
correspondente em uma combinação de
arquivos.
Sobre a indicação do arquivo, deverá ser feita
através dos números 1 (primeiro) e 2 (segundo).
Opção Unix Descrição
-t[separador] Especifica o separador de campos
-v [arquivo] Exibe somente as linhas que não têm um
correspondente em uma combinação de
arquivos.
Sobre a indicação do arquivo, deverá ser feita
através dos números 1 (primeiro) e 2 (segundo).

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos

Exemplos:

No exemplo anterior, foi feita uma junção do conteúdo do arquivo cidade com o arquivo estado.
Como a linha de índice número 3 do arquivo cidade não tinha correspondente no arquivo estado,
não apareceu na saída padrão, mas é possível forçar a visualização dessa linha órfã com o seguinte
exemplo:

Também é possível visualizar apenas a linha que não tem correspondente em outro arquivo, como
no exemplo a seguir:

Exibindo linhas repetidas de um arquivo

O comando uniq pode ser utilizado tanto para informar linhas que se repetem de forma sequencial
em determinado arquivo, como para suprimir a exibição de apenas uma das linhas que se repetem,
exibindo qualquer tipo de resultado na saída padrão.

uniq [opcao] [arquivo]


A tabela a seguir descreve as principais opções que podemos utilizar com uniq:

Opção
Opção GNU Descrição
Unix
-c --count Exibe a quantidade de vezes que
cada linha se repete.
-d --repeated Exibe apenas um resumo do que foi
suprimido das linhas repetidas.
-i --ignorecase É desabilitada a característica case-
sensitive no momento de comparar
as linhas.
-u --unique Exibe apenas as linhas únicas
presentes no arquivo.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

Exemplo:

No exemplo anterior, depois de criado o ambiente de teste, foi feita uma filtragem em que só foram
exibidas as linhas únicas e posteriormente as linhas que se repetem sequencialmente no arquivo.

Exibindo um arquivo em um formato específico

Os sistemas GNU/Linux possuem ferramentas que permitem converter arquivos para formatos
específicos. Para tais tarefas, utilizam-se os comandos od e hexdump.
od

O comando od é utilizado para fazer uma conversão sobre o formato da visualização de um


arquivo, de forma que o arquivo original não é alterado em nada, apenas a sua visualização é
proporcionada no formato desejado pelo usuário.

od [opcao] [arquivo]

A tabela a seguir descreve as principais opções que podemos utilizar com od:

Opção Unix Descrição


-x Permite a visualização do arquivo no formato
hexadecimal.
-o Permite a visualização do arquivo no formato
octal.
-c Permite a visualização do arquivo no formato
ASCII.
-a Permite a visualização do arquivo no formato de
nome dos caracteres.

No exemplo acima, foi usado o comando “od” com a opção –o, retornando o arquivo
/etc/resolv.conf em formato octal.

hexdump

O comando hexdump também é utilizado para fazer conversão do formato do


arquivo, com uma mudança notável sobre o od na formatação, no momento de exibir a conversão
na saída padrão.

hexdump [opcao] [arquivo]

A tabela a seguir descreve as principais opções que podemos utilizar com hexdump:

Opção Unix Descrição


-x Converte o arquivo para o formato hexadecimal.
-o Converte o arquivo para o formato octal.
-c Converte o arquivo para o formato ASCII.
No exemplo acima, foi usado o comando “hexdump” com a opção –x, retornando o arquivo
/etc/resolv.conf em formato hexadecimal

Exibindo a quantidade de linhas, de palavras e caracteres


de um arquivo

O comando wc (word count) é utilizado para obter informações sobre o conteúdo do arquivo, como
quantidade de linhas, quantidade de palavras e quantidade de caracteres presentes em um arquivo.

Sua sintaxe é a seguinte:

wc [opcao] [arquivo]

A tabela a seguir descreve as principais opções que podemos utilizar com o comando wc:

Opção
Opção GNU Descrição
Unix
-l --lines Exibe somente a quantidade de
linhas existentes em um arquivo.
-w --words Exibe somente a quantidade de
palavras existentes em um arquivo.
-c / -m --bytes / --chars Exibe somente a quantidade de
caracteres existentes em um arquivo.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

No exemplo a seguir, temos o resultado do comando wc trazendo as informações sobre o arquivo


passwd, como número de linhas, número de palavras e número de caracteres presentes no mesmo:

Classificando numericamente ou alfabeticamente

O comando sort tem a função de classificar um arquivo de texto tanto em modo alfabético quanto
numérico, em formato crescente ou decrescente. O resultado dessa classificação, por padrão, é
exibido na tela, mas pode ser encaminhado para um arquivo especificado, inclusive para o próprio
arquivo original. Sua sintaxe é a seguinte:

sort [opcao] [arquivo]

Esse comando é útil em tarefas como rápida exibição de nomes e exclusão de itens repetidos. A
tabela a seguir descreve as principais opções que podemos utilizar com o comando sort:

Opção Unix Descrição


-n Classifica arquivos numéricos.
-r Inverte a classificação.
-o <arquivo> Indica um arquivo no qual o resultado classificado
poderá ser salvo, podendo ser inclusive o arquivo
original.
-u Depois de classificar o arquivo, suprime linhas que
se repetem sequencialmente, exibindo apenas
uma.
-f Ignora caracteres em maiúsculo e minúsculo.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

No exemplo a seguir, é definida uma classificação numérica e em ordem invertida, salvando o


resultado no próprio arquivo em que é aplicada a classificação:

Exibindo linhas de texto na tela

O comando echo mostra alguma informação na tela do computador. Pode ser utilizado pelo usuário
para obtenção de dados sobre a tarefa que ele estiver executando no momento. Um de seus fins mais
comuns é a inspeção de variáveis de ambiente.

A informação que o usuário deseja capturar pode ainda ser mandada para um arquivo determinado,
caso se junte o comando echo a algum redirecionador.
Inserindo o comando echo “Isto é um teste”, como feito acima, ele retornará na tela a frase “Isto é
um teste”. Este comando será muito util quando chegarmos nos capítulo de shell scripts e variáveis.

Filtrando dados

Uma das tarefas com as quais administradores de sistema convivem regularmente é a filtragem de
informações em arquivos. Vejamos os principais comandos responsáveis pela filtragem de dados.

Localizando palavras ou expressões

A seguir, serão vistos comandos úteis para a localização de padrões em arquivos diferentes, tal qual
a substituição de padrões encontrados.

grep

O comando grep é utilizado para localizar um padrão especificado, que pode ser uma palavra ou
expressão em um ou vários arquivos. O resultado é a linha por extenso na qual se encontra tal
padrão desejado, que é exibida na saída padrão. Sua sintaxe é a seguinte:

grep [opcao] <padrao> <arquivo>

A tabela a seguir descreve as principais opções que podemos utilizar com o comando grep:

Opção Unix Opção GNU Descrição


-A [numero] --aftercontext= Exibe uma quantidade
[numero] especificada de linhas após
(after) a linha em que se
encontra o padrão desejado.
-B [numero] --beforecontext= Exibe uma quantidade
[numero] especificada de linhas antes
(before) da linha em que se
encontra o padrão desejado.
-c --count Em vez de exibir a linha na qual
se encontra o padrão desejado,
é exibida uma quantidade de
Opção Unix Opção GNU Descrição
linhas na qual o padrão está
presente.
--color=[opcao] Deixa o resultado colorido,
colocando em destaque o
padrão relacionado na
pesquisa. [opcao] poder ser
igual a auto ou never (padrão).
-h --no-filename Não exibe o nome do arquivo no
qual foi encontrado determinado
padrão. É útil quando a busca é
em vários arquivos.
-i --ignore-case Ignora a característica de case-
sensitve no momento de buscar
algum padrão.
-n --line-number Exibe também o número da
linha na qual o padrão se
encontra.
-r --recursive Busca recursiva,
preferencialmente utilizada em
diretórios.
-v --invert-match Inverte a lógica da busca.
-E --extended-regexp Interpreta <padrao> como uma
expressão regular estendida.
-F --fixed-strings Interpreta <padrao> como uma
lista de strings fixas.

Vejamos:

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos

No primeiro exemplo (primeira linha da imagem anterior), há uma simples busca pelo padrão
loopback em todos os arquivos do diretório /etc/; uma busca recursiva utilizando a opção -r.

Já nos próximos exemplos, foi aproveitado o resultado do comando ls, e a partir desse resultado,
utilizando o redirecionador | (PIPE), foi feita uma pesquisa pelos padrões hda (linha 11), sd
(linha 12) e fd (linha 17), respectivamente.

egrep

É um comando equivalente ao grep –E. Busca uma expressão regular estendida num arquivo.

Acima, usamos o “egrep” em busca da expressão “root” no arquivo /etc/passwd.


O egrep é um comando muito utilizado para filtros com expressões regulares que serão vistas mais a
frente. Com esta funcionalidade surgem infinitas possibilidades com scripts em shell e comandos de
administração do sistema como veremos.

fgrep

É um comando equivalente ao grep –F. Busca as ocorrências de uma string fixa num arquivo, sem
interpretá-la como uma expressão regular.

Acima, usamos como exemplo o comando “fgrep” para filtrar a expressão fixa “EXT3” no arquivo
de log /var/log/messages.

sed
O comando sed não só localiza expressões ou padrões em arquivos, como também possibilita a
alteração dos dados encontrados.

No exemplo acima é feita a leitura do arquivo chamado arquivo.txt, ele possui 4 linhas. Utilizamos
em seguida o comando sed para excluir as linhas 1 e 2 (1,2d), o resultado foi exibido na tela
somente com as duas ultimas linhas.
Note que depois foi feita novamente a leitura do arquivo e ele permanece intacto.
Se fosse de nossa vontade alterar o arquivo, utilizaríamos a opção –i. Esta opção veremos na prática
no laboratório deste capítulo.

Obtendo colunas de uma tabela

O comando cut é utilizado para obter colunas de uma tabela. Com essa definição, um simples
arquivo, com um delimitador qualquer separando uma informação da outra, já pode ser considerado
uma tabela, podendo ter informações de suas respectivas colunas extraídas. Sua sintaxe é a seguinte:

cut [opcao] [arquivo]

A tabela a seguir descreve as principais opções que podemos utilizar com o comando cut:

Opção
Opção GNU Descrição
Unix
-c [num] --caractere=[num] Tal opção define cada caractere
como membro de uma coluna
específica.
-d [delim.] --delimiter=[delim.] Especifica o delimitador, um
único caractere que estará
separando uma informação da
outra.
-f [coluna] --fildes=[coluna] Utilizada em conjunto com a
Opção
Opção GNU Descrição
Unix
opção –d, após especificar o
delimitador, informar o número
de coluna ou intervalo que será
extraído.

Vejamos:

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos

No primeiro exemplo da figura anterior (primeira linha), depois de definido o delimitador sendo o
caractere : (dois pontos) no arquivo /etc/passwd , foi solicitada a visualização das colunas 1, 2 e 3
e exibido apenas o primeiro resultado.

Já no segundo exemplo (quarta linha), depois de uma filtragem longa para obter apenas a linha com
o número de endereço ip e também de reduzir os espaços múltiplos a um único espaço e substituí-lo
pelo caractere -, foi possível, através do comando cut especificando o delimitador, obter apenas o
número de ip do resultado gerado pela filtragem anterior.

Já no último exemplo (sétima linha), após uma simples filtragem localizando a linha com o padrão
root, foram exibidos apenas os quatro primeiros caracteres de tal linha, devido à função do corte de
colunas por caractere atribuída à opção –c.

Um comando que realiza a mesma tarefa que o cut é o awk. No entanto, este último é uma
linguagem de processamento e escaneamento de padrões e apresenta uma quantidade maior de
opções e recursos para expressões regulares.

Determinando o tipo de arquivo

Diferente de outros sistemas operacionais, os arquivos em plataformas GNU/Linux não são


definidos por suas extensões. Caso o nome de algum arquivo possua o formato nome.xyz, por
exemplo, esses três caracteres finais não passam de uma ferramenta de opção do usuário, se ele
achar que assim se organizará melhor, porém isso não possui nenhuma funcionalidade para o
sistema.

Assim sendo, é impossível ter garantia do tipo de um arquivo levando em conta apenas o seu nome.
Para isso, usa-se o comando file, que analisa o conteúdo do arquivo e determina seu tipo.

Sua sintaxe é a seguinte:


file [arquivo]

Substituindo e excluindo caracteres de um arquivo

O comando tr pode ser utilizado tanto para converter caracteres de arquivos como para deletá-los.
O comando tr tem uma particularidade, que é sempre ter sua entrada de dados redirecionada.
Depois da conversão, o resultado é exibido na saída padrão. Sua sintaxe é a seguinte:

tr [opcao] <definicao1> [definicao2]

Opção Unix Opção GNU Descrição


-d <caractere(s)> --delete<caractere(s)> Utilizada para apagar
caracteres.
-s --squeeze-repeats Suprime uma
sequência de
caracteres que se
repetem.

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos

Exemplos:

No primeiro exemplo (primeira linha), há uma conversão simples de todos os caracteres que vão do
intervalo a-z para A-Z no arquivo repeteco, gravando seu resultado em um novo arquivo de nome
novo-repeteco e exibindo também o mesmo resultado na saída padrão. Já no segundo exemplo
(décima segunda linha), todos os caracteres - foram removidos do arquivo repeteco, gravando tal
resultado em um novo arquivo.

No exemplo a seguir, uma sequência de espaços simples foi suprimida e substituída pelo caractere .
(ponto):

Para fazer referência a determinadas definições, é possível usar alguns interpretadores que
facilitarão em determinadas situações, como mostra a seguinte tabela:

Interpretador Descrição
[:digit:] Representa os valores numéricos (0-9).
[:lower:] Representa todas as letras do alfabeto em
minúsculo.
[:upper:] Representa todas as letras do alfabeto em
maiúsculo.
[:print:] Representa todos os caracteres imprimíveis,
letras, números, pontuações, etc.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

Exemplo:

No exemplo anterior, foram retirados todos os dígitos numéricos de arq-teste.

Numerando arquivos

O comando nl é utilizado para numerar um arquivo qualquer, exibindo essa numeração na saída
padrão. Sobre a numeração que poderá ser aplicada, existem alguns estilos e formatos a serem
definidos, conforme as opções do comando.

Sua sintaxe é a seguinte:

nl [opcao] [arquivo]

Opção Unix Opção GNU Descrição


-b[estilo] --budy- Ativa o estilo de numeração,
numbering=[estilo] em que:
 a numera todas as linhas do
arquivo;
 t numera apenas as linhas que
têm conteúdo
(opção padrão do comando nl);
Opção Unix Opção GNU Descrição
 n não numera linhas.
- --number- Define um separador que
s[separador separator=[separador ficará entre os números
] ] definidos pelo comando nl e o
texto de cada linha do arquivo.
-i[valor] --page- Define um valor incremental
increment=[valor] para a numeração aplicada no
arquivo.
-v[início da --first-page=[inicio da Define qual será o início da
numeração] numeração] numeração aplicada no
arquivo.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

Vejamos o seguinte exemplo:

O exemplo anterior, com o conjunto de opções, faz uma numeração completa na saída padrão, em
que todas as linhas, incluindo as linhas em branco do arquivo, serão numeradas, porém, começando
a numeração no número 0 e usando o valor incremental 2, criando assim uma lista de número par e
usando o caractere + como separador da numeração.

Formatando parágrafos de arquivos

O comando fmt é utilizado para formatar parágrafos de arquivos, exibindo seu


resultado na saída padrão. Sua sintaxe é a seguinte:

fmt [opcao] [arquivo]

Opção
Opção GNU Descrição
Unix
-s --split-only Quebra linhas longas, que
ultrapassem o número de colunas
definido.
-w[valor] --width=[valor] Define a largura máxima de cada
linha no arquivo (o valor padrão é
75).
Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

Exemplo:

fmt -s -w30 /etc/services

Com esse exemplo, o arquivo /etc/services teve seus parágrafos formatados com uma diminuição
da largura das linhas para o valor de coluna 30, quebrando linhas que tinham tamanho maior que o
estipulado. Lembrando que essa formatação foi feita apenas no momento da exibição na saída
padrão, para armazenar esse resultado em um arquivo, basta utilizar os redirecionadores
apresentados anteriormente.

Links

Arquivos especiais cuja função é servir de atalho para outros arquivos, os links facilitam a
navegação e o acesso a arquivos diferentes. Antes de partirmos para a criação de links, é importante
compreender o que é um inode, uma característica muito importante presente nos sistemas Unix-
like e base para o funcionamento e entendimento pleno dos tipos de link com os quais poderemos
trabalhar.

Inodes

O inode (abreviação de index node) é uma identificação que cada arquivo tem no sistema. A
referência pode ser por um número, em que tal número pode ser visualizado com a opção -i do
comando ls, ou com o comando stat.

O inode é utilizado de forma direta pelo sistema de arquivos, que é como um relatório sobre o
arquivo, com todas as informações sobre ele, como dono, grupo, permissões, nome, etc.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

O exemplo a seguir exibe o número de Inode de um arquivo qualquer:


Tipos de links

Sobre os tipos de link, existem dois: Link simbólico e Link físico (Hardlink).

Link simbólico

Um link simbólico é simplesmente um tipo de arquivo especial, que é representado pela letra l,
caso listado com o comando ls -l. Esse arquivo é apenas um apontamento, um atalho para o arquivo
original ao qual o link está ligado. Por ser um atalho ao arquivo original, e caso seja apagado, o
arquivo original continua intacto. Porém, se for o contrário, o arquivo original for apagado, o link se
torna quebrado ou inacessível.

Link físico (hardlink)

Um link físico, ou hardlink, tem características bem diferentes de um link simbólico, pois um link
físico causa uma falsa sensação de que o arquivo original foi duplicado, o que na verdade foi uma
pequena alteração feita no inode do mesmo, no qual é adicionado um novo nome para ele. Um link
físico nada mais é do que relacionar um arquivo por mais de um nome, alterando diretamente o
inode do mesmo.

Criando links

O comando ln poderá ser utilizado para criar os dois tipos de link.

ln [opcao] <origem> <destino>

A tabela a seguir descreve as principais opções que podemos utilizar com o comando ln:

Opção
Opção GNU Descrição
Unix
-s --symbolic Utilizada para criar um link simbólico
para arquivos.
-d --directory Cria um link físico para diretórios.
 Criando um link simbólico

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

No exemplo anterior, foi possível criar um link simbólico para o arquivo chamado services,
apontando para o link de nome link-simbólico. É importante salientar algumas diferenças entre o
arquivo original e o link simbólico, como número de inode, tamanho e permissões. Isso se deve ao
fato de o link simbólico ser apenas um atalho para o arquivo original, mantendo dependências
diretas com relação ao arquivo original.

 Criando um link físico

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

No exemplo anterior, para criar um link físico com o comando ln, basta usar o
comando ln sem qualquer tipo de opção. É possível observar agora que todas as informações do
arquivo original são idênticas às do arquivo link-físico, mudando apenas o nome, o que dá a
impressão de que o arquivo foi duplicado, mas devido às características do inode, apenas um novo
nome foi adicionado ao arquivo original. Podemos observar também que uma informação que fica à
direita das permissões também sofreu uma leve alteração. Esse valor é o número de links físicos
presentes para esse arquivo, ou seja, a quantidade de nomes para ele.

Convertendo tabulações em espaços e vice-versa

Vejamos, a seguir, como converter tabulações em espaços e vice-versa com uso dos comandos
expand e unexpand.

expand
O comando expand é utilizado para converter tabulações TAB (oito espaços) em uma quantidade
de espaços desejada, exibindo o resultado na saída padrão.

expand [opcao] [arquivo]

A tabela a seguir descreve as principais opções que podemos utilizar com o comando expand:

Opção Unix Opção GNU Descrição


-i --initial Converte apenas os TABs que
estiverem no início das linhas.
-t [numero] --tabs[numero] Define um número de espaços
desejados para a conversão.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

Exemplo:

No exemplo anterior, primeiro foi criado o cenário com o comando echo, imprimindo na tela a
respectiva frase com uma tabulação TAB no início da mesma. Através do redirecionador |tee, o
resultado foi armazenado no arquivo de nome arq-com-tab e exibido na tela ao mesmo tempo.
Logo em seguida, foi aplicado o comando expand no arquivo de nome arq-com-tab, que
substituiu a tabulação TAB por um simples espaço.

unexpand

O comando unexpand é utilizado para converter agora uma seqüência de espaços em branco (no
mínimo 2) em tabulações TAB, exibindo o resultado da conversão na saída padrão.

unexpand [opcao] [arquivo]

As principal opção que podemos utilizar com o comando unexpand é a -t, que define um número
de tabulações TAB que será utilizado na conversão.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

Exemplo:
No exemplo anterior, o comando unexpand fez uma conversão da sequência de dois espaços no
início das linhas para duas tabulações TAB.

Dividindo um arquivo em partes

O comando split é utilizado para dividir arquivos em vários pedaços, sendo possível dividir
qualquer tipo de arquivo. Os dois modos de trabalhar com essa divisão é basicamente dividir o
arquivo pelo tamanho ou pelo número de linhas. A última opção é mais útil no dia-a-dia.

Para dividir um arquivo por tamanho ou número de linhas, deverá ser informado ao comando split
qual tamanho terá cada arquivo ou a quantidade de linhas. O comando não calcula
automaticamente, e o arquivo original permanecerá intacto e um sufixo padrão será atribuído aos
nomes de arquivos que forem divididos.

A sintaxe de split é a seguinte:

split [opcao] [arquivo] [prefixo]

A tabela a seguir descreve as principais opções utilizadas com split:

Opção Unix Opção GNU Descrição


-b<tamanho> --bytes= Divide um arquivo por tamanho.
<tamanho> A divisão padrão dos arquivos é
em byte, mas poderão ser
utilizados os sufixos K para
kbytes, M para megabytes, G
para gigabytes e assim
sucessivamente, T, P, E, Z, Y.
-d --numeric- Usa um sufixo de número em
suffixes vez de letras na nomenclatura
dos arquivos divididos.
-l<num. de --lines= <num. de Utilizada para dividir um
linhas> linha> arquivo por número de linhas.
--verbose Exibe em modo interativo a
divisão dos arquivos.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo


Exemplo:

No primeiro exemplo (terceira linha), foi feita uma divisão do arquivo de nome services por
número de linhas, colocando 250 linhas por arquivo e exibindo o processo de divisão. Já no
segundo exemplo (décima linha), uma divisão por tamanho foi feita, sendo especificada uma
divisão de arquivos de 6 kilobytes cada, mas com alguns complementos, como aplicar um nome
aos arquivos divididos e também usar sufixo numérico em vez de alfabético.

 Unindo partes de um arquivo dividido com o split

Para juntar novamente tais arquivos divididos, basta utilizar o recurso do


redirecionador > junto com o comando cat, que visualizará cada arquivo, jogando o resultado para
um arquivo novo. O exemplo a seguir ilustra essa ação:

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

Administração diária do sistema

Diversos comandos estão disponíveis nos sistemas GNU/Linux para promover a coleta de dados
sobre o sistema em si e seus arquivos, auxiliando na sua administração. As ferramentas que serão
mostradas a seguir podem ser bastante úteis ao usuário.

Exibindo o espaço em disco


O comando df é utilizado para obtermos informações de espaço em disco e traz detalhes sobre as
partições que estão montadas atualmente no sistema, como quantidade total de espaço, espaço livre,
espaço utilizado, etc. O sufixo utilizado na exibição padrão do comando df é em kilobytes. Sua
sintaxe é a seguinte:

df [opcao] [ponto de montagem] ...

A tabela a seguir descreve as principais opções que podemos utilizar com o comando df:

Opção
Opção GNU Descrição
Unix
-a --all Também exibe na listagem os
sistemas de arquivos que não
ocupam blocos, ou seja, consumem
espaço real. Geralmente são
montagens virtuais.
-h --human- Exibe o tamanho em sufixo amigável,
readable colocando M para Megabyte, G para
Gigabyte, etc.
-i --inodes Exibe, em vez do tamanho disponível
e utilizado, informações de uso de i-
nodes nos sistemas de arquivos.
-t <S. A.> --type= <S. A.> Exibe somente os detalhes do
sistema de arquivo indicado.

Se entrarmos apenas com o comando df, sem especificar um parâmetro e ponto de montagem, é
gerada uma listagem de todas as partições atualmente em uso no sistema, com suas respectivas
informações de utilização, representando também o ponto de montagem ao qual cada partição está
relacionada.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

Vejamos este exemplo:

df -h /

Exibe as informações detalhadas da partição relacionada ao ponto de montagem /(diretório raiz), em


formato amigável.

Exibindo o tamanho de arquivos, diretórios e partições

O comando du é muito útil para obtermos informações de uso do espaço em disco por determinado
arquivo ou também sobre todos os arquivos em diretórios especificados. Caso o comando du seja
aplicado em um arquivo, é calculado o tamanho dele; caso seja em um diretório, é calculado, por
padrão, o tamanho de cada subdiretório presente no diretório principal, mostrando no final da
listagem o tamanho total que ele ocupa no sistema. Sua sintaxe é a seguinte:
du [opcao] [arquivo1] [arquivo2] ...

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

Exemplo:

du /etc/

No exemplo anterior, o que aparece na listagem é o tamanho de todos os subdiretórios que estão
alocados no diretório /etc/ e a última linha do resultado é o tamanho total dele. O sufixo de
tamanho que é exibido nesse exemplo é em kilobytes, o que pode ser melhorado com as opções do
comando du que veremos a seguir:

Opção
Opção GNU Descrição
Unix
-a --all Faz uma contagem geral, exibindo
também o tamanho de todos os
arquivos presentes nos subdiretórios.
-c --total Exibe um total quando é passado
mais de um parâmetro para cálculo
de tamanho.
-s --summarize Exibe apenas o tamanho total do
diretório informado, não exibindo o
tamanho de cada subdiretório dele.
-h --human- Exibe o tamanho em sufixo amigável,
readable colocando M para Megabyte, G para
Gigabyte, etc.

Para exibir o tamanho em bytes, kilobytes e megabytes, utilizamos du com os parâmetros –b, -k e –
m, respectivamente. Para que du exiba a quantidade de links existentes para o arquivo, diretório ou
partição, utilizamos –l.

Exibindo o consumo de memória RAM

O comando free mostra o consumo de memória RAM, a quantidade de memória livre e os detalhes
sobre uso de memória virtual (swap).

Acima usamos o comando “free” com a opção –k, desta forma é exibido o resultado na tela em KB.
Exibindo/configurando a data e hora do sistema

O comando date exibe a data e a hora do sistema e permite configurar seu modo de exibição através
de opções que podem ser encontradas no manual acessível a partir do comando man date.

Quando executado pelo administrador, o comando date permite não só a exibição da data e da hora
do sistema, mas também seu ajuste.

Exibindo o tempo de uso do computador

O comando uptime informa por quanto tempo o computador está sendo usado, além de mostrar
outros detalhes de seu uso, como o número de usuários acessando o servidor e a carga de trabalho.

Exibindo a versão e a arquitetura do sistema

Com o comando uname, o usuário visualiza informações sobre a versão do kernel que está sendo
utilizada e a arquitetura do sistema

Acima usamos o comando “uname” com a opção –a para obtermos informações completas sobre o
kernel do sistema.

Exibindo a diferença entre arquivos

Para visualizar a diferença entre arquivos e diretórios, utiliza-se o comando diff, que deve ser
acrescido da opção -r no caso da comparação entre de diretórios, para que sejam exibidas também
as diferenças entre todos os subdiretórios.

No exemplo acima, observe que fizemos a leitura do arquivo chamado “arquivo.txt”. Neste arquivo,
a quinta linha é complementada com a informação “Arquivo 1”. Em seguida fizemos a leitura do
arquivo chamado “arquivo2.txt”. Neste arquivo a quinta linha é complementada com a informação
“Arquivo 2”, além de mais duas linhas (sendo a ultima repedita).
Com o comando “diff”, ele faz a comparação entre os 2 arquivos e nos informa a diferença entre
eles.

Exibindo o tempo de execução de um programa

O tempo de execução de um programa pode ser exibido com o comando time, cuja sintaxe é:

time <programa>

No exemplo acima, usamos o comando time para verificar a quanto tempo está em execução o
comando sshd

Localizando arquivos e diretórios

A seguir, serão vistos os comandos usados na localização de arquivos e diretórios, tal qual na
criação de bancos de dados onde essas buscas poderão ser executadas.

Find

O comando find é, sem dúvida, o comando mais completo quando o assunto é a busca de arquivos,
seja qual for o tipo. Sua sintaxe, dependendo da filtragem aplicada e da sua utilização, poderá se
tornar extensa e complexa. Porém, ele é um comando muito versátil e proporciona muita
flexibilidade na hora de buscar arquivos, podendo localizar arquivos de determinados tipos
(arquivo comum, arquivo de dispositivo de bloco, arquivo de socket, etc.), arquivos que
tenham determinado tamanho, que sejam de determinado dono, etc.

Sua sintaxe é a seguinte:

find [caminho da busca] [expressao]

A tabela seguinte descreve as principais opções que podem ser utilizadas com find:

Opção Descrição
-name <nome> Busca arquivos de qualquer tipo, cujo nome
seja igual a <nome>, conforme colocado na
busca. A busca é feita com a característica
case-sensitive.
-iname <nome> Busca arquivos de qualquer tipo, cujo nome
seja igual a <nome>, conforme colocado na
busca. A busca agora é feita com a
característica case-sensitive desabilitada.
-mindepth <valor> Localiza arquivos em uma estrutura mínima
de subdiretórios.
-maxdepth Localiza arquivos em uma estrutura máxima
<valor> de subdiretórios.
-type<tipo> Especifica o tipo de arquivo desejado na
busca, em que o tipo pode ser:
 b - Arquivo especial orientado a bloco;
 c - Arquivo especial orientado a caractere;

 d - Diretório;
 f - Arquivo regular;

 p - Arquivo especial do tipo PIPE;


 s - Arquivo especial do tipo socket.
-user<nome> Localiza apenas os arquivos que pertençam
ao usuário especificado em <nome>.
-group<nome> Localiza apenas os arquivos que pertençam
ao grupo primário especificado em <nome>.
-amin <n> Realiza a busca por arquivos que foram
acessados a <n> minutos.
-atime <n> Realiza a busca por arquivos que foram
Opção Descrição
acessados a <n> dias.
-cmin <n> Realiza a busca por arquivos que foram
modificados a <n> minutos.
-mtime <n> Realiza a busca por arquivos que foram
modificados a <n> dias.
-size Realiza uma busca pelo tamanho do arquivo.
<c[nomenclatura]> Se apenas o valor de n for especificado, o
tipo de busca sobre o tamanho equivale a
blocos (1 bloco = 512bytes), que também é
equivalente à nomenclatura b. Também é
possível utilizar as nomenclaturas c (bytes), k
(kilobytes), M (megabytes), G (Gigabytes).
-exec <comando> Executa um comando em cada arquivo que o
{} \; comando find localizou no tipo de busca
especificado.
-uid <n> Realiza a busca por arquivos cuja
identificação numérica do usuário seja <n>.
-perm <modo> Realiza a busca por arquivos cujo modo de
permissão seja <modo>. Esse modo pode
ser numérico ou literal.

Um detalhe importante sobre as buscas por tempo é que o valor de <n> pode receber alguns
complementos, como [+] ou [-], em que:

Tempo
Descrição
<n>
<n> Retorna tudo que foi acessado ou modificado a
exatamente <n> minutos/dias atrás.
<-n> Retorna tudo que foi acessado ou modificado a
menos (-) de <n> minutos/dias atrás.
<+n> Retorna tudo que foi acessado ou modificado a
mais (+) de <n> minutos/dias atrás.

A nomenclatura dia equivale a 24 horas x <n>.

Sobre o tamanho dos arquivos, o valor representado por <n> também pode receber complementos
como [+] ou [-], em que:

Tamanho
Descrição
<n>
<n> Retorna um tamanho que tenha exatamente o
valor especificado em <n>.
<-n> Retorna todo valor menor (-) que o valor
especificado em <n>.
<+n> Retorna todo valor maior (+) que o valor
especificado em <n>.

Vejamos, então, alguns exemplos sobre o comando find.


No exemplo acima, foi utilizado o comando find para localizar arquivos com o nome (-name)
“arquivo.txt”

Locate

locate [opcao] [padrao]

O comando locate também é utilizado para localizar arquivos no sistema. Ele não tem toda a
versatilidade do comando find, mas, em compensação, é extremamente rápido. Um dos motivos
para tanto é que o comando locate faz as buscas pelos nomes de arquivos em um banco de dados,
em vez de ficar acessando o disco procurando arquivo por arquivo. É uma boa característica do
comando locate, mas ao mesmo tempo não é tão prática, pois esse banco de dados deverá ser
criado e constantemente atualizado para que a busca seja sempre completa. Esse banco de dados é
controlado pelo comando updatedb, que será o próximo comando que estudaremos.

A tabela seguinte descreve as principais opções que podem ser utilizadas com locate:

Opção
Opção GNU Descrição
Unix
-c --count Exibe apenas a quantidade de
ocorrências encontradas.
-d --database= Especifica o caminho de um banco
[caminho [caminho BD] de dados diferente para fazer uma
BD] pesquisa.
-i --ignorecase É desabilitada a característica case-
sensitve no momento de uma busca.
-S --statistics Exibe estatísticas sobre o banco de
dados, número de arquivos,
diretórios, etc.

Neste exemplo, usamos o locate para encontrar o arquivo “arquivo2.txt”

updatedb

Utilizando o comando updatedb, o banco de dados utilizado pelo comando locate é criado e
atualizado. É esse comando que, com a utilização de algumas regras, poderá criar um banco de
dados que corresponda a necessidades específicas.
Como a criação da primeira base de dados do sistema exige uma varredura do disco que nunca foi
realizada anteriormente, o updatebd funciona de forma lenta na primeira vez em que é utilizado

Sua sintaxe é a seguinte:

updatedb [opcao]

O arquivo de configuração do updatedb é o arquivo /etc/updatedb.conf. O


caminho e nome do local onde fica armazenado o banco de dados criado pelo
comando updatedb é /var/cache/locate/locatedb.

O comando updatedb, após ser executado não retorna qualquer informação na tela.

slocate

O comando slocate é parecido com o comando locate visto anteriormente. O


comando slocate seria uma versão segura do comando locate, em que a idéia
principal é exibir apenas os arquivos nos quais o usuário atual que está fazendo a pesquisa tem
algum tipo de permissão. O slocate trabalha com um banco de dados diferente, que poderá ser
criado com o próprio comando slocate, e que, por padrão, ficará armazenado em
var/lib/slocate/slocate.db.

Sua sintaxe é a seguinte:

slocate [opcao] [padrao]

A tabela seguinte descreve as principais opções que podem ser utilizadas com slocate:

Opção Unix Opção GNU Descrição


-u Utilizada para criar o banco de dados
que o comando slocate irá se basear.
-d [caminho --database= Especifica o caminho de um banco de
BD] [caminho BD] dados diferente para fazer uma pesquisa.
-i É desabilitada a característica case-
sensitve no momento de uma busca.
-o [arquivo] Cria um banco de dados com um nome
desejado, podendo, também, o seu
caminho ser especificado.
Por exemplo:

slocate -o /tmp/novo-banco.bd

ou

slocate --output=/tmp/novo-banco.bd
PS – O Comando slocate não é padrão nas instalações Debian e também não estão nos respositórios,
somente o mlocate.
Tanto um comando, quanto o outro não são requisitos das provas LPI. É necessário mante-lo?

Outros comandos

Vejamos, a seguir, outros comandos que podemos utilizar para finalidades específicas, como a
pausa de um processo e a impressão de uma sequência de números na tela.

sleep

O comando sleep aplica uma pausa, em segundos de tempo.

Exemplo:
Ao digitar o comando:
sleep 15
o sistema aguardará 15 segundos para retornar ao prompt

logger

Com o comando logger, o usuário manualmente cria mensagens de log. O conteúdo da mensagem
deve ser inserido como argumento do comando em sua sintaxe.

Acima, usamos o comando “logger” para inserir a frase “Log de Teste Inserido” dentro do log do
sistema.
Pudemos conferir o resultado executando o comando “tail” no arquivo de log /var/log/messages,
note o resultado na ultima linha.

xargs
O comando xargs permite a criação de linhas de comando para serem executadas por programas
determinados pelo usuário.

Fizemos uma listagem no diretório atual, repare nos arquivos existentes.


Na sequencia, fizemos uma listagem em arquivos que iniciam com “arquivo2” e com o comando
xargs, adicionei o comando “rm” ao resultado ou seja, qualquer arquivo que for encontrado será
deletado.
No final fizemos novamente a listagem e reparem que foi deletado o arquivo “arquivo2.txt”

seq

O comando seq tem a simples função de gerar uma sequência de números, seguindo os intervalos
definidos pelo usuário. Aliado a outros comandos, sua aplicação pode ser bastante variada e útil.

Acima foram usados dois exemplos com o comando “seq”, no primeiro ele criou uma sequencia de
1 a 5, no segundo exemplo, a sequência de 0 a 10 deve seguir de 2 em 2 (somente os números
pares).

Tópicos para revisão do capítulo

Atente para os tópicos a seguir. Eles devem ser estudados com muita atenção, pois
representam os pontos mais importantes do capítulo.

 O comando ls lista o conteúdo ou informações detalhadas de diretórios e arquivos;

 O comando touch cria um arquivo com zero bytes de tamanho, enquanto o mkdir cria um diretório;

 O comando rm exclui arquivos e diretórios, estando eles vazios ou nãos, e o rmdir remove diretórios vazios;

 O comando cp copia arquivos ou diretórios, de determinada origem para um determinado destino;

 O comando mv é utilizado para mover ou renomear arquivos e diretórios;

 Existem curingas nos sistemas GNU/Linux, que têm como função especificar, selecionar ou substituir um
caractere ou uma sequência de caracteres, auxiliando em todas as tarefas relacionadas a arquivos ou diretórios,
como cópia, exclusão, movimentação, entre outras. São eles o asterisco (*), o ponto de interrogação (?) e os
colchetes ([ ]);

 É possível redirecionar as saídas geradas na execução de um comando, como também sua própria entrada de
dados. Para isso, usam-se redirecionadores como >, 2>, >>, entre outros;

 Os sistemas GNU/Linux oferecem uma série de comandos para visualização de arquivos e diretórios, como
tree, cat, more, less, entre outros, cada qual com propósitos de exibição particulares;

 Uma das tarefas com as quais administradores de sistema convivem regularmente é a filtragem de informações
em arquivos. Comandos como o grep e o sed auxiliam nessas tarefas;

 O comando file analisa o conteúdo de arquivos e determina seu tipo, já que os arquivos em plataformas
GNU/Linux não são definidos por suas extensões;

 O comando tr pode ser utilizado tanto para converter caracteres de arquivos como para deletá-los;

 O comando nl é utilizado para numerar um arquivo qualquer, exibindo essa numeração na saída padrão;

 O comando fmt é utilizado para formatar parágrafos de arquivos, exibindo seu resultado na saída
padrão;

 O comando ln poderá ser utilizado para criar tanto links simbólicos quanto links físicos;

 O comando expand é utilizado para converter tabulações TAB (oito espaços) em uma quantidade de espaços
desejada, exibindo o resultado na saída padrão. Já o comando unexpand converte uma sequência de espaços
em branco (no mínimo 2) em tabulações TAB;

 O comando split é utilizado para dividir arquivos em vários pedaços, sendo possível dividir qualquer tipo de
arquivo;

 Diversos comandos estão disponíveis nos sistemas GNU/Linux para promover a coleta de dados sobre o
sistema em si e seus arquivos, auxiliando na sua administração, como df, du, free, date, entre outros;

 Existem ainda outros comandos que podemos utilizar para finalidades específicas, como a pausa de um
processo (sleep) e a impressão de uma sequência de números na tela (seq).

Laboratório 1
A. Aproveitando ao máximo o comando “ls”
1. Faça login no sistema com o usuário aluno
2. Liste os arquivos do diretório home do usuário aluno
$ ls
3. Agora liste todos os arquivos (inclusive os ocultos) do diretório home do usuário aluno
$ ls –a
Note que agora você pode ver os arquivos ocultos do sistema (arquivos que iniciam com .)
4. Veja agora propriedades dos arquivos, como data de criação, proprietário e permissões
$ ls –l
5. Liste todos os arquivos (inclusive ocultos) recursivamente do diretório /var/log. Note que será
exibido todos os arquivos do diretório /var/log e todos os arquivos contidos nos subdiretórios
$ ls –aR /var/log
Note também que neste exercício foi utilizado mais de um parâmetro em um único comando. –a
para arquivos ocultos e –R para recursivo.

B. Criando arquivos e diretórios


1. Faça login no sistema com o usuário aluno
2. Crie um arquivo em branco chamado “aluno.txt”.
$ touch aluno.txt
3. Liste seu diretório e veja se o arquivo foi criado
$ ls
4. Liste detalhadamente o diretório e veja se o proprietário é você
$ ls –l
5. Crie um diretório chamado “diretorio1”
$ mkdir diretorio1
6. Verifique se foi devidamente criado
$ ls
7. Crie dentro deste diretório um diretório chamado “subdiretorio1”
$ mkdir diretorio1/subdiretorio1
Note que no comando eu não uso a “/” antes do diretorio1. Isto acontece porque o diretorio1 está
dentro da pasta home do usuário aluno e seu caminho completo é /home/aluno/diretorio1 e não
/diretorio1
8. Crie 2 diretórios, um dentro do outro chamados “diretorio2/subdiretorio2” com o comando
abaixo.
$ mkdir diretorio2/subdiretorio2
Note que você terá uma mensagem de erro como:
“mkdir: cannot create directory `diretorio2/subdiretorio2': No such file or directory”
Isto ocorreu porquê você não tem o “diretorio2” para poder criar dentro dele o “subdiretorio2”.
Para poder criar a estrutura toda em um único comando, tente com o parâmetro –p
$ mkdir –p diretorio2/subdiretorio2
9. Verifique se foi criado
$ ls
10. Entre no diretorio2 e veja se foi criado o subdiretorio2.
$ cd diretorio2
$ ls

Laboratório 2
A. Gerenciando arquivos
1. Faça login no sistema com o usuário aluno.
2. Copie o arquivo aluno.txt criado no laboratório anterior para a pasta subdiretorio1
$ cp aluno.txt ./diretorio1/subdiretorio1
Note que no destino do arquivo, iniciei o endereço da pasta com um “./”. Relembrando, o . (ponto)
significa uma refência ao diretório atual, no nosso caso estamos no home do usuário aluno
(/home/aluno). Então estou copiando o arquivo para: onde_estou_agora/diretorio1/subdiretorio1.
3 . Verifique se seu arquivo foi copiado para dentro do diretório como queríamos
$ ls /home/aluno/diretorio1/subdiretorio1
Desta vez usamos o caminho completo dos diretórios.
4. Copie todo o diretório1 (com subpastas e arquivos) para dentro do subdiretorio2.
$ cp –R diretorio1 ./diretorio2/subdiretorio2/.
Note o ponto no final do caminho do destino, isto significa que quero copiar o diretorio1 para
exatamente dentro do subdiretorio2.
5. Verifique se todo o conteúdo foi copiado devidamente para dentro do subdiretorio2
$ ls –R ./diretorio2/subdiretorio2
6. Renomeie o arquivo aluno.txt para arquivo.txt
$ mv aluno.txt arquivo.txt
7. Verifique se o arquivo foi renomeado
$ ls
8. Mova o arquivo.txt para dentro do subdiretorio2
$ mv arquivo.txt ./diretorio2/subdiretorio2/.
9. Verifique se o arquivo foi movido da pasta atual
$ ls
10. Verifique se o arquivo está na pasta de destino
$ ls diretorio2/subdiretorio2

Laboratório 3
A. Utilizando caracteres curingas
1. Efetue login com o usuário aluno
2. Vá para a pasta /etc
$ cd /etc
3. Liste os arquivos contidos nesta pasta
$ ls
4. Agora apenas liste os arquivo que iniciam com a palavra “mail”
$ ls mail*
5. Liste todos os arquivos que terminem com a extensão “.conf”
$ ls *.conf
6. Agora vá para a pasta /dev
$ cd /dev
7. Liste apenas os primeiros dispositivos Seriais (de 0 a 9), ou seja que após o nome “tty” tenha
apenas 1 caracter.
$ ls tty?
8. Experimente agora listar somente os que tem 2 caracteres após o nome “tty”
$ ls tty??
Note que o resultado não mostra os arquivos que foram exibidos no resultado o ítem 7, apenas os
arquivos que possuem 2 caracteres após o nome “tty”.
9. Agora, liste apenas os dispositivos seriais ímpares de 0 a 10.
$ ls tty[1,3,5,7,9]
10. Liste os dispositivos seriais de 3 a 8.
$ ls tty[3-8]
11. Podemos agora misturar um pouco as coisas, vamos listar todos os arquivos que iniciam com
“M”, seja eles maiúsculo ou minúsculo
$ ls [M,m]*

Laboratório 4
A. Redirecionando os Resultados
1. Faça login no sistema com o usuário root
2. Vá para o diretório /var/log
# cd /var/log
3. Primeiramente vamos ver o que temos no diretório.
# ls
4. Vamos mesclar um pouco o que aprendemos e vamos redirecionar o resultado para dentro da
pasta pessoal do root
# ls *.log > /root/lista_logs.txt
5. O resultado foi redirecionado para o arquivo lista_logs.txt dentro da pasta root, para ler dentro do
arquivo, utilizaremos o comando cat.
# cat /root/lista_logs.txt
6. Agora vamos complementar nosso arquivo da lista de logs com os logs de erros, eles terminam
com “.err”. Se fizermos o mesmo processo o arquivo será sobrescrito. Teste
# ls *.err > /root/lista_logs.txt
# car /root/lista_logs.txt
Observe que o conteudo anterior se perdeu.
7. Vamos corrigir o erro e enviar novamente a lista de logs, mas desta vez sem perder a lista de
arquivos “.err”.
# ls *.log >> /root /lista_logs.txt
8. Oberserve que a lista cresceu, agora contém os arquivos .log
# cat /root/lista_logs.txt
9. Vamos adicionar também ao arquivo os logs com extensão “.info”
# ls *.info >> /root/lista_logs.txt
# cat /root/lista_logs.txt

B. Redirecionando mensagens de erro


1. Vimos neste capitulo que é possível redirecionar as mensagens de erro. Se observar usando o
redirecionamento normal, verá que a mensagem de erro não vai para o aquivo destino, teste:
# Ls > /root/teste_erro.txt
Primeiramente você notará que o erro foi exibito na tela, agora veja que não foi para dentro do
arquivo.
2. Leia o arquivo gerado, você percebará que ele está vazio.
# cat /root/teste_erro.txt
3. Agora faremos o mesmo teste redirecionando as mensagens de erro “2>” para o arquivo
“teste_erro.txt”
# Ls 2> /root/teste_erro.txt
4. Note que a agora a mensagem de erro está no arquivo para onde redirecionamos
# cat /root/teste_erro.txt

C. Utilizando o PIPE para redirecionar entre programas


1. Vá para a pasta /etc
# cd /etc
2. Liste detalhadamente todos os arquivos contidos na pasta
# ls -l
Observe que muitos arquivo rolaram a tela e não foi possível ler.
3. Redirecione o resultado do comando “ls -l” para dentro do comado “more” para obter pausa a
cada tela.
# ls -l |more
Utilize “Enter” para rolar linha a linha ou “Espaço” para rolar em páginas e “q” para sair.
4. Vimos anteriormente que podemos executar comandos e redirecionar a saida para algum arquivo,
desta forma em vez de imprimir o resultado na tela, ele é encaminhado para o arquivo de destino.
Usando o comando “tee”, faça o resultado do comando imprimir na tela e redirecionar para um
arquivo.
# ls -l | tee /root/teste_tee.txt
# cat /root/teste_tee.txt
5. Da mesma forma que o redirecionar “>”, o comando “tee” apaga o arquivo destino, para que isto
não aconteça e ele adicione o resultado no final do arquivo, utilize a opção -a.
# echo “Nova Linha adicionada no final do arquivo para teste do tee” |
tee -a /root/teste_tee.txt
# cat /root/teste_tee.txt

Laboratório 5
A. Visualizando a árvore de diretórios
1. Faça login com o usuário aluno
2. Liste a estrutura do diretório /etc
$ tree /etc
Note que tudo passou rápido demais, pois a quantidade de dados é muito grande.
3. Liste novamente a estrutura, redirecionando o resultado para um programa que permite pausa,
mude linha a linha com a tecla “Enter” e pule as páginas com a tecla “Espaço”
$ tree /etc | more
4. Agora liste apenas os diretórios
$ tree -d /etc

B. Lendo arquivos de texto com “cat”


1. Leia o arquivo /proc/cpuinfo
$ cat /proc/cpuinfo
2. Leia o arquivo protocols com “cat” e redirecione o resultado para o “less” afim de navegar dentro
do arquivo
$ cat /etc/protocols| less
3. Navegue pelo arquivo com as setas do teclado
4. Leia o arquivo passwd com “cat” e observe a ordem do resultado
$ cat /etc/passwd
5. Agora leia o arquivo com o comando “tac” e note que o resultado é o inverso.
$ tac /etc/passwd
6. Leia apenas as 10 primeiras linhas do arquivo debconf.conf
$ head /etc/debconf.conf
7. Leia apenas as 2 primeiras linhas do arquivo debconf.conf
$ head -n2 /etc/debconf.conf
8. Leia as ultimas 10 linhas do arquivo debconf.conf
$ tail /etc/debconf.conf
9. Agora leia apenas a ultima linha do arquivo debconf.conf
$ tail -n1 /etc/debconf.conf

C. Ajustando arquivos para impressão


1. Eleve suas permissões para root
$ su
2. Vá para a pasta /root
# cd ~
3. Ajuste o arquivo de logs do Kernel para impressão, redirecione o resultado para o arquivo
novo_messages na pasta /root
# pr /var/log/messages > /root/novo_messages
4. Leia o novo arquivo gerado com “cat” e less para possibilitar a navegação no arquivo.
# cat novo_messages | less
Observe que no cabeçalho agora há a data, hora, nome do arquivo e o número de cada página
5. Agora imprima apenas as páginas 10 e 11 do arquivo de log messages e mude o nome do
cabeçalho, usando a opção --header
# pr –pages=10:11 –header=”Paginas 10 e 11 do Arquivo Messages”
/var/log/messages > /root/messages_parcial
6. Leia o novo arquivo gerado, observe que foi impresso apenas as páginas 10 e 11 e note também
que o cabeçalho agora é personalizado.
# cat messages_parcial

D. Concatenando arquivos
1. Leia o arquivo /etc/passwd
# cat /etc/passwd
2. Leia o arquivo /etc/shadow
# cat /etc/shadow
3. Junte os 2 arquivos em um único arquivo chamado usuarios_e_senhas na pasta do root
# paste /etc/passwd /etc/shadow > /root/usuarios_e_senhas
4. Veja como ficou
# cat /root/usuarios_e_senhas
5. Agora para separar na linha os dois arquivos, vamos definir o delimitador “|” (pipe).
# paste -d”|” /etc/passwd /etc/shadow > /root/usuarios_e_senhas
6. Veja como ficou o arquivo, no lugar da tabulação foi colocado o PIPE “|”
# cat /root/usuarios_e_senhas
7. Leia o arquivo Estados.txt na pasta /root
# cat /root/Estados.txt
8. Leia o arquivo Capitais.txt na pasta /root
# cat /root/Capitais.txt
9. Junte os dois arquivos com o comando “join” e salve-os no arquivo /root/estados_e_capitais.txt
# join -t. /root/Estados.txt /root/Capitais.txt >
/root/estados_e_capitais.txt
10. Leia o arquivo gerado
# cat /root/estados_e_capitais.txt
Note que apesar do arquivo Estados.txt ter 30 linhas, ele só concatenou as 27 linhas, pois havia
referência entre elas
11. Listar linhas sem referência entre os arquivos
# join -t. -v1 /root/Estados.txt /root/Capitais.txt

12. Leia o arquivo Cidades.txt


# cat /root/Cidades.txt

Note que este arquivo tem cidades repetidas (Bauru, São Vicente, Barueri e Sorocaba)
13. Veja quantas vezes cada linha se repete
# uniq -c /root/Cidades.txt

14. Com o comando uniq, leia o arquivo para tirar as linhas repetidas, redirecione o resultado para o
arquivo Cidades_Exclusivas.txt
# uniq /root/Cidades.txt > /root/Cidades_Exlusivas.txt

# cat /root/Cidades_Exclusivas.txt

Observe o resultado, o arquivo não possui mais repetição.


15. Converta na tela o arquivo Cidades.txt em hexadecimal
# od -x /root/Cidades.txt

16. Faça o mesmo com o comando hexdump


# hexdump -x /root/Cidades.txt

E. Coletando informações de arquivos


1. Verifique quantas linhas tem o arquivo Cidades.txt
# wc -l /root/Cidades.txt

2. Agora conte quantos caracteres possui o arquivo de log do kernel


# wc -c /var/log/messages

3. Leia o arquivo Cidades.txt


# cat /root/Cidades.txt

Note que o arquivo não está em ordem alfabética


4. Ordene as cidades com o comando “sort”
# sort /root/Cidades.txt

5. Ordene as Cidades e suprima as cidades repetidas


# sort -u /root/Cidades.txt

6. Vamos comparar a diferença dos resultados, contando com quantas linhas tem cada resultado
Vamos iniciar sem suprimir as cidades repetidas
# sort /root/Cidades.txt |wc -l

Agora vamos suprimir as cidades repetidas e contar o resultado.


# sort -u /root/Cidades.txt |wc -l

Laboratório 6
A. Localizando textos em arquivos e filtrando resultados.
1. Veja se há a cidade Bauru no arquivo Cidades.txt
# grep Bauru /root/Cidades.txt

2. Veja quantas vezes a cidade Bauru se repete no arquivo Cidades.txt


# grep -c Bauru /root/Cidades.txt

3. Veja em quais linhas a cidade Bauru está no arquivo.


# grep -n Bauru /root/Cidades.txt

4. Faça a busca em todos os arquivos pela palavra São Paulo e aproveite para, se encontrar, dizer em
qual linha está de cada arquivo.
# grep -i -n “Sao Paulo” /root/*

B. Editando arquivos por comandos


1. Troque o estado Nova York por New York no arquivo Estados.txt
# cat /root/Estados.txt

# sed -i “s/Nova York/New York/g” /root/Estados.txt

# cat /root/Estados.txt

C. Extraindo e modificando dados


1. Obtenha a lista de usuários contidos no arquivo /etc/passwd
# cat /etc/passwd |cut -f1 -d”:”

2. Identifique o tipo de arquivo


# file /bin/ls

# file /etc/passwd

# file /root/Estados.txt

3. Torne todas as letras do arquivo Estados.txt em maiúsculas


# cat /root/Estados.txt | tr 'a-z' 'A-Z' > /root/Novo_Estados.txt

4. Agora remova os numeros e o “.” do arquivo Novo_Estado.txt


# cat /root/Novo_Estados.txt | tr -d '0-9' | tr -d '.' >
/root/Novo_Estados_2.txt

5. Leia as ultimas 10 linhas do arquivo de log messages, porém filtre-o para apenas 60 caracteres
em cada coluna
# tail /var/log/messages |fmt -w60

Laboratório 7
A. Criando Links (atalhos) para os arquivos
1. Crie o diretorio novo_dir
# mkdir /root/novo_dir

2. Liste os arquivos da pasta root


# ls /root/

3. Crie um link simbólico do arquivo Capitais.txt para dentro da nova pasta


# ln -s /root/Capitais.txt /root/novo_dir/Link_Capitais.txt

Repare que o link tem outro nome do arquivo original, isto NÃO é obrigatório
4. Entre na nova pasta
# cd /root/novo_dir

5. Liste os arquivos da pasta


# ls

6. Agora liste detalhadamente os arquivos


# ls -l

Note a referência ao link simbólico.


7. Crie um link físco do arquivo Cidades.txt
# ln /root/Cidades.txt /root/novo_dir/Link_Cidades.txt

8. Liste detalhadamente o diretório.


# ls -l

Note que o link físico não possui referência quando o listamos

B. Dividindo arquivos
1. Quebre o arquivo de log messages em partes de 250 linhas dentro da pasta /root
# split -d -l 250 /var/log/messages /root/messages-parte_

2. Quebre o arquivo de log messages em pedaços de 50K e salve na pasta /root


# split -d -b 50K /var/log/messages /root/messages-tamamho-parte_

3. Junte todas as partes do arquivo messages-parte_* em um único arquivo.


# cat /root/messages-parte_* > /root/messages_unificado

# cat /root/messages_unificado

Laboratório 8
A. Administrando o computador
1. Veja quanto há de espaço em disco nas suas unidades
# df -h

2. Veja quanto ocupa de espaço em disco a pasta /root


# du -chs /root

3 . Veja como está o consumo da memória RAM em MB


# free -m

4. Exiba a data atual do sistema


# date
5. Exiba a data e hora atual em formato detalhado e personalizado
# date “+%d de %B de %Y as %H:%M”

6. Veja a quanto tempo seu computador está ligado e detalhes da carga do sistema
# uptime

7. Veja a versão e compilação do seu Kernel


# uname -a

8. Veja a quanto tempo o programa Exim está rodando


# time exim4

B. Comparando arquivos
1. Copie o arquivo Cidades.txt para Cidades_2.txt
# cp /root/Cidades.txt /root/Cidades_2.txt

2. Adicione uma nova informação no arquivo Cidades_2.txt


# echo “Jaguariuna” >> /root/Cidades_2.txt

3. Compare a diferença entre os dois arquivos.


# diff /root/Cidades.txt /root/Cidades_2.txt

C. Localizando arquivos no computador


1. Localize com o comando “find” os arquivos referente a passwd em todo o computador
# find / -name passwd

2. Localize os arquivos que foram acessados em 1 dia


# find / -atime 1

3. Autalize a base de dados do locate


# updatedb

4. Localize os arquivos referente a passwd


# locate passwd

Exercícios de Fixação

1. Para listarmos os arquivos e diretórios, incluindo os itens ocultos, devemos utilizar o


comando:
a) ls –o
b) ls –l
c) ls –a
d) ls –R
e) ls –p
Alternativa Correta: C

2. Para criar um arquivo vazio, utilizamos o seguinte comando:


a) mkfile arquivo
b) make file arquivo
c) edit arquivo
d) touch arquivo
e) make arquivo
Alternativa Correta: D
3. Qual comando podemos utilizar para criar toda a estrutura de diretórios
/novo/diretorio/exemplo?
a) mkdir /novo/diretorio/exemplo
b) mkdir –p /novo/diretorio/exemplo
c) makedir /novo/diretorio/exemplo
d) createdir /novo/diretorio/exemplo
e) touch /novo/diretorio/exemplo
Alternativa Correta: B

4. Qual comando utilizo para excluir toda a estrutura de diretórios /novo/diretorio/exemplo e


todos os arquivos contidos dentro?
a) rmdir /novo/diretorio/exemplo
b) rmdir /novo
c) rm –r /novo
d) rm /novo/diretorio/exemplo
e) rmdir –f /novo
Alternativa Correta: C

5. Para copiar todos os arquivo com suas permissões e subdiretórios da pasta /home/usuario
para /tmp podemos utilizar a sintaxe:
a) cp * /tmb
b) cp –ar /home/usuario/* /tmp
c) cp /home/usuarios /tmp
d) cp –ar /home/usuarios/* /tmp
e) cp –f /home /tmp
Alternativa Correta: B

6. Para ler o arquivo /var/log/messages, filtrando somente as linhas que contém a palavra
“kernel” e redirecionando o resultado para o arquivo /tmp/logkernel.txt eu uso a seguinte
sintaxe:
a) tail /var/log/messages | grep kernel > /tmp/logkernel.txt
b) cat /var/log/messages | grep kernel > /tmp/logkernel.txt
c) tail –f /var/log/messages | grep kernel > /tmp/logkernel.txt
d) head /var/log/messages | grep kernel > /tmp/logkernel.txt
e) read /var/log/messages | grep kernel > /tmp/logkernel.txt
Alternativa Correta: B

7. Para ler um arquivo, colocando seu conteúdo em ordem alfabética suprimindo as linhas
repetidas devemos utilizar a seguinte sintaxe:
a) cat arquivo | sort –u
b) cat arquivo | uniq
c) cat arquivo | sort
d) tail arquivo > sort arquivo
e) sed arquivo | grep sort –u
Alternativa Correta: A

8. Para criar um link simbólico eu uso o comando:


a) ln
b) ln symbolic
c) create link
d) ln –s
e) ln –p
Alternativa Correta: D

9. Um arquivo que foi dividido em varias partes com as inicias arquivo_ pode ser restauraco
com qual comando?
a) restore
b) split
c) mount
d) cat
e) split arquio_*
Alternativa Correta: D

10. Quais comandos são usados para ver o espaço em disco e ver qual o tamanho de um
diretório respectivamente?
a) df e du
b) ds e du
c) df e ls
d) du e df
e) ls e df
Alternativa Correta: A
Capítulo 5 – Conhecendo a documentação
GNU/Linux

Introdução  Documentação;
 HOW-TOs;
 Manuais (man pages);
A área de tecnologia tem sido muito afetada pelo  Documentações em /usr/share/doc;
crescimento contínuo e acelerado de informação
testemunhado nas últimas décadas. Essa
 Comandos de ajuda e acesso às documentações;
multiplicidade de fontes documentadas encontra  Ferramentas para consulta de documentações;
amparo no sistema operacional GNU/Linux.
 Outras documentações on-line.
Com o GNU/Linux, temos acesso a uma
biblioteca de documentação de qualidade e
grande extensão, que contribui com a eficiência
de pesquisas e buscas. Para que esse sistema seja bem-sucedido, a contribuição da comunidade é de
extrema valia, pois seus participantes compartilham informações e disponibilizam o conteúdo
produzido no próprio GNU/Linux.

É necessário, no entanto, fazer as perguntas adequadas e avaliar o material que o GNU/Linux


coloca à nossa disposição. Afinal, ao compreendermos o que queremos perguntar, identificamos e
entendemos melhor a resposta.

Incluídas nessa documentação, estão informações sobre os serviços e comandos disponíveis. Tudo o
que se deseja saber a respeito do sistema Linux, ou seja, tudo o que se imagina poder realizar no
sistema está documentado, tanto de forma on-line como no próprio sistema. Há diversas maneiras
de se documentar um projeto GNU/Linux, como as documentações, os HOW-TO’s, também
chamados de cook-book’s, e os manuais (man pages).

Documentação

A documentação deve abranger todas as áreas que dizem respeito a determinado projeto, sendo
suficiente para que alguém consiga entendê-lo. São parte da documentação itens como HOW-TOs e
manuais. Existem, no entanto, projetos muito específicos, que demandam uma consulta individual.
Esse é o caso da documentação de um projeto de rede, na qual detalhes e componentes são
especificados e dividem espaço com os HOW-TOs e manuais.
HOW-TOs

A documentação HOW-TO, disponibilizada de maneira on-line, refere-se aos procedimentos


detalhados para a execução de uma tarefa ou uma função específica – a configuração de um
servidor web ou de placas de som, por exemplo. Apesar da objetividade do HOW-TO, a atualização
do software demanda uma nova documentação.

Os procedimentos da atividade a ser realizada se encontram nos arquivos do diretório, que é


/usr/share/doc. O aplicativo de um documento HOW-TO pode ser instalado com ele, ou ser parte
de um pacote específico.

Nota: O site Viva o Linux (VOL) é um dos sites de HOW-TO para GNU/Linux. O endereço desse
site é http://vivaolinux.linux.com.br.

Manuais (man pages)

Quando o sistema operacional Linux é instalado de forma padrão, temos várias


páginas on-line nas quais encontramos uma grande quantidade de informações
referentes aos comandos utilizados. Estamos falando de manuais, também chamados de man pages
ou páginas man, encontradas por meio do comando man.

Cada comando possui informações correspondentes ao seu nome, descrição e sinopse, além de
parâmetros e ambiente em que é utilizado e suas opções. Essas opções também possuem suas
próprias informações detalhadas e são visualizadas em forma de lista.

Os manuais buscam apresentar formas de utilização das ferramentas do software, incluindo


exemplos que facilitam a compreensão das mesmas. Para isso, eles dispensam conceitos utilizados
pelo HOW-TO, como passo a passo e lista de afazeres.

Cada comando é detalhado em uma seção de man page. Essa seção é determinada pelo número que
aparece entre parênteses após um comando, por exemplo:

 mv (1);

 quotacl (2);

 history (3);

 ttyS (4);

 lilo.conf (5);

 xboard (6);
 bootparam (7);

 useradd (8).

As seções de man page vão de 1 até 9. Vejamos, a seguir, a descrição de cada uma delas:

 Seção 1: Corresponde aos comandos utilizados pelo usuário, entre eles comandos do shell e programas
executáveis. Alguns desses comandos estão embutidos;

 Seção 2: A seção de número dois corresponde às chamadas que o sistema realiza;

 Seção 3: Esta função diz respeito às funções da biblioteca C;

 Seção 4: Nesta seção, podemos visualizar a descrição dos arquivos de dispositivo;

 Seção 5: Nesta seção, são apresentadas as convenções e arquivos de configuração;

 Seção 6: Refere-se à seção de jogos;

 Seção 7: Possui informações variadas, como formatos de textos e conversão de textos;

 Seção 8: As informações correspondentes à administração do sistema são encontradas nesta seção;

 Seção 9: Essa seção possui rotinas referentes ao kernel do sistema Linux.

Nota: As informações sobre cada uma das seções podem ser exibidas por meio do comando man
man.

Documentações em /usr/share/doc

O diretório /usr/share/doc, também conhecido como /usr/doc, é onde os HOW-TOs,


disponibilizados de maneira on-line, se encontram. Nesse diretório, também encontramos
documentações que dizem respeito às informações relacionadas a um programa ou até mesmo a um
pacote, e incluem, além de FAQs, os READMES e outras.

Essas documentações podem estar nos seguintes formatos:

 ASCII;

 HTML;

 LateX;
 Postcript.

Nota: O modo mais comum de estruturação das informações contidas em FAQ é uma sequência
de perguntas e respostas relacionadas a um determinado assunto.

Comandos de ajuda e acesso às documentações

Existem comandos usados para acessar documentações de sistemas GNU/Linux como m. Esses
comandos são: help, manpath, man, apropos, whatis, info, whereis e which. A seguir,
conheceremos mais sobre eles.

help

Com este comando, podemos identificar as opções que devemos usar com os comandos internos do
comando shell. Ele permite a visualização da ajuda rápida tanto para todos os comandos internos do
sistema, como apenas para um deles.

A sintaxe utilizada para visualizar todos os comandos internos é a seguinte:

# help

Já a visualização de apenas um dos comandos internos é feita com uma sintaxe diferente, como
podemos perceber:

# help comando

Para mostrar a ajuda para comandos externos, por outro lado, o help assume a posição de parâmetro
- - help, com o qual buscamos os parâmetros de qualquer comando.

A sintaxe utilizada para que a ajuda rápida sobre um comando externo seja visualizada é
apresentada a seguir:

# [comando] - - help

Nota: Existem meios de se obter ajuda que não envolvem o parâmetro - - help, já que ele é um
parâmetro individual de cada comando.

manpath

O comando manpath permite visualizar os diretórios que são pesquisados no momento em que
chamamos os manuais.

Na próxima imagem, podemos visualizar os diretórios que são referenciados pelo comando
manpath:

man

Por meio do comando man, podemos consultar o conteúdo dos manuais. No final deles, está
localizada a lista correspondente aos comandos relacionados. A sintaxe desse comando é a seguinte:

man [opcao] [comando/arquivo]

Caso o nome de um comando não seja conhecido, é possível localizá-lo a partir de uma palavra-
chave. A seguir, são descritas algumas opções:

Opção Descrição
Exibe todas as seções referentes ao comando
-a
consultado.
-k Consulta pela palavra-chave entre os manuais.
-w Exibe a localização do arquivo do manual solicitado.

A seguir, temos o diretório do man:

# ls /usr/share/man

Nele, é possível verificar quais são os manuais disponíveis e visualizar divisões tais como idiomas e
níveis – a introdução específica de cada nível é visualizada com o seguinte comando:

# man <nível> intro

Para que possamos visualizar o manual em determinado idioma, é necessário que o pacote para o
idioma em questão tenha sido instalado no sistema. Assim, podemos ver os manuais disponíveis em
português desde que o sistema esteja instalado nessa língua.

O parâmetro –L pt_BR, contudo, apresenta uma alternativa, com a qual podemos visualizar
manuais em português mesmo tendo o sistema instalado no idioma inglês. Essa alternativa é o
comando a seguir:

# man –L pt_BR comando

A contribuição da comunidade, como mencionado, é muito importante para a documentação ser


mais completa. Isso também inclui os idiomas. Para que uma documentação esteja disponível em
determinado idioma, como português, participantes da comunidade traduziram a documentação
feita em outro idioma. O comando a seguir possibilita esse tipo de contribuição:

# man 7 undocumented

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos

Vejamos um exemplo de consulta pela palavra-chave:

O resultado apresentado é o seguinte:

O exemplo a seguir exibe a localização do arquivo especificado:

A seguir, podemos visualizar um exemplo de manual:


Podemos, ainda, visualizar os manuais no ambiente gráfico, utilizando o konqueror:

Com relação ao comando man, devemos considerar a variável MANPATH: ao


ser configurada, ela permite realizar uma pesquisa man em vários diretórios. Isso significa que o
man irá buscar informações nos diretórios definidos na
variável MANPATH.

Existe, ainda, o arquivo /etc/manpath.config, o qual é utilizado pelo pacote man-db com o
objetivo de configurar os caminhos dos manuais. Vale saber que o comando manpath também pode
ser utilizado para determinar o caminho de busca para manuais.

A linguagem troff/nroff é a linguagem na qual os manuais são escritos. Para


Visualizá-los, utilizamos os paginadores more e less. Para alterar o padrão no qual programa
paginador exibirá os manuais, temos a variável PAGER.
Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

Vejamos um exemplo:

export PAGER=more
man ls

apropos

Por meio do comando apropos, podemos especificar uma palavra-chave que será pesquisada nos
manuais. O resultado da busca é mais genérico, já que é composto por manuais cujo nome, parte do
nome ou descrição seja o termo pesquisado. A sintaxe desse comando é a seguinte:

apropos <palavra>

Utilizamos esse comando quando não sabemos qual documentação acessar para um determinado
assunto – para resolver esse problema, o apropos recorre a um banco de dados, que o auxilia a
localizar os manuais. Esse banco é construído mediante a execução do seguinte comando:

# catman

O catman, comando que o root, isto é, o administrador do sistema, executa foi substituído no
RedHat pelo comando makewhatis – comando este que usa a mesma base de dados que o apropos.

Em vez de usar o comando apropos, podemos usar o comando a seguir:

# man –k [palavra-chave]

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

Na próxima imagem, o comando apropos está pesquisando pelo padrão ls nos manuais do sistema:
whatis

Com o comando whatis, temos resultados mais precisos de busca, compostos pelo manual cujo
nome seja exatamente o termo que pesquisamos. A seguir, temos a sintaxe desse comando:

# whatis [comando]

Alternativamente, podemos usar o comando a seguir, que equivale ao comando whatis:

# man –f [palavra-chave]

info

O comando info possibilita o acesso às páginas info (info pages), que são navegáveis.

O utilitário info é muito poderoso em se tratando de ferramenta de ajuda no sistema Linux. Isso
ocorre devido ao fato de que o info utiliza-se de links de hipertexto, indicados pelo sinal de
asterisco (*). Ao pressionarmos ENTER ou BACKSPACE, vamos para a seção correspondente ou
para a página anterior, respectivamente.

Também podemos navegar entre as páginas utilizando as seguintes teclas:

 N: Vai para a próxima página;


 P: Vai para a página anterior;

 U: Sobe um nível;
 Q: Sai do comando info.

As informações que o info apresenta são mais atuais, pois os manuais não são atualizados, fazendo
com que as informações contidas neles fiquem obsoletas.

A sintaxe do comando info é a seguinte:

info <comando>

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

A próxima imagem exibe um exemplo de página info:

whereis

O comando whereis tem a finalidade de localizar o caminho do arquivo binário, do arquivo de


configuração – caso exista – e a página de manual de determinado comando do sistema.

Sua sintaxe é a seguinte:

whereis [opcao] <comando ou arquivo>

A tabela seguinte descreve algumas opções que podem ser utilizadas com whereis:

Opção Descrição
Unix
-b Localiza apenas o arquivo binário do
comando indicado.
-m Localiza apenas a página de manual
do comando indicado.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

Exemplo:

whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz

No exemplo anterior com a consulta sobre o comando ls, o resultado segue


basicamente essa ordem padrão, exibindo primeiro o nome e caminho do arquivo binário e, depois,
o nome e o caminho da página de manual.

which

O comando which é semelhante ao comando whereis anteriormente apresentado, porém, ele exibe
apenas a localização do arquivo binário de um determinado comando. A utilização desse comando
engloba abreviações de comandos em shell script. A busca que o comando which faz é baseada no
conteúdo da variável PATH.

Sua sintaxe é a seguinte:

which [arquivo]

Para visualizar o valor da variável PATH e os diretórios nos quais o comando which se baseia para
localizar os arquivos binários dos comandos especificados, deve-se utilizar echo $PATH.

O exemplo acima, localiza onde está o executável binário do comando mke2fs

PS. Utilizar o comando witch desta forma, exige do aluno um conhecimento de variáveis e
também shell script, sugiro abordar este tema mais a frente em shell script.

Ferramentas para consulta de documentações

Além dos comandos de ajuda e acesso à documentação GNU/Linux, podemos fazer uso de
ferramentas que auxiliam a visualização de documentações. Vejamos algumas delas:
 Yelp: Esta ferramenta gráfica serve para consultarmos documentações do GNOME 2. Com ela, visualizamos
manuais de aplicativos gráficos;

 Xman: Para exibir os manuais para o X Window System, contamos com o navegador do comando man – a
ferramenta xman.

Outras documentações on-line

Há uma grande quantidade de informações on-line a respeito do Linux. Porém, é importante saber
exatamente em que lugar procurar pela documentação. Vejamos, a seguir, duas importantes fontes
de documentação disponíveis na Internet: o site The Linux Documentation Project e os grupos de
notícias Usenet.

The Linux Documentation Project

Trata-se do endereço oficial de documentações de sistemas GNU/Linux. Esse site é disponibilizado


em diversos idiomas, entre eles o português brasileiro, e formatos, como PDFs, arquivos .txt,
páginas HTML, entre outros.
Grupo de notícias Usenet

Com relação aos grupos de notícias Usenet, ou Usenet newsgroups, estes são uma fonte importante
de informações a respeito do Linux. Isso se deve ao fato de que um tópico específico é discutido
entre os participantes desse grupo, que se estende por todo o mundo.

Muitos dos grupos de notícias Usenet não possuem restrição. Porém, os que possuem asseguram
que as informações ali colocadas encaixam no assunto em questão. Assim, temos alguns grupos de
notícias específicos, dentre os quais destacamos os seguintes:

Grupo de notícias Descrição

comp.os.linux.answers Este grupo é restrito a informações


referentes às documentações README,
HOWTO e FAQ.
comp.os.linux.advocacy Neste grupo, é possível encontrar
informações relacionadas aos benefícios
do sistema operacional Linux em
comparação a outros sistemas
operacionais.
comp.os.linux.networking Possui informações a respeito das
emissões de comunicação, bem como a
respeito da rede.
comp.os.linux.hardware Este grupo possui informações
referentes às emissões de
compatibilidade do hardware presente
no sistema operacional Linux.

Tópicos para revisão do capítulo

Atente para os tópicos a seguir. Eles devem ser estudados com muita atenção, pois
representam os pontos mais importantes do capítulo.

 O GNU/Linux oferece uma biblioteca de documentação de qualidade e grande extensão que inclui informações
sobre os serviços e comandos disponíveis, documentadas tanto de forma on-line como no próprio sistema. Os
participantes da comunidade compartilham informações e disponibilizam o conteúdo produzido no próprio
GNU/Linux. Um projeto GNU/Linux pode ser documentado de diversas maneiras, como as documentações, os
HOW-TO’s e os manuais (man pages);

 A documentação deve abranger todas as áreas que dizem respeito a determinado projeto. São parte da
documentação itens de grande importância, como HOW-TOs e manuais. Existem, no entanto, projetos muito
específicos, que demandam uma consulta individual;

 A documentação HOW-TO, disponibilizada de maneira on-line, refere-se aos procedimentos detalhados para a
execução de uma tarefa ou uma função específica. Apesar da objetividade do HOW-TO, a atualização do
software demanda uma nova documentação. Os procedimentos da atividade a ser realizada se encontram nos
arquivos do diretório, que é /usr/share/doc;

 Manuais (man pages ou páginas man) são páginas on-line encontradas por meio do comando man e que
possuem uma grande quantidade de informações referentes aos comandos utilizados. Cada comando possui
informações correspondentes ao seu nome, descrição e sinopse, além de parâmetros e ambiente em que é
utilizado e suas opções;

 O diretório /usr/share/doc, também conhecido como /usr/doc, é onde os HOW-TOs, disponibilizados de


maneira on-line, se encontram. Nesse diretório, também há documentações que dizem respeito às informações
relacionadas a um programa ou a um pacote. Essas documentações podem estar nos formatos ASCII, HTML,
LateX ou Postcript;

 Os comandos usados para acessar documentações de sistemas GNU/Linux são: help, manpath, man,
apropos, whatis, info, whereis e which. Com esses comandos, podemos, respectivamente: identificar opções
para usar com comandos internos, visualizar diretórios, consultar conteúdos dos manuais, especificar uma
palavra-chave pra ser pesquisada nelas, pesquisar de forma mais precisa, acessar as páginas info e, por fim,
localizar o caminho do arquivo binário, do arquivo de configuração e a página de manual de determinado
comando do sistema;

 Além dos comandos de ajuda e acesso à documentação GNU/Linux, podemos fazer uso de ferramentas que
auxiliam a visualização de documentações. Essas ferramentas incluem yelp, com a qual consultamos
documentações do GNOME 2, e xman, usada para exibir os manuais para o X Window System;

 Há uma grande quantidade de informações on-line a respeito do Linux. Porém, é importante saber exatamente
em que lugar procurar pela documentação. Duas importantes fontes de documentação disponíveis na Internet
são o site The Linux Documentation Project e os grupos de notícias Usenet.

Laboratório 1
A. Analisando as Man Pages e comandos de ajuda
1. Veja o manual do comando man
# man man
2. Veja o manual do comando whereis
# man whereis | more
3. Utilize o help para ver as possibilidades do comando ls
# ls --help
4. Veja em quais diretórios estão instalados todos os manuais
# manpath
Repare que o resultado, apesar de estar em apenas uma linha, há mais de um local, separado por “:”
5. Localize comandos ou itens no manual que citem rotas
# apropus route
6. Faça a mesma busca com o comando man
# man -k route
7. Supondo que você não faça ideia do que seja o comando ls, pergunte ao GNU/Linux
# whatis ls
8. Navegue pala página de ajuda do comando whatis utilizando o comando “info”.
# info whatis
9. Para saber onde estão todas as informações do comando “info”, como executável, man page, etc,
utilize o comando “whereis”
# whereis info
10. E para saber somente onde está o executável o whereis, use o “which”
# which whereis

Exercícios de Fixação

1. Qual comando você utiliza para ver o manual de um comando?


a) man <comando>
b) ls <camando>
c) ? <comando>
d) manual <comando>
e) <comando> manual
Alternativa Correta: A

2. Qual comando você utiliza para saber o que faz um comando


a) whereis
b) which
c) whatis
d) ls
e) mount
Alternativa Correta: C

3. Como você faz para descobrir onde está o executável binário de um comando, suas páginas
de mais e demias informações
a) ls <comando>
b) man <comando>
c) whereis <comando>
d) help <comando>
e) grep <comando>
Alternativa Correta: C

4. Qual comando você pode utilizar para encontrar o executável de um comando?


a) grep
b) which
c) man
d) help
e) ls
Alternativa Correta: B
Capítulo 6 – Editores de texto
Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos

 Principais editores de texto;


Introdução
 Nano;
 Vim;
Sendo os arquivos a base de configuração
 Joe;
de serviços, aplicativos e programas em  Alteração do editor de texto padrão.
sistemas GNU/Linux, saber manipulá-los
com um bom editor de textos é importante.
Há diversos tipos diferentes de editores de
textos para se trabalhar, dos mais
tradicionais aos mais práticos. Independente
do editor de textos escolhido, é importante
ter o domínio do trabalho com ele, pois
muitas vezes a edição de arquivos de configuração pode envolver uma manutenção emergencial ou
uma simples edição com automatização de tarefas dentro do próprio editor, como, por exemplo,
copiar múltiplas linhas, facilitando o trabalho.

Principais editores de texto

Vejamos uma breve descrição de alguns dos principais editores de texto existentes para sistemas
GNU/Linux:

 vi

Editor baseado em terminal disponível na maioria das distros GNU/Linux. É um dos mais
conhecidos.

 vim

Versão aprimorada do vi, trata-se de um dos editores mais utilizados atualmente.

 nano

O Debian e as distribuições baseadas nele trazem o nano como editor de texto padrão. Muito
prático, possui apenas o modo de edição.

 joe
O joe é um editor de textos baseado em terminal muito simples e prático. Oferece uma grande
quantidade de teclas de atalho para execução dos comandos.

 pico

Parecido com o nano, é um editor simples que possui cinco ferramentas básicas: justificação de
parágrafo, busca por caracteres, cópia e colagem de blocos, verificação ortográfica e um broswer de
arquivos. Os comandos são enviados através de combinações de teclas de atalho.

 mcedit

O editor mcedit possui como diferencial a possibilidade de uso do mouse no ambiente de texto.

 ed

Considerado um dos mais simples. Não permite a abertura de uma janela de edição. Usado para
criar, exibir, modificar e manipular textos.

 emacs

Originalmente criado por Richard Stallman, possui um interpretador do Emacs Lisp, que é um
dialeto da linguagem de programação Lisp, permitindo a edição de textos.

Nano

O nano é um editor de textos simples e prático que segue a linha de funcionamento do


joe. Ele possui apenas o modo de edição e usa atalhos para gerenciar as
funcionalidades. O nano vem instalado, como padrão, a partir do Debian etch, e é um
editor de textos que tem sido muito utilizado pelos usuários, pela praticidade e facilidade
apresentada.

Basta entrarmos com o comando nano para abri-lo. Ao ser iniciado, seremos apresentados a uma
tela como a seguinte:
Utilizando o Nano

As principais funcionalidades executadas no editor nano possuem atalhos que ficarão, por padrão,
sempre exibidos no rodapé da página:

Porém existem outros atalhos para facilitar o uso e gerenciamento dos arquivos por parte do nano.

O nano é carregado automaticamente em modo de edição, no qual, se nenhum arquivo for indicado
para abertura com o mesmo, um novo arquivo poderá ser criado, e definidos, posteriormente, seu
nome e caminho.
O editor nano possui uma ajuda completa sobre atalhos que poderão ser utilizados no mesmo. Tal
ajuda poderá ser acionada com a sequência de teclas CTRL + G.

Para abrir um arquivo de texto específico, utilizamos a sintaxe apresentada a seguir:

nano <arquivo>

Gerenciando arquivos

Para gerenciar arquivos com o nano, temos os seguintes atalhos que podem ser utilizados:
Atalho Descrição
CTRL + R Abre um arquivo especificado para edição
ou insere o conteúdo de outro arquivo no
arquivo atual.
CTRL + X Fecha o arquivo atual; sai do nano.
CTRL + O Salva o arquivo editado.

Instrutor: Criar exemplo simples do uso de um ou mais atalhos apresentados na tabela anterior

Automatizando tarefas

Para automatizar tarefas com o nano, os seguintes atalhos podem ser utilizados:

Atalho Descrição
CTRL + K Recorta a linha atual.
ALT + ^ Copia a linha atual.
CTRL + U Cola a linha copiada ou recortada.

Instrutor: Criar exemplo simples do uso de um ou mais atalhos apresentados na tabela anterior

Navegando pelos arquivos

Para se movimentar dentro do arquivo, os seguintes atalhos podem ser utilizados:

Atalho Descrição
CTRL+ Y Sobe uma página.
CTRL + V Desce uma página.
ALT + \ Avança até a primeira linha do arquivo.
ALT + / Avança até a última linha do arquivo.
CTRL + A Move o cursor para o início da linha.
CTRL + E Move o cursor para o fim da linha.

Instrutor: Criar exemplo simples do uso de um ou mais atalhos apresentados na tabela anterior

Realizando buscas
Para realizar uma busca no arquivo, temos o seguinte atalho:

Atalho Descrição
CTRL + W Localiza uma palavra no arquivo.

Instrutor: Criar exemplo simples do uso de um ou mais atalhos apresentados na tabela anterior

Outros comandos úteis

Vejamos a seguir outros atalhos importantes utilizados no nano:

Atalho Descrição
CTRL + C Apresenta informações referentes à posição do
cursor.
CTRL + G Abre a ajuda dos comandos e uma descrição do
editor.
CTRL + J Deixa o texto do arquivo inteiro justificado.
CTRL + T Se o comando spell estiver instalado, aciona o
corretor ortográfico.

Instrutor: Criar exemplo simples do uso de um ou mais atalhos apresentados na tabela anterior

Vim

O editor de textos vim (Vi improved) é um dos editores de textos mais utilizados atualmente. O
vim é o sucessor do antigo vi, porém muitos sistemas criam alias (apelidos) para o vim, fazendo
com que o mesmo seja referenciado pelo nome vi.

Sendo assim, o editor pode ser facilmente identificado simplesmente por vi, mas é importante
lembrar que sua utilização é extremamente diferente, comparando as versões atuais do vim e o vi
na versão antiga. Essa convenção de nomenclatura facilita seu acesso e utilização, uma vez que o
antigo vi caiu em desuso.

Sua sintaxe é a seguinte:

vim [opcoes] [arquivo]

A seguir, temos a tela inicial do editor vim:


Um dos motivos que tornam o vim um editor de textos útil e prático é o seu formato e interface de
comunicação final, que, para o principiante, é um pouco confusa, mas, após o seu entendimento, é
facilitadora. O vim é um editor de textos que poderá ser utilizado diretamente na linha de
comandos, porém, também existem versões do vim para trabalhar no ambiente gráfico e até versões
para sistemas operacionais diferentes da base GNU/Linux.

Outro recurso interessante do vim é o Syntax Highlight, que é uma coloração especial da sintaxe
nos arquivos. Tais arquivos, como os de configuração ou código fonte de várias linguagens, poderão
receber uma coloração especial para sua melhor identificação.

Modos de comandos e de edição

Uma particularidade sobre o editor de textos vim, que é essencial para o nosso
aprendizado, é entender internamente seus modos de trabalho, que são basicamente dois: modo de
comandos e modo de edição. Essa divisão é extremamente importante, pois define o
funcionamento básico do vim, e sua manipulação eficaz se dá pela boa alternância entre esses
modos. Sobre os modos de utilização do vim temos:

 Modo de comandos

A maioria das teclas terá uma funcionalidade específica, como se cada uma
delas fosse um determinado comando que executará uma tarefa. Ou seja, no
modo de comandos, o vim é utilizado para manipular o arquivo, podendo
executar tarefas de automação, como copiar ou apagar uma sequência de
linhas, ou tarefas de gerenciamento do próprio arquivo, como salvar o arquivo
simplesmente ou salvá-lo com nome e caminho diferentes, etc.

 Modo de edição
É exatamente neste modo que o vim trabalhará como um editor de textos
comum, no qual as teclas terão suas funcionalidades reais e o texto poderá ser
completamente redigido ou alterado no formado desejado.

Saber alternar entre esses dois modos é essencial para executar qualquer tarefa
utilizando o editor de textos vim.

Utilizando o Vim

O vim poderá ser inicializado diretamente na linha de comandos, a partir da digitação da palavra
vim simplesmente. Nesse modo de carregamento, o vim irá inicializar com um arquivo novo e
ainda sem nome. Mas também é possível inicializá-lo com um arquivo já existente e a indicação de
seu nome ou do caminho completo, caso seja necessário, como no exemplo a seguir:

Independente da forma como o vim foi inicializado, com um arquivo novo ou um arquivo existente,
ele sempre será inicializado em modo de comandos, no qual o arquivo ainda não poderá ser
definitivamente redigido ou alterado. Para tal função, é preciso alternar para o modo de edição,
sobre o que falaremos a seguir.

A tabela a seguir descreve opções que podemos utilizar para iniciarmos o vim:

Opção Descrição
+ Inicia o vim com o cursor no final do
arquivo.
+<linha> Inicia o vim com o cursor na linha de
número determinado.

Alternando entre o modo de comandos e o modo de edição

O vim é sempre iniciado, por padrão, em modo de comandos, porém é possível alternar
tranquilamente para o modo de edição e, posteriormente, voltar para o modo de comandos, e vice-
versa.

 Entrando no modo de edição

Comando Descrição
i / <INSERT> Entra no modo de edição, mantendo o
cursor na posição original.
Comando Descrição
a Entra no modo de edição, movendo o
cursor um caractere à direita de sua
posição original.
o Entra no modo de edição, inserindo uma
nova linha abaixo da posição original do
cursor.

 Entrando no modo de comandos

Comando Descrição
<ESC> Retorna ao modo original de comandos.

Com os comandos apresentados anteriormente, é possível alternar tranquilamente entre o modo de


comandos e o modo de edição. A seguir, veremos outros comandos internos do vim para facilitar o
gerenciamento do arquivo editado.

Gerenciando arquivos

Depois que um determinado arquivo foi criado ou editado com o vim, também é preciso conhecer
alguns comandos para gerenciar o arquivo em si, por exemplo, salvando alterações feitas ou
simplesmente descartando-as. No modo de comandos, temos a possibilidade de utilizar outros tipos
de comandos, que serão sempre precedidos pelo caractere : (dois-pontos). O comando passado junto
com o mesmo poderá ser visualizado no rodapé da página do vim, como no exemplo a seguir:
Comando Descrição
:q Sai do vim. Alterações feitas no arquivo,
que não foram salvas, serão questionadas.
:w Salva as últimas alterações feitas.
:w! Tem a mesma função do :w com a diferença de
forçar a sobrescrição.
:wq Salva as últimas alterações feitas e sai do
vim.
:q! Sai sem salvar qualquer alteração feita no
arquivo.
:w <nome-arq> Salva o arquivo com o nome <nome-arq>.
Como não foi especificado o caminho, o
arquivo será salvo no diretório atual, no
qual o vim foi carregado.
:r <outro-arq> Insere o conteúdo do arquivo de nome
<outro-arq> no arquivo atual, a partir da
posição original do cursor.
:e <arq-teste> Alterna a edição do arquivo atual para o
arquivo de nome <arq-teste>.

Instrutor: Criar exemplo simples do uso de um ou mais atalhos apresentados na tabela anterior

Automatizando tarefas

Com o vim, também é possível automatizar tarefas de gerenciamento do arquivo, como copiar,
apagar, recortar múltiplas linhas, inserir linhas, etc. Vejamos:

Comando Descrição
yy Copia a linha inteira na qual se encontra o
cursor.
<N>yy Copia as N próximas linhas, a partir da
posição atual do cursor.
Dd Apaga a linha inteira na qual se encontra o
cursor.
<N>dd Apaga as N próximas linhas, a partir da
posição atual do cursor.
Dgg Apaga a partir da linha em que se encontra
o cursor, até o início do arquivo (primeira
linha).
dG Apaga a partir da linha em que se encontra
o cursor, até o final do arquivo (última
linha).
X Apaga um único caractere, no qual o
cursor se encontra.
<N>x Apaga N caracteres, a partir da posição
atual do cursor.
Comando Descrição
cc Recorta a linha em que se encontra o
cursor e armazena-a no buffer.
<N>cc Recorta N linhas, a partir da posição atual
do cursor, e as armazena no buffer.
p Cola o trecho de linhas que foi copiado,
apagado ou recortado.
<n>p Cola <n> vezes o que estiver na área de
transferência
V Aciona a seleção visual de linhas.
J Junta a linha atual á seguinte.
u Desfaz a modificação mais recente.
U Desfaz todas as modificações feitas na
linha em que se encontra o cursor.
D Exclui todo o conteúdo da linha a partir da
posição atual do cursor.
r Substitui o conteúdo do início da linha em
que o cursor estiver.
r<caractere> Substitui o caractere sob o cursor pelo que
for colocado no lugar de <caractere>.
A Adiciona texto no fim da linha onde se
encontra o cursor.
O Insere linha acima da linha atual.
CTRL + h Exclui o último caractere.
:%s/<string1>/
Substitui <string1> por <string2>.
<string2>/g

Instrutor: Criar exemplo simples do uso de um ou mais atalhos apresentados na tabela anterior

Navegando pelos arquivos

Também existem comandos específicos para uma movimentação automatizada dentro do arquivo.

Comando Descrição
gg Move o cursos para a primeira linha.
G Avança para a última linha.
<n>G Avança para a linha N especificada.
$ Avança para o fim da linha atual.
^ Leva o cursor para o primeiro caractere não
branco da linha atual.
:<n> Avança para a linha <n>.
CTRL + F Avança para a tela seguinte.
CTRL + B Leva o cursor para a tela anterior.
H Leva o cursor para a primeira linha da tela.
h Leva o cursor um caractere à esquerda.
M Leva o cursor para o meio da tela.
Comando Descrição
L Avança para a última linha da tela.
j Avança para a linha seguinte.
k Leva o cursor para a linha anterior.
l Avança um caractere à direita.
w Avança para o começo da próxima palavra.
W Avança para o começo da próxima palavra,
separada por espaço.
b Leva o cursor para o começo da palavra
anterior.
B Leva o cursor para o início da palavra anterior,
separada por espaço.
0 (zero) Leva o cursor para o começo da linha atual.

Instrutor: Criar exemplo simples do uso de um ou mais atalhos apresentados na tabela anterior

Realizando buscas

Para realizar buscas por palavras no vim, temos os seguintes comandos:

Comando Descrição
/<palavra> Faz uma busca, pelo texto inteiro, por aquilo
que for colocado no lugar de <palavra>.
? <palavra> Leva o cursor até a ocorrência anterior à
<palavra>
n Repete o comando / ou ? mais recente.
N Repete, na direção inversa, o comando / ou ?
mais recente.
CTRL + G Exibe o nome do arquivo, o número da linha
atual e o total de linhas do texto.

Instrutor: Criar exemplo simples do uso de um ou mais atalhos apresentados na tabela anterior

Outros comandos úteis

O vim também traz uma infinidade de recursos úteis à utilização, ao gerenciamento e à


automatização do arquivo.

Comando Descrição
<CTRL + r> Refaz as últimas ações dos comandos
desfeitos.
Comando Descrição
. Repete o comando anterior.
N Vai para o próximo resultado da pesquisa.
:![comando] Executa um comando de nome
[comando] e exibe o resultado no arquivo
simplesmente, não inserindo tal resultado
como conteúdo do mesmo.

:r![comando] Executa um comando de nome


[comando] e insere o resultado do mesmo
no arquivo atual.
:set nu Insere uma numeração de identificação
das linhas no arquivo. Esta numeração é
apenas visual, não sendo inserida no
arquivo original.
:set nonu Desabilita a numeração no arquivo.
:help Inicializa a ajuda do vim.

Instrutor: Criar exemplo simples do uso de um ou mais atalhos apresentados na tabela anterior

vimrc

O vim possui seu arquivo de configuração, no qual poderão ser ativadas e desativadas diversas
funcionalidades, como o recurso de coloração de sintaxe (Syntax Highlight). O arquivo de
configuração do vim é o /etc/vim/vimrc. Os comentários desse arquivo, ou seja, as linhas que
serão ignoradas pelo
arquivo de configuração, são linhas iniciadas com “ (aspas duplas). A linha que ativa o recurso de
coloração é a linha com o conteúdo syntax on, que vem geralmente comentada, bastando
simplesmente descomentá-la.

Ao descomentar as funcionalidades desejadas, o usuário já está configurando o vim, bastando então


copiar, com o nome de .vimrc, o arquivo modificado para seu home.

cp /etc/vim/vimrc ~/ .vimrc

Joe

O editor de textos joe é uma outra alternativa de edição de textos tradicional. O


joe sempre trabalha no modo de edição e usa uma infinidade de teclas de atalho para executar
comandos com funcionalidades específicas.

A sintaxe de joe é a seguinte:


joe <arquivo>

A tela inicial do joe é exibida a seguir:

Todos os atalhos do joe podem ser acessados através da sequência de teclas <CTRL + K + H>,
que será exibida no cabeçalho da página com suas respectivas descrições, como mostra esta
imagem:

Utilizando o Joe
O joe é um editor de textos muito simples e prático, que pode ser inicializado
diretamente na linha de comandos, como no exemplo a seguir:

Suas funcionalidades estão correlacionadas às sequências de teclas de atalho vistas a seguir.

Gerenciando arquivos

O gerenciamento dos arquivos é feito no joe com os seguintes comandos.

Atalho Descrição
CTRL + K + E Abre um determinado arquivo para edição.
CTRL + K + R Insere o conteúdo de outro arquivo no
arquivo atual.
CTRL + K + D Salva o arquivo editado.

Encerrando o joe

Para encerrar o editor, usam-se os atalhos adiante:

Atalho Descrição
CTRL + K + X Salva o arquivo com as respectivas
alterações e sai do editor joe.
CTRL + C Cancela as alterações feitas no arquivo e
sai do editor joe.
CTRL + K + Z Coloca o joe em segundo plano para
utilização do shell.

Automatizando tarefas

Alguns comandos auxiliam na automatização de tarefas no joe.

Atalho Descrição
CTRL+ K + B Inicia a seleção de um bloco.
CTRL + K + K Finaliza a seleção de um bloco.
Atalho Descrição
CTRL + K + C Copia um bloco selecionado para o local
em que o cursor se encontra.
CTRL + K + M Move um bloco selecionado para o local
em que o cursor se encontra.
CTRL + K + W Salva um bloco selecionado no arquivo
especificado.
CTRL + K + Y Apaga um bloco selecionado.

Excluindo texto

Para excluir caracteres isolados ou em sequencia, os comandos a tabela adiante podem ser usados:

Atalho Descrição
CTRL + D Apaga o caractere que se encontra na
posição do cursor.
CTRL + Y Apaga a linha em que se encontra o
cursor.
CTRL + W Apaga a palavra à direita do cursor.
CTRL + O Apaga a palavra à esquerda do cursor.
CTRL + J Apaga da posição do cursor até o final da
linha.

Navegando pelo arquivo

A movimentação pelos arquivos de texto é muito ágil com a ajuda dos seguintes comandos:

Atalho Descrição
CTRL + U Sobe uma página.
CTRL + V Desce uma página.
CTRL + K + U Avança para o início do arquivo.
CTRL + K + V Avança para o final do arquivo.
CTRL + K + L Move o cursor para a linha especificada.
CTRL + A Move o cursor para o início da linha
corrente.
CTRL + E Move o cursor para o fim da linha corrente.
Realizando buscas

Buscas por termos específicos podem ser realizadas no joe por alguns comandos, como mostra a
tabela:

Atalho Descrição
CTRL + K + F Localiza uma palavra no arquivo.
CTRL + L Localiza a próxima palavra encontrada.

Outros comandos úteis

Por fim, existem comandos para desfazer e refazer as últimas modificações feitas num arquivo,
como mostra a tabela a seguir:

Atalho Descrição
CTRL + _ Desfaz as últimas ações no arquivo.
CTRL + ^ Refaz as últimas ações desfeitas no
arquivo.

Alterando o editor de texto padrão

A alteração do editor de texto padrão do sistema GNU/Linux envolve a utilização da variável


EDITOR. Vejamos como utilizá-la para realizar tal essa alteração:

Instrutor: Criar exemplo simples do uso de EDITOR para alterar editor de texto padrão

Outra maneira de alterar o editor de texto padrão do sistema é por meio do update-alternatives,
como mostrado a seguir:

update-alternatives --config editor


Tópicos para revisão do capítulo

Atente para os tópicos a seguir. Eles devem ser estudados com muita atenção, pois
representam os pontos mais importantes do capítulo.

 Os principais editores de texto existentes para sistemas GNU/Linux são o vim, o nano, o joe, o pico, o mcedit,
o ed e o emacs;

 O nano é um editor de textos simples e prático que segue a linha de funcionamento do joe. Ele possui apenas o
modo de edição e usa atalhos para gerenciar as funcionalidades;

 O vim (Vi improved) é um dos editores de textos mais utilizados atualmente, que, além de útil e prático,
possui um recurso interessante, o Syntax Highlight, que é uma coloração especial da sintaxe nos arquivos;

 O editor de textos joe é uma outra alternativa de edição de textos tradicional. O joe sempre trabalha no modo
de edição e usa uma infinidade de teclas de atalho para executar comandos com funcionalidades específicas;

 A alteração do editor de texto padrão do sistema GNU/Linux envolve a utilização da variável EDITOR ou o
comando update-alternatives.

Laboratório 1
A. Editando com o Nano
1. Abra o nano
# nano
2. Digite um texto qualquer de 10 linhas
3. Vá até a primeira linha do arquivo com CTRL+\ e recorte utilizando CTRL+K
4. Vá para a ultima linha e cole utilizando CTRL+U
5. Faça uma busca no texto por uma palavra que você tenha digitado com CTRL+W
6. Vá para a ultima linha do arquivo e adicione o conteudo do arquivo /etc/resolv.conf
Pressione CTRL+R
Digite o caminho do arquivo /etc/resolv.conf
Pressione Enter
7. Pressione CTRL+O para salvar e de o nome que preferir

Laboratório 2
A. Se familiarizando e testando alguns comandos com o Vim
1. Abra o arquivo messages
# vim /var/log/messages
Note que você não consegue digitar nada, pois está no modo de comandos
2. Numere as linhas
:set nu
3. Vá para a última linha, digitando “G”
4. Volte para a primeira linha, digitando “gg”
5. Remova a numeração das linhas
:set nonu
6. Localize a palavra “input”.
/input
7. Vá para a próxima ocorrência da busca
n
8. Habilite o modo de programação, tornando o código colorido para facilitar a leitura
:syntax on
9. Saia sem salvar
:q!

B. Editando o primeiro arquivo com o Vim


1. Vá para sua pasta pessoal.
# cd
2. Abra o Vim
# vim
3. Entre no modo de edição pressionando “i” ou “insert”
4. Digite algum texto de 5 linhas
5. Volte para o modo de comandos pressionando “Esc”
6. Vá para a primeira linha “gg”
7. Copie a linha, pressionando “yy”
8. Vá para a última linha “G”
9. Cole a linha, pressonando “p”
10. Desfaça a alteração, pressionando “u”
11. Vá para a linha 3
:3
12. Agora cole novamente o texto “p”
13. Vá para a primeira linha “gg”
14. Apague a linha “dd”
15. Salve o arquivo
:w /root/arquivo-vim.txt
16. Substitua uma palavra do seu texto por outra
:%s/palavra_original/nova_palavra/g
17. Salve e saia
:wq

Laboratório 3
A. Alterando o Editor de Textos padrão
1. Observe seu editor de textos padrão
# editor
2. Saia dele novamente
3. Altere para o vim
# update-alternatives --config editor
4. Selecione a opção 3 (/usr/bin/vim.tiny)
5. Teste novamente
# editor
6. Saia do Vim
:q!

Exercícios de Fixação
1. Qual o editor de textos padão do Debian e derivados?
a) Vim
b) pico
c) nano
d) editor
e) edit
Alternativa Correta: C

2. Qual editor de textos permite utilização de mouse?


a) mcedit
b) joe
c) nano
d) pico
e) vi
Alternativa Correta: A

3. Qual comando copia uma linha no Vim?


a) cc
b) yy
c) pp
d) dd
e) p
Alternativa Correta: B

4. Qual comando usamos para desativar a numeração de linhas?


a) :set disablenu
b) :set disable
c) :set nu
d) :set nonu
e) :syntax off
Alternativa Correta: D

5. Qual comando usamos para forçar o salvamento e sair?


a) :q
b) :w!
c) :wq!
d) :wq
e) :q!
Alternativa Correta: C
Capítulo 7 – Gerenciamento de hardware e
dispositivos

 O subdiretório /dev;
Introdução  Arquivos de dispositivo;
 Dispositivos de armazenamento;
 Gerenciador udev;
Com exceção das placas de rede, os  Sistemas de arquivos;
dispositivos de hardware, em sistemas
GNU/Linux, também são representados  Montagem e desmontagem de dispositivos;
como arquivos, armazenados de forma
organizada no diretório /dev, onde podem
 Particionamento de discos;
ser administrados pelo usuário.  Aplicação e manutenção do sistema de arquivos.
Conhecer bem a estrutura e o
funcionamento desses arquivos é necessário para um bom gerenciamento do sistema. Neste
capítulo, começaremos com um estudo dos arquivos de dispositivos presentes diretório /dev e
contemplaremos também conceitos e procedimentos de montagem de dispositivos, particionamento
de discos, aplicação de sistemas de arquivos e gerenciamento desses sistemas.

O subdiretório /dev

O subdiretório /dev é um sistema de arquivos especial onde estão localizados todos os arquivos
referentes aos dispositivos do computador, exceto a interface de rede, manipulada diretamente no
nível do kernel. Fora ela, praticamente todos os dispositivos de hardware têm um arquivo
correspondente no diretório /dev.

O /dev pode aparecer nos computadores de duas formas diferentes: devfs ou udev. Uma diferença
básica entre os dois é que, ao contrário do devfs, que é mais antigo e criava um arquivo de
dispositivo para cada dispositivo de hardware suportado pelo sistema, independente de ele estar em
uso ou mesmo fisicamente presente na máquina, o udev gera esses arquivos conforme a
disponibilidade e presença dos dispositivos no sistema, de forma a otimizar a capacidade de
armazenamento do /dev.

O tratamento de toda a parte física do computador como dispositivo difere bastante das plataformas
do Windows, nas quais existem os conceitos de unidades e drives, levando o usuário a ganhar em
simplicidade de uso, porém perder em conhecimento do funcionamento do sistema.
Arquivos de dispositivo

Em um sistema GNU/Linux, um dispositivo é acessado por meio de seu respectivo arquivo de


dispositivo no diretório /dev. Esses arquivos, que acabamos de apresentar, são uma interface para o
driver atual que acessa o dispositivo de hardware.

Os arquivos de dispositivo são divididos nos seguintes tipos:

 Arquivos de dispositivos de caractere: São orientados à comunicação e ao fluxo de informações em modo


serial, ou seja, caractere a caractere. Geralmente, são utilizados em comunicações feitas por portas seriais ou
paralelas, como por exemplo, modems. O próprio terminal de comandos utiliza arquivos desse tipo para criar
uma interface de comunicação com o kernel;

 Arquivos de dispositivos de bloco: São orientados, geralmente, ao armazenamento de informações


temporárias em algum tipo de mídia, ou seja, tal comunicação feita em modo de blocos possibilitará o
armazenamento e, posteriormente, a leitura dessas informações. Esse tipo de arquivo é utilizado, geralmente,
para representar partições de discos ou pendrive, CD-ROM, DVD, etc.

 Arquivos de dispositivos FIFO: FIFO é uma sigla para o termo Fisrt In, First Out (primeiro a entrar, primeiro
a sair), que caracteriza o processamento de dados em esquema de fila e viabiliza a comunicação entre dois
processos independentes. É comum também chamar esses arquivos de pipe nomeado.

 Arquivos de dispositivos socket: Voltados para a criação de pontos de comunicação.

Os tipos de arquivos de dispositivo mais manipulados são os de caractere e de bloco.

Vejamos alguns exemplos de arquivos de caractere e de bloco:

Tipo Arquivo Representação


Caractere /dev/ttyS1 Primeira porta serial.
/dev/lp0 Primeira porta paralela.
Bloco /dev/hda1 Primeira partição de disco IDE.
/dev/fd0 Primeiro dispositivo de disquete.

Dispositivos de armazenamento

Como o próprio nome já diz, dispositivo de armazenamento é qualquer hardware onde se possam
gravar dados, como CDs, pendrives, HDs, etc. Existem tipos diferentes de dispositivos de
armazenamento. Em computadores pessoais, os discos mais comuns até pouco tempo atrás eram os
do tipo IDE e, com o avanço tecnológico autalmente, os mais comuns são os do tipo SATA. Discos
SCSI e SAS são mais rápidos e sofisticados, sendo preferidos para servidores e máquinas de alto
desempenho.
A nomeação dos diretórios e dispositivos de armazenamento em sistemas GNU/Linux é
normalmente algo que confunde o usuário iniciante, já que difere muito de outras plataformas. O
nome usado para identificar cada arquivo de dispositivo no diretório /dev vai depender do tipo de
dispositivo, seja ele um disquete, IDE, SATA, SCSI ou qualquer outro. Dessa forma, é importante
chamar atenção para os padrões a seguir:

 A primeira e a segunda unidade de disquete têm os nomes /dev/fd0 e /dev/fd1 respectivamente;

 Dispositivos IDE são nomeados de acordo com o canal IDE utilizado e o modo como foram conectados, seja
ele master (mestre) ou slave (escravo). Assim, /dev/hda e /dev/hdb serão respectivamente os disco master e
slave conectados na controladora primária. Na secundária, os discos master e slave serão chamados /dev/hdc e
/dev/hdd, nessa ordem;

 Dispositivos SATA e SCSI recebem os nomes /dev/sda, /dev/sdb e assim por diante, de acordo com a ordem
em que são identificados pela BIOS. Controladoras SCSI podem ser de 8 ou 16 bits, sendo que o primeiro tipo
comporta até 7 dispositivos, e o segundo aceita, no máximo, 15 (Contando com a própria unidade que utiliza 1
bit);

 Cartões e pendrives, que são dispositivos SDD, seguem o padrão SATA, SAS e SCSI de nomenclatura, e são
numerados a partir da quantidade de discos SATA ou SCSI já existentes, ou seja, caso existam três discos
SATA ou SCSI, um pendrive será representado por /dev/sdd, por exemplo.

 Drives de CD/DVD seguem o padrão de nomenclatura IDE ou SCSI, dependendo do tipo do dispositivo em
questão. O último caractere não numérico do nome do arquivo será a letra do alfabeto seguinte à que foi
utilizada para o último dispositivo reconhecido pela BIOS. Porém, é comum as distribuições do Linux também
criarem automaticamente um link para o drive de CD/DVD com o nome /dev/cdrom.

Se o usuário preferir e a distribuição do Linux que ele estiver utilizando permitir, os dispositivos
IDE podem ser configurados para seguir o padrão DATA e SCSI de nomeação, de maneira que terão
os nomes /dev/sda e /dev/sdb os discos master e slave da primeira controladora e assim
sucessivamente.

Para identificar cada partição num desses dispositivos, um numeral cardinal será adicionado ao seu
nome, sendo que as partições primárias serão numeradas de 1 a 4 e as lógicas partirão do algarismo
5. Assim, se houver, por exemplo, duas partições no disco master da controladora primária, seus
nomes serão /dev/hda1 e /dev/hda2.
Para não errar, unidades sempre iniciam pelo “0” (fd0, lp0), partições sempre iniciam por “1”
(hda1, sdb1).

udev

Como foi visto, o udev substituiu o gerenciador de dispositivos devfs a partir da versão 2.6.12 do
kernel. Com o antigo devfs, todos os arquivos de dispositivo eram criados de uma vez no diretório
/dev, de maneira a gerar no diretório os dispositivos de todos os itens de hardwares que o sistema
suportasse, independentemente da existência desses itens na máquina, ou seja, com o devfs
acabavam-se criando arquivos de dispositivo desnecessários, super populando o diretório /dev.
No caso do udev, os arquivos de dispositivo são gerados dinamicamente, conforme os itens de
hardware são instalados, o que significa que o que não estiver sendo usado no computador não
ocupa espaço no disco. Nos sistemas mais recentes, o udev possui capacidade coldplug e hotplug,
responsáveis por identificar e configurar os dispositivos presentes desde o ligamento do computador
e aqueles conectados após a inicialização do sistema respectivamente.

O arquivo de configuração do udev é o /etc/udev/udev.conf, e os arquivos de regra ficam no


diretório /etc/udev/rules.d/. Os comandos udevmonitor ou udevadm monitor, dependendo da
versão do sistema, permitem monitorar os eventos armazenados no sistema de arquivos lógico
chamado SysFS, onde são registradas as informações de identificação dos dispositivos.

Sistema de arquivos

Podemos definir um sistema de arquivos como um meio de deixar os dados de nosso sistema mais
organizados. Todo sistema operacional gera um tipo de sistema de arquivos.

A seguir, abordaremos as informações sobre os sistemas de arquivos e, também, sobre como


podemos gerenciá-los por meio de ferramentas específicas.

O Linux oferece suporte a vários sistemas de arquivos de outros sistemas operacionais.

A seguir, citamos alguns:

 xiafs;

 minix;

 msdos;

 vfat;

 proc;

 smbfs;

 iso9660;

 hpfs;

 ufs.

Os sistemas de arquivos são alocados em partições lógicas; cada partição aceita um único sistema
de arquivos.
Capítulo 8

Estrutura básica

De maneira geral, podemos dividir o sistema de arquivos em quatro partes: bloco de boot,
superbloco, tabela de inodes e bloco de dados.

Bloco de boot

Esee bloco fica localizado no início do sistema de arquivos. Para acessá-lo, podemos utilizar o
código mínimo incorporado na ROM da BIOS do computador. O bloco de boot da partição bootable
contém o código necessário para inicializar o sistema operacional posteriormente.

Superbloco

Este bloco é responsável por descrever o estado do sistema de arquivos no que diz respeito ao
tamanho e à quantidade de arquivos que tal sistema pode armazenar.

Além disso, ele descreve as informações sobre quais partes da área de armazenamento já estão
sendo utilizadas e quais ainda estão disponíveis, bem como outras informações.

A seguir, listamos as informações contidas no superbloco:

 Tamanho do sistema de arquivos, que faz referência à área de armazenamento do dispositivo ou da partição
atual no dispositivo;

 Relação de blocos de armazenamento;

 Quantidade de blocos disponíveis;

 Localização de todos os blocos disponíveis;

 Tamanho da lista de inode: esta lista é inicializada com o propósito de rastrear a maior quantidade possível de
arquivos;

 Quantidade de inodes disponíveis no sistema de arquivos;


 Índice do próximo inode disponível na lista de inodes disponíveis.

Tabela de inodes

Inode ou Index node é uma estrutura de dados constituinte de um sistema de arquivos que segue a
semântica Unix. O Inode armazena informações sobre um arquivo, tais como o dono, permissões e
sua localização

Podemos definir a lista de inodes como uma lista estática. O tamanho da lista não pode ser alterado
depois que o sistema de arquivos for criado. O administrador e o tamanho do dispositivo de
armazenamento são responsáveis por definir o tamanho desta lista.

A seguir, listamos os tipos de informações incluídas em um inode:

 ID do proprietário do arquivo: Refere-se ao UID especificado no arquivo de usuários para identificar o


proprietário do arquivo;

 ID do grupo: Refere-se ao GID especificado no arquivo de grupos para identificar o grupo do arquivo;

 Tipo de arquivo: Responsável por armazenar a especificação do tipo de arquivo, isto é, especifica se o
arquivo é um diretório, um link simbólico, um dispositivo de bloco ou caractere ou um pipe;

 Permissões do arquivo: Traz informações de permissões de acesso para as classes usuário (owner), grupo
(group) e outros (other);

 Tempo de acesso: Por meio deste item, podemos obter informações sobre tempo de acesso e modificação
dos arquivos, além do número de links, tamanho do arquivo e o local onde os dados estão armazenados no
dispositivo.

Bloco de dados

Os blocos de dados estão localizados após os blocos que possuem a lista de inodes e têm a função
de armazenar informações administrativas, bem como os dados dos arquivos.

É importante lembrar que um bloco de dados nunca pode pertencer a mais de um sistema de
arquivos.
Sistemas de arquivos no Linux

Conheceremos, a seguir, os sistemas de arquivos com os quais o Linux trabalha.

Second Extended File System (ext2)

Um dos sistemas de arquivos com que o Linux trabalha é o ext2. O inode é a estrutura básica do
ext2. Como dito anteriormente, cada arquivo possui o próprio inode. Os diretórios também
possuem um inode próprio.

Uma característica do ext2 é utilizar blocos do mesmo tamanho para armazenar os arquivos.
Podemos determinar o tamanho do bloco quando o sistema de arquivos ext2 está sendo criado.

Quando utilizamos este sistema de arquivos, os dados importantes para a integridade do ext2, bem
como arquivos e diretórios, são mantidos em grupos de blocos. Os grupos de blocos são divisões
criadas na partição lógica em que o ext2 está incluído.

A seguir, listamos alguns dados sobre o sistema de arquivos ext2:

 Os diretórios, arquivos regulares, arquivos especiais do dispositivo e links simbólicos, tidos como tipos de
arquivo padrão do Unix, são aceitos pelo sistema de arquivos;

 Sistemas de arquivos criados em partições consideravelmente grandes podem ser controlados pelo ext2.
Antigamente, o tamanho máximo do sistema de arquivos era 2 GB, característica imposta pelo código original
do kernel. Atualmente, este tamanho foi ampliado para 4 TB;

 O tamanho máximo do nome do arquivo é de 255 caracteres. Porém, caso seja necessário, esse tamanho pode
ser aumentado para 1012 caracteres;

 As entradas de diretório possuem comprimento variável;

 Reserva normalmente 5% dos blocos para o superusuário (root). Esta característica ajuda o trabalho do
administrador diante de um sistema de arquivos sobrecarregado pelos processos requeridos pelo usuário.

ext3

O ext3 foi desenvolvido por Estephen Tweedie, da Red Hat, e é uma versão journaling do sistema
de arquivos ext2. Um sistema de arquivo com journaling trabalha com um log chamado journal. As
informações referentes a uma operação que será realizada são agendadas primeiro no journal, para
depois serem realizadas de fato.

Caso a operação seja interrompida (por uma queda de energia, por exemplo) no momento em que
suas informações estão sendo registradas no journal, o arquivo permanecerá intacto, ainda que não
seja atualizado. Porém, se a operação for interrompida durante sua execução, ela poderá ser
posteriormente completada, pois as informações necessárias para execução completa da operação já
estão contidas no journal.

A seguir, descreveremos algumas características do ext3:

 Utiliza uma API denominada JBD (Journaling Block Device). Esta camada, em vez de armazenar bytes a
serem gravados, armazena na memória os blocos modificados do sistema de arquivos. Com os blocos
modificados já armazenados, uma operação que foi interrompida pode continuar a ser executada;

 Permite utilizar o sistema de quotas;

 Pode trabalhar com blocos de 1,2 e 4 KB;

 O tamanho máximo do sistema de arquivos é de 16 TB;

 O tamanho máximo dos arquivos é de 2 TB.

ReiserFS

O ReiserFs foi criado por Hans Reiser, e seu núcleo é baseado em uma mesma árvore, as
conhecidas B+ (árvores balanceadas). Cada diretório apresenta uma subárvore da árvore principal,
não havendo uma árvore diferente para cada diretório.

Contudo, a utilização de uma mesma árvore em que estão contidos elementos como diretórios, links
e blocos de arquivos implica a utilização de técnicas de indexação (hashing) mais complexas.
Capítulo 8
O ReiserFS utiliza o recurso journaling, e sua conduta é armazenar apenas os
metadados no journal. Estes dados armazenados se referem ao tamanho e às permissões do arquivo.

Caso ocorra uma interrupção durante a gravação dos arquivos journal, um arquivo poderá
apresentar seu conteúdo incompleto.

A seguir serão apresentadas algumas características do ReiserFS:

 Trabalha com blocos de 4 KB;

 O tamanho máximo do sistema de arquivos é de 1 EB;

 O tamanho máximo do arquivo é de 1 EB.


xfs

O xfs é o sistema de arquivos mais potente já desenvolvido e é utilizado para desempenhos em


escala extremamente grande. Compatível com o Linux 2.4 e versões superiores, o xfs alia o recurso
journaling a um endereçamento de 64 bits e permite o escalonamento de estruturas e algoritmos.

Os processos realizados pelo xfs são rápidos, pois ele permite a execução de operações de
journaling sem deixar que elas afetem drasticamente o desempenho de operações de escrita e leitura
de dados.

A seguir, vão alguns dados técnicos sobre o xfs:

 Permite utilizar o sistema de quotas de usuários e de grupos;

 Trabalha com blocos de até 64 KB;

 O tamanho máximo do sistema de arquivos é 16 TB para plataformas de 32 bits e 9 milhões de TB (8,58 EB)
em plataformas de 64 bits;

 O tamanho máximo dos arquivos é de 16 TB no Linux 2.4 e 8,58 EB no Linux 2.6, estando o endereçamento
de 64 bits acionado.

Montando dispositivos

Ponto de montagem é uma das características mais importantes em sistemas Unix-Like, pois define
a forma como acessaremos um determinado dispositivo. Em sistemas Microsoft Windows, o acesso
às partições está diretamente relacionado a alguma unidade. Acessando tal unidade é como se
estivéssemos entrando no dispositivo e, a partir daí, é só utilizar os recursos. Em sistemas Unix-
Like, o acesso aos dispositivos se dá pelos pontos de montagem, que são diretórios simplesmente,
de preferência vazios, que serão um recipiente do dispositivo que será acessado.

A ligação e a transformação de um diretório vazio em um ponto de montagem se dão pelo processo


de montagem de dispositivos, através do comando mount que será estudado a seguir.

O processo de montagem é muito importante, pois define como o acesso a um dispositivo ocorrerá.
Também sobre o processo de montagem, para encerrar essa ligação que é feita entre dispositivo e
ponto de montagem, é preciso fazer o processo inverso, que chamamos de processo de
desmontagem, com o comando umount que será estudado adiante.
mount

mount [opção] [dispositivo] [ponto de montagem]

O comando mount é utilizado para montar um sistema de arquivos, permitindo acesso a um


determinado dispositivo. Conforme o conceito apresentado anteriormente sobre pontos de
montagem, o comando mount permitirá a ligação de dispositivos com seu respectivo ponto de
montagem.

Opção Unix Descrição


-a Monta todos os dispositivos predefinidos no
arquivo /etc/fstab.
-v Exibe o processo de montagem.
-t <S.A.> Especifica o tipo de sistema de arquivos utilizado
pelo dispositivo que será montado. Em que temos:
ext, ext2, ext3, hpfs, iso9660, jfs, minix, msdos, nfs,
nfs4, ntfs, reiserfs, smbfs, vfat e xfs.

-o Opções auxiliares que poderão ser ativadas no


processo de montagem: ro, rw, umask, etc.

Sobre os dispositivos que se deseja montar, é preciso indicar o arquivo especial relacionado a eles,
geralmente alocado no diretório /dev/. A seguir temos uma tabela que mostra alguns dispositivos e
seu respectivo arquivo especial, podendo ocorrer variações:

Arquivo especial Descrição


/dev/hda1 Primeira partição do primeiro disco rígido IDE,
que se encontra no canal primário.
/dev/hdd Pode ser um CD-ROM IDE no segundo canal
primário, como slave.
/dev/fd0 Primeira unidade de disquete.
/dev/sda1 Usado para identificar dispositivos SCSI, SATA,
e também unidades USB, indicando a primeira
partição desse dispositivo.

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos

Exemplos:

mount -t iso9660 /dev/hdd /media/cdrom


mount -t ext3 /dev/hda2 /mnt/backup

No primeiro exemplo visto anteriormente com o comando mount, temos uma simples montagem
do dispositivo de cdrom, no caso representado por /dev/hdd, no ponto de montagem
/media/cdrom, lembrando que mídias ópticas também utilizam sistemas de arquivos, no caso
iso9660.
No segundo exemplo, temos uma montagem de um dispositivo que é aparentemente uma partição e
que usa o sistema de arquivos ext3. O acesso a esse dispositivo será feito pelo ponto de montagem
/mnt/backup.

umount

umount [dispositivo] ou [ponto de montagem]

O comando umount, por sua vez, é utilizado para fazer o processo de desmontagem de um
dispositivo para que o mesmo possa ser liberado. A própria unidade de CDROM, para que possa ser
ejetada, precisa passar pelo processo de desmontagem, assim como qualquer tipo de dispositivo
montado no sistema.

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos

Exemplos:

umount /dev/hdd
umount /media/cdrom

Os exemplos anteriores têm exatamente a mesma função, em que o dispositivo de cdrom foi
desmontado e já não tem ligação de acesso no sistema.

Nota: Para desmontar os dispositivos, eles não podem ter qualquer tipo de recurso em uso no
sistema ou estar dentro do diretório a ser desmontado. Caso contrário, uma mensagem de erro será
exibida informando que o dispositivo está ocupado.

/etc/fstab

O arquivo /etc/fstab é responsável por armazenar as configurações de todos os sistemas de


arquivos do sistema e seus respectivos pontos de montagem, permitindo que eles sejam montados
corretamente a cada inicialização do sistema. Sistemas de arquivo que não estejam representados no
fstab não serão montados automaticamente.

Embora o fstab guarde informações sobre os dispositivos frequentemente acessados, o usuário deve
abrir os arquivos /etc/mtab ou /proc/mounts caso queira visualizar uma lista de todos os
dispositivos montados no sistema num determinado momento e seus parâmetros, pois essa
informação não está disponível no fstab.

O fstab é dividido em colunas, as quais serão explicadas individualmente a seguir:

 A primeira coluna determina o dispositivo de bloco que contem o sistema de arquivos que será montado. Neste
campo podemos atribuir um sistema de arquivos remoto;
 A segunda coluna especifica o ponto de montagem;

 A terceira coluna especifica o tipo de sistema de arquivos;

 Na quarta coluna são definidas as opções de montagem para a partição, de acordo com as possibilidades
mostradas na seguinte tabela:

Opção Descrição
defaults Inicializa a partição com valores padrão de montagem.
rw Permite a modificação de dados na partição.
ro Montará a partição com permissão de somente leitura.
sync Os dados atribuídos aos dispositivos serão gravados de
maneira imediata.
auto A partição será montada automaticamente na
inicialização do sistema.
noauto A partição não será montada na inicialização do sistema.
remount Opção exclusiva para montagem manual, promove
a remontagem de um dispositivo já montado, com a
possibilidade de adicionar outras opções.
users Garante permissão a qualquer usuário para habilitar e
desabilitar o dispositivo.
user Permite que usuários comuns habilitem o dispositivo,
mas só o usuário que o montou tem permissão para
desmontá-lo.
owner Após montado o dispositivo, suas permissões se
adequarão ao usuário responsável por sua
montagem.
usrquota Habilita o uso de cotas de disco para usuário.
grpquota Habilita o uso de cotas de disco para grupo.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

Exemplo:
Particionando discos

Já falamos diversas vezes sobre partições, inclusive com uma explicação detalhada sobre o padrão
seguido por sistemas GNU/Linux para nomeá-las, agora passaremos à sua definição de fato e aos
processos através dos quais as partições podem ser criadas.

Partições são divisões lógicas do disco rígido, sem as quais é impossível gravar arquivos no
computador. Uma vez definidas, as partições delimitam onde será criado e armazenado cada sistema
de arquivos, de forma organizada. Normalmente, os discos já vêm particionados de fábrica, porém o
esquema de partições é personalizável e pode ser alterado pelo próprio usuário.

Como foi visto recentemente, sistemas operacionais da Microsoft apresentam as partições num
sistema de letras, como C: e D:. Já em sistemas GNU/Linux, as partições, que podem ser acessadas
no diretório /dev, recebem nomes de acordo com o tipo de dispositivo de armazenamento. Caso
queira relembrar como elas são organizadas, o aluno pode consultar o tópico 4 deste capítulo.

As partições padrão são chamadas primárias e só podem existir num limite de quatro em qualquer
PC. Para superar essa limitação, é possível trocar uma das partições primárias por uma partição
estendida, que funciona como hospedeira para mais partições lógicas.

O comando cat, quando seguido do caminho completo de uma partição, permite verificar o
conteúdo dessa partição, porém sua saída é inteligível somente ao computador. Para que o usuário
possa compreendê-la, precisa proceder com a montagem de dispositivo.

O comando cat costuma levar bastante tempo para exibir sua saída. O processo pode ser
interrompido com o atalho CTRL + C ou ainda digitando reset, caso o atalho não produza
resultado.

fdisk

O comando fdisk é utilizado para criar partições em um determinado disco. No Linux, os


dispositivos se encontram nos seguintes endereços:

 /dev/hda: IDE Primária Master;

 /dev/hdb: IDE Primária Slave;

 /dev/hdc: IDE Secundária Master;

 /dev/hdd: IDE Secundária Slave;

 /dev/sd*: Dispositivos SCSI.


A sintaxe do comando fdisk é a seguinte:

fdisk <dispositivo>

A seguir, são apresentadas algumas opções do comando fdisk:

Opção Descrição
a Alterna a partição ativa, responsável pelo boot.
b Edita o disklabel do bsd.
c Alterna a sinalização de compatibilidade do DOS.
d Exclui uma determinada partição.
l Exibe a lista dos sistemas de arquivos conhecidos.
m Exibe a lista do menu de ajuda.
n Cria uma nova partição.
p Exibe a tabela de partições.
q Sai do programa e não salva as alterações.
s Cria um disklabel da Sun novo e vazio.
t Altera um id de sistema de partição.
u Altera unidades de exibição/entrada.
w Grava a tabela do disco e sai.

A seguir, podemos visualizar essas opções:

Na imagem a seguir, podemos visualizar as partições existentes no dispositivo:


A próxima imagem exibe a remoção da terceira partição do disco:

cfdisk

O comando cfdisk permite efetuar a criação de partições nos dispositivos. A sintaxe é a seguinte:

cfdisk <dispositivo>

Por exemplo:

A próxima imagem exibe a tela do utilitário cfdisk:


A próxima tabela descreve as opções do cfdisk:

Opção Descrição
Inicializar Torna a partição inicializável.
Excluir Exclui partição.
Ajuda Exibe ajuda do cfdisk.
Maximize Permite maximizar o uso do disco.
Mostre Exibir tabela de partições na tela.
Sair Encerra o cfdisk.
Tipo Define o tipo de sistema de arquivos.
Unidades Exibe o tamanho das partições em MB, setores e
cilindros.
Gravar Grava a tabela de partições do disco.

UUID (Universally Unique Identifier)

O UUID é o número de identificação atribuído a um sistema de arquivos. Esse número não é


alterado, independente de qualquer mudança no BIOS do computador ou no kernel, processos que
geram uma reorganização e renomeação das partições dentro do diretório /dev. Uma vez que os
nomes dos arquivos tenham sido trocados, o usuário pode ter problemas em localizar o que procura
no /dev, tornando uma busca pelo UUID eficiente.

Há três formas de aquisição do UUID dos arquivos. A primeira delas é o comando blkid, que
identifica o UUID, o arquivo correspondente no /dev, o tipo de sistema de arquivos usado e o label,
caso exista algum, de todas as partições locais.
Outro comando que pode ser utilizado é o vol_id com o parâmetro –u. Esse comando informa o
UUID de uma participação específica.

E finalmente, também é possível utilizar o comando ls da seguinte maneira:

Instrutor: substituir este exemplo


ls -l /dev/disk/by-uuid/

Veja exemplo abaixo:

Partição swap

Partições swap são espaços alocados em disco que funcionam como memória adicional, para aliviar
a carga sobre a memória RAM do computador, evitando lentidões no funcionamento do sistema ou
travamentos.

Um desses espaços já é gerado automaticamente com a configuração padrão do sistema e acionado


a cada boot, porém, dependendo do que se exige do computador, ainda mais memória pode vir a ser
necessária. Para isso, partições swap podem ser criadas, separadas das outras partições comuns.

Com o comando mkswap, transforma-se uma partição ou mesmo um arquivo comum em área de
swap, bastando usar como argumento do comando o caminho completo para a partição ou o arquivo
em questão. Após configurados como swap, eles precisam ser acionados com o comando swapon,
que também deve vir seguido do caminho completo para a partição ou o arquivo no lugar do
argumento. Para desativa-los, o comando usado é o swapoff.
Instrutor: Criar exemplo simples de como criar partição swap adicional

A tabela a seguir descreve opções que podem ser utilizados com o comando swapon:

Opção Descrição
-a Ativa todas as partições do fstab que estiverem
marcadas como swap. Quando usado como
argumento do comando swapoff, faz
justamente o contrário: desativa todos os
espaços de swap. As partições que estiverem
com a opção noauto não serão afetadas por
esse argumento nem para ativação, nem para
desativação.
-a -e Ignora sem notificação alguma as partições não
encontradas.
-s Exibe detalhes do uso de cada partição ou
arquivo de swap.
-p [N] Indica a prioridade de uso dos espaços de swap
disponíveis. O valor de [N] varia de 0 a 32767,
sendo que, quanto mais alto o valor, maior a
prioridade. Partições com o mesmo valor de
prioridade são usadas simultaneamente.
-L [nome] Usa a partição de rótulo [nome].
-U [UUID] Usa a partição cujo UUID seja igual a [UUID]

Aplicando um sistema de arquivos

Uma vez particionado o disco através dos processos vistos até agora, é preciso preparar a partição
criada para o recebimento e registro de informações novas de maneira organizada e estruturada. A
forma que o usuário tem de fazer isso é aplicando um sistema de arquivos à partição.

Embora esse seja um procedimento diferente de formatar discos, ambos compartilham uma
consequência que não pode ser esquecida: todo o conteúdo da partição é apagado quando um
sistema de arquivos é aplicado a ela, portanto o usuário deve ser extremamente cauteloso durante o
processo.

mkfs

Este comando é utilizado para criar um sistema de arquivos no dispositivo. Em outros termos ele
realiza a formatação lógica dos dispositivos. A sintaxe do comando mkfs é a seguinte:
mkfs <opcao> [dispositivo]

É importante que o sistema de arquivos que aplicaremos seja suportado pelo kernel. Para consultar a
lista de sistemas de arquivos suportados, consultar o arquivo /proc/filesystems.

As opções deste comando são descritas na tabela a seguir:

Opção Descrição
-v Modo verboso (exibe com detalhes as
operações efetuadas).
-c Realiza a verificação de blocos ruins no
dispositivo.
-t <sistema_arq> Informa qual será o tipo de sistema de arquivos
formatado no dispositivo especificado.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

O exemplo a seguir realiza a formatação lógica do dispositivo e insere o sistema de arquivos ext3:

Podemos utilizar a seguinte sintaxe para definir os sistemas de arquivos:

mkfs.<sistema_arq>

mke2fs

O comando mke2fs, cuja sintaxe é exibida a seguir, é utilizado para criar sistemas de arquivos
ext2 e ext3 em dispositivos de armazenamento:
mke2fs <opcao> [dispositivo]

A seguir as opções mais utilizadas serão comentadas:

Opção Descrição
-F Força a execução do comando no dispositivo
informado.
-j Cria um sistema de arquivos ext3 no dispositivo
informado.
-c Varre o dispositivo informado à procura de blocos
ruins.
-L Atribui um rótulo ao dispositivo.
-v Exibe detalhes sobre a execução do comando.
-V Exibe a versão do comando.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

O próximo exemplo cria um sistema de arquivos ext3 no dispositivo informado:

mkreiserfs

Este comando é utilizado para criar uma partição e determinar que o dispositivo
trabalhará com o sistema de arquivos reiserfs. A sintaxe é a seguinte:

mkreiserfs < opcao > [dispositivo]

A seguir, podemos visualizar a descrição das opções mais utilizadas deste comando:
Opção Descrição
-b Define o tamanho do bloco, em bytes. Os valores
aceitos estão em uma faixa de 512 até 8192 bytes.
-l Permite definir um nome de volume para o
dispositivo.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

O exemplo a seguir formata o dispositivo com o sistema de arquivos reiserfs:

O próximo exemplo, além de formatar o dispositivo com o formato de arquivo


reiserfs, define uma etiqueta para o volume:
Manutenção do sistema de arquivos

Passaremos agora à descrição de alguns comandos que permitem a obtenção de informações sobre
sistemas de arquivos, depuração e configuração de parâmetros, auxiliando na manutenção dos
sistemas.

fsck

O comando fsck realiza a verificação e o reparo de um determinado sistema de arquivos, ou de um


determinado dispositivo de armazenamento.

Sintaxe:

fsck < opcao > [dispositivo]

A tabela a seguir exibe as opções mais conhecidas deste comando:

Opção Descrição
-A Realiza a verificação do sistema de arquivos em
todos os dispositivos listados no arquivo /etc/fstab.
-c Exibe uma barra demonstrando o progresso da
Opção Descrição
instalação.
-n Exibe somente o resultado do comando, não
executa ação sobre o sistema de arquivo.
-a Realiza o reparo automático do sistema de arquivos.
-t <sistema Define o tipo de sistema de arquivos que o
arq> dispositivo contém.

Nota: Antes de executarmos a checagem com o comando fsck devemos desabilitar os dispositivos,
e, no caso da raiz do sistema, essa checagem deverá ser realizada no modo de manutenção.

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos

O próximo exemplo faz a checagem e o reparo automático em um dispositivo que contém o sistema
de arquivos ext3:

É importante notarmos que, para que possamos utilizar o fsck e ao mesmo tempo especificar o
sistema de arquivos, podemos utilizar a seguinte sintaxe:

fsck.<sistema_arq> <dispositivo>

Exemplo:

fsck.ext3 /dev/hda2

e2fsck

Este comando realiza a verificação e reparo de sistema de arquivos ext2 e ext3 em dispositivos de
armazenamento. Sua sintaxe é a seguinte:

e2fsck <opcao> [dispositivo]

A tabela a seguir descreve as opções do comando e2fsck:

Opção Descrição
-f Força a checagem do dispositivo informado.
-p Realiza o reparo do sistema de arquivos
automaticamente.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

O exemplo a seguir realiza a checagem e o reparo de um sistema de arquivos no dispositivo


informado:

reiserfsck

O comando reiserfsck permite realizar a verificação de dispositivos que utilizam esse sistema de
arquivos. Sua sintaxe é a seguinte:

reiserfsck < opcao > [dispositivo]

Na tabela a seguir, serão citadas as opções mais utilizadas:

Opção Descrição
-a Verifica todos os dispositivos listados no arquivo
/etc/fstab.
-y Realiza o reparo automático do sistema de arquivos.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

O próximo exemplo mostra a verificação e a correção do sistema de arquivos no dispositivo


definido:
debugfs

O debugfs é o comando responsável por depurar o sistema de arquivos de forma interativa. Por
meio desse comando, podemos checar e alterar o estado apresentado pelo sistema de arquivos. Sua
sintaxe é a seguinte:

debugfs <opção> [dispositivo]

As opções utilizadas no debugfs são as seguintes:

Opção Descrição
-b <tamanho do Esta opção tem a finalidade de forçar a
bloco> utilização de um tamanho de bloco para o
sistema de arquivos.
-s <superbloco> Esta opção faz com que a leitura do
superbloco do sistema de arquivos seja
realizada a partir da quantidade de blocos
determinada. Isso significa que, quando
utilizamos essa opção, devemos também
definir a opção -b.
-V Essa opção exibe a versão do debugfs.
-w Esta opção determina que o sistema de
arquivos será aberto em modo read-write
(leitura e gravação). Caso não utilizemos essa
opção, o modo de abertura do sistema é
somente leitura.

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos

O próximo exemplo exibe a execução do comando debugfs:

No exemplo a seguir, podemos visualizar os últimos inodes removidos. Isso pode ser feito por meio
do comando Isdel:

dumpe2fs

O comando dumpe2fs é utilizado para obter informações de sistemas de arquivos ext2 e ext3. Sua
sintaxe é apresentada a seguir:

dumpe2fs <dispositivo>

A seguir, são descritas algumas opções do comando dumpe2fs:

Opção Descrição
-b Exibe os blocos defeituosos.
-x Exibe descrição dos blocos do grupo em formato
hexadecimal.
-V Exibe a versão do comando.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

Podemos observar a execução do comando dumpe2fs no exemplo a seguir:


tune2fs

Por meio do comando tune2fs, o administrador do sistema pode configurar parâmetros para os
sistemas de arquivos ext2 e ext3. A sintaxe desse comando é a seguinte:

tune2fs < opcao > [ dispositivo ]

A tabela a seguir descreve as principais opções do comando tune2fs:

Opção Descrição
-c < valor > Esta opção é responsável por configurar o
número máximo de montagens entre duas
verificações do sistema de arquivos.
-g < grupo > Esta opção determina o grupo de usuários que
poderá utilizar os blocos reservados.
-j O objetivo desta opção é adicionar um journal
ao sistema de arquivos. Muito utilizado para
realizar a conversão de sistema de arquivos
ext2 para ext3.
-l Exibe o conteúdo do superbloco do sistema de
arquivos.
-m Esta opção é responsável por configurar a
<numero_blocos> porcentagem de blocos reservados em um
determinado dispositivo.
-u <usuário> Define o usuário que poderá utilizar os blocos
reservados no sistema de arquivos.
-C Esta opção é responsável por determinar a
quantidade de vezes que o sistema de
arquivos já foi montado.
-L Opção responsável por definir um rótulo para o
<rótulo_volume> volume no sistema de arquivos.

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos

O exemplo a seguir altera a quantidade de montagem máxima do arquivo:

No próximo exemplo, o rótulo do volume do dispositivo é alterado:


No exemplo a seguir, definimos a quantidade de montagem máxima para a verificação do sistema
de arquivos e alteramos para 10% a porcentagem de blocos reservados no sistema de arquivos:

Tópicos para revisão do capítulo

Atente para os tópicos a seguir. Eles devem ser estudados com muita atenção, pois
representam os pontos mais importantes do capítulo.

 O subdiretório /dev é um sistema de arquivos especial onde estão localizados todos os arquivos referentes aos
dispositivos do computador, exceto a interface de rede, manipulada diretamente no nível do kernel;

 Em um sistema GNU/Linux, um dispositivo é acessado por meio de seu respectivo arquivo de dispositivo, que
pode ser de caractere, de bloco, FIFO ou socket;

 Dispositivo de armazenamento é qualquer hardware onde se possam gravar dados, como CDs, pendrives, HDs,
etc. Em computadores pessoais, os discos mais comuns são do tipo IDE e, com o avanço tecnológico recente,
também do tipo SATA;

 O udev é um gerenciador de dispositivos que cria os arquivos de dispositivo dinamicamente, conforme os itens
de hardware são instalados no computador;

 Um sistema de arquivos pode ser definido como um meio de deixar os dados de nosso sistema mais
organizados. São divididos em bloco de boot, superbloco, tabela de inodes e bloco de dados. Exemplos de
sistemas de arquivos do Linux são o ext2, o ext3, o ReiserFS e o xfs;

 O processo de montagem de um dispositivo, realizado pelo comando mount, é muito importante, pois define
como o acesso a um dispositivo ocorrerá O local onde o dispositivo será armazenado e acessado chama-se
ponto de montagem;

 Partições são divisões lógicas do disco rígido, sem as quais é impossível gravar arquivos no computador. Uma
vez definidas, as partições delimitam onde será criado e armazenado cada sistema de arquivos, de forma
organizada;

 Uma vez particionado o disco, é preciso preparar a partição criada para o recebimento e registro de
informações novas de maneira organizada e estruturada. A forma que o usuário tem de fazer isso é aplicando
um sistema de arquivos à partição;

 Existem comandos que permitem a obtenção de informações sobre sistemas de arquivos, depuração e
configuração de parâmetros. Conhecê-los auxilia o usuário na manutenção dos sistemas.

Laboratório 1
A. Identificando arquivos de dispositivos
1. Liste detalhadamente o arquivo /dev/sda
# ls -l /dev/sda
Note no tipo de arquivo, que ele inicia com a letra “b”, indicando que é um dispositivo de
bloco
2. Liste detalhadamente o o arquivo do dispositivo serial /dev/tty
# ls -l /dev/tty
Note no tipo de arquivo que ele inicia com a letra “c”, indicando que é um dispositivo de
caractere.
3. Liste detalhadamente o arquivo /dev/xconsole
# ls -l /dev/xconsole
Note no tipo de arquivo que ele inicia com a letra “p”, indicando que é um dispositivo de
pipe.
4. Liste detalhadamente o arquivo /dev/log
# ls -l /dev/log
Note no tipo de arquivo que ele inicia com a letra “s”, indicando que é um dispositivo de
Socket

B. Montando dispositivos
1. Insira o CD do Debian na unidade
2. Liste o conteúdo da pasta /media/cdrom
# ls /media/cdrom
3. mounte a unidade de CD na pasta /media/cdrom
# mount /dev/cdrom /media/cdrom
4. Liste novamente o conteúdo da pasta /media/cdrom
# ls /media/cdrom
5. Desmonte a unidade de CD
# umount /media/cdrom
6. Mais uma vez liste o conteúdo da pasta /media/cdrom
# ls /media/cdrom

C. Analisando o FSTAB
1. Leia o arquivo FSTAB
# cat /etc/fstab
2. Anote aqui na Apostila:
a) Quantas unidades inciam pelo fstab?
_______________________________________________
b) Qual unidade corresponde seu ponto de montagem / ?
_______________________________________________
c) Qual o sistema de arquivos da sua partição / ?
_______________________________________________
d) Quantas partições SWAP você possui?
_______________________________________________
e) Qual o caminho da sua unidade de SWAP (Referência ao dispositivo dentro de /dev)?
______________________________________________

Laboratório 2
A. Verificando a estrutura do disco
1. Verifique as tabelas de partições formadas no se disco
# fdisk -l
Note que você tem uma partição bootável (Na coluna boot tem um *)
2. Veja as informações detalhadas da sua partição bootável
# dumpe2fs -h /dev/sda1
3. Defina sua partição para a cada 5 montagens (5 vezes que a máquina for reiniciada) ele
executr automaticamente o fsck
# tune2fs -c 5 /dev/sda1
4. Desative a contagem e manutenção automática
# tune2fs -c -1 /dev/sda1
5. Defina para o sistema fazer a manutenção automática para daqui 3 dias
# tune2fs -i3d /dev/sda1
6. Mude a definição para acontecer daqui a 3 meses
# tune2fs -i3m /dev/sda1
7. Agora desative novamente
# tune2fs -id /dev/sda1

Exercícios de Fixação
1. O que representa o dispositivo hdb5?
a) A sexta partição em um disco SCSI
b) A quinta partição no segundo disco SCSI
c) A sexta partição no segndo disco IDE
d) A quinta partição no segundo disco IDE
e) A segunda partição no quinto disco IDE
Alternativa Correta: D

2. Qual comando exibe a ultima vez que o fsck foi executado?


a) fsck
b) debug2fs
c) fdisk
d) dumpe2fs
e) tune2fs
Alternativa Correta: D

3. Ao digitar o comando “ls -l /dev/sda1”, obtemos o serguinte resultado:


brw-rw---- root disk 8, 1 nov 2 18:33 /dev/sda1
Com esta informação, sabemos que:
a) É um dispositivo de comunicação, provavelmente um modem
b) É um dispositivo de comunicação, provavelmente uma partição
c) É um dispositivo de pipe, provavelmente um pendrive
d) É um dispositivo de bloco serial, provavelmente uma partição
e) É um dispositivo de bloco, provavelmente uma partição.
Alternativa Correta: E

4. Qual ferramenta é usada para verificar um sistema de arquivos ext3?


a) fsck
b) e2fsck
c) e3fsck
d. check
e) debug2fs
Alternativa Correta: B

5. Qual dispositivo se refere a 3 partição do disco configurado como master, instalado na


unidade IDE secundária?
a) sdc3
b) hdc3
c) hda3
d) hda2
e) hdc2
Alternativa Correta: B
Capítulo 8 – Introdução à rede de computadores

 Componentes básicos de uma rede;


Introdução  Integrantes de uma rede;
 Protocolos de rede;
Uma rede é constituída de dois ou mais
 Endereçamento IP;
computadores e/ou dispositivos conectados  Configurando redes Linux;
por um meio específico, estabelecendo
assim uma comunicação e troca de  Monitorando e reparando problemas de rede.
informações, ou também disponibilizando
serviços.

A conexão entre os computadores de uma


rede pode ser unificada, por meio de
conectores, cabos, ondas de rádio e centralizadores. Uma comunicação poderá ser estabelecida
permitindo que todos os computadores participantes dessa rede compartilhem informações ou
acessem serviços disponibilizados para uso distribuído.

Sendo assim, o uso de tais serviços e o acesso a informações compartilhadas podem ser
administrados de maneira centralizada, economizando gastos e melhor gerenciando os
computadores presentes na rede.

Para que essa conexão e as vantagens que ela traz sejam possíveis, deve haver um bom
funcionamento tanto dos componentes de uma rede (cabeamento, adaptadores de rede e protocolos)
como de seus integrantes (servidor, estações ou clientes, host, local host, remote host e gateway).
Neste capítulo, aprenderemos mais sobre esses e outros aspectos da rede, como configuração e
problemas de rede.

Componentes básicos de uma rede

Para que uma rede de computadores possa estar acessível, necessitamos de um bom funcionamento
de seus respectivos componentes, que irão variar conforme o tipo de tecnologia adotada. Os
componentes básicos para o bom funcionamento de uma rede são: cabeamento, adaptadores de rede
e protocolos. A seguir, aprenderemos mais sobre eles.

Cabeamento

Atualmente, o componente cabeamento é utilizado apenas para referenciar o tipo de conexão física
entre computadores em uma rede. No início, tínhamos apenas cabos fazendo a interconexão entre
esses computadores; agora, contamos também com a tecnologia Wi-Fi de transmissão de dados via
ondas de rádio ou outros meios de comunicação sem fio como o Bluetooth.
Com a evolução da tecnologia, os tipos de cabos passaram por melhoras que aumentaram o
desempenho e flexibilidade de uma rede. Entre os tipos de cabeamento mais comuns, temos o
antigo cabo coaxial, ainda muito utilizado nas conexões de antenas wireless, o cabo do tipo par
trançado, que é o padrão utilizado atualmente, e cabos de fibra óptica, que fornecem uma alta taxa
de transferência de dados e possuem um custo mais elevado. Existem, ainda, as tecnologias sem fio,
disponibilizadas pelo padrão Wi-Fi e seus derivados.

Adaptadores de redes

A conexão estabelecida entre computadores em uma rede por seu meio físico de interconexão se
dará pelo componente básico, que é o adaptador de rede. Sobre os adaptadores de rede e suas
respectivas tecnologias, temos:

 Ethernet: Além de ser um padrão criado e homologado pela IANA (Internet


Assigned Numbers Authority) para conexão de dispositivos, também é utilizado para referenciar o meio de
tecnologia de interconexão. É atualmente a tecnologia padrão para conexões de computadores em uma rede,
amplamente utilizada para conexões físicas de cabeamentos do tipo par trançado e wireless;

 FDDI (Fiber Distributed Data Interfaces): Utilizado para conexões de alto desempenho, como o cabeamento
de fibra óptica;

 Token Ring: Originalmente criado pela IBM em meados de 1980 para conexões com topologia em anel;

 CciTT X.25: Utilizado em conexão via RENPAC (disponibilizado no Brasil).

Protocolos

Para que os computadores de uma rede possam se comunicar, além da estrutura física mencionada,
também será necessário um protocolo de comunicação, o qual é a base para que um computador
possa estar ativo na rede e disponível para conexões. Ou seja, o protocolo é o componente essencial
para disponibilizar acessos e trocas de informações pelos computadores em uma rede.

Integrantes de uma rede

Assim que uma rede é composta por seus componentes básicos e essenciais, é possível definir seus
integrantes e participantes com alguns conceitos referenciais.

Os integrantes a seguir compõem uma rede; por meio dos termos citados, é possível referenciá-los
melhor.
Servidor

O conceito e a função básica de um servidor é disponibilizar serviços. Ele não é necessariamente


um computador ou um mainframe (computador de grande porte), mas sim qualquer tipo de
equipamento que disponibiliza de alguma forma recursos e serviços em uma rede.

A seguir, alguns exemplos de tipos de servidores:

 Servidor de impressão;

 Servidor de Internet (Proxy);

 Servidor de arquivos.

Estações ou clientes

Estações ou clientes também são integrantes de uma rede que utiliza algum tipo de serviço ou
recurso disponível por algum servidor. Não é necessariamente um computador, mas sim qualquer
tipo de equipamento conectado à rede, como um celular.

Host

O host, ou máquina, é um integrante e participante de uma rede, podendo ser um computador


simples ou de grande porte e até mesmo uma impressora de rede.

Local host

O local host, ou máquina local, refere-se ao equipamento em que o usuário está trabalhando e
acessando de forma direta em um determinado momento.

Remote host

O remote host, ou máquina remota, é também um integrante de uma rede, porém de uma rede que
está sendo acessada e controlada por meio de recursos remotos – a partir de um local host, por
exemplo.
Gateway

O gateway realiza o transporte de pacotes TCP/IP para redes não identificadas pelos próprios hosts
que originaram o pacote. Isso permite que esses pacotes cheguem a uma rede WAN partindo de uma
rede privada. Com o gateway, os pacotes podem transitar por uma rede fechada ou pela Internet.
Geralmente, os hosts possuem configurações como máscara e classe de IP iguais em uma rede local.
Neste caso, o gateway é o próprio computador nesse tipo de rede.

3.7. Identificando os integrantes de uma rede

Independentemente do tipo de integrante de uma rede e de seu respectivo adaptador de conexão, é


preciso identificá-los de forma única, permitindo seu acesso ou reconhecimento dentro da rede.
Assim, cada integrante de uma rede terá seu respectivo endereço de identificação, sobre o qual
temos:

 Endereço físico

O endereço físico de um adaptador de rede é montado de acordo com a notação binária e hexadecimal. Ele é
único, e as faixas de endereços são distribuídas para os fabricantes de hardware. Sua identificaç ão é feita com
seu endereço físico ou endereço MAC (Media Access Control ).

 Endereçamento por protocolo

Por meio do protocolo de rede utilizado, é possível definir um endereçamento lógico para cada integrante da
rede a fim de identificá-lo, assim também como a própria rede.

4. Protocolos de rede

Em uma rede, para que um computador estabeleça uma comunicação com outro computador, é
necessário que haja um protocolo de rede. Alguns desses protocolos são projetados especificamente
para determinados tipos de rede: em redes de pequeno porte, utilizamos protocolos como NetBios;
em redes mundiais, utilizamos protocolos de roteamento, como o TCP/IP.

Apesar de haver muitos outros protocolos, o mais utilizado atualmente é o TCP/IP, fato que se deve,
além da capacidade de roteamento, à sua velocidade e também ao projeto em si. Nos próximos
subtópicos, conheceremos mais a respeito desse e de outros protocolos utilizados no Linux.

Os protocolos de rede estão catalogados tecnicamente em documentos chamados de RFC (Request


for Comments). Um RFC é um documento técnico contendo toda a documentação e especificações
sobre o funcionamento do protocolo desejado. O documento RFC dos protocolos pode ser
consultado no seguinte site: www.rfc-editor.org.
4.1. TCP

O TCP (Transmission Control Protocol) é um protocolo da camada 4 (camada de transporte) do


modelo OSI. A principal característica desse protocolo é verificar e controlar erros dos pacotes que
serão entregues pela rede. As aplicações que necessitam de confiabilidade na entrega dos dados pela
rede utilizarão esse protocolo como base no seu transporte.

Os dados transmitidos são divididos em pacotes. Cada pacote conterá um cabeçalho com um
conjunto de informações que serão transmitidas com o pacote, garantindo, assim, a confiabilidade
dos dados entregues. A seguir, temos um breve resumo do cabeçalho TCP:

O TCP tem características e funcionalidades especiais, conforme destacado adiante:

 Handshake: Para que uma conexão seja estabelecida entre dois pontos, é preciso que haja um controle do
estabelecimento até a finalização da conexão. Assim, tal conexão poderá ter uma autenticação e um processo
de verificação dos dados transmitidos. Tal mecanismo é possível devido ao Handshake, o qual, por meio do
processo de três a quatro tempos, poderá iniciar, manter e finalizar uma conexão TCP;

 Portas TCP: As portas do protocolo TCP são utilizadas para permitir que múltiplos serviços sejam executados
simultaneamente. Elas compõem um número de 16 bits, totalizando 65.536 portas. Tais portas possuem uma
padronização que é determinada pelo órgão IANA. Algumas regras sobre as portas foram definidas por este
órgão; são elas:

 Porta 0: Não utilizada para interconexão de computadores. Esta porta é utilizada pelos sistemas operacionais Unix
para comunicação local (PF_LOCAL);

 Portas bem conhecidas: Portas que abrangem o intervalo 1 até 1023 e que
foram determinadas para serviços bem conhecidos, como SSH(22), WWW(80),
FTP(21), etc.;
 Portas Livres: Estas portas são utilizadas livremente pelos programadores para qualquer propósito de aplicação. As
portas livres estão no intervalo de 1024 até 65.535.

Nota: No Linux, as portas de saída estão em uma faixa atribuída dinamicamente a partir da porta
32.000.

 Controle de flags: O processo de Handshake acontece devido a uma seqüência de flags específicas que são
enviadas desde o início até o fim da conexão. Na tabela a seguir, são apresentados os tipos de flags:

Código Flag
10 User Point
11 Acknowledgement
12 Push
13 Reset
14 Syncronize
15 Finalize

A imagem adiante ilustra a comunicação entre dois hosts:

Exemplo de uma comunicação entre dois hosts (Three Way handshake)

Vejamos como os elementos apresentados na imagem anterior são descritos:

 SYN: Flag responsável pelo início da conexão, para a qual o cliente envia
um SYN ativo e aguarda pela confirmação de recebimento do servidor.
Caso a porta, na qual há uma tentativa de conexão, esteja fechada, uma
flag RST é enviada como resposta, e o processo de tentativa de conexão
será finalizado imediatamente. Há, também, um tempo limite de espera
na confirmação de recebimento da flag SYN. Caso a porta esteja disponível,
se o tempo limite for ultrapassado, um timeout é gerado, e a flag SYN é
enviada novamente;
 SYN+ACK: Seguindo a ilustração anterior, SYN+ACK é a resposta enviada
pelo servidor sobre o recebimento da flag SYN. Assim que a flag SYN+ACK
é enviada, uma confirmação sobre seu recebimento também deverá ser
aguardada, para que a transferência de dados possa ser iniciada;

ACK: A flag ACK poderá ser utilizada para situações distintas: como uma confirmação de que a
flag SYN+ACK foi recebida com sucesso, e como auxílio na entrega dos dados após a conexão
estabelecida, confirmando cada pacote recebido com sucesso;

 FIN: Flag responsável pela finalização da conexão por ambas as partes.


Assim que os dados são devidamente entregues pela sessão TCP, a conexão
é terminada. A flag FIN é enviada por ambas as partes e seu recebimento
deverá ser confirmado.

 Segurança: O método de confirmação e recebimento de cada pacote enviado em uma sessão TCP
proporcionará um alto nível de confiabilidade sobre os dados transmitidos. Essa é uma de suas grandes
vantagens em relação ao protocolo UDP, além de ser um dos motivos de seu uso abrangente em redes de
grande porte, como a Internet. O TCP, com seu sistema de tratamento na transmissão dos pacotes, poderá
verificar e recuperar dados corrompidos, restaurar conexões, caso algum problema na rede tenha interferido no
processo de comunicação, recuperar pacotes perdidos e, até mesmo, descartar pacotes duplicados;

 Full-duplex: Em uma conexão TCP, é possível transferir dados simultaneamente


em ambas as direções (servidor-cliente e cliente-servidor), em todo o processo de conexão;

 Seqüência de entrega de pacotes: Os dados que serão transmitidos a partir


de uma conexão TCP chegam em um formato de bloco de dados, geralmente com tamanhos desordenados. O
TCP redefine o tamanho dos dados em seu formato específico de pacote, conforme o valor especificado pela
MTU (Maximum Transmit Unit) e envia os pacotes em uma seqüência ordenada. Porém, o endereçador de
pacotes (IP) poderá alterar a ordem de entrega de tais pacotes. O TCP terá a função de restaurar os pacotes na
sua respectiva ordem, baseando-se no campo número de seqüência, anexado a cada pacote em seu cabeçalho.

Como exemplo de serviços que utilizam o protocolo TCP, temos o SMTP, o Telnet, o pop3, etc.

Nota: A RFC do protocolo TCP é 793.

4.2. UDP

Assim como o TCP, o UDP (User Datagram Protocol) também é um protocolo de transporte. Suas
funções são similares, porém, o UDP não controla o fluxo e não detecta erros durante a
comunicação. Dessa forma, não temos a garantia de que o pacote enviado será entregue intacto.
Isso nos faz atentar para o fato de que o protocolo UDP não tem um bom desempenho em redes de
longa distância, em que o tratamento de erro, bem como a sua correção, precisa ser realizada pelo
aplicativo. Assim, o UDP é mais bem aproveitado para redes locais.

No entanto, o UDP tem muitos pontos positivos, tornando-o um protocolo muito útil em
determinadas situações. Sobre algumas das características do UDP, temos:

 Portas: Assim como no TCP, o protocolo UDP também utiliza as definições de portas para determinar um
ponto de acesso ao serviço que utilizará os recursos do protocolo. A porta de destino e a porta de origem são
campos do simples cabeçalho UDP, como exibido na ilustração anterior, e têm 16 bits de tamanho. Logo,
temos 65.536 (2^16) portas UDP que poderão ser utilizadas como ponto de acesso aos serviços;

 Não orientado à conexão: O protocolo UDP não controla o fluxo de uma conexão. Portanto, é conhecido por
não manter uma conexão no envio dos dados, descartando o uso de mecanismos que gerenciam uma conexão,
bem como vários outros tipos de controles apresentados pelo protocolo TCP. Trata-se de uma ótima escolha
para fluxos de dados em tempo real, principalmente para aplicações que suportam a perda de parte dos dados
enviados em uma comunicação. Aplicações de vídeo e voz são grandes exemplos de utilização do protocolo
UDP;

 Broadcast e Multicast: O UDP é necessariamente utilizado caso os recursos de broadcast e multicast sejam
requeridos. Algumas aplicações multicast admitem perda de parte dos dados enviados ou fazem retransmissões
automáticas, como no exemplo do DHCP.

Outros exemplos de serviços que utilizam o protocolo UDP são: NCS, DNS, SNMP e TFTP.

Nota: A RFC do protocolo UDP é 768.

4.3. ICMP

O ICMP (Internet Control Message Protocol) é um protocolo cuja implementação ocorre


juntamente ao IP, mesmo que eles não possuam as mesmas funções.

A função do ICMP é informar os erros que ocorreram durante o processamento de um pacote IP,
porém, ele apenas registra e exibe esses erros; cabe ao administrador optar por corrigi-los ou não. A
tabela a seguir mostra quais são os principais erros informados pelo ICMP:
Tipo de erro Mensagem apresentada
0 Echoreply
3 Destination Unreachable
5 RedirectMessage
8 Echo Request

Nota: A RFC do protocolo ICMP é a 792.

4.4. O protocolo TCP/IP

O TCP/IP é, na verdade, um conjunto de protocolos. Essa sigla corresponde a


Transmission Control Protocol / Internet Protocol, isto é, Protocolo de Controle de Transmissão /
Protocolo de Internet. Os principais protocolos que compõem o TCP/IP são justamente o TCP e o
IP. Cada um deles possui um nível, a saber:

 TCP: Nível de transporte;

 IP: Nível de rede.

Os dados que trafegam em uma rede TCP/IP são divididos em pacotes. Isso é importante porque
possibilita que tanto os recursos de rede sejam compartilhados como os erros sejam detectados e,
consequentemente, corrigidos.

Suponhamos que os dados não sejam divididos em pacotes, e que o recurso utilizado para enviar
esses dados seja um servidor de arquivos. Quando um usuário realizar o envio de suas informações
como sendo apenas um pacote, o servidor não poderá ser utilizado pelos demais usuários até que
esse pacote que está trafegando seja entregue ao seu destino.

Se esse único pacote for dividido em vários, os usuários poderão enviar todos os seus pacotes, que
serão recebidos pelo servidor de forma alternada. Desse modo, a rede é compartilhada por todos os
usuários ao mesmo tempo.

Quando uma informação é dividida em pacotes, ela passa a ser constituída pelo cabeçalho e pela
parte de dados; dentre outras, esta parte contém as informações a respeito do pacote que está
trafegando na rede.

O transporte de um pacote ocorre da seguinte maneira: quando a mensagem chega ao seu destino, as
informações do cabeçalho são comparadas aos dados que já estão no destino. Será enviada, em
retorno à máquina de origem, uma mensagem de confirmação. Caso essa mensagem não seja
recebida pela origem, o pacote é reenviado após um determinado tempo.

Nota: A RFC do protocolo IP é a 791.


5. Endereçamento IP

O IP (Internet Protocol) é um protocolo de endereçamento que possibilita a criação de redes, dando


endereços a cada estação participante, de modo que o tráfego de dados seja direcionado para um ou
outro participante, de acordo com seu endereço. No modelo OSI, o protocolo IP se enquadra na
camada 3 (camada de rede).

Em suma, as funções principais do IP são endereçar cada computador participante de uma rede e
endereçar redes por meio de um sistema de roteamento.

O endereçamento da Internet dispensa o servidor DNS, servidor este que possibilita a utilização de
nomes, e não de números, para navegar na Internet. Existem dois tipos de endereços IP: privados e
públicos. Enquanto usamos os endereços privados em redes privadas (LANs e WLANs, por
exemplo), os endereços públicos são utilizados para a Internet.

Com os recursos do IP, podemos criar dois tipos de rede:

 LAN (Local Area Network): Uma rede local, caseira ou em um escritório;

 WAN (Wide Area Network): Uma rede expandida, normalmente formada por
várias LANs.

Atualmente, utilizamos o IPv4, cujo nome deve-se ao formato de seu endereço: quatro octetos com
valores decimais. Um octeto é um número composto por 8 bits. Podemos encontrar alguns
exemplos na tabela a seguir:

Decimal Binário
192 11000000
168 10101000
19 00010011
5 00000101

No dia a dia, utilizamos apenas o formato decimal, mas para entender esse
protocolo, é extremamente necessário compreender a forma binária. Sendo assim, o maior número
decimal que podemos ter em um octeto é 255 que, em formato binário, é 11111111.

Nota: A RFC do protocolo IP é a 791.

5.1. Classes IP

Os endereços IP são divididos em cinco classes: A, B, C, D e E. Essa divisão se dá, entre outros
motivos, pela própria notação binária, que é modificada conforme os números aumentam. Na classe
A, todos os endereços entre 1 e 127, quando binários, iniciam em 0; na classe B, todos os endereços
entre 128 e 129, quando binários, são números iniciados em 10; na classe C são 110, na classe D
são 1110 e na classe E são 11110.

5.2. Endereços especiais

O primeiro e mais comum endereço especial é o 127.0.0.1, chamado de loopback. Qualquer sistema
que suporte o protocolo IP possui esse endereço, que é utilizado para acessar serviços de rede no
próprio computador. Ele é atribuído a uma interface virtual de rede, como se fosse uma placa de
rede.

Além disso, toda rede tem três informações básicas: o endereço da rede, o endereço de broadcast
(fim da rede) e as estações. Essa informação será esclarecida a seguir, com as máscaras de rede.

Nem todos os endereços das classes são utilizados na Internet. Alguns, em cada classe, foram
separados para a criação de redes locais e nunca existirão na Internet.

Na tabela a seguir, são indicados os endereços de início e de fim das classes A, B e C:

Classe Início Fim


A 10.0.0.0 10.255.255.255
B 172.0.0.0 172.255.255.255
C 192.168.0.0 192.168.255.255

Sendo assim, são os fornecedores de link que fornecem os IPs ou até as classes de um link de acesso
à Internet. Já na rede local, devemos utilizar os endereços da tabela anterior, que não são válidos na
internet.

Para mais informações sobre classes de IP válidos ou domínios, basta consultar o site
www.registro.br.

5.3. Máscaras de rede

Na configuração de uma rede, cada comutador deve possuir um endereço IP e uma máscara de rede.
Apesar da divisão das classes mencionadas anteriormente, é a máscara de rede que define qual é a
rede e o broadcast de um host, a partir do endereço IP.

As classes A, B e C possuem máscaras de rede padronizadas:

Classe Máscara
A 255.0.0.0
B 255.255.0.0
C 255.255.255.0

Podemos imaginar a configuração de uma rede de apenas dois computadores,


utilizando endereços da classe C, da seguinte maneira:
 Computador A: IP 192.168.0.1 e máscara 255.255.255.0;

 Computador B: 192.168.1.2 e máscara 255.255.255.0.

Ao atribuir essas informações à placa de rede, o sistema operacional determinará qual é a rede e
qual é o broadcast, por meio de uma operação matemática binária chamada E (ou AND).

Em uma operação E, é executado o cálculo por meio de valores binários para determinar se hosts
com suas respectivas máscaras estão na mesma rede. O cálculo E por meio de valores binários se dá
pela seguinte regra:

1010
1100
------
1000

Logo, podemos concluir que o resultado só poderá ser 1 quando os valores de


comparação forem iguais a 1, conforme mostra a tabela a seguir:

IP 192 168 0 1
Máscara 255 255 255 0
Rede 192 168 0 0
Broadcast 192 168 0 255

Sendo assim, o endereço IP 192.168.0.1, com a máscara 255.255.255.0, pertence à rede


192.168.0.0, com broadcast 192.168.0.255. Se o mesmo cálculo for aplicado ao computador B, este
irá pertencer agora à rede 192.168.1.0, com broadcast 192.168.1.255.

Não há restrições na utilização de uma máscara de rede em relação a um endereço IP; um endereço
de rede classe B pode ser utilizado com máscara de classe C e vice-versa.

5.4. Broadcast

O termo broadcast (transmitir) é utilizado para o envio ou difusão de uma determinada informação
em grande escala. Sua base e principal característica é o envio das informações para vários
receptores ao mesmo tempo.

Por meio do endereçamento IP e da utilização de máscaras, é possível definir o escopo da rede


(início e fim). Temos o broadcast, utilizado para indicar o último endereço IP de determinada rede,
o qual será utilizado para se comunicar de forma direta com todos os hosts pertencentes à mesma
rede.
5.5. Multicast

O multicast também é conhecido como multicast IP. Trata-se de uma forma de


comunicação e difusão da informação, porém, o multicast é conhecido como um broadcast
controlado, o qual propagará determinada informação aos hosts de interesse.

5.6. ARP

As interfaces de uma rede são identificadas pela camada de comunicação ARP (Address Resolution
Protocol), sobre a qual os dados trafegam na camada IP. A conexão é promovida pelo ARP, uma vez
que o mapeamento de endereços IP para endereços MAC do dispositivo de comunicação é feita
nele.

Um pedido ARP é enviado, pelo kernel, para a interface de rede após a conexão ser solicitada. Isto
é, temos a solicitação do endereço MAC do endereço IP da conexão a ser realizada. A resolução
MAC – IP, por sua vez, depende do protocolo RARP (Reverse Address Resolution Protocol) para
ser realizada.

Após um período pré-determinado em segundos, o cache de correspondência entre os endereços IP


e MAC, criado pelo kernel, é renovado. Podemos ver o valor desse período com o comando sysctl
no arquivo /proc/sys/net/ipv4/neigh/eth0/gc_stale_time.

Instrutor: Substituir os exemplos a seguir:

Temos valores distintos para cada interface. A interface eth0, por exemplo, tem seu período
especificado a seguir:

# sysctl net.ipv4.neigh.eth0.gc_stale_time
net.ipv4.neigh.eth0.gc_stale_time =60

É também usando o sysctl que alteramos o valor do período, conforme podemos ver adiante:

# sysctl –w net.ipv4.neigh.eth0.gc_stale_time =120


net.ipv4.neigh.eth0.gc_stale_time =120

No cache ARP do kernel, o comando arp pode, entre outras atividades:

 Excluir a entrada de mapeamento de endereço;

 Configurar um endereço manualmente;

 Verificar o cachê ARP integralmente, investigando erros.

A tabela de relacionamentos ARP que o kernel usa é exibida por esse comando, que não utiliza
argumentos. O comando arp engloba as opções -d hostname, -f arquivo, -s hostname mac e -n.

Com a opção -d hostname, o endereço que equivale ao hostname do cache ARP é excluído. Já o -f
arquivo parte do arquivo indicado para fazer o mapeamento estático, para endereços MAC, dos
hostnames presentes.
A correspondência estática entre hostname e endereço MAC, por sua vez, é realizada pelo -s
hostname mac. O mapeamento será permanente desde que o final do comando não contenha temp.

Nota: A sintaxe da opção -s encontra um equivalente nas entradas do arquivo indicado da opção -f
arquivo.

Com a opção -n, os endereços IP não são traduzidos para nomes.

# arp –n
Address HWtype Flags Mask Iface
192.168.1.254 ether 02:A5:E6:44:77:79 C eth0
192.168.1.11 ether 00:0E:A6:A8:0A:E7 C eth0

Com o utilitário arpwatch, podemos obter informações como a ocorrência de mudanças do


endereço MAC de uma interface, e o acesso de uma máquina à rede. Isso é possível graças ao
gerenciamento das alterações na conexão entre o IP e o MAC, alterações estas que são registradas
em logs ou enviadas por e-mail. O envio por e-mail não ocorre se executarmos o arpwatch -d; em
vez disso, elas são exibidas na tela do computador.

Nota: Para determinar outra interface que não a eth0, temos a opção -i.

5.7. Network Address Translation (NAT)

Temos, na implementação do NAT (Network Address Translation), uma solução temporária com a
qual um endereço IPv4 único e roteável em qualquer lugar é compartilhado por vários
computadores de uma rede privada. Ele remedia, de certa forma, o esgotamento de endereços IPv4
enquanto o IPv6 não é implementado.

Padrão da IETF (Internet Engineering Task Force), o NAT permite que um número menor de
endereços IPv4 públicos sejam necessários para o estabelecimento de conexão com a Internet.

Para entender a outra implicação do NAT, devemos antes compreender o que é um tráfego
solicitado. Imaginemos a seguinte situação: uma página da Internet é acessada por um computador
de host privado. Os conteúdos dessa página são, então, solicitados a partir de um servidor da
Internet – a esse tráfego damos o nome de tráfego solicitado.

Com o NAT, os hosts de redes privadas recebem apenas o tráfego solicitado, encaminhado por ele,
que oferece, dessa forma, uma função de filtragem de pacote simples.
5.8. IPv6

O endereçamento IPv6, substituto do IPv4, é uma evolução em que são utilizados endereços de 128
bits, em vez de 32 bits.

O número de um endereço IPv6 é significativamente maior, com muito mais casas decimais do que
o modelo anterior (IPv4), visando justamente evitar que uma nova substituição seja necessária no
futuro.

Como podemos perceber, o IPv6 é bem diferente do IPv4 em vários aspectos. Vejamos, a seguir,
alguns deles:

 Enquanto a quantidade de bits no IPv4 é 32, no IPv6 é 128, o que dá


340.282.366.920.938.463.374.607.431.768.211.456 endereços válidos para utilização, aproximadamente;

 A estrutura do endereçamento é diferente. O endereço IPv6 é formado por 8 conjuntos de 4 dígitos


hexadecimais, e possui duas partes lógicas: uma de 64 bits, para a rede, e outra de 64 bits para o host (um
exemplo é 2394:3756:A34C:FAC9:9021:0000:FF3A:9671);

 Apesar de não ser uma prática obrigatória, a parte do endereçamento do host pode ser gerada a partir da
inserção do endereço MAC da interface de rede;

 Não existem classes de endereços no IPv6, como A, B, C, D ou E.

Há compatibilidade entre o IPv4 e o IPv6, já que o IPv6 pode conter o IPv4, como em 192.168.0.1.
Dessa forma, 96 bits são utilizados para o endereço IPv6 e os 32 bits restantes são utilizados para o
IPv4, o que garante interoperabilidade durante a migração das redes.

Vale lembrar, no entanto, que esse meio de identificação de hosts já não é utilizado, e
implementações modernas não têm a obrigação de aceitá-lo. Maiores informações sobre este tipo de
endereçamento podem ser consultadas na RFC 4038.

6. Configurando redes Linux

Todo o processo de configuração da rede Linux pode ser executado de forma


dinâmica, usando comandos específicos, ou de maneira estática, por meio de arquivos de
configuração. A diferença entre as configurações é que, na configuração dinâmica, as definições
poderão se perder após a reinicialização do sistema. Já nas configurações estáticas, é possível
definir uma configuração permanente.

Os dois métodos de configuração serão apresentados a seguir por meio dos comandos e arquivos de
configuração específicos.
6.1. Verificando o status da interface de rede

O comando mii-tool é uma ferramenta utilizada para verificar se as interfaces de rede estão com seu
link devidamente ativo. Ou seja, é possível verificar se o cabo está devidamente conectado na placa
de rede e se o mesmo tem um link ativo e funcional com a outra ponta. Ele é utilizado da seguinte
forma:

# mii-tool

Para que o comando mii-tool funcione adequadamente, é necessário que o módulo mii esteja
devidamente carregado no sistema e que a placa ofereça suporte ao módulo mii.

6.2. Configurando o endereço IP e a máscara de


rede

O comando ifconfig é utilizado para configurar a interface de uma rede, ou para visualizar as
configurações das interfaces de rede já definidas na máquina.

O comando ifconfig deve ser utilizado da seguinte maneira:

Ifconfi g [opções] [interface] [parâmetros]

Ele possui as seguintes opções:

Opção Descrição
Exibe informações sobre todas as interfaces
-a
disponíveis, até mesmo de interfaces desabilitadas.
Exibe uma lista simples das interfaces e suas
-s
informações estatísticas de uso.

O comando ifconfig também aceita alguns parâmetros para tarefas específicas, como:

Parâmetro Descrição
up Habilita uma determinada interface de rede.
down Desabilita uma determinada interface de rede.
hw ether Parâmetro utilizado para alterar o endereço de
MAC de um determinado dispositivo.

Podemos utilizar o comando ifconfig sem a inserção de um parâmetro.


Deste modo, serão exibidas as informações referentes a todas as interfaces de rede configuradas. No
exemplo anterior, temos a visualização das informações sobre as interfaces eth0 e lo.
As principais informações que poderão visualizadas com o comando ifconfig são:
Informação Descrição
Endereço de HW Endereço físico da interface (MAC).
Inet end Endereço IPv4 atribuído à interface.
Endereço Inet6 Endereço IPv6 atribuído à interface.
Bcast Endereço de broadcast da rede da qual o host
faz parte.
Masc Máscara de rede utilizada para definir a rede
do host.

O endereço de loopback é utilizado para realizar uma conexão local com a própria máquina,
possibilitando, assim, testar nosso dispositivo de rede sem interferir na rede local. Por padrão, o
endereço de loopback é 127.0.0.1. A loopback é geralmente inicializada automaticamente na
inicialização do sistema por determinados scripts.

É saudável para o sistema manter sempre a loopback ativa. Muitos aplicativos utilizam referência a
loopback para executar suas funcionalidades; o gerenciador de janelas KDE é um exemplo.

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos

Com o comando ifconfig, também é possível habilitar e desabilitar uma determinada interface de
rede. Nos próximos exemplos, a interface eth0 é inicialmente desabilitada pela utilização do
parâmetro down e logo em seguida habilitada com o parâmetro up.
Nota: Alternativamente, podemos utilizar os comandos ifup e ifdown para, respectivamente,
habilitar e desabilitar uma determinada interface de rede.

Com o comando ifconfig, também é possível alterar as configurações atuais de uma interface,
definindo um novo endereço de rede e uma respectiva máscara. Para isso, utilizamos o parâmetro
netmask, como no exemplo a seguir:

É possível habilitar uma interface de rede que já está devidamente desabilitada, atribuindo a ela seus
parâmetros de funcionamento. Por exemplo:

# ifconfig eth0 172.16.26.78 netmask 255.255.255.0 up

No exemplo adiante, o endereço físico da interface eth0 foi alterado. Para se alterar o endereço
físico de um dispositivo, o mesmo deve ser desabilitado antes da execução do processo.

É importante atentar para o fato de que todas as alterações feitas com o comando ifconfig são
meramente dinâmicas, ou seja, são perdidas após a reinicialização do sistema.

6.3. Definindo um gateway padrão

O conceito de gateway pode ser facilmente implementado quando há a


necessidade de se navegar em redes distintas. O papel do gateway é encaminhar requisições de
conexão para redes diferentes da rede local, com uma rota de seu conhecimento.

Para definir o gateway da rede, utiliza-se o comando route, cuja sintaxe é a seguinte:

route <acao> default gw <endereco_ip> [interface]

A tabela a seguir descreve duas opções que podemos utilizar com route:

Ação Descrição
add Adiciona um gateway na tabela de rotas.
Remove um gateway na tabela de
del
rotas.

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos

Para definirmos um gateway padrão, podemos utilizar o comando route com o parâmetro –n.
Vejamos o seguinte exemplo:
No exemplo anterior, o comando route foi utilizado inicialmente apenas para exibir a tabela de
rotas. Logo em seguida, foi adicionada uma rota para o gateway 172.16.126.2 e foi exibida a nova
tabela de rotas.

Para que um gateway possa ser removido, basta seguir o exemplo adiante. Nele, o gateway padrão
foi removido da tabela de rotas e a nova visualização da tabela de rotas pôde ser visualizada com o
comando route –n.

6.4. Configurando o servidor DNS

Para que a configuração básica da rede seja finalizada, é preciso indicar um


resolvedor de nomes. O primeiro sistema de resolução de nomes implementado desde as primeiras
versões de Unix e utilizado até hoje é o recurso disponível por meio do arquivo /etc/hosts, que tem
a função de converter o nome de um computador em um endereço IP.

A partir daí, fica mais fácil identificar um micro em uma rede local. Não há necessidade de ter
sempre em mente o endereço IP dos hosts da rede – basta saber o nome da máquina. Na prática, é
muito mais simples memorizar nomes do que uma sequência de números representando o endereço
IP.

A configuração do arquivo hosts é bem simples, como demonstra a sintaxe a seguir:

<endereço IP> nome-do-host.nome-do-dominio nome-do-host


Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

Exemplo:

127.0.0.1 localhost
172.16.19.1 P19-01.impacta.com.br P19-01
172.16.19.2 P19-02.impacta.com.br P19-02
172.16.200.202 prodigy.impacta.com.br

Para testar a resolução de nomes, basta utilizar o simples comando ping:

# ping P19-01

Caso o host descrito no arquivo troque de endereço IP, o arquivo /etc/hosts deve ser atualizado
manualmente.

A configuração do arquivo hosts pode, no entanto, se tornar uma tarefa desgastante em uma rede
expandida. No caso de ter um novo computador com seu respectivo nome e endereço IP na rede, é
necessário cadastrar em todos os arquivos hosts de cada máquina na rede essa nova informação.
Assim, todas as máquinas podem se referenciar ao novo host pelo seu respectivo nome, ao invés de
seu endereço de rede.

Tal procedimento, conseqüentemente, não é uma tarefa simples, principalmente se a rede local
atingir um número grande de estações. Para tal problema, existe um sistema de resolução de nomes
mais avançado, chamado DNS (Domain Name Server).

6.4.1. Resolvendo nomes a partir do DNS

Para uma resolução de nomes mais avançada e estruturada, temos o DNS, cuja função é justamente
realizar a conversão dos nomes em endereços IP. Ele é muito utilizado, principalmente por sua
adoção mundial por meio da Internet. Adicionalmente, o serviço de DNS pode realizar a conversão
a partir de um banco de dados localizado na Internet, que mantém uma estrutura hierárquica, no
qual retornará o endereço IP para o nome da máquina especificada.

A base do funcionamento e resolução de nomes na Internet é estruturada a partir da integração de


vários servidores DNS espalhados ao redor do mundo. O recurso de resolução de nomes
disponibilizado pelo DNS é utilizado com muita frequência, quando, por exemplo, um site é
requisitado para exibição por meio do browser.

É importante salientar que o processo de resolução de nomes tem a mesma finalidade do processo
anterior, disponibilizado no arquivo /etc/hosts. A diferença é que os nomes de máquinas utilizados
na Internet terão uma extensão maior com a utilização de domínios e zonas.

Uma das principais facilidades é poder centralizar as requisições de resolução de nomes a um único
servidor, para que ele de alguma forma mapeie um determinado nome para um endereço IP
específico.
No que diz respeito aos nomes de domínio na internet, a estrutura assemelha-se à dos diretórios de
sistemas Unix-Like, ou seja, ela segue uma hierarquia. Dessa forma, é preciso entender como é
formado um nome de domínio da Internet, com seu respectivo nome de host.

6.4.2. Definindo um servidor de DNS

Já que o servidor DNS é também uma alternativa ao mapeamento de nomes em uma rede e
essencial para uso na Internet, é preciso saber defini-lo no sistema, o que é feito por meio de um
simples arquivo de configuração presente no diretório /etc e chamado resolv.conf. Com ele,
podemos especificar um ou vários servidores DNS para resolver requisições de nomes e até mesmo
definir o nome do domínio local ao qual o host atual pertence.

O arquivo pode ser editado utilizando o vi ou qualquer outro editor de texto, visto que este arquivo
é um arquivo de texto normal. O arquivo resolv.conf configura basicamente três opções:

 domain: Determina o nome do domínio local;

 nameserver: Determina o endereço IP do servidor de nomes de domínio para


que seja realizada a resolução de nomes. Esta opção pode ser utilizada várias
vezes no mesmo arquivo;

 search: Determina uma lista de nomes de domínio alternativos ao procurar


por um computador. A linha search pode conter no máximo seis domínios,
ou 256 caracteres.

Acima, com o comando vi, editamos o arquivo /etc/resolv.conf e adicionamos o servidor de


DNS 192.168.0.1 (nameserver 192.168.0.1).
6.5. Outros arquivos de configuração

Neste tópico, abordaremos alguns arquivos de configuração adicionais relacionados com as


possíveis definições de rede.

6.5.1. /etc/host.conf

O arquivo /etc/host.conf poderá definir uma ordem para a resolução de nomes no sistema e estará
ligado diretamente com as definições feitas nos arquivos /etc/hosts e /etc/resolv.conf,
respectivamente. A seguir, podemos visualizar um exemplo do arquivo:

order hosts, bind


multi on

Nesse exemplo, temos:

 order hosts, bind: Define a ordem de resolução de nomes, que, primeiramente, irá consultar o arquivo
/etc/hosts, para depois verificar um servidor de nomes;

 multi on: Determina que serão retornados todos os endereços IP resolvidos que se encontram no arquivo
/etc/hosts.

6.5.2. /etc/networks

O arquivo /etc/network é utilizado para criar um vínculo entre o nome de uma determinada rede e
seu respectivo endereço IP.

Para visualizarmos o resultado propiciado por este arquivo, podemos utilizar o comando route sem
nenhuma opção. Visualizaremos, então, ao invés dos números IP das redes, os seus respectivos
nomes.

6.5.3. /etc/hostname

O arquivo /etc/hostname é responsável por armazenar e definir o nome da estação de trabalho.

Para que as alterações feitas no arquivo hostname tenham efeito, é preciso reiniciar o sistema ou
utilizar o próprio comando hostname, como no exemplo adiante, para redefinir dinamicamente o
nome da máquina. Ou seja, basta reiniciar a sessão atual para que o novo nome seja utilizado.
Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

No exemplo apontado, o nome da máquina foi alterado de debian para novo-nome, com o
comando hostname. Caso o comando hostname seja utilizado sem nenhum parâmetro, ele irá
exibir o nome atual do host. Após a definição, basta reiniciar a sessão para que as alterações tenham
efeito.

Se o nome da máquina for alterado no arquivo, é preciso alterar possíveis definições de


mapeamento no arquivo /etc/hosts.

6.5.4. /etc/nsswitch.conf

Neste arquivo, encontramos a indicação e a forma de acesso às bases de dados do sistema, como:

 Arquivos /etc/passwd e /etc/shadow;

 Resolução de nomes;

 Grupos de usuários.

O arquivo nsswitch.conf é o local onde especificamos a busca de um login em um meio de


autenticação (servidor NIS ou LDAP, por exemplo). A seguir, temos o conteúdo padrão desse
arquivo:

passwd : compat
group : compat
shadow : compat
Apesar de poder ser levemente alterado com a utilização de determinados serviços, como o NIS
(Network Information Service), o arquivo nsswitch.conf é utilizado exclusivamente por
determinadas bibliotecas do sistema.

6.6. Configuração estática da rede

Por meio das ferramentas apresentadas anteriormente, foi possível configurar, de forma dinâmica,
definições de endereçamento IP e rotas. No entanto, tal método apresenta um inconveniente, uma
vez que tais configurações poderão ser perdidas após a reinicialização do sistema. Com o arquivo
interfaces, que fica alocado no diretório /etc/network/, é possível determinar configurações
permanentes para as interfaces de rede.

Para configurar a rede com esse arquivo, devemos possuir as configurações básicas da rede. É
possível definir o endereço IP, rede, broadcast e o gateway default que será utilizado por cada
interface.

A configuração do arquivo interfaces é simples, desde que se respeite sua sintaxe, como no
exemplo adiante:

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo


As configurações das interfaces são definidas por blocos, onde cada interface terá suas respectivas
configurações. Na tabela a seguir, podemos encontrar algumas opções com as descrições para o
arquivo interfaces:

Opção Definição
auto <interface> A interface especificada será carregada
automaticamente na inicialização do sistema, caso a
opção auto seja inserida com a interface desejada.
<interface> É preciso indicar a interface que será configurada
com as referências vistas anteriormente. Por
exemplo: Io, eth0, wlan0, entre outras.
iface Determina o início da configuração de uma interface
de rede.
inet Determina que a família de protocolos a ser utilizada
para a interface de rede é o TCP/IP na versão 4.
Caso seja necessário utilizar a tecnologia de IPv6, é
preciso indicar a opção inet6, ou ipx para usar a
Tecnologia de IPX.
static Determina o método no qual a interface de rede está
sendo configurada (static significa que a interface
de rede está sendo configurada como endereço
estático, fixo). Para tal opção, é possível usar os
seguintes parâmetros:

 address: Especifica um endereço IP;

 netmask: Especifica uma máscara para o endereço


IP;

 network: Especifica o endereço de rede do qual o


host faz parte;

 broadcast: Especifica o endereço de brodcast da rede;

 gateway: Indica um endereço para um gateway


padrão da rede, dispensando, assim, o uso do
comando route;

 hwaddress ether: Utilizado para alterar


permanentemente o MAC de uma interface.
DHCP Determina o método no qual a interface de rede está
sendo configurada. DHCP significa que a interface
de rede será configurada com um endereço
dinâmico, que será atribuído por um servidor DHCP
local.

No exemplo anterior, foi possível configurar automaticamente as interfaces lo, eth0 e eth1, na
inicialização do sistema, sendo que as configurações para a interface eth0 foram baseadas em uma
definição de IP estático, e as configurações para eth1 foram baseadas em uma definição de IP
dinâmico, que é atribuído de um servidor DHCP presente na rede.
A interface de loopback é essencial para a funcionalidade básica de muitos aplicativos, como o
gerenciador de janelas KDE. É interessante manter as definições no arquivo interfaces, para que a
loopback inicie automaticamente durante a inicialização.

6.6.1. Definindo as alterações feitas no


arquivo interfaces

O arquivo interfaces é lido automaticamente na inicialização do sistema graças ao script chamado


networking, localizado em /etc/init.d/. Porém, caso alguma alteração seja feita nesse arquivo, é
possível atribuí-la sem necessidade de reiniciar o sistema.

É possível executar o script manualmente com seus respectivos parâmetros, apresentados na tabela
a seguir:

Parâmetro Descrição
start Relê o arquivo interfaces, habilitando todas as interfaces
com as supostas novas configurações.
stop Desabilita todas as interfaces (exceto a interface loopback)
que estão ativas no sistema.
restart Desabilita todas as interfaces e, logo em seguida, habilita
novamente, reiniciando assim as interfaces e definindo novas
configurações.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

Exemplo:

# /etc/init.d/networking restart

O arquivo /etc/network/options é utilizado para armazenar as opções da(s) interface(s) de rede


aplicada(s) durante a inicialização do sistema, no momento em que ocorre a execução do script
/etc/init.d/networking.

7. Monitorando e reparando problemas de


rede

Para monitorar e reparar problemas de rede, contamos com alguns comandos, os quais serão
descritos neste tópico. São eles: comando ping, dig, host, netstat, traceroute, e tracepath.
ping

O ping é o comando utilizado para verificar se uma determinada máquina encontra-se conectada à
rede. Podemos verificar também o tempo que cada máquina leva para responder aos pacotes
enviados por este comando.

Este comando trabalha enviando pacotes ICMS ECHO_REQUEST para um determinado


endereço. Quando o pacote chega ao seu destino, a máquina que o recebeu envia outro pacote como
resposta. A seguir, encontramos a sintaxe do ping:

ping [opcoes] [IP ou nome_do_host]

Na tabela adiante, temos a descrição das opções:

Opção Descrição
-b Envia pacotes para o endereço broadcast, onde todas as
máquinas ativas na rede receberão o pacote ping. Opção
mais útil para descobrir os IPs ocupados em um endereço
de rede.
-c [num] Especifica a quantidade de pacotes a serem enviados para
um determinado destino. Após o envio do número
determinado de pacotes, o comando é encerrado.
-f Especifica que o sistema não deverá esperar a resposta do
destinatário para enviar outros pacotes. Este comando
exibirá em tela um ponto (.), que é apagado quando
recebido com sucesso na outra ponta.
-i [seq] Especifica, em segundos, o intervalo entre o envio de um
pacote e outro.
-q Oculta a exibição dos pacotes enviados, e só mostra o
resultado do comando quando este for encerrado.
-s [tam] Especifica o tamanho do pacote que será enviado.

No exemplo acima, estamos executando o ping disparando contra o site www.impacta.com.br. O


site retorna a mensagem de resposta com o tempo de execução.
7.2. dig

O comando dig (Domain Information Groper) é um aplicativo muito flexível e nos permite fazer
perguntas a determinados servidores de nomes DNS. É utilizado para exibir informações do
servidor de nomes especificado. A sintaxe do comando é a seguinte:

dig <dominio>

Exemplo:

dig www.impacta.com.br

Indicamos um servidor específico depois do caractere @ se quisermos utilizá-lo. O teste padrão será
feito no(s) servidor(es) do arquivo /etc/resolv.conf na ausência de uso de qualquer argumento.

7.3. host

O comando host é utilizado para fazer pesquisas em DNS. É utilizado, normalmente, para converter
nomes em endereços IPs e vice-versa. Serve para detectar e corrigir problemas de resolução de
nomes.

Sua sintaxe é a seguinte:

host [opcoes]

Quando nenhuma opção é informada, o comando host exibe uma pequena lista de seus argumentos
de linha de comando e opções.

Na tabela a seguir, temos as opções mais utilizadas com o comando host:

Opção Descrição
-a Equivalente ao uso das opções -v, que aciona o modo
verboso, e -t, que especifica um tipo de pergunta.
-C Tenta exibir os registros SOA para o nome da zona de
todos os servidores de nomes autorizados listados para ela.
Essa lista é definida pelos registros NS que são
encontrados para a zona.
-l Seleciona o Listmode.
No exemplo acima, usamos o comando host para identificar o endereço IP do servidor do site da
Impacta, em seguida, usamos o host para verificar a existência do DNS Reverso da Impacta

Como ultimo teste, propositalmente usamos o comando host para identificar um um domínio
inexistene e ele nos retornou o erro de conexão.

7.4. netstat

O comando netstat é o responsável por exibir, entre outras coisas, as interfaces de rede
configuradas, as conexões de rede e as tabelas de roteamento. Sua sintaxe é a seguinte:

netstat [opcoes]

A seguir, são descritas as opções mais utilizadas do comando netstat:

Opção Opção GNU Descrição


-a Lista todas as conexões sockets
--all
(abertas e fechadas).
-c Exibe a listagem de informações
a cada segundo. Esta listagem é
interrompida ao pressionarmos
--continuous as teclas CRTL + C.
-i Exibe a tabela de todas as
--interfaces
interfaces de rede.
-M Exibe uma lista referente às
-- masquerade conexões mascaradas.
-n --numeric Exibe os endereços em formato
numérico, não utilizando nomes
para resolver os endereços.
-r Exibe as tabelasde roteamento
--route
do kernel.
-t --tcp Exibe conexões TCP.
-u --udp Exibe conexões UDP.

Nota: Quando o comando netstat for utilizado sem opção, os sockets ativos das famílias que
possuem os endereços configurados serão apresentados.
No exemplo acima, usamos o comando netstat para verificar a tebela de roteamento e identifica o
gateway padrão (10.0.2.2)

7.5. traceroute

O traceroute é o comando utilizado para exibir o caminho (ou rota) percorrido por um pacote entre
os gateways da rede até chegar ao seu destino, e o tempo gasto na retransmissão.

Uma das utilidades deste comando é encontrar o computador que está provocando a falha na
comunicação entre o emissor dos pacotes e o
destinatário. Necessitamos desse tipo de informação quando ocorrem problemas no envio e
recebimento de pacotes via rede.

A sintaxe do traceroute é a seguinte:

traceroute [opcoes] [host_ou_IP]

Exemplo:

# traceroute -v www.impacta.com.br

A seguir, são descritas as principais opções do comando traceroute:

Opções Descrição
-l Exibe o tempo de vida do pacote.
-m <num> Utilizamos esta opção para especificar a quantidade
máxima de TTL dos pacotes.
-n Exibe os endereços em formato numérico, não
utilizando, assim, o serviço de DNS.
-p <porta> A porta padrão utilizada para teste é 33434. Podemos
utilizar esta opção para determinar que os testes serão
realizados da porta especificada.
-r Utilizamos esta opção quando não desejamos que a
tabela de roteamento seja consultada. Portanto, os
pacotes são enviados diretamente ao computador
conectado à rede.
-v Exibe o resultado do comando em detalhes (modo
verboso).
-w <num> Especifica o tempo máximo que o comando aguardará
por uma resposta. Se não utilizarmos esta opção, será
utilizado o valor padrão de 3 segundos para o tempo
máximo de resposta.
7.6. tracepath

Com o comando tracepath, descobrimos o MTU (Maximum Transmission Unit) durante o caminho
traçado até um host de rede. Mesmo usuários que não sejam administradores do sistema podem
fazer uso desse comando, característica que o diferencia do comando traceroute, apesar das
semelhanças entre eles. O tracepath possui a seguinte sintaxe:

tracepath destino [porta]

No caminho até destino, é utilizada uma porta aleatória ou a porta UDP especificada em porta.

No exemplo acima, usamos o comando netstat para verificar a tebela de roteamento e identifica o
gateway padrão (10.0.2.2)

Tópicos para revisão do capítulo

Atente para os tópicos a seguir. Eles devem ser estudados com muita atenção, pois
representam os pontos mais importantes do capítulo.

 Uma rede é constituída de dois ou mais computadores conectados por um meio específico, estabelecendo
comunicação e troca de informações, ou também disponibilizando serviços. Uma comunicação poderá ser
estabelecida permitindo que todos os computadores participantes da rede compartilhem informações ou
acessem serviços disponibilizados para uso distribuído, economizando gastos e melhor gerenciando os
computadores presentes na rede;

 Os componentes básicos para que uma rede funcione corretamente são: cabeamento, adaptadores de rede e
protocolos. O cabeamento é usado para referenciar o tipo de conexão física entre computadores em uma rede,
enquanto os adaptadores de rede permitem a conexão entre computadores em uma rede por seu meio físico de
interconexão. O protocolo de comunicação, por sua vez, é a base para que um computador possa estar ativo na
rede e disponível para conexões;

 Além dos componentes básicos de uma rede, temos outros elementos integrantes: o servidor, as estações ou
clientes, o host, o local host, o remote host e o gateway. Cada um deles tem um endereço de identificação, que
permite o acesso ou reconhecimento dentro da rede. Este endereçamento pode ser físico ou por protocolo;

 O protocolo mais utilizado atualmente é o TCP/IP (junção dos protocolos TCP e IP), devido ao seu projeto, sua
capacidade de roteamento e sua velocidade. O TCP verifica e controla erros dos pacotes que serão entregues
pela rede. O UDP também é um protocolo de transporte, mas não controla o fluxo e não detecta erros durante a
comunicação. O ICMP informa os erros que ocorreram durante o processamento de um pacote IP, apenas
registrando e exibindo esses erros;

 O protocolo de endereçamento IP (Internet Protocol) possibilita a criação de redes, dando endereços a cada
estação participante, de modo que o tráfego de dados seja direcionado para um ou outro participante, de acordo
com seu endereço. Existem dois tipos de endereços IP: privados e públicos. Enquanto usamos os endereços
privados em redes privadas (LANs e WLANs, por exemplo), os endereços públicos são utilizados para a
Internet;

 A configuração da rede Linux pode ser executada de forma dinâmica, usando comandos específicos, ou
estática, por meio de arquivos de configuração. Na configuração dinâmica, as definições poderão se perder
após a reinicialização do sistema, enquanto nas configurações estáticas, é possível definir uma configuração
permanente;

 Para monitorar e reparar problemas de rede, contamos com alguns comandos. O comando ping verifica a
conexão de uma máquina à rede, e o tempo de resposta aos pacotes enviados. O comando dig exibe
informações do servidor de nomes especificado. O comando host converte nomes em endereços IPs e vice-
versa. O comando netstat exibe as interfaces de rede configuradas, as conexões de rede e as tabelas de
roteamento. O traceroute exibe o caminho percorrido por um pacote entre os gateways da rede até chegar ao
seu destino, e o tempo gasto na retransmissão. E, com o comando tracepath, descobrimos o MTU durante o
caminho que traçado até um host de rede.

Laboratório 1
A. Identificando dados de Rede
1. Verifique quais placas de redes estão conectadas com o comando:
# mii-tool
2. verifique as configuraçõe da placa eth0
# ifconfig eth0
Anote as informações importantes
Endereço IP:__________________________________
Máscara: __________________________________
Mac Address: __________________________________
Broadcast: __________________________________
3. Verifique qual o período configurado para renovação do cache da tabela ARP
# sysctl net.ipv4.neigh.eth0.gc_stale_time
4. Modifique o período de renovação do cache da tabela ARP para 90 segundos
# sysctl –w net.ipv4.neigh.eth0.gc_stale_time=90
4. Desative sua placa de rede
# ifdown eth0
5. Ative novamente a placa de rede
# ifup eth0
6. Crie na placa virtual eth0:1 o endereço IP da rede de classe C 192.168.100.0/24
PS. Combine com o instrutor qual será o Endereço IP para cada computador, o “x” demonstrado
abaixo será a definiço o seu IP.
# ifconfig eth0:1 192.168.100.x netmask 255.255.255.0 up
7. Verifique o endereço IP Configurado.
# ifconfig eth0:1
8. Ping o computador de um dos colegas, para isto pergunte o endereço IP dele.
# ping 192,168.100.x
9. Verifique sua tabela de rotas e anote qual seu Gateway Padrão
# route -n
Gateway Padrão: __________________________________

B. Configurando respostas de DNS


1. Verifique o arquivo resolv.conf para identificar a configuração de DNS
# cat /etc/resolv.conf
2. Configure seu computador para resoponder pelo nome: srvYY.impacta.com.br. (O endereço YY é
numérico e deve ser combinado com o instrutor para evitar repetição na sala)
# vi /etc/hosts
Adicione a seguinte linha
192.168.100.x srvYY.impacta.com.br srvYY
3. Ping o novo endereço de domínio
# ping srvYY.impacta.com.br
4. Ping o endereço reduzido
# ping srvYY

C. Verificando rotas e diagnosticando rede


1. verifique a rota de acesso do seu computador até o site da impacta
# traceroute www.impacta.com.br
2. Verifique o status das conexões das placas
# netstat -i
3. Consulte as configurações do servidor DNS configurado no seu computado
# cat /etc/resolv.conf
Anote um dos enderecos DNS
# dig @ip_do_dns

Exercícios de Fixação
1. Qual comando utilizo para verificar se minha placa de rede está conectada e em qual
velocidade?
a) ifconfig
b) mii-tool
c) ipconfig
d) arp
e) traceroute
Alternativa Correta: B

2. Um computador com o endereço IP 192.168.1.120 não consegue se comunicar com o outro


computador que possui o endereço IP 192.168.0.2.130. A rede está configurada para os 2
computadores com a máscara 255.255.255.0.
Qual o problema de comunicação?
a) DNS não está respondendo
b) Os 2 computadores estão em redes diferentes
c) O endereços IPs estão conflitando
d) Está faltando o MAC Address
e) Esqueci de digitar ifconfig
Alternativa Correta: B

3. Em qual arquivo de configuração devo digitar os meus endereços de DNS?


a) /etc/dns.conf
b) /etc/dnsresolv.conf
c) /etc/resolv.conf
d) /etc/nsswitch.conf
e) /etc/hosts
Alternativa Correta: C
4. Quais comandos utilizo para verificar o Default Gateway?
a) ifconfig ou route
b) route ou arp
c) ifconfig ou netstat
d) route ou netstat
e) arp ou ifconfig
Alternativa Correta: D

5. A máscara de rede 255.255.224.0 está em qual classe?


a) B
b) A
c) C
d) E
e) D
Alternativa Correta: A
Capítulo 9 – Instalando o GNU/Linux em estações
de trabalho

 Versões do Debian;
Introdução
 Requerimentos de hardware;
 Aquisição do Debian;
A combinação da filosofia e metodologia
 Particionamento;
Debian com as ferramentas GNU e o kernel  Backup;
Linux forma uma distribuição de software
livre e única chamada Debian  Instalação do Debian.
GNU/Linux.

Debian é uma organização formada


exclusivamente por voluntários dedicados
ao desenvolvimento de software livre e
também a promover os ideais da comunidade.

O Debian Project surgiu em 1993, quando Ian Murdock lançou um convite aberto aos criadores de
software, para contribuírem com uma distribuição de software livre, completa, e baseada no novo
kernel Linux criado por Linus Torvalds.

Inicialmente, era apenas um pequeno grupo de entusiastas dedicados, mantido com fundos da Free
Software Foundation e influenciado pela filosofia GNU. O grupo cresceu com o passar dos anos e
evoluiu para uma organização com mais de 1000 desenvolvedores oficiais Debian espalhados pelo
mundo.
Pelo fato de adotarmos neste material a distribuição Debian GNU/Linux, este capítulo abordará
conceitos relativos a esta distribuição.

Versões do Debian GNU/Linux

O Debian possui três versões de distribuição ativas em constante manutenção:


estável (stable), teste (testing) e em desenvolvimento (unstable), conforme veremos a seguir:

Estável (Stable)

A versão de distribuição estável (stable) contém a última versão oficialmente lançada do Debian.
Esta é a versão de produção do Debian, ou seja, o tipo de distribuição recomendado para utilização
direta em servidores de produção que precisam de estabilidade, segurança e confiabilidade.

No momento, a versão estável do Debian, lançada em 4 de setembro de 2010, é a 5.0.6, codinome


lenny.

Teste (Testing)

A versão de distribuição teste (testing) contém pacotes que ainda não foram aceitos na versão
estável (stable), mas estão na fila para receberem aprovação. A principal vantagem de usar essa
distribuição é que ela possui versões mais recentes de software, porém, esses softwares ainda não
estão devidamente homologados e não são recomendados para utilização em produção. Em
ambientes de desktop, ela é muito utilizada por usuários de nível intermediário. O codinome da
distribuição testing atual é squeeze.

Em desenvolvimento (Unstable)

Na versão de distribuição em desenvolvimento (unstable), que também é chamada de instável,


ocorre o desenvolvimento ativo do Debian. Geralmente, esta distribuição é utilizada por
desenvolvedores e por usuários avançados.
Os últimos pacotes lançados estão nessa versão, em que a instabilidade será maior ainda do que na
versão teste. O codinome da distribuição em desenvolvimento (unstable) é sid.

Pré-requisitos de hardware

Para instalar o Debian GNU/Linux, é preciso, primeiramente, reunir informações sobre o hardware
do computador no qual a instalação será feita. Em seguida, devemos verificar se os componentes de
hardware presentes poderão ser suportados, e prosseguir com a instalação.

É importante estar atento ao fato de que nenhuma versão de Linux deu suporte ao processador 286
ou anteriores, mas todos os processadores i486 e posteriores ainda são suportados. No caso da
instalação do Debian em servidores, o processador mínimo recomendado é um Pentium II 300,
dependendo das necessidades. Já os computadores destinados ao uso como desktop são menos
exigentes: um Pentium 100 é o mínimo recomendado.

Embora o nome da arquitetura seja i386, a atual versão estável do Debian, a lenny, não pode ser
instalada em processadores 386 ou anteriores. Desde a versão sarge, o Debian não suporta mais
processadores 80386 e seus clones.
A seguir, conferimos os requerimentos mínimos de sistema recomendados para tipos de instalação
com desktop, sem desktop e para servidores:

• Tipo de instalação sem desktop: 64 MB de RAM e disco rígido de 450 MB;

• Tipo de instalação com desktop: 64 MB de RAM e disco rígido de 5 GB.

Já para instalação em servidores, as exigências de memória e espaço em disco variam de acordo


com a finalidade do sistema.

Se o processo de instalação for feito manualmente e a arquitetura permitir, os requisitos mínimos


diminuem bastante, de forma que 20 MB de RAM são suficientes para instalar o Debian com
arquitetura s390, por exemplo.

Com um gerenciador de janelas que tenha menos recursos do que os ambientes Gnome e KDE,
como o xfce4, o icewm e o wmaker, pode-se instalar um ambiente de desktop gráfico em sistemas
mais antigos.

Nota: Os valores recomendados aqui não incluem dados pessoais, e-mail e arquivos gerais do
usuário, ou seja, informações que costumam estar presentes e crescem constantemente com a
utilização do sistema. Por isso, é sempre aconselhável considerar um espaço maior do que o
indicado.

 Espaço em disco para tarefas

Existe uma ferramenta chamada tasksel que, durante a instalação do Linux, dará ao usuário a opção
de instalar configurações personalizadas do sistema operacional, de acordo com a finalidade do
sistema e as tarefas que o usuário pretende executar com ele. O tasksel também pode ser acionado a
qualquer momento depois da instalação do Linux.

As diferentes tarefas que podem ser selecionadas para instalação diferem no espaço que ocupam no
disco, portanto isso deve ser estudado pelo usuário quando for fazer sua escolha. Além disso, é
importante lembrar que alguns pacotes usados em uma determinada tarefa podem ser também
usados por outras, o que significa que o tamanho das tarefas instaladas juntas será menor que os
seus valores absolutos somados. A tarefa Laptop, por exemplo, requer poucos MB a mais, quando
instalada junto à tarefa Ambiente desktop.

Para determinar o tamanho das partições, é necessário somar aos valores da tabela a seguir o
tamanho do sistema padrão, que, para a arquitetura i386, o kernal padrão 2.6 e todos os pacotes
padrão, é de 397 MB. Já uma instalação mínima do sistema ocupará 250 MB. Esses números,
contudo, são os exigidos após a instalação ter terminado e os arquivos temporários terem sido
apagados. Durante a instalação e mesmo para o funcionamento normal do sistema, mais espaço é
necessário.

Vejamos então os tamanhos requeridos para instalação das tarefas do tasksel. A segunda coluna
mostra o espaço que geralmente será ocupado em /usr e /lib, ao passo que o número da terceira
coluna é o requerido em /var.
Tamanho Tamanho do Espaço
Tarefa instalado download requerido para
(MB) (MB) instalação (MB)
Ambiente desktop 1830 703 2533
Laptop 26 9 35
Servidor de DNS 3 1 4
Servidor de Web 42 13 55
Servidor de e-mails 15 5 19
Servidor de arquivos 74 29 103
Servidor de impressão 215 84 299
Banco de dados SQL 50 18 68

O tasksel pode ainda instalar automaticamente uma tarefa de localização, caso a instalação não seja
feita em inglês e haja essa tarefa disponível para o idioma em questão. 350 MB para download e
instalação são suficientes nesse caso.

Nota: A tarefa Ambiente desktop instala a interface GNOME.

Obtendo o sistema operacional

O Debian é uma distribuição livre que pode ser baixada gratuitamente em qualquer um dos espelhos
(mirrors) disponíveis no site oficial do Debian (www.debian.org). Baixar a imagem (ISO) da
Internet, usando HTTP/FTP, BitTorrent ou Jigdo, e gravá-la em um CD ou DVD é uma das opções
mais comuns de aquisição do Debian. A instalação será feita a partir dessa mídia.

Caso decida baixar as imagens, o usuário ainda pode optar por baixar um arquivo de imagens
pequeno, selecionando apenas os pacotes em que ele esteja interessado, ou baixar um arquivo com
imagens maiores, com uma grande quantidade de pacotes. O primeiro tipo é baixado mais rápido,
mas depende da Internet durante a instalação do sistema, enquanto o segundo dispensa a conexão
com a Internet, porém leva o usuário a ter pacotes que ele não usará de fato.

Caso não queira baixar todos os pacotes pessoalmente, o usuário também pode comprar os CDs ou
DVDs de instalação Debian de algum distribuidor, geralmente por menos que R$10 mais o frete, e
instalar o sistema em quantas máquinas quiser, sem depender de conexão com a Internet.

Por fim, alguns computadores vêm com o Debian instalado da loja, pré-configurado para os
dispositivos de hardware presentes e com suporte técnico geralmente disponibilizado pelo
fornecedor. Embora tenha suas vantagens e libere o usuário dos procedimentos de instalação,
possuir a mídia de instalação é bastante útil, caso seja necessário recuperar um sistema Debian
danificado.
Considerações sobre particionamento

O particionamento é um processo muito delicado, que deverá ser feito com total controle e atenção
para minimizar futuros problemas.

O sistema operacional precisa de, ao menos, uma partição para ele próprio, onde o usuário também
pode colocar seus arquivos pessoas e aplicativos. Contudo o mais indicado é que criar partições
menores para hospedar partes separadas do sistema. Dessa forma, não só o reparo de algum
corrompimento é mais fácil, pois pode ser feito de forma localizada, substituindo somente a partição
afetada através de backups, como o desempenho do computador tende a melhorar, pois um
problema com algum procedimento específico não afetará as outras partes do sistema.

Como vimos no capítulo 7, partições swap são muito úteis, pois permitem que o computador supra
uma necessidade de memória adicional a partir de um espaço em disco. Ainda que um simples
arquivo possa ser definido como swap, a funcionalidade de um espaço de swap é muito maior
quando for uma partição separada.

Normalmente o tamanho mínimo de uma participação swap será 16 MB, mas é comum atribuir o
mesmo tamanho correspondente à memória do sistema. Já o tamanho máximo, em arquiteturas de
32 bits, será 2 GB. Caso isso seja insuficiente para as necessidades do usuário, é possível e sugerido
que se criem mais partições swap em discos diferentes, de preferência em canal IDE ou SCSI
diferente.

Partições maiores do que 6 GB não devem ter o sistema de arquivos ext2 aplicado a elas, pois
verificações periódicas de integridades são executadas em partições ext2, e isso, em partições muito
grandes, levará a lentidões e atrasos durante a inicialização do sistema.

A seguir, veremos algumas recomendações referentes aos principais diretórios e partições do


sistema, lembrando que os valores mudam expressivamente com o uso, sendo as indicações a seguir
apenas sugestões gerais:

 É altamente recomendável que uma partição seja criada somente para o diretório raiz ( /), pois como ele contem
necessariamente os diretórios /etc, /bin, /sbin, /lib e /dev, que são os componentes mais essenciais do sistema,
o corrompimento de qualquer outra partição ainda permitirá a inicialização do sistema, possibilitando seu
reparo. Entre 150 e 250 MB são normalmente usados pela partição raiz;

 O diretório /usr é normalmente o que ocupa mais espaço em disco, sendo recomendável reservar, no mínimo,
500 MB em disco para ele. Em servidores ou estações de trabalho grandes, esse valor deve ir para algo entre 4
e 6 GB;

 O diretório /var, onde ficam os dados variáveis, ocupa um espaço absolutamente dependente do que o usuário
pretende. Um tamanho tão reduzido quanto 30 ou 40 MB, no caso se um sistema com poucas atualizações
planejadas, ou tão grande quanto 2 ou 3 GB, para instalações completas, podem ser recomendados. Uma
instalação manual pode usar em torno de 300 a 500 MB;

 Entre 40 e 100 MB devem ser suficientes para o diretório /tmp, a menos que o usuário pretenda usar
aplicativos que armazenem temporariamente arquivos de imagem, como ferramentas usadas na criação de CDs
e DVDs, por exemplo. É comum a criação de uma partição própria para o diretório /tmp;
 Dentro do diretório /home, ficarão os arquivos pessoais de cada usuário, portanto o tamanho total do diretório
varia de acordo com o número de usuários no servidor e a espécie de arquivos que os usuários armazenam,
mas uma média de 100 MB para cada usuário tende a ser suficiente, a menos que muitos arquivos multimídias
forem salvos. Caso existam muitas contas de usuários, é recomendável criar uma partição /home grande;

 Se muitos programas que não façam parte da distribuição Debian forem ser instalados, é bom criar uma
partição /usr/local separada para armazená-los;

 Para computadores que funcionem como servidor de e-mails, é altamente recomendável que o arquivo
/var/mail tenha sua própria partição, já que isso minimizará os efeitos de spam, lotação e congestionamento
nas outras partes do sistema.

É vantajoso colocar os diretórios /usr /var, /tmp e /home em partições separadas na raiz, em
sistemas multi-usuários ou com muito espaço em disco. Para sistemas mais complexos, uma
consulta ao documento Multi Disk HOWTO é recomendada.

Backup dos arquivos

Como já foi visto, o processo de particionamento do disco, necessário para instalar um sistema
operacional não nativo num computador pela primeira vez, leva à perda total de todos os dados
previamente existentes nesse disco, semelhante ao processo de formatação. Para evitar acidentes, é
de extrema importância que o backup de todos os arquivos do sistema seja feito antes de começar a
instalação do Debian.

Instalando o Debian

Para iniciarmos o programa de instalação a partir do CD ou DVD, devemos considerar o seguinte:

 Caso o computador possua outro sistema operacional instalado (o Windows, por exemplo), basta inserir a
mídia no drive de CD-ROM ou DVD-ROM. Caso o recurso de execução automática esteja ativado, o
programa de instalação se iniciará automaticamente. O computador, então, é reiniciado;

 Caso o computador não possua um sistema operacional instalado, é necessário configurar a BIOS para que a
inicialização do programa de instalação do Debian ocorra a partir da unidade de CD-ROM ou DVD-ROM.
Realizado tal ajuste, salvar as alterações e sair do setup da BIOS para que o computador seja reiniciado.

Uma vez completa a inicialização do computador, aparecerá a primeira tela de instalação do Linux.
Nessa tela, caso for selecionada a opção Help, uma lista de opções de ajuda é apresentada. Se quiser
começar a instalação de fato, os seguintes passos devem ser seguidos:

1. Selecionar a opção Graphical install conforme mostrado na tela a seguir:


2. Na tela que será carregada, selecionar o idioma desejado tanto para a instalação quanto para
definição como padrão no sistema;

3. Em seguida, informar o país onde o usuário se encontra;


4. Na próxima tela, selecionar o layout de teclado;

5. O sistema automaticamente passará a detectar o dispositivo de mídia, carregar os componentes


que serão usados na instalação e configurar a rede. A próxima tela em que o usuário poderá enviar
alguma informação é a mostrada a seguir:

Nesse momento, inserir o nome da máquina;


6. Na próxima tela, inserir o nome do domínio;

7. A tela mostrada adiante traz uma lista de estados e cidades para configuração do relógio da
máquina:
Informar um local com o mesmo fuso horário daquele em que o usuário se encontra;

8. Em seguida, é preciso selecionar um método de particionamento. Existem opções de


particionamento assistido ou manual. Mostraremos os passos necessários para particionar os discos
manualmente. Para tal, selecionar a opção Manual, como pode ser visto a seguir:
9. Uma vez diante da lista dos discos disponíveis no computador, o usuário deve selecionar o
dispositivo que pretende particionar para remover a tabela de partição antiga;

10. Aparecerá uma tela de confirmação da remoção da tabela de partição antiga, onde o usuário
deve selecionar Sim;
11. De volta à tela com a lista de discos disponíveis, selecionar o dispositivo cuja tabela de partição
acabou de ser removida;

12. Na próxima tela, Definir como queremos fazer o particionamento, selecionaremos a opção
“Criar uma nova partição”.
13. Neste passo vamos informar o tamanho da partição a ser criada, em valor absoluto ou
percentual, de acordo com o tamanho máximo disponível;

14. A seguir, o usuário deve definir se a partição que deseja criar será primária ou lógica;
15. A próxima tela pedirá ao usuário que especifique se deseja que a nova partição fique no início
ou no fim do espaço disponível;
16. As configurações da partição sendo criada serão mostradas na tela a seguir:

Selecionar o campo Usar como para definir o sistema de arquivos a ser aplicado na partição;

17. Será aberta uma lista com os sistemas de arquivos disponíveis, dos quais o usuário deve
selecionar um;
18. De volta à tela anterior, selecionando o campo Ponto de montagem, a seguinte tela será
exibida:

Definir um diretório da lista;


19. Novamente na tela de configurações da partição, o campo Opções de montagem trará a tela
adiante:

Escolher quais opções do /etc/fstab serão usadas na montagem da partição;


20. Isso levará o usuário mais uma vez à tela que exibe as configurações da partição. Selecionar
agora Finalizar a configuração da partição;

21. Isso levará o usuário mais uma vez a tela que exibe as configurações da partição. Selecione o
espaço disponível do disco e avance para criarmos a partição SWAP
22. Mais uma vez, devemos definir como usaremos a partição, selecionaremos novamente a opção
“Criar uma nova partição”

23. Na tela para definir o tamanho da partição, mais uma vez devemos dizer o tamanho. No nosso
caso estamos definindo todo o restante do disco.
24. Agora vamos definir o tipo da partição, neste caso ela também pode ser primária.

25. Na tela que exibe as configurações da partição, Selecionar a opção “Usar Como”.
26. Na Lista de Sistema de arquivos que se exibirá, escolha “area de troca (swap).

27. Mais uma vez as informações da partição aparecerá, selecione “Finalizar a configuração da
partição” para continuar.
28. A tela que mostra os discos disponíveis agora exibirá também quais partições já foram criadas.
Aqui é possível criar mais partições, caso ainda haja espaço no disco, ou finalizar o
particionamento. Uma vez satisfeito com as partições criadas, o usuário deve então selecionar
Finalizar o particionamento e escrever as mudanças no disco;
29. Confirmar o particionamento e sua gravação no disco;

30. Após a instalação automática do sistema base, definir a senha para o administrador;

I
31. Em seguida, será pedido o nome completo de um usuário comum, para criação de uma conta;

32. Definir o nome de usuário para essa conta;


33. A criação da conta comum é finalizada quando sua senha for determinada, na tela mostrada a
seguir:

34. O usuário terá a opção de catalogar fontes adicionais de mídia, de forma a promover a
instalação de mais programas no sistema. Caso não possua nenhuma mídia extra, a opção Não deve
ser selecionada;
35. Definir se a instalação usará ou não um espelho de rede. Selecionada a opção Sim, dados serão
baixados da Internet para complementara instalação;

36. Será necessário selecionar um país para fonte de downloads


37. Após selecionar o país, será necessário escolher qual servidor será usado como fonte de
instalação

38. Caso você tenha alguma configuração de proxy, adicione na tela a seguir, caso contrário deixe
em branco e avance para o próximo passo.
39. O usuário terá a opção de participar do popularity-contest, uma pesquisa sobre os pacotes
favoritos dos usuários;

40. É na próxima tela que instalações específicas para ambientes variados, as tarefas do tasksel,
podem ser selecionadas, caso interessem ao usuário;

41. O que estiver faltando será baixado e instalado automaticamente. Em seguida, o instalador
perguntará se o usuário pretende instalar o GRUB;
42. Retirar o CD e reiniciar o computador. A instalação está completa.

Tópicos para revisão do capítulo

Atente para os tópicos a seguir. Eles devem ser estudados com muita atenção, pois
representam os pontos mais importantes do capítulo.

 O Debian possui três versões de distribuição ativas em constante manutenção: estável (stable), teste (testing)
e em desenvolvimento (unstable). Elas diferem principalmente no estado de homologação e
reconhecimento oficial dos pacotes utilizados;

 Em instalações sem desktop, 64 MB de RAM e 450 MB no disco rígido são recomendados. Com desktop, 5
GB de disco são sugeridos. Já para instalação em servidores, as exigências de memória e espaço em disco
variam de acordo com a finalidade do sistema;

 Existe uma ferramenta chamada tasksel que dá ao usuário a opção de instalar configurações personalizadas do
sistema operacional, de acordo com a finalidade do sistema e as tarefas que o usuário pretende executar com
ele. As diferentes tarefas que podem ser selecionadas para instalação ocupam espaços diferentes no disco;

 Baixar a imagem (ISO) do Debian gratuitamente da Internet (www.debian.org) e gravá-la em um CD ou DVD


é uma das opções mais comuns de aquisição do sistema, mas é possível também comprar os CDs ou DVDs de
instalação ou ainda um computador que já venha com o Debian instalado e configurado;
 É indicado criar partições diferentes para hospedar partes separadas do sistema. Dessa forma, não só o reparo
de algum corrompimento é mais fácil, pois pode ser feito de forma localizada, substituindo somente a partição
afetada através de backups, como o desempenho do computador tende a melhorar, pois um problema com
algum procedimento específico não afetará as outras partes do sistema;

 É de extrema importância que o backup de todos os arquivos do sistema seja feito antes de começar a
instalação do Debian, pois o processo de particionamento do disco leva à perda total de todos os dados
previamente existentes nesse disco, semelhante ao processo de formatação.

Exercícios de Fixação
1. Antes de instalar um Sistema Operacional, o que deve ser verificando primeiro?
a) Se o Sistema Operacional é em português
b) Se a distribuição é compatível com todo o hardware
c) Se o cabo de rede está conectado
d) Se a distruição possui kernel
e) Se o computador possui processador
Alternativa Correta: B

2. Qual a ferramenta que permite o usuário escolher quais programas serão instalados?
a) tasksel
b) Gerenciador de Programas
c) Program Manager
d) Selects
e) Install Program
Alternativa Correta: A

3. Qual forma não é possível obter uma distruição GNU/Linux?


a) HTTP/FTP
b) Disquete
c) Torrent
d) CD/DVD
e) Comprando Licença
Alternativa Correta: E

4. Qual é a partição mínima para instalar o Sistema Operacional?


a) /boot
b) Swap
c) /
d) /etc
e) /usr
Alternativa Correta: C

5. Qual diretorio na instalação ocupa mais espaço no disco?


a) /usr
b) /var
c) /etc
d) /boot
e) /srv
Alternativa Correta: A
Capítulo 10 – Gerenciando programas

 Pacotes de programas;
Introdução
 Gerenciadores de pacote;
 Repositórios;
Como em qualquer sistema operacional,
 Instalação de pacotes;
certas vezes, em sistemas GNU/Linux, é  Inspeção de pacotes;
preciso instalar um novo aplicativo,
ferramenta, comando ou serviço, para  Atualização de pacotes;
desfrutar de suas facilidades ou para
qualquer outro fim específico.
 Exclusão de pacotes;
Nos sistemas GNU/Linux, os programas são
disponibilizados em forma de pacotes que
contêm binários pré-compilados, arquivos de controle e configuração, bibliotecas e ocasionalmente
sistemas de listagem/checagem de dependências e scripts para configurações pós-instalação. Esses
pacotes são direcionados especificamente para cada distribuição, de forma que pacotes voltados
para o Debian trazem a extensão .deb, e aqueles desenvolvidos para o Red Hat são .rpm.

A instalação de aplicativos em sistemas GNU/Linux tem diversos modelos, desde os mais simples e
práticos, fornecidos pelos gerenciadores de pacotes, até os mais avançados e personalizados,
oferecidos pelo método de instalação a partir do código-fonte.

Independente do modelo adotado para a instalação do programa, será possível instalar, no sistema,
praticamente qualquer aplicativo desenvolvido para a plataforma GNU/Linux.

Adiante, abordaremos a instalação de programas a partir de pacotes pré-compilados. Também


veremos como pesquisar, remover e atualizar pacotes por meio de diversas ferramentas
disponibilizadas por sistemas de pacote Debian. Por fim, apresentamos os gerenciadores rpm e
yum, utilizados em distros Red Hat.

Gerenciadores de pacote

Os pacotes dos sistemas GNU/Linux podem ser administrados pelos gerenciadores de pacote,
responsáveis pela instalação, atualização e exclusão de programas em uma distribuição específica.

Para os pacotes Debian, os gerenciadores mais usados são o dpkg, que instala pacotes individuais, o
apt-get e o aptitude, que localizam um pacote em repositórios remotos e procedem com a
instalação e resolução de suas dependências. Para a distribuição Red Hat, os gerenciadores mais
importantes são o yum e o rpm, semelhantes ao aptitude e o dpkg respectivamente, mas usados
somente para pacotes com a extensão .rpm.

Como os pacotes .deb trazem informações sobre as suas dependências, ou seja, as bibliotecas e os
outros programas que precisam ser instalados para que ele funcione, o gerenciador de pacote
verifica essas informações e encarrega-se de sanar todas essas necessidades, agilizando bastante a
instalação e administração de programas no sistema.

Repositórios

Os gerenciadores apt-get e aptitude, que acabamos de mencionar, só podem automatizar a


administração das dependências dos pacotes, caso a origem desses pacotes esteja especificada de
forma correta nos arquivos chamados repositórios. Os repositórios poderão ser indicados por meio
do arquivo /etc/apt/sources.list. Arquivos adicionais podem ir para o diretório
/etc/apt/sources.list.d/.

A indicação de um repositório funcional e acessível é fundamental para o processo de download e


instalação do pacote desejado. Um repositório nada mais é do que uma centralização de
pacotes .deb disponíveis para download por meio do apt para instalação em um cliente.
Repositórios podem ser representados por diversos meios e tipos, como:

 Repositório de Internet acessíveis por meio de protocolos como http e ftp;

 Repositório local, disponibilizado por um servidor ou cliente da rede e acessível também pelos protocolos http
e ftp;

 Repositórios representados por mídias específicas, podendo ser um CD, DVD, ou até mesmo uma determinada
partição de um HD.

É interessante saber também que as distribuições possuem repositórios próprios, oficiais e não
oficiais. Independente do tipo de repositório escolhido para obter pacotes, é preciso fazer suas
respectivas indicações de uso, além de ser permitido utilizar vários tipos de repositório ao mesmo
tempo.

É por meio do arquivo /etc/apt/sources.list que os repositórios poderão ser configurados e


indicados para uso. Cada linha desse arquivo referenciará um repositório e o tipo de pacote que
poderá ser instalado no sistema. Dentro dos repositórios, existe uma divisão por sessões, indicando
os tipos de pacotes acessíveis para instalação.

Um arquivo sources.list pode ser acessado por meio de um arquivo modelo em


/usr/share/doc/apt/exemples/sources.list, inclusive com caminhos para repositórios oficiais
de Internet, que poderão ser utilizados para obter pacotes.

O arquivo sources.list terá a seguinte sintaxe para adicionar um repositório, indicando um


protocolo de acesso em um respectivo endereço:

<Tipo de pacote> <Protocolo de acesso://Endereço> <Versão da


distro> <Seção de pacotes>

Exemplo:
deb http://debian.usp.br stable main contrib non-free

Sobre os campos do arquivo sources.list temos:

 Tipo de pacote: Além dos pacotes com a extensão .deb trabalhados até o momento, também é possível obter
o código-fonte desses pacotes para que possam ser instalados pelo processo de compilação (visto no início do
capítulo). O código-fonte dos pacotes poderá ser acessado, caso o campo tipo de pacote seja identificado como
deb-src. Se forem utilizados apenas os pacotes normais com a extensão .deb, basta identificar o campo tipo
de pacote como deb;

 Protocolo de acesso: //Endereço: Neste campo, é indicado o protocolo de acesso a um servidor de


Internet ou local, podendo ser http ou ftp, com seu respectivo endereço de acesso. Também é possível usar a
indicação file para especificar que o repositório é um diretório do sistema com imagens .iso dos pacotes
Debian;

 Versão da distribuição: É necessário indicar a versão dos pacotes que serão instalados, que está
diretamente associada à versão de distribuição, atualmente em uso. Se a distribuição for uma versão stable, os
pacotes .deb que serão instalados também deverão ser desta mesma versão, e assim por diante. Nesse campo,
podemos encontrar as versões stable, testing e unstable;

Nota:O codinome da distribuição também pode ser utilizado, em vez da versão.

 Sessão de pacotes: Na sessão de uso dos pacotes que serão instalados, é criada uma divisão para
diferenciar os pacotes em relação às suas características de licença. São elas:

 main: Contém apenas pacotes de software livre;

 contrib: Contém pacotes livres, porém, que dependem de algum software proprietário;

 non-free: Contém pacotes com código-fonte fechado.

Com os campos devidamente informados, é possível configurar um repositório, a cada linha, no


arquivo sources.list.

Adicionando o caminho de um CD-ROM ou DVD no


repositório

Para adicionar um CD ou DVD como mídia de repositório, basta utilizar o comando apt-cdrom e,
por meio da ação add, será possível ler todo o conteúdo de mídia inserido, criando uma lista de
todos os pacotes nela presentes.

apt-cdrom [opcoes] <acao>

A opção add adiciona um CD ou DVD como mídia de repositório.

Assim, é possível adicionar várias mídias diferentes como meio de repositório. Quando um pacote
precisar ser instalado, o próprio apt solicitará a inserção da respectiva mídia para a cópia do pacote.

Atualizando a lista dos repositórios

Os comandos apt-get update ou aptitude update são utilizados para atualizar a base de
informações locais sobre os repositórios remotos. Sem essa atualização, novas versões de
programas não serão encontradas, causando a perda de atualizações que podem ser importantes.
Isso pode ser facilmente evitado, já que é possível até mesmo programar a execução periódica de
um desses dois comandos.

Instalando pacotes

Antes de instalarmos um programa, devemos procurar por ele. Para isso, utilizamos o apt da
seguinte forma:

apt-cache search <programa>

Também, podemos utilizar o aptitude para verificar a existência do programa a ser instalado:

aptitude search <programa>

No tópico anterior, aprendemos sobre a utilização dos comandos apt-get update e aptitude
update. Caso nenhum resultado apareça na busca pelos programas desejados, isso pode ter sido
causado pelo fato de as bases de informações não estarem atualizadas, logo o uso de um desses
comandos é recomendado. É possível também que o programa simplesmente não exista nos
repositórios especificados em /etc/apt/sources.list.

Verificado a existência do programa, podemos instalá-lo por meio da seguinte sintaxe:

apt-get install <programa1> <programa2> …

O processo será totalmente automatizado, além de o apt realizar o download automático do pacote
e suas respectivas dependências a partir dos repositórios configurados, completando o processo com
suas respectivas instalações. Algumas opções poderão ser utilizadas em conjunto com a ação
install.

É possível, também, instalar vários pacotes ao mesmo tempo, pois o apt gerenciará a instalação de
todos eles de forma tranquila. Porém, não é possível executar o comando apt-get com qualquer
ação em paralelo. Vejamos a tabela a seguir:
Opção Opção GNU Descrição
Unix
-d --download- Apenas faz o download, não
only instalando os pacotes e as possíveis
dependências.
-f --fix-broken Tenta corrigir erros gerados na
instalação de pacotes.
-s --simulate Apenas simula o processo de
instalação do pacote com suas
respectivas dependências, não
realizando suas instalações.
--reinstall Reinstala um pacote, caso já esteja
instalado.
-u --show- Exibe uma lista dos pacotes que
upgraded serão atualizados.
-y -yes Assume a resposta Yes para todos
os questionamentos.

No exemplo acima, instalamos o aplicativo lynx (Navegador de ambiente texto).


O sistema fez a busca pelo pacote na internet, faz o download e a instalação.

O aptitude pode ser utilizado para instalar programas. Para isso, utiliza-se a seguinte sintaxe:

aptitude install <programa>


No exemplo acima, fizemos a instalação do emacs (editor) atravez do aptitude

Caso haja pendências, o administrador será consultado em relação à instalação desses programas.
As dependências não instaladas serão automaticamente copiadas e instaladas.

Podemos instalar pacotes copiados separadamente, sem recorrer aos repositórios. Para isso, é usado
o programa dpkg:

dpkg -i <programa>

dpkg-reconfigure

dpkg-reconfigure [opçoes] <pacote>

O comando dpkg-reconfigure é utilizado para reconfigurar pacotes que, em sua instalação,


apresentaram alguma interface de configuração básica ao pacote específico. Essa interface é provida
pelo debconf.

Com o dpkg-reconfigure, é possível acessar novamente tal interface, definindo novas


configurações para o aplicativo.

Opção Opção GNU Descrição


Unix
-a -all Reconfigura todos os pacotes
instalados no sistema, que utilizam
uma interface de configuração por
meio do debconf.
-u --unseen-only Sobre a reconfiguração que será
iniciada no pacote especificado,
serão configuradas apenas questões
que ainda não foram alteradas em
configurações anteriores. Por padrão,
todas as questões possíveis são
questionadas ao executar o dpkg-
reconfigure.
--force Força a reconfiguração de um
pacote, mesmo que esse esteja em
um estado inconsistente ou
corrompido.

Inspecionando pacotes

É possível também realizar tarefas de inspeção dos pacotes com a ajuda dos diversos gerenciadores
existentes. Veremos a seguir o que os gerenciadores mais usados possibilitam em termos de
inspeção.

 Consultando com o dpkg

É possível utilizar o gerenciador dpkg para consultar pacotes. Vejamos a seguir os principais
parâmetros de consulta do dpkg.

 Consultas em pacotes instalados no sistema

Opção Unix Opção GNU Descrição


-l --list Exibe uma lista de todos os pacotes
<pacote(s)> <pacote(s)> instalados no sistema, com uma
simples descrição, caso nenhum
nome de pacote seja especificado.
Se algum nome de pacote for
indicado com a opção -l,o resultado
será apenas sobre o pacote.
Opção Unix Opção GNU Descrição
-s --status
Exibe o status e as informações
<pacote(s)> <pacote(s)>
detalhadas de um pacote instalado
ou removido do sistema.
-L --listfiles Lista todos os arquivos relacionados
<pacote(s)> <pacote(s)> a um pacote instalado no sistema.
-S ---search Localiza o pacote ao qual o arquivo
<arquivo(s)> <arquivo(s)> indicado pertence.

 Consultas em pacotes .deb

Opção Opção GNU Descrição


Unix
-I --info
<pacote.d <pacote.deb> Exibe as informações detalhadas de
eb> um pacote .deb ainda não instalado
no sistema, como dependências e
sua devida descrição.
-c --contents
<pacote <pacote.deb> Exibe todo o conteúdo de um pacote
.deb que será alocado no sistema após
.deb>
sua devida instalação.

 Outros tipos de consultas

Opção Opção GNU Descrição


Unix
-C --audit Exibe uma lista de pacotes com
problemas ocasionados em sua
respectiva instalação.
--get-selections Utilizada para exibir uma lista, caso
[pacote(s)] nenhum pacote seja indicado por
programas instalados ou removidos.
Se um pacote for indicado, será
informado apenas seu status de
instalação.
No exemplo acima, consultamos o pacote do VIM, como resposta obtivemos informações
relevantes como: Tamanho do pacote, versão, arquitetura, site do desenvolvedor entre outros.

 Consultando com o apt-cache

Outro modo de fazer consultas na lista de repositório por determinados pacotes e suas respectivas
descrições é utilizar o comando apt-cache.

 Localizando um pacote no repositório

apt-cache [opcoes] search [pacote]

Com a ação search, o pacote especificado será procurado na lista de repositórios e, caso
seja encontrada alguma palavra relacionada ao pacote desejado, será exibido o nome do
pacote com uma simples descrição sobre ele.

 Obtendo detalhes de um pacote no repositório


apt-cache [opcoes] show [pacote]

Após localizar um pacote de nome específico, é possível obter suas informações de forma
detalhada. A ação show tem a finalidade de exibir uma descrição completa sobre um
pacote da lista de repositórios.

 Consultando com o aptitude

Também podemos utilizar o aptitude search, abordado anteriormente, para consultar pacotes.

 Consultas avançadas com o auto-apt

O comando auto-apt é utilizado para buscas específicas sobre os pacotes presentes nos
repositórios. Com a ação search, será possível localizar um pacote no repositório pelo
arquivo que pertença a ele.

auto-apt [opcoes] <acao>

Para utilizar o recurso do auto-apt, é preciso executar os seguintes passos:

1. Fazer a instalação do pacote auto-apt;

2. Executar o comando auto-apt update.

O comando auto-apt com a opção update será responsável por obter o arquivo Contents-
i386.gz, que será utilizado como base pelas buscas com o auto-apt.

A partir da configuração anterior, será possível utilizar o comando auto-apt para localizar
um pacote por um arquivo que pertença a ele.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

Exemplo:

No exemplo anterior, foi feita uma busca pelo pacote que utiliza o arquivo smb.conf. O
resultado foi a sessão na qual se encontra o arquivo (net) e seu respectivo pacote (samba-
common).

 Verificando e corrigindo falhas do comando apt


Por um motivo qualquer, certas vezes, podem ocorrer falhas na execução de um comando da família
apt, principalmente na instalação ou atualização de pacotes, no momento de seu download. Para
resolver problemas relacionados, é possível executar a ação check, que verifica arquivos
corrompidos, fazendo uma correção automática dos mesmos e atualizando a lista de repositório.

apt-get [opcoes] check

Atualizando pacotes

Para atualizar um programa que já esteja instalado, usa-se o comando apt-get upgrade. Sua sintaxe
é a seguinte:

apt-get [opcoes] upgrade <pacote>

A tabela a seguir descreve as principais opções que podemos utilizar com apt-get upgrade:

Opção Opção GNU Descrição


Unix
-f --fix-broken Tenta corrigir erros gerados na
atualização de pacotes.
-s --simulate Apenas simula o processo de
atualização.
-y -yes Assume a resposta Yes para todos
os questionamentos.

Também é possível atualizar, de uma vez, todos os pacotes que possuam alguma versão mais
recente nos repositórios especificados como origem, através do comando apt-get upgrade sem a
especificação de um pacote na sintaxe. Existe também a opção de utilizar, analogamente, o
comando aptitude upgrade para atualização de todos os pacotes, porém, nas versões mais recentes
do programa, é recomendável que se use o seguinte comando:

aptitude safe-upgrade

Nota: Como foi visto anteriormente, sem a utilização constante dos comandos apt-get update ou
aptitude update, os repositórios não são atualizados, de forma que a atualização de um programa
não poderá ser feita com os comandos que acabamos de ver.
Excluindo pacotes

O apt também pode ser utilizado para remover pacotes instalados e seus respectivos dependentes,
caso existam, devido à ação remove. A remoção também é automatizada. A ação remove também
aceita certas opções para ajustar a execução de desinstalação.

apt-get [opcoes] remove <pacote1> <pacote2> ...

Também é possível remover vários pacotes ao mesmo tempo com o comando


apt-get e a ação remove.

Opção Opção GNU Descrição


Unix
--purge
Remove os pacotes de forma
completa, removendo, também, seus
respectivos arquivos de configuração.
-s --simulate Apenas simula o processo de
remoção do pacote, com suas
respectivas dependências.
-y -yes Assume a resposta Yes para todos
os questionamentos.

Também podemos remover um pacote por meio do aptitude, utilizando a seguinte sintaxe:

aptitude remove <pacote>


A remoção de pacotes instalados também pode ser feita pelo dpkg, com as seguintes opções:

Opção Unix Opção GNU Descrição


-r --remove Remove um pacote previamente
<pacote(s)> <pacote(s)> instalado no sistema. É importante
ressaltar que, para remover os
pacotes instalados, basta fazer
referência simplesmente pelo nome
do pacote.
--ignore- Ignora uma ou várias dependências
depends= obrigatórias na remoção de um
<pacote1, pacote. Deve-se redobrar a atenção
pacote2 ...> ao utilizar essa opção, pois,
provavelmente, a dependência
obrigatória ignorada será de extrema
importância para o funcionamento
correto do programa.
-P --purge Também é utilizada para remover
<pacote(s)> <pacote(s)> pacotes, porém faz uma remoção
completa, apagando, também, os
arquivos de configuração do pacote,
ação que não é feita, por padrão,
com a opção –r.
Nota: O comando apt-get –f install também é muito utilizado para correção de problemas
de pacotes quebrados.

O gerenciador rpm

rpm <opcoes> [pacote(s)]

O rpm (Red Hat Package Manager) é o gerenciador de pacotes em distribuições de base Red Hat e
possui a mesma função do comando dpkg, anteriormente apresentado. Entretanto, o rpm
gerenciará apenas pacotes com a extensão .rpm.

Praticidade e simplicidade para instalar e gerenciar pacotes pré-compilados no formato rpm são as
principais características desse gerenciador.

Um pacote .rpm é como um arquivo empacotado, que armazenará, além do programa pré-
compilado, scripts de instalação e remoção do programa no sistema e outras informações
relacionadas.

O rpm terá funcionalidades básicas de gerenciamento de pacotes, como instalação, remoção,


atualização, consultas e verificação.

Arquivos de informações do rpm

A estrutura de controle do rpm é mantida por um banco de dados específico, no formato Berkeley
BD (BDB). Esse banco de dados fica alocado no diretório /var/lib/rpm e é utilizado de forma
direta pelo próprio gerenciador de pacotes rpm na instalação, controle e gerenciamento completo
de seus pacotes.

O arquivo principal de configuração do rpm está alocado em /usr/lib/rpm/rpmrc e armazena


informações como a arquitetura do sistema e caminhos de macros utilizadas no gerenciamento dos
pacotes.

Dependências

As dependências também deverão ser respeitadas na hora de gerenciar pacotes rpm. Como no
método de instalação de programas a partir do código-fonte, em que a verificação das dependências
obrigatórias é um passo essencial à instalação do programa, com o rpm não será diferente. As
dependências devem ser atendidas não apenas na instalação de um pacote, mas também no
momento de sua remoção. Um pacote que é uma dependência obrigatória de outro pacote no
sistema não pode ser removido.

Instalando pacotes com o rpm

A instalação de pacotes com o gerenciador de pacotes rpm é relativamente simples. Algumas


opções poderão ser utilizadas para auxiliar o processo. Observemos, então, a tabela a seguir:

Opção Opção GNU Descrição


Unix
-i --install Instala um ou vários pacotes com a
<pacote(s) . <pacote(s) extensão .rpm no sistema.
rpm> .rpm>
-h --hash Exibe o caractere # como barra de
progresso para o processo de
instalação do pacote.
-v --verbose Exibe o processo da instalação em
modo visual.
--nodeps
Utilizado para forçar a instalação de
um pacote, mesmo com a ausência de
dependências.
--test Apenas testa o processo de
instalação, fazendo uma simulação.
--force Opção utilizada para forçar a
reinstalação de pacotes.
--requires Exibe os requisitos para instalação do
pacote em questão. Deve ser usado
como sub-opção da opção -q.
--whatrequires Exibe uma lista com os programas
que dependem desse pacote. Deve
ser usado como sub-opção da opção
-q.

Excluindo pacotes com o rpm

O gerenciador de pacotes rpm removerá qualquer pacote .rpm instalado no sistema, mas
precisamos atentar à relação de dependências que os pacotes possuem. Vejamos a tabela adiante:
Opção Unix Opção GNU Descrição
-e --erase Remove um ou vários pacotes com a
<pacote(s)> <pacote(s)> extensão .rpm. Para que ocorra a
remoção dos pacotes instalados,
basta fazer referência simplesmente
pelo nome do pacote.
--nodeps Remove um pacote, mesmo se ele
for uma dependência de outro pacote
instalado.
--test Apenas testa o processo de remoção,
fazendo uma simulação.

Atualizando pacotes com o rpm

O rpm disponibiliza uma opção para atualizar pacotes, instalando pacotes de nova versão no
sistema. Vejamos a tabela adiante:

Opção Opção GNU Descrição


Unix
-U --upgrade Atualiza um pacote previamente
<pacote(s) . <pacote(s) instalado no sistema. Caso o pacote
rpm > .rpm> não tenha sido instalado, o rpm
realiza esse processo
automaticamente. Sobre o pacote
atualizado, as configurações da
versão antiga são salvas para não
gerar perdas importantes de
configurações.
--oldpackage Permite atualizar um pacote para
uma versão anterior à versão atual.
Realiza um downgrade.
--nodeps Utilizada para forçar a atualização de
um pacote, mesmo se houver algum
questionamento sobre uma
dependência.

Consultando pacotes com o rpm

O rpm também disponibiliza várias opções para realizar consultas de pacotes instalados ou não no
sistema. A tabela adiante ilustra a opção principal:
Opção Opção GNU Descrição
Unix
-q --query Verifica se o pacote especificado está
[pacote] [pacote] instalado ou não no sistema. É a
principal opção de busca do rpm, que
poderá ser utilizada em conjunto com
outras opções para trazer mais
informações detalhadas sobre os
pacotes.

Algumas opções extras poderão ser utilizadas com a opção –q apresentada anteriormente, para
definir o local e o tipo de busca efetuado, conforme esboça a tabela a seguir:

Opção Opção GNU Descrição


Unix
-a --all Lista todos os pacotes instalados no
sistema.
-f --file
Realiza a busca pelo pacote que
<arquivo <arquivo>
possui o arquivo indicado.
>
p<pacote. --package A busca será feita em um pacote
rpm> <pacote.rpm> .rpm ainda não instalado. Essa
opção é, geralmente, usada para
obter informações de um pacote
.rpm, como descrição, arquivos
presentes no pacote, etc.

Há ainda outras opções que serão utilizadas para exibir uma busca sobre um determinado pacote,
com informações mais detalhadas. A tabela adiante ilustra essas opções:

Opção Opção GNU Descrição


Unix
i --info Exibe informações detalhadas de um
pacote, como nome, descrição,
revisão, data de criação e instalação,
tamanho e outras informações.
l --list
Exibe a lista de arquivos relacionados
ao pacote específico.
d --docfiles Exibe uma lista com os arquivos de
documentação relacionados a um
pacote, como README, páginas de
manual, exemplos de uso, etc.
-c --configfiles Exibe uma lista de arquivos de
configuração relacionados ao pacote
indicado.

Além do recurso de consultas disponibilizado pelo rpm, também é possível executar verificações
sobre a integridade geral dos pacotes. O rpm tem como base, para comparação e verificação de um
pacote, as informações presentes em seu banco de dados. Com isso, o rpm poderá indicar
problemas, certas vezes imperceptíveis, como arquivos alterados, permissões fora do padrão ou
arquivos corrompidos.
Opção Opção GNU Descrição
Unix
-V --verify Opção utilizada para fazer
<pacote> verificações em determinados
pacotes.

Nota: A opção –V poderá ser utilizada juntamente com as opções de consultas,


como a, f e p.

Dessa forma, é possível verificar um único pacote previamente instalado no sistema, ou todos os
pacotes instalados. Também é possível verificar um pacote .rpm ainda não instalado, ou apenas um
arquivo de configuração de um pacote qualquer.

O resultado da verificação exibido pela opção –V poderá ser bem detalhado.


Primeiramente, se nenhuma informação for exibida na verificação, o pacote está íntegro, porém, em
uma verificação, alguns caracteres poderão ser exibidos para identificar o problema encontrado.
Esses caracteres e suas respectivas descrições são:

Atributo Descrição
S O tamanho do arquivo é diferente do original.
M As permissões do arquivo foram alteradas.
5 A soma md5sum é diferente da original.
D Número Major/Minor do dispositivo não coincide com o
original.
L Link simbólico quebrado ou inválido.
U Usuário dono é diferente do original.
G O grupo é diferente do original.
T A hora de modificação é diferente da original.

Essa sequência de oito caracteres é a verificação executada. Caso um ponto (.) apareça no lugar do
atributo, significa que não há problemas. Caso uma interrogação (?) seja exibida, significa que o
teste não pôde ser efetuado.

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos

Exemplo:

# rpm –V samba-common
SM5..... c /etc/samba/smb.conf

No exemplo anterior, após a verificação do pacote samba-common, foram identificadas


alterações em seu respectivo arquivo de configuração, em que os atributos S, M e 5 foram exibidos,
identificando que o arquivo sofreu alterações em seu tamanho original, em suas permissões, e no
valor md5sum.

Vejamos o seguinte exemplo:


No exemplo anterior, propositalmente, foi alterada a permissão do arquivo de configuração do
pacote vim-common. Logo após isso, foi solicitada uma verificação e foram detectadas diferenças
na permissão original do arquivo, exibindo o atributo M.

Nota: Uma letra pode ser exibida após os atributos, para identificar o tipo do arquivo em que c
representa um arquivo de configuração, d um arquivo relacionado à documentação do pacote, e
nenhum caractere é atribuído a outros tipos de arquivos relacionados ao programa.

O comando alien

alien <opcoes> <tipo de pacote> <pacote>

O comando alien é utilizado para converter pacotes em formatos diferentes (por exemplo,
converter um pacote .deb e um pacote .rpm, entre outras combinações possíveis). O comando
alien surgiu pelo fato de certos pacotes não estarem disponíveis para a distribuição em uso e, para
evitar que o mesmo só possa ser instalado por meio da compilação, é feita uma conversão para o
formato desejado.

A seguir, temos as possibilidades de conversão para os formatos de pacotes e suas respectivas


dependências, para a execução da conversão:

Formato do pacote Dependências para conversão


.rpm (Red Hat) rpm
.deb (Debian) gcc, make, debmake, dpkg-dev e dpkg.
.pkg (Solaris) pkginfo e pkgtrans
.slp (Stampede Linux) lsb
Nenhuma dependência para a conversão
.tgz (Slackware)
do pacote.

Sobre a sintaxe do comando alien, a mesma poderá aceitar algumas opções, como:

Opção Opção GNU Descrição


Unix
-i --install Essa opção é responsável pela
instalação do pacote convertido e pela
remoção do pacote utilizado para a
conversão.
-k --keep-version Não altera a versão do pacote.
Opção Opção GNU Descrição
Unix
-v --verbose Exibe os comandos que são executados
durante a conversão do pacote

Para converter os pacotes nos formatos desejados, temos as seguintes opções:

Tipo de pacote Descrição


convertido
--to-deb Converte o pacote para o formato .deb.
--to-rpm Converte o pacote para o formato .rpm.
--to-tgz Converte o pacote para o formato .tgz.
--to-slp Converte o pacote para o formato .slp.
--to-pkg Converte o pacote para o formato .pkg.

Nota: Caso o formato da conversão não seja especificado, o pacote será convertido em um pacote
no formato .deb, que é o padrão.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

No exemplo a seguir, ocorreu a conversão de um pacote no formato .deb em um pacote no formato


.rpm.

O comando rpm2cpio

O comando rpm2cpio tem a função de listar o conteúdo de um pacote .rpm, exibindo a saída no
formato cpio. Esse comando aceita a utilização de caracteres curinga como o asterisco.

RPM
Com a adição da opção -i, é possível fazer a extração de um arquivo específico encontrado dentro
de um pacote. A opção -v mostra o progresso da operação.

.
No exemplo acima, extraimos o arquivo zypper.conf que está dentro do pacote de instalação do
zypper.
Ele é baixado na exata estrutura em que aparece no pacote, repare que foi criado a pasta ./etc/zypp e
o arquivo foi extraido para dentro desta pasta.

O gerenciador yum

Bastante parecido com os gerenciados apt-get e aptitude, o yum é usado nas distribuições Red
Hat. Traz como vantagem bem conveniente a possibilidade de instalação de um pacote a partir da
Internet e, como os outros gerenciadores, promove a resolução automática das dependências desse
programa. Seu arquivo de configuração é o /var/cache/yum.

Os repositórios verificados pelo yum possuem a extensão .repo e devem constar na lista de
diretórios encontradas na opção reposdir do arquivo de configuração.

A tabela a seguir mostra os principais comandos utilizados com o yum:

Comando Definição
search [pacote] Faz uma busca por um pacote determinado.
install [pacote] Instala o pacote determinado.
remove [pacote] Exclui o pacote determinado.
Exibe qual pacote fornece o recurso ou
arquivo determinado, independente desse
provides [recurso] pacote estar instalado ou não. É uma
alternativa para o comando yum
whatprovides [recurso].
Se usado com argumento, atualiza o pacote
determinado. Sem argumentos, atualiza
todos os pacotes disponíveis. Com o
update
subcomando --obsoletes, faz ainda a
verificação dos pacotes obsoletos durante a
atualização.
Executa a função do yum update, mas
upgrade também traz a opção de atualizar a versão da
distribuição.

O comando yumdownloader simplesmente baixa um pacote sem instalá-lo. Com a opção --source,
ele ainda copia o código-fonte do pacote no lugar do programa compilado.

Tópicos para revisão do capítulo

Atente para os tópicos a seguir. Eles devem ser estudados com muita atenção, pois
representam os pontos mais importantes do capítulo.
Nos sistemas GNU/Linux, os programas são disponibilizados em forma de pacotes que contêm
binários pré-compilados, arquivos de controle e configuração, bibliotecas e ocasionalmente sistemas
de listagem/checagem de dependências e scripts para configurações pós-instalação;

Os pacotes dos sistemas GNU/Linux podem ser administrados pelos gerenciadores de pacote,
responsáveis pela instalação, atualização e exclusão de programas em uma distribuição específica.
Para os pacotes Debian, os gerenciadores mais usados são o dpkg, o apt-get e o aptitude;

Os gerenciadores apt-get e aptitude, só podem automatizar a administração das dependências dos


pacotes, caso a origem desses pacotes esteja especificada de forma correta nos arquivos chamados
repositórios. Os repositórios poderão ser indicados por meio do arquivo /etc/apt/sources.list;

Os comandos para instalação de pacotes são apt-get install e aptitude install com o o nome do
pacote a ser instalado aparecendo como argumento;

É possível também realizar tarefas de inspeção dos pacotes com a ajuda dos diversos gerenciadores
existentes;

Para atualizar um programa que já esteja instalado, usam-se os comandos apt-get upgrade ou
aptitude upgrade;

Para remover pacotes, os comandos utilizados são apt-get remove ou aptitude remove;

O rpm (Red Hat Package Manager) é o gerenciador de pacotes em distribuições de base Red Hat e
possui a mesma função do comando dpkg, anteriormente apresentado. Entretanto, o rpm
gerenciará apenas pacotes com a extensão .rpm;

Bastante parecido com os gerenciados apt-get e aptitude, o yum é usado nas distribuições Red
Hat. Traz como vantagem bem conveniente a possibilidade de instalação de um pacote a partir da
Internet e, como os outros gerenciadores, promove a resolução automática das dependências desse
programa.

Laboratório 1
A. Atualizando fontes de pacotes no computador
1. Atualize suas fontes com apt
# apt-get update
2. Atualize a base com aptitude
# aptitude update

B. Instalando pacotes com no computador


1. Instale em seu computador o Lynx para navegação em modo texto
# apt-get install lynx
2. Instale em seu computador o DNSUTIL para administração da rede
# aptitude install dnsutils
3. instale agora o emacs no seu computador
# dpkg -i /root/pacotes/emacs_22.2+2-5_all.deb

C. Removendo pacotes do seu computador


1. Remova o pacote Lynx
# apt-get remove lynx
2. Remova agora o pacote dnsutils
# apititude remove dnsutils
3. Agora remova o emacs
# dpkg -r emacs
D. Fazendo pesquisa de pacotes na internet
1. Procure por pacotes do samba
# apt-cache search samba*
2. Procure agora por pacotes do Bind
# aptitude search bind9*
3. Verifique o status de pacotes do vim instalados no seu computador
# dpkg -l vim

E. Autalizando seu computador


1. Atualize seu computador com apt-get
# apt-get update
2. Atualize seu computador com aptitude
# aptitude update
3. Atualize sua distribuição
# apt-get dist-upgrade

Exercícios de Fixação
1. Através do comando 'rpm' qual o comando para exibir a lista de pacotes instalados ?
a) rpm -pq
b) rpm -qp
c) rpm -qa
d) rpm –list-package
e) rpm -inst-package
Alternativa Correta: C

2. Qual arquivo de configuração das fontes de pesquisa do apt?


a) /etc/apt.conf
b) /etc/sources.list
c) /var/cache/apt/sources.list
d) /var/cache/apt/apt.conf
e) /etc/apt/sources.list
Alternativa Correta: E

3. Qual comando uso para remover o pacote “emacs” com todos os arquivos de configuração?
a) dpkg -r emacs
b) dpkg -P emacs
c) dpkg –delete emacs
d) dpkg -lr emacs
e) dpkg -p emacs
Alternativa Correta: B

4. Qual comando uso para instalar um pacote via fontes externas em um servidor Red Hat?
a) rpm –install pacote
b) apt-get install pacote
c) yum install pacote
d) yum -ivh pacote
e) rpm -ivh pacote
Alternativa Correta: C

5. Qual comando você utiliza para verificar detalhes de pacotes instalados no Red Hat?
a) rpm -q pacote
b) dpkg -q pacote
c) rpm -info pacote
d) yum –info pacote
e) rpm -ivh pacote
Alternativa Correta: B
Capítulo 11 – Servidor X – Interface gráfica

Instrutor: Fique à vontade para criar exemplos onde achar necessário

 Verificação dos dispositivos de hardware compatíveis;


Introdução
 Instalação do X11;
 Inicialização do X11;
O servidor X é compatível com o sistema
Unix e permite que interfaces gráficas sejam
 Configuração do X11
desenvolvidas para usuários ou ambientes  Gerenciadores de display (display managers)
GUI (Graphical User Interfaces). Também
chamado de X Window System, X11 ou  Gerenciadores de janela (window managers)
simplesmente X, o servidor X é um
protocolo que possibilita o uso do sistema
 Exibição de informações sobre um servidor X;
de janelas e a interação do usuário com o  Exibição de informações sobre janelas;
sistema por meio de mouse e teclado em
uma máquina, remota ou não.  Controle do acesso ao servidor X;
 Utilização de um servidor X aninhado.
É dono de uma arquitetura originalmente
desenvolvida para uso em ambientes de
rede, daí o nome servidor X.

Tal sistema ganhou importância para desenvolvedores e administradores Linux na medida em que
houve considerável evolução dos aplicativos e expansão da quantidade de usuários iniciantes. A
disponibilidade de um ambiente gráfico que funcione sem prejudicar as atividades de seus usuários
torna o GNU/Linux e seus aplicativos sejam acessíveis a pessoas sem conhecimentos avançados da
arquitetura do sistema operacional.

Com esse servidor, as janelas são gerenciadas pelos gerenciadores de janela, (os window managers,
ou WM) e, assim, a estética gráfica delas difere dependendo de cada gerenciador. Enquanto isso,
configurações como mover janelas, desenhar na tela e a interação com o mouse e teclado são feitas
pelo GUI.

Verificando os dispositivos de hardware compatíveis

O servidor X costuma ser configurado de forma automática, mas há casos em que sua configuração
ou instalação deve ser realizada manualmente. Para isso, é necessário verificar os dispositivos de
hardware compatíveis, cuja lista está disponível no seguinte site:
www.x.org/wiki/Projects/Drivers.

Grande parte dos dispositivos de vídeo suporta o modo VESA Framebuffer, permitindo que o
dispositivo nesse modo seja usado mesmo quando apenas parcialmente compatível.
Instalando o servidor X

A instalação do Linux geralmente é acompanhada pela instalação do servidor X. No entanto,


existem casos em que devemos usar ferramentas de pacotes de distribuição para fazer essa
instalação.

Isso costuma ocorrer quando cada servidor tem uma distribuição específica instalada nele. O site
www.xorg.org disponibiliza o pacote xorg, com o qual adquirimos o X e que pode ser instalado
com o apt-get, o yum e o aptitude.

Iniciando o servidor X

Para iniciar o servidor X, basta digitar X na linha de comando.

Configurando o servidor X

Para que o servidor X seja configurado, precisamos editar o arquivo /etc/x11/xorg.conf, onde temos
acesso a informações sobre:

 Teclado;

 Mouse;
 Arquivo do sistema;

 Dispositivo de vídeo;

 Monitor.

Um arquivo básico de configuração é criado com uma sintaxe contendo a opção -configure e o
comando X, e pode sofrer ajustes para que o funcionamento do X seja aperfeiçoado. A seguir, a
sintaxe desse arquivo:

# X -configure

O servidor X deve executar algumas atividades, a saber:

 Carregar os módulos de dispositivo;

 Testar o driver;

 Salvar o resultado no diretório do usuário, geralmente /root, no arquivo xorg.conf.new.

Seções do arquivo xorg.conf

Dividido em seções, o arquivo xorg.conf é composto por informações referentes a dispositivos


como teclado, placa de vídeo e mouse. Essas informações determinam os arquivos de fontes e
módulos que serão carregados, entre outros recursos utilizados pelo X.

As configurações são, na maioria das vezes, realizadas de forma automática. Certas dificuldades,
no entanto, demandam uma configuração manual, por isso, é importante conhecer essas seções, que
são:

 Module: Especifica os módulos que serão carregados de forma dinâmica com Load “nome do módulo”;

 ServerFlags: Engloba opções, no formato Option “Nome” “Valor”, que são universais para esse servidor;

 Files: Contém caminhos como RGBPath, ModulePath e FontPath – este último é responsável por identificar
onde as fontes podem ser encontradas –, indispensáveis ao X;

 InputDevice: Cada uma dessas seções indica um dispositivo de entrada. Existem opções que podem ser
definidas com Option, pois não são obrigatórias. Elas são:

 Option “CorePoint”: O mouse primário é o dispositivo em questão;

 Option “CoreKeyboard”: Neste caso, o dispositivo é o teclado primário;


 Option “Device” “/dev/arquivo_do_dispositivo”: Determina o caminho para o dispositivo.

Os itens indispensáveis desta seção, por outro lado, são:

 Identifier: Identifica um dispositivo por meio de um nome único;

 Driver: Mouse e Keyboard são seus valores mais comuns.

 Device: Indica um dispositivo de vídeo, podendo ter mais de uma seção e assim identificar mais de um desses
dispositivos. Existem alguns itens, como BusID e VideoRam (Option “BusID” “PCI:1:0:0” e Option
“VideoRam” “8192” são seus respectivos exemplos); entre os itens existentes, os obrigatórios são:

 Identifier: Identifica um dispositivo por meio de um nome único;

 Driver: Determina o driver, sendo que os disponíveis são encontrados em /usr/lib/xorg/modules/drivers/.

 Monitor: Das seções deste tipo, a Identifier é a única obrigatória. É possível haver mais de uma seção
Monitor;

 Screen: Demanda a existência das opções Identifier e Device, e engloba o monitor e o dispositivo. O arquivo
pode possuir mais de uma seção desta;

 ServerLayout: Define o display, sendo assim a seção mais importante. Obtemos uma configuração completa
com essa seção junto da seção Screen e da InputDevice;

 Display: Determina a resolução que as profundidades devem usar, por exemplo.

A seguir, podemos conhecer o formato em que essas seções são divididas:

Section “nome da seção”


Item_1 “Valor item 1”
Item_2 “Valor item 2”
...
EndSection

Instalando fontes

As fontes usadas pelos aplicativos são obtidas por meio do X. Os sistemas básicos responsáveis por
isso são o Core e Xft, cuja principal diferença se encontra na manipulação das fontes – ela ocorre no
servidor no caso do Core, e no cliente quando se trata do Xft.

No sistema Xft, a instalação das fontes é feita mediante a cópia delas para o diretório padrão ou no
pessoal, respectivamente, usr/share/fonts/* e ~/.fonts/. As fontes que podem ser instaladas estão
listadas a seguir, e têm o recurso anti-aliasing, com o qual os cantos ficam arredondados e o
serrilhado é diminuído.

 Type1;

 TrueType;

 OpenType;

 CID;

 Speedo.

Quando uma sessão X é iniciada, ocorre uma atualização automática do cache – o comando fc-
cache permite que isso seja feito manualmente, se for o caso. Tal atualização é necessária para que
possamos usar a fonte oferecida pelo sistema Xft.

Para modificar as funções desse sistema, podemos recorrer ao:

 Arquivo de configuração global /etc/fonts/fonts.conf;

 Arquivo de configurações por usuário, no diretório pessoal, .fonts.conf.

O servidor de fontes Xfs permite que, em um servidor de rede, apenas um servidor tenha as fontes
utilizadas pelas outras máquinas. O arquivo de configuração /etc/X11/fs/config possui algumas
opções, descritas na tabela a seguir, e é o padrão para o Xfs.

Opção Descrição
O limite de clientes com os quais o Xfs se conecta
client-limit
é definido nesta opção.
Esta opção representa os caminhos dos diretórios
catalogue
nos quais as fontes estão armazenadas.
O protocolo em que o servidor não deve operar é
no-listen
determinado nesta opção.
alternate-servers Demais servidores de fontes.

O servidor de fontes pode precisar da liberação da porta TCP padrão de conexão, a porta 7100. Isso
pode ocorrer quando o tráfego de rede é controlado.

Como vimos, um dos itens do arquivo /etc/X11/xorg.conf: é o FontPath, no qual podemos incluir
o caminho para o servidor – isso permitirá que o fornecimento de fontes seja usado pelo
computador em que o servidor Xfs trabalha. Dessa forma, temos:

FontPath “Unix/:7100”

Inserimos, também, uma linha nos demais computadores. Assim, caso uma conexão TCP/IP seja
utilizada, teremos a seguinte sintaxe, onde numero_ip deve ser substituído pelo número IP do
computador em questão:

FontPath “tcp/numero_ip:7100”

Variável DISPLAY

Um servidor X remoto pode exibir as janelas de um aplicativo sendo executado localmente. O local
onde as janelas serão exibidas é identificado com a variável DISPLAY.

A sintaxe para definição dessa variável é a seguinte:

<nome ou IP>:<monitor e dispositivo de entrada>

Temos duas partes nessa variável, descritas como:

 Anterior ao sinal de dois pontos: O nome ou o número IP da máquina é identificado;

 Posterior ao sinal de dois pontos: É feita a identificação do display da máquina.

No valor display, são identificados um monitor e um dispositivo de entrada, como teclado e mouse.
Geralmente, cada máquina possui apenas um display, mas é possível que essa quantidade seja
maior.

No caso de possuir apenas um display, o valor da variável será :0.0, pois contamos a partir do
número zero. Assim, as janelas serão exibidas tanto nesse display quanto no computador local,
sendo que temos localhost quando omitido o valor antes do sinal de dois pontos.

A variável DISPLAY deve ser redefinida se quisermos abrir, no computador local, a janela de um
programa remoto, como exemplificado a seguir.
No computador Remoto, devemos dizer para qual computador queremos enviar as janelas e também
definir a saída padrão para este envio.

Para isto, precisamos modificar a variável DISPLAY apontando para o destino


$ export DISPLAY=192.168.0.5:0.0
Onde 192.168.0.5 é o computador que irá abrir as janelas remotamente e 0.0 é a saída padrão, ou
seja, na tela

Na estação que receberá as telas será necessário autorizar esta conexão, para isto usamos o comando
xhost adicionando (+) ou removendo (-) o servidor, como no exemplo abaixo
$ xhost +192.168.0.1
Neste exemplo estou autorizando o computador com IP (192.168.0.1) a enviar as janelas para minha
tela.
Gerenciadores de display (display managers)

Gerenciadores de display, também conhecidos como display managers, são responsáveis pela
identificação do usuário e inicialização do X11. Na tabela a seguir, podemos conhecer os principais
gerenciadores de display:

Gerenciador de display Descrição


xdm Este gerenciador é o padrão do X, e a localização
de seu arquivo de configuração é etc/X11/xdm/*.
kdm Padrão do KDE, seu arquivo de configuração se
encontra em /usr/share/config/kdm/*.
gdm Padrão do Gnome, este gerenciador tem seu
arquivo de configuração em /etc/gdm.

O XDMCP (X Display Manager Control Protocol) é um protocolo de comunicação de redes


bastante rápido que atua como um protocolo de compartilhamento de interface gráfica no sistema
operacional Linux.

Nesse protocolo, as imagens e gráficos são transmitidos na forma de comandos. Estes não
consomem muita banda de rede e são processados rapidamente pelo destinatário e, mesmo que as
imagens sejam executadas a distância, o usuário não perceberá a demora na atualização das
mesmas.

Com ele, que por padrão é desativado, o login pode ser realizado localmente e por rede. A
solicitação de conexão será feita pela máquina remota, com o comando X -query servidor, sendo
que o login por rede necessita do xdm ativo e configurado.

Com o arquivo Xsetup, não é necessário esperar a tela de login ser exibida para realizar
configurações em imagens de fundo e cores, por exemplo. Alterações em mensagens, cores e fontes
do gerenciador xdm são feitas por meio da edição do arquivo /etc/X11/xdm/Xresources.

A seguir, temos um exemplo de Xresources:


O acesso remoto obtido por meio desse protocolo é controlado com o arquivo
/etc/X11/xdm/Xaccess.

Os arquivos de configuração do xdm são englobados pelo principal deles, o xdm-config. Com esse
arquivo, podemos efetuar a liberação ou bloqueio do login remoto, o que impedirá que pedidos
(diretos ou indiretos) de conexão não sejam respondidos.

A seguir, temos a linha necessária para o bloqueio do login remoto por XDMCP:

DisplayManager.requestPort: 0

Como visto, além do gerenciador de display xdm, temos também os gerenciadores kdm e o gdm.
Enquanto o arquivo de configuração do kdm é /usr/share/config/kdm/kdmrc, os arquivos do gdm
são /etc/gdm/gdm.conf e /etc/gdm/Init/Default, correspondente ao Xresources.

Nota: No final da inicialização, o ambiente gráfico X costuma ser iniciado por padrão nas distros
Linux, e no ambiente gráfico é exibida a tela de login.

Gerenciadores de janela (window managers)

Com gerenciadores de janela (window managers), tanto a aparência quanto a localização das janelas
do X são administradas. Um dos diferenciais do GNU/Linux é permitir que o próprio usuário
gerencie as janelas, em vez de conceder esse controle ao sistema, como é feito pelos sistemas Apple
e Microsoft, que oferecem apenas uma aparência básica.

No GNU/Linux, um computador pode ter vários gerenciadores de janela, cabendo ao usuário usar o
que mais lhe convir. Entre os gerenciadores, temos: AfterSteps, Enlightenment, Kwin (KDE),
Blakbox, Evilwn, IceWM, FluxBox, SawFish, FVWM, Ion, Metacity (Gnome), WMN,
OpenClasses (Sun), xfce e twm.

Os gerenciadores de janela são diferentes entre si no que diz respeito a, por exemplo:
 Recursos requisitados do computador;

 Customização de funcionalidades e da aparência;

 Configuração de menus;

 Interface gráfica;

 Capacidade de uso de vários computadores.

Nota: Muitas distros Linux atuais disponibilizam ferramentas de acessibilidade voltadas para
usuários com necessidades especiais, como problemas motores e visuais.

Exibindo informações sobre um servidor X

Para conhecermos as informações a respeito do servidor X, podemos recorrer ao Xdpyinfo. Com


esse utilitário, dados sobre os seguintes fatores são exibidos:

 Telas e visuais;

 Capacidade de um servidor;

 Valores predefinidos para parâmetros que a comunicação entre cliente e servidor utiliza.

Acima usamos o comando xdpyinfo para extrair todas as informações, combinamos com o comando
more para facilitar a leitura
Neste exemplo, extraimos do comando xdpyinfo apenas informações sobre a resolução

Exibindo informações sobre janelas

As informações sobre janelas são exibidas com o Xwinfo. Esse utilitário possui algumas opções,
entre as quais a –stats é a opção padrão em caso de nenhuma das outras serem escolhidas. A opção
escolhida determinará as informações apresentadas.

Criar exemplos do uso de xwininfo com suas principais opções


Acima usamos o xwininfo com a opção -help, desta forma podemos ver todas as opções

disponíveis.

Como exemplo, utilizamos a opção -root para exibir detalhes da tela principal.
Controlando o acesso ao servidor X

O acesso ao servidor X é feito usando o programa xhost, com o qual é possível determinar quais
nomes de usuário ou de host poderão ou não se conectar ao servidor, isto é, os nomes que serão
excluídos ou adicionados.

Criar exemplos do uso de xhost com suas principais opções

No exemplo acima, com o comando xhost, adicionamos o computador com nome de aluno2 na lista
de hostnames permitidos. Em seguida este mesmo hostname foi removido.

Utilizando um servidor X aninhado

Usando a variável DISPLAY, uma saída gráfica é redirecionada ao Xnest, servidor X aninhado que
a recebe. Com esse servidor, as solicitações são redirecionadas ao servidor cliente, o qual é exibido,
na sessão sendo executada, em outra janela. O servidor X pai é, então, necessário para o
funcionamento das fontes.

Neste exemplo, foi criada com Xnest uma outra saida de video “:1” (tela ao fundo) onde poderia ser
carregado um desktop remoto ou uma aplicação remota.
Tópicos para revisão do capítulo

Atente para os tópicos a seguir. Eles devem ser estudados com muita atenção, pois
representam os pontos mais importantes do capítulo.

 Também conhecido como X Window System, X11 ou simplesmente X, o servidor X é um protocolo que
possibilita o uso do sistema de janelas e a interação do usuário com o sistema por meio de mouse e teclado em
uma máquina, remota ou não;

 A configuração do servidor X costuma ser automática, mas há casos em que isso deve ser feito manualmente.
Para tanto, é necessário verificar os dispositivos de hardware compatíveis. O modo VESA Framebuffer é
suportado pela maioria dos dispositivos de vídeo;

 A instalação do Linux geralmente é acompanhada pela instalação do servidor X. No entanto, as vezes devemos
usar ferramentas de pacotes de distribuição (apt-get ou yum, por exemplo) para fazer essa instalação;

 A inicialização do servidor X é realizada ao digitarmos X na linha de comando;

 Para que o servidor X seja configurado, precisamos editar o arquivo /etc/x11/xorg.conf, onde temos acesso a
informações sobre teclado, mouse, arquivo do sistema, dispositivo de vídeo e monitor. O servidor X deve
carregar os módulos de dispositivo, testar o driver e salvar o resultado no arquivo xorg.conf, que é dividido em
seções. Por meio do X, obtemos as fontes usadas pelos aplicativos, sendo que os sistemas básicos responsáveis
por isso são o Core e o Xft;

 Os gerenciadores de display, também conhecidos como display managers, são responsáveis pela identificação
do usuário e inicialização do X11. Os principais gerenciadores de display são xdm (padrão do X), kdm e gdm.
Com o protocolo de compartilhamento XDMCP, as imagens e gráficos são transmitidos na forma de comandos
sem consumir muita banda de rede e com processamento rápido;

 Gerenciadores de janela, ou Window managers, permitem que tanto a aparência quanto a localização das
janelas do X sejam controladas pelo próprio usuário. No GNU/Linux, um computador pode ter vários
gerenciadores de janela, cabendo ao usuário usar o que mais lhe convir. Os gerenciadores de janela são
diferentes entre si no que diz respeito a, por exemplo, recursos requisitados do computador, customização de
funcionalidades e da aparência, configuração de menus, interface gráfica e capacidade de uso de vários
computadores;

 As informações a respeito do servidor X são exibidas com o Xdpyinfo, utilitário que apresenta dados sobre
telas e visuais, a capacidade de um servidor e valores predefinidos para parâmetros que a comunicação entre
cliente e servidor utiliza;

 As informações sobre janelas são exibidas com o Xwinfo. Esse utilitário possui algumas opções, entre as quais
a –stats é a opção padrão em caso de nenhuma das outras serem escolhidas. A opção escolhida determinará as
informações apresentadas;

 O acesso ao servidor X é feito usando o programa xhost, com o qual é possível determinar quais nomes de
usuário ou de host poderão ou não se conectar ao servidor, isto é, quais nomes serão excluídos ou adicionados;

 Usando a variável DISPLAY, uma saída gráfica é redirecionada ao Xnest, sevidor X aninhado com o qual as
solicitações são redirecionadas ao servidor cliente, o qual é exibido, na sessão sendo executada, em outra
janela.

Laboratório 1
A. Executando o servidor X
1. Instale o xorg no computador.
# aptitude -y install xorg
2. Verifique as opções do comando X usando o help
# X –help
3. Verifique se há erros na idenficação de hardware
# X -probeonly
4. leia o log de resultados do probe
# cat /var/log/Xorg.0.log |more
5. Execute a configuração do X
# X -configure
6. Verifique a configuração do X
# cat /etc/X11/xorg.conf |more
7. Teste sua configuração do X
# X -config /root/xorg.conf.new
8. Teste sua configuração do X com o dpkg
# dpkg-reconfigure xserver-xorg
9. Copie o arquivo de configuração criado para utilização do X
# cp /root/xorg.conf.new /etc/X11/xorg.conf
10. Inicialize o X
# X
11. Para fechar o X, pressione CTRL+ALT+BackSpace

B. Analisando as configurações
1. Analise as configurações do arquivo xorg.conf. Identifique as seções.
# cat /etc/X11/xorg.conf |more
2. Analise o arquivo de configuração de fontes e fique atento as seções:
Font directory list
Font cache directory list
Rescan
# cat /etc/fonts/fonts.conf |more

C. Instalando um Gerenciador de Janelas


1. Instale o WindowMaker
# aptitude install wmaker
2. Inicie o X
# X
3. Saia do X e inicie o wmaker
# startx
4. Clique com o botão direito na tela, depois clique
Info > Info Panel
5. Clique com o botão direito na tela, depois clique
Session > Exit > Confirme Sair
6. Instale agora o KDE
# aptitude update
# aptitude install kdebase
7. Inicie o KDE com o comando:
# startx
8. Instale o Gnome.
# aptitude install gdm gnome xfce4
9. Inicie novamente seu ambiente gráfico
# startx

D. configurando um Servidor X Remoto


1. Edite em seu computador o arquivo /etc/gdm/gdm.conf
# vi /etc/gdm/gdm.conf
2. Localize a seção [xdmcp] e habilite-a
[xdmcp]
Enable=True
3. Reinicie o gdm
# /etc/init.d/gdm stop
# /etc/init.d/gdm restart
4. Verifique se o serviço está rodando na porta udp 177 como era previsto
# netstat -nltup |grep 177
# fuser 177/udp
5. De permissão para seu colega de sala conectar
# xhost +hostname [nome da maquina do colega]

E. Acessando um Servidor X Remoto


1. Chame o ambiente X do colega
# X -query [IP do Colega] :1

Exercícios de Fixação
1. Qual arquivo e configuração eu ajusto teclado e resolução de video o ambiente X?
a) xorg.conf
b) x.conf
c) Xresources
d) kdm.conf
e) gdm.conf
Alternativa correta: A

2. Qual comando utilizo para configurar automaticamente o ambiente X?


a) Xconfigure
b) X -configure
c) Xconfigure
d) x -configure
e) xconf
Alternativa Correta: B

3. Qual comando posso utilizar para estar a configuração do X?


a) dexconf
b) xconf
c) X -config
d) xconfig
e) X
Alternativa Correta: C

4. Qual a porta que o Servidor X utiliza?


a) 177/tcp
b) 1777/tcp
c) 127/udp
d) 177/udp
e) 1777/udp
Alternativa Correta: D
5. Qual comando utilizao para atualizar o banco de dados de fontes?
a) fc-cache
b) fccache
c) fontesdb
d) atualiza-fonts
e) fonts-update
Alternativa Correta: A
Capítulo 12 – Administração de usuários e grupos

Instrutor: Fique à vontade para criar exemplos onde achar necessário ou substituir os existentes

 Tipos de usuário;
Introdução  Permissões de acesso a arquivos e diretórios;
 Arquivos de administração de usuários e grupos;
O GNU/Linux é um sistema multiusuário e,
 Administração de usuários;
portanto, possui um esquema de permissões  Administração de grupos.
que provê a privacidade e/ou
compartilhamento de arquivos entre
usuários. Esse esquema de permissões é
parte fundamental de um sistema que
fornece recursos para mais de uma pessoa,
garantindo seu funcionamento pleno e sua
segurança por meio de restrições de acesso a
dados sensíveis, tanto pertencentes ao próprio sistema como a diferentes usuários.

Tipos de usuário

É possível considerarmos três tipos distintos de usuários em um sistema GNU/Linux: usuário


administrador (superusuário), usuários de sistema e usuários comuns.

 Usuário administrador

Em sistemas Unix e Linux, o superusuário do sistema tem o nome de root, pois ele tem total poder
dentro do sistema, atuando como seu administrador e definindo regras e tipos de permissão que os
demais usuários poderão acessar ou alterar. Além disso, o usuário root tem total poder para interagir
diretamente com o kernel e, assim, possibilitar que o sistema atue de acordo com a sua necessidade.
Dentro do sistema, apenas o usuário root tem permissão para alterar o estado de serviços e criar
regras de firewall, entre outras funções.

Não é aconselhável trabalhar com o usuário root, pois, como foi citado, ele praticamente não possui
restrições no sistema. Dessa forma, é indicado que o
administrador do sistema trabalhe como um usuário comum e, só em caso de necessidade, execute
tarefas como superusuário.

 Usuários comuns

Esse é o tipo de usuário adequado para a utilização e operação comuns no sistema GNU/Linux.
Tanto usuários comuns como administradores devem possuir, cada um, uma conta desse tipo para
utilizar o sistema.
Esses dois tipos de usuários, administradores e comuns, são constituídos por cinco elementos
básicos: nome, senha, diretório home, shell e grupo primário. A vinculação de um usuário comum a
um grupo é imprescindível devido ao funcionamento do esquema de permissões dentro do sistema.

Recomenda-se o uso criterioso das senhas entre esses dois tipos de usuários, para garantir a
segurança do sistema contra acessos não desejados que podem por em risco sua integridade.

 Usuários de sistema

Os usuários de sistema têm a função de controlar serviços, e não devem possuir shell válida, e nem
senhas, como, por exemplo, o www-data, que controla o servidor web Apache. Não há necessidade
de efetuar logon no sistema com esse tipo de usuário.

Nota: Em sistemas GNU/Linux podem existir usuários normais que possuem alguns privilégios
adicionais em relação a certas aplicações, e são chamados administradores. Eles, porém, não vêm
configurados como padrão no sistema.

Permissões de acesso a arquivos e diretórios

Como diversos outros sistemas seguros, o GNU/Linux utiliza um esquema de permissões de acesso
para proteger o sistema do acesso indevido, seja de programas ou de usuários não autorizados,
impedindo que arquivos sejam apagados desnecessariamente ou o funcionamento de um programa
mal intencionado. A segurança do GNU/Linux também impede o envio não permitido de arquivos
para outros locais e o fornecimento não desejado de acesso de rede que possibilitaria a invasão do
sistema por outros usuários.

Usuários do GNU/Linux, sejam mal intencionados ou por engano, podem ser impedidos de instalar
programas cuja função é desconhecida e que podem causar sérios danos de larga escala, que afetem
os arquivos, computadores ou até toda uma empresa. Para isso, o sistema GNU/Linux define o
acesso aos arquivos segundo as definições seguintes:

 Dono: Quem cria o arquivo, ou diretório, é considerado seu dono, e é identificado pelo mesmo nome de
usuário utilizado para ter acesso ao sistema, o user id (UID). O dono é quem define e modifica as permissões
de acesso do arquivo criado. O arquivo /etc/passwd armazena a identificação de usuário ao qual o arquivo
pertence. Já o arquivo /etc/group armazena a identificação de grupo ao qual o arquivo pertence;

 Grupo: A divisão em grupos nos permite fornecer acesso a certos arquivos a um conjunto de usuários, além do
dono. Usuários podem participar de apenas um ou de diversos grupos simultaneamente, e acessam os arquivos
que pertencem a cada um deles. A identificação do grupo é chamada de GID (group id). Como padrão, um
usuário recém-criado que não teve nenhum grupo definido para fazer parte vai ser automaticamente inserido no
grupo de mesmo nome do seu grupo primário (conforme o parâmetro USERGROUPS=yes, do arquivo
/etc/adduser.conf);

 Outros: Usuários que não são donos e nem pertencem ao grupo do arquivo são categorizados nesse terceiro
tipo.

Essas três categorias apresentam, cada uma, três tipos de permissões de acesso. Veremos os tipos de
permissões na seção seguinte.
Tipos de permissões

São três os tipos de permissões que o GNU/Linux aplica ao dono, grupos e outros usuários. Eles são
os seguintes:

 r: Para arquivos, permite sua leitura, e para diretórios, permite que seu conteúdo seja listado (utilizando, por
exemplo, o comando ls);

 w: Para arquivos, permite gravação, e para diretórios, permite a gravação de seu conteúdo (arquivos ou outros
diretórios). A remoção de arquivos e diretórios só é possível com essa permissão ativada;

 x: Para arquivos, permite que sejam executados, e para diretórios, habilita seu acesso por meio do comando cd.

Por meio do comando ls –la, é possível visualizarmos essas permissões de acesso a um arquivo ou
diretório. Vejamos a seguir exemplos de saída para um arquivo e para um diretório:

Instrutor: Substituir estes exemplos

Acima, vemos arquivos listados com informações como as permissões, proprietários, grupos, etc.

Para entendermos melhor o funcionamento, dividimos o comando das permissões em quatro partes.
A primeira parte é constituída por um caractere. As três partes seguintes são formadas cada uma por
três caracteres, que são as permissões.

O primeiro caractere pode ser um dos seguintes encontrados na tabela:

Caractere Função
- Indica a listagem de um arquivo comum.
d Indica um diretório.
l Indica um link simbólico.
p Indica um pipe nomeado.
s Indica um socket
c Indica um dispositivo de caractere.
b Indica um dispositivo de bloco.

As partes seguintes da sintaxe indicam, nessa ordem, as permissões do usuário dono do


arquivo, permissões de grupo e permissões para outros usuários, e cada uma das partes é
composta por três caracteres, r, w e x. Caso uma ou mais permissões não forem
definidas, substitui-se um dos caracteres por um – (hífen). A presença ou não das letras r,
w e x indica as permissões que o arquivo ou o diretório tem.

Após o comando das permissões, encontramos na sintaxe um número, que vai definir
quantos links simbólicos o arquivo ou o diretório possui, e logo em seguida, a indicação
do usuário dono do arquivo seguido do grupo ao qual ele pertence.

Atribuindo permissões

O comando chmod pode ser utilizado para atribuirmos as permissões de acesso de


usuários ou grupos a arquivos e diretórios, seja de leitura, gravação e/ou execução. Com
exceção de diretórios definidos com a permissão de grupo s, um arquivo quando criado
sempre tem como dono quem o criou e pertence ao seu mesmo grupo.

chmod [opcoes] [permissoes] <diretorio/arquivo>

Onde diretorio/arquivo é referente ao diretório ou arquivo que terá sua permissão


alterada.

A tabela a seguir descreve as principais opções do comando chmod:

Opção Descrição
-v Mostra todos os arquivos que estão sendo processados;
-f Oculta a maior parte das mensagens de erro;
-c Mostra apenas os arquivos que tiveram as permissões alteradas;
Muda permissões de acesso do diretório ou arquivo no diretório
-R
atual e subdiretórios;
Em que:
 ugoa: Controla que nível de acesso será mudado. Especificam, em
ordem, usuário (u), grupo (g), outros (o) e todos (a);

ugoa+-
 +-= : O sinal + coloca a permissão, o sinal - retira a permissão do
arquivo e o sinal = define a permissão exatamente como
=rwxXst especificado;

 rwx: A letra r indica permissão de leitura do arquivo, w indica


permissão de gravação e x permissão de execução (ou acesso a
diretórios).

As permissões de links simbólicos devem ser mudadas no arquivo alvo do link, pois o
chmod não altera essas permissões.

Duas sintaxes são possíveis para o comando chmod, como veremos a seguir:

 Sintaxe literal

Vejamos o exemplo abaixo:

Instrutor: Substituir este exemplo

Acima, após dar o comando ls –l para ver as propriedades dos arquivos, note que a
permisão é apenas de execução para todos (---x—x—x)
Logo em seguida adicionamos a permissão de rw para o proprietário (root) do arquivo,
tornando a permissão –rwx—x--x

Essa sintaxe define o esquema de permissões, onde cada caractere do parâmetro tem sua
função. O primeiro caractere indica para quem as permissões estão sendo alteradas,
conforme vemos a seguir:

 A letra u indica o próprio dono;

 A letra g indica o grupo;

 A letra o indica outros;

 A letra a indica todos.


Seguindo esse primeiro caractere, podemos encontrar um sinal + ou -, que significam,
respectivamente, adicionar ou remover a permissão. A terceira parte do parâmetro pode
conter até três caracteres:

 A letra r, para garantir a leitura;

 A letra w, para garantir a gravação;

 A letra x, para garantir a execução.

Assim, o exemplo anterior garante as permissões de leitura e escrita para o


usuário dono do arquivo. Vejamos mais um exemplo:

Instrutor: Substituir este exemplo

Esse comando retira a permissão de escrita para os usuários pertencentes ao


mesmo grupo ao qual o arquivo pertence. As demais permissões não são alteradas.

 Sintaxe numérica (octal)

A sintaxe numérica, ou modo octal, é um conjunto de oito números que representam cada
uma um tipo diferente de acesso. Seu uso é mais simples que o da sintaxe literal pois nos
permite gerenciar diretamente as permissões do dono, do grupo e de outros usuários ao
invés de gerenciar as permissões de cada um separadamente.

O parâmetro que define as permissões no modo octal é composto de três números que
podem ir de 0 a 7, e correspondem às permissões para o dono, para o grupo e para outros
usuários.

Para entendermos mais facilmente como as permissões de acesso octais funcionam,


devemos considerar os seguintes valores para cada tipo de permissão:

 1: Executar

 2: Gravar

 4: Ler

A partir desses valores, podemos chegar a todos os outros possíveis no modo octal,
somando os valores numéricos referentes às permissões desejadas. Vejamos a seguir o
raciocínio:

 0: Nenhuma permissão de acesso. Equivale a –rwx;

 1: Permissão de execução (x);

 2: Permissão de gravação (w);

 3: Permissão de gravação e execução (wx). Equivale à permissão 2+1, ou seja, os valores de gravação (2) e
execução (1) somados;

 4: Permissão de leitura (r).

 5: Permissão de leitura e execução (rx). Equivale à permissão 4+1, ou seja, os valores de leitura (4) e execução (1)
somados;

 6: Permissão de leitura e gravação (rw). Equivale à permissão 4+2, ou seja, os valores de leitura (4) e gravação (2)
somados;

 7: Permissão de leitura, gravação e execução. Equivale a +rwx (4+2+1), ou seja, os valores de leitura (4), gravação
(2) e execução (1) somados;

Nota: Para dono e grupo, devemos multiplicar as permissões acima por 100 e 10, respectivamente.

Para as permissões de acesso especiais, devemos usar:

 1000: Salva imagem do texto no dispositivo de troca;

 2000: Ajusta o bit setgid na execução;

 4000: Ajusta o bit setuid na execução;

 5000: Salva imagem do texto e ajusta o bit setuid (equivale a 1000+4000 / Salvar texto + bit setuid);

 6000: Ajusta o bit setuid e setgid (equivale a 4000+2000 / setuid + setgid).

Podemos praticar com alguns exemplos:


Veja acima que o arquivo tinha permissão de controle total para todos os usuários (rwx) , logo em
seguida, demos a permissão 755 para o arquivo, tornando a permissão (rwxr-xr-x). Isto mantem o
controle total para o proprietário, mas tira o poder de escrita dos demais.

umask

O comando umask é utilizado para definir a máscara de criação de arquivos para o usuário. Com
ela, definimos permissões padrão de um arquivo ou diretório quando os criamos, por meio de 3
números. As permissões definidas por esses números serão aplicadas ao arquivo ou diretório quando
eles forem criados ou copiados para um novo local, de acordo com o tipo de usuário (dono, grupo
ou outros usuários).

Sua sintaxe é:

umask <valor>

Nota: Para retornar o valor do umask atual, devemos digitar umask sem parâmetros.

Cada tipo de arquivo, seja ele binário (executável) ou texto, recebe um efeito diferente de umask,
conforme podemos visualizar na tabela seguinte:

Arquivo
umask Diretório
Binário Texto
0 r-x rw- rwx
1 r-- rw- rw-
2 r-x r-- r-x
3 r-- r-- r--
4 --x -w- --x
5 --- -w- -wx
6 --x --- --x
7 --- --- ---

Programas que criam arquivos e/ou diretórios temporários utilizam muito o umask, pois desta
forma o acesso de outros usuários pode ser bloqueado desde a criação do arquivo, sendo
desnecessário o uso do chmod.

Instrutor: Substituir os valores de exemplo marcados em rosa

Vejamos um exemplo: um arquivo texto gerado com o comando umask 027 ;touch testeumask.txt
receberá as permissões -rw-r—---. Isso significa que, respectivamente, o dono terá permissões rw-
(valor 0), o grupo terá permissões r- (valor 2) e os outros usuários não terão permissões de acesso
--- (valor 7).

Já em um arquivo binário copiado com o comando umask 027;cp /bin/ls /tmp/ls vai receber as
seguintes permissões: -rwxrw----. Isso significa que, respectivamente, o dono terá permissões rwx
(valor 0), o grupo terá permissões rw- (valor 2) e os outros usuários não terão permissões de acesso
--- (valor 7).
Devemos tomar cuidado com as atribuições do umask, pois um erro pode causar problemas de
acesso a arquivos e diretórios. Na maioria das distribuições atuais, o valor padrão do umask é 022.
O umask padrão no sistema Debian é a 022.

Caso não tenhamos acesso à tabela anterior, podemos recorrer à seguinte regra:

 Cálculo da máscara para um diretório:

777 (permissão total do diretório) menos 022 (valor padrão da máscara no Debian)

 Cálculo da máscara para um arquivo:

777 (permissão total do objeto) menos 111 (valor padrão da máscara no Debian)

SUID e SGID

Esse conjunto de permissões especiais é formado por:

 SUID (Set User ID Bit)

Essa permissão pode ser uma grande ameaça à segurança, pois, quando atribuído a um arquivo
executável, dá permissões de usuário dono a um usuário qualquer, na execução desse comando.
Caso esse comando pertença a um usuário root, o usuário comum terá sobre ele todas as permissões
que seu dono possui.

 SGID (Set Group ID Bit)

Essa permissão é atribuída a diretórios, e faz com que o conteúdo gravado dentro do diretório herde
o seu grupo, e não o grupo do usuário que o criou, quando um arquivo é criado dentro de um
diretório com essa permissão ativada. O SGID é muito utilizado em servidores de arquivos e
quando usamos diretórios para grupos de trabalhos.

 Sticky Bit

O Sticky Bit, a partir da versão 2.6 do kernel do Linux, tem apenas a função de fazer diretórios de
utilização comum a todos os usuários, como no /tmp, visto que a partir dessa série do kernel,
otimizações de acesso a conteúdos são feitas diretamente pelo mesmo. Essa permissão, quando
ativada em um diretório, impede que quaisquer usuários excluam o arquivo ou diretório, mesmo que
seu criador atribua permissões totais para todos os usuários. Apenas o usuário root tem esse controle
sobre o arquivo ou diretório.

O procedimento para atribuirmos essas permissões especiais é o mesmo utilizado para as


permissões comuns, através do comando chmod, porém utilizamos quatro caracteres, onde o
primeiro é o bit referente à permissão especial, e os outros três são a permissão padrão. A tabela a
seguir mostra o valor de cada uma dessas permissões:

Nome Valor
SUID 4
SGID 2
Sticky Bit 1

Vejamos um exemplo:

# chmod 4750 aplicativo

Onde 4 é o valor relativo ao SUID, os outros três números (750), as permissões padrão e aplicativo,
o comando a ser executado.

Arquivos de administração de usuários e grupos

No que diz respeito à administração de usuários e grupos, podemos utilizar quatro arquivos básicos,
que veremos a seguir:

/etc/passwd

O arquivo /etc/passwd mantém uma linha relativa a cada usuário cadastrado, separadas por : (dois
pontos). Vejamos um exemplo de como se compõe esse arquivo:

usuario:x:1000:1001:nome_do_usuario, 8111-1234:/home/usuario:/bin/bash

Onde:

 usuario: o login do usuário;

 x: referência da senha do usuário, cujo armazenamento é feito em outro arquivo;

 1000: o UID, que identifica o usuário. Esse valor é divido em três categorias:

 UID 0: administrador root;

 UID de 1 a 999: usuários de sistema;

 UID de 1000 a 65535: usuários normais.

 1001: o GID, que identifica o grupo primário do usuário. Esse valor é divido em três categorias:

 GID 0: administrador root;

 GID de 1 a 999: usuários de sistema;


 GID de 1000 a 65535: usuários normais.

 nome_do_usuario, 8111-1234: dados adicionais sobre o usuário, como nome completo, etc.;

 /home/usuario: diretório pessoal do usuário;

 /bin/bash: shell do usuário.

Nota: O único valor padrão é o UID 0, atribuído ao administrador root. Valores referentes a
usuários de sistema e usuários normais podem variar nas distribuições.

/etc/shadow

O arquivo /etc/shadow, também conhecido pelo termo senhas sombra, armazena todas as senhas
dos usuários, por se tratar de um arquivo mais seguro que o /etc/passwd, ao qual todos os usuários
podem ter acesso. O arquivo /etc/shadow contém permissões muito mais restritas e não pode ser
copiado ou visualizado por outros usuários, tornando o sistema muito mais seguro.

Como padrão, o sistema GNU/Linux possui o suporte a senhas sombras ativado, porém, durante o
modo de instalação expert é possível escolhermos se vamos ativar esse suporte ou não. Para ativá-
las depois da instalação, devemos utilizar o comando pwconv. Para desativá-las, usamos o
comando pwunconv.

Além de controlar e armazenar as senhas dos usuários do sistema GNU/Linux, o arquivo


/etc/shadow também trata de políticas de contas do usuário, armazenando dados como a duração
em dias de uma conta, sua data de expiração, a data da troca da senha, entre outras informações
importantes.

/etc/group

O arquivo /etc/group lista os grupos que estão presentes no sistema. Como usuário root, podemos
editar esse arquivo para adicionar um usuário em um novo grupo. Assim, esse usuário passa a
acessar os arquivos e diretórios pertencentes àquele grupo. Indica-se o uso do comando vigr para
editar o arquivo /etc/group. Esse comando bloqueia o arquivo e evita sua alteração indesejada.

Cada grupo é definido, nesse arquivo, em uma linha, dividida em quatro segmentos. Cada um deles
tem uma função diferente, e são separados por : (dois pontos). A seguir, veremos as funções de cada
segmento da linha:

 Primeiro segmento: O nome do grupo;

 Segundo segmento: A senha relativa ao grupo (x se utilizarmos /etc/gshadow);


 Terceiro segmento: Número de identificação do grupo (group ID);

 Quarto segmento: Lista de usuários que fazem parte do grupo, separados por vírgula.

/etc/gshadow

O arquivo /etc/gshadow tem a função de armazenar as senhas ocultas dos grupos existentes no
sistema. Nesse caso, apenas o usuário root tem acesso liberado a elas. O suporte a senhas ocultas
pode ser ativado e desativado por meio do utilitário shadowconfig.

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos

Vejamos o arquivo /etc/gshadow a seguir:

O arquivo /etc/gshadow é dividido em 4 campos:

 root : Nome do grupo;

 *: Corresponde à senha do grupo;

 root: Administrador do grupo;

 fabricio: Membro do grupo.

Administrando usuários

Esse tópico vai nos mostrar como administrar e gerenciar os usuários. Veremos como devemos
proceder para obtenção de informações sobre o usuário, como criá-los, alterar suas configurações e
senhas e como excluí-lo.

Obtendo informações sobre o usuário

Veremos, a seguir, os principais comandos disponíveis para obtermos informações sobre os usuários
do sistema.
id

O comando id nos permite visualizar as identificações dos usuários. Esse comando nos mostra
dados de UID, GID e grupos secundários dos usuários.

Quando digitamos id, visualizamos informações do usuário atual, e quando adicionamos o nome do
usuário na sintaxe, visualizamos as informações referentes a esse usuário. A sintaxe é a seguinte:

id <usuario>

Acima o comando id mostra informações do usuário logado (root). Em seguida, é digitado id aluno,
neste caso é exibido as informações do usuário aluno.

finger

Dados sobre configurações dos usuários, tais como login, nome, diretório home, shell e horário das
últimas autenticações realizadas por esse usuário podem ser visualizados por meio do comando
finger.

Sua sintaxe é a seguinte:

finger <usuario>

Com o comando finger aluno3, o exemplo acima traz detalhes do usuário aluno3 como shell,
diretorio home, nome copleto, entre outos

users

Os usuários logados no sistema são listados de maneira simples pelo comando users.
Instrutor: Criar exemplo do uso de users

Acima, o comando users exibe os usuários logados no momento, no caso havia apenas o usuário
aluno.

who

Para que possamos visualizar os usuários que estão logados na máquina, utilizamos o comando
who. Além disso, esse comando também nos fornece outros dados sobre os usuários, como qual
terminal está sendo usado, quando o login foi feito e a partir de qual máquina.

Caso seja necessário visualizar remotamente as ações de cada usuário, utilizamos o comando w, que
funciona de modo similar ao comando who, porém nos dá informações que tornam possível
controlarmos a existência de conexões indevidas no sistema, entre outras funções.

Para isso, usamos a seguinte sintaxe, que consiste no comando w mais o nome do usuário que
desejamos visualizar:

w <usuario>

Criando usuários

No momento da instalação do sistema, é possível criar usuários e, conforme a utilização do sistema


e a necessidade, mais usuários poderão ser criados. Vejamos, a seguir, como criar usuários por meio
dos comandos useradd e adduser.
useradd

O comando useradd tem a função de criar usuários ou atualizar informações para os novos
usuários criados. Ele é utilizado principalmente pelo usuário root. Sua sintaxe é a seguinte:

useradd [opcoes] [login]

Existem diversas opções para o comando useradd. As mais comuns são:

Opção Descrição
Comentário (normalmente utiliza-se o nome completo do
-c comentario
usuário).
-d diretorio Caminho do diretório pessoal do usuário.
Grupo inicial (GID). É necessário que ele já exista no
-g grupo
sistema.
-G grupo1,grupo2 Grupos adicionais (são separados por vírgula).
-u UID User ID (UID) do usuário.
-s shell Shell padrão para o usuário.
-p “senha” Senha (sempre entre aspas).
-e data Data de validade da conta.
-k /etc/skel Copia o diretório modelo /etc/skel.
-m Cria o diretório pessoal, caso não exista ainda.

O diretório /etc/skel aloca arquivos que são copiados para o diretório pessoal do usuário, assim que
uma conta é criada no sistema. Dessa maneira, não há necessidade de configurar, individualmente,
os arquivos para cada usuário.

adduser

O comando adduser também pode ser utilizado para criar usuários e grupos no sistema. A
primeira identificação disponível no sistema será aquela escolhida para ser a identificação do
usuário (UID). Essa identificação é estipulada de acordo com a faixa de UID definida no arquivo
/etc/adduser.conf.

Sintaxe:

adduser [opcoes] [login]

Vejamos as opções do comando adduser:


Opção Descrição
Esta opção não executa o comando passwd para gerar a
--disabled-login senha, porém, enquanto o usuário não defini-la, não poderá
efetuar o login.
Com esta opção habilitada, o sistema ignora a verificação de
--force-badname
senhas ruins.
--gid Define o GID do grupo primário do usuário.
Esta opção realiza a criação de um novo grupo em vez de um
--group
novo usuário.
Permite definir o diretório de trabalho do usuário. Caso esta
--home opção não seja definida, o diretório do usuário será definido
pela configuração.
Permite definir a identificação (UID) que o usuário herdará
--uid
no sistema.
--ingroup Permite definir o grupo primário do usuário pelo nome.
--system Permite criar um usuário ou grupo no sistema.

Administradores que necessitam cadastrar usuários com nome, senha e grupo definido, isto é, no
formato tradicional, costumam utilizar o comando adduser. O adduser é um script customizado
que trabalha com o comando useradd.

Sua sintaxe mais comum é:

adduser <usuario>

O usuário automaticamente será adicionado já com o pedido de definição da senha e de outros


dados adicionais, e um grupo é criado com o nome igual ao do usuário, copiando para o diretório
home do usuário todos os arquivos que estão no diretório /etc/skel.

O comando adduser segue algumas configurações que são definidas no arquivo /etc/adduser.conf.
A partir de agora, analisaremos o conteúdo desse arquivo.
Vejamos a descrição de alguns campos de configuração:

 DSHELL: Define o interpretador de comandos que o usuário herdará, caso não seja utilizada a opção --home
junto com o comando adduser;

 DHOME: Define o local em que o usuário herdará o diretório de trabalho;

 GROUPHOMES: Cria um diretório com o nome do grupo do usuário;

 LETTERHOMES: Cria um subdiretório com a primeira letra do login do usuário. Assim, o diretório ficará
organizado em ordem alfabética;

 SKEL: Define o local que armazena os arquivos que serão copiados para o diretório de trabalho do usuário;
 FIRST_SYSTEM_UID: Define o início da faixa de identificação reservada para usuários administrativos e de
sistema;

 LAST_SYSTEM_UID: Define o final da faixa de identificação reservada para usuários administrativos e do


sistema;

 FIRST_SYSTEM_GID: Define o início da faixa de identificação reservada para grupos administrativos e do


sistema;

 LAST_SYSTEM_GID: Define o final da faixa de identificação reservada para grupos administrativos e do


sistema;

 FIRST_UID: Define o início da faixa de identificação para usuários;

 LAST_UID: Define o final da faixa de identificação para usuários;

 FIRST_GID: Define o início da faixa de identificação para grupos;

 LAST_GID: Define o final da faixa de identificação para grupos;

 USERGROUPS: Se esta opção estiver habilitada, o GID do grupo do usuário será igual ao número do UID.
Porém, se esta opção estiver desabilitada, o usuário herdará o GID 100, do grupo users;

 USERS_GID: Define o identificador do grupo users;

 DIR_MODE: Define a permissão do diretório que o usuário herdará;

 SETGID_HOME: Define que os arquivos criados herdarão o mesmo grupo de trabalho do diretório;

 QUOTAUSER: Define a cota do usuário.


Alterando configurações de usuários

Veremos nesse tópico a utilização de dois comandos utilizados para alterar configurações de
usuários. Eles são os comandos usermod e chfn, e estão descritos a seguir:

usermod

O comando usermod é utilizado para permitir que o administrador do sistema


possa realizar alterações na configuração das contas dos demais usuários do sistema.

Podemos visualizar as alterações no arquivo /etc/passwd, no campo GID ou diretamente no arquivo


/etc/group.

Sua sintaxe é a seguinte:

usermod [opcao] <usuario>

A tabela adiante descreve as opções utilizadas com usermod:

Opção Descrição
Permite definir comentários adicionais para o usuário no arquivo
-c
/etc/passwd.
-d Permite definir ou alterar o diretório de trabalho do usuário.
-e Permite definir ou alterar a data de expiração de uma conta.
-f Permite definir ou alterar o período de inatividade da senha.
-g Altera o grupo primário do usuário.
-G Permite definir grupos complementares para o usuário.
-l Permite alterar o login do usuário.
Permite bloquear a senha do usuário (um caractere ! é acrescentado no
-L
início da linha do usuário no arquivo /etc/passwd).
-o Permite duplicar um UID que está sendo utilizado no sistema.
-s Define ou altera o interpretador de comandos do usuário.
-u Altera a identificação do usuário no sistema.
-U Opção utilizada para desbloquear a senha do usuário.
chfn

Este comando é utilizado para incluir ou alterar dados adicionais sobre os usuários criados. Caso ele
seja utilizado sem opções, agirá de forma interativa.
Os dados que são incluídos ou alterados ficarão no campo gecos do arquivo
/etc/passwd. Vejamos a seguinte tabela:

Opção Descrição
-f Altera o nome completo.
-h Telefone doméstico.
-o Outras informações.
-r Número da sala.
-w Telefone comercial.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo


Neste exemplo, o usuário está cadastrando seus dados adicionais.

Na imagem seguinte, as informações sobre o nome completo serão alteradas:

Criando e alterando senhas dos usuários

No tópico a seguir, trabalharemos com a definição e alteração de configuração de senhas, para que
os usuários possam utilizar o sistema. Abordaremos o gerenciamento de valores de senhas.

passwd
Para que possamos definir senhas e valores de configuração para as contas, utilizamos o comando
passwd.

O root, como superusuário, pode alterar a senha de qualquer usuário no sistema, porém, um usuário
comum pode utilizar o comando passwd para alterar sua própria senha.

A mudança da senha feita por um usuário normal vai solicitar sua senha atual para que seja possível
realizar sua troca. Já um usuário root pode definir uma nova senha diretamente para ele próprio ou
para diferentes usuários, sem a necessidade da entrada da senha vigente.

Sua sintaxe é a seguinte:

passwd [opcoes] <login>

A tabela a seguir descreve as opções que podemos utilizar com passwd:

Opção Descrição
-d Utilizada para remover a senha do usuário.
-e Executa a expiração da conta do usuário.
-h Exibe a ajuda do sistema.
-i Define o período de inatividade da senha.
-l Permite bloquear a conta do usuário.
Define o período mínimo de dias que o usuário deverá permanecer
-n
com a senha.
-S Exibe os valores da senha para a conta especificada.
-u Utilizada para desbloquear a conta do usuário.
Opção utilizada para definir o período em que o sistema notificará o
-w
usuário sobre a expiração da senha.
Define o período máximo de dias que o usuário poderá permanecer
-x
com a senha.

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos

Exemplos:

No exemplo a seguir, a senha do usuário jose expirará de forma imediata,


forçando-o a gerar uma nova senha.

No exemplo a seguir, o usuário deverá permanecer com a mesma senha pelo


período mínimo de 10 dias.

A opção utilizada a seguir definiu que o sistema enviará mensagens de aviso em um período de 5
dias, antes da expiração da senha.

chage

O comando chage pode ser utilizado para configurar parâmetros referentes à senha dos usuários.
Além disso, várias configurações que foram realizadas recentemente com o comando passwd
podem ser efetuadas com o comando chage. A tabela a seguir descreve as opções desse comando:

Opção Descrição
Exibe as informações de configuração referentes à senha e
-l (L minúsculo)
conta do usuário.
-I (i maiúsculo) Define o período de inatividade da senha.
-m Permite configurar a validade mínima da senha.
-M Permite configurar a validade máxima da senha.
-W Permite definir o tempo de aviso, antes que a senha expire.

Caso o comando chage seja executado sem opções, serão realizadas perguntas sobre os valores de
configuração da senha.

No exemplo acima, nos digitamos chage –l alunovirtual2 para ver o status deste usuário.
Em seguida digitamos os comando chage com as opções –m 2 para obrigar o usuário a ficar no
mínimo 2 dias com a senha e –M 42 para obrigar o usuário a trocar a senha a cada 42 dias.
Depois digitamos novamente o comando chage –l para ver o resultado, reparem.

pwconv

O comando pwconv habilita o suporte a senhas ocultas no sistema. Assim, as


informações de configuração de usuários e senhas ficam divididas entre os arquivos /etc/passwd e
/etc/shadow.

No exemplo acima, demos um cat no arquivo /etc/passwd e notem que senha do usuário é exibida
neste arquivo (criptografada). Em seguida demos o cat no arquivo /etc/shadow, porém este arquivo
não existe.
Digitamos o comando pwconv e depois repetimos o teste inicial.
Repare que as senhas sumiram e o arquivo /etc/shadow passou a existir contendo as senhas dos
usuários.

pwunconv

O comando pwunconv desabilita o suporte a senhas ocultas no sistema. As


informações ficam centralizadas no arquivo /etc/passwd.

Muito parecido com o teste anterior, porem ao contrário. Lemos o arquivo /etc/passwd e as senhas
não ficam nele e sim no arquivo /etc/shadow.
Digitamos o comando pwunconv e as senhas voltaram a aparecer no arquivo /etc/passwd. O
arquivo /etc/shadow deixou de existir.

/etc/login.defs

Para que possamos definir o conjunto de senhas shadow, devemos alterar o


arquivo login.defs. Ele é constituído por variáveis e pode trabalhar com opções booleanas (yes ou
no).

A seguir, serão descritas algumas opções que se encontram dentro do arquivo e utilizam respostas
no formato booleano:

Opção Descrição
Induz o sistema a solicitar autenticação, caso o comando
CHFN_AUTH
chfn ou chsh sejam executados.
CREATE_HOM Define se os diretórios home dos usuários serão criados pelo
E comando useradd.

As opções a seguir podem ser configuradas com qualquer tipo de caractere:

Opção Descrição
Determina os campos relacionados ao gecos
CHFN_RESTRICT
que os usuários podem alterar.
MAIL_DIR Faz referência ao diretório de spool do correio.
Define o período padrão que será definido
PASS_MAX_DAYS
como prazo de validade máxima da senha.
Defino o período padrão de prazo de validade
PASS_MIN_DAYS
mínima da senha.
Define o tempo padrão de envio de alerta de
PASS_WARN_AGE
expiração de senha ao usuário.
Acima um exemplo do arquivo /etc/login.defs com algumas alterações feitas. Reparem as linhas:
PASS_MAX_DAYS 2
PASS_MIN_DAYS 42

Excluindo usuários

O comando userdel é utilizado para remover as contas e todas as informações dos usuários do
sistema. Temos duas opções ao realizarmos esse tipo de ação: excluir somente as contas ou excluir
as contas e outros dados referentes ao usuário, como seus arquivos e o diretório home.

Para remover apenas a conta do usuário, utiliza-se a seguinte sintaxe:

userdel <usuario>

Para remover a conta, o diretório home e os arquivos do usuário, utiliza-se a opção –r:

userdel -r <usuario>

Como a delegação de UIDs é feita em sequência, existe o risco de um novo usuário tomar conta do
diretório de um usuário recém removido. Portanto, recomenda-se sempre a remoção do diretório do
usuário, não sem antes realizarmos um backup de seu conteúdo ou fazer sua transferência para o
responsável.

Acima excluímos o usuário aluno3. Em seguida faço a leitura do arquivo /etc/passwd com filtro da
palavra a luno e reparem que o aluno3 deixou de existir.

Administrando grupos

Grupos podem ser administrados por meio de diversos comandos, os quais permitem exibir grupos
de um usuário, alterar o dono e o grupo de arquivos e diretórios, criar, alterar, definir senhas e
excluir grupos, além de gerenciar seus membros. Podemos também efetuar o login em um grupo
diferente e converter senhas do /etc/group para /etc/gshadow e vice-versa. Vejamos esses diversos
comandos nos tópicos a seguir.
Exibindo os grupos de um usuário

O comando groups exibe os grupos aos quais o usuário pertence. Sua sintaxe básica é a seguinte:

groups <usuario>

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

Vejamos o exemplo a seguir:

Alterando o dono e grupo de arquivos e diretórios

Dois comandos possibilitam, respectivamente, a alteração do dono e do grupo de um arquivo, e a


alteração do grupo de trabalho de um arquivo ou diretório. Esses comandos, chown e chgrp,
funcionam conforme veremos a seguir.

chown

O comando chown pode alterar o dono e o grupo de um arquivo. É importante


ressaltar que há necessidade de possuir permissões de gravação no diretório ou arquivo para realizar
essa alteração.

Sintaxe:

chown [opcao] <arquivo>

Vejamos a tabela a seguir:

Opção Descrição
Descreve detalhadamente a ação ocorrida para cada
-c, --changes
arquivo cujas permissões estão sendo alteradas.
Não mostra mensagens de erro para o arquivo cuja
-f, --silent
propriedade não pode ser alterada.
Descreve detalhadamente toda a ação ocorrida em casa
-v, --verbose
arquivo.
Altera recursivamente a propriedade de diretórios e de seus
-R, --recursive
conteúdos.

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos


No exemplo adiante, alteramos o dono do arquivo:

No exemplo a seguir, alteramos o dono e o grupo do arquivo:

chgrp

Permite alterar o grupo de trabalho de um arquivo ou diretório.

Sintaxe:

chgrp [opcoes] <arquivo>

Vejamos a tabela a seguir:

Opção Descrição
Descreve a ação detalhadamente sobre a alteração do grupo do
-c
arquivo.
Caso o grupo não possa ser alterado, a mensagem de erro não será
-f
exibida.
-v Descreve todas as ações de maneira detalhada.
-R Altera, de maneira recursiva, o grupo do diretório e seu conteúdo.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

No exemplo a seguir, foi alterada a propriedade de grupo para o arquivo:


Criando e alterando grupos

A criação e alteração de grupos são feitas por meio de comandos como groupadd, addgroup e
groupmod. Vejamos cada uma de suas funções a seguir:

groupadd

O comando groupadd realiza a criação de um novo grupo no sistema.

Sintaxe:

groupadd [opcoes] <grupo>

Vejamos as opções desse comando:

Opção Descrição
-g Permite definir o GID que o grupo herdará.
Permite definir um GID que já estava sendo utilizado por outro
-o
grupo.

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos


No exemplo a seguir, efetuamos a criação do grupo debian.

No exemplo a seguir, criamos o grupo impacta e definimos que ele herdará o GID de número
1098.

addgroup

O comando addgroup tem a finalidade de adicionar um novo grupo de usuários ao sistema. As


opções que podem ser utilizadas são as mesmas do comando adduser.

Sintaxe:

addgroup [opcoes] <grupo>


A tabela a seguir descreve as principais opções desse comando:

Opção Descrição
Onde <gid> é o valor numérico do GID. Como padrão, o valor
utilizado é o menor valor de ID acima de 500 que seja maior que
-g <gid> todos os outros grupos. Não é comum a utilização de valores entre
0 e 499, pois estes são mais comumente utilizados por contas de
sistema.
-r Instrui o comando groupadd a adicionar uma conta de sistema.
Encerra a atividade do comando groupadd com um erro caso o
-f grupo a ser adicionado já exista no sistema, fazendo com que o
grupo não seja adicionado novamente e nem alterado.

No exemplo acima, é feita uma busca no arquivo /etc/group pelo nome impacta, nada é encontrado.
Em seguida é criado o grupo impacta e a busca passa a trazer resultados.
Após é criado um grupo chamado impacta2 com o comando addgroup, repare que o comando da
retorno do status da criação.

groupmod

O comando groupmod permite alterar a configuração de grupos já existentes. Sua sintaxe é a


seguinte:

groupmod [opcoes] <grupo>

A tabela a seguir descreve as principais opções desse comando:

Opção Descrição
-g Permite alterar o GID do grupo.
-n Permite alterar o nome do grupo.
-o Permite definir um GID que está sendo utilizado por outro grupo.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

No exemplo a seguir, estamos alterando o nome do grupo debian para ubuntu.


Excluindo grupos

O comando groupdel é utilizado para remover um grupo do sistema. Sua sintaxe é a seguinte:

groupdel <grupo>

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

No exemplo a seguir, estamos removendo o grupo ubuntu.

Definindo a senha de um grupo e adicionando/excluindo


seus membros

O comando gpasswd pode ser utilizado para várias funções, entre elas, definir uma senha para o
grupo e adicionar e remover membros do grupo. Sua sintaxe é a seguinte:

gpasswd [opcao] <grupo>

Vejamos a tabela a seguir:

Opção Descrição
-a Adiciona um membro ao grupo.
-A Define um administrador para o grupo.
-d Remove um membro do grupo.
-M Permite adicionar vários membros ao grupo.
-r Esta opção é utilizada para remover a senha do grupo.
-R Desabilita o acesso ao grupo pelo comando newgrp.

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos

No exemplo a seguir, estamos adicionando o usuário fabricio ao grupo root.


No exemplo a seguir, estamos removendo o usuário do grupo.

No comando a seguir, estamos criando uma senha para o grupo.

Vejamos o arquivo /etc/gshadow:

Efetuando o login em um grupo diferente

O comando newgrp permite que o usuário altere a identificação do seu grupo, permitindo que ele
efetue um login em um grupo ao qual ele não pertence. Para isso, o usuário deverá ter o
conhecimento da senha do grupo em que deseja entrar. Sua sintaxe é a seguinte:

newgrp <grupo>

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

Exemplo:

No exemplo anterior, o usuário está efetuando o login no grupo impacta.


Convertendo senhas do /etc/group para /etc/gshadow e
vice-versa

O comando grpconv habilita o suporte a senhas shadow, dividindo a configuração de grupo em


dois arquivos: /etc/group e /etc/gshadow. Além disso, esse comando permite que as senhas
do formato antigo /etc/group sejam convertidas para /etc/gshadow.

O comando grpunconv desabilita o suporte a senhas shadow. Sendo assim, as informações ficam
centralizadas no arquivo /etc/group.

No exemplo acima, localizo o grupo impacta dentro o arquivo /etc/groups, repare que não existe o
arquivo /etc/gshadow.
É executado o comando grpconv, a senha deixa de existir neste arquivo e é criado o arquivo
/etc/gshadow com as senhas criptgrafadas dos grupos.
Com o comando grpunconv a senha volta a fazer parte do arquivo /etc/group e o arquivo
/etc/gpasswd deixa de existir.

Tópicos para revisão do capítulo

Atente para os tópicos a seguir. Eles devem ser estudados com muita atenção, pois
representam os pontos mais importantes do capítulo.

 O GNU/Linux é um sistema multiusuário que possui um esquema de permissões que provê a privacidade e/ou
compartilhamento de arquivos entre usuários. Podemos considerar três tipos distintos de usuários em um
sistema GNU/Linux: usuário administrador (superusuário ou usuário root), usuários de sistema e usuários
comuns;

 O GNU/Linux utiliza um esquema de permissões de acesso para proteger o sistema do acesso indevido, seja de
programas ou de usuários não autorizados, impedindo que arquivos sejam apagados desnecessariamente ou o
funcionamento de um programa mal intencionado;
 O sistema GNU/Linux define o acesso aos arquivos definindo os usuários como dono, grupo ou outros
usuários. Essas três categorias apresentam, cada uma, três tipos de permissões de acesso: leitura, gravação e
execução (arquivos) ou acesso (diretórios);

 No que diz respeito à administração de usuários e grupos no sistema GNU/Linux, podemos utilizar quatro
arquivos básicos: /etc/passwd, /etc/shadow, /etc/group e /etc/gshadow;

 Existem diversos comandos para administrarmos usuários, sendo possível obter informações sobre eles, criar
novos usuários, alterar suas configurações e senhas e excluí-los. Grupos também podem ser administrados,
sendo possível alterarmos seu dono e o grupo de um arquivo. Podemos criar e alterar grupos, excluí-los,
adicionar ou excluir membros e definir sua senha.

Laboratório 1
A. Gerenciando Permissões
1. Crie um arquivo na pasta /tmp
# touch /tmp/arquivo.txt
2. Liste detalhadamente o arquivo
# ls -l /tmp/arquivo.txt
3. Altere a permissão do arquivo para que o proprietário tenha controle total do arquivo
# chmod u+rwx /tmp/arquivo.txt
4. Confira a alteração
# ls -l /tmp/arquivo.txt
5. Permita o grupo poder alterar
# chmod g+rw /tmp/arquivo.txt
6. Confira a alteração
# ls -l /tmp/arquivo.txt
7. Altere a permissão do arquivo para -rwxrw----
# chmod 760 /tmp/arquivo.txt
8. De permissão de controle total a todos os usuários.
# chmod 777 /tmp/arquivo.txt
9. Crie um arquivo com UMASK 017 em /tmp e confira se ele ficou com a permissão -rw-rw----
# umask 017;touch /tmp/arquivo2.txt
# ls -l /tmp/arquivo2.txt
10. Crie um diretório com UMASK 017 em /tmp e confira se ele ficou com a permissão drwxrw----
# umask 017;mkdir /tmp/diretorio
# ls -ld /tmp/diretorio
11. Copie o executável binário “cp” para a pasta /tmp usando UMASK 017 e verifique se ele ficou
com a permissão -rwxr-----
# umask 017;cp /bin/cp /tmp/.
# ls -l /tmp/cp
12. Aplique a permissão SUID no arquivo /tmp/arquivo.txt e verifique se a permissão SUID foi
aplicada.
# chmod u+s /tmp/arquivo.txt
# ls -l /tmp/arquivo.txt
13. Aplique a permissão SGID no diretorio /tmp/diretorio e verifique se a permissão foi aplicada.
# chmod g+s /tmp/diretorio
# ls -ld /tmp/diretorio

B. Gerenciando Usuários e Grupos


1. Crie o usuario chamado teste1
# useradd teste1
# cat /etc/passwd |grep teste1
2. Defina a senha 123 para o usuário teste1
# passwd teste1
3. Crie uma pasta para o usuário teste1
# mkdir /home/teste1
4. De a propriedade desta pasta para o usuário teste1 e para o grupo users
# chown -R teste1:users /home/teste1
5. Confira as propriedades da pasta
# ls -ld /home/teste1
6. Altere o shell do usuário teste1 para o bash e confira para saber se a alteração foi aplicada
# usermod -s /bin/bash teste1
# finger teste1
7. Logue-se com o usuario teste1
# su teste1
8. Va para pasta home para testar se ela foi associada.
# cd ~
# pwd
9. Efetue logout
# exit
10. Bloqueie a conta do usuario teste1
# passwd -l teste1
11. Verifique se a conta foi bloqueada, deve haver um “!”no inicio da senha do usuário
# cat /etc/shadow | grep teste1
12. Desbloquei o usuario teste1 e confira se está correto
# passwd -u teste1
# cat /etc/shadow | grep teste1
13. Defina a senha do usuário teste1 para a validade de no máximo 2 meses
# chage -M 60 teste1
14. Confira se ficou correto a alteração
# chage -l teste1
15 Crie o grupo Impacta
# addgroup Impacta
# cat /etc/grops |grep Impacta
16. Crie o usuario teste2 com o comando “adduser”
# adduser teste2
17. apague os usuários teste1 e teste2
# userdel teste1
# userdel teste2
# cat /etc/passwd |grep teste
18. Apague o grupo Impacta
# groupdel Impacta
# cat /etc/group |grep Impacta

Exercícios de Fixação
1. Com o UMASK 027, qual permissão de arquivo é criado?
a) 0750
b) 0650
c) 0760
d) 0660
e) 0700
Alternativa Correta: B

2. Qual opção do comando useradd é usado para especificar o diretório pessoal do usuários?
a) -a
b) -m
c) -f
d) -d
e) -h
Alternativa Correta: B
3. Quando crio um arquivo, ele automaticamente fica com a permissão 0642, qual a UMASK
deste arquivo?
a) 0642
b) 0724
c) 0027
d) 0024
e) 0012
Alternativa Correta: D

4. Qual arquivo posso definir as configurações padrões para os usuários que serão
cadastrados?
a) /etc/user.conf
b) /etc/confusers
c) /etc/login.defs
d) /etc/login.conf
e) /etc/login.def
Alternativa Correta: C

5. Qual comando posso usar para desabilitar a conta do usuário?


a) userblock
b) passwd
c) userdel
d) groupdel
e) userremove
Alternativa Correta: B

6. Qua comando traz inforações sobre o usuário como diretorio home, shell?
a) finger
b) who
c) w
d) last
e) id
Alternativa Correta: A
Capítulo 13 – Administração do shell

Instrutor: Fique à vontade para criar exemplos onde achar necessário ou substituir os existentes

 Tipos de shell;
Introdução  Variáveis;
 Arquivos de configuração do shell;
 Mudança de Shell;
Já vimos há alguns capítulos que o shell é o  Alias;
mediador entre o computador e o usuário,
pois é através dele que podemos enviar  Exibição de mensagens;
comandos que serão interpretados e
executados no sistema. Neste capítulo, serão
 Histórico de comandos no shell.
mostrados alguns tipos de shell, que variam
dos mais simples àqueles indicados a
usuários avançados ou com bom
entendimento de programação.

Como o bash é a versão do shell padrão para quase todas as distribuições e também a versão em que
as principais avaliações de certificação para o Linux são baseadas, a ênfase será dada a ele. Aqui
veremos como configurá-lo, personalizá-lo, trabalhar com suas variáveis, automatizar tarefas e fazer
dele uma ferramenta eficiente de programação.

Tipos de shell

Há diversos tipos de shell disponíveis para distribuições GNU/Linux. O bash é o tipo utilizado na
maioria das distros.

A seguir, temos a descrição dos principais tipos de shell:

 Sh (Bourne shell)

Desenvolvido por Stephen Bourne, por isso Bourne Shell. É o shell original, bem simples, com
poucas ferramentas, mas ainda utilizado em sistemas UNIX e ambientes relacionados ao UNIX.

 bash (Bourne Again shell)

Trata-se do shell padrão do Linux, conveniente tanto para usuários iniciantes, por ser intuitivo e
flexível, quanto para avançados e profissionais, por possuir ferramentas variadas e eficientes.
Compatível com todos os comandos do sh.
 csh (C shell)

Preferido por alguns programadores, a sintaxe desse shell é semelhante à linguagem de


programação C.

 tcsh (Turbo C shell)

Versão melhorada do csh, que interpreta linguagens de comando e pode ser usada tanto como um
shell de login interativo quanto como um processador de comandos de shell scripts. É
completamente compatível com o csh.

 ksh (Korn shell)

Este shell é o Bourne Shell evoluído, portando todos os comandos que funcionavam no Bourne
Shell funcionarão nesse com a vantagem de ter mais opções.

 zsh (Z shell)

Além de um shell desenvolvido para uso interativo, que engloba várias funções úteis do bash, ksh e
tcsh, o zsh é também uma linguagem de script eficiente.

Variáveis

Podemos definir variáveis como nomes que contêm algum valor e, ainda, como espaços de memória
que armazenam valores. Sua função é o fornecimento de dados úteis e necessários a usuários e
programas. Tais variáveis apresentam a seguinte forma:

NOME=VALOR

As variáveis podem ser locais ou globais (de ambiente):

 Variáveis locais: São as variáveis disponíveis somente para o shell atual. Isso significa que sua visibilidade é
restrita ao ambiente para o qual foram definidas, elas não ficam disponíveis para o restante do sistema.

 Variáveis globais (de ambiente): São as variáveis disponíveis tanto para o shell atual como para os
subprocessos que as utilizam, de forma que sua visibilidade é aberta a outros ambientes além daqueles em que
elas são definidas.

Vejamos algumas variáveis de ambiente:

Variável Definição
HOME Responsável por identificar o diretório do usuário.
HOSTTYPE Faz referência à plataforma que está sendo utilizada.
SHELL Permite identificar o shell que está sendo utilizado.
TERM Define o tipo de terminal que está sendo utilizado.
Variável Definição
USER Predefine o nome da conta como variável global.
PATH Determina quais diretórios devemos pesquisar e, ainda,
qual sequência deverá ser seguida para encontrar um
determinado comando.
PS1 Representa as informações exibidas no prompt.
PS2 Representa o prompt estendido.
MAIL Esta variável informa como o correio eletrônico está
definido.
LOGNAME É um sinônimo da variável USER.
OSTYPE Com a utilização desta variável, é possível definir o
tipo de sistema operacional que está sendo utilizado.

Definindo variáveis

A forma de definição é diferente entre variáveis locais e globais. Uma variável local é definida com
a simples atribuição de um nome para ela, como se vê a seguir:
<variavel>=<valor>

Já uma variável global exige o comando export antes da sintaxe usada para variáveis locais.

export <variavel>=<valor>

É convencionado que variáveis globais tenham seu nome iniciado por letra maiúscula.

Acima, foi criada uma variável local chamada LOCAL, esta variável estará disponível apenas a esta
seção.
Para ver o retorno da variável, foi usado o comando echo
Em seguida foi criada uma variável global utilizando o camndo export. Esta variável estará
disponível a todas as seções do sistema.
Para verificar o retorno, o comando echo também é utilizado.

Visualizando variáveis
Os comandos env e set são usados para a visualização de variáveis, cada um com suas
especificidades. Veremos, a seguir, as particularidades de ambos.

env

Este comando é utilizado para exibir e trabalhar somente com as variáveis de ambiente. Sem
argumento, o comando lista todas as variáveis de ambiente do sistema e seus valores. Com base nos
argumentos definidos na linha de comandos, o env é responsável por rodar um programa em uma
ambientação modificada.

Sintaxe:

env [opcao] <variavel>

Vejamos as opções que podem ser utilizadas com esse comando:

Opção Opção Linux Definição


GNU
--help Esta opção gera uma mensagem de ajuda.
--version Esta opção é utilizada para visualizar a
versão.
-i, --ignore Esta opção desconsidera o ambiente herdado
e inicia um aplicativo com o ambiente vazio.
-u --unset Esta opção exclui, do ambiente, o nome da
variável.

Acima foi utilizado o comando env em conjunto com grep para filtrar as variáveis.
Como o comando env só lista as variáveis globais, a variável LOCAL não traz nenhum resultado.

set

Diferente do comando env, o comando set é utilizado para visualizar variáveis, tanto locais quanto
globais, e seus atributos.

Sintaxe:

set
Já o comando set mostra todas as variáveis. Acima foi usado o comando set em conjunto com o
comando grep para filtrar as variáveis LOCAL e GLOBAL, ambas retornaram seus resultados.

Retornando o valor de variáveis

O comando echo é utilizado para visualizarmos o valor de uma variável. Para isso, devemos utilizar
o caractere $ antes do nome da variável.

echo $<variavel>

Excluindo variáveis

Utilizamos o comando unset para excluir variáveis. Sua sintaxe é a seguinte:

unset <variavel>

É importante lembrar que esse comando, quando usado para uma variável global, só tem efeito na
sessão atual, de forma que a variável continuará acessível em outras sessões.

Instrutor: Criar exemplo do uso de unset

O exemplo acima mostra como a variável LOCAL está definida, apoós o uso do comando unset a
variável deixa de existir.
Alterando o prompt de comando

Para que possamos alterar o prompt de comandos, devemos alterar os valores que estão
armazenados dentro da variável PS1.

A seguir, serão descritos alguns valores que podem ser utilizados com a variável PS1:

Valor Descrição
\h Faz referência ao nome do host.
\w Caminho completo do diretório corrente.
\W Refere-se ao diretório atual.
\u Exibe o nome do usuário.
\t Exibe a hora do sistema.
\d Refere-se à data do sistema.
\$ Especifica o valor $ para usuários comuns, e o
valor # para o root.

Instrutor: Fique à vontade para substituir este exemplo

No exemplo adiante, alteramos o prompt, para exibir o nome do usuário, o nome do host e a hora
atual:

Arquivos de configuração do shell

Alguns arquivos são automaticamente lidos pelo shell no momento de login e logout de um usuário
ou ainda de invocação do shell a partir de uma sessão que já tenha sido iniciada. Dependendo de
como for iniciado o bash, arquivos diferentes serão executados de forma automática e, a partir desse
conhecimento, o usuário pode programar a criação de variáveis, aliases, funções e outras
personalizações do bash.

Caso o bash seja invocado durante um login, ele lerá os arquivos ~/etc/profile, ~/.bash_profile,
~/.bash_login e ~/.profile, nessa ordem, caso eles existam. O primeiro aplica-se a todos os usuários
do sistema, ao passo que os três últimos, ocultos por iniciarem com um ponto (.), estão no diretório
/home do usuário em questão. Ao terminar a sessão, o bash executará automaticamente o arquivo
~/.bash_logout, se ele existir.

Quando não se tratar de um shell invocado numa sessão de login, como é o caso de terminais em
sessões X, os arquivos executados automaticamente, caso existam, serão o /etc/bash.bashrc e o
~/.bashrc.

Vejamos separadamente alguns arquivos de configuração importantes:


 /etc/profile

O arquivo /etc/profile é executado automaticamente no momento do login e lido antes dos


arquivos de configuração pessoal do usuário. É responsável, ainda, por definir as variáveis de
ambiente para os usuários em geral e armazenar os comandos a serem executados, quando o usuário
efetuar o login no sistema. Sempre que o arquivo for carregado por meio de um shell que solicita
login, ele procurará os arquivos na sequência descrita no início deste tópico e realizará a execução
dos comandos neles contidos, caso eles existam.

 /etc/environment

O arquivo /etc/environment é utilizado por sistemas Debian para definir variáveis de ambiente.
Uma vez definidas, todas as variáveis são exportadas, automaticamente, na inicialização do sistema.
Esse arquivo substitui o arquivo /etc/profile em algumas distros.

 /.bashrc

Executado por shells invocados em sessões já iniciadas, e não de login, esse arquivo possui
características semelhantes às do ~/.bash.profile.

Alterando o shell atual

Para alterarmos o shell atual, utilizamos o comando chsh com a opção –s ou --shell, seguido do
nome do shell que se deseja utilizar.

Exemplo:

Instrutor: Criar exemplo do uso de chsh -s


# chsh –s /bin/sh

Com este comando altera nosso shell para o sh

Utilizando aliases

Alguns comandos têm uma sintaxe indiscutivelmente grande e digitá-la inteira toda vez que o
comando for necessário tende a se tornar uma tarefa inconveniente, especialmente quando o
comando é usado diversas vezes com os mesmos argumentos e opções.

Uma forma bastante útil de agilizar a entrada de um comando que seja usado normalmente com os
mesmos parâmetros é atribuir um alias, da palavra apelido em inglês. Em linha de comando ou num
arquivo próprio para isso, atribui-se um termo pequeno e de digitação fácil para executar um
determinado comando com parâmetros específicos toda vez que o alias for usado.

Instrutor: Criar exemplo do uso de alias

No exemplo acima, digitamos o comando “l”, obviamente o comando não existe. Criamos um alias
para este comando, dizendo que l = ls –color –l –a
Em seguida digitamos novamente o comando “l” e ele passa a responder como o comando ls com
os parâmetros acima definidos.

Para remover o alias de um comando, utilizar o comando unalias.

Instrutor: Criar exemplo do uso de unalias

Já ao contrário do exemplo acima, o alias “l” para o comando ls existe, ao usar o comando unalias,
o comando “l” deixa de funcionar.
Arquivos para exibição de mensagens

Existem três arquivos relacionados à exibição de imagens para usuários, que não afetam a parte
operacional do sistema. O primeiro deles é o /etc/issue, que exibe uma mensagem para um usuário
antes do login no sistema. Caso se queira que a mensagem apareça depois do login, o arquivo
utilizado é o /etc/motd. Para visualizar mensagens exibidas em logins remotos, o arquivo a ser
verificado é o /etc/issue.net.

.bash_history

O .bash_history é um arquivo responsável por armazenar o histórico de linhas de comando. Por


padrão, até 500 comandos podem ser armazenados nesse arquivo, que pode ser verificado por
comandos que exibem o seu conteúdo. Por meio das setas direcionais no teclado, para cima e para
baixo, podemos verificar quais comandos já foram utilizados.

O arquivo .bash_history armazena sua configuração em algumas variáveis.

Vejamos quais são elas:

Variável Descrição
HISTFILE Armazena o nome do arquivo utilizado para armazenar
históricos.
HISTSIZE Armazena o número máximo de comandos que o
arquivo suportará.
HISTFILESIZ Armazena o número máximo de linhas que o arquivo do
E histórico de comandos suportará.

O comando history permite visualizar comandos que já foram utilizados.

Acima usamos o comando history para exibir os ulimos 10 comando digitados


Podemos determinar que algumas variáveis não terão seus valores alterados pelos usuários.
Podemos utilizar o comando readonly e, dessa forma, elas se tornarão constantes.

Instrutor: Fique à vontade para substituir este exemplo

No exemplo adiante, criamos uma variável e a tornamos uma constante:

Tópicos para revisão do capítulo

Atente para os tópicos a seguir. Eles devem ser estudados com muita atenção, pois
representam os pontos mais importantes do capítulo.

 Há diversos tipos de shell disponíveis para distribuições GNU/Linux. O bash é o tipo utilizado na maioria das
distros, mas existem também outros, como sh, csh e zsh;

 Podemos definir variáveis como nomes que contêm algum valor e, ainda, como espaços de memória que
armazenam valores. Sua função é o fornecimento de dados úteis e necessários a usuários e programas;

 Alguns arquivos são automaticamente lidos pelo shell no momento de login e logout de um usuário ou ainda
de invocação do shell a partir de uma sessão que já tenha sido iniciada. Com eles, o usuário pode programar a
criação de variáveis, aliases, funções e outras personalizações do bash;

 Para alterarmos o shell atual, utilizamos o comando chsh com a opção –s ou --shell, seguido do nome do shell
que se deseja utilizar;

 É possível atribuir um alias para executar um determinado comando com parâmetros específicos toda vez que
o termo atribuído for usado;

 Os arquivos /etc/issue, /etc/motd e etc/issue.net operam na exibição de mensagens para usuários. Os dois
primeiros exibem mensagens antes e depois do login, respectivamente, e o terceiro permite visualizar
mensagens exibidas em logins remotos;

 O .bash_history é um arquivo responsável por armazenar o histórico de linhas de comando. Por padrão, até
500 comandos podem ser armazenados nesse arquivo.

Laboratório 1
A. Gerenciando Variáveis
1. Crie uma variável chamada CURSO
# CURSO=Impacta
2. Veja o valor da Varíavel CURSO
# echo $CURSO
3. Verifique se a varíavel está na relação SET
# set |grep CURSO
4. Defina uma variável global
# export IMPACTA=”Curso Linux”
5. Vaja o valor para a variável global
# echo $IMPACTA
6. Verifique se a variável global está listada nas definições de variáveis com o comando env
# env | grep IMPACTA
7. Agora execute uma nova shell no mesmo terminal em que você está conectado
# /bin/bash
8. Verifique se a variável local aparece nesta shell (O Resultado deve ser negativo)
# env |grep CURSO
# set | grep CURSO
9. Verifique se a variável global aparece nesta shell (O Resultado deve ser positivo)
# env |grep IMPACTA
# set |grep IMPACTA
10. Saia desta shell
# exit

B. Criando Alias
1. Crie um Alias para o comando ls
# alias l=”ls -l”
2. Execute seu novo Alias
# l
3. Vamos alterar definitivamente o funcionamento do comando ls para o usuários root. Abra o
arquivo /root/.bashrc
# vi /root/.bashrc
4. Adicione a linha
alias ls=”ls –color”
5. Salve o arquivo e saia.
# :wq
6. Este novo alias terá efeito na próxima vez que fizer logon, então efetue logoff e logue novamente
# exit
7. Logue-se novamente e execute o comando ls, note que agora o resultado será colorido.
# ls /etc

C. Vendo os ultimos comandos executados


1. Analise o arquivo de historico
# cat /root/.bash_hystory | more
2. Execute o comando history
# history

Exercícios de Fixação
1. Qual o shell padrão nas distribuições Linux?
a) sh
b) csh
c) bash
d) rbash
e) tsh
Alternativa Correta: C

2. Qual o tipo de variável que pode ser lida em todas as seções


a) local
b) global
c) ambiente
d) sistema
e) setada
Alternativa Correta: B
3. Qual comando uso para remover uma variável?
a) unset
b) unalias
c) unenv
d) remvar
e) unvar
Alternativa Correta: A

4. Qual comando uso para ver um retorno de uma variável?


a) variavel
b) var
c) ls
d) cat
e) echo
Alternativa Correta: E

5. Qual comando podemos utilizar para ver os ultimos comandos executados?


a) history
b) bash_history
c) lastcomands
d) ls
e) echo
Alternativa Correta: A
Capítulo 14 – Empacotadores, compactadores e
backup
Instrutor: Fique à vontade para criar exemplos onde achar necessário ou substituir os
exsistentes

 Empacotamento e desempacotamento;
Introdução
 Compressão e descompressão de arquivos;
 Empacotadores tar e cpio;
Em sistemas operacionais da Microsoft, as
 Compactadores gzip e bzip2;
tarefas de compressão e empacotamento são  Descompactadores gunzip e bunzip2;
geralmente realizadas por um programa zip,
que executa as operações em conjunto, de  Backup de dados;
maneira que os usuários normalmente
sequer sabem a diferença entre elas.
 Comando dd.
Já em sistemas Unix-like, ambos são
efetuados separadamente, e, considerando
sua importância, é essencial que se entendam seus procedimentos, para otimizar a distribuição de
software, utilização de espaço em disco, backup de sistema, entre outros.

O empacotamento é o ato de aglutinar arquivos e diretórios em um único arquivo. A compressão


toma um conjunto de dados e codifica-o de uma maneira que permita seu armazenamento num
espaço menor.

O presente capítulo aborda a utilização dos empacotadores tar e cpio e dos compactadores gzip e
bzip2.

tar

O tar é usado como empacotador de arquivos, preservando as informações do sistema de arquivos


aplicados a eles, ou seja, os metadados. É usado em conjunto com compactadores como gzip e
bzip2.

A sintaxe do tar é a seguinte:

tar [opcoes] <dispositivo/arquivo> <arquivo1> <arquivo2> ...

Assim como existe a ação de empacotar arquivos, também é possível executar o processo inverso,
que seria o desempacotamento. Para isso, utilizamos tar com a opção -x.

Os arquivos empacotados pelo tar têm a extensão .tar, porém o destino de um arquivo empacotado
pode ser diretamente um dispositivo de fita que foi originalmente iniciado com a utilização do
comando tar.
A tabela a seguir descreve as principais opções que podemos utilizar com o empacotador tar:

Opção Opção Opção Descrição


Unix GNU BSD
-c --create c Cria o arquivo empacotado conforme
o destino especificado, podendo ser
um arquivo no sistema local ou
diretamente em um dispositivo de fita.
-f --file F Indica se o arquivo empacotado será
um arquivo no próprio sistema, com
uma extensão .tar (recomendada
para identificação), ou se o mesmo
será um dispositivo de fita. É
importante estar atento à utilização
dessa opção, pois é obrigatório
informar, logo após a mesma, a forma
de arquivamento do pacote.
-j --bzip2 j Indica que o pacote será compactado
no momento do empacotamento,
utilizando o utilitário bzip2.
-v --verbose v Exibe, na tela, o processo de
empacotamento ou
desempacotamento.
-t --list t Utilizada para visualizar o conteúdo
de um pacote tar.
-z --gzip z Indica que o pacote será compactado
no momento do empacotamento,
utilizando o utilitário gzip.
-x --extract x Desempacota ou extrai o conteúdo de
um pacote tar.

Acima, foi usado o comando tar para aglutinar (não compactar como veremos a frente) a pasta etc
dentro da pasta /root/testetar. O nome do arquivo gerado foi teste_tar.tar
Note que ele foi criado com o tamanho de 6MB
Já neste exemplo foi feito o contrário, utilizamos a opção –x para descompactar o arquivo. Neste
caso, como não definimos o local de destino com a opção –C, o arquivo foi descompactado na pasta
que estamos atualmente.

cpio

Como o tar, o comando cpio também exerce as funções de empacotador ou desempacotador, no


caso do uso da opção -i, além de poder ser usado simplesmente para copiar arquivos. Embora seja
capaz de ler e escrever no formato .tar, o cpio difere do tar por trabalhar apenas com
redirecionamentos de entrada e saída padrão.

Neste exemplo compactamos a pasta ls com o CPIO, repare que foi usado 2 comandos para concluir
esta tarefa
Executamos o ls (obrigatoriamente tenho que estar na pasta) e utilizamos o CPIO com a opção –ov.
O arquivo compactado redirecionamos para a pasta /root/testecpio

Olhando a pasta de destino, o arquivo foi criado com o tamanho de 5,7 MB

Já para descompactar, devemos estar na pasta de destino.


Executamos o cpio com as opções –iv e acionamos o arquivo compactado.
Pos a descompactação, podemos ver o os arquivos na pasta.

gzip

O comando gzip é utilizado para compactar e também descompactar arquivos.


Arquivos compactados com o utilitário gzip são identificados pela extensão .gz. Sua sintaxe é a
seguinte:

gzip [opcoes] <arquivo>

Um detalhe muito importante é que um diretório não pode ser compactado de forma direta pelo
gzip. Ele tem que, obrigatoriamente, se tornar um arquivo empacotado, para depois ser
compactado. Porém, é possível compactar todos os arquivos de um determinado diretório através da
função recursiva. A compressão pode ser programada para seguir automaticamente o processo de
empacotamento realizado pelo tar¸ com o uso da opção -z.

A seguir, veremos algumas opções que podem ser adicionadas ao gzip:

Opção Opção GNU Descrição


Unix
-c --stdout
Não compacta o arquivo original, porém o
resultado da compactação será enviado
para a saída padrão (tela), e, geralmente,
redirecionado para um novo arquivo.
-d --
Utilizada para descompactar arquivos no
decompres
formato .gz.
s
-f --force
Força a compactação ou
descompactação de um arquivo, por
exemplo, se existe um arquivo de mesmo
nome já compactado ou descompactado.
Opção Opção GNU Descrição
Unix
-l --list
Exibe informações detalhadas de um
arquivo compactado, como o tamanho do
arquivo compactado e o tamanho do
arquivo pós-compactação.

-q --quiet Não exibe mensagens de alerta.


-r --recursive Compacta, recursivamente, todos os
arquivos presentes em um diretório e
também arquivos dentro de supostos
subdiretórios.
-t --test Utilizada para testar a integridade do
arquivo compactado.
-v --verbose Exibe o processo de compactação ou
descompactação.
-<nível> --fast / --best Utilizada para gerenciar o grau de
compactação, sendo <nível> um valor de
1 a 9. Quanto menor o valor, menor a
compactação, e, consequentemente,
menor será o tempo de execução do
comando. Quanto maior o valor, maior a
compactação, e, consequentemente,
também será maior o tempo de execução
do comando. O comando GNU --best
equivale à opção Unix -9, e --fast equivale
à opção Unix -1.

Instrutor: Se achar necessário, fique à vontade para substituir estes exemplos:

Exemplos:

O primeiro exemplo da imagem anterior é uma simples compactação do arquivo teste; o arquivo
original foi compactado. No segundo exemplo, o arquivo teste2 foi compactado com a opção –c,
utilizando o recurso do redirecionador >, sendo o resultado da compactação redirecionado para um
novo arquivo de nome testinho.gz, mantendo o arquivo original intacto. No último exemplo, o
arquivo teste.gz foi descompactado por meio da opção –d.

Instrutor: substituir este exemplo:

Neste exemplo, diferente da aglutinação, usamos o tar com gzip (opcao –z)
O arquivo é compactado.
Se reparar no tamanho do arquivo que no exemplo do comando tar ele ficou com 6 MB, neste ele
ficou com 1.4MB

Neste exemplo, para descompactar um arquivo com gzip, usamos a opção –xz

Família de comandos do gzip

O comando gzip tem uma família de comandos utilizados com a função de simplesmente visualizar
arquivos já compactados, porém usando recursos adicionais de alguns comandos que vimos
anteriormente. Tais comandos podem ser úteis quando houver a necessidade de executar
determinada tarefa em um arquivo compactado com o formato gzip.

Comando Descrição
zcat Visualiza, com o comando cat, arquivos compactados
no formato .gz, sem necessariamente descompactar os
arquivos.
Comando Descrição
zgrep Utiliza o recurso do comando grep para localizar
palavras ou expressões em um arquivo compactado no
formato .gz, sem descompactar o mesmo.
zless Utiliza o recurso do comando less para visualizar um
arquivo compactado no formato .gz.
zmore Utiliza o recurso do comando more para visualizar um
arquivo compactado no formato .gz.

bzip2

O comando bzip2 é utilizado para compactar e também descompactar arquivos. Arquivos


compactados com o utilitário bzip2 são identificados pela extensão .bz2. Sua sintaxe é a seguinte:

bzip2 [opcoes] <arquivo>

A tabela a seguir descreve as principais opções utilizadas com o bzip2:

Opção Opção GNU Descrição


Unix
-c --stdout Não compacta o arquivo original, porém
o resultado da compactação será
enviado para a saída padrão (tela), e,
geralmente, redirecionado para um novo
arquivo.
-d -- Utilizada para descompactar arquivos
decompress que foram compactados pelo comando
gzip.
-f --force Força a compactação ou
descompactação de um arquivo, por
exemplo, se já existe um arquivo de
mesmo nome, já compactado ou
descompactado.
-q --quiet Não exibe mensagens de alerta.
-t --test Utilizada para testar a integridade do
arquivo compactado.
-v --verbose Exibe o processo de compactação ou
descompactação.
-<nível> --fast/--best Utilizada para gerenciar o grau de
compactação, sendo <nível> um valor de
1 a 9. Quanto menor o valor, menor a
compactação e, consequentemente,
menor será o tempo de execução do
comando. Quanto maior o valor, maior a
compactação e, consequentemente,
também será maior o tempo de
execução do comando. O comando
Opção Opção GNU Descrição
Unix

GNU --best equivale à opção Unix -9, e


--fast equivale à opção Unix -1.

Um detalhe muito importante é que um diretório não pode ser compactado de forma direta pelo
comando gzip, tendo, obrigatoriamente, que se tornar primeiro um arquivo empacotado, para
depois ser compactado.

No exemplo acima, aproveitamos um arquivo aglutinado com tar e copiamos para a pasta de teste
do bzip.
Reparem que o arquivo possui 6MB
Após usar o comando bzip2 para compactá-lo o seu tamanho reduz para 1,3 MB.

Para descompacta-lo usamos a opção -d

Podemos utilizar o parâmetro time para obter o tempo gasto na compactação.

Exemplo:
No exemplo acima, adicionamos o comando time ao bzip2, assim obtivemos o tempo que levou
para compactar o arquivo especificado.

Família de comandos do bzip2

O comando bzip2 também tem uma família de comandos utilizados com a função de apenas
visualizar arquivos compactados, porém usando recursos de alguns comandos vistos anteriormente.
Tais comandos podem ser úteis quando houver a necessidade de executar determinada tarefa em um
arquivo compactado com o formato bzip2.

Comando Descrição
bzcat Visualiza, com o comando cat, arquivos compactados
no formato .bz2, sem necessariamente descompactar
o arquivo.
bzgrep Utiliza o recurso do comando grep para localizar
palavras ou expressões em um arquivo compactado no
formato .bz2, sem descompactar o mesmo.
zless Utiliza o recurso do comando less para visualizar um
arquivo compactado no formato .bz2.
zmore Utiliza o recurso do comando more para visualizar um
arquivo compactado no formato .bz2.

gunzip

O comando gunzip é utilizado apenas para descompactar arquivos, tendo exatamente a mesma
função do comando gzip -d. Ele é utilizado para descompactar apenas um arquivo ou todos os
arquivos presentes em um diretório específico, devido à função recursiva.

A sintaxe do gunzip é a seguinte:

gunzip [opcoes] <arquivo>

As principais opções do gunzip estão descritas na tabela a seguir:

Opção Opção Descrição


Unix GNU
-c --stdout Não descompacta o arquivo original, porém o
resultado da descompactação será enviado
para a saída padrão (tela), e, geralmente,
redirecionado para um novo arquivo.
-f --force Força a descompactação de um arquivo, por
exemplo, se existe um arquivo de mesmo
nome já descompactado.
-q --quiet Não exibe mensagens de alerta.
Opção Opção Descrição
Unix GNU
-r -- Descompacta recursivamente todos os
recursive arquivos presentes em um diretório, e também
arquivos dentro de supostos subdiretórios.
-v --verbose Exibe o processo de descompactação.

Usamos no exemplo acima, o gunzip para descompactar um arquivo que foi gerado com o gzip

bunzip2

O comando bunzip2 é utilizado apenas para descompactar arquivos, e tem exatamente a mesma
função do comando bzip2 –d.

bunzip2 [opcoes] [arquivo]

A tabela a seguir descreve as principais opções utilizadas com bunzip2:

Opção Opção Descrição


Unix GNU
-c --stdout Não descompacta o arquivo original, porém o
resultado da descompactação será enviado
para a saída padrão (tela), e geralmente
redirecionado para um novo arquivo.
-f --force Força a descompactação de um arquivo, por
exemplo, se existe um arquivo de mesmo
nome já descompactado.
-q --quiet Não exibe mensagens de alerta.
-v --verbose Exibe o processo de descompactação.

Acima usamos o bunzip2 para descompactar um arquivo criado pelo bzip2


Considerações sobre backup de dados

O comando dd é eficiente nas operações de backup, especialmente para copiar discos ou partições
inteiras e imagens de mídias como CDs e DVDs. O dd faz uma cópia sequencial de dados, byte a
byte, de qualquer origem para qualquer destino. Sua utilização inadequada, porém, pode causar
sérios danos ao sistema. Portanto, é necessário ter cautela ao utilizá-lo.

Instrutor: Criar exemplo(s) do uso de dd


dd if=/dev/hda of=/dev/hdb

No exemplo acima, está sendo feita uma cópia fiel do HD Master Primário (hda) para o HD Slave
Primário (hdb)

Neste outro exemplo, está sendo copiado o setor MBR (Master Boot Record) para um arquivo.
Recordando, o MBR fica nos primeiros 512 setores do disco.

Entre os tipos de backup que podemos realizar no sistema, diferem-se o backup completo,
incremental e diferencial.

O backup completo salva todos os dados, independente de já terem sido salvos ou não em backups
anteriores, portanto os objetos são armazenados completamente.

Os backups incremental e diferencial podem ser definidos pela sua relação com o último backup
completo realizado. O backup incremental salva as diferenças em relação ao backup completo, de
forma que serão salvos, em cada backup incremental, os dados adicionais ao último backup
completo. Assim, caso sejam feitos três backups incrementais, em momentos 1, 2 e 3, o primeiro
salvará os dados do backup completo até o momento 1; o segundo salvará do backup completo até o
momento 2; já o terceiro cobrirá os dados do backup completo até o momento 3.

O backup diferencial gera um volume menor de dados, pois, usando o mesmo esquema que usamos
para o backup incremental, caso sejam realizados três backups diferenciais, em momentos 1, 2 e 3,
o primeiro deles salvará os dados do backup completo até o momento 1; o segundo salvará os dados
do momento 1 ao momento 2; ao terceiro restarão os dados do momento 2 ao momento 3.

Tópicos para revisão do capítulo

Atente para os tópicos a seguir. Eles devem ser estudados com muita atenção, pois
representam os pontos mais importantes do capítulo.

 O empacotamento é o ato de aglutinar arquivos e diretórios em um único arquivo. A compressão toma um


conjunto de dados e codifica-o de uma maneira que permita seu armazenamento num espaço menor;
 O comando tar é usado como empacotador de arquivos, preservando as informações do sistema de arquivos
aplicados a eles, ou seja, os metadados;

 O comando cpio também exerce as funções de empacotador ou desempacotador, além de poder ser usado
simplesmente para copiar arquivos. Embora seja capaz de ler e escrever no formato .tar, o cpio difere do tar
por trabalhar apenas com redirecionamentos de entrada e saída padrão;

 O comando gzip é utilizado para compactar e também descompactar arquivos. Arquivos compactados com o
utilitário gzip são identificados pela extensão .gz;

 O comando bzip2 é utilizado para compactar e também descompactar arquivos. Arquivos compactados com o
utilitário bzip2 são identificados pela extensão .bz2;

 O comando gunzip é utilizado apenas para descompactar arquivos, tendo exatamente a mesma função do
comando gzip –d;

 O comando bunzip2 é utilizado apenas para descompactar arquivos, e tem exatamente a mesma função do
comando bzip2 –d;

 Os backups que podemos realizar no sistema podem completos, incrementais ou diferenciais. O comando dd é
eficiente nas operações de backup, especialmente para copiar discos ou partições inteiras e imagens de mídias
como CDs e DVDs.

Laboratório 1

A. Compactando arquivos e pastas


1. Crie na pasta root uma pasta chamada laboratorio
# mkdir /root/laboratorio
2. Faça um backup para a pasta laboratorio das pastas /etc e /home compactando os dados com gzip
# tar -czvf /root/laboratorio/backup.tar.gz /etc /home
3. Faça um backup da pasta /etc e /home para a pasta laboratorio, usando o compactador bzip2
# tar -cjvf /root/laboratorio/backup.tar.bz2 /etc /home
4. Compare a compactação dos dois métodos, listando os arquivos e vendo o tamanho de cada um
# ls -l /root/laboratorio
5. Faça backup da pasta /etc/ com cpio, salve o arquivo na pasta laboratório
# cd /etc
# ls | cpio -ov > /root/laboratorio/backup.cpio
6. Verifique se o arquivo foi copiado
# cd /root/laboratorio
# ls
7. Faça backup do setor MBR com dd (substitua a unidade sda, pela sua unidade principal)
# dd if=/dev/sda of=/root/laboratorio/backup.mbr bs=512 count=1
8. Verifique se a cópia foi feita
# ls -l /root/laboratorio/backup.mbr

B. Descompactando arquivos e pastas


1. Crie os diretorios para a descompactação dos 3 tipos
# mkdir -p /root/laboratorio/descompacta/gzip
# mkdir -p /root/laboratorio/descompacta/bzip2
# mkdir -p /root/laboratorio/descompacta/cpio
2. Descompacte o arquivo backup.tar.gz na pasta gzip
# tar -xzvpf /root/laboratorio/backup.tar.gz -C
/root/laboratorio/descompacta/gzip
3. Verifique se os arquivos foram descompactados
# ls -laR /root/laboratorio/descompacta/gzip
4. Descompacte o arquivo backup.tar.bz2 na pasta bzip2
# tar -xjvf /root/laboratorio/backup.tar.bz2 -C
/root/laboratorio/descompacta/bzip2
5. Verifique se os arquivos foram descompactados
# ls -laR /root/laboratorio/descompacta/bzip2
6. Descompacte o arquivo backup.cpio a pasta cpio
# cd /root/laboratorio/descompacta/cpio
# cpio -iv < /root/laboratorio/backup.cpio

Exercícios de Fixação
1. Qual parâmetro utilizo no comando tar para compactar o conteúdo com bzip2?
a) -j
b) -z
c) -b
d) -x
e) -v
Alternativa Correta: A

2. Utilizei o comando bunzip2 backup.tar.gz, porém o sistema me retornou erro o seguinte


erro:
bunzip2: Can't guess original name for backup.tar.gz -- using backup.tar.gz.out
Qual a causa provável?
a) Digitei o comando de forma incorreta
b) faltou o parâmetro -x para extrair
c) O arquivo alvo não é compatível com bunzip2
d) O comando bunzip2 não existe.
e) O nome do arquivo alvo está errado
Alternativa Correta: C

3. Qual parâmetro utilizo no comando tar para compactar o conteúdo com gzip?
a) -j
b) -z
c) -b
d) -x
e) -v
Alternativa Correta: B

4. Qual parametro devo colocar no CPIO para compactar?


a) -c
b) -ov
c) -iv
d) -cv
e) -d
Alternativa Correta: B

5. Qual parametro devo colocar no CPIO para descompactar?


a) -c
b) -ov
c) -iv
d) -cv
e) -d
Alternativa Correta: C
Capítulo 15 - Agendamento de tarefas

Instrutor: Fique à vontade para criar exemplos onde achar necessário ou substituir os existentes

 Agendamento de tarefas;
Introdução
 Comando cron;
 Comando at.
Agendar tarefas é bastante útil para
automatizar a execução de certos processos
no sistema. Em plataformas GNU/Linux, os
dois métodos mais importantes para a
realização desses agendamentos são os
comandos cron e at. O primeiro permite a
execução periódica de tarefas, enquanto o
segundo é normalmente usado para agendar
uma única execução de um procedimento
em uma hora exata. Neste capítulo, veremos detalhadamente esses dois comandos.

cron

Muito utilizado em tarefas que envolvem a checagem de integridade do sistema, execução de


programas ou comandos e arquivamento de logs, o crond é um daemon que permite o
agendamento de uma execução de um comando ou programa para um dia, mês, ano ou horário
especifico.

As tarefas que o usuário pretende agendar devem ser documentadas nas contrabs, que são tabelas
verificadas a cada minuto pelo crond, com data e hora de execução indicadas para cada tarefa. As
contrabs podem ser de usuário ou do sistema. O primeiro tipo fica armazenado no diretório
/var/spool/cron/contrabs/<nomedousuario> e a contrab do sistema fica no /etc/crontab. Além
disso, elas se diferem pelo fato de as contrabs de usuário trazerem a especificação de qual usuário
irá executar a tarefa agendada.

Para tarefas cuja hora exata não precise ser especificada, elas podem ser colocadas nos diretórios
/etc/cron.hourly/, para excução de hora em hora, /etc/cron.daily/, para execução diária,
/etc/cron.weekly/, para execução semanal, ou /etc/cron.monthly/, para execução mensal.

Para especificar o agendamento de uma tarefa que será iniciada pelo daemon crond, é necessário
configurar o arquivo /etc/crontab, inserindo nele uma linha que deve possuir o seguinte formato:

# minuto hora dia mes dia_da_semana usuario comando

Cada um desses campos pode assumir valores de acordo com a tabela seguinte:
Campo Valor
minuto De 00 a 59.
hora De 00 a 23.
dia De 0 a 31.
mes De 1 a 12.
dia_da_sema
De 0 a 7.
na
usuario O usuário que irá executar o comando, no caso
de contrabs de usuário.
comando O comando que deve ser executado.

Instrutor: Se achar necessário, fique à vontade para substituir este exemplo

A seguir, temos um exemplo de tarefa inserida no arquivo /etc/crontab:

No exemplo anterior, foi definido que às 23:30h, de segunda até sexta, será efetuado um
empacotamento pelo comando tar.

Quanto à edição do arquivo /etc/crontab, é importante considerar a utilização de alguns caracteres,


os quais facilitarão o trabalho de agendamento:

 É necessário incluir uma linha em branco no final do arquivo para que o último comando seja executado;

 No campo que se refere aos dias da semana, o domingo pode ser representado pelo numero 0 ou 7;

 Os campos devem ser separados por um ou mais espaços ou tabulações;

 O asterisco (*) serve para especificar todo o intervalo disponível nos campos de data e hora;

 O hífen (-) é utilizado para especificar períodos de execução, incluindo o valor inicial e final;
 A vírgula (,) pode ser usada para especificar uma lista de valores;

 A barra (/) serve para especificar passos, ou seja, para inserir mais serviços que serão executados de acordo
com o agendamento.

Para editar um arquivo de usuário em /var/spool/cron/crontabs, podemos utilizar o comando


crontab, em vez de editar o arquivo /etc/crontab.

Utilizando o comando crontab

Cada usuário pode possuir um arquivo crontab próprio. Os arquivos crontab não foram
projetados para serem editados diretamente, apesar de estarem localizados no diretório
/var/spool/cron/crontabs. Para editá-los, dispomos do comando crontab, cuja sintaxe é a
seguinte:

crontab [opcoes] <usuario>

Se, na sintaxe, não aparecer um nome de usuário, o usuário atual será considerado.

A tabela a seguir descreve as opções que podemos utilizar com o comando crontab:

Opção Descrição
-l São exibidas as tarefas agendadas pelo usuário.
-e Utilizado para editar a crontab do usuário.
-r Remove a crontab do usuário.

Para usar esse comando, um usuário comum precisa estar listado no arquivo /etc/cron.allow, caso
ele exista, ou não estar listado no arquivo /etc/cron.deny. Em sistemas Debian padrão, se nenhum
desses dois arquivos existir, todos os usuários poderão agendar tarefas.

Com o comando:
crontab -e
Adicionamos o seguinte agendamento

Abaixo verificamos a lista de agendamentos


Abaixo removemos todos os agendamentos com a opção -r

at

Analogamente ao comando crontab, para utilizar o comando at, um usuário comum deve estar
listado no arquivo /etc/at.allow. Caso o arquivo não exista, o usuário não pode constar no arquivo
/etc/at.deny, que é consultado em seguida pelo sistema. Diferente do comando crontab, porém,
caso nenhum dos dois arquivos existam, nenhum usuário comum poderá usar o at, ficando então
restrito ao superusuário.

Trata-se de um comando também usado para o agendamento de uma tarefa. Sua sintaxe é:

at <quando> <comando>

As expressões que podem substituir o campo <quando> podem ser encontradas no arquivo
/usr/share/doc/at/timespec.

Como com o crontab, o parâmetro -l pode ser usado com o at para listar as tarefas agendadas, e um
alias para esse comando é o atq. Nessa listagem, é informado também o número atribuído para cada
trabalho, que pode ser usado com o comando atrm para excluir o agendamento.

No exemplo acima, criamos um agendamento do script backup_especial para ser executado as 22


horas do dia 17/11/2010
Com o comando atq foi listado os agendamentos.

Tópicos para revisão do capítulo


Atente para os tópicos a seguir. Eles devem ser estudados com muita atenção, pois
representam os pontos mais importantes do capítulo.

 Muito utilizado em tarefas que envolvem a checagem de integridade do sistema, execução de programas ou
comandos e arquivamento de logs, o crond é um daemon que permite o agendamento de uma execução de um
comando ou programa para um dia, mês, ano ou horário especifico, através da criação de tabelas chamadas
crontabs;

 O comando at também é usado para o agendamento de uma tarefa. O parâmetro -l ou o alias atq pode ser
usado para listar as tarefas agendadas. Nessa listagem, é informado também o número atribuído para cada
trabalho, que pode ser usado com o comando atrm para excluir o agendamento.

Laboratório 1

A. Agendando tarefas com o crontab


1. Abra o editor do crontab
# crontab -e
2. Adicione a tarefa para executar 10 minutos a frente do horário que você está agora na data de
hoje.
# 15 11 16 11 * touch /tmp/testecron.txt && echo “Inicio do Teste do
Cron” >> /tmp/testecron.txt && DATA=`date +%d-%B-%Y_%H-%M` && echo
$DATA >> /tmp/testecron.txt && echo “Fim do Teste do Cron” >>
/tmp/testecron.txt
3. Salve e saia
# :wq
4. Aguarde o horário programado
5. Veja se o arquivo foi criado e o teste concluido
# cat /tmp/testecron.txt
6. Altere o crontab para rodar todos os dias neste horário, para isto apenas modifique a linha que
você havia inserido anteriormente
# 15 11 * * * touch /tmp/testecron.txt && echo “Inicio do Teste do
Cron” >> /tmp/testecron.txt && DATA=`date +%d-%B-%Y_%H-%M` && echo
$DATA >> /tmp/testecron.txt && echo “Fim do Teste do Cron” >>
/tmp/testecron.txt
7. Verifique se o agendamento foi criado
# crontab -l

B. Agendando tarefas com o comando AT


1. Verifique se há tarefas agendadas
# atq
2. Agende uma terefa para ser executada 10 minutos a frente do horario em que você está agora
# at 11:30
3. Mande ele criar um arquivo na pasta /tmp
at > touch /tmp/teste_at
4. Salve o agendamento
CTRL+D
5. Verifique o agendamento foi criado
# atq
6. Aguarde o horario e depois teste se o arquivo foi criado
# ls -l /tmp/teste_at
7. Crie um agendamento para a próxima meia noite
# at midnight
8. Peca para criar um novo arquivo na pasta /tmp
at > touch /tmp/teste_at_meia-noite
9. Salve o agendamento
CTRL+D
10. Verifique se a terefa está agendada e observe o numero dele
# atq
11. Remova o agendamento
# atrm [numero do agendamento]
12. Verifique se foi removido
# atq

Exercícios de Fixação
1. Qual comando utilizo para criar ou editar um agendamento no cron?
a) crontab -l
b) crontab -e
c) crontab -x
d) crontab -d
e) crontab -c
Alternativa Correta: B

2. O agendamento “00 10 * * 5 /bin/ls” ocorrerá em quais períodos?


a) Todo dia 5 as 00:10hs
b) Todo dia 5 as 10:00hs
c) Toda sexta-feira as 10:00hs
d) Toda quinta-feira as 10:00hs
e) Toda quinta-feira as 00:10hs
Alternativa Correta: C

3. O agendamento “00-59/5 10 30 * * /bin/ls” ocorrerá em quais períodos?


a) Todo dia 30 as 10:00hs e as 10:59hs e as 5 horas
b) De 5 em 5 minutos no dia 30/10
c) De 5 em 5 minutos entre 10:00 e 10:59 todo dia 30
d) A cada 5 horas do dia 30 do 10
e) Nunca, está com erro
Alternativa Correta: C

4. Qual comando utilizo para ver a lista de agendamentos do AT?


a) atq
b) at-list
c) list-at
d) at
e) atrm
Alternativa Correta: A

5. Qual comando utilizo para remover um agendamento do comando AT?


a) atq
b) at-remove
c) remove-at
d) atrm
e) at
Altenativa Correta: D
Plano de Aula
Linux Módulo I – Princípios do Linux
Tempo Matéria
1 hora 30 minutos Capitulo 1 – Introducao ao Linux

1. Aula
2 horas Capítulo 2 – Primeiro Contato com o Linux
15 minutos Laboratório do Capítulo 2
15 minutos Intervalo
4 horas Total do Período
Tempo Matéria
1 hora 30 minutos Capítulo 3: FHS – Arvore dos Diretórios
2. Aula

15 minutos Laboratório do Capítulo 3


1 hora 45 minutos Capítulo 4: Comandos do GNU/Linux
15 minutos Laboratório 1 do Capítulo 4
15 minutos Intervalo
4 horas Total do Período
Tempo Matéria
3. Aula

3 horas Capítulo 4: Comandos do GNU/Linux


45 minutos Laboratórios 2, 3 e 4 do Capítulo 4
15 minutos Intervalo
4 horas Total do Período
Tempo Matéria
4. Aula

3 horas Capítulo 4: Comandos do GNU/Linux


45 minutos Laboratórios 5, 6 e 7 do Capítulo 4
15 minutos Intervalo
4 horas Total do Período
Tempo Matéria
Capítulo 5: Conhecendo a Documentação do
1 hora GNU/Linux
5. Aula

15 minutos Laboratório do Capítulo 5


2 horas Capítulo 6: Editores de Texto
30 minutos Laboratório Capítulo 6
15 minutos Intervalo
4 horas Total do Período
Tempo Matéria
2 horas Capítulo 7: Gerenciando Hardware e Dispositivos
6. Aula

15 minutos Laboratório do Capítulo 7


1 hora 30 minutos Capítulo 8: Introdução a Redes de Computadores
15 minutos Intervalo
4 horas Total do Período
Tempo Matéria
1 hora Capítulo 8: Introdução a Redes de Computadores
7. Aula

15 minutos Laboratório do Capítulo 8


Capítulo 9: Instalação do Linux em Estações de
2 horas 30 minutos Trabalho
15 minutos Intervalo
4 horas Total do Período
Tempo Matéria
1 hora 30 minutos Capítulo 10: Gerenciando programas
8. Aula

15 minutos Laboratório 1 do Capítulo 10


1 hora 30 minutos Capítulo 11: Servidor X – Interface Gráfica
30 minutos Laboratório 1 do Capítulo 11
15 minutos Intervalo
4 horas Total do Período
Tempo Matéria
9. Aula

3 horas Capítulo 12: Administração de Usuários e Grupos


45 minutos Laboratório do Capítulo 12
15 minutos Intervalo
4 horas Total do Período
Tempo Matéria
1 hora Capítulo 13: Administração do Shell
15 minutos Laboratório do Capítulo 13
10. Aula

Capítulo 14: Compactadores, Empacotadores e


1 hora
Procedimentos de Backup
15 minutos Laboratório do Capítulo 14
45 minutos Capítulo 15: Agendamento de Tarefas
30 minutos Laboratório do Capítulo 15
15 minutos Intervalo

You might also like