Introdução ao Linux
4 milhões de usuários, usufruindo de
res de sistemas Windows e aos profissionais que desejam uma infraestrutura de redes avançadas
iniciar os estudos para a certificação LPIC1, do Linux para comunicação, computação e
Professional Institute. experimentação, que contribui para a
Este livro inclui os roteiros das atividades práticas e o con- Lucas Torres Lima integração dos sistemas de Ciência e
Tecnologia, Educação Superior, Saúde,
teúdo dos slides apresentados em sala de aula, apoiando
Cultura e Defesa.
profissionais na disseminação deste conhecimento em Saiba mais em https://rnp.br.
suas organizações ou localidades de origem.
Sobre a RNP – qualificada como uma
Organização Social (OS), a Rede Nacional
de Ensino e Pesquisa (RNP) é vinculada
ao Ministério da Ciência, Tecnologia,
Inovação e Comunicações (MCTIC) e
mantida por esse, em conjunto com
os ministérios da Educação (MEC),
Cidadania, Saúde (MS) e Defesa
(MD), que participam do Programa
Interministerial RNP (PI-RNP). Pioneira
no acesso à internet no Brasil, a RNP
planeja, opera e mantém a rede Ipê,
infraestrutura óptica nacional acadêmica
de alto desempenho. Com Pontos de
Presença em 27 unidades da federação,
a rede conecta 1.174 campi e unidades
nas capitais e no interior. São mais de
4 milhões de usuários, usufruindo de
uma infraestrutura de redes avançadas
para comunicação, computação e
experimentação, que contribui para a
integração dos sistemas de Ciência e
Tecnologia, Educação Superior, Saúde,
Cultura e Defesa.
Saiba mais em https://rnp.br.
Introdução
ao Linux
Rio de Janeiro
Escola Superior de Redes
2019
Copyright © 2019 – Rede Nacional de Ensino e Pesquisa – RNP
Rua Lauro Müller, 116 sala 1103
22290-906 Rio de Janeiro, RJ
Diretor Geral
Nelson Simões
Edição
Lincoln da Mata
Revisão Técnica
Bruno Alves Fagundes
Versão
3.0.0
Este material didático foi elaborado com fins educacionais. Solicitamos que qualquer erro encon-
trado ou dúvida com relação ao material ou seu uso seja enviado para a equipe de elaboração de
conteúdo da Escola Superior de Redes, no e-mail info@esr.rnp.br. A Rede Nacional de Ensino e
Pesquisa e os autores não assumem qualquer responsabilidade por eventuais danos ou perdas, a
pessoas ou bens, originados do uso deste material.
As marcas registradas mencionadas neste material pertencem aos respectivos titulares.
Distribuição
Escola Superior de Redes
Rua Lauro Müller, 116 – sala 1103
22290-906 Rio de Janeiro, RJ
http://esr.rnp.br
info@esr.rnp.br
ISBN 978-85-63630-59-9
CDD 005.40469
Sumário
A metodologia da ESR ix
Sobre o curso x
A quem se destina x
Permissões de uso xi
Sobre o autor xii
1. Histórico
O que é um Sistema Operacional? 1
Características principais 3
Histórico do Unix 5
Versões do Unix 5
Similares Unix 6
Software Livre 7
Licença GPL 8
Distribuições Linux 8
CentOS 9
Debian 9
Ubuntu 9
Slackware 10
iii
A escolha da distribuição Linux 10
Hardwares suportados 11
2. Linux no desktop
Adquirindo uma cópia do Linux 15
Instalando o Linux 19
O que é LVM 19
Instalação de plug-ins 22
GNOME desktop 23
KDE desktop 26
Unity desktop 28
Xfce desktop 29
Entretenimento 31
Boot Manager 33
MBR 34
3. Instalação de aplicações
Aplicações no Sistema Operacional Linux 39
Compilação e instalação 42
iv
Red Hat Package Manager (RPM) 45
YUM 48
Configurando o YUM 48
Utilizando o YUM 49
Atualizando o sistema 50
Procurando um pacote 55
Instalando um pacote 55
Removendo um pacote 56
4. Organização do Linux
Sistema de arquivos do Linux 57
Tipos de arquivos 60
Inode 60
Arquivo regular 60
Diretório 60
Arquivos de dispositivos 61
Named pipes 62
Links 63
Sockets 63
Man pages 66
O help online 70
Permissões de arquivos 71
Criando diretórios 74
v
Copiando arquivos e diretórios 75
5. Desvendando o Linux
Entrada e saída padrão de dados e saída padrão de erros 81
Pipe ou canalização 83
6. Edição de texto
Processadores de texto 91
Editores de texto 91
Editor Nano 93
Teclas de movimentação 94
Editor vi 95
7. Shell
Noções básicas 103
Gerenciamento de processos 104
Utilitários de inicialização 106
SysVinit 106
SystemD 107
Runlevels x Targets 108
vi
Criação de processos 109
Visualização de processos 110
Variáveis de ambiente 111
Rede cabeada 115
Rede Wi-Fi 118
Rede Wi-Fi 122
Reiniciando a rede 127
Verificando a rede 129
ping 130
nslookup 131
route 131
netstat 132
traceroute 132
9. Segurança básica
Introdução 135
O comando su 137
O comando sudo 138
Dicas de segurança 139
Bloqueio do BIOS 139
Antivírus no Linux 143
vii
Firewall 143
Regras 144
O Netfilter 144
Atualizando o Linux 145
Arquivos de dispositivos 148
Módulos 149
Initrd 150
Gerenciando dispositivos 150
Hotplug 150
Udev 151
Unidades de CD/DVD 153
Interfaces de rede 155
Placas SCSI 155
Placas de vídeo 156
Gerenciamento de energia 156
viii
Escola Superior de Redes
A Escola Superior de Redes (ESR) é a unidade da Rede Nacional de Ensino e Pesquisa (RNP)
responsável pela disseminação do conhecimento em Tecnologias da Informação e Comunica-
ção (TIC). A ESR nasce com a proposta de ser a formadora e disseminadora de competências
em TIC para o corpo técnico-administrativo das universidades federais, escolas técnicas e
unidades federais de pesquisa. Sua missão fundamental é realizar a capacitação técnica do
corpo funcional das organizações usuárias da RNP, para o exercício de competências aplicá-
veis ao uso eficaz e eficiente das TIC.
A ESR oferece dezenas de cursos distribuídos nas áreas temáticas: Administração e Projeto
de Redes, Administração de Sistemas, Segurança, Mídias de Suporte à Colaboração Digital e
Governança de TI.
A metodologia da ESR
A filosofia pedagógica e a metodologia que orientam os cursos da ESR são baseadas na
aprendizagem como construção do conhecimento por meio da resolução de problemas típi-
cos da realidade do profissional em formação. Os resultados obtidos nos cursos de natureza
teórico-prática são otimizados, pois o instrutor, auxiliado pelo material didático, atua não
apenas como expositor de conceitos e informações, mas principalmente como orientador do
aluno na execução de atividades contextualizadas nas situações do cotidiano profissional.
Dessa forma, o instrutor tem participação ativa e dialógica como orientador do aluno para as
atividades em laboratório. Até mesmo a apresentação da teoria no início da sessão de apren-
dizagem não é considerada uma simples exposição de conceitos e informações. O instrutor
busca incentivar a participação dos alunos continuamente.
ix
As sessões de aprendizagem onde se dão a apresentação dos conteúdos e a realização das
atividades práticas têm formato presencial e essencialmente prático, utilizando técnicas de
estudo dirigido individual, trabalho em equipe e práticas orientadas para o contexto de atua-
ção do futuro especialista que se pretende formar.
Sobre o curso
Esse é o curso introdutório da trilha de Administração de Sistemas. Seu objetivo é introduzir
o aluno ao mundo Linux. Para as atividades práticas utilizamos Sistemas Operacionais Linux
atualizados e estáveis.
A quem se destina
Esse é o curso que abrirá as portas para um ambiente computacional moderno e ágil que
está sendo usado no mundo inteiro, como uma opção cada vez mais técnica e dinâmica
para o gerenciamento de plataformas computacionais complexas. Destina-se também a
administradores de sistemas Windows com interesse em atualização tecnológica.
x
Convenções utilizadas neste livro
As seguintes convenções tipográficas são usadas neste livro:
Itálico
Indica nomes de arquivos e referências bibliográficas relacionadas ao longo do texto.
Indica comandos e suas opções, variáveis e atributos, conteúdo de arquivos e resultado da saída
de comandos.
Trechos que não são código (programa fonte) e sim o resultado apresentado no monitor do
computador após a execução de um comando. Em geral dizemos que é o output apresentado
numa janela do tipo terminal.
Símbolo !
Indica um aviso ou precaução a ser considerada.
Símbolo p
Indica questionamentos que estimulam a reflexão ou apresenta conteúdo de apoio ao
entendimento do tema em questão.
Símbolo l
Indica notas e informações complementares como dicas, sugestões de leitura adicional ou
mesmo uma observação.
Símbolo
Indica um documento ou arquivo disponível no Ambiente Virtual de Aprendizagem – AVA
que pode ser utilizado como referência complementar.
Símbolo
Indica atividade a ser executada no Ambiente Virtual de Aprendizagem – AVA.
Permissões de uso
Todos os direitos reservados à RNP.
Agradecemos sempre citar esta fonte quando incluir parte deste livro em outra obra.
Exemplo de citação: PEIXOTO, Arthur Mendes; LIMA, Lucas Torres. Introdução ao Linux.
Rio de Janeiro: Escola Superior de Redes, 2013.
Comentários e perguntas
Para enviar comentários e perguntas sobre esta publicação:
Escola Superior de Redes RNP
Endereço: Av. Lauro Müller 116 sala 1103 – Botafogo
Rio de Janeiro – RJ – 22290-906
E-mail: info@esr.rnp.br
xi
Sobre o autor
Lucas Torres Lima possui graduação em Análise e Desenvolvimento de Sistemas pela
UNITINS-TO. Detém certificações internacionais como a LPIC-1, NCLA-11 e DCTS. Abrange
11 anos de experiência em Tecnologia da Informação, enfatizando atuação em instrutoria,
Administração de Servidores Linux e gerência corporativo com ferramentas Symantec.
Neste período atuou em empresas como Receita Federal do Brasil, Centro de Computação
da Aeronáutica de Brasília e Brasil Telecom (Oi). Atualmente é empregado público na
empresa SERPRO, Instrutor Acadêmico e Consultor Autônomo.
xii
1
Histórico
objetivos
conceitos
O que é um Sistema Operacional; Histórico do Unix; O que são Softwares
Livres e Licenças.
11 Gerenciar o uso da memória: é preciso manter a integridade dos dados e dos pro-
gramas em execução na memória RAM do computador.
1
Essas funções básicas são as mínimas necessárias para o funcionamento de um compu-
tador. Veremos que um Sistema Operacional pode ter muitas outras funções que definem
sua especialização.
Dependendo do tipo de aplicação que um computador vai suportar, seu Sistema Operacional
pode necessitar executar funções especiais, além das básicas apresentadas anteriormente.
Um Sistema Operacional que se destina a aplicações pessoais deve ter interface gráfica bem
desenvolvida para facilitar a utilização por usuários leigos em sistemas. Há aqueles que se
destinam a aplicações em tempo real, ou seja, que são sensíveis a retardos, conforme ocorre
com alguns controles de processos industriais. Existem computadores que são comparti-
lhados, atendendo a usuários de uma empresa ou departamento, que necessitam realizar
diversas tarefas simultâneas (multitarefa), ou que permitem vários usuários conectados
simultaneamente (multiusuário). Esses computadores necessitam de Sistemas Operacionais
que realizem funções especiais, como:
Veremos que, desde o nascimento do Unix até os dias atuais, além das funcionalidades
básicas e especiais, várias outras funções foram agregadas ao Sistema Operacional,
tornando-o um sistema de grande complexidade e aplicabilidade, ou seja, um Sistema
Operacional multipurpose.
Somente o kernel depende do hardware, permitindo que quase todo o sistema seja reapro-
veitado na migração entre diferentes máquinas. O interpretador de comandos, chamado de
shell, não faz parte do kernel do sistema, e é uma excelente linguagem de programação, que
torna o Unix um sistema bastante versátil.
A cada processo é atribuída uma prioridade, que se altera dinamicamente conforme a exe-
Introdução ao Linux
2
liberando, assim, parte de memória para permitir que outros processos possam ser execu-
tados. A figura 1.1 mostra como é dividida a arquitetura do Sistema Operacional Unix. Essa
divisão proporciona a esse sistema diversas características, que veremos a seguir.
Usuários e aplicações
Interpretador de comandos
Chamadas do sistema
Kernel
Figura 1.1
Divisão do Sistema Hardware
Operacional Unix.
Características principais
O Unix é um Sistema Operacional muito flexível, com grande número de funcionalidades.
Principais características:
11 Portabilidade: o Unix é portável, ou seja, pode ser adaptado facilmente para ser exe-
cutado em diferentes arquiteturas de hardware. Sua adequação a um novo hardware é
rápida e exige pequeno esforço de programação. Talvez essa seja a característica mais
importante desse Sistema Operacional, que permitiu sua adoção por centenas de fabri-
cantes diferentes. A portabilidade se estende, também, para os programas e pacotes de
software escritos para o Unix, o que promoveu grande desenvolvimento de aplicativos e
intensificou sua expansão no mercado.
11 Multiusuário: o Unix foi concebido para ser um sistema multiusuário, suportando cone-
xões simultâneas de diversos usuários. Com isso, é possível melhor utilização da capaci-
dade de processamento e da manipulação e armazenamento das informações do sistema
de computação. Para isso, o Sistema Operacional possui ferramentas de segurança para
permitir o isolamento das atividades de cada usuário.
1 3
2 3
2
Figura 1.2 3 1
Capítulo 1 - Histórico
Multiprocessa- 4
4
mento: execução
de múltiplas tarefas Multi
ao mesmo tempo processamento
3
11 Estrutura hierárquica de diretórios: o sistema de armazenamento de informações
possui estrutura hierárquica, como mostra a figura 1.3. A estrutura hierárquica é uma
forma de arquivamento natural, pois pode ser comparada, por exemplo, à estrutura
organizacional hierárquica de uma empresa e, consequentemente, torna mais fácil a
localização e a manipulação de informações distribuídas por essa estrutura.
/ (root)
Leste Oeste
Arquivos Arquivos Figura 1.3
Arquivos Estrutura de
de contas de cartões
de salários hierarquia do
a pagar de ponto
sistema de
Relatórios Relatórios
armazenamento de
de vendas de vendas
informações.
Entrada Saída
Comando 1 Comando 2 Comando 3 Comando 4
padrão padrão
Figura 1.4
Uso de pipelines
$ Comando1 | Comando2 | Comando3 | Comando4 ou pipes.
11 Utilitários: o Unix incorpora centenas de programas utilitários para funções, como: seleção
de dados, processamento de texto e busca de informações. Essas facilidades formam um
conjunto de ferramentas que permitem a execução de diversos tipos de tarefas.
4
Histórico do Unix
O Unix surgiu no Bell Laboratories em 1969, a partir do trabalho de Ken Thompson na
evolução de outro Sistema Operacional, o Multics. No desenvolvimento do Unix, Thompson
sentiu a necessidade de escrevê-lo para diferentes tipos de arquiteturas e decidiu fazer o
Unix independentemente da máquina em que fosse executado, criando a linguagem B. Essa
linguagem evoluiu para a linguagem C, desenvolvida por Dennis Ritchie, o que permitiu
reescrever o Unix e torná-lo portável para diferentes arquiteturas. Devido à característica
de portabilidade do Unix, no início da década de 1980 foram desenvolvidos diversos pacotes
de programas, que foram utilizados por diferentes fabricantes, tornando mundialmente
conhecidos o Unix, a linguagem C e seus aplicativos.
O Unix se tornou um Sistema Operacional bastante conhecido não somente no mundo acadê-
mico, como também no meio comercial. Os sistemas Unix-based e similares ao Unix prolife-
raram, sendo oferecidos por diversos fabricantes de computadores, desde os pessoais até os
mainframes, sempre mantendo suas características básicas, tornando-o um padrão de fato.
Versões do Unix
As versões do Unix são aquelas licenciadas exclusivamente pela AT&T, que podem ostentar
o nome Unix. Uma variedade de versões, algumas mais famosas e outras menos, foram
desenvolvidas desde seu surgimento. Principais versões do Unix:
11 Unix Sexta Edição: é a mais antiga versão licenciada, na maioria dos casos para institui-
ções educacionais, não havendo nenhuma versão comercial disponível. Essa versão foi
lançada em 1975.
11 PWB Unix: versão especializada desenvolvida pelo Bell Labs, que inclui facilidades para
desenvolvimento de software por grandes equipes de programadores. Essa versão foi
lançada em 1977.
11 Unix Versão 7: primeira versão licenciada comercialmente pela AT&T, com maior número
de instalações em microcomputadores. Essa versão foi lançada em 1979.
11 Unix System III: atualização da versão 7, que incorporou as características da PWB. Foi
um grande sucesso nos anos 80, disponibilizado pela maioria dos fabricantes de micro-
computadores. Lançada em 1982.
A AT&T licencia o software Unix, mas não a marca registrada Unix, que é de uso exclusivo da
Bell Labs. Dessa forma, o fabricante adquire o código-fonte do sistema, mas não pode uti-
lizar o nome Unix, tendo de atribuir um nome diferente, o que contribui para a proliferação
de nomes, gerando confusão em relação às versões.
5
Esses sistemas geralmente são compatíveis entre si, sendo chamados de sistemas Unix-based.
Os principais são:
11 AIX: desenvolvido pela IBM em 1986, inicialmente para a plataforma IBM 6150. Atual-
mente suporta diversos tipos de arquitetura. Entre suas características podemos des-
tacar sua ferramenta de gerenciamento do sistema, o SMIT.
11 HP-UX: desenvolvido em 1984 pela HP, é um dos sistemas Unix mais utilizados atual-
mente. É baseado na versão System V.
11 SunOS: desenvolvido pela Sun Microsystems em 1982. Inicialmente, o SunOS era baseado
no Unix BSD, mas a partir da versão 5.0 teve seu nome alterado para Solaris e passou a
ser baseado no System V Release 4.
Além dessas, surgiram na década de 1990 versões livres de Unix como FreeBSD, NetBSD e
OpenBSD, todas baseadas na distribuição BSD. Em reação a essas restrições, começaram a
surgir sistemas similares ao Unix que simulavam as características externas do sistema, propor-
cionando aos usuários as mesmas facilidades e comandos, e permitindo executar os mesmos
programas. Esses sistemas não utilizam o código-fonte do Unix e podem ser vendidos sem
pagar royalties à AT&T. Alguns exemplos desses sistemas são: UNOS, Unetix e Coherent.
Alguns desses sistemas similares ao Unix mostraram grandes variações nas interfaces gráficas,
protocolos de redes, utilitários de gerenciamento, administração de periféricos, entre outras.
O desenvolvimento de um código-fonte novo, independente da AT&T, e que constituísse de fato
um padrão surgiu, então, como uma necessidade.
Similares Unix
Andrew Tanenbaum, pesquisador na área de redes de computadores e Sistemas Opera-
cionais, desenvolveu um protótipo de Sistema Operacional baseado no Unix, chamado de
Minix, descrito em “Operating System: Design and Implementation” (1987). O Minix era
utilizado em cursos de ciência da computação em diversas universidades, entre elas, a Uni-
versidade de Helsinque, onde um estudante chamado Linus Torvalds decidiu escrever seu
próprio Sistema Operacional. Seu objetivo era fazer um “Minix melhor que o Minix”. Torvalds
desenvolveu então os primeiros kernels do Linux, que já processavam alguns programas
de interesse geral, e abriu seu código-fonte na internet, onde cada um poderia desenvolver
seus próprios recursos sobre um kernel de conhecimento comum. Essa é a filosofia do sof-
tware livre, a mesma que proporcionou o desenvolvimento acelerado da internet.
final de 1993. O projeto GNU, da Free Software Foundation, uma organização que apoia
projetos de desenvolvimento de software livre, e os trabalhos da Universidade de Berkeley,
que produziram o BSD Unix, foram duas importantes fontes de desenvolvimento dos atuais
utilitários e aplicativos do Linux.
6
O Linux está em franco crescimento no mercado, disponível em diversos idiomas, inclusive
em português, com interfaces gráficas, processadores de texto, sistemas gerenciadores de
bancos de dados, suporte a redes de excelente qualidade e uma infinidade de outras aplica-
ções. Na verdade, existem atualmente diversas distribuições do Linux, que veremos a seguir.
Software Livre
“'Software livre’ é uma questão de liberdade, não de preço. Para entender o conceito, pense em
‘liberdade de expressão’, não em ‘cerveja grátis'."
Free Software Foundation, 2007.
Para garantir que os termos Free Software (Software Livre) e Open Source (Código Aberto)
sejam utilizados de forma correta, existem duas principais organizações responsáveis pela
proteção e promoção do software livre internacionalmente: a Free Software Foundation
(FSF) e a Open Source Initiative (OSI).
A Free Software Foundation menciona que para um software ser considerado livre deve
obedecer aos quatro princípios da liberdade. São eles:
11 Princípio número 1: o usuário deve ter a liberdade de executar o programa, para qual-
quer propósito.
11 Princípio número 2: o usuário deve ter a liberdade de estudar e adaptar o programa para
as suas necessidades (o acesso ao código-fonte é um pré-requisito para essa liberdade).
11 Princípio número 3: o usuário deve ter a liberdade de redistribuir cópias de modo que
possa ajudar ao próximo.
Sendo assim, o ponto central do software livre se baseia na ideia de atribuir liberdade
para que usuários executem, copiem, distribuam, estudem, aperfeiçoem e modifiquem
um software levando em consideração suas características, expectativas e necessidades,
contribuindo para uma visão construtivista e evolucionária em que diversas pessoas podem
trabalhar para torná-lo melhor.
7
Licença GPL
Licença de Software é um documento que descreve como o público poderá utilizar um
software. Atualmente existem diversas licenças entre as classes pagas (proprietárias) e não
pagas (livres). A de software livre mais utilizada no mundo é a Licença Pública Geral GNU, a
GPL (General Public License).
A Licença Pública Geral, também referenciada por copyleft (trocadilho com referência a Figura 1.5
“copyright”), é a licença primária para software de código aberto que atende aos quatro Exemplo de
Softwares Livres
princípios da liberdade. Sua característica principal: qualquer trabalho derivado de um sof- que adotam a
tware livre, sob GPL, obrigatoriamente deverá permanecer livre. licença GPL.
É importante saber que existem inúmeras licenças livres ou compatíveis com a GPL, e que
também usam a filosofia de copyleft, com o objetivo de defender a liberdade do conheci-
mento, informação e código aberto. Alguns exemplos:
11 CC (Creative Commons).
Distribuições Linux
Red Hat Enterprise Linux
A distribuição Red Hat Enterprise Linux incorpora facilidades, como programas de configuração
de recursos do sistema, interfaces gráficas, especializações para versões cliente e servidor, além
de aplicativos como suítes de escritório. Com ela, é fornecido o ambiente gráfico X-Window,
contendo o gerenciador de janelas KDE, desenvolvido por um projeto de software livre.
Introdução ao Linux
8
A Red Hat está patrocinando o projeto Fedora juntamente com a comunidade formada por
desenvolvedores de software, que dão suporte ao desenvolvimento de software livre. O
objetivo desse projeto da comunidade Linux é manter um Sistema Operacional completo, de
aplicação geral, com o código-fonte totalmente aberto e gratuito.
CentOS
CentOS A distribuição CentOS deriva da distribuição Red Hat Enterprise Linux (RHEL), de acordo com
Distribuição Linux as regras de redistribuição definidas pela Red Hat Enterprise, que são remoção de softwares
de classe Enterprise proprietários de terceiros, remoção de imagens, logotipos e textos referenciando a Red Hat,
derivada de códigos
fonte gratuitamente desde que não façam parte de notas de copyright, entre outras.
distribuídos pela Red
Hat Enterprise Linux O CentOS é distribuído sob a licença GNU/GPL para aplicações com servidores de pequeno,
e mantida pelo médio e grande porte, e é mantido por uma ativa e crescente comunidade de usuários
CentOS Project. denominada CentOS Project. Além disso, possui diversas vantagens sobre outras distribui-
ções: rápida correção de bugs e vulnerabilidades, grande rede de repositórios para down-
load, várias opções de suporte como chat, IRC, listas de e-mail, fóruns e um FAQ dinâmico e
abrangente. Também é possível obter suporte comercial oferecido por empresas parceiras.
Debian
A distribuição Debian foi desenvolvida por Ian Murdock em 1993. O nome Debian é uma
junção de Debra, sua namorada na época, e Ian, seu nome. O Debian foi patrocinado pela
Free Software Foundation, de Richard Stallman, e sua ideia inicial e que se mantém intacta
até hoje é que o Debian é e sempre será uma distribuição livre e gratuita.
Ubuntu
A distribuição Ubuntu foi desenvolvida em 2001 pela empresa Canonical, fundada pelo
sul-africano Mark Shuttleworth, que trabalha na promoção do software livre. Derivada do
Debian, contém todas as ferramentas necessárias, desde processadores de texto e leitores
de e-mail a servidores web. Utiliza pacotes padrão Debian Package (.deb) e tem como geren-
ciador de pacotes o Advanced Packaging Tool (APT).
Support (LTS), adquire-se três anos de suporte para desktops e cinco anos para servidores.
Não é cobrado nenhum valor pela versão LTS.
9
Slackware
A distribuição Slackware também é uma das mais populares distribuições Linux, com boa
penetração de mercado. Seus pontos fortes são o desempenho e a estabilidade, que a
indicam para utilização em servidores. Além disso, possui conversor que permite trabalhar
com pacotes nativos da distribuição Red Hat Enterprise Linux. Vem com ambiente gráfico
X-Window e o gerenciador de janelas fvwm, que possui design similar ao da interface do
Microsoft Windows.
Essa distribuição ainda conta com pacotes de segurança que permitem avisar, via e-mail,
que uma função de inicialização do sistema ou um script foi alterado e que isso pode causar
transtornos ao sistema. Sua instalação é bem mais complexa.
11 Estabilidade no mercado.
11 Ambiente gráfico.
11 Gerenciador de pacotes.
10
Hardwares suportados
Ao trabalhar com sistemas Linux é muito importante investigar a compatibilidade de har-
dwares antes mesmo de comprá-los. Afinal, o mercado de hardware não é tão direcionado
ao mundo livre, e na maioria das vezes precisamos recorrer à internet em busca de fóruns
confirmando que tal hardware foi testado e realmente funciona para certas distribuições.
É possível fazer consultas ao site Linux Hardware Compatibility Lists & Linux Drivers:
https://www.linux-drivers.org.
No site, podemos verificar um índice contendo uma lista de hardwares compatíveis man-
tidos pelas principais distribuições Linux, classificados pelos seguintes tópicos:
11 Driver em versão Alpha ou Beta: o kernel ainda não suporta, mas pode ser compilado
e adicionado como um módulo. Não há nenhuma garantia de funcionamento e não é
recomendado em ambiente de produção.
Apesar de o Linux poder trabalhar com drivers genéricos, que podem atuar tão bem quanto
os “originais” do próprio fabricante, é importante saber que nem todo hardware será
suportado por um Sistema Linux, como hardwares de projetos especiais para o Microsoft
Windows ou Apple MAC e bibliotecas de drivers cujo código-fonte não é aberto.
11
Dispositivo Características Dados coletados
A expectativa deve ser sempre buscar o melhor desempenho na utilização total do sistema.
Para isso, a melhor maneira é a leitura das informações técnicas descritas pelos desenvolve-
dores da distribuição escolhida, levando em conta, por exemplo, os recursos de Unidade de
Processamento Central (UCP), memória e a disponibilização de drives caso possua har-
dwares de uso específico.
12
Figura 1.6
Alterando o
tamanho de
memória de vídeo
e RAM em máquina
virtual.
É importante frisar que essa definição jamais poderá ultrapassar a configuração máxima de
hardware disponível no sistema hospedeiro. Em suma, para se obter o melhor desempenho
em uma máquina virtual, devemos investir na potência de hardware da máquina hospedeira.
Capítulo 1 - Histórico
13
14
Introdução ao Linux
2
Linux no desktop
objetivos
Saber como adquirir um Linux para uso; Aprender a instalar uma distribuição Linux e
implementá-la; Entender o conceito de sistemas em Dual Boot.
conceitos
Tipos de instalação e aquisição do Linux, configurações iniciais, ambientes gráficos
e Dual Boot.
Nesse caso, a imagem do CD nada mais é do que a junção de vários arquivos comuns de
computador, representados em um único arquivo, contendo a representação exata dos
dados presentes no CD. É uma cópia fiel.
Partindo desse conceito, é mais fácil entender o porquê de baixar imagens de sites, pois
estamos fazendo um simples download de um único arquivo. A básica diferença é que arquivos
em imagens possuem um formato peculiar e normalmente necessitam de um aplicativo especí-
fico para reconhecer os dados. O formato de imagem de dados mais comum é o .iso.
É importante saber que é possível encontrar outros meios para agrupar diversos arquivos
em um só, mas, por padrão, sempre que necessitamos instalar um Sistema Operacional este
estará presente em um formato de imagem, normalmente com a extensão .iso.
15
Nunca baixe imagens de Sistemas Operacionais oriundos de sites desconhecidos.
Sempre opte por buscar imagens nos sites oficiais do fabricante. Lembrando que
essa ação se aplica a Sistemas Operacionais Linux ou afins, que se utilizam da polí-
tica de Software Livre.
Nas páginas oficiais das distribuições Linux, normalmente é possível encontrar de pronto o
link para download das imagens de versões do sistema. Veja um exemplo:
Figura 2.1
Página oficial da
distribuição Debian.
16
Figura 2.2
Página oficial da
distribuição Fedora.
Live
Atualmente é o modo mais utilizado, que não chega a ser uma instalação até que você opte por
realizá-la. Do inglês, Live significa “ao vivo”, e análogo à tradução este modo possibilita explorar
o sistema a partir de um CD, DVD ou pendrive sem instalar nenhum dado no computador.
Um Linux Live nos proporciona um Sistema Operacional pronto para uso em menos de
um minuto, por meio de técnicas avançadas em que os dados da imagem são transferidos
para a memória RAM, como se o sistema fosse instalado temporariamente nela. Esse
modo é muito indicado para aqueles que somente querem experimentar um Sistema Linux
ou mesmo para manutenção de outros Sistemas Operacionais já presentes na máquina.
Imagens do tipo Live também podem ser obtidas através de arquivos com a extensão
Capítulo 2 - Linux no desktop
17
Dependendo da distribuição Linux, o download pode possuir menos de 200 megabytes, e
o restante do sistema é baixado aos poucos sem consumir tanto recurso. É importante res-
saltar que esse tipo de instalação pode fornecer um sistema bem básico, através da seleção
de somente o que realmente necessitamos. Isso é até interessante, já que o sistema fica
totalmente enxuto, sem aplicativos ou arquivos desnecessários que muito provavelmente
você nunca utilizará.
Minimal
Como o próprio nome diz, esse modo nos proporciona uma instalação pequena de um
sistema Linux. A distribuição mais famosa por utilizar essa funcionalidade é a Ubuntu, que
com aproximadamente 60 megabytes nos oferece um Linux efetivamente pronto. Esse
modo traz um pouco da ideia do tipo de instalação netinstall (explicado anteriormente), e
ambos possuem telas explicativas para seleção específica de pacotes, funcionalidades, inter-
faces gráficas, entre outras abstrações que podemos optar por instalar ou não. No modo de
instalação minimal é possível ter um Linux ainda mais enxuto que no modo netinstall.
Esse tipo de aquisição conta com algumas boas vantagens, como não necessidade de
conexão à internet, possibilidade de instalar mais facilmente em quantas máquinas quiser,
a mídia pode ser transportada para recuperar outro sistema que foi danificado; e, para os
colecionadores de plantão: sabemos que é muito interessante guardar qualquer coisa per-
sonalizada. Tais mídias podem ser compradas no site oficial da distribuição Linux escolhida.
E como está cada vez mais comum os novos PCs virem sem o leitor de mídias para CD e DVD,
também é possível efetuar a compra de pendrives bootáveis, que realizam a exata função
das mídias de CD e DVD.
Compra de um computador
É quase certo que ao chegar em qualquer loja de informática o PC ou laptop disponível
para venda virá com qualquer outro Sistema Operacional, menos o Linux. Felizmente esta
realidade está cada vez mais defasada, pois já podemos obter um PC ou laptop com o Linux
instalado de fábrica na própria loja ou site oficial. O mais legal disso tudo, é que devido ao
Linux ser um software livre (sem custo), o preço final do equipamento fica excessivamente
mais em conta. A notícia não tão boa é que poucas opções ou modelos de hardware são
disponibilizados com Linux.
Os métodos de instalação citados podem não estarem disponíveis para todas as distribui-
ções Linux. O mais comumente encontrado é o de download da imagem no formato .iso,
Introodução ao Linux
18
Instalando o Linux
O que é LVM
Há muito tempo é preservado o mesmo conceito de criação de partições, em que é possível
a criação de no máximo quatro partições primárias e, se necessária a expansão, pode-se
criar três primárias e uma estendida. Somente é possível conter uma partição estendida
por disco, sendo que esta não abriga um sistema de arquivos, e sim outras partições cha-
madas de lógicas. Partições lógicas aumentam a possibilidade da disponibilização de novas
partições, podendo somar até doze. Logo, um único disco pode conter o máximo de quinze
partições ativas com sistemas de arquivos válidos.
Contrário a essa premissa temos o LVM (Logical Volume Manager; em português, Geren-
ciador de Volume Lógico). Com sua chegada, em meados de 1998, os conceitos descritos
anteriormente foram drasticamente modificados para melhor. Saiba que muitas condições
se preservam e não devem ser alteradas tão cedo, como a principal premissa: cada Sistema
Operacional deve ser instalado em uma partição própria, não sendo possível instalar dois
Sistemas Operacionais em uma mesma partição.
O LVM trabalha com camadas lógicas que podem ser facilmente redimensionadas, aumen-
tando ou diminuindo o espaço em disco sem prejudicar o funcionamento do sistema, o que
não ocorre no modelo de partições no estilo primárias, estendida e lógicas. Em linhas gerais,
a utilização de LVM é para que possamos aproveitar a capacidade máxima de um ou de
vários HDs somados.
O disco rígido, ou conjunto de discos rígidos, são alocados em um ou mais physical volumes
(volumes físicos), que não podem ultrapassar mais de um disco. Esses volumes físicos são
agrupados em volume groups (grupos de volumes), que por sua vez abrigam os logical
volumes (volumes lógicos). Volumes lógicos são como uma divisão do disco (partições) que
alocam um determinado ponto de montagem, como os diretórios /home e /, assim como os
tipos de sistemas de arquivos, como o ext4.
Resumindo:
19
(participação sem LMV)
PV PV
100 MB
10 GB 10 GB
/boot
VG 20 GB
(soma dos PVS
subtraindo 100 MB)
Figura 2.3
Representação
LV LV LV de LVM com
10 GB 8 GB 2 GB /boot (partição
/home / /tmp de inicialização)
separada.
A partição /boot não pode estar presente em um grupo de volumes lógicos pois impossibi-
lita o acesso pelo gerenciador de inicialização, prejudicando o boot do sistema. Se a partição
root (“/”) estiver contida em um volume lógico, sempre crie uma partição separada para o
diretório /boot que não faça parte de um grupo de volumes lógicos LVM.
A criação de um particionamento com o uso de LVM pode ser estabelecido através das
linhas de comandos ou durante a instalação de um novo Sistema Operacional Linux. Este
último modo é fortemente recomendado para iniciantes, pois se dispõe de uma tela gráfica
autoexplicativa que descreve as informações de cada opção do LVM.
11 Nome.
11 Senha.
11 Grupo primário.
Introodução ao Linux
20
Encriptar estejam listadas nele. Talvez encriptar a senha seja uma ótima solução, capaz de dificultar a
A capacidade de descoberta da senha, mas a melhor estratégia é a adoção do arquivo /etc/shadow.
proteger os arquivos
através da técnica Como seu próprio nome descreve, o arquivo shadow é uma “sombra” do arquivo /etc/
de criptografia, mas
passwd. Sua função é basicamente armazenar as hashes de senhas de todos os usuários
devemos saber que
em poucas horas um presentes no sistema, oriundos do arquivo /etc/passwd. O principal detalhe desse arquivo
simples computador é que somente o usuário root possui permissão para verificar seu conteúdo, impossibili-
pode descobrir uma
tando usuários comuns de enxergarem as senhas em formato encriptada. Com a segurança
hash de senha com
técnicas de força bruta, concretizada, podemos concluir que os arquivos /etc/passwd e /etc/shadow atuam juntos na
por exemplo. função de autenticação das contas de usuários do sistema. O primeiro, provendo as contas.
O segundo, as senhas em hash (criptografadas).
Precisamos entender que o Terminal Linux (Shell) é extremamente sensível, e a boa prática
de utilizar o usuário root (administrador) somente para realização de operações adminis-
trativas pode evitar modificações acidentais como a remoção de arquivos essenciais para o
funcionamento correto do sistema.
21
Identificação do usuário comum
Figura 2.4
Caracteres
especiais para
identificação dos
Identificação do usuário root tipos de usuários.
Instalação de plug-ins
A utilização de plug-ins pode facilitar o trabalho diário e prover funcionalidades para as mais
diversas ferramentas do sistema. São técnicas usadas desde os primórdios, em que um
de seus maiores artifícios é a possibilidade de ser construído por terceiros e agregados a
números exorbitantes de aplicativos, amplificando as alternativas e probabilidades de novas
ferramentas cada vez mais adequadas para gostos peculiares.
Por acabar se tornando um vício ou “gerador de preguiça”, o costume acaba se tornando uma
arma não letal e nos afasta de novas possibilidades. Lembre-se de que depreciar uma ferra-
menta sem a conhecer é muito fácil. Com isso, acabamos caindo no falso contexto de que um
sistema Linux é incapaz de reproduzir tudo o que Sistemas Operacionais concorrentes podem.
Há algum tempo é possível implantar um desktop completo com Linux se adequando a qual-
quer ferramenta disponível no mercado, como os plug-ins. Para termos uma ideia, muitos
dos próprios fabricantes de softwares disponibilizam o aplicativo já homologado para
distribuições Linux. Em seus sites oficiais é possível verificar os tipos de pacotes, bem como
manuais de instalação:
Perceba que listamos exemplos de somente duas empresas que, por sinal, são gigantes no Figura 2.5
mercado de tecnologia. Com isso, não há mais desculpas para assistirmos a vídeos on-line Sites oficiais com
pacotes Linux do
Introodução ao Linux
Na lista dos melhores objetos de entretenimento criados pelo homem, temos a música.
Como é bom poder usufruir de uma boa música ou ainda assistir a um filme com qualidades
extremas como os atualmente disponíveis em 4k. O Linux se estende a todo esse mundo
do entretenimento, e com enorme qualidade. Pensar que objetos gratuitos são inseguros,
insuficientes ou incapazes é uma falsa ideia, que costuma ser derrubada após sua utilização.
22
Um sistema Linux se abastece de uma exorbitante quantidade de plug-ins de música e
vídeo gratuitos para os mais diversos fins. Com o advento dos estudos, é possível agregar
o conhecimento de suas vastas habilidades. E por ser um sistema mais leve e disponível
para estudos e desenvolvimento, o Linux abre um leque imenso de possibilidades, podendo
habilitar qualidade e superioridade imagináveis.
Nos Sistemas Linux você é livre para escolher o gerenciador de janelas que queira utilizar.
Atualmente é possível encontrar inúmeros gerenciadores, entre os de consumo de hardware
mais baixo até os com visuais futuristas, que pedem uma boa placa de vídeo. Cada geren-
ciador conta com seus aspectos peculiares. O ideal é fazer um tour passando por cada um
deles e verificando o que mais lhe agrada. O interessante é que podemos instalar diversos
gerenciadores de janelas em uma única estação, e a cada login é possível trocá-los sem
esforço ou demora. Tais alterações são efetuadas apenas no visual de sua conta, e todos os
seus arquivos e configurações do sistema permanecem do mesmo jeito que deixamos.
A seguir, faremos uma simbólica apresentação dos gerenciadores de janelas mais comu-
mente encontrados nas distribuições Linux contemporâneas, que normalmente os trazem
na instalação padrão.
GNOME desktop
Após realizar o login no sistema, certas distribuições Linux exibirão a janela principal do
gerenciador GNU Network Object Model Environment (GNOME), que é o gerenciador padrão
do Linux CentOS, por exemplo. O GNOME desktop é composto pela tela inteira, incluindo os
ícones e painéis. O espaço vazio da tela é chamado de área de trabalho ou somente desktop.
A figura 2.6 mostra a tela inicial do GNOME desktop e seus elementos, que serão descritos a
seguir com suas principais funcionalidades:
Capítulo 2 - Linux no desktop
23
Barra de menus Barra de Calendário Status
status e Relógio da conta
11 Barra de menus: acesso a aplicativos, locais do computador e da rede, além de utilitários Figura 2.6
de personalização do sistema. Janela principal
do gerenciador
11 Barra de status: exibe o status das conexões de rede, o nível de volume do autofalante, GNOME.
entre outros.
11 Calendário e relógio: exibe o calendário e a hora do sistema. Clicando sobre ele pode-se
ajustar a data e a hora do sistema.
rede. Por padrão, as distribuições Linux podem vir com atalhos pré-definidos, como o
acesso a Pasta pessoal e a Lixeira.
11 Desktop: é a área de trabalho, onde são exibidas as janelas das aplicações que estão em uso.
24
Menu Aplicativos
Este menu permite o acesso a diversos programas de forma rápida. É divido por categorias, como:
Menu Locais
Esse menu permite o acesso a locais pré-definidos e a alguns outros recursos do sistema, como:
Emulador de Terminal
O Emulador de Terminal habilita a execução de funções no sistema utilizando comandos,
sem a necessidade de sair do ambiente gráfico. É compatível com quase todos os comandos
para o Shell Linux.
Navegador de arquivos
O navegador de arquivos possibilita meios para a criação, renomeação, movimentação e
deleção de arquivos e diretórios. Possui um painel lateral contendo atalhos para acesso
a seus diretórios pessoais, bem como a dispositivos, como um pendrive. O navegador de
Capítulo 2 - Linux no desktop
Configurando o GNOME
Para mais informações Para efetuar alterações diversas no sistema, o ambiente de trabalho GNOME disponibi-
sobre o GNOME, liza uma única tela separada por seções, trazendo inúmeras opções para modificação do
consulte o nosso
Ambiente Virtual de ambiente, análogo a um Painel de Controle, chamada de Configurações. Nela é possível
Aprendizagem. modificar desde configurações simples, como alterar o plano de fundo da área de trabalho,
até as mais avançadas, como as configurações de controle de energia da máquina.
25
KDE desktop
O gerenciador de janelas KDE possui bastante semelhança com o GNOME, tendo em vista que
ambos se propõem a realizar as mesmas funções e são manipulados de forma equivalente.
O ambiente KDE está presente, por padrão, em várias distribuições Linux. Caso sua distri-
buição atual não o tenha, é possível instalá-lo a qualquer momento. Lembrando que após
sua instalação é necessário selecioná-lo antes de efetuar o login no sistema.
Assim como o GNOME, o KDE é composto pela tela inteira, incluindo os ícones e painéis.
O espaço vazio da tela é chamado de área de trabalho ou somente desktop.
A figura 2.7 mostra a tela inicial do KDE desktop e seus elementos, que serão descritos a
seguir com suas principais funcionalidades:
Atalhos
Lançador de aplicações Lista de janelas Barra de status Calendário
Introodução ao Linux
11 Lista de janelas: exibe as aplicações que estão sendo executadas. Figura 2.7
KDE Desktop e
11 Desktop: é a área de trabalho, onde são exibidas as janelas das aplicações que estão em uso.
suas principais
11 Gerenciador de widgets: adiciona à área de trabalho pequenos aplicativos conhecidos informações.
26
11 Lançador de aplicações: facilitador para acesso às aplicações instaladas, arquivos do
usuário e favoritos.
11 Barra de status: exibe o status das conexões de rede, o nível de volume do autofalante,
entre outros.
11 Calendário: exibe o calendário e a hora do sistema. Clicando sobre ele pode-se ajustar a
data e a hora do sistema.
Lançador de aplicações
O lançador de aplicações é um ótimo facilitador para acesso as aplicações instaladas,
arquivos do usuário e favoritos. Ele pode comportar as seguintes abas:
11 Favoritos: a aba Favoritos pode conter as aplicações e locais favoritos do usuário. As apli-
cações mais utilizadas e os locais mais acessados passam a fazer parte automaticamente
dessa lista. Também é possível clicar sobre um ícone com o botão direito do mouse e
selecionar a opção “Adicionar aos favoritos”. Por padrão, a lista de favoritos pode conter
o navegador Konqueror, um atalho para as ferramentas de configuração do sistema e o
gerenciador de arquivos Dolphin.
11 Aplicativos: contém todas as aplicações instaladas no sistema, que são divididas por
categorias, como Administração, Configurações, Escritório, Jogos, Multimídia, Internet,
Utilitários etc.
11 Sair: a aba Sair possui opções para finalização da sessão de trabalho ou desligamento do com-
putador, como: bloqueio da sessão, troca de usuário, reinicialização do sistema e shutdown.
Konqueror
O Konqueror é um aplicativo padrão do KDE, que basicamente possui duas funcionalidades: a de
navegador web e a de gerenciador de arquivos. Na função gerenciador de arquivos é possível:
apagar, mover, copiar ou renomear arquivos e diretórios; selecionando-os, clicando e arrastando
ou escolhendo uma opção no menu. Na função navegar web é somente necessário informar um
endereço da internet (site) que automaticamente o Konqueror buscará a página solicitada.
Konsole
Assim como o GNOME, o KDE também possui um emulador de terminal de linha de
comando, chamado Konsole. Ele executa funções do sistema utilizando comandos sem sair
Capítulo 2 - Linux no desktop
Configurando o KDE
Para configurar a aparência do KDE basta clicar com o botão direito do mouse sobre o
desktop e selecionar a opção Configurações da área de trabalho. Essa janela possibilita a
alteração do tema atual bem como do papel de parede.
27
Unity desktop
O Unity foi desenvolvido pela comunidade Ayatana, e por padrão está disponível na distri-
buição Linux Ubuntu desde sua versão 11. Para mais informações
sobre o KDE, consulte o
Ele possui uma barra superior concentrando os menus e a barra lateral esquerda com os nosso Ambiente Virtual
de Aprendizagem
lançadores, composto pelo botão Painel Inicial, que permite: realizar pesquisas no sistema,
acessar aplicativos usados recentemente, aplicativos instalados e aplicativos disponíveis
para download. Para facilitar as pesquisas, ele permite a utilização de filtros, otimizando o
processo de busca. Por padrão, na barra lateral é possível acessar o diretório pessoal, bem
como aplicativos pré-definidos ou manualmente incluídos.
Quando comparado ao clássico GNOME, o Unity possui um visual bem mais ousado. Com
isso, esse gerenciador de janelas consome um pouco mais de recursos de hardware, princi-
palmente de sua placa de vídeo.
A barra superior é dividida em duas partes: uma localiza os botões fechar, minimizar, Figura 2.8
maximizar e o nome do aplicativo que está aberto. No lado contrário estão localizados os Tela do Unity no
Ubuntu.
indicadores, mini aplicativos e aplicativos que fazem uso quando executados.
28
Xfce desktop
O Xfce é um dos gerenciadores gráficos mais indicados para computadores que possuem
hardware com poucos recursos, pois além de ser um ambiente rápido e leve, é visualmente
atraente e fácil de utilizar.
Foi fundado por Olivier Fourdan, tendo sua primeira versão em 1997. Atualmente é mantido
e desenvolvido por colaboradores. É software livre e atua sobre a licença GPL.
Para aqueles que se utilizam do GNOME ou KDE e acostumaram-se com alguma aplicação
específica, a boa notícia é que o Xfce permite a integração a diversas aplicações sem a
necessidade de instalar todo o ambiente desses próprios gerenciadores. Por usarem as
mesmas bibliotecas, aplicativos do GNOME são os mais adequados. Mas saiba que talvez
essas aplicações nem sejam necessárias, pois além de sua leveza e visual atraente, o Xfce
também conta com diversas aplicações e módulos que agregam seu ambiente de trabalho,
como emulador de terminal, editor de texto, controlador de áudio, pesquisador de aplica-
ções, visualizador de imagens, calendário e aplicações para gravação de CDs e DVDs.
Ao migrar para um diferente gerenciador gráfico precisamos passar por um novo processo
de reconhecimento, adaptação ao ambiente bem como o aprendizado dos nomes de seus
aplicativos, que são peculiares a cada gerenciador. No início é comum estranhá-lo, mas
saiba que por um curto período de tempo é possível se adequar facilmente. Veja os nomes
padrões das aplicações mais comumente utilizadas:
29
Menu de aplicativos Desktop Áreas de trabalho Área de notificação
Semelhante à barra central dos Sistemas Operacionais da Apple, por padrão o Xfce traz um Figura 2.9
Dock central, também chamada de Quick Launch Bar, que basicamente é um facilitador para Gerenciador de
janelas Xfce.
acesso a itens utilizados frequentemente. É possível adicionar seus aplicativos e locais predi-
letos: apenas clique e arraste para a posição desejada na barra do Dock.
Uma sala desorganizada, onde não se sabe onde cada documento está, é um ótimo exemplo
de quão inadequada nossa administração atua. Organização é a primeira ideia para
obtenção de um ambiente conveniente. O visual de uma estrutura influencia bastante na
satisfação, no prazer. Claro que uma sala pequena com muitas demandas pode se tornar um
flagelo, mas trazendo todo esse conceito para o lado digital, esqueça o tamanho da sala e a
quantidade de demandas.
estação de trabalho que dê prazer. Uma simples animação de janelas do sistema ou efeitos
de tela talvez sejam as respostas para esse desejo.
Aqui listamos o mais completo software utilizado para todas essas funções. Um dos pri-
meiros gerenciadores de janelas 3D para o Servidor X dos Sistemas Operacionais Linux, o
famoso Compiz.
30
Lançado pela Novell em janeiro de 2006, atualmente é agregado ao antigo projeto chamado
de Beryl, que juntos recebem o nome de Compiz Fusion, que se tornou uma ampla coleção de
plug-ins, que configuram o sistema para utilização do gerenciador de composição de janelas.
Figura 2.10
Efeito cube do
compiz.
Dependendo de sua distribuição Linux, é possível que alguns poucos pacotes do Compiz já
estejam instalados em sua estação, habilitando efeitos simples. Para aumentar as possibilidades
de entretenimento e efeitos em geral, é preciso obter o gerenciador de configurações do Compiz.
Entretenimento
Ocasionalmente precisamos pausar nossas demandas e dedicar tempo a algo prazeroso. Um
ótimo exemplo é se distrair com um dos melhores passatempos do mundo tecnológico, o game.
senso comum acredite que na maioria das vezes os fãs de games comprem jogos para usar
em consoles, o fato é que a quantidade de jogos eletrônicos vendidos para uso em computa-
dores pessoais e consoles é bem parecida.
Para os fãs de jogos em computadores e usuários de Linux, uma boa notícia: os mais
variados tipos de jogos estão disponíveis nesse Sistema Operacional. É possível encontrar
até mesmo os clássicos jogos de sua infância, como o Pac-Man e Galaga. Também é muito
divertido poder se adequar virtualmente a games que até então somente jogávamos em
mesas ou tabuleiros físicos, como Poker, Gamão, Dama, Xadrez, Tetris e Campo Minado.
31
Para quem não se contentou com essas poucas opções, informamos que é possível l
transformar um computador pessoal (com Linux) em uma plataforma de jogos Por questões de licença
perfeita, equivalente aos videogames. Para isso, utilizamos os famosos emuladores e direitos autorais,
muitos desses games
de consoles. Esses emuladores, como o próprio nome indica, emulam um videogame podem não conter o
real, disponibilizando todos os seus recursos em um computador padrão, permitindo a mesmo nome
encontrado em outros
disponibilização de inúmeros consoles por meio do conceito de emulação. O Linux possui
Sistemas Operacionais
emuladores dos videogames Mega Drive, Super Nintendo, Game Boy, MAME e PlayStation; concorrentes ou
todos com adoção de licenças free, ou seja, download gratuito. videogames.
É totalmente possível usar um computador pessoal como uma plataforma completa para os
games mais avançados do mercado. Para isso, é necessário efetuar o upgrade de hardwares,
como o investimento em uma boa placa de vídeo e a expansão de memória RAM.
Figura 2.11
Foto ilustrativa do
game Fórmula 1
para Linux.
Caso o usuário não queira instalar todos os plug-ins e aplicativos necessários para trans-
formar seu Linux em videogame, existem distribuições Linux criadas exclusivamente para
isso, contemplando o suporte a teclados e mouses especiais, joysticks idênticos a consoles
como PlayStation e Xbox, e drivers oficiais para placas de vídeo como a Nvidia e AMD.
É sensato admitir que o Linux ainda não pode prover absolutamente todos os efeitos e
recursos que uma placa de vídeo atual fornece, contudo, os games não são o foco final do
Linux. A boa notícia é que atualmente os próprios fabricantes de games, bem como os fabri-
cantes de placas de vídeos já desenvolvem plataformas e drivers oficiais exclusivamente
para sistemas Linux, habilitando os mais sofisticados recursos e efeitos visuais.
32
Computadores Pessoais), aqueles presentes no ambiente de nossos lares. Apesar da fácil
acessibilidade, não necessariamente significa dizer que podemos comprar e manter dois
ou mais computadores em um único ambiente, o que poderia dificultar a utilização de
diferentes Sistemas Operacionais sem adotar técnicas de virtualização ou emulação.
A técnica de Dual Boot é análoga a possuir dois computadores com a exata configuração de
hardware, porém operando com diferentes Sistemas Operacionais individualmente, geren-
ciando seus processos e arquivos. A ideia é justamente excluir a aquisição de um segundo
computador e a necessidade de aumentar a potência do hardware, uma vez que cada
Sistema Operacional atuará sozinho, não ocasionando o compartilhamento de recursos e
hardwares. Assim, Sistemas Operacionais em Dual Boot trabalharão em momento contrário
ao outro, pois se um estiver ativo o outro está desligado.
Boot Manager
Assim que um computador com sistemas em Dual Boot é ligado, passamos por todo aquele
processo de testes da BIOS até finalmente chegar o momento da escolha de qual Sistema
Operacional iniciar. Para que isso aconteça, necessitamos de um software gerenciador de
boot, também conhecido como Boot Manager ou Bootloader.
Quando o assunto é tecnologia, se utiliza com frequência o termo “dar boot na máquina”,
que basicamente significa selecionar um Sistema Operacional para ser iniciado por um Boot
Capítulo 2 - Linux no desktop
Ao final desse processo, o Boot Manager disponibiliza uma tela listando os sistemas
encontrados, habilitando a escolha logo após o computador ser ligado. Nessa mesma tela
é possível informar uma descrição individual para cada sistema encontrado, bem como
informar parâmetros especiais para a inicialização do sistema. O procedimento de varredura
33
por arquivos de inicialização é necessário somente uma única vez, ou caso um novo Sistema l
Operacional seja instalado. Para concluir esse processo, o Gerenciador de Boot copia todos Pode ser angustiante
os dados encontrados para o primeiro setor do disco, também conhecido como MBR. ter particionado todo o
disco, instalado todos
os Sistemas
MBR Operacionais e no final
lembrar-se que de
O Registro Mestre de Inicialização (do inglês Master Boot Record – MBR) atua nos primeiros esqueceu de instalar
um Gerenciador de
512 bytes de um disco rígido. São 446 bytes reservados para o Setor de Boot e 66 bytes
Boot. Mas para nossa
para a Tabela de Partição. Tanto o Gerenciador de Boot quanto a Tabela de Particionamento comodidade, hoje é
(contém as informações de divisões do disco), devem ser salvos na MBR. possível encontrar
inúmeras ferramentas
A utilização de MBR é um recurso inteligente, que nos possibilita o gerenciamento dos discos de softwares que
fazem todo esse
particionados, dos diferentes Sistemas Operacionais instalados e do Boot Manager; este processo de forma
último varrerá todo o disco e consequentemente sobrescreverá o espaço da MBR a cada simples e transparente,
momento em que um novo Sistema Operacional adentrar a máquina. mesmo após efetuar
todo o processo de
particionamento e
Porque instalar o Windows antes do Linux instalação dos SOs.
Esse retrabalho pode ser facilmente evitado, com o simples conhecimento de que nem
todos os Sistemas Operacionais estão dispostos a buscar ou reconhecer que naquele PC
existem outros Sistemas Operacionais concorrentes e, sem se importarem, sobrescrevem
todo o setor inicial do disco. E, como visto anteriormente, é na MBR que estarão presentes
os apontamentos com informações de inicialização para todos estes Sistemas Operacionais
encontrados, bem como a presença do próprio Boot Manager, que gerenciará todo o pro-
cesso de escolha e inicialização dos sistemas.
Para uma melhor abstração, veja as seguintes simulações expostas a seguir, onde graficamente
é mostrado o ato de instalação em Dual Boot para dois diferentes Sistemas Operacionais.
Simulação 1
Iniciamos o processo particionando o disco em duas partições, uma para cada sistema.
Lembrando que, por padrão, os primeiros 512 bytes devem ser alocados para a MBR:
Figura 2.12
MBR Partição 1 Partição 2
Disco rígido
particionado com
MBR.
34
O primeiro sistema a ser instalado é o Linux Ubuntu, que instala seu Gerenciador de Boot e
suas informações de inicialização na MBR:
O segundo sistema a ser instalado é o Windows 10, que instala seu Gerenciador de Boot e
suas informações de inicialização sobrescrevendo toda a MBR:
Figura 2.14
Windows instalado Boot Manager do Windows
com seu próprio +
Boot Manager. Iniciar Windows 10
Observe que apesar de os dois sistemas estarem disponíveis, eles compartilham o mesmo
espaço da MBR. Com isso, fica nítido que o último Sistema Operacional instalado “atropelou”
as informações de inicialização do outro, ou seja, o Linux Ubuntu não pode ser inicializado.
Simulação 2
Analise a segunda simulação a seguir, onde também serão instalados os dois Sistemas Ope-
racionais anteriores, porém em ordem contrária.
Iniciamos o processo particionando o disco em duas partições, uma para cada sistema.
Capítulo 2 - Linux no desktop
Lembrando que, por padrão, os primeiros 512 bytes devem ser alocados para a MBR:
Figura 2.15
MBR Partição 1 Partição 2
Disco rígido
particionado com
MBR.
35
O primeiro sistema a ser instalado é o Windows 10, que instala seu Gerenciador de Boot e
suas informações de inicialização na MBR:
Figura 2.16
Boot Manager do Windows S.O Windows 10 Windows instalado
+ com seu próprio
Iniciar Windows 10 Boot Manager.
O segundo sistema a ser instalado é o Linux Ubuntu, que instala seu gerenciador de boot e
suas informações de inicialização, sobrescrevendo toda a MBR:
Figura 2.17
Boot Manager do Linux
Dois sistemas
+ instalados com
Iniciar Linux Ubuntu suas entradas no
+ Boot Manager do
Iniciar Windows 10 Linux.
Até aqui as execuções foram exatamente iguais, com a observação de que logo após o
Gerenciador de Boot do Linux ser instalado na MBR, por padrão, ele próprio fez uma varre-
dura no disco, buscando por outros Sistemas Operacionais disponíveis. E após encontrar o
Windows 10, ele adiciona uma nova entrada, atualizando o conteúdo da MBR. Assim, uma
nova linha é adiciona ao Gerenciador de Boot, informando que neste PC contém dois Sistemas
Operacionais para sua escolha:
Introodução ao Linux
36
Figura 2.18
Gerenciador de
Boot GRUB com
duas entradas
de Sistemas
Operacionais.
As informações de uma MBR sempre serão sobrescritas caso optemos por instalar o
Windows como último Sistema Operacional. Mas não se preocupe caso esse equívoco seja
cometido, pois existem soluções de contorno, como a execução de comandos específicos
digitados através de Live CD com uma distribuição Linux.
37
38
Introodução ao Linux
3
Instalação de aplicações
objetivos
conceitos
Aplicações no Sistema Operacional Linux.
Saber como instalar, remover e atualizar uma aplicação corretamente é uma habilidade
fundamental para qualquer administrador de sistemas. Nesta sessão de aprendizagem,
veremos como executar essas tarefas. Mas antes disso, começaremos a entender como as
aplicações são desenvolvidas, quais são suas principais características e como são distribuídas.
Antes que uma aplicação esteja pronta para uso, alguém deve projetá-la e escrevê-la.
As aplicações são escritas utilizando uma ou mais linguagens de programação, que nada
mais são do que linguagens intermediárias entre o que os humanos entendem (linguagem
natural) e o que o computador entende (linguagem de máquina).
servem de conceitos mais abstratos e, em geral, são capazes de efetuar mais tarefas com
uma quantidade menor de comandos. Essas linguagens são conhecidas como linguagens
de alto nível. Outras linguagens, conhecidas como linguagens de baixo nível, se aproximam
mais da linguagem utilizada pela máquina e, em geral, apresentam melhor desempenho
ao custo de um esforço maior de programação, já que normalmente são necessários mais
comandos para efetuar uma mesma tarefa.
Chamamos os arquivos que contêm a aplicação escrita com uma linguagem de programação de
código-fonte. Seja qual for o nível da linguagem, o código-fonte deve passar por um processo
de tradução, para que seja entendido pelo computador. Esse processo pode ser feito uma única
vez e o resultado pode ser armazenado em um ou mais arquivos contendo o código já traduzido
39
para a linguagem de máquina ou, ainda, pode ser feito toda vez que a aplicação for executada.
No primeiro caso, o processo de transformar o código-fonte em um arquivo contendo código
de máquina (arquivo binário) é chamado de compilação. Quando esse processo de tradução
acontece, sempre que a aplicação é executada, é chamado de interpretação.
Linguagens de programação
No Linux, as linguagens mais utilizadas no desenvolvimento de programas são a C e C++.
A linguagem C é considerada por alguns uma linguagem de “médio nível”, pois apesar de
possuir características de linguagens de alto nível, também possui características de lingua-
gens de baixo nível, como o acesso direto ao hardware.
A linguagem C foi criada no início da década de 1970, e desde então tornou-se a linguagem
preferida para o desenvolvimento de Sistemas Operacionais. O kernel do Linux é escrito em
C, assim como vários de seus aplicativos e bibliotecas de funções. A linguagem C++ é uma
linguagem criada a partir da linguagem C, acrescentando a ela características de linguagens
de alto nível, como a orientação a objetos. Um programa escrito em C precisa ser compilado
antes de ser utilizado. Dependendo do seu tamanho, o código de um programa em C pode
estar contido em diversos arquivos, cada um contendo um módulo ou parte do programa.
A compilação de um programa é feita com o auxílio de programas como compiladores e liga-
dores (do inglês linkers). O processo de compilação pode ser simplificado através do uso do
programa make, que lê um arquivo chamado Makefile, que contém as instruções de como
compilar de maneira correta os arquivos-fontes de uma aplicação. No Linux, o compilador C
mais utilizado é o GNU C Compiler, também conhecido como gcc.
Uma das características dos Sistemas Unix é a modularidade. Seus comandos, em geral,
desempenham tarefas simples e as tarefas mais complexas são executadas utilizando dois ou
mais comandos. De forma análoga, programas complexos são criados através da combinação
de funções contidas em módulos menores, também chamados de bibliotecas. Para entender
melhor esse conceito, vamos utilizar um exemplo: imagine um programador que deseja
escrever um programa capaz de tocar arquivos MP3. O programa deverá ser capaz de abrir
um arquivo MP3, decodificar o seu conteúdo e reproduzi-lo utilizando a placa de som, além de
prover uma interface para o usuário que permita executar as ações de parar, iniciar, avançar
l
A vantagem de utilizar
e retroceder a posição da música. Ele poderá escrever um código capaz de fazer todas essas essa forma é que vários
funções ou poderá utilizar bibliotecas de funções criadas por outros programadores que dis- programas podem
utilizar a mesma
ponibilizem as funções descritas anteriormente, facilitando o desenvolvimento do programa.
biblioteca já carregada
na memória, dimi-
As funções de uma biblioteca podem ser utilizadas por um programa de duas maneiras: estati-
nuindo assim o total de
camente ou dinamicamente. No modo estático, o código da função utilizada pelo programa memória utilizada pelo
é embutido no binário do programa. Dessa forma, o programa pode ser executado em um sistema como um todo.
Além disso, programas
sistema sem que tenha a necessidade de possuir as bibliotecas para realizar as funções que o
que utilizam bibliotecas
programa utiliza. Essa forma apresenta, como desvantagem, o tamanho dos arquivos binários carregadas dinamica-
dos programas, que passam a ser bem maiores. Por outro lado, um programa pode usar uma mente possuem
arquivos binários
biblioteca de função de maneira dinâmica. Nesse caso, quando o programa é executado, ele menores.
procura no sistema as bibliotecas de que necessita e as carrega na memória.
Introdução ao Linux
40
# ldd /bin/bash
Linux-gate.so.1 => (0xffffe000)
libncurses.so.5 => /lib/libncurses.so.5 (0xb7f82000)
libdl.so.2 => /lib/tls/libdl.so.2 (0xb7f7e000)
libc.so.6 => /lib/tls/libc.so.6 (0xb7e46000)
/lib/ld-Linux.so.2 (0xb7fd1000)
Quando um programa necessita carregar uma biblioteca, ele utiliza um carregador em tempo
de execução (do inglês run-time linker), conhecido como ld.so. Esse carregador, por sua vez,
precisa identificar os diretórios que contêm as bibliotecas. Para isso, ele usa o arquivo
/etc/ld.so.cache, que é gerado através da execução do comando ldconfig. Esse comando,
quando executado, lê o arquivo /etc/ld.so.conf , que contém os diretórios do sistema onde
os arquivos de bibliotecas podem ser encontrados. Sempre que o arquivo /etc/ld.so.conf for
alterado, o comando ldconfig deve ser executado para atualizar o arquivo /etc/ld.so.cache.
Quando um programador decide distribuir sua aplicação, ele pode fazê-lo de duas maneiras:
distribuir os arquivos-fontes ou a aplicação já compilada. Veremos, a seguir, como proceder
para instalar aplicações distribuídas nas duas formas citadas. Vale lembrar que uma aplicação
não é composta apenas pelo seu arquivo binário. Em geral, uma aplicação possui também
arquivos de configuração, manuais de sistema e arquivos de documentação, além de exem-
plos. Chamamos esse conjunto de arquivos de pacote.
Embora essa seja a forma de instalação mais trabalhosa, esse método permite que o
programa seja modificado e personalizado. Em geral, é possível escolher onde o programa
deverá ser instalado e onde procurará por arquivos de configuração. No entanto, o grau
de personalização de um programa, depende muito de sua função e do seu programador.
Imagine um programa que funcione como um cadastro de telefones. Esse programa poderia
armazenar suas informações em um dos diversos Sistemas Gerenciadores de Bancos de
Dados (SGBDs) disponíveis para Linux, ou poderia simplesmente armazenar as informações
Capítulo 3 - Instalação de aplicações
em arquivos textos.
O programador que desenvolveu esse aplicativo poderia permitir que o administrador esco-
lhesse o modo de armazenamento dos dados gerados pelo programa, por meio de opções
especiais utilizadas no processo de compilação. Ativando ou desativando essas opções, os
requisitos para a instalação do programa e o seu tamanho se alteram já que, por exemplo,
ao desativar o suporte para armazenagem de dados em bancos de dados tal programa não
iria requerer bibliotecas com funções de acesso a bancos de dados.
41
Obtenção dos arquivos-fontes
A obtenção de arquivos-fontes pode se dar através de mídias externas com distribuições
Linux, sites repositórios de softwares livres (podem conter milhares de aplicativos) – ou mais
comumente aderido, através do site oficial do próprio fabricante de software.
# ./configure
Compilação e instalação
Uma vez configurados e satisfeitos os pré-requisitos, podemos iniciar o processo de compilação
utilizando o comando make, que na verdade não é um compilador, mas apenas lê arquivos
especiais (Makefiles) que contêm regras para compilar um programa. Essas regras especificam:
os arquivos-fontes que devem ser compilados, o compilador que deve ser utilizado,
42
o modo como esses arquivos-fontes devem ser ligados e os diretórios onde devem ser
armazenados ao serem instalados, entre outros aspectos. Sua utilização é bastante simples,
bastando executá-lo no diretório em que se encontra o arquivo Makefile, como mostra o
comando a seguir.
# make
O processo de compilação tanto pode ser rápido, para programas simples, quanto pode
durar horas, dependendo do tamanho e da complexidade do código-fonte e da velocidade
da máquina.
Por fim, a instalação propriamente dita é feita pelo programa make, usualmente utilizando-se
a opção install, que em geral especifica uma regra especial dentro do Makefile, que faz com
que o make copie os arquivos do programa já compilado para os diretórios onde deverão ser
instalados no sistema. Para fazer a instalação, basta executar o seguinte comando:
# make install
Isso fará com que o make copie os arquivos contendo o código compilado, manuais e
arquivos de configuração para os diretórios adequados. Note que, embora os outros dois
passos possam ser executados com uma conta de usuário comum, esse último passo deve
ser feito utilizando a conta root.
Alguns programas podem ser removidos por intermédio do comando make uninstall. A opção
uninstall usualmente especifica uma regra dentro do Makefile que contém os comandos para
remover os arquivos instalados. Embora essa seja uma prática comum, não são todos os
arquivos-fontes que apresentam essa opção. Uma boa prática, ao se instalar programas dessa
forma, é usar um programa auxiliar como o checkinstall, que registra os arquivos que foram
inseridos no sistema, facilitando, assim, a sua remoção e atualização no futuro.
43
A instalação de uma aplicação a partir de arquivos binários é bem mais simples do que a insta-
lação a partir de arquivos-fontes. Geralmente é necessário apenas obter o arquivo contendo a
aplicação, descompactá-lo e copiar os arquivos para os diretórios corretos. Esse último passo
pode ser feito por um script distribuído juntamente com a aplicação, especificamente para
esse fim. Nesse tipo de instalação não há como o desenvolvedor garantir que o seu sistema
contenha todos os pré-requisitos para que a aplicação funcione adequadamente.
Sendo assim, é comum que ele adote uma das duas estratégias: desenvolver a aplicação de
modo que ela requeira um conjunto mínimo de bibliotecas, deixando por conta do usuário
a instalação delas, ou incluir as bibliotecas estaticamente na aplicação, deixando ela pronta
para uso, não necessitando de nenhuma biblioteca adicional. A distribuição de aplicações em
arquivos binários é usualmente adotada por empresas que produzem programas proprietá-
rios e que têm a necessidade de manter seus códigos-fontes inacessíveis para terceiros
(a partir de um arquivo binário, é praticamente impossível obter o código-fonte original).
É importante saber que o nome completo dos pacotes Linux obedece a certas nomencla-
turas que modificam a estrutura, para uma fácil identificação do aplicativo em questão.
As estruturas para definição do nome de pacotes do tipo binário, por exemplo, podem atuar
da seguinte maneira:
Exemplo:
bash_4.4-5_amd64.deb
Exemplo:
bash-4.2.46-30.x86_64.rpm
44
l
Um campo que merece destaque é o Arquitetura, que basicamente está relacionado para
qual tipo de hardware o pacote foi compilado. As principais arquiteturas são:
As estruturas para
definição de nomes de 11 i386: pacotes para arquiteturas que utilizam processadores baseados na linha x86 da
pacotes são apenas
sugestivas (conven- Intel (32 bits).
ções). É possível
11 x86_64: pacotes para arquiteturas que utilizam processadores de 64 bits.
encontrar pacotes
binários que não foram 11 PPC: pacotes para arquiteturas que usam processadores PowerPC, utilizados pela Apple.
criados seguindo tais
premissas. 11 SRC: pacotes que não contêm binários, mas sim o código-fonte da aplicação, o que a
torna portável para vários tipos de arquiteturas.
A tabela 3.1 apresenta as principais opções do comando rpm e as ações que elas executam:
Opção Ação
i Instala um pacote.
e Remove um pacote.
Tabela 3.1 h Habilita o modo hash. O comando mostrará uma espécie de barra de
Opções básicas do progresso durante a instalação dos pacotes.
comando rpm.
Instalando um pacote:
Atualizando um pacote:
45
Removendo um pacote:
# rpm -e chkconfig
Caso alguma dessas verificações seja listada, o próprio gerenciador emitirá informações
detalhadas do que possa ter acontecido, podendo informar mensagens de erro como as
listadas a seguir:
Repare que o comando rpm apenas indica a existência de uma dependência, que deve ser
instalada manualmente, caso necessário. Veremos mais adiante uma ferramenta capaz de
resolver automaticamente problemas com dependências.
As opções de consulta devem ser sempre utilizadas em conjunto com a opção –q, do inglês
query (consultar). A tabela 3.2 apresenta as principais opções de consulta utilizadas no
comando rpm e suas ações:
Opção Ação
Introdução ao Linux
46
Opção Ação
Conforme vimos, embora o comando rpm seja a principal ferramenta para instalar, atualizar,
remover e consultar pacotes, faltam-lhe opções de como resolver automaticamente
problemas com dependências ou de atualizar todo o sistema. Para resolver esse tipo de
problema, foram criadas ferramentas de mais alto nível, como o Yellowdog Update Modifier
(YUM), da distribuição Red Hat, e o Yet another Setup Tool (Yast), da distribuição SUSE.
Opção Ação
i Instala um pacote.
r Remove um pacote.
Quando instalamos um pacote, a ferramenta utilizada para instalá-lo verifica nas informa-
ções contidas no pacote quais são suas dependências. Em seguida, verifica se essas depen-
dências já estão instaladas no sistema, consultando a base de dados de pacotes instalados.
Dependendo da ferramenta, ela solicitará que as dependências sejam instaladas ou tentará
instalar as dependências automaticamente. De forma semelhante, ao tentar remover um
47
pacote instalado no sistema, as mesmas verificações são efetuadas e a ferramenta indicará
os outros pacotes que devem ser desinstalados juntamente com o pacote desejado. Essas
verificações são feitas com o intuito de deixar o sistema sempre num estado consistente, isto
é, garantindo que estejam instaladas todas as dependências de todos os pacotes instalados.
A seguir serão apresentadas duas ferramentas que atuam nesta prática e eficiente ação,
que é a resolução de dependências entre pacotes. A primeira (yum) é para Sistemas Linux
baseadas no Red Hat, e a segunda (dpkg) para distribuições baseadas no Debian.
YUM
O YUM usa o conceito de repositório de pacotes, e por isso não há a necessidade de que os
arquivos de pacotes sejam obtidos manualmente. Um repositório é um site especialmente
preparado contendo pacotes e arquivos de índice, com informações sobre esses pacotes.
O comando yum é capaz de consultar um repositório e automaticamente baixar e instalar
pacotes, liberando o administrador de efetuar essas tarefas manualmente. Os repositórios
do YUM estão divididos em três tipos básicos:
11 Base: nos repositórios base se localizam os pacotes que fazem parte da distribuição,
como os distribuídos na mídia de instalação.
11 Updates: nos repositórios update estão atualizações para os pacotes do repositório base
e pacotes que não fazem parte dos repositórios base. Nem suas atualizações se encon-
tram nos repositórios extra.
Configurando o YUM
O YUM é configurado por meio do arquivo /etc/yum.conf, que define opções como: número
de tentativas de acesso a um repositório, arquivo de log, diretório onde manterá os pacotes
baixados, entre outras. Já a localização dos repositórios a serem consultados é definida nos
arquivos que ficam armazenados no diretório /etc/yum.repos.d. A configuração padrão de
ambos é suficiente para seu funcionamento correto.
Nesse capítulo, veremos somente como adicionar novos repositórios. Cada repositório é
configurado mediante um arquivo com a extensão .repo, usualmente disponível no site do
próprio repositório. Um único repositório pode ter vários espelhos (mirrors), que funcionam
como cópias idênticas do repositório original, mas ficam localizados em outros servidores,
permitindo que o administrador escolha aquele que está localizado mais próximo ou que
possua um link de maior capacidade.
[jpackage6-fc17]
Introdução ao Linux
48
Ao configurar um repositório, é preciso verificar a versão de sua distribuição, que no
exemplo anterior é o Fedora Core 17. Repositórios e pacotes de outras distribuições ou
versões podem não funcionar corretamente. Como medida de segurança, os pacotes rpm
podem ser assinados digitalmente. Dessa forma, é possível verificar se um pacote realmente
veio de um determinado repositório e se não foi adulterado. Os pacotes rpm são assinados
com a chave GPG do repositório ou do desenvolvedor, e podem ser verificados utilizando-se
sua chave pública. Para isso, é necessário importar essa chave pública por intermédio do
comando rpm, conforme os exemplos a seguir:
No primeiro exemplo, a chave pública foi copiada para o computador e importada por meio
de um arquivo que a contém, e no segundo a chave é importada diretamente do site.
Utilizando o YUM
Assim como o rpm, o comando yum também pode ser utilizado para instalar, desinstalar
e atualizar pacotes. Além disso, permite: a instalação e remoção de grupos de pacotes, a
busca de pacotes com expressões regulares, a resolução de problemas com dependên-
cias entre pacotes e a atualização automática de todos os pacotes instalados no sistema.
Veremos, a seguir, como efetuar cada uma dessas operações.
O yum também pode ser usado para instalar pacotes que já se encontram armazenados
no computador do usuário. Nesses casos, utiliza-se a opção localinstall, como mostra o
exemplo:
Para remover um pacote e suas dependências, basta utilizar a opção remove, como o
exemplo:
Capítulo 3 - Instalação de aplicações
Sempre que o yum instala, atualiza ou remove um pacote, ele apresenta um sumário do que
será feito e pede a confirmação do administrador antes de executar as ações necessárias.
O comando do exemplo acima apresentará o seguinte sumário:
49
Setting up Remove Process
Resolving Dependencies
--> Populating transaction set with selected packages.
Please wait.
---> Package tcpdump.i386 14:3.8.2-13.FC4 set to be erased
--> Running transaction check
Dependencies Resolved
Package Arch Version Repository Size
Removing:
tcpdump i386 14:3.8.2-13.FC4 installed 765 k
Transaction Summary
Install 0 Package(s)
Update 0 Package(s)
Remove 1 Package(s)
Total download size: 0
Is this ok [y/N]:
As aspas foram utilizadas no exemplo porque o nome do grupo possui caracteres de espaço.
Para obter uma lista dos grupos de pacotes conhecidos pelo yum, utilize a opção grouplist,
conforme este exemplo:
# yum grouplist
Atualizando o sistema
O yum pode ser utilizado para atualizar apenas determinados pacotes ou para atualizar
todos os pacotes instalados no sistema. Quando utilizado com a opção update, o yum
compara as versões de todos os pacotes instalados com as versões desses mesmos pacotes
disponíveis nos repositórios, efetuando em seguida a atualização de todos os pacotes
que estejam desatualizados. Para atualizar todos os pacotes do sistema, basta executar o
comando seguinte:
# yum update
Introdução ao Linux
Para atualizar somente determinados pacotes, basta acrescentar os nomes dos pacotes ao
comando. Assim, para atualizar somente os pacotes bash e tcpdump, devemos executar o
comando:
50
Outra opção é apenas listar os pacotes que deverão ser atualizados, sem proceder com a
atualização propriamente dita. Isso pode ser feito com a opção check-update, que retorna
a lista dos pacotes a serem atualizados, as novas versões disponíveis e o tipo de repositório
de onde será baixado cada pacote.
O yum possui ainda um poderoso mecanismo de busca, capaz de procurar por palavras-chave,
nome do pacote e sumário ou descrição do pacote. Isso é bastante útil quando precisamos
de um aplicativo que execute uma determinada função, mas ainda não sabemos qual pacote
usar. Digamos que estamos à procura de um aplicativo que funcione como um servidor web.
Poderíamos, então, executar o yum com a opção search, como no exemplo a seguir:
Toda vez que o comando yum é utilizado, ele faz uma verificação por atualizações nos
arquivos de índices dos repositórios. Para evitar a demora ocasionada por essa ação,
podemos dizer ao yum que procure nas informações que já obteve desses repositórios sem
ter que consultá-los novamente. Para isso, utilizamos a opção –C, do inglês cache.
Capítulo 3 - Instalação de aplicações
Para obter a descrição de um pacote, basta usar a opção info. O exemplo a seguir mostra
como obter informações sobre o pacote bash:
Outra opção interessante é a opção provides, que retorna o nome do pacote que oferece um
determinado serviço ou a qual pacote pertence um determinado arquivo. Quando insta-
lamos um programa a partir dos arquivos-fontes, podemos necessitar instalar pacotes para
atender a certos pré-requisitos desse programa. Por exemplo: um determinado programa
51
precisa que a biblioteca libxyz esteja presente no sistema, mas não sabemos o pacote que
fornece essa biblioteca. Poderíamos utilizar então o yum da seguinte maneira:
Para buscar um pacote que oferece um determinado serviço ou para descobrir a qual pacote
pertence um determinado arquivo ou comando:
# yum provides ls
Configurando o APT
O APT é configurado por meio de diversos arquivos armazenados no diretório /etc/apt/apt.
conf.d. Nesses arquivos são definidas opções relativas à configuração de proxy, tempo de
timeout para conexões com servidores, entre outras. Outro arquivo de configuração impor-
tante é o /etc/apt/sources.list, onde são definidos os repositórios que serão utilizados para a
instalação e atualização de pacotes.
# apt-get update
Instalando pacotes
Para instalar um pacote, basta executar o comando apt-get com a opção install seguida do
nome do pacote. O APT consulta então os repositórios definidos no arquivo sources.list em
busca da versão mais recente do pacote e em seguida faz o download dele e de suas depen-
dências, caso necessário. Após obter todos os pacotes necessários, a instalação é execu-
tada. O comando do exemplo seguinte instala o pacote bind9 e suas dependências:
Introdução ao Linux
Sempre que utilizamos o apt-get para instalar, atualizar ou remover um pacote, é apresentado
um resumo das ações que serão executadas, solicitando a confirmação do administrador antes
de efetuar as mudanças. O comando do exemplo anterior apresentará o seguinte resumo:
52
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
bind9utils
Suggested packages:
bind9-doc resolvconf
The following NEW packages will be installed:
bind9 bind9utils
0 upgraded, 2 newly installed, 0 to remove and 23 not upgraded.
Need to get 466kB of archives.
After this operation, 1,413kB of additional disk space will be used.
Do you want to continue [Y/n]?
A opção install também pode ser usada para atualizar pacotes. A sintaxe do comando para
atualizar um pacote é a mesma utilizada para a instalação de novos pacotes. Se o pacote
passado como parâmetro não estiver desatualizado, uma mensagem será mostrada infor-
mando que a versão instalada já é a mais atual, como mostra o exemplo:
Removendo pacotes
Para remover um pacote e suas dependências, basta utilizar a opção remove, como mostra
o exemplo:
Atualizando pacotes
Para atualizar todos os pacotes instalados no sistema, devemos utilizar a opção upgrade,
como mostra o exemplo:
Capítulo 3 - Instalação de aplicações
# apt-get upgrade
Antes disso, no entanto, é importante atualizar o banco de dados do APT com a opção update.
Atualizando a distribuição
Para atualizar toda a distribuição de uma só vez, devemos utilizar a opção dist-upgrade,
como mostra o exemplo:
# apt-get dist-upgrade
53
Limpando o repositório local
Quando instalamos um pacote através do comando apt-get, os arquivos necessários são
baixados dos repositórios e armazenados em um repositório local, que fica no diretório
/var/cache/apt/archives. Os arquivos utilizados para instalar os pacotes no sistema podem
ser removidos com a opção clean, como mostra o exemplo a seguir:
# apt-get clean
O comando anterior lista todos os pacotes cujo nome ou descrição casem com o padrão
passado como parâmetro na busca. A opção de busca é útil quando não sabemos o nome
exato de um pacote. De posse do nome correto do pacote, podemos utilizar a opção show
do comando apt-cache para exibir informações sobre o pacote, como mostra o exemplo:
Figura 3.1
Ícones dos
gerenciadores de
pacotes do CentOS
e Ubuntu.
54
l Apesar de estarem em locais diferentes e possuírem visuais contrários, ambos efetuam as
É importante frisar que mesmas funções equivalentes à utilização de comandos.
existem distribuições
Linux que, por padrão, A seguir citamos exemplos de como realizar tarefas de procura, instalação e remoção de
não possuem um
pacotes. Lembre-se de que os gerenciadores em modo gráfico foram desenvolvidos para
gerenciador de pacotes
em modo gráfico ou facilitar a gerência dos pacotes, até mesmo para um simples usuário. Com isso as demandas
mesmo não possuem o são relativamente simples e adaptáveis a qualquer distribuição Linux.
próprio ambiente
gráfico, trazendo
somente a tela preta (o Procurando um pacote
terminal de comandos).
Todos os gerenciadores de pacotes gráficos possuem um campo para pesquisar pacotes,
normalmente descrito como procurar ou buscar, representados pelo símbolo de uma lupa.
Esse campo efetua a verificação da existência de pacotes através de seu nome ou de infor-
mações pertinentes a ele:
Figura 3.2 Uma simples procura pode trazer nenhum, um ou inúmeros resultados. Após encontrar
Pesquisando um o padrão digitado, normalmente os gerenciadores listam o nome do pacote, sua versão
pacote por sua
descrição. (se possuir), e uma sucinta descrição sobre o que o pacote contém ou faz.
A procura por pacotes pode ser efetuada se utilizando das categorias, que normal-
mente são apresentadas assim que o gerenciador é aberto. As categorias de pacotes
podem ser divididas entre diversos tipos, como escritório, vídeo, gráfico, games,
servidores etc.
Instalando um pacote
Após selecionar o pacote desejado, os diferentes gerenciadores podem realizar variadas ações,
desde a simples seleção do pacote até a abertura de uma nova página descrevendo detalhes
sobre o pacote. Os gerenciadores mais simples realizam a instalação através da seleção do
aplicativo e o clique no botão Instalar, logo ao lado do nome do pacote. Outros precisamos
selecionar o pacote e clicar em Aplicar ou Aplicar alterações, como o exemplo a seguir:
Capítulo 3 -
Figura 3.3
Exemplo de como
instalar um pacote.
55
Removendo um pacote
Para aqueles que se equivocaram e instalaram o pacote errado, não se preocupem, a remoção
é relativamente simples.
Primeiro vamos procurar o pacote e selecioná-lo. Perceba que agora o pacote está com o
status de instalado, pois o gerenciador também detém desSe conhecimento e não mais
oferece opções relacionadas a instalação, mas sim de remoção:
Lembrando que em outras distribuições Linux a realização das tarefas de procura, instalação e Figura 3.4
remoção podem ser visualmente diferentes, mas sempre preservando o mesmo raciocínio. Exemplo do
botão remover no
Existem distribuições, por exemplo, em que devemos desmarcar a caixa seletora, que altera gerenciador de
o ícone para uma lixeira, significando que o pacote será removido. pacotes em modo
gráfico.
O gerenciador removerá todos os dados referentes ao pacote, que novamente voltará a
estar disponível para instalação.
É aconselhável manter um controle dos pacotes que foram instalados a partir do código-fonte
ou de arquivos binários, que deverão ser atualizados manualmente sempre que necessário.
Em alguns casos é possível manter todos os arquivos de um aplicativo instalado a partir do
código-fonte ou de um arquivo binário sob um único diretório como, por exemplo,
/usr/local/<aplicativo>. Isso pode facilitar a remoção do aplicativo, quando ele não for
mais necessário.
Introdução ao Linux
56
4
Organização do Linux
Entender os conceitos de sistemas de arquivos hierárquicos e as características do
objetivos
conceitos
Sistema de arquivos do Linux; Tipos e atributos dos arquivos; Operações com arquivos
e diretórios; Filesystem Hierarchy Standard; Inodes.
11 Arquivos sem estrutura: não há estrutura interna, ou seja, não há campos, registros,
delimitadores, espaços, cabeçalhos, número de colunas e linhas ou qualquer formato
pré-definido a ser seguido pelo usuário ao inserir ou criar o conteúdo do arquivo.
O usuário é livre para estruturar e interpretar o conteúdo.
11 Segurança: os arquivos podem ser protegidos contra o uso não autorizado de diferentes
usuários que compartilham o Sistema Operacional.
57
FSSTND (acrônimo para Filesystem Standard) foi o projeto inicial criado para suprir os problemas
comuns aos sistemas Unix da época, nos primórdios de 1994. Após três anos, na data de
26 de outubro de 1997, FSSTND foi definitivamente renomeado para FHS, tornando-se seu
sucessor. FHS corresponde a Filesystem Hierarchy Standard (em português, Padrão para
Sistemas de Arquivos Hierárquicos), que, de início, surgiu na versão 2.0, logo após a última
versão do FSSTND, a 1.2.
O padrão FHS traz a informação de como os diretórios devem estar organizados no sistema, l
bem como quais dados devem deter. Uma estrutura de diretórios padronizada mantém o Determinados sistemas
sistema organizado e sempre previsível a orientar onde cada informação ou comando está. Linux podem
apresentar diretórios
O intuito é organizar o sistema para torná-lo mais portável, a fim de conseguir compatibili- recomendados
dade entre as numerosas distribuições Linux do mercado. juntamente com os
diretórios padrões,
O FHS pode ser encontrado em várias versões, e orientam as distribuições Linux a conterem mesmo sabendo que
podem armazenar o
diretórios padrões, como:
mesmo conteúdo.
Nesses casos, os
/
diretórios nunca devem
Diretório-raiz, a partir dele originam-se todos os demais descritos a seguir. conflitar. O próprio
sistema detém esse
bin5 conhecimento.
Comandos binários essenciais para todos os usuários.
boot
Arquivos estáticos responsáveis pela inicialização do sistema.
dev5
Arquivos especiais de dispositivos de entrada e saída de dados.
etc5
Arquivos de configurações específicas do sistema e de serviços do sistema.
lib5
Bibliotecas compartilhadas essenciais para o sistema.
media
Ponto de montagem para mídias removíveis (pendrives, CD-ROMs…).
mnt5
Ponto de montagem para sistemas de arquivos temporários.
opt5
Introodução ao Linux
Utilizado para instalar pacotes opcionais, que não fazem parte da distribuição.
run5
Informações do sistema em tempo real. Dados relevantes para processos.
sbin5
Comandos binários essenciais para administração do sistema.
58
srv5
Dados de serviços fornecidos pelo sistema (servidor web, servidor FTP…)
tmp5
Arquivos temporários do sistema e de programas.
usr5
Hierarquia secundária ao / (barra). Programas de uso geral do sistema.
var5
Arquivos de tamanhos variáveis (logs, spool de e-mails, spool de impressões…).
Também existem os diretórios opcionais, que na estrutura de diretórios podem: existir, não
existir ou ainda serem renomeados, podendo ser referenciados por qualquer nome:
home
Contém os diretórios pessoais dos usuários do sistema (opcional).
lib64
Bibliotecas compartilhadas de 64 bits essenciais para o sistema (opcional).
root5
Diretório pessoal do usuário root (opcional).
proc5
Sistema de arquivo virtual, contendo informações sobre o kernel e processos
(em tempo real).
sys5
Sistema de arquivo virtual, contendo informações sobre o kernel e o sistema (em tempo real).
bin boot dev etc home lib mnt opt proc root sbin tmp usr var
Capítulo 4 - Organização do Linux
Figura 4.1 O diretório / (barra), também chamado de diretório raiz ou diretório root (não confundir
Estrutura com o /root), é dito pai de todos os outros diretórios, também chamados de filhos. Com
hierárquica de
diretórios do Linux. exceção dele, os demais diretórios sempre possuirão um pai (diretório acima) e podem
conter filhos (diretórios abaixo). Esse conhecimento será necessário para estudo das
permissões de diretórios.
59
Tipos de arquivos
No Linux, todo objeto que é manipulado pelo Sistema Operacional é representado por um
arquivo, incluindo diretórios, dispositivos de hardware e conexões de rede. Para identificar o
tipo do arquivo do Sistema Operacional, consulte as informações contidas em seu inode.
Inode
Assim que compramos um novo disco para armazenamento dos dados lógicos em nosso
computador, precisamos passar por alguns procedimentos até que o disco receba o Sistema
Operacional e esteja pronto para uso. Basicamente podemos resumir esses procedimentos
no conceito de Formatação do Disco, que é o resultado de uma sequência de passos até
finalmente o computador estar disponível para utilização do usuário. A criação da Tabela de
Inodes é uma dessas etapas, além de ser uma ferramenta essencial para o correto funciona-
mento de um Sistema de Arquivos do Linux.
Inode é uma estrutura de dados que armazena todas as informações sobre um arquivo,
como: o tipo do arquivo, as permissões associadas a ele, os proprietários donos desse
arquivo, seu tamanho em disco, data e hora da última vez em que foi modificado, localização
dos blocos onde o conteúdo do arquivo está armazenado em disco etc. Assim que criado,
todo Sistema de Arquivos traz consigo uma Tabela de Inodes, que pode ser subentendida
como a identidade dos arquivos. Cada arquivo possui um diferente inode associado a ele,
identificado por um número inteiro único em todo o sistema, conhecido como i-number
ou ino. Cada arquivo deve conter o seu próprio número de inode, com exceção daqueles
criados como Hard Links.
Hard Link e Soft Links são assuntos futuros, abordados em detalhes no curso de
Administração de Sistemas Linux – ADS2.
Arquivo regular
l
A estrutura básica que o Linux utiliza para armazenar informações é o arquivo. Nos arquivos Pode-se utilizar uma
são armazenados todos os tipos de dados, desde textos até instruções em código de extensão para o nome
do arquivo, colocando
máquina. Essa é a estrutura utilizada para armazenar todos os tipos de informações neces- um segundo nível de
sárias para a operação do sistema. A identificação dos arquivos por números é utilizada nome, separado por
ponto. Essa medida
apenas internamente pelo sistema, já que, na prática, além de tediosa, a identificação numé-
facilita ao usuário
rica perde o sentido. Dessa forma, o sistema permite a identificação dos arquivos através de encontrar arquivos,
nomes. O nome do arquivo pode ter qualquer sequência de até 256 caracteres, mais do que utilizando as extensões
dos nomes juntamente
suficiente para descrever o conteúdo do arquivo, dando um sentido à identificação. Para um
com referências
sistema com milhares de arquivos, é pouco provável que não sejam escolhidos nomes que já ambíguas ou caracteres
estejam sendo utilizados por outros arquivos. curinga. Mas saiba que
esSa medida não é
Introodução ao Linux
obrigatória para
Diretório sistemas Linux.
Para o Sistema Operacional, um diretório é apenas um arquivo especial que contém uma
listagem de nomes de arquivos e seus inodes correspondentes. O diretório desempenha
exatamente a mesma função de um catálogo de telefones: dado o nome de um arquivo, o
Sistema Operacional consulta seu diretório e obtém o número do inode correspondente ao
60
arquivo. Com esse número, o sistema de arquivos pode examinar outras tabelas internas
para determinar onde está armazenado o arquivo e torná-lo acessível ao usuário. A locali-
zação de arquivos é mostrada na figura 4.2.
Diretório
Disco rígido
Vendas 8014
Compras 0412
Arquivo Arquivo
Salários 5467 # 0412 # 8014
Relatórios 8015
Arquivos de dispositivos
O sistema de arquivos estende o conceito de arquivo para tratar os dispositivos de entrada
e saída, como impressoras, unidades de fitas e ainda outros tipos que podem ser instalados
em um Sistema Operacional Linux. Os dispositivos são tratados como arquivos especiais e
manipulados como arquivos comuns do sistema. Os arquivos de dispositivos podem ser de
dois tipos:
Alguns dispositivos só podem ser acessados no modo caractere, como terminais e impres-
soras, pois não têm recursos para o acesso bloco a bloco. Outros dispositivos permitem o
acesso bloco a bloco, como discos e fitas, mas podem, também, ser acessados caractere a
caractere, dependendo da operação efetuada.
Por exemplo: na formatação de um disco, os blocos ainda não existem, logo, o acesso inicial
a esse dispositivo deve ser orientado a caractere. Existem outras situações em que os dispo-
sitivos orientados a blocos podem ser acessados caractere a caractere como, por exemplo,
para a execução de cópias de segurança; entretanto, o contrário não ocorre, ou seja, os
61
dispositivos orientados a caractere não podem ser acessados pelo modo bloco a bloco.
Por convenção, todos os dispositivos de E/S (entrada e saída) no Linux recebem nomes
individuais de arquivo e são agrupados no diretório /dev, que é a abreviatura de devices.
Os dispositivos mais comuns são designados de forma padronizada:
Disco
Utilitários Impressoras
Unix
Sistema de
arquivos Fitas
Unix
Programas
do usuário Terminais
Figura 4.3
Linhas de
Arquivos de
comunicação
dispositivos.
# cp vendas relatórios
O mesmo comando pode ser utilizado para copiar o arquivo para a impressora:
# cp vendas /dev/lp
Named pipes
Introodução ao Linux
O Linux provê uma funcionalidade de comunicação entre processos denominada named pipe.
O named pipe permite a comunicação bidirecional entre dois processos executados no mesmo
Sistema Operacional. Um named pipe é referenciado pelos processos que conecta através de
seu nome e faz parte do sistema de arquivos. Quando criamos os named pipes, eles são asso-
ciados a diretórios e a permissionamentos de acesso, assim como os arquivos regulares.
62
Os named pipes podem ser criados através dos comandos mkfifo ou mknod e remo-
vidos com o comando rm ou por meio da chamada de sistema unlink.
Além do named pipe existe também o pipe convencional, representado pelo caractere
“|”, que é utilizado em comunicações unidirecionais, conectando a saída de um processo
à entrada de outro. Os pipes funcionam da mesma forma que os descritores de arquivos
padrão, apenas lendo a informação de entrada e escrevendo-a na saída, sem a preocupação
com o modo como ela será tratada pelos processos envolvidos na comunicação.
A diferença entre o named pipe e o pipe convencional é que, nesse último, os processos
conectados devem possuir uma relação de pai para filho ou serem “irmãos”. Além disso, o
named pipe precisa ser explicitamente encerrado após seu uso, ao contrário do pipe conven-
cional, que é encerrado automaticamente após a execução dos processos que ele conecta.
Figura 4.4
Comunicação Entrada Saída
entre processos Processo Processo
utilizando pipe Canalização
envia dados recebe dados
convencional.
Links
Vamos supor que o arquivo /usr/local/admin/vendas contenha informações de vendas
de uma empresa e toda a equipe de vendedores precise acessar esse arquivo. Imagine o
trabalho que daria copiar esse arquivo para o diretório home de cada funcionário e mantê-los
atualizados. Com os links simbólicos criamos um link em cada diretório home, que aponta
para o arquivo original localizado no diretório /usr/local/admin/vendas, reduzindo o trabalho e
mantendo o acesso às informações sempre atualizadas.
Cada usuário pode criar seus links com nomes diferentes em seu diretório home, apon-
tando para o mesmo arquivo original. Outra vantagem é simplificar o acesso a arquivos
que tenham um caminho (path) extenso, com vários subdiretórios. Ao criar um arquivo do
tipo link em seu diretório home, o usuário evita a digitação de todo o caminho do arquivo
vendas, por exemplo, manipulando-o diretamente através de seu diretório home.
O comando para a criação de um arquivo do tipo link possui a sintaxe:
Onde origem ou destino podem ter um nome de arquivo ou o caminho completo do arquivo
na estrutura hierárquica.
Sockets
Capítulo 4 - Organização do Linux
Os sockets são utilizados para a comunicação bidirecional entre dois processos, que podem
ser executados no mesmo computador ou em computadores diferentes. Os principais tipos
de sockets utilizados no Linux são: Unix domain socket ou Inter Process Communication
socket (IPC socket), que é utilizado para a comunicação entre processos executados em um
mesmo Sistema Operacional, e o socket de rede, que é utilizado para a comunicação entre
processos executados em computadores diferentes, interligados por uma rede. Existem
casos em que os sockets de rede são criados para comunicação entre processos que são
executados no mesmo computador.
63
Entre os sockets de rede, podemos destacar o stream socket e o datagram socket.
Apesar de os arquivos sockets terem diversas funções específicas, são muito similares aos
arquivos comuns, sendo tratados da mesma forma pelo sistema de arquivos do Linux.
Um socket de rede tem um funcionamento parecido com o telefone, isto é, cada arquivo
socket representa um ponto de conexão de uma linha de comunicação, sendo que, entre
esses pontos, existe a rede de comunicação de dados. Além disso, também têm seu próprio
número de identificação na rede, assim como o telefone na rede telefônica. Para permitir
que se estabeleça o contato entre dois sockets, o socket local e o remoto são identificados
por um par endereço IP e porta.
Um socket pode ser criado através da chamada de sistema socket e removido através do
comando rm ou da chamada de sistema close, quando não estiver mais sendo utilizado.
A maioria das aplicações no Linux usam sockets.
Todas essas informações são automaticamente mantidas pelo sistema na medida em que
os arquivos são criados e utilizados. Os diversos utilitários usam essas informações para
processar arquivos seletivamente. Os utilitários de backup do Linux, por exemplo, podem
preservar cópias apenas daqueles arquivos que foram modificados após alguma data
específica. A data da última modificação é utilizada para selecionar os arquivos apropriados.
Ao listarmos arquivos e diretórios utilizando o comando ls com a opção –l, visualizamos as
informações mostradas na figura 4.5.
Introodução ao Linux
64
drwxr-xr-x 5 root root 1024 dec 23 13:48 GNUstep
-rw-r--r-- 1 root root 331 feb 11 10:19 Xrootenv.0
Nome do arquivo
11 Para o Linux tudo é case-sensitive, ou seja, letras maiúsculas são diferentes de letras
minúsculas.
11 O Linux não trabalha com extensões de arquivos, usa-se apenas para identificação.
Nas documentações dos comandos Linux é frequente o aparecimento das palavras Usage
(uso) ou Synopsis (sinopse), utilizadas para indicar como a linha de comando deve ser
literalmente digitada.
ls -l /home
Sendo:
É obrigatório o uso de espaços entre cada item descrito em uma sintaxe (sinopse).
Nenhum comando é unido (junto) ao outro.
65
É essencial compreender que a sintaxe anterior não é adotada por absolutamente todos
os comandos do Linux, há aqueles que operam sem a necessidade de opções e/ou argu-
mentos. Por exemplo:
$ pwd
/home/aluno
A seguir demonstraremos três dos modos mais utilizados para consulta a documentações
em um Sistema Linux.
Man pages
É comum mencionar que no mundo Linux não precisamos memorizar comandos ou opções,
l
pois a ideia é preocupar-se com a solução, e não a “decoração”.
As Man pages (Páginas de manuais) também referenciadas como somente man trazem uma
A configuração desses
documentação detalhada sobre como manusear quase todos os comandos do sistema, arquivos pode sofrer
incluindo suas opções e argumentos. mudanças de acordo a
distribuição Linux
Os manuais são simples arquivos-texto zipados, disponibilizados em diretórios descritos nos utilizada.
arquivos /etc/manpath.config ou /etc/man_db.conf.
Seções do man
O man é subdividido em seções contendo documentações de diferentes setores do sistema.
A divisão por seção é imprescindível, visto que comandos podem possuir o mesmo nome
de arquivos do sistema que também possuem manuais. A exemplo do passwd, que é um
comando do sistema e também o arquivo de configuração das contas de usuários do Linux.
A seguir informamos o número das seções de manuais seguidas do tipo de informação que
cada uma contém:
11 6: Jogos.
Para verificar se um comando possui mais de uma seção de manual, podemos utilizar os
comandos whatis, apropos ou o próprio man:
66
Saída do comando whatis (equivalente ao comando man –f).
# whatis chmod
chmod (3p) - change mode of a file
chmod (1p) - change the file modes
chmod (1) - change file mode bits
chmod (2) - change permissions of a file
# apropos chmod
chmod (1) - change file mode bits
chmod (1p) - change the file modes
chmod (2) - change permissions of a file
chmod (3p) - change mode of a file
fchmod (2) - change permissions of a file
fchmod (3p) - change mode of a file
fchmodat (2) - change permissions of a file relative to a directory file
descriptor.
# man –a chmod
--Man-- next: chmod(lp) [view (return) | skip (Ctrl-D) | quit (Ctrl-C)]
--Man-- next: chmod(2) [view (return) | skip (Ctrl-D) | quit (Ctrl-C)]
--Man-- next: chmod(3p) [view (return) | skip (Ctrl-D) | quit (Ctrl-C)]
Existem distribuições Linux que não fazem o processo automático de atualização de cache
do index das páginas de manuais, causando o não fornecimento das informações após exe-
cutarmos os comandos whatis ou apropos. Para esses casos atualize manualmente o index
através do comando mandb.
man <comando|arquivo>
Exemplo:
$ man passwd
Exemplo:
$ man 5 passwd
Capítulo 4 - Organização do Linux
67
Para movimentar-se entre as páginas de manuais em um terminal Linux podemos utilizar as
seguintes teclas:
11 e: avança 1 linha.
11 k: volta 1 linha (também é possível utilizar as teclas Seta para Cima e Seta para Baixo).
Realizando buscas
Ocasionalmente acessamos as páginas de manuais já sabendo o que desejamos buscar.
O man habilita a funcionalidade de busca através do caractere barra (/), podendo pesquisar
por padrões como palavras ou junção de caracteres.
Para realizarmos buscas entre as páginas de manuais podemos utilizar as seguintes teclas: l
Quando em posse de
11 /padrão: procura por padrão, partindo da posição do cursor à frente. uma página de manual,
a qualquer momento é
11 n: continua a procura, partindo da posição do cursor à frente.
possível pressionar a
11 N: continua a procura em ordem inversa. letra h (help) para obter
informações avançadas
Para sair de uma página de manual, tecle a letra q de quit (sair). sobre como utilizá-las.
Convenções do man
Para facilitar a compreensão, as páginas de manuais do Linux trabalham com regras para
definição exata de como se desfrutar dos comandos, opções e argumentos. A subdivisão
responsável pelo controle de tais regras é a Synopsis (Sinopse ou Sintaxe), que pontual-
mente revela os modos de uso de cada comando.
Sintaxe Simples
Synopsis
ls [OPTION] . . . [FILE] . . .
Sintaxe Avançada
Synopsis
ln [OPTION] . . . [-T] TARGET LINK NAME (1st form)
ln [OPTION] . . . TARGET (2nd form)
ln [OPTION] . . . TARGET . . . DIRECTORY (3rd form)
ln [OPTION] . . . -t DIRECTORY TARGET . . . (4th form)
Introodução ao Linux
Através do aprendizado das convenções, fica relativamente fácil entender como funciona
toda a estrutura adotada por uma Synopsis.
As convenções seguintes são aplicadas a subdivisão Synopsis para qualquer página de manual.
68
negrito
Digite exatamente como mostrado. Também pode identificar nomes de comandos, suas
opções e demais termos aos quais se queira dar destaque.
Substitua pelo argumento indicado. Identifica uma palavra que deve ser substituída em vez
de literalmente ser utilizada.
[ abc ]
Argumentos entre colchetes são opcionais. O comando funcionará com ou sem eles.
nome
Opção ou argumento especificado como somente nome (sem nenhum caractere em volta
cercando-o), indicam conteúdo obrigatório. O comando não funcionará sem ele (mesmo
conceito do item anterior).
-a | -b
Opções delimitadas por pipe não podem ser utilizadas juntas. Escolha uma ou outra.
argumento ...
O argumento pode ser repetido uma ou mais vezes.
[expressão] ...
Toda a expressão entre colchetes pode ser repetida uma ou mais vezes.
Manuais em português
Nativamente, as páginas de manuais do Linux estão disponíveis no idioma inglês. Por
possuir voluntários por todo o mundo, o Linux também abre espaço para que esses volun-
tários possam colaborar, por exemplo, no processo de tradução de documentos do sistema.
Nos sistemas Linux atuais é possível encontrar uma quantidade significativa de manuais
traduzidos para o português do Brasil ou de Portugal.
É importante frisar que muitos desses manuais podem não descrever o mesmo conteúdo
completo dos manuais em inglês (originais) e ainda podem conter palavras com traduções
contraditórias. O comando groupmod, por exemplo, possui a diferença de quase 70 linhas
Capítulo 4 - Organização do Linux
quando comparando sua versão inglês (original) com a em português (traduzido). A boa
notícia é que mesmo com essa desigualdade de linhas as opções e informações mais rele-
vantes sempre encontram-se traduzidas.
Algumas distribuições Linux podem não trazer os pacotes referentes às páginas de manuais
em português. Para esses casos pode ser necessária a instalação manual dos pacotes
manpages-pt e manpages-pt-dev.
69
Comandos que o man não encontra referências para suas páginas de manuais provavel-
mente são comandos internos do Shell, chamados built-in. Para comandos built-in o man
disponibiliza o undocumented (não documentados), presente na seção 7:
$ man 7 undocumented
O help online
Ocasionalmente necessitamos efetuar consultas brandas, como: recordar uma opção, um
simples argumento ou mesmo uma descrição sucinta do que o comando faz, e talvez o man
não seja a ferramenta ideal para esse procedimento.
l
O help online lista um rápido e prático manual dos comandos, trazendo uma espécie de Muitas das convenções
versão simplificada das páginas do man. Esse recurso é amplamente utilizado em situações utilizadas pelo
comando man são
em que conhecemos o comando, mas não recordamos uma simples opção, argumento ou também aplicadas ao
sintaxe de uso. E para nossa comodidade, quase todos os comandos do sistema possuem help online.
um help online.
Assim como no man, o help online conta com uma quantidade significativa de informações em
português, lembrando que manuais traduzidos podem não descrever o mesmo conteúdo com-
pleto dos originais (em inglês), além de poderem conter palavras com traduções contraditórias.
O help online é representado pelo comando --help, que deve ser informado logo após a
escrita do comando ao qual se deseja obter informações:
# halt --help
halt [OPTIONS. . .]
O help online pode conter informações que o man não possui, assim como a situação
contrária, onde o man pode conter e o help online não. Logo, a dica é: sempre que ficar em
dúvida, consulte os dois.
Mencionaremos comandos variados que fornecem obtenção de ajuda aos comandos built-in
dos mais variados Shells comumente utilizados:
70
$ help
$ help <comando built-in>
$ man bash
$ man builtins
$ man 7 undocumented
$ run-help <comando built-in>
No site oficial do GNU é possível obter toda documentação sobre o Shell Bash.
Uma boa prática é a adoção da tecla Tab nos terminais Linux, pois ela funciona como um
autocompletar para nomes de comandos e diretórios, oferecendo velocidade e prevenção
de erros na escrita de linhas de comandos simples ou mesmo complexas.
Permissões de arquivos
O Linux é um sistema projetado para ser multiusuário. Para suportar operações em
ambientes com múltiplos usuários, o Linux dispõe de mecanismos que restringem o acesso
a arquivos e diretórios, baseados na identificação do usuário que solicita o acesso, e ao
modo de acesso atribuído a cada arquivo e diretório.
Todo arquivo e diretório é associado a um usuário que é chamado de dono (owner). O usuário
que inicialmente cria o arquivo é o dono do arquivo. Cada usuário pode pertencer a um ou mais
conjuntos de usuários que são chamados de grupo. Cada arquivo ou diretório é associado a
um grupo, que é atribuído ao arquivo quando este é criado. Da mesma forma, o usuário que
inicialmente cria o arquivo ou diretório determina o grupo que pode acessá-lo.
Esse grupo associado ao novo arquivo ou diretório é o grupo primário do usuário que o
criou. Tanto o dono como o grupo de um arquivo podem ser alterados. As permissões de
acesso, conhecidas como modos de acesso, determinam as operações que um usuário pode
realizar em um arquivo. A seguir estão os três tipos básicos de permissão que podem ser
aplicadas a um arquivo ou diretório.
podem ter acesso ao arquivo. O terceiro conjunto de permissões restringe o acesso a outros
usuários (others), exceto o dono ou o grupo associado ao arquivo. Para alterar o dono ou
o grupo de um arquivo ou diretório, são utilizados os comandos chown (change owner) e
chgrp (change group), respectivamente.
71
O comando chown também permite alterar dono e grupo de uma só vez:
Concedendo acesso de leitura a arquivo.txt, para o usuário dono, ao grupo e aos outros:
# chmod +r arquivo.txt
Negando acesso de escrita a arquivo.txt, para os membros do grupo e aos outros usuários:
É possível utilizar uma sintaxe alternativa para o comando chmod, com uma codificação que
utiliza três números na base octal (de 0 a 7). Cada número octal corresponde a um conjunto
rwx, que de acordo com a sua posição pode representar as permissões do dono (primeiro
conjunto), do grupo (segundo conjunto) e dos outros (terceiro conjunto).
Cada um desses números octais corresponde a três bits, sendo o primeiro deles asso-
ciado à permissão de leitura, o segundo à permissão de escrita e o terceiro à permissão de
execução. Se o bit tiver o valor 0, indica ausência de permissão e, se tiver o valor 1, indica a
presença da permissão. A codificação completa na base octal tem os seguintes significados:
O exemplo a seguir mostra o comando chmod com a sintaxe que utiliza a base octal:
5,8
# chmod 764 arquivo
Introodução ao Linux
A figura 4.6 mostra a sintaxe padrão e octal com seus respectivos correspondentes binários.
72
6
110
rwx rw- r--
Figura 4.6
Sintaxes do 111 100
comando chmod. 7 4
Caso haja uma tentativa de um usuário acessar um arquivo para realizar determinada ação,
mesmo ele pertencendo ao grupo ou sendo dono do arquivo, se ele não tiver permissão
para realizar a ação pretendida, receberá a mensagem “access denied” (acesso negado).
A tabela 4.2 mostra as permissões ou modos de acesso para arquivos e diretórios.
# ls > arquivonovo
Capítulo 4 - Organização do Linux
73
O comando criará o arquivo “arquivonovo”, com o conteúdo do “arquivo1” seguido do con-
teúdo do “arquivo2”.
Após o comando, todo o texto digitado será armazenado em arquivo.txt, pois como a
entrada não foi especificada, esta continua sendo a padrão, ou seja, o teclado. Para encerrar
a execução do comando, basta finalizar a digitação e teclar “Ctrl + D” duas vezes ou teclar
“Enter” e “Ctrl + D”.
Se não forem especificadas a data e a hora, o sistema utilizará a data e hora atuais.
Criando diretórios
Quando o usuário faz login em um sistema Linux, ele é automaticamente direcionado para o seu
diretório home, onde tem permissão para criar arquivos e diretórios. Essa separação dos arquivos
de cada usuário em seus diretórios pessoais facilita o usuário a encontrar os seus arquivos e
mantê-los reservados, protegidos dos demais usuários e de outros grupos de usuários, ao qual ele
não pertence. Para a criação de diretórios, é utilizado o comando mkdir, cuja sintaxe é:
Para criar uma pequena árvore de diretórios como, por exemplo, os diretórios /home/aluno/
documentos e /home/aluno/documentos/planilhas, podemos trabalhar de duas formas.
A primeira é criando um a um os diretórios da hierarquia, como mostra o exemplo:
# mkdir documentos
# cd documentos (direciona para o novo diretório criado)
# mkdir planilhas
Introodução ao Linux
# mkdir -p documentos/planilhas
74
Copiando arquivos e diretórios
A cópia de arquivos pode ser necessária por diversos motivos; por exemplo, para trans-
portar uma cópia de um arquivo para outro computador utilizando um pen drive ou para
fazer cópias de segurança dos arquivos de um diretório, ação recomendável para a pre-
venção contra problemas que possam ocorrer no disco rígido.
A cópia de arquivos pode ser feita com o comando cp, cuja sintaxe é:
A origem é o caminho completo ou relativo do arquivo ou dos arquivos que serão copiados,
e o diretório destino é o caminho completo ou relativo do local para onde será gerada a
cópia do arquivo seguido do nome que este terá no destino. Pode-se omitir o nome, se qui-
sermos manter o mesmo nome da origem.
Para copiar diretórios, deve ser utilizada a opção -r do comando cp, que faz cópias recur-
sivas. A seguir são apresentados alguns exemplos de uso do comando cp.
# cp /home/aluno/documento.txt /tmp
# cp /home/aluno/documento.txt /tmp/documento2.txt
# cp -r /home/aluno /tmp
# cp documento.txt /tmp
# cp /home/aluno/documento.txt .
O comando de cópia exige que sempre sejam definidas a origem e o destino, mesmo de
forma simplificada. Caso contrário, será exibida uma mensagem de erro.
Caracteres curinga
Têm a função de substituir outros caracteres, pois ao aparecerem numa determinada posição,
indicam que os nomes de arquivos que atendem à condição solicitada podem ter quaisquer
caracteres naquela posição. Os caracteres curinga * (asterisco) ou ? (interrogação) têm função
muito importante na navegação de arquivos e diretórios; por exemplo, o * pode substituir um
nome ou um conjunto de caracteres numa determinada posição de um nome de arquivo.
Capítulo 4 - Organização do Linux
Por exemplo: “P*” significa que todos os nomes de arquivos que começam com “P”, seguidos
de quaisquer conjuntos de caracteres até o tamanho máximo de 256 caracteres, atendem
à condição solicitada. O caractere curinga “?” (sem aspas) pode substituir uma letra, em
determinada posição do nome, por qualquer caractere. Por exemplo: “P??A” significa que
todos os nomes de arquivos com quatro caracteres que começam por “P” e terminam com
“A” atendem à condição solicitada.
O comando do exemplo a seguir copia todos os arquivos que têm seus nomes começando
pela palavra “planilha” do diretório /home/aluno para o diretório /tmp.
75
# cp /home/aluno/planilha* /tmp
l
DICA
É comum desfrutar do
Removendo arquivos e diretórios utilitário alias para
“apelidar” comandos do
O comando utilizado para remover arquivos é o rm, e as mesmas regras vistas para o Linux. Sua praticidade
possibilita adicio-
comando cp se aplicam a ele, cuja sintaxe é:
narmos opções a um
comando sem que
# rm [opção]... <arquivo>... necessariamente
precisemos digitá-las.
Por exemplo, para
Onde o nome do arquivo pode conter os diretórios do caminho na estrutura hierárquica até sempre mostrar o que
o local do arquivo, seguido do nome do arquivo. A remoção de arquivos deve ser feita com será deletado e pedir
confirmação antes de
atenção, pois nem sempre será solicitada, pelo sistema, a confirmação do usuário para a remover diretórios
execução da remoção. Da mesma forma que, para a cópia, a remoção de todos os arquivos, e/ou arquivos,
inclusive os diretórios, pode ser feita utilizando o comando rm com a opção -r. Diretórios podemos “apelidar” o
comando rm para que
sem conteúdo também podem ser removidos com o comando rmdir. quando invocado
também execute suas
Lembre-se que o terminal Linux não possui lixeira. Com isso, o rm é um dos comandos que opções -r -i e -v:
devemos possuir bastante atenção ao utilizá-lo, pois qualquer descuido pode excluir defini- $ alias rm=’rm -riv’
tivamente conteúdos que você não queria remover de fato.
# mv /home/aluno/documento.txt /tmp
# mv /home/aluno/documento.txt /home/aluno/documento2.txt
# ls [opção]... [arquivo]...
76
Umas das opções mais usadas do comando ls é a opção -l, que permite listar arquivos e
diretórios no formato “longo”, que exibe uma série de informações a respeito dos arquivos
listados, como permissões de acesso, número de links, dono do arquivo, grupo do arquivo,
tamanho em bytes, data da última alteração e nome do arquivo.
Existem variações do comando ls que podem ser utilizadas com as mesmas funcionalidades.
Os comandos ll, dir e vdir também podem listar arquivos. O comando ll possui a mesma
função do comando ls com as opções -la. O comando dir possui a mesma função do
comando ls utilizado sem opções. Já o comando vdir possui a mesma função do comando
ls utilizado com a opção -l. É importante ressaltar que as mesmas opções do comando ls
podem ser utilizadas para os comandos ll, dir ou vdir.
Esse comando faz uma busca pela expressão definida como parâmetro, em todos os
diretórios e subdiretórios especificados também como parâmetros no campo caminho,
retornando os resultados da busca, caso existam. O comando find possui uma série de
funcionalidades: busca de arquivos sem dono, busca de arquivos com o bit SUID ativado,
execução de comandos sobre o resultado da busca, entre outros. Para mais detalhes a res-
peito do comando find, sua página de manual pode ser consultada.
Podemos utilizar, ainda, o comando locate, que faz buscas por arquivos, consultando um
banco de dados que contém os arquivos criados pelo usuário. Esse comando permite acesso
mais rápido a esses arquivos, contanto que não tenham sido criados depois da última
atualização do banco de dados. Para forçar a atualização desse banco de dados, utilizamos
o comando updatedb. O comando locate tem sintaxe mais simples e funciona como se hou-
vesse caracteres antes e depois do nome do arquivo, isto é, procura-se o nome do arquivo
isoladamente ou como parte de um nome. Por exemplo, para achar os arquivos books e
school, podemos utilizar o seguinte comando:
# locate oo
O Linux possui dois tipos especiais de nomes de diretórios: diretório ponto, “.”, que significa
o diretório corrente, como vimos anteriormente, e diretório dois pontos, “..”, que representa
o diretório um nível acima do diretório corrente. O diretório que fica num nível imediata-
mente acima do diretório corrente também é chamado de diretório-pai (parent directory).
Esses dois tipos especiais de diretórios são muito utilizados para a navegação na estrutura
de diretórios do Linux. Se o diretório corrente é o /home/aluno, por exemplo, podemos fazer
referência ao diretório /home somente digitando “..”. Outro exemplo seria o caminho ../
aluno/documentos, que significaria o mesmo que /home/aluno/documentos.
77
Conforme vimos anteriormente, os diretórios do Linux são organizados hierarquicamente em
uma estrutura do tipo “árvore invertida”. O diretório que fica no nível hierárquico mais alto ou
no topo da árvore de diretórios é o diretório-raiz, representado pela barra normal (“/”).
Essa forma de estrutura em árvore permite que possa haver arquivos ou diretórios com os
mesmos nomes, diferenciados pelo sistema como elementos distintos devido aos caminhos
diferentes (paths) percorridos na estrutura. Cada caminho é representado por uma sequ-
ência de diretórios separados pelo caractere “/” (sem aspas). Essa sequência representa o
nome do caminho (path name) do arquivo ou diretório.
# cd /home/aluno/documentos
# cd documentos
Além dessas facilidades, existem os comandos pwd e cd para a navegação nos diretórios.
O primeiro passo para navegar na estrutura é saber o local onde estamos. O comando
pwd (print working directory) é utilizado para mostrar o diretório corrente, retornando o
caminho completo de identificação desse diretório. O comando pwd é um dos mais simples
do Linux, pois não tem opções nem entrada e só produz uma linha de saída.
# pwd
/home/aluno/documentos
# cd /home/aluno
um único arquivo cujo conteúdo é o conjunto de arquivos que foram empacotados. O comando
tar pode ser utilizado de várias maneiras, mas sua sintaxe mais comumente utilizada é:
78
Onde arquivo é o nome do arquivo tar, que será criado, e “lista de arquivos” é a lista de arquivos
e diretórios que serão empacotados. O comando tar também é utilizado para desempacotar
arquivos. As opções “-c” e “-x” são utilizadas para empacotar e desempacotar arquivos, respecti-
vamente. Se quisermos especificar o nome do arquivo que será criado, devemos adicionalmente
utilizar a opção “-f”. O comando tar possui diversas opções, entre elas a opção “-v”, que faz com
que sejam listados os nomes dos arquivos que estão sendo empacotados ou desempacotados.
Os exemplos a seguir são as formas mais utilizadas do comando tar.
O comando gzip gera um arquivo com o mesmo nome do arquivo original, incluindo a termi-
nação .gz, enquanto o comando bzip2 inclui a terminação .bz2.
Os arquivos gerados pela execução dos comandos anteriores serão criados no diretório cor-
rente. Se, no entanto, desejarmos transportá-los para uma fita, supondo que seu dispositivo
esteja montado, deve-se especificar o caminho correspondente ao arquivo que representa o
dispositivo, como mostra o exemplo:
79
Onde st0 é o dispositivo correspondente à unidade de fita.
80
5
Desvendando o Linux
objetivos
conceitos
Entrada e saída padrão de dados e saída padrão de erros, pipes ou canalizações e
comandos para manipulação de arquivos.
Eles obtêm dados como entrada, executam o processamento desses dados e fornecem resultados
como saída. Todo programa, quando é executado, possui uma entrada e uma saída de dados e
uma saída de erros. No Linux, a entrada padrão de dados é o teclado, a saída padrão de dados
é o monitor e a saída padrão de erros também é o monitor. A figura 5.1 mostra a entrada e a
saída padrão de dados e a saída padrão de erros.
Utilitário
ou programa
do usuário
Capítulo 5 - Desvendando o Linux
Saída Saída
de erro padrão
Entrada padrão
padrão
Figura 5.1
Entrada e saídas
padrão.
81
Redirecionamento de entrada e saída
Uma das facilidades que o Linux oferece é a possibilidade de alterar a entrada e a saída
padrão de dados, bem como a saída padrão de erros. Essa característica é conhecida
como redirecionamento de entrada e saída. Por exemplo, suponhamos que um programa
chamado “consulta” solicite o número de um cliente como entrada e apresente seus dados
como saída. Normalmente, o programa receberá a entrada de dados do teclado e exibirá a
saída na tela:
# consulta 12345
Cliente nº:12345
Nome: Aluno1
Endereço: Av. Atlântica, 110
Cidade: Rio de Janeiro
Estado: RJ
Se o programa de consulta tiver de ser executado para uma lista de uma centena de clientes,
seria cansativo digitar os números dos clientes um a um, como entrada do programa, o que
poderia, ainda, conduzir a erros de digitação. Alternativamente, a listagem dos números dos
clientes pode ser colocada em um arquivo chamado “numeros”, editando-o previamente, com
um dos utilitários de edição de texto do Linux. Poderemos, então, redirecionar a entrada padrão
do comando consulta através do símbolo “<”, que significa a entrada padrão do sistema:
O caractere “>” instrui o shell a executar o programa consulta utilizando como saída padrão
a impressora em vez do monitor de vídeo. Podemos, também, usar o redirecionamento de
entrada juntamente com o de saída:
82
Utilitário
Arquivo ou programa Arquivo
números do usuário clientes
Entrada Saída
padrão Saída padrão
de erro
padrão
Figura 5.2
Redirecionamento
de entrada e saída.
Pipe ou canalização
Geralmente, os utilitários do Linux são desenvolvidos para desempenhar uma única função.
Tarefas mais complexas são executadas através da combinação sequencial de utilitários,
com a saída de um servindo de entrada para o outro. Tal combinação é possível por meio
Capítulo 5 - Desvendando o Linux
da facilidade de canalização do Linux. Uma canalização, mais conhecida como pipe, é usada
para direcionar a saída de um comando para outro comando, que a utilizará como entrada
de dados. Essa funcionalidade é especialmente útil quando dois comandos são executados
em sequência, como mostra a figura 5.3.
83
Figura 5.3
Canalização
ou pipe.
Comando 1 | Comando 2
Utilizando o exemplo anterior, vamos colocar os clientes em ordem numérica e mostrar suas
respectivas informações por intermédio do programa consulta na tela do monitor. Para
executar essas duas funções, devemos executar os comandos:
# sort numeros > temp (ordena os números de identificação dos clientes em ordem crescente.)
# ./consulta < temp (lista os dados dos clientes, segundo a ordenação anterior.)
O mesmo resultado pode ser conseguido ao se utilizar uma canalização ou pipe, que é
representado pelo caractere “|”.
Redireciona Saída
entrada padrão
Figura 5.4
Sort Consulta
Combinação
de comandos
utilizando pipes.
de entrada para o arquivo de saída, passando todos os dados que recebe do comando sort
para o programa consulta, mas também copia sua saída para o arquivo especificado como
parâmetro, que nesse exemplo é o arquivo temp.
84
Comandos para manipulação de arquivos
Nesse tópico veremos alguns comandos que trabalham com arquivos. Esses comandos
realizam funções de exibição, contabilização e filtragem de dados. A seguir serão
apresentados em detalhes esses comandos.
Vimos que o comando mv serve para mover o arquivo da origem para o destino; na verdade
uma cópia destrutiva, porque retira o arquivo de seu local original e faz uma cópia dele no
local de destino, eliminando o arquivo do local de origem. O comando mv também pode ser
utilizado para mudar o nome de arquivos, quando o usuário desejar gerar uma nova versão
de um arquivo ou um novo arquivo que tenha um nome que o diferencie do anterior.
É importante lembrar que o arquivo original não será mantido após ser renomeado.
A sintaxe do comando mv é:
O comando rename pode ser utilizado exclusivamente para renomear arquivos, mas com a
funcionalidade adicional de trocar partes de nomes, sendo muito útil quando utilizado com
caracteres-curinga. No exemplo a seguir, as terminações de todos os arquivos do diretório
corrente são trocadas de .htm para .html.
Vimos que o comando cat pode ser usado para criar um arquivo, mesmo sendo sua função
principal a de concatenar arquivos. Como a sua saída padrão é a tela do monitor, ao
executar o comando a seguir, o conteúdo do arquivo será mostrado na tela:
# cat arquivo
O resultado da concatenação será o próprio arquivo, pois não há nenhum outro arquivo
especificado no comando para ser concatenado. O problema do comando cat é que, se o
tamanho do texto contido no arquivo ultrapassar o número de linhas da tela do monitor, ele
continuará mostrando o arquivo até o final, sem pausas, de forma que a tela só pare de rolar
quando todo o conteúdo do arquivo for exibido.
Logo, só serão mostradas na tela as últimas linhas do arquivo, e não veremos as linhas ante-
riores, ou melhor, elas serão mostradas rapidamente na tela, não havendo tempo reservado
para a sua leitura. Para evitar o problema de visualização de arquivos maiores que o número
Capítulo 5 - Desvendando o Linux
de linhas da tela, devemos utilizar os comandos more ou less, que listam o arquivo dando
uma pausa na listagem quando ela preenche toda a tela, permitindo que se controle a exi-
bição do conteúdo. A sintaxe desses comandos pode ser vista a seguir:
Utilizando o comando more, se o conteúdo do arquivo for maior que a quantidade de linhas
do monitor, será exibida no final da tela a expressão “--more--(x%)”, onde x representa a
porcentagem do arquivo que já foi exibida, indicando que há mais texto a ser visualizado.
85
Se pressionarmos a tecla Enter, o comando more mostrará mais uma linha do texto rolando l
a primeira linha para cima na tela. Se quisermos mostrar mais uma tela inteira com as linhas O comando less possui
seguintes do texto, devemos pressionar a barra de espaço. Podemos, dessa forma, controlar praticamente as
mesmas funcionali-
a exibição do texto, passando-o linha a linha na tela ou paginando-o tela a tela. Para sair do dades do comando
comando more antes de chegar ao fim do arquivo, podemos utilizar as teclas Ctrl + C ou a tecla q. more, só que mais
recursos.
# wc [opção]... [arquivo]...
Caso não seja especificado nenhum arquivo, o comando wc lê a entrada padrão. O comando
do exemplo a seguir lista o conteúdo do diretório corrente e direciona a sua saída para a
entrada do comando wc que, com a opção -l, conta o número de linhas listadas pelo comando
ls –l e fornece, como resultado, o número de arquivos e diretórios contidos no diretório /etc.
# ls -l /etc | wc -l
Caso não seja especificado nenhum arquivo, o comando head lê a entrada padrão. Caso seja
especificado mais de um arquivo, cada um deles terá suas dez primeiras linhas exibidas na
tela e seu conteúdo será precedido pelo nome do arquivo como mostra o exemplo:
A principal opção desse comando é a que especifica o número de linhas iniciais que serão
listadas, como mostra o exemplo a seguir, que exibe as cinco primeiras linhas do arquivo
relatório.txt:
# head -5 relatorio.txt
86
Se não for informado o número de linhas, o comando retornará as dez primeiras linhas por
padrão. O inverso do comando head é o comando tail, que mostra as últimas linhas de um
arquivo. Sintaxe do comando tail:
Linhas
rejeitadas
Texto Linhas
original GREP escolhidas
Arquivos Arquivo
de entrada de saída
Figura 5.5
Funcionamento do Padrões
comando grep.
O usuário especifica um padrão que será utilizado pelo comando grep para fazer a pesquisa
nos arquivos de entrada. Esse utilitário examina as linhas do arquivo, verificando se cada
uma contém o padrão especificado. Quando o padrão é encontrado, a linha é copiada para
o arquivo de saída, ou para a tela do terminal, se for utilizada a saída padrão. Se a linha não
contém o padrão, é rejeitada, isto é, não é copiada no arquivo de saída. Quando o comando
grep termina de pesquisar os arquivos de entrada, o arquivo de saída vai conter todas as
linhas que contêm os padrões desejados. A sintaxe do comando grep é:
Capítulo 5 - Desvendando o Linux
Caso não seja especificado nenhum arquivo, o comando grep lê a entrada padrão (teclado).
Um exemplo de uso do comando grep pode ser conferido a seguir, onde é usado para sele-
cionar somente os clientes que moram no Distrito Federal:
87
# cat clientes
l
12341 Aluno1 Rua Goiás, 25 Planaltina DF O utilitário grep
12342 Aluno2 Av. Beira Rio, 1005 Vitória ES também funciona como
um filtro de
12343 Aluno3 Rua Guarani Campinas SP
canalização. Quando
12344 Aluno4 SQS 205 F 306 Brasília DF
utilizado em uma
12345 Aluno5 Av. Atlântica, 110 Rio de Janeiro RJ
canalização, seleciona
12346 Aluno6 Av. Castro Alves, 320 Salvador BA
algumas saídas do
12347 Aluno7 Rua da Praia, 215 Porto Alegre RS
programa ou comando
12348 Aluno8 Rua das Laranjeiras,1020 Rio de Janeiro RJ
anterior e envia o
# grep DF clientes
resultado para a
12341 Aluno1 Rua Goiás, 25 Planaltina DF
entrada do programa
seguinte que vai
processá-las.
Os padrões utilizados pelo comando grep são chamados de expressões regulares. Podemos
usar caracteres especiais que dão maior flexibilidade ao comando grep:
11 O caractere ponto (“.”) é um caractere especial que permite encontrar padrões com qual-
quer caractere na posição determinada pelo ponto.
11 O caractere asterisco (“*”) permite achar qualquer número (inclusive zero) de ocorrências
do caractere que o precede. Por exemplo, a expressão “grep abc*” pode selecionar linhas
que contêm “ab”, “abc”, “abcc”, “abccc”, “abcccc” etc.
11 O caractere “^” seleciona as linhas que começam com o padrão sucedido por ele. Por
exemplo, a expressão “grep ^Linux” seleciona as linhas de um arquivo que começam com
a palavra Linux.
11 O caractere “$” seleciona as linhas que terminam com o padrão precedido por ele. Por
exemplo, a expressão “grep Linux$” seleciona as linhas de um arquivo que terminam com
a palavra Linux.
11 egrep (extended grep): permite usar caracteres especiais adicionais aos caracteres do
comando grep.
11 fgrep (fixed grep ou fast grep): funciona similarmente ao comando grep, mas não reco-
nhece nenhum caractere especial em expressões regulares. Todos os caracteres repre-
sentam apenas eles mesmos, não havendo significados metafóricos.
O comando egrep (extended grep), como o próprio nome diz, aceita expressões regulares mais
elaboradas do que o comando grep. Podemos usar os seguintes caracteres especiais adicionais:
11 Números entre chaves {n,m}, que permitem encontrar padrões com n a m ocorrências do
caractere que precede as chaves. Por exemplo, a expressão egrep “abc{0,2}” arquivo pode
Introodução ao Linux
selecionar “ab”, “abc” ou “abcc”. Deve-se utilizar sempre aspas simples ou duplas na expressão.
11 O caractere “+” permite encontrar uma ou mais letras entre os colchetes que o precedem,
concatenando-as com os caracteres que o sucedem. Por exemplo, a expressão egrep
“[a-z]+ove” permite achar move, aprove, love etc.
88
11 O caractere “?” permite encontrar zero ou uma ocorrência da letra que o precede. Por
exemplo, a expressão “lo?ve” permite encontrar love ou lve.
11 Caracteres entre parênteses (xyz), como por exemplo egrep “love(able|ly), permitem
encontrar as palavras loveable ou lovely.
Existe ainda o comando rgrep, que permite estender a pesquisa de um padrão de caracteres
recursivamente, ou seja, no diretório corrente e em seus subdiretórios, e exibe não só a
linha procurada como também o nome do arquivo que contém a linha. Utilizando as opções
–r e –n no comando grep, obtém-se o mesmo resultado.
Outra alternativa ao comando grep é o comando fgrep (fixed grep ou fast grep), que fun-
ciona similarmente ao comando grep, mas não reconhece nenhum caractere especial em
expressões regulares. Todos os caracteres representam apenas a si mesmos, não havendo
significados metafóricos.
Arquivo 2
de entrada
Localização
CMP
das diferenças
Por exemplo, se compararmos dois arquivos que possuem o 17º caractere diferente,
estando esse localizado na linha 10, teremos a resposta:
Outro comando utilizado para comparar arquivos é o diff, que exibe as diferenças entre eles,
gerando uma lista de procedimentos que podem ser aplicados ao arquivo original, usando
o utilitário patch, para tornar os arquivos idênticos. O comando diff possui mais recursos
que o comando cmp. A saída do comando diff é uma lista de ações a serem editadas que,
quando aplicadas ao conteúdo do primeiro arquivo, geram o arquivo editado. As ações a
serem editadas incluem adição de uma linha, eliminação de uma linha ou, então, mudança
em uma linha.
89
Ordenação em arquivos
O conteúdo de um arquivo pode ser ordenado antes de ser processado. O comando sort
obtém as linhas de um ou mais arquivos de entrada e a seguir as processa, produzindo um
arquivo de saída que contém as linhas em ordem classificada. Sintaxe do comando sort:
O comando sort trata cada linha de um arquivo de entrada como uma série de um ou mais
campos, separados uns dos outros por espaços, como se fossem colunas. O exemplo a seguir
lista o arquivo de entrada “clientes” com o primeiro campo em ordem numérica decrescente.
Se quisermos ordenar o arquivo por endereços, deveremos utilizar o comando a seguir, que
ordena alfabeticamente pelo número da coluna especificada na opção -k:
90
6
Edição de texto
objetivos
Conhecer as formas de entrar e sair do editor Vi, bem como seus comandos de
movimentação, inserção e remoção de texto; Salvar as modificações e procurar por
padrões de caracteres e palavras no texto; Aprender a utilizar o editor Nano.
conceitos
Processadores de texto e editores de texto.
Processadores de texto
Os processadores de texto oferecem suporte à criação, edição e formatação de documentos
que suportam inclusão de textos, tabelas, equações científicas, entre outros, utilizando um
conjunto de funcionalidades próprias. O Linux oferece um conjunto de ferramentas para
processamento de texto, com destaque para o Writer, do pacote Libre Office.
Editores de texto
Os editores de texto são usados para a edição de arquivos que contenham somente texto,
sem qualquer tipo de formatação. Eles permitem a entrada, remoção ou substituição de
Capítulo 6 - Edição de texto
texto, além de oferecer diversas funcionalidades, como busca, correção de erros, cópia e
colagem de texto, entre outros. Os editores de texto podem ser divididos em duas catego-
rias: os editores de tela que exibem o texto na tela inteira, e os editores de linha que exibem
o conteúdo do arquivo linha a linha. Esta sessão de aprendizagem será baseada no editor de
textos Vi, que será visto no próximo tópico. Por isso, não entraremos em detalhes no modo
de utilização dos outros editores apresentados a seguir.
91
11 Emacs: é um editor de texto de tela cheia que foi desenvolvido por Richard Stallman,
guru e fundador da Free Software Foundation (FSF). O Emacs é um poderoso ambiente
de edição de textos, que inclui funções adicionais chamadas de extensões. Entre essas
funções estão: o envio de e-mails de dentro do editor, a conversão de dados de arquivos
em outros formatos e até mesmo a compilação de programas editados pelo Emacs. Para
abrirmos um arquivo utilizando esse editor, devemos utilizar o comando emacs, seguido
do nome do arquivo. Se o arquivo especificado na linha de comando não existir, ele será
criado. Caso contrário, o arquivo existente ficará disponível para edição. Se o Emacs for
aberto em um ambiente gráfico, como o GNOME ou o KDE, será aberta uma janela com
uma interface baseada em menus. Para ativar uma das opções do menu, basta posicionar
o cursor do mouse e clicar sobre a opção. Serão exibidas então as opções de cada menu.
11 Pico: é o acrônimo para Pine Composer, um editor de texto de tela cheia desenvolvido pela
Universidade de Washington, que é parte integrante do programa cliente de e-mail Pine.
Apesar disso, o Pico pode ser utilizado para editar arquivos texto independentemente do
Pine. O Pico possui várias funcionalidades, como busca de texto e verificador de erros, entre
outras. Para abrirmos um arquivo utilizando o editor Pico, devemos utilizar o comando pico,
seguido do nome do arquivo. Se o arquivo especificado na linha de comando não existir, ele
será criado. Caso contrário, o arquivo existente ficará disponível para edição.
11 JOE: o Joe’s Own Editor é um editor de texto de tela cheia criado por Joseph H. Allen em
1991, e distribuído pela GPL. O JOE possui uma série de funcionalidades, como: sistema
integrado de ajuda, busca de texto, emulação de funcionalidades de outros editores,
entre outras. Para abrirmos um arquivo utilizando o editor JOE, devemos usar o comando
joe seguido do nome do arquivo. Se o arquivo especificado na linha de comando não
existir, ele será criado. Caso contrário, o arquivo existente ficará disponível para edição.
11 Ed: é um editor de texto de linha, originado em 1971 pelo criador do Unix, Ken Thompson.
Para abrirmos um arquivo utilizando o editor Ed, devemos utilizar o comando ed seguido
do nome do arquivo. Se o arquivo especificado na linha de comando não existir, ele será
criado. Caso contrário, o arquivo existente ficará disponível para edição. Quando um
arquivo é aberto pelo Ed, por padrão, a última linha do arquivo é exibida, permitindo a
inserção de texto após ela. Os comandos do Ed só afetam a linha que está sendo exibida
na tela, a não ser que outra linha, ou mesmo um conjunto de linhas, seja especificado.
11 Gedit: famoso editor de textos para Sistemas Linux, criado pela própria GNOME. Possui
instalação rápida e consumo de memória baixo, não exigindo um computador com alto
desempenho. É o editor oficial do ambiente de área de trabalho GNOME. Atua somente
em modo gráfico, e pode ser encontrado até mesmo em distribuições Linux com
ambientes de área de trabalho contrários ao GNOME.
11 Kate/Kwrite: é acrônimo para KDE Advanced Text Editor, que em português significa
Editor de Texto Avançado para KDE. É considerado o mais completo dos editores de
texto em modo gráfico para ambientes de área de trabalho KDE. Antigamente o Kwrite
era o editor padrão, mas acabou sendo agregado ao Kate. Entre suas principais funções
destaca-se a fácil possibilidade de programar, compilar e executar, através de variadas
linguagens de programação.
Introodução ao Linux
Ao utilizar editores de texto em modo gráfico para editar arquivos que necessitam de
permissões elevadas, pode ser necessária a instalação de interfaces para utilização
dos comandos su ou sudo para o ambiente gráfico. Os pacotes gksu (para gnome) e
kdesudo (para kde) podem auxiliá-lo nesse processo.
92
Editor Nano
Nano é um editor de texto relativamente básico. Por possuir características de simplicidade
e fácil manuseio, é amplamente indicado para usuários iniciantes no mundo Linux. Quando
comparado a editores como o vi ou emacs, o nano não é tão poderoso, mas realiza todas as
funções principais relacionadas a edição de texto.
Foi lançado como Free Software em 1999, por Chris Allegretta. Atualmente é parte do
GNU Project e instalado por padrão em Sistemas Debian e distribuições derivadas, como o
Ubuntu. É referenciado como o emulador do editor de textos Pico, porém incrementado com
novas funcionalidades.
Nesse tópico abordaremos algumas ações, como entrar, sair, editar, salvar e exemplos prá-
ticos de utilização do Nano.
Sempre que aberto o Nano traz um cabeçalho contendo informações, como o nome do
editor e sua versão, o nome do arquivo, e a situação atual do documento. O rodapé do Nano
descreve ações básicas, que podem ser realizadas no arquivo através de combinações de
teclas, que podem salvar, procurar, colar etc.
Figura 6.1
Editando um
arquivo com o
editor Nano.
Capítulo 6 - Edição de texto
93
A seguir seguem descrições sobre as principais opções do rodapé do Nano:
Strings podem ser: um caractere, mais de um caractere, uma palavra ou uma frase.
Após a inclusão de textos ou edição dos dados, podemos emitir o ^O (gravar) e informar o
nome do arquivo a ser salvo, em seguida ^X (sair) para fechar o editor.
Como já sabemos: opções entre colchetes não são de uso obrigatório. Com isso, podemos uti-
lizar somente o comando nano, ou ainda, nano seguido de um arquivo sem o uso de opções:
$ nano texto.txt
Teclas de movimentação
Introodução ao Linux
Combinações de teclas podem ser utilizadas para movimentar o cursor entre todos os carac-
teres e espaços de um texto. É importante ressaltar que assim que um arquivo é aberto
imediatamente o Nano entra no modo de edição, e para acidentalmente não modificarmos
o documento, tenha cuidado ao informar as combinações de teclas seguintes:
94
11 Alt + / : ir para o final do arquivo.
Também é possível utilizar as teclas Page Down e Page Up, que são equivalentes a Ctrl+V
e Ctrl+Y, respectivamente. As setas direcionais (para cima, para baixo, esquerda e direita)
também podem ser utilizadas, o detalhe é que ao descer o arquivo e alcançar a última linha
da tela por padrão o Nano avança um bloco de linhas à frente ou, caso esteja voltando, um
bloco de linhas atrás. Se esse comportamento não for de seu agrado, altere a inicialização
do nano para o modo suave, informando a opção –S, do inglês smooth:
$ nano -S [arquivo]
Editor vi
O vi (Visual Editor) ou vim (Vi IMproved), em português vi melhorado, é um dos mais
antigos editores de texto para sistemas Unix-like. Desenvolvido em Berkeley, passou a
ser incorporado por padrão às diversas versões do Sistema Operacional Unix. O vi possui
uma interface bastante simples, sem os requintados recursos de edição oferecidos pelos
processadores de textos para ambientes gráficos. Apesar de sua simplicidade, o vi oferece
vários recursos de edição de texto, dos simples aos mais sofisticados, e é largamente
utilizado por administradores de sistema e programadores. Por esse motivo, será o editor
O buffer nada mais é O vi copia o conteúdo do arquivo de texto que está sendo editado para um buffer de
do que um local na edição na memória principal, utilizando a tela do monitor de vídeo como uma janela para
memória RAM para
onde é copiado o visualização desse buffer. A tela pode ser movimentada para cima ou para baixo mostrando
conteúdo de um outras linhas do texto armazenado no buffer, possibilitando ao usuário navegar por todo o
arquivo quando esse
arquivo.
está sendo editado.
Na figura 6.2 vemos como a tela do terminal mostra o conteúdo do buffer. Para editar o
texto, o usuário simplesmente move o cursor pela tela, usando comandos de um só carac-
tere ou utilizando as setas do teclado. Outros comandos de edição de texto são usados para
inserir, modificar e remover texto. O comando especifica se a alteração a ser executada é
em um caractere, em uma palavra ou em uma linha. Os resultados de cada comando são
refletidos imediatamente no vídeo. Capítulo 6 - Edição de texto
95
Buffer de edição
Janela
Figura 6.2
Exibição do
conteúdo
Monitor de vídeo do buffer.
Quando o vi salva as alterações realizadas, ele copia o texto editado no buffer para o arquivo
armazenado de forma permanente, substituindo o conteúdo anterior. O comando vi é
utilizado para executar o editor, e sua sintaxe é:
# vi [opção]... [arquivo]...
Se o nome do arquivo for omitido, o vi abrirá um novo arquivo sem nome no buffer de
edição, que ficará vazio, aguardando o usuário digitar seu texto. Os caracteres “~” (til) na
coluna da esquerda da tela indicam que não há texto no arquivo, nem mesmo espaços em
branco. Na última linha da tela é mostrado o nome do arquivo e informado se ele é novo ou
se já existia. Caso o arquivo já exista, é mostrado: seu nome, o número de linhas, número de
caracteres, a posição da linha e coluna em que o cursor está, e em que parte do documento
você atualmente está.
Introodução ao Linux
Figura 6.3
Editando um
arquivo com o
editor vi.
96
Para sair do vi sem salvar o arquivo editado, deve-se pressionar a tecla Esc para sair do modo
de inserção, depois digitar o comando :q! e em seguida teclar Enter. Dessa forma, a última
versão do arquivo é preservada e as alterações feitas são descartadas. O vi, por padrão,
não permite a saída do editor com o descarte das alterações feitas no buffer. O ponto de
exclamação após o comando :q permite sair do vi mesmo que o buffer tenha sido modificado.
O nome do arquivo deve ser único dentro do seu diretório. Um nome de arquivo pode incluir
qualquer caractere, exceto alguns caracteres especiais como /, *, &, entre outros. É possível
incluir espaços em um nome de arquivo digitando uma barra invertida (“\”) antes do espaço.
Modos do editor vi
Existem três formas básicas ou modos de trabalhar com o editor vi.
11 Modo de inserção: esse modo é usado quando se deseja inserir texto em um arquivo.
A mudança do modo de comando para o modo de inserção é feita por intermédio de uma
das opções a seguir:
22 A: entra no modo de inserção de texto, começando no fim da linha onde está o cursor.
22 o: entra no modo de inserção de texto, começando uma nova linha a seguir da posição
atual do cursor.
22 O: entra no modo de inserção de texto, começando uma nova linha acima da posição
atual do cursor.
22 cw: entra no modo de inserção de texto, substituindo uma palavra a partir do carac-
tere onde o cursor está posicionado. Outras variações do comando c também podem
ser utilizadas para entrar no modo de inserção. Essas opções de comando serão vistas
no tópico “Substituindo texto”.
Capítulo 6 - Edição de texto
11 Modo de execução: esse modo é uma variante do modo de comandos do vi, que também
permite a execução de comandos do Linux sem precisar sair do editor. Os comandos do
modo de execução sempre começam com dois pontos (“:”). Vários comandos de edição
de arquivos do vi também podem ser executados nesse modo.
97
Para executar comandos do Linux, deve-se digitar no prompt do vi os caracteres :! (dois
pontos e exclamação), seguidos pelo comando. Por exemplo, para conhecer a localização
do arquivo que está sendo editado, deve-se executar o seguinte comando:
:!pwd
Movimentando o cursor
No modo de comando é possível posicionar o cursor em qualquer lugar do arquivo, o que é
necessário para fazer as modificações, remoções ou cópias de texto, a partir da posição do
cursor. Existem comandos no vi para mover o cursor, que permitem subir, descer, ir para a
esquerda ou para a direita, caractere por caractere; ir para frente ou para trás de bloco em
bloco de texto, como palavras, frases ou parágrafos; ir para frente ou para trás de tela em
tela, em um arquivo, entre outras. Os comandos a seguir podem ser utilizados para realizar
movimentos simples do cursor:
11 h: um espaço à esquerda.
11 l: um espaço à direita.
É possível, também, usar as teclas de setas para movimentar o cursor. Apesar de mostrar
melhor a direção de movimento, as setas não são suportadas por todos os terminais. Com o
tempo e a experiência, o usuário do vi verá que é muito prático movimentar o cursor utilizando
as teclas h, j, k e l, mantendo os dedos nas posições corretas do teclado. Utilizando as teclas h
ou l podemos movimentar o cursor do início no final da linha. Ao chegarmos ao início ou ao fim
de uma linha, o cursor para de se mover, não permitindo a mudança de linha e, se tentarmos
avançar o cursor um bip é emitido, indicando que a ação não pode ser executada.
Para mover o cursor uma linha a seguir ou acima, é necessário utilizar as teclas j ou k, que
também estão limitadas a movimentar o cursor dentro das linhas do texto, não permitindo
mover o cursor acima da primeira linha ou a seguir da última linha do arquivo. Podemos
usar números combinados com os comandos de movimentação, multiplicando a sua ação,
como no exemplo da figura 6.4, onde o comando 4l move o cursor quatro posições para a
direita, executando a mesma ação que utilizar a tecla l quatro vezes.
4l
with a screen editor you can scroll the Figura 6.4
_
Movimentando
o cursor.
A figura 6.5 mostra os movimentos do cursor, de sua posição original (caractere “s” na
décima sétima coluna da terceira linha) para as posições marcadas pelos círculos, utilizando
diversos comandos do vi.
Introodução ao Linux
0 2k $
with a screen editor you can scroll the
page, move the cursor, delete lines,
and more, while _
seeing the results of Figura 6.5
your edits as you male them. Comandos de
b 2h j 2w movimentação
do cursor.
98
Alguns comandos de movimentação do cursor:
11 W: move o cursor de palavra em palavra para a direita, sem contar símbolos e pontuações.
11 B: move o cursor de palavra em palavra para a esquerda, sem contar símbolos e pontuações.
Editando texto
Ao editarmos um arquivo, necessitamos fazer diversas operações como inserção, remoção,
substituição, entre outras. Os comandos a seguir são usados para realizar algumas das mais
comuns alterações em um arquivo texto.
11 i: inserir texto.
11 a: anexar texto.
11 c: alterar texto.
11 d: remover texto.
11 x: remover texto.
11 y: copiar texto.
A figura 6.6 mostra um texto com diversos erros e as correções necessárias. O vi permite
fazer essas correções no texto utilizando teclas básicas de edição:
Figura 6.6
Comandos de rS
edição.
99
Substituindo texto
O comando c permite fazer alterações usando combinações de comandos de movimentação
do cursor, como pode ser visto nos exemplos:
11 cw: substituir uma palavra ou parte de uma palavra onde o cursor estiver posicionado.
Se o cursor estiver posicionado no meio da palavra, ela será substituída da posição do
cursor até o fim da palavra. Por exemplo: para trocar “fazer” por “fazendo”, devemos posi-
cionar o cursor na letra “r”, digitar o comando cw e inserir as letras “ndo”.
11 cc: substituir a linha inteira onde o cursor está posicionado. Para executar esse comando,
o cursor pode estar posicionado em qualquer local da linha que será substituída.
11 cb: substituir uma palavra ou parte de uma palavra onde o cursor estiver posicionado.
Se o cursor estiver posicionado no meio da palavra, ela será substituída da posição do
cursor até o início da palavra. Por exemplo: para substituir a palavra “fazendo” pela
palavra “trazendo”, devemos posicionar o cursor na letra “z”, digitar o comando cb e
inserir as letras “tra”.
Após digitar o comando de alteração, podemos inserir qualquer texto sem limite de caracteres.
A inserção ou modificação de texto também pode ser feita com os seguintes comandos:
11 r: substituir o caractere onde o cursor está posicionado, sem sair do modo de comando.
Esse comando pode ter seu efeito multiplicado se for precedido por algum número.
Por exemplo, para substituir as próximas três letras a contar da posição do cursor, o
comando 3r deve ser usado. É muito útil para corrigir erros de digitação no texto, evi-
tando o uso de cw, que obriga a digitação de parte da palavra novamente.
11 C: substituir o texto de uma linha a partir da posição do cursor até o final da linha, funcio-
nando da mesma forma que o comando composto c$.
11 R: substituir texto, de forma que cada caractere digitado se sobrepõe ao caractere original.
Esse modo de substituição altera no máximo uma linha, substituindo caractere por caractere.
Removendo texto
Com o comando d podemos remover qualquer texto no arquivo editado. Assim como o
comando c, o comando d, de deleção, necessita ser acompanhado de uma tecla que definirá
a abrangência do texto que será removido. A seguir são vistas as opções que podem ser
utilizadas com o comando d.
100
11 dl: remove o caractere onde o cursor está posicionado. É possível, também, utilizar
números multiplicadores precedentes ao comando de modo que remova diversas linhas.
11 dd: remove a linha corrente. É possível, também, utilizar números multiplicadores prece-
dentes ao comando de modo que ele remova diversas linhas.
11 dw: remove uma palavra. O comando dw executado no meio de uma palavra, remove
apenas a parte final dessa palavra. É importante notar que o espaço em branco após a
palavra também é removido.
11 de: remove os caracteres de uma palavra, mantendo o(s) espaço(s) em branco após a palavra.
11 db: remove os caracteres de uma palavra da posição do cursor até o início da palavra.
11 d0: remove os caracteres de uma linha da posição do cursor até o início da linha.
11 d$: remove os caracteres de uma linha da posição do cursor até o final da linha.
Rolagem do arquivo
Durante a inserção de texto, quando chegamos no final da última linha da parte inferior da
tela, a primeira linha da parte superior deixa de ser mostrada, todas as linhas sobem na
tela e uma nova linha passa a ser exibida na posição da linha inferior. Essa movimentação é
chamada de scrolling ou rolagem de tela. Alguns comandos para rolamento de tela:
O comando z pode ser precedido pelo número da linha que será utilizada no lugar da linha
corrente. Por exemplo, o comando 200zEnter rola a linha 200 do texto para o topo da tela, e
não a linha corrente. Existem outros comandos de rolagem além dos comandos citados, que
podem ser consultados em guias de referência do vi na internet.
Comando de busca
O comando de busca é o caractere / (barra), que, quando teclado, mostra uma barra na linha
inferior da tela onde deve ser digitado o texto que se quer procurar. Esse padrão de busca
pode ser uma palavra ou qualquer sequência de caracteres. Os espaços em branco também
são considerados como parte do padrão. O vi inicia a procura do padrão na posição do cursor,
seguindo adiante no arquivo e, ao chegar ao final, volta ao início do arquivo e continua a
procura até a posição do cursor. Se o padrão for encontrado, o cursor é movido para a posição
101
de sua primeira ocorrência. Se não há nenhuma ocorrência do padrão, a mensagem Pattern
not found é mostrada na parte inferior esquerda da tela. Na verdade, essa mensagem pode
variar dependendo da versão do vi ou do Linux, mas o significado será o mesmo.
Para realizar a procura no sentido inverso, voltando sobre o texto, devemos utilizar o
comando ?. Nesse caso, a pesquisa é feita até o início do texto e reiniciada no final, até chegar
à posição do cursor. Os comandos a seguir podem ser utilizados para repetição da última
busca com o último padrão utilizado. Isso evita a digitação de todo o padrão novamente, o
que é útil para encontrar diversas ocorrências repetidas de um mesmo padrão.
:1,$s/umapalavra/novapalavra
Comandos combinados
Conhecemos, nos itens anteriores, algumas combinações de comandos utilizando números
multiplicadores. Na tabela 6.1 são mostrados exemplos de combinações possíveis de
comandos e suas ações correlatas.
c+ d+ y+ próxima linha
cn Dn yn próximo padrão
Vimos que o vi é um editor simples, porém muito poderoso, que nos oferece grande
flexibilidade para a edição de textos. Entendemos, agora, porque é um dos editores
Introodução ao Linux
102
7
Shell
objetivos
conceitos
Shell; Gerenciamento, criação e execução de processos; Utilitários de inicialização,
ambientes e suas variáveis.
Noções básicas
Shell é um ambiente de interpretação de comandos e é a ponte entre o usuário e o Sistema
Operacional, ou seja, é através dele que o usuário requisita ações ao sistema, utilizando-se
de comandos. Podemos observar a atuação do Shell quando abrimos um terminal ou console
e executamos comandos como ls, cat, touch, mkdir, cp, rm, mv etc.
Capítulo 7 - Shell
103
Shell O usuário Shell faz O usuário
Login
pede um digita o executar o interage com
(acesso)
comando comando comando o utilitário
Shell
pede novo
comando
A não ser que seja feito um redirecionamento, a entrada padrão do Shell é o teclado e a saída
é o monitor. Podemos fazer com que o Shell escreva qualquer coisa na saída padrão, ou saída
redirecionada, através do comando echo. Essa informação pode ser, por exemplo, um texto:
O uso das aspas é opcional. No entanto, convenciona-se usá-las para indicar ao Shell
que não é necessário interpretar aquele conteúdo; basta mostrá-lo na saída dese-
jada. Essa convenção será obrigatória em outras ocasiões.
Cada conta de usuário, quando criada, recebe um Shell padrão, através do qual aquele
usuário fará a interação em modo texto, com o Sistema Operacional. Para o Linux, são vários
Shell disponíveis. Os mais comuns são os da família Bourne Shell, entre eles o Bourne Shell
(sh) e o Bourne Again Shell (bash). O bash é o mais usado nas distribuições Linux. Há ainda
os da família C Shell, como o csh, que possui suporte à computação numérica, recurso defi-
citário na família Bourne , porém com a desvantagem de ter uma sintaxe parecida com a
linguagem C, não muito fácil de ser utilizada. A diferença entre os diversos Shells existentes
está basicamente nas funcionalidades incorporadas e na sintaxe dos comandos, que podem
ser simples ou mais complexas.
Para saber qual Shell está configurado para o seu usuário, basta verificar no arquivo
/etc/passwd. E para saber os Shells que estão disponíveis no seu Linux, basta verificar o
arquivo /etc/shells. Neste curso o foco será o Shell bash.
Introodução ao Linux
Gerenciamento de processos
Um processo é um programa em execução. A “vida” de um processo começa no início de um
programa e dura enquanto as instruções do programa continuarem a especificar novas ope-
rações. Quando o programa chega ao final, isto é, o Sistema Operacional termina a execução
de suas instruções, o processo relativo a esse programa “morre”.
104
O conceito de thread está associado às máquinas multiprocessadores e atividades con-
correntes. Usualmente é definido como um fluxo de controle no interior de um processo.
Quando dois processos compartilham as mesmas estruturas, eles atuam como se fossem
diferentes threads no interior de um único processo. No Linux, threads e processos são
tratados da mesma forma.
Existem diversas chamadas de sistema no Linux que alteram o ciclo normal de “vida” de
um processo. As Chamadas de Sistema são requisições feitas pelos processos ao Sistema
Operacional por recursos aos quais ele não consegue acessar. As chamadas são usualmente
para criar processos, gerenciar memória, ler e escrever arquivos e fazer entrada e saída.
Estão entre as mais comuns: fork, exec, exit, kill.
O controle das permissões dos processos funciona usando a mesma lógica. Os administra-
dores do sistema atribuem números para os usuários (User Identifier ou UID) e para grupos
(Group Identifier ou GID), quando são criadas as contas de usuário. O sistema usa o UID e o
GID de um usuário para recuperar informações de sua base de dados, relativas aos privilé-
gios permitidos para o usuário específico. O usuário de maior privilégio é o root, também
conhecido como superusuário, que tem o UID igual a 0 (zero) em uma escala que vai além
de 65 mil, dependendo da distribuição Linux. O usuário root é usualmente o administrador
do sistema, possuindo plenos poderes. Cada processo pertence a um usuário e também
pertence ao seu grupo. No arquivo /etc/passwd é possível visualizar o UID (primeiro número
que aparece) e o GID (segundo número) de cada usuário criado; se não for especificado, o
Capítulo 7 - Shell
105
Utilitários de inicialização
Por possuir a função de “pai”, o processo de número 1 (um) necessita ter a expertise de fazer
todo o controle e gerenciamento da criação de novos processos. A seguir apresentamos
uma sucinta visão dos dois principais Utilitários de Inicialização de processos do Linux: o
SysVinit e o SystemD.
SysVinit
O SysVinit ou somente SysV (lê-se “Sys cinco”), trabalha com níveis de inicialização, chamados
de runlevels. Os runlevels efetuam a gerência dos serviços desde a inicialização até o desliga-
mento completo do sistema. São administrados por dois objetos: o arquivo /etc/inittab e os
subdiretórios em /etc/rc*.d/.
O arquivo /etc/inittab possui como principal diretiva o parâmetro initdefault, uma linha
onde indica qual deve ser o runlevel padrão para inicialização do sistema:
A indicação do runlevel deve ser um número de 0 a 6, com funções que podem variar de
uma distribuição Linux para outra. Podendo ser:
11 0: Desligamento do sistema.
l
11 5: Multiusuário, completo com interface gráfica (padrão).
11 6: Reinicialização do sistema.
Por padrão, os
Conceitualmente os níveis multiusuários são os que inicializam todos os serviços necessá- runlevels 0, 1 e 6 são
comuns a todas as
rios para o uso do sistema. Os mais comumente aplicados são os de níveis 2, 3 e 5, lem- distribuições Linux.
brando que podem variar de acordo a distribuição Linux utilizada.
Para verificar o nível de inicialização atual, utilize o comando runlevel sem opções
ou argumentos:
# runlevel
N 5
# ls –d /etc/rc*.d
Introodução ao Linux
106
O conteúdo desses diretórios são arquivos scripts que representam a chamada a diferentes
serviços do Linux, que possuem as seguintes premissas:
11 Todos são links simbólicos (atalhos) que apontam para alvos (nome de serviços) locali-
zados no diretório /etc/init.d/.
11 Os scripts serão executados cada vez que o sistema invocar o determinado nível de runlevel,
através de seu número de identificação (de 0 a 6).
Veja um exemplo de conteúdo do diretório /etc/rc5.d/, contendo os serviços que serão ini-
ciados e desligados após invocarmos o runlevel de nível 5:
# ls /etc/rc5.d/
K01rsyslog S02acpid S02rsync S05bootlogs
K01ssh S02anacron S02smartmontools S01lcgmanager
K05cups S02atd S02spamassassin S05cups-browsed
S01motd S02cgproxy S01acpi-fakekey S05saned
S01tlp S02cron S03avahi-daemon S06smbd
SystemD
A principal meta do SystemD é enxugar a quantidade de processos que os clássicos runlevels
(SysVinit) produzem. Para alcançar esse objetivo, o SystemD procura iniciar os processos em
paralelo, o que reduz consideravelmente o montante de processos.
Em substituição aos runlevels, o SystemD se utiliza de units (unidades) e targets (alvos), que são
identificados através de nomes. A junção entre targets e units trazem um mecanismo flexível
e descomplicado para criação de diferentes configurações para o controle dos serviços do
sistema, além de serem arquivos de fácil compreensão, até mesmo para os novatos no assunto.
/usr/lib/systemd/system/
/lib/systemd/system/
/etc/systemd/system/
O SystemD possui um comando de controle que efetua todo o gerenciamento das units e
targets, chamado de systemctl. Ele traz tudo o que você deseja saber desde que você saiba
como pedir.
Capítulo 7 - Shell
O systemctl pode ser utilizado sem nenhuma opção ou argumento, trazendo uma lista de
todas as units ativas no sistema. Sua sintaxe padrão é:
107
Entrar em todos os méritos do SystemD é totalmente injusto quando comparando-o ao
SysVinit. O SystemD conta com diversas funcionalidades e recursos extras, tornando o
gerenciamento de inicialização só mais uma de suas fartas aplicabilidades.
As units podem possuir mais de 10 tipos de estados (enabled, disabled, static…), mas
nenhum indica de fato que um determinado serviço está rodando no sistema. A correta veri-
ficação deve ser efetuada através do comando ps ou systemctl com a opção status seguida
do nome do serviço.
No Linux, como de praxe, existem vários modos para se alcançar a conclusão de qualquer
demanda. E para verificar qual o gerenciador de processos em uso, vamos listar duas pos-
sibilidades. A primeira é consultar a existência dos pacotes de instalação de algum desses
gerenciadores, por exemplo, do SystemD.
# ps –p 1
PID TTY TIME CMD
1 ? 00:00:01 systemd
É importante saber que podemos encontrar distribuições Linux defasadas em que o processo
de número 1 (um) é um link (atalho) para o binário do systemd, que por motivo de compatibili-
dade é renomeado para init. Na dúvida, recorra a consulta dos pacotes de instalação.
Introodução ao Linux
Runlevels x Targets
Um processo de adaptação pode ser melhor absorvido quando comparamos as tarefas que
fazíamos com as novas a serem feitas. A seguir seguem duas tabelas ilustrando uma ana-
logia entre Runlevels e Targets, bem como a equivalência entre os comandos mais utilizados
no clássico SysVinit e no moderno SystemD:
108
SysVinit Runlevels SystemD Targets Descrição
Criação de processos
No Linux, somente o processo do Utilitário de Inicialização (SysVinit ou SystemD) é criado
a partir do zero. Todos os demais processos são criados a partir dele. A criação de um
processo é baseada em uma operação do tipo fork-exec, na qual um processo já existente
se duplica através de uma chamada de sistema de nome fork, e em seguida substitui seu
código por outro, através da chamada de sistema exec, permitindo que o código do filho seja
executado sem que o código dele seja prejudicado.
Isso acontece quando digitamos um comando no Shell, por exemplo. O bash, no nosso caso, se
duplica usando fork e então chama o exec para sobrepor sua memória com os conteúdos do
comando solicitado. Essa combinação permite que os processos gerados sejam concorrentes,
ou seja, executem de forma independente uns dos outros. A figura 7.2 ilustra outro exemplo
Capítulo 7 - Shell
típico, no qual um programa de menu oferece uma opção de três telas de entrada de dados.
Quando o usuário faz uma seleção, o programa de menu bifurca um processo-pai que executa
o programa escolhido, e o programa de entrada de dados roda até a sua conclusão. Enquanto
isso, o programa de menu pode ser usado para outra opção, o que gera uma nova bifurcação.
109
Processo 1 EXEC Processo 1
executando executando
programa menu programa menu
FO
RK
Processo 2 EXEC Processo 2 Figura 7.2
executando executando Execução
programa menu a opção 1 concorrente.
Da mesma forma, é possível executar processos de forma sequencial, sem que haja uma
bifurcação ou duplicação de código. Através da chamada de sistema exec, o kernel carrega
o novo programa na memória e inicia a execução do novo processo especificado pelo exec.
Esse novo programa começa a execução no mesmo ambiente do seu predecessor. Os arquivos
abertos pelo programa anterior permanecem abertos para o novo processo, que também
retém as identidades do usuário e do grupo de usuários. A figura 7.3 mostra um exemplo
simples de como a sequência de programas de impressão de relatório pode ser executada
usando-se exec.
A função exec faz com que o processo por ele chamado substitua o processo em
execução. Assim, qualquer sequência que houver nesse processo após o comando
exec não será executada.
Visualização de processos
Quando um processo está sendo executado, podemos usar o seu número de identificação
para verificar o estado da sua execução por meio do comando ps. O comando ps sozinho,
sem argumentos, mostra apenas os processos associados ao usuário corrente no mesmo
terminal de onde foi invocado. Já o comando ps aux mostra todos os processos em execução
no sistema no momento, inclusive os daemons. Outra opção é o comando ps l, que retorna
Introodução ao Linux
110
11 PPID: identificador único associado ao processo-pai do processo em questão.
Código Descrição
11 TIME: tempo decorrido em minutos e segundos, desde a emissão do comando que deu
origem ao processo até o momento de emissão do comando.
11 TTY: terminal TTY ao qual foi submetido o comando que deu origem ao processo.
11 WCHAN: evento sob o qual o processo está aguardando, quando está nos estados de
espera (W) ou dormindo (S).
O comando ps também pode ser executado em canalizações com o comando grep, o que
facilita encontrar as informações sobre processos executados em background. Por exemplo:
Permite mostrar apenas os dados do processo que está executando o navegador web
Mozilla.
Variáveis de ambiente
Quando fazemos login no sistema, várias ações automáticas são desencadeadas, tais como
leituras de arquivos, execução de programas etc. Essas ações acontecem para configurar
um ambiente no qual o usuário realizará suas tarefas. A configuração padrão (default) do
ambiente é definida previamente em alguns arquivos, por meio, entre outros, de variáveis
de ambiente. Elas são usadas pelo Shell para armazenar informações de usos específicos.
Na tabela 7.4 são mostradas algumas dessas variáveis.
Capítulo 7 - Shell
111
Variável Descrição
SHELL Contém o tipo de Shell padrão para aquele usuário específico. Pode ser con-
figurado no arquivo /etc/passwd.
Outros exemplos:
# X=1 #funciona
# X=teste #funciona
# X=varias palavras #erro
# X="varias palavras" #funciona
# X="$Y unidades" #o $Y será substituído pelo valor da variável Y
# X='$Y unidades' #o $Y não será substituído
A visualização do conteúdo das variáveis de ambiente é feita através do comando echo. Para
sabermos qual Shell está sendo usado para aquele usuário específico, basta executar o
comando:
# echo $SHELL
Devemos instruir o comando echo para mostrar o “conteúdo” da variável de ambiente SHELL
e não a própria palavra “SHELL”. Isso é indicado com o uso do caractere $ (cifrão ou dólar)
antes do nome da variável de ambiente.
O comando set nos permite visualizar todas as variáveis locais disponíveis no Shell corrente.
Para visualizarmos as variáveis de ambiente globais do Shell corrente, devemos usar o
comando env. O comando set também pode ser usado para definir o valor de uma vari-
ável de ambiente. É possível usar o comando unset para eliminar uma variável, em vez de
defini-la com o valor null (nulo/zero). É uma tarefa relativamente simples customizar o seu
ambiente no Linux. Você pode visualizar como está configurado o seu ambiente digitando o
comando set. Uma das principais variáveis de ambiente é a UID, utilizada pelo sistema para
identificar os usuários e suas permissões.
usar o comando readonly ou o comando declare com a opção -r. O administrador pode, se
necessário, tornar variáveis de ambiente read-only no arquivo /etc/profile. O objetivo é fornecer
uma visão do modo como o ambiente do usuário é definido por intermédio de variáveis.
112
Uso de aspas simples, duplas e barra invertida
As aspas simples (‘ ‘) e duplas (“ “) e a barra invertida (\) são usadas quando é necessário que
os caracteres por eles marcados fiquem protegidos, ou seja, não sejam interpretados pelo
Shell. Assim, temos:
11 A barra invertida (\) protege o caractere que vem logo após ela. Por exemplo, para criar
um nome de um arquivo contendo o caractere “>” que sabemos ser de redirecionamento,
temos de protegê-lo:
# touch meuarquivo\>
11 As aspas duplas também são usadas para isso, mas não protegem $ e \.
Capítulo 7 - Shell
113
Introodução ao Linux
114
8
Configuração de Rede no Linux
objetivos
conceitos
Redes de Computadores, Rede cabeada, Rede sem-fio (Wi-Fi), Objetos da rede.
Introdução
No âmbito de tecnologia ao se tratar do assunto Redes é muito comum ouvirmos falsas
ideias, como: uma rede somente é composta por PCs, deve conter centenas de ativos caso
contrário não é uma rede, e Linux jamais conversa com Windows.
Rede cabeada
Configurar uma rede de computadores pode ser uma tarefa muito simples, prática e rápida.
É fato que dependemos diretamente da quantidade de computadores presentes, da estru-
tura física disponível e do tipo de topologia da rede, que influenciarão diretamente em todo
o projeto. Mas trazendo o estudo para um ambiente menor – como nosso lar –, a topologia
de rede mais simples e adequada é a do tipo estrela, que, em linhas gerais, consiste de todos
os computadores conectados a um switch através de cabos de rede.
115
Simples:
11 Um Switch.
11 Cabos de rede.
Linux-PC1 Linux-PC2
Figura 8.1
Configurações
físicas de uma
Switch Rede simples.
Uma rede não é composta somente por computadores, mas também por vários outros
ativos. Ativo é o conceito atrelado a todo equipamento que pode ser corretamente inse-
rido em uma rede, pois possuem todos os pré-requisitos necessários. A exemplo temos os
l
Nesse exemplo do
smartphones, televisores, smartwatches (relógios inteligentes) e até mesmo os produtos da livro, a rede citada é
tecnologia IoT (Internet of Things), que abrangem fornos micro-ondas, geladeiras etc. hipoteticamente
simples e pequena.
A frase “configurar algo no Linux” talvez seja um pouco assustadora, pois logo pensamos: Uma rede com acesso
à internet, por
“Que comandos usar?!” Não precisamos nos assustar, pois configurar qualquer objeto em
exemplo, pode
um Sistema Linux pode ser mais simples do que imaginamos. E ao efetuar todas as ligações necessitar de outros
físicas, plugando os computadores em suas respectivas portas do Switch, o ambiente está atributos, como um
endereço de Gateway
preparado para começar uma comunicação. A partir daqui devemos adentrar a parte lógica
e DNS, responsáveis
da configuração de uma rede, em que precisamos suprir os seguintes requisitos básicos: por transportar os
dados para uma rede
11 Nome da máquina (hostname), individual para cada computador. externa (como à
internet) e resolver
11 Endereço IP, individual para cada computador. endereços (IP ou nome)
11 Endereço da Máscara de rede (Netmask), igual para todos os computadores. não conhecidos na
rede local.
É muito comum adentrarmos a uma rede com o simples plugar do cabo de rede, pois
muito provavelmente essa rede se utiliza do protocolo DHCP (Dynamic Host Configuration
Protocol). Esse protocolo automaticamente pode oferecer todas as configurações lógicas
exigidas por uma respectiva rede, como um endereço IP, máscara, gateway, DNS etc.
116
Figura 8.2
Ícone de rede na
área de trabalho
Gnome.
Por existirem diferentes tipos de interfaces gráficas para Linux, é possível que sua distri-
buição referencie o ícone de rede através de outro desenho ou símbolo. A distribuição Linux
a seguir, por exemplo, menciona as configurações de rede através do ícone de duas setas
em sentido contrário:
Figura 8.3
Ícone de rede
na área de
trabalho Unity.
É importante frisar que o Linux é totalmente versátil, incluindo seus ícones e informações da
área de trabalho. Com isso, é importante dominar e entender toda a estrutura visual da dis-
tribuição Linux que você escolheu utilizar, pois nem sempre os ícones estarão nos mesmos
locais, além de poderem ser totalmente diferentes.
Todos os passos para configuração de uma rede podem ser adquiridos através desse ícone
de rede na Área de trabalho do Linux. A maneira mais eficaz é clicar com o botão direito do
mouse sobre ele e verificar as configurações ali atreladas, podendo deixá-la no modo auto-
mático (DHCP) ou manual. No modo manual precisaremos do conhecimento das informa-
ções da rede, como no exemplo a seguir:
Figura 8.4
Parâmetros para
configurações de
rede manual.
117
Apesar de não ser padrão, é muito comum que o IP do Gateway seja o mesmo do DNS.
O Gateway padrão é o responsável por encaminhar os dados para fora de sua rede domés-
tica (à internet), e o DNS traduz os endereços (IP ou nome) não conhecidos localmente.
Sem a configuração desses dados é impossível adentrar a rede mundial de computadores.
Rede Wi-Fi
Conforto e praticidade são propriedades de imenso valor para nós seres humanos. É certo
que ao comparar um objeto prático a um robusto, talvez percamos um pouco da perfeição.
Mas se tratando desses conceitos atrelados ao bem-estar e tranquilidade, é inegável que
tal perda é a menor das preocupações. Com a ascensão da tecnologia sem fio, basicamente
todos os atos tornaram-se muito mais práticos. E apesar de a disseminação de informações
como “ondas eletromagnéticas causam câncer”, é impossível combater essa proliferação de
elétrons. E outra: quem desistirá dessa tecnologia tão preciosa?
O Linux se comunica muito bem com os mais diferenciados adaptadores de rede wireless
(sem fio) presentes no mercado, não fazendo distinção entre aparelhos ou adaptadores
Wi-Fi adquiridos. Como na configuração de rede cabeada, ajustar as informações para uma
rede sem fio são facilmente acessíveis através do mesmo ícone de rede presente no espaço
da área de trabalho (Desktop) do usuário, normalmente encontrado ao lado do relógio do
sistema. É importante frisar que, dependendo do ambiente gráfico adotado, assim que
o Linux identificar que o adaptador de rede sem fio está ativado, ele automaticamente
modifica o desenho do ícone de rede (anteriormente cabeado). Em sistemas que utilizam o
ambiente Gnome, por exemplo, o ícone de rede sem fio é representado através do desenho
de ondas, como exposto na figura 8.5:
Figura 8.5
Ícone de rede
sem fio na área de
trabalho Unity do
Ubuntu.
Quando presente nesse estado, com um simples clique do mouse é possível visualizar todas
as redes sem fio encontradas por seu adaptador:
Introodução ao Linux
Figura 8.6
Ícone de rede
expondo redes
Wi-Fi disponíveis
para conexão.
118
Verifique que o adaptador de rede sem fio exibe todas as redes Wi-Fi encontradas nas
proximidades, não importando se são redes privadas com chave de segurança (senhas) ou
abertas (sem senhas), o Linux pode lhe trazer essa informação visualmente, mostrando o
desenho de um cadeado próximo do nome da rede. Assim, redes referenciadas com um
cadeado são acessadas apenas com senha. Na figura é possível verificar somente uma rede
sem fio que não possui senha.
Tenha muito cuidado com redes sem fio que não necessitam de chaves de segurança
(senhas). Existem vários tipos de ataques que se utilizam dessa simples técnica para
capturar seus dados.
Após identificar o nome da rede ao qual deseja conectar-se, é preciso apenas clicar sobre
ela. Lembrando que se a rede contiver uma chave de segurança (senha), a conexão será
possível somente após informar a senha correta.
Figura 8.7
Rede sem-fio
com chave de
segurança.
Assim como na rede cabeada, é muito comum adentrarmos a uma rede sem-fio apenas cli-
cando sobre o nome da rede e a inserção da senha (caso possua). Isso é possível, pois muito
provavelmente essa rede utiliza o protocolo DHCP (Dynamic Host Configuration Protocol),
que automaticamente pode oferecer todas as configurações lógicas exigidas por uma
respectiva rede, como: um endereço IP, máscara de rede, gateway, DNS etc., independente-
mente da rede ser cabeada ou sem fio.
É possível existirem redes em que o SSID (indicação para o nome de uma rede sem fio) seja
oculto, impossibilitando de os adaptadores de rede a listarem automaticamente. Para esses
casos é preciso o conhecimento prévio do nome da rede. Esses tipos de redes devem ser con-
figurados manualmente no mesmo ícone de rede presente na área de trabalho do usuário.
Capítulo 8 - Configuração de Rede no Linux
Figura 8.8
Conectando a uma
rede Wi-Fi oculta.
119
Tanto para redes cabeadas quanto para redes sem fio, as propriedades da rede podem ser
exatamente iguais. Tal fato acontece devido aos equipamentos possuírem a mesma função
de rotear informações, sendo uma via cabos de rede e outra via ondas eletromagnéticas
(sem-fio). Esse tipo de hardware pode ser referenciado como somente Roteador Sem-fio ou
Roteador 2 em 1.
Requisitos físicos:
11 Um Switch.
11 Cabos de rede.
Requisitos lógicos:
Se por conta própria acessarmos um buscador online e digitarmos “comandos Linux para
configurar uma rede”, fatalmente receberemos uma gama enorme de comandos e uma
provável atitude de desistência. De fato um dia o Linux não foi tão favorável à facilidade e
simplicidade, mas saiba que a execução de apenas um comando pode solucionar todos os
seus problemas de configuração de rede. Estamos nos referindo ao dhclient.
Talvez esse comando seja um tanto familiar, pois comentamos sobre o protocolo DHCP
(Dynamic Host Configuration Protocol), que automaticamente pode oferecer todas as confi-
l
A opção -v é ampla-
gurações lógicas exigidas por uma respectiva rede, como um endereço IP, máscara, gateway, mente utilizada por
DNS etc. Por esse protocolo ser amplamente utilizado, o comando dhclient simplesmente inúmeros comandos do
Linux. É oriunda da
percorre toda a rede em busca por um Servidor ou Roteador com o protocolo DHCP ativo,
palavra inglesa verbose,
fornecendo automaticamente as configurações lógicas para adentrarmos a qualquer rede. que basicamente
significa exibir a saída
de comandos de modo
# dhclient -v
Introodução ao Linux
detalhado, emitindo
mais informações.
Caso sua estação tenha mais de uma interface de rede, é provável que o comando dhclient,
sem o fornecimento de argumentos, não nos atenda. Com isso, uma boa dica é: logo à frente
do comando, informe o nome da interface de rede ao qual deseja solicitar a configuração
automática, como no exemplo a seguir:
120
# dhclient eth0
Lembre-se de que diferentes distribuições Linux podem variar suas informações, bem como
o nome de alguns objetos. O nome da interface de rede acima é até fácil de gravar, pois eth
seria equivalente à ethernet, e o número 0 indica a primeira interface de rede do sistema.
Mas como esse conceito nem sempre se aplica, antes de emitir o comando dhclient, sempre
verifique o nome correto da interface de rede através do comando ifconfig:
# ifconfig
Figura 8.9
Comando ifconfig O ifconfig pode trazer uma lista com as interfaces atualmente ativas no sistema. Cada
listando as
interfaces de rede interface pode conter inúmeras informações, como o nome da interface, o endereço IP, a
ativas. máscara de rede e até mesmo a quantidade de dados trafegados, como mostra a figura 8.9:
Quantidade
de dados
trafegados
Todo computador deve conter um endereço local para especificar sua própria interface de
rede, também chamada de Interface de Loopback. Essa interface é regida por documentos
oficiais da RFC (Request for Comments), em que indicam o endereço IP de número 127.0.0.1
reservado para a identificação local de seu próprio adaptador de rede. Normalmente a
Interface de Loopback é nomeada como somente lo, e por padrão suas configurações não
devem ser alteradas.
Como estudado anteriormente, foi possível verificar que os comandos do Linux contêm em
Capítulo 8 - Configuração de Rede no Linux
seu nome um pedaço ou a própria palavra oriunda da língua inglesa, como o comando clear,
que rapidamente incita o que de fato o comando faz, que é limpar a tela do Terminal Linux.
Seguindo esse mesmo preceito, os argumentos e opções passados aos comandos do Linux
também atendem a essa ideia. O argumento -a, por exemplo, podemos utilizar em diversos
comandos. Essa opção é oriunda da palavra all, em português significa “todos”.
O ifconfig é um exemplo de comando que aceita o argumento -a, e por ele trabalhar com
interfaces de rede, a execução do comando ifconfig-a simplesmente listará todas as inter-
faces de rede do sistema, independentemente de estarem ativas ou não.
121
Claro que nem sempre teremos a comodidade do protocolo DHCP e muito provavelmente l
teremos de efetuar as configurações manuais, sendo que a forma mais básica de O Linux pode conter
adentrarmos a uma rede local sem acesso à internet é utilizando um endereço IP comandos em que o
argumento -a não
juntamente com sua máscara de rede. O Linux pode conter diferentes comandos para necessariamente
configurar cada etapa de uma rede, assim como um único comando para configurar tudo, ou significará all. Na
dúvida, sempre
quase tudo.
consulte os manuais
através dos comandos
Nos parágrafos anteriores nos utilizamos do comando ifconfig para efetuar uma consulta
man ou --help.
às nossas interfaces de rede ativas. Mas saiba que com esse simples comando podemos
configurar um endereço IP e máscara de rede de uma só vez:
Assim, definimos que a interface de nome eth0 deve possuir os endereços IP e máscara de
rede informados anteriormente. Porém, no Linux não basta que apenas informemos os
dados a interface, também é preciso ativá-la. Para ativar ou desativar uma interface de rede,
podemos utilizar os comandos ifup e ifdown, respectivamente; seguido do nome da interface:
# ifup eth0
# ifdown eth0
É claro que sempre temos aquela máxima de explicar a forma árdua para depois exempli-
ficarmos através de uma maneira mais simples. Assim, ambos os comandos acima (ifup e
ifdown) podem ser corretamente substituídos pelos parâmetros up e down, respectiva-
mente; incluídos no final da própria linha de comando iniciada pelo comando ifconfig:
Rede Wi-Fi
As configurações de rede obedecem a certos princípios que normalmente são padrões para
os diversos ativos presentes no ambiente. Com isso, antes de iniciar o assunto deste tópico,
devemos esclarecer que informalmente já aprendemos como configurar uma interface de
rede do tipo Wi-Fi, pois são os mesmos procedimentos aplicados às configurações de redes
cabeadas. Veja:
Introodução ao Linux
ifconfig–a
Comando para mostrar todas as interfaces de rede.
[Máscara] [up|down]
Linha de comando para configurar uma interface de rede com os parâmetros informados.
122
Executando o comando ifconfig-a, identificando o nome da interface de rede Wi-Fi, e infor-
mando as configurações de rede desejadas – então, sua estação está corretamente configu-
rada e disponível à rede sem fio selecionada.
Análogo ao modo de configuração de rede cabeada, em uma interface de rede Wi-Fi é pos-
sível conter inúmeras informações, como o nome da interface, o endereço IP, a máscara de
rede e até mesmo a quantidade de dados trafegados.
Ao utilizar redes sem fio, não se esqueça que o processo primário é a seleção do nome da
rede através do ícone de conexões de redes encontrado no espaço da área de trabalho,
normalmente vizinho ao ícone do relógio do sistema:
Figura 8.10
Selecionando
uma rede sem fio
graficamente.
Não sendo uma situação comum, pode ser necessário conectar e configurar uma rede Wi-Fi
sem a presença de uma interface gráfica. Para esses casos, a substituição do processo
manual de seleção da rede e posterior inclusão da chave de segurança podem ser execu-
tados através do comando iwconfig. Para mais informações, consulte sua página de manual.
cabais, recorrendo a meios que no final de tudo atenderão nossas necessidades, passos
avante a outros Sistemas Operacionais, que nos possibilitam um único caminho.
123
/etc/resolv.conf (configurações de DNS).
/etc/network/interfaces (configurações de IP, máscara de rede, etc.).
l
Informações relacio-
Apesar de esses arquivos aceitarem caracteres comuns de texto, eles trabalham com nadas ao DNS também
podem ser configu-
diretivas especiais, que após corretamente digitadas são interpretadas pelo sistema que radas diretamente no
aplica as configurações ali descritas. Assim, não devemos aleatoriamente digitar qualquer arquivo /etc/network/
interfaces, através
informação sem conhecimento prévio. Caso queira se utilizar da comodidade da interface
da diretiva
gráfica e tentar abri-los utilizando um editor de texto padrão do Linux (como o Gedit), saiba dns-nameservers.
que a ideia não foi mal pensada, porém o Linux possui mecanismos avançados de segurança O recomendado é
configurá-lo somente
que evitam acidentais modificações de qualquer arquivo que possa prejudicar o sistema.
no arquivo
/etc/resolv.conf.
Com isso, somente podemos modificar arquivos do sistema após elevarmos o nível de
permissão do usuário ou efetuar a troca para um usuário administrador do sistema, como
o usuário root. Utilizar um editor de texto em modo gráfico talvez pareça descomplicado,
mas lembre-se de que também possuímos aqueles para uso nos terminais, como o editor
vim. Fique à vontade para utilizar o meio que mais seja conveniente, mas a dica é: aprenda a
utilizar de forma avançada a edição de arquivos através de um terminal, pois há problemas
que serão sanados somente via comandos em modo texto.
É possível se utilizar das funcionalidades oferecidas pelos comandos gksu ou kdesu. Tais
comandos possibilitam a inserção da senha de usuários administradores ou do usuário root
se utilizando da própria interface gráfica, não necessitando o uso de um terminal Linux.
Como já informado, os arquivos de rede trabalham com diretivas que, por sua vez, aceitam
parâmetros. Os parâmetros podem variar de acordo as diretivas, bem como os arquivos de
configuração escolhidos. Primeiramente vamos modificar as informações relacionadas à
resolução de nomes (DNS), configurável através do arquivo /etc/resolv.conf. Em nossa rede
simples, utilizaremos uma única diretiva de nome nameserver, que especifica o endereço IP
do servidor tradutor de nomes.
# vim /etc/resolv.conf
nameserver 192.168.0.1
É possível informar inúmeros IPs de servidores DNS, basta adicionar uma nova diretiva
nameserver e especificar o endereço IP logo à frente. Nesse arquivo também é possível
configurar um nome de domínio, caso a estação possua.
Apenas a configuração de um servidor DNS não nos possibilita adentrar a uma rede. Pre-
cisamos configurar os demais objetos, que devem ser informados no principal arquivo de
configuração de rede das distribuições Debian e derivados, o /etc/network/interfaces. Para
isso vamos utilizar as seguintes diretivas:
Caso exista um servidor DHCP em sua rede, é possível trocar a palavra static pelo parâ-
metro dhcp, que ordenará as interfaces a ficarem em modo automático, espontaneamente
fazendo-as consultarem a rede em busca de servidores DHCP.
124
Após especificarmos que as configurações deverão ser manuais, precisamos informar quais
objetos deverão ser impostos. Para nossa básica rede utilizaremos as diretivas address e
netmask, que especificam o endereço IP e a máscara de rede, respectivamente:
# vim /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.0.201
netmask 255.255.255.0
No tópico anterior, tanto nas configurações efetuadas para redes cabeadas quanto para
redes sem fio, utilizamos um comando final para de fato ativar as configurações definidas.
Após editar e salvar o arquivo /etc/network/interfaces, também necessitamos subir a inter-
face de rede com as configurações informadas:
# ifup eth0
Com os objetos da rede configurados e a interface ativada, nossa rede está corretamente
configurada. E para garantia de sucesso, é sempre bom emitir o comando ifconfig para con-
sultar se as informações estão de acordo.
$ man -5 resolv.conf
configuração de rede é comum preservarmos suas características próprias, que não neces-
sariamente se alterarão de uma distribuição Linux a outra.
Para uma boa didática e aprendizagem, nesse tópico vamos configurar os mesmos objetos
e informações anteriormente atrelados a uma distribuição Debian. A explicação de que os
diretórios do Linux se utilizam do padrão FHS (apresentado na sessão 4) também se estende
às distribuições RedHat. Com isso, quando falamos em arquivos de configuração, não
devemos pensar duas vezes: devemos recorrer ao diretório /etc.
O /etc pode conter arquivos-texto singulares espalhados por todo o diretório, bem como
por seus subdiretórios, nomeados de acordo ao nome do serviço ou subsistema desejado.
É certo que navegando entre as diferentes distribuições Linux os subdiretórios de /etc
125
também poderão variar. Nas distribuições baseadas em RedHat, por exemplo, nem perca
tempo tentando procurar o arquivo de configuração de redes /etc/network/interfaces, pois
ele é exclusivo para Distribuições Debian e derivadas. Mas não devemos nos preocupar, pois
várias informações do que já aprendemos nos tópicos anteriores serão preservadas. Veja:
Ifconfig
Continua sendo o comando para listar as interfaces de rede.
ifup
Continua sendo o comando para ativar as configurações definidas.
/etc/resolv.conf
Continua sendo o arquivo de configuração do servidor de nomes (DNS).
Assim ficou fácil, não? Mas ainda temos algumas pequenas modificações peculiares às
distribuições Linux RedHat e derivadas.
Separando as letras iniciais dos nomes dos arquivos que começam com a sigla ifcfg (analogia a
interface configuration ou ifconfig), é possível perceber que o nome das interfaces são exatamente
os mesmos encontrados nos arquivos do subdiretório network-scripts, descomplicando nosso
estudo. Assim, caso queiramos configurar os dados como o endereço IP e a máscara de rede para
a interface de nome enp0s3, simplesmente acessaremos o arquivo de nome ifcfg-enp0s3:
# vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
O arquivo de configuração de rede para distribuições RedHat tem uma certa vantagem
quando comparando-o ao /etc/network/interfaces do Debian, pois o sistema pode identi-
ficar a interface de rede e automaticamente buscar e registrar informações diversas da rede.
Podem existir diversas diretivas presentes nesse arquivo, contendo nomes bem sugestivos.
Veja alguns exemplos:
11 BOOTPROTO=[dhcp|static]
Introodução ao Linux
Informa o tipo de configuração a ser utilizado pela interface (automática via dhcp ou manual).
11 DEVICE=[interface]
Definição de um nome único ao Dispositivo de rede.
11 NAME=[interface]
Definição de um nome único para a Interface de rede (o padrão é conter o mesmo nome
da diretiva DEVICE).
126
11 ONBOOT=[yes|no]
Informa se a interface deverá ser ativada no boot do sistema recebendo as configurações
definidas.
Por nossa rede ser relativamente simples, necessitaremos somente adicionar um Endereço
IP e uma Máscara de rede, fornecidas através das seguintes diretivas:
11 IPADDR=[endereço IP]
11 NETMASK=[máscara de rede]
Com as configurações definidas, o último passo é ativar a interface. Fique à vontade para
utilizar qualquer um dos comandos já aprendidos:
# ifconfig [interface] up
# ifup [interface]
Caso nossa rede possua um servidor DNS, é possível utilizar o mesmo arquivo configurado
na distribuição Debian, o /etc/resolv.conf. Por ser um arquivo universal para os Sistemas
Linux, os parâmetros mais comumente utilizados são exatamente os mesmos. Em caso de
dúvidas, não hesite em consultar as páginas de manuais:
# man 5 resolv.conf
Reiniciando a rede
Em uma rede bem configurada, com aparelhos de qualidade e tecnologias de última geração
seria, de certa forma, incabível imaginar erros. O fato é que comumente acontecem falhas
de conexão e transmissão em uma rede de computadores, e motivos podem ser listados
em abundância. Muitas das vezes uma simples reinicialização da conexão pode resolver
diversos problemas.
Usufruir da interface gráfica do Linux é algo que normalmente não possuímos em servi-
dores corporativos. Tratando-se de nosso computador pessoal, vamos relembrar o ícone
contendo as informações das conexões de rede, aquele usualmente situado ao lado do
relógio do sistema:
127
Figura 8.11
Ícone de conexões
de redes cabeadas.
1 2
Figura 8.12
Processo de
desativar e
reativar uma rede
graficamente.
Outras distribuições, mais peculiares, podem conter um ou dois passos diferentes, como no
exemplo seguinte:
1 2
Figura 8.13
Processo de
desativar e reativar
uma rede sem fio
graficamente.
É importante frisar que apesar de as distribuições Debian e RedHat serem Linux, ambas
possuem peculiaridades diversas. E no assunto configuração de rede não é diferente.
128
dois serviços de rede, cujos nomes são: networking e NetworkManager (o N e o M devem
ser digitados em maiúsculas). Para efetuar o controle do estado ligado para desligado,
desligado para ligado ou mesmo a reinicialização – precisamos utilizar alguns comandos
específicos. O mais comumente utilizado para ambas as distribuições é o comando service,
que possui a seguinte sintaxe:
O parâmetro restart é prático, pois facilita o trabalho de reinicialização dos serviços, evitando
que precisemos digitar uma linha de comando com o parâmetro stop e outra com o parâ-
metro start. Assim, para reiniciar os dois serviços de rede podemos utilizar os comandos:
A boa notícia é que atualmente podemos encontrar inúmeras distribuições Linux utilizando
o mesmo gerenciador de processos, chamado de SystemD. Com a adoção do SystemD o
gerenciamento de processos ficou mais singular. Ele pode ser encontrado em distribuições
Debian e derivadas quanto em distribuições RedHat e derivadas. Para modificarmos o
estado dos serviços de rede através do SystemD, podemos utilizar a seguinte sintaxe:
Por também possuir o parâmetro restart, o processo de reinicialização pode ser efetuado da
seguinte maneira:
Verificando a rede
É fato que não conseguiríamos avançar tanto em nossas demandas virtuais caso não tivés-
semos a superfuncionalidade computacional chamada rede. Até aqui conhecemos o uso de
vários comandos relacionados às redes, bem como o uso da interface gráfica para facilitar o
alcance aos mesmos objetivos.
A revisão dos estudos é e sempre será bem-vinda. Assim, na tabela 8.1 explanamos uma
pequena revisão dos comandos vistos até aqui:
Comando Explicação
ifconfig [interface] [IP] Ativa uma interface de rede com IP e Máscara de Rede
netmask [Máscara] up definidos
ifconfig [interface] [IP] Derruba uma interface de rede com IP e Máscara de Rede
netmask [Máscara] down definidos
Tabela 8.1
dhclient -a Automaticamente configura uma ou mais interfaces de
Revisão dos rede, utilizando o protocolo DHCP
comandos básicos
de rede. dhclient [interface] Automaticamente configura somente a interface de rede
definida, utilizando o protocolo DHCP
129
Comando Explicação
Poderíamos construir um novo livro somente sobre o assunto Verificação de Redes no Linux,
mas para um bom entendimento e resolução de simplórias demandas, também precisamos
obter o conhecimento de como verificar as configurações que definimos, bem como se estão
ou não corretamente estabelecidas. Para isso, a seguir expomos alguns comandos básicos
que podem nos auxiliar nas demandas do dia a dia.
ping
O ping é a ferramenta trivial de um Administrador de Redes. É um dos comandos mais
simples e amplamente utilizado. Basicamente o ping verifica se os objetos da rede estão ou
não ativos, e logo após retorna ao solicitante a informação com a resposta. Esse comando
atua com a simples invocação de seu nome, e como parâmetro requer o hostname ou IP da
estação a ser alcançada:
# ping 192.168.0.104
Para o Linux as combinações de teclas como CTRL+C e CTRL+D são subentendidas como
Sinais do Sistema, enviados a programas e/ou processos em execução. O primeiro equivale
ao sinal de interromper/terminar; o segundo refere-se ao sinal EOF (End Of File), que basica-
mente indica que você acabou o que estava fazendo e deseja finalizar com segurança. Saiba
que nem todos os programas/processos podem responder a ambos os sinais. Na dúvida,
teste os dois.
Para casos específicos em que queiramos indicar a quantidade de pings a serem enviados,
podemos utilizar a mesma linha de comando informando o IP adicionando a opção -c
Introodução ao Linux
(count), que especifica o número de pings a ser enviado. Por exemplo, para enviar somente
dois pacotes de ping para o IP 192.168.0.104, podemos utilizar a seguinte linha de comando:
130
# ping 192.168.0.10 -c 2
PING 192.168.0.10 (192.168.0.10) 56(84) bytes of data.
64 bytes from 192.168.0.10: icmp_seq=1 ttl=128 time=3.88 ms
64 bytes from 192.168.0.10: icmp_seq=2 ttl=128 time=2.85 ms
--- 192.168.0.10 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 2.857/3.372/3.888/0.518 ms
nslookup
Tratando do assunto Servidores de Domínios (DNS), esse é um bom exemplo de comando
simples e de fácil utilização. O nslookup pode resolver o nome de um host para um número
IP, bem como o processo inverso (número IP para nome). Também pode listar informações a
respeito dos Servidores de Nomes presentes em sua rede.
Por não ser obrigatório o uso de opções, nslookup pode ser utilizado da forma mais simples,
recebendo um número IP ou um nome de host, que pode ser um servidor ou qualquer com-
putador da rede.
# nslookup 8.8.8.8
Server: 10.61.15.253
Address: 10.61.15.253#53
Non-authoritative answer:
8.8.8.8.in-addr.arpa name = google-public-dns-a.google.com.
Authoritative answers can be found from:
route
A utilização de rotas pode ser necessária até mesmo para navegarmos em uma rede bem
simples. As rotas basicamente nos direcionam para os computadores ou servidores de
destino. Sem elas não saberíamos por qual caminho enviar nossos dados.
O comando route informa e/ou define as rotas que a rede deve trilhar. Tal demanda pode
ser feita manualmente ou gerada de acordo ao cenário predefinido por seu servidor DHCP.
É através desse comando que também verificamos nossa Rota Padrão, que basicamente é a
rota a ser seguida caso nenhuma outra nos atenda. A sintaxe para consulta às rotas da rede
Capítulo 8 - Configuração de Rede no Linux
é muito simples:
route [opção]...
Uma boa opção a ser utilizada é a -n (numeric), que faz com que o comando route não
resolva o nome dos hosts, o que torna a consulta muito mais rápida:
# route –n
Tabela de Roteamento IP do Kernel
Destino Roteador MáscaraGen. Opções Métrica Ref Uso Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 100 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
131
netstat
Ao trabalharmos com Redes de Computadores, a todo momento estamos abrindo e
fechando conexões, também conhecidas como sockets. Esse processo é totalmente transpa-
rente, até que se utilize um comando específico para consultar tais informações. O netstat é
um ótimo exemplo de ferramenta que pode ser utilizado para listar informações do subsis-
tema de rede do Linux, como as conexões abertas e/ou estabelecidas.
Esse comando contém uma gama enorme de opções para uso, fazendo os administradores
de rede “construírem” e consequentemente memorizarem suas próprias sequências de
opções. Sua sintaxe é:
netstat [opção]...
--tcp
Ou somente -t, lista as conexões do tipo TCP.
--udp
Ou somente -u, lista as conexões do tipo UDP.
--numeric
Ou somente -n, lista as conexões sem resolver nomes de hosts (mais rápida).
--listening
Ou somente -l, lista as conexões no estado Listening (abertas para conexões externas).
--all
Ou somente -a, lista todas as conexões, independentemente do tipo TCP ou UDP.
--program
Ou somente -p, lista as conexões informando o nome do programa que está utilizando-a.
Apesar de essas opções suportarem duas formas de uso, a mais comumente usada é o
uso de letras iniciadas com um traço, que inclusive podem ser combinadas fazendo uma
espécie de filtro, trazendo a informação somente das opções solicitadas. Por exemplo, para
exibir somente conexões do tipo TCP, no estado Listening, e sem resolver nomes de hosts:
podemos combinar as letras t, l e n.
# netstat –tln
Conexões Internet Ativas (sem os servidores)
Proto Recv-Q Send-Q Endereço Local Endereço Remoto Estado
tcp 0 0 0.0.0.0:22 0.0.0.0:* OUÇA
tcp 0 0 127.0.0.1:25 0.0.0.0:* OUÇA
tcp6 0 0 :::22 :::* OUÇA
tcp6 0 0 ::1:25 :::* OUÇA
traceroute
Introodução ao Linux
Como o próprio nome do comando indica, o traceroute traça rotas (caminhos) por onde
os pacotes trafegam em tempo real, até alcançar a máquina de destino. Esse comando é
muito indicado para verificar problemas no envio de pacotes, pois caso ocorram quedas
ou desvios de pacotes, o traceroute pode nos informar o local específico da rede onde o
problema ocorreu. Sua sintaxe é:
132
Entre suas principais opções de uso, temos:
-n
Traça as rotas sem resolver nomes de hosts (mais rápida).
-i <interface>
Traça a rota utilizando uma interface de rede específica.
-p <número da porta>
Traça a rota utilizando a porta informada.
-P <protocolo>
Traça a rota utilizando um protocolo específico (exemplo: TCP ou UDP).
Assim como o comando netstat, as opções do traceroute também podem ser combinadas
na mesma linha, porém separadas por espaços.
Todos os comandos de redes apresentados realizam suas verificações através do envio de pacotes
que trafegam pela rede. Dependendo dos parâmetros utilizados, esses comandos podem gerar
“congestionamento” na rede, causando lentidão e até mesmo falhas na comunicação.
133
Introodução ao Linux
134
9
Segurança básica
Aprender o conceito de segurança da informação; Conhecer os principais tipos de
objetivos
conceitos
Conceitos de segurança da informação; Gerência de usuários; Auditoria de sistemas
Linux; Logs do sistema; Funcionamento de um antivírus; Firewall; Atualização do sistema.
Introdução
O conceito de segurança básica de computadores pode ser definido como ações que visam
proteger e mitigar possíveis vulnerabilidades (fraquezas) que possam causar danos às redes
e sistemas de forma geral.
Uma das tarefas mais críticas e básicas realizadas pelos Administradores de Sistemas é a
configuração e a monitoração da segurança geral do sistema. O Linux fornece bastante
ajuda, através de pacotes especiais que auxiliam a fortalecer o sistema, seja ele executado
com a função de desktop ou servidor, mas isso é apenas o começo. Em particular você deve
prestar atenção em como configurar a conta do administrador (root), como bloquear o
acesso inadequado e como monitorar o sistema em busca de problemas de segurança.
11 Atualização de pacotes.
11 Aplicação de patches.
135
Os tipos de ataques podem variar de acordo ao objetivo do atacante. Veja alguns tipos de
ataques comuns.
Outro detalhe importante é que atacantes exploram sistemas que foram instalados com as
opções padrões, ou seja, o famoso next-next-finish. Isso pode ser facilmente explorado se as
devidas configurações não forem realizadas.
Cabe ressaltar que a gerência das contas dos sistemas é um dos fatores mais críticos para a
segurança básica de uma organização.
11 Histórico de senhas.
136
Relacionado a contas não-privilegiadas, podemos definir como aquelas que podem executar
ou ter acesso a poucos recursos do sistema, totalmente limitadas. Tudo isso para a garantia
de segurança e preservação da ideia de “saiba onde está e o que pode fazer”. Limitando o
usuário a espaços únicos, inteiramente trancados, monitorados, e que não podemos fugir,
a não ser que “infrinjamos a lei”. Este conceito de “jaula de usuário” conjuntamente com as
permissões de diretórios são premiados recursos encontrados em Sistemas Linux.
O comando su
De acordo a documentação oficial, o su (Switch User) serve para mudar o usuário corrente
ou invocar o superusuário. É possível encontrar em outros livros a indicação de que su
também significa Super User, pois além de conter as iniciais equivalentes, esse comando é
costumeiramente utilizado para autenticar-se à conta root, dando origem à associação.
É possível alternar a autenticação entre qualquer usuário do sistema, bastando apenas que
você detenha o conhecimento do nome e senha da conta desejada. A sintaxe do comando su
é relativamente simples. Veja:
Seu modo de uso mais simples é invocar o nome da conta de usuário após o comando su:
$ su root
Senha:
Quando se está logado com a conta do superusuário (root), é possível que, ao utilizar o
comando su para alternar a qualquer outra conta do sistema, o Linux não peça a senha da
conta alheia. Isso acontece porque, por padrão, o root possui total autoridade sobre todas
as contas do sistema, incluindo a função de alteração de suas senhas.
É extremamente importante saber que um traço (-) pode fazer toda a diferença ao utilizar
o comando su. Da maneira que invocamos o usuário root ($ su root), é provável que alguns
comandos possam não ser executados, por causa de uma variável especial do sistema,
chamada PATH. Isso acontece, pois, em linhas gerais, essa variável não está corretamente
configurada com todos os caminhos (diretórios) padrões do usuário root. Assim, para não
ocorrer esse transtorno, a dica é sempre optar por utilizar o comando su com o traço (-),
como no exemplo abaixo:
$ su – root
Senha:
Capítulo 9 - Segurança básica
Dessa maneira, qualquer usuário será alternado e autenticado com suas devidas variáveis.
Variáveis será um assunto amplamente abordado na sessão 7 deste livro.
Lembre-se de que o recomendado é trabalhar no dia a dia com uma conta de usuário
comum (não privilegiada), e somente quando realmente necessário deve-se alternar para o
usuário administrador (root).
137
O comando sudo
O sudo é uma ferramenta que permite a usuários autorizados executarem comandos em
nome de outro usuário. Seu significado literal é “superuser do”, que em português significa
“superusuário, faça”.
Sudo é uma maneira simples e prática de executar um comando ou linhas de comandos com
privilégios de superusuário, não havendo a necessidade de alternar para a conta do usuário
root ou mesmo abrir um novo terminal. Com isso, tornou-se uma ferramenta amplamente
aderida por usuários comuns que não contém privilégios no sistema, mas necessitam
executar algum comando em especial. Essa praticidade é exercida com a simples escrita
do comando sudo antes do comando ou linha de comando a executar, que é seu modo de
utilização mais corriqueiro, como exposto no exemplo:
Uma linha de comando precedida pelo comando sudo, por padrão, sempre solicitará auten-
ticação, que basicamente é a senha do usuário corrente que está invocando os comandos.
Essa é uma forma de o administrador do sistema compartilhar privilégios administrativos
limitados a outros usuários sem a necessidade de revelar sua própria senha de administrar
ou mesmo a do usuário root. Depois que um usuário é autenticado, um registro de data e
hora é gravado, e o usuário pode usar o comando sudo sem o fornecimento de senha por
um curto período de tempo, que pode variar de distribuição para distribuição, mas normal-
mente 5 minutos é o tempo padrão.
É importante ressaltar que não é qualquer usuário que pode adentrar ao sistema e uti-
lizar o comando sudo, pois este deve ser previamente configurado e autorizado. O arquivo
designado para gerenciar como o sudo deve atuar é o /etc/sudoers. Este contém linhas que
habilitam e/ou limitam quais comandos um usuário pode executar com a utilização do sudo.
Este arquivo também armazena informações sobre o usuário root, que pode executar todo e
qualquer comando no sistema, de acordo a linha:
# man sudo
Introodução ao Linux
138
é passar parâmetros para o kernel durante o boot, forçando com que ele monte o sistema
de arquivos como leitura e escrita e nos forneça um Shell válido para executarmos os
comandos que quisermos.
11 Reiniciar a máquina.
11 Editar o arquivo /etc/passwd ou digitar o comando passwd, para alterar a senha do root.
Dicas de segurança
Boas práticas de segurança devem ser seguidas para qualquer Sistema Operacional. No
Linux podemos tomar algumas ações que vão melhorar aspectos de segurança do nosso
computador, uma vez que muitas de nossas tarefas diárias envolvem dados pessoais e até
mesmo sigilosos. Assim, informamos a seguir pequenas descrições e boas práticas que
podem auxiliá-lo na segurança de seus dados.
Bloqueio do BIOS
Através do acesso ao BIOS é possível indicar ao computador para dar boot através do
CD-ROM/DVD-ROM ou ainda portas USB (Pendrives). Devemos sempre indicar que o boot se
dará apenas pelo disco rígido.
O computador deve sempre possuir uma senha no BIOS para evitar a alteração da sequência
de boot, pois um usuário mal-intencionado e de posse física da nossa estação ou servidor
pode utilizar esse recurso para alterar a sequência de boot e iniciar um Sistema Linux boo-
tável, para posteriormente executar os procedimentos para alteração da senha do usuário
root e ter acesso completo ao nosso sistema (como apresentado no tópico anterior) ou
mesmo cometer ações fatais a integridade de seus dados ou a atividade normal da estação.
É importante ressaltar que quando trazemos tal ideia para o lado corporativo, o primeiro
detalhe é que pessoas não autorizadas sequer podem ter acesso físico a um servidor. Estes
Capítulo 9 - Segurança básica
devem sempre estar em uma sala segura ou sala cofre (Datacenter), monitorada e fiscali-
zada humanamente e digitalmente.
139
quase que acessível a todos (como data de nascimento, CPF, RG ou mesmo o número de
seu telefone). Como um bom Administrador de Sistemas, é importante que você não deixe
os usuários darem aquelas velhas desculpas: “Faço isso porque todo mês tem que trocar
senha...”, “faço isso porque quem tem que se preocupar com a segurança lógica são vocês
da TI, não eu...”
É fato que não dá para criticar tanto um usuário final, pois, de certa forma, estes possuem
certa razão, principalmente devido a muitos Administradores de Sistemas que não orientam
ou explicam o porquê de trocar periodicamente uma senha. É preciso a ciência de que
a simples captura de um login e senha pode ser fatal a uma corporação, podendo levar
até mesmo ao “fechamento das portas”, literalmente. Expor tal situação aos usuários é
de extrema importância. Sempre tente alertá-los através de fatos, expondo matérias de
jornais, revistas, blogs, redes sociais ou mesmo vídeos.
O Linux possui algumas ferramentas para mitigar a necessidade de gravar tantas senhas
em nossa mente, pois é verdade que às vezes não temos mais “espaço em memória”. E para
facilitar nossa vida, hoje existem softwares criados para armazenar senhas, logins e infor-
mações de qualquer conta que um indivíduo pode possuir virtualmente ou não. Estamos
falando dos Softwares Gerenciadores de Senhas. Esses aplicativos são absurdamente fáceis
de administrar, pois basicamente lhe oferecem um local criptografado e protegido contendo
uma chave mestre. Essa chave mestre será a única senha que você deverá memorizar de
fato, pois é através dela que teremos acesso a todas as demais informações de logins e
senhas previamente salvas dentro do software.
Figura 9.1
Exemplo gráfico
de um software
gerenciador de
senhas.
Com esse auxílio, torna-se relativamente fácil adequar um usuário “cabeça dura” às cons-
tantes políticas de alterações de senhas da sua empresa. Opte por tais ferramentas e man-
tenha sua rede segura e seu trabalho formidável.
140
Sempre opte por utilizar usuários comuns, e quando necessária à intervenção de
uma conta com maior nível de usuário, utilize o comando sudo, pois este possui
mecanismos avançados que podem impedir maiores danos caso nos equivoquemos
na execução das linhas de comandos.
De posse da saída desse comando, verifique se os serviços listados são realmente neces-
sários para o sistema, caso contrário, pare-os. Podemos parar um serviço com o simples
matar de seu processo ou ainda com os comandos específicos para controle dos serviços do
sistema, como o comando systemctl ou service (estudados na seção 7 do livro):
também removê-los, caso realmente não sejam essenciais. Tenha a certeza de que não os
necessita e faça uma varredura no sistema filtrando pelo nome do pacote, como nos exem-
plos abaixo para Debian e Redhat, respectivamente:
141
Vigiando o Linux, trabalhando com logs
Todo evento realizado dentro de um Sistema Operacional gera um registro, uma espécie
de linha do tempo dos eventos ocorridos, também conhecidos como Logs. Esse registro
é armazenado para muitos tipos de aplicações, como servidores web, serviços de e-mail,
banco de dados, serviços de acesso remoto, tentativas de logins no sistema, entre outros, ou
seja, é o registro de todo o histórico de ações cometidos por usuários, seja no sistema ou em
aplicações. Quando um possível problema é identificado, a análise de um arquivo de log é a
primeira ação que um Administrador de Sistemas deve efetuar.
Um log geralmente é armazenado em arquivos comuns de texto, e cada aplicação pode criar
seus próprios arquivos em diretórios específicos. Por padrão, os sistemas Linux armazenam
seus logs no diretório /var/log/. Nele é possível encontrar inúmeros arquivos contendo
diferentes identificações, que normalmente fazem menção ao nome da própria aplicação
que gerou o log, lembrando que tais nomes podem variar de distribuição para distribuição.
Apesar das diversas aplicações poderem construir arquivos nesse local, existem quatro prin-
cipais arquivos de logs com os quais devemos ter maior atenção. São eles:
/var/log/kern.log
Contém somente mensagens do kernel (saída do comando dmesg).
/var/log/messages
É considerado o log das atividades gerais do sistema. Contêm mensagens genéricas não
críticas, como: informações, notificações e observações sobre o sistema.
/var/log/syslog
Arquivo semelhante ao /var/log/messages (a depender da distribuição Linux), e pode regis-
trar tudo, exceto informações relacionadas à autenticação de usuários.
/var/log/auth.log
Armazena informações sobre as autenticações dos usuários, como logins, logouts e tenta-
tivas malsucedidas.
Ter os logs pode até ser o mais importante, mas de grande valia é saber como consultar e
filtrar as informações de um log, para ganho de tempo e uma maior precisão na solução
dos problemas. Uma ferramenta amplamente utilizada por iniciantes, bem como pelos
mais experts em Linux, é o comando tail, que juntamente com sua opção -f (follow), é capaz
de acompanhar em tempo real o que está sendo escrito em qualquer arquivo de log. Para
monitorar cada nova mensagem das atividades gerais do sistema, por exemplo, podemos
utilizar a seguinte linha de comando:
# tail -f /var/log/messages
Introodução ao Linux
Uma utilidade bastante comum entre Administradores de Sistemas Linux é utilizar o tail -f
antes de plugar um dispositivo na porta usb, como um pendrive, por exemplo. Com a
monitoração das novas mensagens de log, é possível verificar, em tempo real, em qual porta
o pen drive foi plugado ou em qual diretório ele está sendo montado, além de quais suas
permissões de acesso.
142
Antivírus no Linux
Vírus nada mais é que um programa ou fragmento de código que pode se reproduzir de
várias maneiras e eventualmente executa uma ação especifica com finalidade central.
Muito se cogita que não existem vírus para Sistemas Linux, o que é mito. De fato existem
mecanismos que afastam e desencorajam hackers e indivíduos maliciosos a desenvolverem
códigos maliciosos para Linux, que basicamente é a arquitetura do sistema. Ela é ampla-
mente aplaudida e valorizada por Administradores de Sistemas em todo o hemisfério e,
consequentemente, por isso não é muito comum ouvir falar em vírus para um Linux.
Uma das principais características do Linux é que nenhum arquivo pode ser criado já com
permissão de execução, garantindo que um usuário comum, mesmo que faça download de um
arquivo malicioso, não consiga executá-lo, sendo barrado devido às negativas de permissões.
Também a arquitetura para usuários do Linux restringe o campo de ação de um possível vírus,
pois um usuário comum está limitado a ter acesso somente ao seu diretório de trabalho, que
geralmente está localizado no diretório /home. Um administrador também pode limitar a exe-
cução de arquivos a determinados Filesystems, que contribui ainda mais a blindagem do sistema.
Mas não é por isso que se deve ser “cabeça dura” e achar que nunca um sistema Linux
pegará vírus. Assim, é sempre bom contar com uma ferramenta de antivírus. Existem muitas
opções no mercado com licenças Open-Source (código aberto), com um motor de detecção a
trojans, malwares, vírus e outras ameaças.
11 Download de pacote com arquivos maliciosos (pode ser obtido no próprio site da ferramenta).
Firewall
Firewall é uma solução de segurança baseada em hardware ou software (mais comum), que
a partir de um conjunto de regras ou instruções analisa o tráfego de rede para determinar
se o pacote pode passar ou não. É considerado uma barreira de perímetro. Sua missão,
podemos assim dizer, consiste basicamente em bloquear tráfego de dados indesejado e
liberar acessos autorizados.
143
Um firewall pode impedir uma série de ações maliciosas, bloqueando, por exemplo: um
malware que utiliza determinada porta para se comunicar com um computador sem o
usuário saber, um programa que envia dados sigilosos para a internet, uma tentativa de
acesso à rede a partir de computadores externos não autorizados, entre outras atividades
suspeitas. Podemos inferir que ele possui como principal objetivo o de proteger as informa-
ções e/ou filtrar o acesso a elas. Pode servir ainda como elemento de interligação entre duas
redes distintas.
O conceito de Packet Filtering (ou Filtro de Pacotes em português) é um dos principais meca-
nismos de um Firewall, que mediante regras pré-definidas pelo Administrador de Sistemas
pode permitir ou não a passagem de Datagramas IP em uma rede. É possível filtrar pacotes
para impedir o acesso a um serviço de Telnet a um chat, ou até mesmo a uma página web,
por exemplo.
Regras
A ideia central de um firewall é trabalhar através de regras. As regras são a forma de
aplicação de filtragem dos pacotes em funcionamento. Por exemplo, para impedir que os
usuários façam conexões do tipo FTP, é necessário criar uma regra que impeça esse tipo de
operação, ou melhor, que bloqueie o envio e recebimento de pacotes nas portas específicas
dessa aplicação, que no caso do serviço FTP, são as portas de número 20 e 21.
Apesar de a ideia central serem as regras, o fato mais importante são as ações que serão
dadas a essas regras. As principais ações são:
11 LOG: Cria um log referente à regra aplicada. Por padrão os logs são enviados para
/var/log/messages (essa regra deve aparecer antes das demais).
O Netfilter
De forma nativa, no Linux já temos instalado um firewall chamado Netfilter, um dos mais l
conhecidos e conceituados firewalls do mercado de softwares livres. Para operacionalizar o É muito comum
Netfilter possuímos o comando iptables, que cria, modifica e deleta as regras de filtragem. encontrar livros e
artigos dirigindo-se ao
Firewall Netfilter
Introodução ao Linux
O Netfilter pode conter um manual bem vasto, que até nos desencoraja a lê-lo ou mesmo
somente pelo nome
consultá-lo por uma simples opção. Mas é de fundamental importância deter ao menos o Iptables, que é seu
conhecimento básico de sua utilização, pois além de ser uma valiosa ferramenta de segu- principal comando de
gerenciamento.
rança e encontrada em basicamente todas as distribuições Linux – a qualquer momento a
criação ou modificação de uma pequena regra pode lhe salvar de um grande ataque.
144
Atualizando o Linux
Um dos principais problemas relacionados à segurança da informação é a não atualização
de softwares ou do próprio Sistema Operacional, que futuramente pode ocasionar a maior
dor de cabeça da vida de um usuário.
As atualizações podem ser feitas de forma automática ou manual. Lembrando que se deve
ter muito cuidado com as atualizações automáticas, elas podem introduzir novas vulnerabi-
lidades ou mesmo parar seu sistema. É sempre indicado possuir um laboratório para testar
toda e qualquer atualização de sistema, para não termos surpresas.
As distribuições Linux incluem em seus repositórios links para sites de atualizações, que
podem ser tanto de segurança quanto de pacotes comuns do sistema. De tempos em
tempos é recomendável verificar se esses arquivos estão corretamente habilitados e apon-
tando para os servidores corretos. A utilização simples e direta dos repositórios pode ser
através dos comandos gerenciadores de pacotes nativos do próprio sistema, como o apt-get
para Debian ou o yum para o RedHat.
# apt-get update
# apt-get upgrade
Atualizando toda a distribuição para uma versão mais nova (se houver):
# apt-get dist-upgrade
# yum update
Perceba que, diferentemente do Debian, o parâmetro update atualiza todos os pacotes instalados.
145
Existe também a possibilidade de checar se há atualizações a serem feitas:
# yum check-update
O comando yum upgrade também é utilizado para atualizar o sistema para uma versão mais
atual (se houver):
# yum upgrade
Dessa forma, teremos um sistema sempre atualizado, prevenindo possíveis falhas encon-
tradas e já divulgadas globalmente, bem como possíveis ataques recentemente fabricados.
146
10
Configuração e utilização de
dispositivos de hardware
objetivos
conceitos
Arquivos de dispositivos; Módulos; Gerenciamento e configuração de dispositivos
e gerenciamento de energia.
Introdução
O Linux, assim como outros Sistemas Operacionais modernos, é capaz de suportar um
grande número de dispositivos de hardware. Particularmente nos últimos anos, grandes
mudanças foram feitas no sistema, permitindo melhor suporte a uma série de dispositivos,
tornando-os progressivamente plug-and-play. Embora esteja cada vez mais fácil confi-
gurar e utilizar um dispositivo no Linux, seja de forma automática ou com a ajuda de algum
aplicativo gráfico, abordaremos alguns conceitos por trás dessas facilidades e, sempre que
Assim, o aluno estará se preparando para situações em que esses aplicativos não estejam
disponíveis (como em um servidor, por exemplo) ou quando a configuração automática
eventualmente não funcionar. Veremos como funciona o suporte aos dispositivos no Linux
abordando o kernel e seus subsistemas. Em seguida, veremos como configurar e utilizar
algumas das classes de dispositivos mais comuns.
147
privilégios que ele, o que é conhecido como kernel-space. Usualmente, o kernel é compilado
de forma a ter suporte aos principais dispositivos, como teclados, mouses, placas de rede,
discos rígidos etc. Os drivers desses dispositivos são embutidos diretamente no kernel e os
drivers dos demais dispositivos são disponibilizados como módulos.
Arquivos de dispositivos
Os projetistas do sistema Unix, no qual o Linux se baseia, tinham como princípio de projeto
a máxima de que “tudo no Unix é um arquivo”. Com isso, pretendiam simplificar o desen-
volvimento de aplicações, oferecendo aos programadores uma interface com o sistema
onde todos os seus recursos são tratados como arquivos, isto é, suportando as operações
de abrir, fechar, ler e escrever. A grande maioria dos dispositivos no Linux está associada a
um arquivo especial no diretório /dev por meio do qual os programas podem se comunicar
com esses dispositivos. Por exemplo, se um programador deseja escrever um programa
que leia um determinado dado de uma porta serial, basta fazer com que esse programa
abra o arquivo /dev/ttyS0 e leia os seus dados. As mesmas permissões aplicadas a arquivos
comuns também são aplicadas a arquivos de dispositivos. Sendo assim, é possível controlar
qual usuário ou grupo de usuários têm acesso a um dispositivo. Cada arquivo de dispositivo
é criado por intermédio do comando mknod, e está associado a dois números chamados de
major e minor. Esses números são utilizados pelo kernel para identificar a qual dispositivo
estão associados. Além disso, cada dispositivo pode ser do tipo block (quando manipulam
dados em blocos de 512 bytes ou múltiplos) ou character (quando manipulam dados byte a
byte). O primeiro tipo permite a leitura e a escrita de maneira aleatória (podemos especificar
de onde se quer ler ou escrever). Já no segundo, a leitura e a escrita só podem ser feitas de
forma sequencial.
A tabela 10.1 mostra alguns dispositivos do Linux, com suas descrições e arquivos associados.
hda1 Primeira partição primária Os arquivos hda1 até hda4 são as partições
do disco IDE master primárias de um disco. A partir de hda5 são
conectado à controladora as partições estendida e lógicas.
IDE primária.
sda Disco ou unidade de CD/ Assim como os discos IDE, os discos SCSI Tabela 10.1
DVD SCSI ou pen drive. são identificados por sda, sdb etc. e as Principais
partições são identificadas como sda1, dispositivos
sda2 etc. do Linux.
148
Arquivo Dispositivo Descrição
cdrom Unidade de CD/DVD IDE. Link para hda, hdb, hdc ou hdd, pois a
unidade de CD/DVD é tratada como um
disco IDE.
Módulos
Módulos são pequenos arquivos que contêm trechos de códigos que implementam funcio-
nalidades do kernel. Eles fornecem suporte a dispositivos de hardware ou a funcionalidades
do Sistema Operacional.
Os módulos utilizados pelo kernel são específicos para cada versão e se encontram no dire-
tório /lib/modules/<versao_kernel>. Por meio dos comandos insmod, modprobe, rmmod e
lsmod é possível carregar módulos no kernel, remover e listar os módulos em uso. Veremos
a seguir como efetuar cada uma dessas operações.
Para listar todos os módulos carregados pelo kernel, basta utilizar o comando lsmod,
conforme o exemplo:
# lsmod
Module Size Used by
lp 12164 0
nfs 208324 1
lockd 62472 2 nfs
sunrpc 144452 3 nfs,lockd
parport_pc 41540 1
A saída do comando lsmod apresenta o nome dos módulos, o seu tamanho em bytes, o
número de instâncias dos módulos que estão carregadas e quais são os outros módulos que
os utilizam, já que um módulo pode prover funções necessárias para outro módulo.
149
Para obter mais informações sobre um módulo, por exemplo, saber os parâmetros que
ele aceita, podemos usar o comando modinfo. O comando do exemplo a seguir mostra as
informações relativas ao módulo lp:
# modinfo lp
filename: /lib/modules/2.6.13.2/kernel/drivers/char/lp.ko
alias: char-major-6-*
license: GPL
vermagic: 2.6.13.2 SMP preempt PENTIUM4 gcc-4.0
depends: parport
parm: reset:bool
parm: parport:array of charp
# modprobe -r lp
Initrd
Imagine que o sistema de arquivos em que se encontram os módulos do kernel esteja
armazenado em um disco conectado a uma controladora de discos que necessita de um
módulo do kernel para poder ser utilizada pelo Sistema Operacional. Temos, então, um
impasse. Para resolver esse problema, os programadores do kernel criaram o initrd (initial
RAM disk).
Gerenciando dispositivos
O gerenciamento de dispositivos no Linux é feito de forma automática por programas que
serão descritos neste tópico.
Hotplug
Desde a introdução da série 2.6 do kernel do Linux, este passou a contar com um subsistema
conhecido como hotplug, cuja função é detectar e gerar eventos sempre que um novo
dispositivo é conectado a um barramento USB, PCI, SCSI, PCMCIA ou firewire. O hotplug
também é capaz de identificar os dispositivos presentes durante o processo de boot do
Introodução ao Linux
sistema. Isso é feito através de mensagens enviadas aos barramentos citados. Quando algum
dispositivo é conectado, ele responde à mensagem fornecendo ao kernel um identificador
(ID). Com esse ID, o kernel pode consultar uma tabela para identificar o dispositivo e executar
em espaço de usuário um programa também chamado de hotplug, que é capaz de carregar os
módulos de controle de um dispositivo e configurá-lo automaticamente.
150
Além disso, o hotplug também pode executar scripts localizados nos diretórios /etc/hotplug
e /etc/hotplug.d. Um script pode, por exemplo, criar um ícone no desktop para acesso a um
pen drive, sempre que este for conectado ao computador. Nesse módulo, não veremos a
criação de scripts para atuar em conjunto com o hotplug.
Udev
Tradicionalmente, o conteúdo do diretório /dev era estático, ou seja, durante a instalação
um script criava todos os arquivos de dispositivos, mesmo que seus dispositivos associados
não estivessem instalados no sistema. Além disso, se fosse instalado um novo tipo de dis-
positivo para o qual não existisse um arquivo de dispositivo correspondente, era necessário
criar esse arquivo manualmente.
Para evitar essa situação, foi criado um sistema de arquivos conhecido como devfs, capaz
de criar esses dispositivos automaticamente. Posteriormente, esse sistema foi substituído
por outro, conhecido como udev, que inicialmente foi concebido para trabalhar em conjunto
com o hotplug. Assim, quando um dispositivo era detectado, o kernel disparava um pro-
cesso também chamado de hotplug que, por sua vez, acionava o udev para que ele criasse o
arquivo de dispositivo dinamicamente. Em algumas distribuições, o udev trabalha em con-
junto com o hotplug, enquanto em outras substitui completamente o hotplug, executando
suas funções.
Uma característica do udev é que podemos definir arquivos de dispositivos fixos para cada
dispositivo de hardware utilizado. Isso facilita a criação de scripts utilizados pelo udev, pois
caso tenhamos dois dispositivos do mesmo tipo, como por exemplo duas impressoras, pode
acontecer de, a cada boot do sistema, elas serem associadas a arquivos de dispositivos
diferentes, o que dificultaria a automatização de tarefas associadas a cada uma das impres-
soras nesses scripts. Por exemplo, em vez de utilizarmos os arquivos de dispositivo padrão
para impressoras (/dev/lp0 e /dev/lp1), através do udev podemos definir os arquivos /dev/hp
e /dev/epson. Assim, nos scripts disparados pelo udev as ações executadas pela impressora
HP estariam sempre associadas ao arquivo de dispositivo /dev/hp.
A sintaxe das regras do udev é bem intuitiva, como pode ser visto nesse exemplo, mas não
será apresentada neste módulo.
O diretório /dev passou a ser criado em memória, contendo apenas os arquivos de disposi-
tivos que realmente estavam conectados ao sistema. Nas versões do kernel posteriores à
versão 2.6.15, o programa hotplug passou a ser substituído por uma nova versão do udev,
capaz de fazer todas as funções anteriormente desempenhadas pelos dois programas, isto
é: carregar módulos, configurar o dispositivo e criar os arquivos de dispositivo.
151
Identificando e configurando dispositivos
Conforme foi visto, cada vez mais as novas versões de kernel e programas associados se
encarregam de fazer todo o trabalho de identificação e configuração de dispositivos. No
entanto, em alguns poucos casos, ainda é necessária a intervenção do administrador para
configurar determinados dispositivos. Na maioria dos casos, isso se deve ao fato de que os
módulos necessários para suportar esses dispositivos não estão disponíveis no sistema.
Algumas ferramentas podem ser bastante úteis nessa tarefa, como veremos a seguir.
Para identificar os dispositivos PCI conectados, podemos usar o comando lspci, que lê
informações de arquivos localizados no diretório /proc e as apresenta em um formato mais
apropriado. O diretório /proc é um sistema de arquivos virtual criado pelo kernel durante o
boot, que armazena seus dados em memória RAM.
O comando lspci, na sua forma mais básica, traz a posição do dispositivo no barramento
seguida de sua descrição, como mostra o exemplo a seguir:
# lspci
0000:00:00.0 Host bridge: Silicon Integrated Systems [SiS]740 Host (rev 01)
0000:00:01.0 PCI bridge: Silicon Integrated Systems [SiS]Virtual PCI-to-PCI bridge (AGP)
0000:00:02.5 IDE interface: Silicon Integrated Systems[SiS] 5513 [IDE]
0000:00:02.7 Multimedia audio controller: SiliconIntegrated Systems [SiS] Sound Controller (rev a0)
0000:00:03.0 USB Controller: Silicon Integrated Systems [SiS] USB 1.0 Controller (rev 0f)
0000:00:03.3 USB Controller: Silicon Integrated Systems[SiS] USB 2.0 Controller
0000:00:04.0 Ethernet controller: Silicon Integrated Systems [SiS] SiS900 PCI Fast Ethernet (rev 90)
0000:01:00.0 VGA compatible controller: Silicon Integrated
Systems [SiS] 65x/M650/740 PCI/AGP VGA Display Adapter
Nesse exemplo, podemos ver que o comando lspci lista também um dispositivo AGP (a placa
de vídeo), os controladores USB e alguns subsistemas da placa-mãe, como o controlador IDE
e o Host Bridge.
Outros comandos úteis para verificação de informações sobre os dispositivos instalados são:
11 lscpu: exibe diversos parâmetros da CPU, que são obtidos através do arquivo /proc/cpuinfo.
O diretório /proc é também uma fonte de informações sobre o hardware instalado no com-
putador. Nele temos diversos arquivos, entre os quais podemos destacar:
11 /proc/filesystems: esse arquivo exibe a lista de sistemas de arquivos suportados pelo kernel.
Introodução ao Linux
11 /proc/bus: diretório que contém informações sobre dispositivos PCI, USB, entre outros.
152
11 /proc/net: diretório que contém informações sobre os protocolos de rede disponíveis
no sistema.
11 /proc/sys: diretório que, além de fornecer informações sobre o sistema, permite que
parâmetros de configuração do kernel sejam alterados.
Além de fornecer diversas informações sobre o hardware do sistema, ainda é possível confi-
gurarmos diversos parâmetros do kernel através do diretório /proc. No entanto, neste curso
não veremos a parte de configuração do kernel.
O kernel a partir da versão 2.6 também apresenta o diretório /sys, que contém
informações sobre dispositivos de maneira análoga ao diretório /proc.
Unidades de CD/DVD
Unidades de CD/DVD do tipo IDE são suportadas de maneira praticamente transparente
pelo kernel. Quando conectamos uma unidade de CD/DVD ao computador, essa é associada
a um arquivo de dispositivo de acordo com a sua posição no barramento IDE. Se a unidade
estiver conectada ao barramento primário, será associada aos arquivos hda ou hdb, caso
estejam configuradas como master ou slave, respectivamente. Já se estiver conectada ao
barramento secundário, será associada aos arquivos hdc ou hdd, caso estejam configuradas
como master ou slave, respectivamente.
Unidades de CD/DVD do tipo SCSI necessitam que a interface SCSI, onde estão conectados,
tenha sido corretamente reconhecida, e que o módulo que suporta unidades de CD/DVD
SCSI tenha sido carregado, o que, normalmente, acontece de forma automática. Uma vez
reconhecidas, as unidades de CD/DVD SCSI são associadas aos seus arquivos de disposi-
tivos: scd0 para a primeira unidade, scd1 para a segunda e assim por diante. Durante a
instalação do Linux, o programa instalador identifica em que tipo de barramento e em que
posição a unidade de CD/DVD se encontra, em seguida configura o arquivo /etc/fstab de
acordo com essa localização.
O programa instalador pode também criar o link /dev/cdrom, apontando para o arquivo real
correspondente à unidade de CD/DVD. O arquivo /etc/fstab é lido por alguns scripts de iniciali-
# dmesg
...
[ 1.604811] sd 2:0:0:0: [sda] 85983232 512-byte logical blocks: (44.0 GB/41.0 GiB)
[ 1.604831] sd 2:0:0:0: [sda] Write Protect is off
[ 1.604833] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00
[ 1.604841] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn’t support DPO or FUA
[ 1.605099] sda: sda1 sda2
[ 1.605268] sd 2:0:0:0: [sda] Attached SCSI disk
[ 6.525024] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)
...
153
Ao contrário de discos rígidos, os CDs ou DVDs não apresentam partições, portanto, são
acessados por intermédio de seu arquivo raiz sem conter números (partições) em frente ao
nome do arquivo, como /dev/hdb.
Assim como ocorre em discos contendo partições de arquivos, para podermos ler o con-
teúdo de um CD ou DVD, temos de montá-lo antes, utilizando o comando mount. Supondo
que a unidade de CD/DVD esteja associada ao arquivo /dev/hdb, poderíamos montá-lo no
diretório /mnt/cdrom com o seguinte comando:
Também poderíamos alterar o arquivo /etc/fstab, introduzindo a linha a seguir, para que a
unidade de CD/DVD seja sempre montada automaticamente no boot:
$ mount /mnt/cdrom
$ umount /mnt/cdrom
É importante ressaltar que o Linux não permite que um dispositivo seja desmontado se
algum arquivo contido nele estiver sendo utilizado por algum recurso do sistema. Assim, o
simples fato de existir um shell aberto com o diretório corrente pertencente ao dispositivo
impede que ele seja desmontado. Além disso, o botão eject da unidade de CD/DVD não
funciona enquanto o dispositivo estiver montado.
um pen drive, o subsistema hotplug detecta esse evento, identifica o dispositivo, carrega os
módulos necessários e monta o dispositivo. O processo de montagem é semelhante ao de
unidades CD/DVD, mudando apenas o arquivo de dispositivo associado.
154
Podemos verificar se o sistema reconheceu o pen drive executando o comando dmesg.
Em seguida, podemos verificar qual arquivo de dispositivo foi designado para o pen drive,
mediante as informações obtidas no arquivo /proc/partitions. Esse arquivo lista os discos e
partições encontrados no sistema, como mostra o exemplo a seguir:
# cat /proc/partitions
Major Minor Blocks Name
3 0 58605120 hda
3 1 25438896 hda1
3 2 594405 hda2
8 0 1993728 sda
8 1 1993724 sda1
No exemplo, podemos observar que a máquina possui um disco IDE com duas partições e
um pen drive de 2 GB com uma partição.
Os pen drives geralmente usam o sistema de arquivos vfat para manter a compatibilidade
com sistemas Windows, mas nada nos impede de criar neles um sistema de arquivos do tipo
ext3 ou ext4.
Interfaces de rede
Interfaces de rede são, provavelmente, um dos dispositivos mais bem suportados pelo
Linux. Desde o seu surgimento até hoje, a internet é o principal meio de comunicação entre
os desenvolvedores do sistema. Logo, é natural que seja dada uma atenção especial para
os dispositivos de rede. Usualmente, as interfaces de rede são detectadas pelo subsistema
hotplug/udev durante o boot, e seus módulos são automaticamente carregados. Ao con-
trário de outros dispositivos, as interfaces de rede não possuem um arquivo de dispositivo
associado a elas. O acesso a esse tipo de dispositivo acontece por outro método, conhecido
como sockets.
Usualmente, as interfaces de rede que utilizam o padrão ethernet são nomeadas como
ethX, onde X é um número inteiro. Já as interfaces de rede sem fio são usualmente nome-
adas como wlanX, embora também possam ser nomeadas utilizando o mesmo padrão das
interfaces ethernet.
Para que um disco SCSI funcione, ele deve ser conectado a uma controladora de discos com-
patível com o padrão SCSI. O Linux suporta vários tipos de placas controladoras SCSI e o sub-
sistema hotplug é capaz de detectar e carregar o módulo apropriado para cada controladora.
Ao contrário de discos IDE, em sistemas SCSI não existe o conceito de controladoras primárias
e secundárias, ou discos master e slave. Um disco em um barramento SCSI é nomeado de
acordo com a ordem na qual é detectado. Assim, o primeiro disco SCSI é associado ao disposi-
tivo /dev/sda; o segundo ao /dev/sdb, e assim por diante. A ordem de detecção é dada pelo ID
do disco no barramento (uma configuração feita por meio de jumpers no disco).
155
Discos SCSI também podem ser montados e utilizados da mesma maneira que discos IDE.
A única complicação que aparece fica por conta da situação em que temos o nosso sistema
lSe existirem dois
de arquivos montado em um disco SCSI. Nesse caso, pode ser necessário acrescentar em dispositivos conectados
a um único canal IDE,
uma imagem initrd os módulos de suporte à controladora SCSI. Esse procedimento não obrigatoriamente um
será descrito aqui, mas o aluno que desejar mais informações pode começar consultando o deles deverá ser
designado como o
manual de sistema do comando mkinitrd.
dispositivo master
e o outro como
Placas de vídeo dispositivo slave.
O Linux pode suportar placas de vídeo em três modos distintos: texto, framebuffer e gráfico.
O modo texto suporta apenas texto, podendo usar também algumas cores. É nesse modo
que utilizamos a interface de linha de comando. O suporte para o modo texto é nativo no
kernel. O modo framebuffer é uma espécie de melhoria do modo texto, onde os programas
acessam diretamente a memória de vídeo da placa, o que possibilita que apresentem
imagens e gráficos no que seria apenas um terminal com suporte a texto. Usualmente, esse
modo é utilizado pelos kernels das distribuições Linux para a criação de processos de boots
gráficos. Esse modo exige o suporte no kernel para uma placa específica ou um padrão de
vídeo, conhecido como VESA.
Gerenciamento de energia
Praticamente todos os componentes de hardware possuem funcionalidades que visam dimi-
nuir o consumo de energia em situações onde estão ociosos. Para que essas funcionalidades
possam ser utilizadas, é preciso que algum sistema de gerenciamento de energia seja aplicado.
O Linux utiliza basicamente dois padrões de gerenciamento de energia, descritos a seguir.
O ACPI é implementado no Linux pelo daemon acpid, que é configurado para executar
ações quando ocorrem determinados eventos. As ações que são executadas pelo acpid são
156
definidas em arquivos dentro do diretório /etc/acpi/actions, no caso do RedHat e derivados;
já no Debian as ações executadas pelo acpid estão localizadas diretamente em /etc/acpi, em
que os eventos são definidos nos arquivos dentro do diretório /etc/acpi/events. O exemplo
a seguir mostra o conteúdo do arquivo /etc/acpi/events/powerbtn, evento que é disparado
quando o botão de power é pressionado:
event=button [ /]power
action=/etc/acpi/actions/powerbtn.sh
157
Introodução ao Linux
158
Lucas Torres Lima possui graduação
em Análise e Desenvolvimento de
Sistemas pela UNITINS-TO. Detém cer-
tificações internacionais como a LPIC-1,
NCLA-11 e DCTS. Abrange 11 anos de
experiência em Tecnologia da Infor-
mação, enfatizando atuação em ins-
trutoria, Administração de Servidores Linux e gerência
corporativo com ferramentas Symantec. Neste período
atuou em empresas como Receita Federal do Brasil, Cen-
tro de Computação da Aeronáutica de Brasília e Brasil
Telecom (Oi). Atualmente é empregado público na empresa
SERPRO, Instrutor Acadêmico e Consultor Autônomo.
Lucas Torres Lima possui graduação Sobre a RNP – qualificada como uma
em Análise e Desenvolvimento de Organização Social (OS), a Rede Nacional
Sistemas pela UNITINS-TO. Detém de Ensino e Pesquisa (RNP) é vinculada
certificações internacionais como a LPIC-1,
ao Ministério da Ciência, Tecnologia,
NCLA-11 e DCTS. Abrange 11 anos de
experiência em Tecnologia da Infor- Inovação e Comunicações (MCTIC) e
mação, enfatizando atuação em ins- mantida por esse, em conjunto com
trutoria, Administração de Servidores Linux e gerência os ministérios da Educação (MEC),
corporativo com ferramentas Symantec. Neste período
Cidadania, Saúde (MS) e Defesa
atuou em empresas como Receita Federal do Brasil,
Centro de Computação da Aeronáutica de Brasília e Brasil
(MD), que participam do Programa
Telecom (Oi). Atualmente é empregado público na empresa Interministerial RNP (PI-RNP). Pioneira
SERPRO, Instrutor Acadêmico e Consultor Autônomo.
Introdução ao Linux
4 milhões de usuários, usufruindo de
res de sistemas Windows e aos profissionais que desejam uma infraestrutura de redes avançadas
iniciar os estudos para a certificação LPIC1, do Linux para comunicação, computação e
Professional Institute. experimentação, que contribui para a
Este livro inclui os roteiros das atividades práticas e o con- Lucas Torres Lima integração dos sistemas de Ciência e
Tecnologia, Educação Superior, Saúde,
teúdo dos slides apresentados em sala de aula, apoiando
Cultura e Defesa.
profissionais na disseminação deste conhecimento em Saiba mais em https://rnp.br.
suas organizações ou localidades de origem.