You are on page 1of 83

Fábio J. L.

Ferreira

Linux essencial
Por trás da interface gráfica

www.tinarede.com.br
Licença

Você pode:

Copiar, distribuir, exibir e criar obras derivadas deste material.

Com as seguintes condições:


Você deve dar crédito ao autor original e ao projeto TI na Rede, citando o nome
do autor (quando disponível) e fazendo referência ao site oficial do projeto.

Os direitos de comercialização desta obra são de exclusividade do mantenedor


oficial do projeto TI na Rede. Exceto nos casos em que o terceiro tenha uma
autorização formal do mantenedor do projeto.

Se você alterar, transformar ou criar outra obra com base nesta, somente poderá
distribuí-la sob uma licença equivalente à original.

Acreditamos que ao compartilhar o conhecimento de forma aberta e gratuita estamos, no mínimo,


incentivando terceiros a buscar um aprimoramento profissional. Inevitavelmente, contribuímos ainda
para o crescimento pessoal e moral dessas pessoas.

Todo e qualquer material disponibilizado por meio deste projeto é revisado, tendo como objetivo
garantir um alto nível de qualidade e excelência. Não nos responsabilizamos de forma alguma por
quebra de direitos autorais ou violação de propriedade intelectual que possa resultar em um ato
considerado ilegal. Cada autor é responsável por responder legalmente por seu material.

www.tinarede.com.br
Sumário
Introdução ........................................................................................................................................ 7

Linux – introdução teórica.............................................................................................................. 8

1.1 Um pouco da história ............................................................................................................... 8


1.2 Software livre ........................................................................................................................... 8
1.3 Open source (código aberto) ................................................................................................... 9
1.4 Código-fonte .......................................................................................................................... 10
1.5 Qual a diferença entre Linux e GNU/Linux? .......................................................................... 10
1.6 Sistema Operacional (SO) ..................................................................................................... 11
1.7 Licença de software ............................................................................................................... 11
1.7.1 GPL ................................................................................................................................ 11
1.7.2 Copyleft .......................................................................................................................... 11
1.7.3 Outras licenças ............................................................................................................... 12
1.8 Distribuições Linux ................................................................................................................ 12
1.9 Onde o Linux é usado ........................................................................................................... 12
1.10 Qual é a melhor distribuição Linux? .................................................................................... 13
1.11 Os benefícios de uma distribuição Linux ............................................................................. 13
1.12 Por trás da interface gráfica ................................................................................................ 14
1.13 Resumo ............................................................................................................................... 15

Estrutura e funcionamento do Linux ........................................................................................... 16

2.1 Estrutura sistêmica do GNU/Linux ........................................................................................ 16


2.2 Terminal Virtual (ttyN) ............................................................................................................ 17
2.3 Introdução ao shell ................................................................................................................ 17
2.3.1 Logon e logout ................................................................................................................ 17
2.3.2 Superusuário (root), usuário comum e usuário de sistema/serviço ............................... 17
2.4 Primeiro contato com o shell ................................................................................................. 18
2.5 Árvore de diretórios (“pastas”) ............................................................................................... 19
2.6 Case-sensitive ....................................................................................................................... 20
2.7 Referências absoluta e relativa ............................................................................................. 20
2.8 Entrada e saída padrão de dados ......................................................................................... 21
2.9 Resumo ................................................................................................................................. 21

Programas comandos essenciais ............................................................................................... 23


3.1 Programas comandos básicos .............................................................................................. 23
3.1.1 help ................................................................................................................................. 23

www.tinarede.com.br
3.1.2 man ................................................................................................................................. 24
3.1.3 logout .............................................................................................................................. 24
3.1.4 shutdown, poweroff e halt ............................................................................................... 24
3.1.5 reboot ............................................................................................................................. 25
3.1.6 pwd (print working directory) .......................................................................................... 25
3.1.7 history ............................................................................................................................. 25
3.2 Manipulação de arquivos e diretórios .................................................................................... 26
3.2.1 ls (list) ............................................................................................................................. 26
3.2.1.1 Listando o conteúdo do diretório corrente ............................................................... 26
3.2.1.2 Opções (atributos de listagem) ................................................................................ 26
3.2.1.3 Listar arquivos ocultos ............................................................................................. 27
3.2.2 cd (change directory) ...................................................................................................... 28
3.2.3 cp (copy) ......................................................................................................................... 28
3.2.4 rm (remove) .................................................................................................................... 28
3.2.5 mkdir ............................................................................................................................... 29
3.2.6 rmdir ............................................................................................................................... 29
3.2.7 cat (concatenar) .............................................................................................................. 29
3.2.8 more ............................................................................................................................... 29
3.2.9 cut (cortar) ...................................................................................................................... 30
3.2.10 find ................................................................................................................................ 30
3.2.11 grep .............................................................................................................................. 30
3.2.12 head .............................................................................................................................. 31
3.2.13 tail (lê do fim do arquivo) .............................................................................................. 31
3.2.14 wc (contar) .................................................................................................................... 31
3.2.15 tar (empacotar e desempacotar) .................................................................................. 32
3.2.16 gzip e bzip2 (compactar e descompactar) .................................................................... 32
3.2.17 Outros comandos ......................................................................................................... 33
3.3 Curingas ................................................................................................................................ 34
3.4 Utilizando | (pipe) para direcionar o processamento ............................................................. 34
3.5 Encadeando execuções com ; (ponto e vírgula) e && .......................................................... 35
3.5.1 Exemplos ........................................................................................................................ 35
3.5.2 Redirecionar saída com > ou >> .................................................................................... 35
3.6 Atalhos essenciais ................................................................................................................. 36
3.7 Resumo ................................................................................................................................. 36

Usuários, grupos e permissões ................................................................................................... 38


4.1 O que é um usuário ............................................................................................................... 38
4.2 O que é um grupo de usuários .............................................................................................. 38

www.tinarede.com.br
4.3 O que são permissões ........................................................................................................... 38
4.4 Gerenciamento de usuários e grupos ................................................................................... 38
4.4.1 Criar usuário ................................................................................................................... 39
4.4.2 Editar usuário e senha .................................................................................................... 40
4.4.3 Excluir usuário ................................................................................................................ 40
4.4.4 Criar um grupo ................................................................................................................ 40
4.4.5 Adicionar e remover usuário de um grupo ..................................................................... 41
4.4.6 Excluir grupo ................................................................................................................... 41
4.4.7 Diretório home do usuário .............................................................................................. 41
4.5 Gerenciamento de permissões .............................................................................................. 41
4.5.1 Adicionar, remover e definir permissões com chmod ..................................................... 42
4.5.2 Usando chmod com método numérico ........................................................................... 43
4.5.3 Umask ............................................................................................................................ 45
4.5.3.1 Calcular umask ........................................................................................................ 45
4.5.3.2 Umask para permissão ............................................................................................ 45
4.5.3.3 Alterando umask ...................................................................................................... 45
4.5.4 Permissões especiais ..................................................................................................... 46
4.5.4.1 SUID (set user id) .................................................................................................... 46
4.5.4.2 SGID (set group id) .................................................................................................. 47
4.5.4.3 Sticky (sticky bit) ...................................................................................................... 47
4.5.4.4 Vantagens (SUID, SGID e Sticky bit) ...................................................................... 48
4.5.5 Sudo ............................................................................................................................... 49
4.6 Resumo ................................................................................................................................. 49

Editores de texto (Nano e VIM)..................................................................................................... 51


5.1 Nano ...................................................................................................................................... 51
5.2 Vim (VI iMproved) .................................................................................................................. 52
5.2.1 Comandos comuns ......................................................................................................... 54
5.2.1.1 Salvar/Sair (modo de comando) .............................................................................. 54
5.2.1.2 Movimentação (modo normal) ................................................................................. 54
5.2.1.3 Saltos (modo normal) .............................................................................................. 55
5.2.1.4 Editar ....................................................................................................................... 55
5.2.1.5 Desfazer (modo normal) .......................................................................................... 56
5.2.1.6 Buscar/Substituir (modo normal) ............................................................................. 56
5.3 Nano ou Vim .......................................................................................................................... 56
5.4 Resumo ................................................................................................................................. 56

Instalar, atualizar e remover software ......................................................................................... 58

www.tinarede.com.br
6.1 Pacotes .................................................................................................................................. 58
6.2 Gerenciador de pacotes ........................................................................................................ 58
6.3 Repositório ............................................................................................................................ 59
6.4 Apt-get ou Aptitude? .............................................................................................................. 59
6.4.1 Apt-get / apt-cache (básico) ........................................................................................... 60
6.4.2 Aptitude (básico) ............................................................................................................. 61
6.5 Yum ....................................................................................................................................... 62

Gerenciamento de rede ................................................................................................................ 63

7.1 Testando a conectividade ...................................................................................................... 63


7.1.1 Ping ................................................................................................................................ 63
7.1.2 Telnet .............................................................................................................................. 64
7.1.3 Traceroute ...................................................................................................................... 64
7.2 Visualizando e configurando endereço de rede .................................................................... 65
7.2.1 Ifconfig ............................................................................................................................ 65
7.2.2 dhclient ........................................................................................................................... 66
7.2.3 Arquivo de configuração das interfaces de rede ............................................................ 66
7.3 Resumo ................................................................................................................................. 67

Lista de exercícios ........................................................................................................................ 68

Exercícios ...................................................................................................................................... 69

Respostas ...................................................................................................................................... 76

Sugestões de estudo .................................................................................................................... 81

Conclusão ...................................................................................................................................... 82

Contatos ......................................................................................................................................... 83

www.tinarede.com.br
Introdução
A sociedade moderna está totalmente dependente da tecnologia – esse é um fato consumado.
Porém, em muitos aspectos somos meros usuários, ou seja, não compreendemos seu
funcionamento e, por conta disso, nos tornamos reféns daqueles que detêm o poder sobre as
tecnologias que utilizamos no dia a dia. Em alguns casos, somos considerados consumidores de
tecnologia sem voz ativa nem poder de escolha.

Não seja um mero usuário; tome as rédeas do jogo. Não sabe como? Neste momento, estou lhe
convido a estudar, pesquisar e se aventurar no universo do software livre, um universo de
possibilidades infinitas, limitadas tão somente pela sua imaginação e capacidade de inovar.

Venha desbravar novos horizontes, ou melhor, venha por meio desta obra realizar uma mudança
cultural na forma como você interage com o seu computador; deixe de ser um mero espectador
refém das vontades da “máquina”, assuma o controle e passe a ditar as regras do jogo. Construa
um conhecimento sólido e aprenda a solucionar problemas até então considerados “bichos de sete
cabeças”. Dedique algumas poucas horas do seu dia a se encantar com o tema foco desta obra e
garanto que não será uma perda de tempo; ainda que nem todo conhecimento adquirido aqui seja
aplicado no seu cotidiano, todo e qualquer conhecimento é um bem valioso que mais cedo ou mais
tarde irá render alguns bons frutos.

O convite está feito!

Em 2007 iniciei meus estudos e pesquisas sobre o tema Linux. Minha dedicação e vontade foram
tamanhas que, poucos dias após iniciar os estudos, resolvi remover o Windows da minha máquina
e instalar uma distribuição Linux; essa foi sem dúvida uma grande mudança “cultural” na minha
vida. Foi uma longa jornada, porém obtive ótimos resultados com essa mudança. Em virtude da
experiência adquirida, algumas portas se abriram e várias oportunidades de trabalho surgiram;
confesso que foi um ótimo investimento de tempo dedicar atenção ao assunto, mas isso não veio
do nada. Na verdade, eu estava há algum tempo acompanhando a comunidade de software livre,
e fiquei encantado com o entusiasmo e empenho dos membros da comunidade; eles
compartilhavam a experiência de uso e os conhecimentos cultivados na convivência diária com o
uso desse incrível sistema.

Esta obra irá abordar os pontos teóricos e práticos referentes ao sistema operacional GNU/Linux.
Considere-a o seu ponto de partida.

Aproveito para deixar um alerta: engana-se quem pensa que o mercado de TI está carente de vagas
de trabalho. Na verdade, nos últimos anos esse mercado tem enfrentado um sério problema: a falta
de profissionais qualificados para ocupar postos de trabalho nos mais diversos níveis hierárquicos
das organizações. Sendo assim, sugiro que invista em si mesmo; essa será sua melhor aposta
e também a garantia de seu sucesso!

Chega de blá-blá-blá e vamos direto ao que interessa. Boa leitura! ;)

www.tinarede.com.br
Capítulo 1
Linux – introdução teórica
"Quem pensa segundo a opinião dos outros está muito longe de ser um homem livre."
— Autor desconhecido

No capítulo 2 iremos partir para uma abordagem prática. Porém, antes disso, se faz necessário
entender alguns conceitos, filosofias, impactos e a importância do Linux na sociedade. Diante disso,
peço que por gentileza tente não pular os tópicos deste primeiro capítulo introdutório.

Alguns dos termos discutidos neste capítulo serão utilizados até o fim desta obra; sendo assim, seu
entendimento se torna no mínimo obrigatório!

1.1 Um pouco da história


A busca incansável por mudar, aprimorar-se e, principalmente, evoluir levou o estudante de ciência
da computação da Universidade de Helsinki, na Finlândia, Linus Torvalds a iniciar um processo de
aprimoramento do núcleo do Minix, um sistema operacional Unix-like escrito por Andrew
Tannenbaum. Deste aprimoramento surgiu o Linux, um kernel Unix-like, que teve sua primeira
versão oficial publicada no final de 1991.

Ao desenvolvê-lo, Linus quebrou todos os conceitos comerciais da história. Deixou aberto o código-
fonte do sistema, algo que resultaria em uma grande mudança, um fenômeno sem precedentes na
história da evolução humana dos tempos modernos: o software livre.

1.2 Software livre


A ideia do software livre ganhou forma em meados de 1983 pelas mãos do ativista Richard Stallman,
criador do projeto GNU e responsável por fundar em 1985 a Free Software Foundation (FSF),
fundação sem fins lucrativos que tem como objetivo defender o movimento do software livre.

Pode-se dizer que software livre é um movimento social que defende aspectos ligados diretamente
à liberdade que o usuário tem perante o software.

Segundo a FSF, qualquer software/programa deve obedecer a quatro liberdades para ser
considerado um software livre. São elas:

• Liberdade 0 - Liberdade de executar o programa para qualquer propósito;


• Liberdade 1 - Liberdade para estudar como o programa funciona e adaptá-lo às suas
necessidades;
• Liberdade 2 - Liberdade de redistribuir cópias de forma que você possa ajudar outras
pessoas;

www.tinarede.com.br
• Liberdade 3 - Liberdade para melhorar o programa e disponibilizar as melhorias para o
público, de forma que toda a comunidade possa se beneficiar delas.

Para garantir as liberdades 2 e 3 é imprescindível ter acesso ao código-fonte do programa.

O conceito de software livre se opõe às diretrizes do software proprietário, mas


não às do software que é vendido almejando lucro (software comercial).

Cuidado: não confunda software livre (free software) com software grátis
(freeware).

A definição oficial de software livre pode ser encontrada no site do projeto GNU, ao acessar o link:
http://www.gnu.org/philosophy/free-sw.html

1.3 Open source (código aberto)


Open source e software livre são a mesma coisa? Mais ou menos; existem diferenças sutis, porém
ambos tentam nos garantir liberdades e direitos perante o software.

A Open Source Initiative (OSI) tenta ser mais flexível do que a Free Software Foundation na
classificação de software. Para tanto, dita dez regras utilizadas para classificar um software como
open source; são elas:

1) Distribuição livre: A licença não deve restringir de nenhuma maneira a venda ou


distribuição do programa gratuitamente, como componente de outro programa ou não.

2) Código-fonte: O programa deve incluir seu código-fonte e deve permitir a sua distribuição
também na forma compilada. Se o programa não for distribuído com seu código-fonte, deve
haver algum meio de obtê-lo, seja via rede, seja com custo apenas de reprodução. O código
deve ser legível e inteligível para qualquer programador.

3) Trabalhos derivados: A licença deve permitir modificações e trabalhos derivados, e deve


permitir que eles sejam distribuídos sob os mesmos termos da licença original.

4) Integridade do autor do código-fonte: A licença pode restringir a distribuição do código-


fonte em uma forma modificada apenas se a licença permitir a distribuição de arquivos patch
(de atualização) com o código-fonte, para o propósito de modificar o programa no momento
de sua construção. A licença deve explicitamente permitir a distribuição do programa
construído a partir do código-fonte modificado. Contudo, a licença pode ainda requerer que
programas derivados tenham um nome ou número de versão diferentes do programa
original.

5) Não discriminação contra pessoas ou grupos: A licença não pode ser discriminatória
contra qualquer pessoa ou grupo de pessoas.

www.tinarede.com.br
6) Não discriminação contra áreas de atuação: A licença não deve restringir o uso do
programa por qualquer pessoa em um ramo específico de atuação. Por exemplo, ela não
deve proibir que o programa seja usado em uma empresa, ou para pesquisa genética.

7) Distribuição da licença: Os direitos associados ao programa devem ser aplicáveis para


todos aqueles cujo programa é redistribuído, sem a necessidade da execução de uma
licença adicional para estas partes.

8) Licença não específica a um produto: Os direitos associados ao programa não devem


depender de o programa ser parte de uma distribuição específica de programas. Se o
programa é extraído de uma distribuição e usado ou distribuído dentro dos termos da licença
do programa, todas as partes para quem o programa é redistribuído devem ter os mesmos
direitos que os garantidos em conjunção com a distribuição de programas original.

9) Licença não restritiva a outros programas: A licença não pode colocar restrições em
outros programas que são distribuídos junto com o programa licenciado. Isto é, a licença
não pode especificar que todos os programas distribuídos na mesma mídia de
armazenamento sejam programas de código aberto.

10) Licença neutra em relação a tecnologia: Nenhuma cláusula da licença pode estabelecer
uma tecnologia individual, estilo ou interface a ser aplicada no programa.

As regras acima foram retiradas do endereço http://softwarelivre.org/open-source-codigo-aberto


Fonte oficial em inglês: http://www.opensource.org/docs/definition.php

É importante ter em mente que, em muitos casos, um software livre também pode ser um open
source e vice-versa. A FSF e a OSI não são inimigas, mas possuem pontos de vista divergentes.

1.4 Código-fonte
São basicamente as instruções que formam um programa. Essas instruções são escritas com base
em alguma linguagem de programação, como por exemplo Java, C, Delphi, entre outras.

Ter acesso ao código-fonte do software significa basicamente ter acesso às instruções inscritas
nele em qualquer que seja a linguagem de programação. Mas, como assim? Não poderíamos
simplesmente editar o software? Não, o resultado final de um software normalmente é um arquivo
binário; em outras palavras, este arquivo nada mais é do que uma transformação da linguagem de
programação para uma linguagem de máquina, incompreensiva para nós, meros mortais. Diante
disso se faz necessário ter acesso ao código-fonte para poder estudar e/ou melhorar um software.

1.5 Qual a diferença entre Linux e GNU/Linux?


O Linux nada mais é do que um kernel (núcleo) do sistema; já o GNU/Linux é um sistema
operacional completo, formado pela camada de kernel e pelos demais componentes do projeto
GNU, tais como programas diversos, drivers, interface gráfica etc.

www.tinarede.com.br
O projeto GNU tinha como objetivo criar um sistema operacional completo, gratuito e livre. Quase
tudo estava pronto, porém o GNU ainda não possuía a parte mais importante, um núcleo para o seu
sistema. Foi aí que Linus Torvalds entrou na história, e da união do GNU com o Linux surgiu o
GNU/Linux, que hoje é popularmente conhecido apenas como Linux, nome que não faz justiça a
todos aqueles que contribuíram e continuam contribuindo para o crescimento do sistema
operacional GNU/Linux.

Existe um outro entendimento segundo o qual Linux é o nome dado a qualquer sistema que utilize
o núcleo (kernel) Linux. Porém, não custa nada colocar um GNU antes do nome, né? 😉

1.6 Sistema Operacional (SO)


É um software/programa ou conjunto de programas que tem como função principal gerenciar os
recursos do sistema, tais como quem recebe atenção do processador, quanto de memória
determinado processo irá utilizar, qual a prioridade dos processos etc. Em outras palavras, um
sistema operacional é responsável por realizar uma interface entre o usuário e a máquina,
abstraindo e simplificando a realização de tarefas diversas. Pense no sistema operacional como
uma interface amigável, um verdadeiro amigo, pois sem ele você teria que lidar com a dificuldade
de gerenciar a memória, a prioridade entre os processos e muito mais.

Este conceito é extremamente importante e vasto, mas não nos convém entrar em detalhes neste
momento.

1.7 Licença de software


Todo software quando criado é associado a um documento, que tem como objetivo informar o que
é permitido ou não fazer com aquele software. Esse documento é a licença do software; ela é quem
dita as regras do “jogo”!

1.7.1 GPL
Em geral, o GNU/Linux segue as regras prescritas na GPL (GNU Public License), criada em 1989
e revisada pela primeira vez em 1991, quando resultou na GPLv2 (GPL versão 2). A revisão mais
recente até o lançamento desta obra é a de 2007, a GPLv3 (GPL versão 3). As quatro liberdades
do software livre são garantidas graças à licença GPL.

Para mais informações a respeito da GPL: www.gnu.org/licenses/gpl.html

1.7.2 Copyleft
Este é um termo comum no mundo do software livre; ele é basicamente o oposto do copyright.

Enquanto o copyright se concentra em pontuar as restrições, o copyleft se concentra em pontuar as


permissões consentidas pela licença. Em outras palavras, o copyleft se concentra em garantir que

www.tinarede.com.br
determinados direitos/permissões consentidos por sua licença acompanhem o software durante sua
existência, e que versões derivadas dele carreguem consigo a mesma licença do software original.

1.7.3 Outras licenças

Existem inúmeras outras licenças, algumas compatíveis com a filosofia do software


livre e outras, não. Veja uma lista parcial: www.gnu.org/licenses/license-list.html

1.8 Distribuições Linux


Quando falo em distribuições Linux, estou me referindo ao conjunto formado por kernel, programas
e aplicativos que compõem um sistema operacional do tipo Unix-Like. Como já foi dito, Linux é
somente o kernel do sistema; isso significa que as distribuições Linux utilizam o mesmo kernel,
porém acoplam a si alguns programas e aplicativos conforme a necessidade que levou à criação
daquela “distribuição ou customização” em especial.

Existem algumas distribuições comerciais e outras não comerciais. No caso das distribuições
comerciais, o utilizador paga pelo sistema e recebe suporte técnico para ele; já no segundo caso,
não existe essa cobrança pelo uso do sistema, porém, se surgir algum problema, o utilizador terá
que buscar ajuda em alguma lista de discussão na internet para tentar obter uma solução.

As distribuições não comerciais também são conhecidas como distribuições comunitárias; um bom
exemplo é o GNU/Linux Debian, um sistema operacional disponibilizado gratuitamente, mantido
por uma comunidade de desenvolvedores e amantes do universo livre.

Exemplos de distribuições GNU/Linux comunitárias: Debian, Ubuntu, Slackware, Mint...

Os mais íntimos preferem o termo distro Linux ao invés de distribuição Linux.

1.9 Onde o Linux é usado


Um dia o Linux já foi um sistema imaturo e incompreendido. Mas, calma, ele era somente um bebê,
ou melhor, um recém-nascido. O tempo passou e a cada novo aniversário ele adquiriu mais
maturidade e destaque perante a comunidade. Atualmente esse sistema é utilizado em relógios de
pulso, celulares, computadores, mainframes etc.

Recordo-me de dois fatos históricos da trajetória desse sistema: o primeiro foi em 2001, quando a
IBM anunciou o investimento de 1 bilhão de dólares em Linux; já o segundo foi em julho desse
mesmo ano, quando a NASA anunciou o lançamento de um assistente pessoal de satélite baseado
em Linux.

Você pode nem imaginar, mas grandes estúdios de animação, tais como Pixar Estúdios, Lucas
Arts e DreamWorks já utilizaram ou ainda utilizam o Linux na renderização de suas obras. Alguns

www.tinarede.com.br
bons exemplos de obras renderizadas utilizando o Linux são: O Senhor dos Anéis, Vida de Inseto
e Shrek.

1.10 Qual é a melhor distribuição Linux?


Vixi, calma lá! Não existe a melhor distribuição; existe aquela que é mais adequada às suas
necessidades. Listarei abaixo as minhas preferências:

• Servidor: Para montar servidores gosto muito de utilizar a distribuição Debian; essa é uma
distribuição comunitária muito famosa e com uma comunidade altamente ativa.

• Uso pessoal: Em meu desktop e notebook gosto de utilizar o Linux Mint; essa distribuição
já vem por padrão com uma suíte de multimídia e software básicos pré-instalados. A distro
em questão também possui uma central de software, ou seja, um local onde você tem um
catálogo de itens que podem ser baixados e instalados automaticamente, sem necessitar
de nenhuma interação humana. Mais simples que isso, impossível.

Então, Debian é a melhor opção para montar servidor e Linux Mint para uso pessoal? Não; essas
foram as melhores opções para mim, mas cada um de nós vê o mundo de uma forma diferente e
possui necessidades distintas. Sugiro que faça como eu: teste outras distribuições Linux até
encontrar sua cara-metade.

Em alguns casos gosto inclusive de usar o CentOS para servidor e o Ubuntu para uso pessoal,
porém a minha maior preferência é pelos sistemas citados no início deste tópico.

1.11 Os benefícios de uma distribuição Linux


Ah, os benefícios, palavra amada e cobiçada por nós, meros mortais! Os benefícios são inúmeros;
por este motivo listarei abaixo somente os mais relevantes:

• Segurança: Esse é um assunto que poderia render facilmente várias páginas, porém não
pretendo me aprofundar nele, uma vez que não representa o foco principal desta obra. Os
tópicos abaixo possuem a função de expor os pontos fortes no quesito segurança das
distribuições Linux:

o Atualização constante: Possui atualizações regulares, o que se deve em parte ao


fato de seu código ser aberto; como todos têm acesso às fontes do sistema, quando
alguém identifica algum problema ou uma possível melhoria uma discussão é
iniciada dentro da comunidade de software livre. Poucos dias depois, se não no dia
seguinte, uma correção é disponibilizada;

o Superusuário: O grande erro dos usuários de Windows é utilizar o sistema


operacional com a conta de administrador; isso abre brecha para que malware se
instalem no sistema. Já as distribuições Linux criam por padrão duas contas de
usuário durante a etapa de instalação, o root (superusuário) e um usuário comum.

www.tinarede.com.br
Ao utilizar a máquina com o usuário comum, já elevamos nosso grau de segurança.
Existem ainda as contas de usuário de sistema/serviço. Falaremos delas mais
adiante;

o Firewall no nível de kernel: Por padrão, o firewall das distribuições Linux está
presente dentro do próprio kernel, ou seja, faz parte do núcleo do sistema, o que
adiciona 1 ponto extra no quesito segurança; em capítulos posteriores falaremos
sobre este recurso.

• Custo/benefício: Seu custo de aquisição pode ser igual a 0 (zero). Caso queira, você
poderá adquirir seu futuro sistema operacional sem pagar nada, ou até mesmo montar um
ambiente inteiro sem tirar um centavo do bolso. Os software e suítes de aplicativo podem
seguir essa mesma filosofia;

• Facilidade de usar e manter: Atualmente as distribuições Linux são altamente intuitivas e


de fácil utilização. A interface gráfica pode ser rica e altamente elegante, satisfazendo desta
forma todos os “paladares”;

• Customização 100%: Essa é uma vantagem que o software proprietário não dá: a liberdade
para modificar o código-fonte e/ou redistribuir o resultado final desse trabalho;

• Reconhecimento de hardware: Normalmente, após a instalação de uma distribuição Linux,


não será necessário ter o trabalho de correr atrás dos drivers de áudio, vídeo, impressora
etc. Na minha opinião esse é um benefício e tanto!

Os benefícios listados acima serão abordados na prática em capítulos posteriores, então fique
tranquilo; até o fim desta obra garanto que, no mínimo, você será um(a) amante de Linux. 😂

Está pensando em montar um negócio? Então considere utilizar alguma


distribuição Linux como sistema operacional; seu custo de implantação
provavelmente será igual a zero, sem mencionar o fato de que você poderá ter
acesso a software e suítes de escritório igualmente equivalentes em termos de
custo.

1.12 Por trás da interface gráfica


No início desta obra, convidei você a deixar de ser um mero usuário, refém das vontades da
máquina, mas para isso é necessário deixar de lado a “cultura do botão” e passar a entender como
as coisas funcionam por baixo da interface gráfica. Para ser capaz de submeter o sistema a suas
vontades, é necessário se aventurar na linha de comando do GNU/Linux, uma telinha preta que
deixa você com a maior cara de nerd e que pode lhe dar acesso total ao sistema! 😅

A “cultura do botão” se aplica às pessoas que carregam o seguinte lema: “me dê um botão que eu
clico”. Sem dúvida, as mentes mais engraçadinhas estão fazendo piada depois disso; não os culpo,

www.tinarede.com.br
também ri até chorar! 😂

Deixar de lado o entendimento de algo para se apegar com afinco à interface gráfica pode nos
render muita dor de cabeça. A perfumaria visual chamada de interface gráfica deve acima de tudo
agradar os olhos, ou seja, de uma hora para outra pode sofrer uma reformulação visual que deixe
você desorientado, sem saber onde aquele botão que você tanto utilizava foi parar. Até se adaptar
ao novo visual, você poderá sofrer um pouco, sem falar que a adaptação pode não ser tão rápida.

Uma interface gráfica rica e elegante sempre conquista admiradores e, no fim das contas, somos
todos usuários de alguma interface visual; isso é inevitável, porém é mais do que recomendado
entender como as coisas funcionam por trás dessa perfumaria visual. No mundo GNU/Linux temos
a figura da linha de comando, um recurso que nos dá acesso total ao sistema e nos abre
possibilidades não proporcionadas pela interface gráfica, sem falar que esse recurso não sofre com
a volatilidade dos elementos visuais, ou seja, os comandos estarão sempre lá, aguardando você.

1.13 Resumo
Neste capítulo, entendemos conceitos teóricos básicos e considerados obrigatórios. O
entendimento desses conceitos facilitará sua vida ao longo dos vários capítulos que compõem esta
obra, tornando ainda mais proveitosa sua estadia conosco.

Neste primeiro capítulo entendemos qual é a real diferença entre os termos Linux e GNU/Linux,
software livre e open source. Discutimos ainda questões de relevância comum, tais como qual a
melhor distribuição Linux, onde cada uma é utilizada, sua importância e os benefícios
proporcionados por sua utilização.

Recomendo que realize pesquisas adicionais, consulte outras obras e visite as comunidades de
software livre, com o objetivo de complementar o conteúdo passado por meio desta obra. Posso
garantir que este conhecimento será de grande valia para seu crescimento profissional e,
consequentemente, pessoal.

Chegamos ao fim da parte teórica. Do próximo capítulo em diante, iniciaremos nosso primeiro
contato “íntimo” com o GNU/Linux. Caso queira fazer uma pausa para o café, esta é a hora, pois os
próximos capítulos desta obra prometem fortes emoções!

www.tinarede.com.br
Capítulo 2
Estrutura e funcionamento do Linux
"Quem pensa pouco erra muito."
— Leonardo da Vinci

Para prosseguirmos com este capítulo, é necessário que você tenha uma distribuição Debian
devidamente instalada. Caso não conheça o processo de instalação ou necessite de algum auxílio,
consulte o material de apoio “Linux – Instalando a distribuição Debian”.

Ao longo desta obra utilizaremos a distribuição Debian como referência de estudo, porém, as
técnicas, conceitos e comandos apresentados daqui por diante poderão ser aplicados em qualquer
outra distribuição. Talvez a maior diferença que você pode encontrar entre as várias distribuições
disponíveis seja a localização de arquivos específicos de sistema, porém iremos aprender
comandos e técnicas de pesquisa que nos permitirão localizar qualquer arquivo facilmente.

2.1 Estrutura sistêmica do GNU/Linux


Abaixo temos o esquema visual (layout) da estrutura dos sistemas GNU/Linux:

Figura 1 – Estrutura das distribuições Linux

• Gerenciador de janelas: permite realizar a abertura visual dos software e aplicativos.


Disponível somente quando a interface gráfica está instalada;

• Tty: é uma espécie de terminal virtual. Os tty de 1 até 6 são basicamente terminais de linha
de comando, já o tty7 é reservado para a interface gráfica quando instalada;

• Sistema Operacional e Kernel: estes dois assuntos já foram tratados no capítulo 1;

• Hardware: representa os componentes físicos da máquina.

www.tinarede.com.br
2.2 Terminal Virtual (ttyN)
O GNU/Linux é um sistema multiusuários, ou seja, permite que vários usuários utilizem uma
máquina ao mesmo tempo. Isso é possível graças aos terminais virtuais, que são uma espécie de
console isolada, recurso este que permite que os usuários trabalhem de forma isolada em uma
mesma máquina sem que um interfira na experiência de uso do outro.

Uma das formas mais comuns de vários usuários acessarem e trabalharem ao mesmo tempo em
uma máquina é fazendo uso de conexões remotas. Nos sistemas baseados em Linux, o tipo de
conexão remota mais comum é o ssh (abordado a fundo mais adiante).

Ao trabalhar em um ambiente GNU/Linux temos a possibilidade de utilizar os terminais virtuais para


dividir visualmente tarefas em telas distintas, ou trabalhar em paralelo com mais de um usuário.
Para alternar entre os terminais virtuais (tty) utilizaremos as teclas ALT + F1 até F7, lembrando que
o tty7 normalmente é reservado para a interface gráfica caso a tenha instalado, ou seja,
normalmente teremos 6 tty a nossa disposição, quantidade esta que pode ser alterada por meio de
configuração.

2.3 Introdução ao shell


As distribuições GNU/Linux contam com o shell, um poderoso interpretador de comandos. Em
outras palavras, o shell é um programa de computador que permite ao usuário interagir com o
sistema por meio de comandos, submetidos através do periférico teclado.

O Bash é o shell mais famoso do universo GNU/Linux; sua popularidade se deve aos inúmeros
recursos que possui, que facilitam a vida do usuário. Ao longo desta obra iremos trabalhar com o
bash, porém existem outras soluções de shell, cada qual com suas características próprias. Seguem
alguns exemplos: csh, ksh, tcsh e zsh.

Shell, terminal e linha de comando são praticamente sinônimos recursivos.

2.3.1 Logon e logout


O logon nada mais é do que o ato de entrar no sistema. Já o logout é a saída do sistema, ou seja,
o ato de encerrar sua sessão. No capítulo seguinte veremos como efetuar o logout.

2.3.2 Superusuário (root), usuário comum e usuário de sistema/serviço


Existem basicamente duas formas de abrir um shell no Linux: uma é como superusuário (root) e
outra é como usuário comum. Vejamos as particularidades de cada uma:

• Superusuário: Nos termos técnicos do universo Linux, chamamos este usuário de root. Ele
é o usuário master do sistema, ou seja, o administrador. Tem acesso irrestrito;
• Usuário comum: Com exceção do root, todos os usuários se enquadram nesta categoria.
Possuem acesso limitado ao sistema;

www.tinarede.com.br
• Usuário de sistema/serviço: Estes usuários são utilizados para controlar serviços no
sistema, não possuem senha nem diretório home.

Para identificar o nível de acesso do usuário logado, basta observar o símbolo que se encontra à
esquerda do cursor; caso seja uma # (tralha), significa que o usuário logado é o root; se for um $
(cifrão), significa que este é um usuário comum.

2.4 Primeiro contato com o shell


Chegou a hora de brincar com o shell, terminal ou linha de comando, como preferir. Inicie o seu
sistema Debian. Caso ainda não o tenha instalado ou não se lembre como realizar a inicialização
do sistema, consulte o material de apoio “Linux – Instalando a distribuição Debian”.

Figura 2 – Logon

O processo de inicialização pode levar alguns segundos; vai depender do hardware da sua
máquina. Quando o resultado da sua tela for equivalente ao da Figura 2, isso significará que o
sistema já está disponível para uso. Observe a primeira linha: o tty1 (destacado de verde) é o
terminal virtual que está comportando essa sessão. Utilize usuário e senha criados na etapa de
instalação:

• Informe o login user e pressione ENTER;


• Será solicitada a password (senha). Digite user e pressione ENTER.

Ao digitar a senha, nenhum output será apresentado no terminal; não se assuste,


isso é um truque de segurança. Continue digitando e ao fim pressione ENTER.

Caso não tenha errado o nome do usuário nem a senha, teremos um logon efetuado com sucesso:

Figura 3 – Tela após o logon

Na Figura 3, o retângulo vermelho é o que chamamos de banner. Ele será apresentado sempre que
um usuário efetuar logon. Seu texto padrão pode ser personalizado, porém vamos deixar isso para
um outro momento.

www.tinarede.com.br
Ao acessar o sistema, nosso diretório inicial será /home/user, ou seja, nosso user tem um diretório
pessoal dentro do diretório /home. Já o diretório pessoal do usuário root é o /root. Mais adiante
entenderemos melhor como isso funciona. Uma coisa de cada vez. 😉

Para compreender melhor a última linha da Figura 3, iremos dividi-la em partes:

• user: nome do usuário logado, definido na etapa de instalação;


• @: separador;
• debian: hostname (nome da máquina) definido no processo de instalação;
• $: indica que o user é uma conta de usuário comum;
• _: o underline indica o espaço destinado à inserção de comando por parte do utilizador.

2.5 Árvore de diretórios (“pastas”)


A organização de diretórios do GNU/Linux tem o padrão Filesystem Hierarchy Standard (FHS), ou
em português Hierarquia Padrão do Sistema de Arquivos. A principal vantagem deste conjunto de
regras é a capacidade de predizer o local dos arquivos. Segue lista padrão de diretórios definidos
pela FHS:

Diretório Descrição

/ Nível raiz

bin Diretório de comandos programas essenciais ao sistema. Acesso de nível público

boot Arquivos de configuração do sistema de arranque

dev Arquivos de dispositivos

etc Arquivos de configuração de sistema

home Neste local ficam armazenados os diretórios pessoais dos usuários comuns

lib Bibliotecas compartilhadas e módulos do kernel

media Ponto de montagem para dispositivos removíveis

mnt Ponto de montagem temporário para sistema de arquivos

proc Diretório virtual onde ficam as informações do sistema obtidas do Kernel

root Diretório pessoal do usuário root

run Dados de execução variáveis

sbin Binários essenciais ao sistema; somente o root tem privilégio para executá-los

sys Contém praticamente as mesmas informações do diretório proc, porém, mais organizadas

Arquivos temporários. Por exemplo: dados temporários criados por programas ou usuários
tmp
são salvos aqui. Ao reiniciar o sistema, este diretório é esvaziado

Diretório onde ficam os programas dos utilizadores (/usr/bin), bibliotecas (/usr/lib),


usr
documentação (/usr/share/doc) etc. São programas portáveis e não essenciais ao sistema

var Dados variáveis. Por exemplo, arquivos de log

srv Dados para os serviços disponibilizados pelo sistema e de acesso público

www.tinarede.com.br
opt Pacotes de software e aplicações adicionais que não fazem parte do sistema

Tabela 1 – Hierarquia Padrão do Sistema de Arquivos GNU/Linux

Qualquer GNU/Linux deve conter fisicamente na partição raiz, os diretórios /bin,


/sbin, /etc, /lib, /etc e /dev. Do contrário não será possível iniciar o sistema.

Ao longo desta obra voltarei a mencionar os diretórios mais relevantes e/ou importantes ao nosso
estudo, conforme a necessidade for surgindo.

2.6 Case-sensitive
O GNU/Linux é um sistema case-sensitive, ou seja, diferencia letras maiúsculas de minúsculas.
Sendo assim, tome muito cuidado ao referenciar diretórios e arquivos. Por exemplo:

• /bin • /biN
• /Bin • /BIN

Apesar da semelhança, os quatro diretórios citados acima são referências distintas. O mesmo se
aplica a comandos. Por exemplo:

• pwd • pWD
• Pwd • PWD

A escrita correta desse comando tem todos os caracteres em caixa baixa; ao escrever de forma
diferente o sistema irá apresentar uma crítica de que o comando não existe ou não foi encontrado.

2.7 Referências absoluta e relativa


Existem duas vias para se apontar um alvo/destino em um ambiente GNU/Linux:

• Referência absoluta: caminho completo (absoluto) para o diretório, arquivo ou recurso;


• Referência relativa: este é um apontamento que leva em consideração a sua posição atual
no sistema.

Vamos a um exemplo prático. Para isso, considere a estrutura da figura abaixo:

Figura 4 – Estrutura de diretórios

www.tinarede.com.br
Veja as formas possíveis de se deslocar do diretório var para o bkp (Figura 4):

• Referência absoluta: /etc/bkp


• Referência relativa: ../etc/bkp

Os 2 pontos (..) indicam um nível acima. Vamos supor que você está no diretório bkp (Figura 4) e
deseja voltar para a raiz do sistema (/); então você necessita subir 2 níveis, e para isso deve usar
a representação (../..). Os primeiros 2 pontos tiram você do diretório bkp e o colocam dentro do etc;
a próxima ocorrência irá tirá-lo do diretório etc e, dessa forma, você estará no diretório raiz,
representado por um sinal de barra (/).

Devemos ter muita atenção ao utilizar referência relativa, pois este tipo de apontamento é variável.
Para fixar o entendimento, veja os exemplos abaixo, baseados na estrutura da Figura 4:

Diretório atual: var Diretório atual: arquivos


Destino: arquivos Destino: bkp
Via referência absoluta: /etc/arquivos Via referência absoluta: /etc/bkp
Via referência relativa: ../etc/arquivos Via referência relativa: ../bkp

Na referência absoluta nosso ponto de partida é a raiz do sistema; como tudo está abaixo deste
nível, independentemente de onde estiver no sistema, o destino será sempre alcançado. Já na
referência relativa esse apontamento tem que se adequar a sua posição atual no sistema, ou seja,
acaba sendo uma forma relativa/volátil de apontar um destino.

2.8 Entrada e saída padrão de dados


Ao trabalhar com GNU/Linux, ouvimos falar muito de entrada e saída padrão de dados; diante
disso se faz necessário compreender melhor este conceito. A entrada padrão de dados é o
teclado e a saída é a tela do computador.

Existem três termos que fazem parte deste conceito. São eles:

• stdin, que representa a entrada padrão de dados => Teclado


• stdout, que representa a saída padrão de dados => Tela
• stderr, saída padrão de erros => Tela

2.9 Resumo
Neste capítulo tivemos nosso primeiro contato prático com o GNU/Linux, entendemos o
funcionamento do sistema e seu padrão organizacional, capaz de predizer o local onde determinado
arquivo será alocado.

Conceitos como logon, logout, terminal virtual e shell foram devidamente apresentados.

A proposta de conteúdo para o capítulo 2 poderia render facilmente mais algumas páginas, talvez

www.tinarede.com.br
algumas dezenas. Porém, este grau de detalhamento adicional poderia quebrar a proposta de
objetividade, simplicidade e relevância, considerando a temática de conteúdo essencial proposta
para esta obra.

www.tinarede.com.br
Capítulo 3
Comandos Programas essenciais
"Busco um instante feliz que justifique minha existência"
— Fiódor Dostoiévski

O termo comando é uma forma popular de fazer referência aos programas comuns a quase todas
as distribuições GNU/Linux. Em geral um comando nada mais é do que um arquivo binário.

Ao executar os comandos listados mais adiante, não se esqueça que o caractere cifrão ($), presente
à esquerda do cursor, indica que este pode ser executado pelo usuário comum; já a tralha (#) indica
que este deve ser obrigatoriamente executado pelo usuário root.

3.1 Comandos Programas básicos


Esta obra não tem como objetivo ser um guia/manual de comandos, ou seja, irei citar de forma
resumida os comandos e opções mais utilizados no dia-a-dia, detalhando e me aprofundando
somente em casos excepcionais.

3.1.1 help
É uma opção de ajuda rápida, utilizada para consultar as opções disponibilizadas por um programa.
Sua sintaxe é:

$ [comando] --help

Devemos substituir o marcador [comando] pelo programa para o qual desejamos obter ajuda. Veja:

Figura 5 – Retorno do comando de ajuda

A seta em vermelho (primeira linha) mostra que foi solicitada ajuda para o comando ls (apresentado
adiante). Na segunda linha temos uma demonstração de como o comando deve ser usado; já nas
linhas seguintes temos o restante dos parâmetros aceitos pelo programa, neste caso o ls.

www.tinarede.com.br
3.1.2 man
As páginas de manual do GNU/Linux contêm a descrição dos comandos, bem como listam de
forma detalhada as opções disponíveis e como elas funcionam. Sua sintaxe é:

$ man [opções] [comando]

Opções internas (disponíveis no manual):

• q: sai do manual;
• PageDown ou f: rola 25 linhas para baixo;
• PageUp ou w: rola 25 linhas para cima;
• Seta para cima ou k: rola 1 linha para cima;
• Seta para baixo ou e: rola 1 linha para baixo;
• p ou g: volta para o início;
• h: mostra a página de ajuda do manual.

Opções:

• -k: caso não saiba o nome de um determinado comando, basta utilizar essa opção para
buscar ocorrências dentro do manual e retornar os possíveis comandos.

3.1.3 logout
Os comandos abaixo podem ser utilizados para encerrar nossa sessão no terminal:

$ exit
$ logout
$ <CTRL> + d

3.1.4 shutdown, poweroff e halt


Os comandos abaixo podem ser utilizados para desligar a máquina:

# shutdown -h now
# poweroff
# halt

Todos os comandos acima possuem basicamente a mesma finalidade, porém, o comando


shutdown permite agendar desligamento, programar reboot etc. Experimente utilizar o help para
obter ajuda; exemplo: “shutdown –help”.

Pessoalmente gosto de utilizar o comando poweroff para desligar a máquina. Ele funciona como
um alias (apelido) para o “shutdown -h now”, com a vantagem de ser curto e fácil de decorar.

www.tinarede.com.br
3.1.5 reboot
Comando responsável por reiniciar a máquina:

# reboot

3.1.6 pwd (print working directory)


Imprime na tela o caminho absoluto para o diretório corrente (atual):

$ pwd

Resultado:

Figura 6 – Retorno do comando pwd

3.1.7 history
Lista os comandos mais recentes executados no terminal. Este é um recurso do bash (discutido no
capítulo anterior). Exemplo de uso:

$ history

Resultado:

Figura 7 – Retorno do comando history

Observe que temos no lado esquerdo um valor numérico identificando cada comando. Aproveito
para deixar a seguinte dica: se você utilizar um sinal de exclamação + o número + a tecla ENTER,
por exemplo, !7, no meu caso iria ser autoexecutado o comando da posição 7, ou seja, essa
instrução serve como atalho para comandos presentes no history (histórico).

Caso seu shell seja o bash, utilize as setas para cima e para baixo para percorrer o histórico.

Para descobrir o shell atualmente em uso, basta imprimir o valor da variável de sistema $0:

www.tinarede.com.br
$ echo $0

Resultado:

Figura 8 – Lista o shell atual

O retorno acima confirma que estamos usando o bash. Caso queira mudar para outro shell, por
exemplo, sh, basta digitar sh e pressionar ENTER; já para sair de um shell basta digitar exit e
pressionar ENTER.

3.2 Manipulação de arquivos e diretórios


O conjunto de comandos a seguir nos permite identificar o diretório corrente, listar, copiar, mover e
excluir arquivos e diretórios.

3.2.1 ls (list)
Utilizado para listar o conteúdo de um diretório ou as propriedades de um arquivo. Sintaxe:

$ ls [opções] [caminho_do_arquivo_ou_diretório]

3.2.1.1 Listando o conteúdo do diretório corrente


Na ausência do parâmetro de caminho, este comando lista o conteúdo do diretório corrente:

$ ls

Resultado:

Figura 9 – ls sem retorno

O comando ls executado acima não retornou nenhum valor, o que significa que no diretório corrente
não existe nenhum conteúdo para ser listado, ou que os conteúdos estão ocultos (isso será discutido
mais adiante).

3.2.1.2 Opções (atributos de listagem)

As opções podem listar mais informações ou até mesmo formatar os dados apresentados:

$ ls -lt /home

www.tinarede.com.br
Resultado:

Figura 10 – ls -lt /home

Iremos analisar a Figura 10 linha por linha. Sendo assim, vamos à 1ª linha:

• ls: lista o conteúdo presente no diretório ou as propriedades do arquivo informado;


• -lt: o sinal de menos (-) indica que o valor seguinte é um atributo (opção). A letra l (L
minúsculo) lista as propriedades do conteúdo retornado, e a letra t é utilizada para ordenar
a lista em ordem cronológica, o que é interessante para diretórios com muitos arquivos;
• /home: diretório a ser considerado como alvo do comando.

Na 2ª linha, o valor “total 4” representa o total de blocos do sistema de arquivo que estão sendo
utilizados pelo conteúdo listado. Este conceito é um pouco avançado, porém, irrelevante ao escopo
desta obra. Sendo assim, deixaremos para tratar deste assunto em uma outra oportunidade.

Já a 3ª linha indica uma sequência de propriedades. Analisaremos cada uma delas:

Figura 11 – Atributos

Respectivamente:

• drwxr-xr-x: no momento vamos nos apegar somente ao primeiro caractere do grupo:


§ - (hífen): arquivo;
§ b: dispositivo de bloco;
§ c: dispositivo de caractere;
§ d: diretório;
§ l: link, equivalente aos atalhos no ambiente Windows;
§ s: socket.
• 2: número de hard links (irrelevante a nosso estudo);
• user user: respectivamente, usuário e grupo. Será mais bem apresentado mais adiante;
• 4096: tamanho do arquivo em bytes;
• Jul 2 00:15: respectivamente, mês, dia e hora de criação;
• user: essa última coluna indica o nome do elemento listado.

3.2.1.3 Listar arquivos ocultos

Para listar um arquivo oculto é muito simples: basta utilizar o atributo -a. Veja:

$ ls -a

www.tinarede.com.br
No exemplo acima estamos listando os arquivos ocultos do diretório corrente, porém, poderíamos
informar outro diretório, ou até mesmo substituir a opção -a por -al (L minúsculo), respectivamente,
para mostrar arquivos ocultos e listar as suas propriedades.

No universo Linux, um arquivo oculto é representado por um ponto final (.) à esquerda de seu nome.
Por exemplo:

• .exemplo1 • .arquivo_oculto

Para tirar a propriedade de oculto, basta renomear o arquivo ou diretório retirando o ponto; já para
ocultar, basta adicionar o caractere ponto. Veremos como fazer isso mais adiante.

3.2.2 cd (change directory)


Muda o diretório atual, ou seja, permite que efetuemos o deslocamento pela hierarquia de
diretórios do sistema. Sintaxe:

$ cd [diretório]

3.2.3 cp (copy)
Permite copiar arquivos e diretórios. Sintaxe:

cp [opções] [origem] [destino]

Opções:

• -i: pergunta antes de substituir arquivos;


• -f: substitui arquivos sem perguntar;
• -v: mostra o progresso da cópia de arquivos;
• -r: copia o diretório e todos os seus arquivos recursivamente.

3.2.4 rm (remove)
Remove arquivos e diretórios. Sintaxe:

rm [opções] [caminho_do_arquivo_ou_diretório]

Opções:

• -f: força a exclusão;


• -v: apresenta o nome dos arquivos à medida que forem removidos;
• -r: exclui recursivamente arquivos e diretórios. Sem este parâmetro só serão excluídos
diretórios vazios.

www.tinarede.com.br
3.2.5 mkdir
Permite criar diretório no sistema. Sintaxe:

mkdir [opções] [caminho1/diretório1] [caminho2/diretório2]

Opções:

• --verbose: mostra uma mensagem para cada diretório criado.

3.2.6 rmdir
Remove um diretório vazio. Sintaxe:

rmdir [caminho1/diretório1] [caminho2/diretório2]

3.2.7 cat (concatenar)


Este comando pode ser utilizado para concatenar arquivos ou ler seu conteúdo. Nesta obra
iremos focar na característica que permite ler/apresentar conteúdo. Sintaxe:

cat [opções] [caminho1/diretório1] [caminho2/diretório2]

Opções:

• -n: numera as linhas apresentadas;


• -s: não mostra mais que uma linha em branco entre os parágrafos.

3.2.8 more
Este comando é utilizado para paginar o resultado apresentado na tela. Sintaxe de uso:

more [opções] [arquivo]

Opções:

• +num: inicia a visualização a partir da linha informada;

Opções internas:

• f, ctrl+f ou barra de espaço para avançar uma página;


• b ou ctrl+b para voltar uma página;
• h: apresenta a lista de opções do aplicativo;
• . (ponto final): repete o último comando aplicado;
• q: encerra a visualização quando pressionado dentro do aplicativo.

www.tinarede.com.br
Uma outra boa alternativa para paginação é o comando less, que é muito semelhante ao more,
porém permite a navegação linha a linha, além da navegação por página igual à do comando more.

3.2.9 cut (cortar)


Permite selecionar parte de um conteúdo, sendo normalmente utilizado para filtrar colunas.
Sintaxe:

cut [opções] [arquivo]

Opções:

• -f [numCampos]: exibe os campos informados;


• -d [caracteres]: define o delimitador a ser utilizado; o padrão é o TAB.

3.2.10 find
Pesquisa por arquivos ou diretórios no sistema. Sintaxe:

find [diretório] [opções/expressão]

Opções:

• -iname [expressão]: faz a busca pelo nome do arquivo ou diretório;


• -maxdepth [num]: nível máximo de diretórios abaixo do diretório de busca;
• -mtime [num]: busca por arquivos modificados [num] dias atrás;
• -size [num]k: busca por arquivos com tamanho igual a [num] Kbytes.
• -type [tipo]: procura por arquivo do [tipo]:
§ d: diretório
§ f: arquivo regular
§ l: link simbólico

Exemplos:

$ find /etc -iname casa


$ find / -type f -size +1000k

Na primeira linha, a consulta é feita somente dentro do diretório /etc por qualquer arquivo que
contenha em seu nome a palavra “casa”. Já na segunda linha, o caractere / indica que a consulta
deve ser feita em toda a raiz do sistema, -type f indica que devem ser pesquisados somente
arquivos, e -size +1000k que o tamanho tem que ser superior a 1000 Kbytes.

3.2.11 grep
Faz busca em arquivos. Sintaxe:

www.tinarede.com.br
grep [opções] [expressão] [arquivo]

Expressão:

Palavra ou frase a ser pesquisada; se composta deve ser delimitada por aspas duplas.

Opções:

• -h: não mostra o nome dos arquivos durante a busca;


• -i: ignora diferença entre maiúsculo e minúsculo;
• -v: ignora ocorrências que contenham o valor informado;
• -n: mostra o número da linha onde a ocorrência foi encontrada.

Exemplo:

grep -i '^Conteúdo’ file.txt

O marcador ^ encontra as linhas iniciadas pela palavra “Conteúdo” no arquivo file.txt

3.2.12 head
Lê por padrão as 10 primeiras linhas de um arquivo. Sintaxe:

head [opções] [arquivo]

Opções:

• -n: altera o número padrão de linhas a serem lidas/apresentadas.

3.2.13 tail (lê do fim do arquivo)


Lê por padrão as 10 últimas linhas de um arquivo. Sintaxe:

tail [opções] [arquivo]

Opções:

• -f: permite a leitura constante do arquivo, o que é recomendado para arquivos que estão
crescendo, quando há necessidade de acompanhar o que está sendo inserido em tempo
real;
• -n: altera o número padrão de linhas a serem lidas/apresentadas.

3.2.14 wc (contar)
Conta caracteres, palavras e linhas. Sintaxe:

www.tinarede.com.br
wc [opções] [arquivo]

Opções:

• -l: conta linhas;


• -m: conta caracteres;
• -w: conta palavras.

3.2.15 tar (empacotar e desempacotar)


O empacotamento visa a “pegar” vários arquivos ou diretórios e jogá-los dentro de um “envelope”
único, ou seja, como resultado final teremos um arquivo único. Veja a sintaxe:

$ tar [opções] [arquivo_final.tar] [arquivo1|diretório1] [arquivo2|diretório2]

Opções:

• -c: Cria o arquivo final;


• -z: Especifica o tipo como gzip (.gz);
• -j: Especifica o tipo como bzip2 (.bz2);
• -x: Indica que o conteúdo será extraído;
• -v: Ativa o modo verbose, ou seja, lista todo o processo em tempo de execução;
• -f: É obrigatório, esse comando vem de file (arquivo).

Exemplo:

$ tar -zcf pacote.tar.gz arquivo.txt foto.png /home/user

Conforme pode ser observado, informamos o nome do arquivo a ser gerado, no exemplo acima
pacote.tar.bz, e podemos passar um arquivo, diretório ou uma lista de vários arquivos e diretórios
a serem empacotados. Observe que ao empacotamento foi adicionada a opção -z; isso irá instruir
o tar que, após o empacotamento, ele deve compactar este arquivo com gzip. Já para extrair
poderíamos fazer o seguinte:

$ tar -zxf pacote.tar.gz /diretório_destino

Caso o diretório de destino seja omitido, os arquivos serão extraídos e posteriormente


desempacotados no local em que o comando foi executado.

3.2.16 gzip e bzip2 (compactar e descompactar)


Estes só realizam a compactação de arquivos, ou seja, se tiver diretório no meio da história isso
será um problema. Qual a solução mais simples? Utilize o empacotamento tar para gerar um arquivo
único e posteriormente compacte-o com um dos comandos abaixo:

www.tinarede.com.br
$ gzip [opções] pacote.tar
$ bzip2 [opções] pacote.tar

Opções:

• -d: utilizado para extrair.

Normalmente o bzip2 gera arquivos menores, porém, seu tempo de compactação é um pouco
maior.

3.2.17 Outros comandos


Essa obra não tem como objetivo ser um guia de comandos, logo, deixarei abaixo uma lista de
comandos igualmente importantes, porém, caberá a você buscar mais informações sobre eles:

• chown: altera o dono e o grupo do arquivo ou diretório


• file: determina o tipo de um arquivo
• df: exibe o espaço em disco
• du: informa o tamanho dos objetos
• free: mostra informações da memória RAM e memória SWAP
• date: informa data/hora
• uptime: mostra há quanto tempo o computador está ligado
• uname -a: mostra a versão do kernel
• diff: mostra a diferença entre 2 arquivos
• awk: um cut mais sofisticado que permite busca por expressão regular
• sed: editor de texto linha a linha
• paste: junta arquivos na saída padrão
• whereis: mostra o caminho do binário e das páginas de manual do comando informado
• which: mostra somente o caminho do binário comando informado
• ps: lista processos
• type: revela o tipo do arquivo
• kill: finaliza/mata processos
• time: permite identificar quanto tempo levou a execução de um programa
• touch: cria arquivo vazio
• sudo: permite ao usuário obter privilégios de outro usuário, normalmente do root
• uniq: remove linhas duplicadas

A lista vai muito além dos comandos listados acima, porém, como já foi dito, esta obra não é um
manual de comandos.

Caso queira pesquisar outros comandos, obter definições mais completas e


exemplos de uso para os comandos acima, sugiro que visite o endereço:
http://www.uniriotec.br/~morganna/guia/index_guia.html

www.tinarede.com.br
3.3 Curingas
Os curingas são recursos utilizados para que possamos nos referir a um conjunto de arquivos ou
diretórios de forma genérica, permitindo que mais de um arquivo ou diretório seja manipulado ao
mesmo tempo. Com este recurso somos capazes de realizar pré-seleções e buscas avançadas. As
possibilidades são infinitas; nesta obra iremos focar na sua forma de uso mais cotidiana, contudo,
nada o impede de se aprofundar no assunto ao buscar mais informações na web.

Existem basicamente três tipos de curingas:

• * (asterisco): atua como substituto para uma sequência de caracteres;


• ? (interrogação): atua como substituto para um caractere;
• [ ] (colchetes): atuam como substitutos para um conjunto de caracteres predefinidos.

Exemplos básicos de uso:

No exemplo abaixo, informamos que iremos remover qualquer arquivo/diretório que comece com
“arq”, tenha qualquer sequência posterior e termine com “.txt”:

$ rm arq*.txt

Já neste exemplo iremos remover qualquer arquivo/diretório que comece com qualquer letra,
seguida pela sequência “rquivo”, e finalize com qualquer sequência de caracteres:

$ rm ?rquivo.*

Existe ainda a possibilidade de realizar buscas considerando um intervalo alfanumérico ou uma lista
predefinida:

rm arquivo[2,4].txt

Na sentença acima estamos removendo o arquivo2.txt e o arquivo4.txt, porém, se no lugar da


vírgula tivéssemos colocado um hífen (-), removeríamos o intervalo que vai de 2 a 4.

Os curingas podem ser utilizados no sistema como um todo, não somente com o comando rm.

3.4 Utilizando | (pipe) para direcionar o processamento


O pipe, representado por uma barra ( | ), permite enviar a saída (stdout) de um programa para a
entrada (stdin) de outro; este recurso é muito interessante, pois permite que o programa seguinte
continue o processamento dos dados. Exemplo:

ls /etc | sort

www.tinarede.com.br
No comando acima utilizamos o “ls” para listar os arquivos do diretório “/etc”; inserimos um pipe
para pegar essa saída e mandar para o programa “sort”. Este programa tem a função de ordenar
caracteres alfanuméricos, ou seja, ele irá reordenar em ordem alfanumérica a saída do ls.

É possível encadear quantas instruções forem necessárias; isso vai depender da sua necessidade.

3.5 Encadeando execuções com ; (ponto e vírgula) e &&


Podemos encadear execuções ao utilizar os símbolos ; (ponto e vírgula) e && (dois “e” comerciais).
Existe uma diferença sutil, porém, extremamente relevante entre essas duas formas de encadear
execuções. Veja como utilizá-las:

cd /ettc ; ls /
cd /ettc && ls /

A primeira instrução irá retornar uma lista de diretórios. Já a segunda, uma mensagem de erro
informando que o arquivo ou diretório não foi encontrado.

Ao utilizar ; (ponto e vírgula) somos capazes de encadear numa mesma linha várias instruções a
serem executadas sequencialmente, e independentemente do resultado da instrução anterior a
próxima será executada. Já ao utilizar &&, instruímos o sistema a executar a próxima instrução
somente se a anterior tiver sido executada com sucesso.

No exemplo acima, a linha 2 não realizou a listagem de diretórios pois o /ettc não existe, logo a
instrução “cd /ettc” foi concluída com erro, não passando assim na validação do &&.

3.5.1 Exemplos

ls -l /etc | more
ls -l /etc | wc

Os comandos acima haviam sido apresentados como manipuladores de arquivos, porém, estes
podem ser utilizados com pipe (|) para processar a saída de outro comando.

Essa forma de uso não se limita aos programas apresentados até aqui.

3.5.2 Redirecionar saída com > ou >>


O pipe pega a saída de um comando e joga para a entrada do outro; isso permite um processamento
encadeado.

Já os operadores > e >> permitem redirecionar a saída para um arquivo:

• > (sinal de maior que): permite redirecionar a saída para um arquivo. Caso este arquivo
exista, seu conteúdo anterior será apagado; do contrário, ele será criado;

www.tinarede.com.br
• >> (dois sinais de maior que): permite redirecionar a saída para um arquivo. Caso o arquivo
exista, a saída será adicionada ao seu fim; do contrário, um arquivo será criado.

Exemplo:

ls -l /etc > /tmp/output.txt

A instrução acima lista o conteúdo do diretório /etc e redireciona a saída que seria apresentada na
tela para o arquivo output.txt que não existia no diretório /tmp, e portanto foi criado. Para ver o
fruto de seu trabalho, utilize o comando de leitura cat da seguinte forma:

cat /tmp/output.txt

Viu só? O conteúdo gerado pelo comando ls -l está no arquivo, logo o redirecionamento ocorreu
com sucesso. Este recurso é muito valioso; pode ter certeza de que em algum momento irá precisar
dele para gerar relatórios, salvar lista de arquivos ou até mesmo output de algum shell script (tema
para outro momento).

3.6 Atalhos essenciais


Os atalhos abaixo têm como objetivo facilitar nossa vida. Neste caso em especial, os caracteres
digitados não são case-sensitive, ou seja, tanto faz digitá-los em minúsculo ou maiúsculo, seu efeito
será o mesmo:

• Pressione Back Space para apagar um caractere à esquerda do cursor;


• Pressione Delete para apagar o caractere acima do cursor;
• Pressione CTRL + L ou Home para colocar o cursor no início da linha;
• Pressione CTRL + E ou End para colocar o cursor no final da linha;
• Pressione CTRL + U para apagar o que estiver à esquerda do cursor. O conteúdo apagado
pode ser colado ao pressionar CTRL + Y;
• Pressione CTRL + K para apagar o que estiver à direita do cursor. O conteúdo apagado
pode ser colado ao pressionar CTRL + Y;
• Pressione CTRL + L para limpar a tela;
• Pressione CTRL + C para abrir uma nova linha de comando, descartando a atual;
• Pressione CTRL + D para sair do shell.

3.7 Resumo
O segredo para ter sucesso neste capítulo não está em decorar a lista de comandos, mas sim em
saber que determinada ação pode ser executada. Quando precisar executar a ação desejada, você
pesquisa o comando e utiliza o man e o help para saber como ele funciona. Com o passar do
tempo, você irá naturalmente decorar as opções mais relevantes.

www.tinarede.com.br
Além dos comandos, vimos como utilizar curingas, pipe, redirecionadores de saída e operadores
de encadeamento, porém, nada disso irá fixar-se na mente se você não praticar; então, antes de ir
para o próximo capítulo, sugiro que volte ao início deste e teste todos os comandos passados até
aqui.

Mãos à obra!

www.tinarede.com.br
Capítulo 4
Usuários, grupos e permissões
"Pensa como pensam os sábios, mas fala como falam as pessoas simples"
-- Aristóteles

Um dos recursos do GNU/Linux que mais me encanta é o seu controle de permissões baseado em
usuários e grupos, recurso este que atribui ao sistema do pinguim uma camada extra de segurança.

Neste capítulo iremos aprender a criar usuários e grupos, bem como a manipular suas propriedades
e permissões.

4.1 O que é um usuário


Indivíduo que tem direito ou privilégio de usar ou usufruir de algo. No escopo deste capítulo, o
usuário será um indivíduo que terá ou não permissão para modificar, visualizar e/ou executar algo
no sistema.

4.2 O que é um grupo de usuários


É um conjunto de pessoas ou indivíduos que possuem ou buscam os mesmos objetivos. No escopo
deste capítulo, os grupos são formados por usuários que terão privilégios ou permissões comuns
entre si. É mais simples/rápido gerenciar grupos de usuários do que usuários de forma individual.

4.3 O que são permissões


Segundo o dicionário, são o consentimento, a licença, a autorização dada a alguma coisa. No
universo GNU/Linux as permissões são mecanismos pelos quais restringimos ou autorizamos os
usuários ou grupos a modificar, visualizar ou executar algo.

4.4 Gerenciamento de usuários e grupos


É trivial que todo utilizador de sistemas saiba criar, editar e excluir usuários e grupos. Tendo, é
claro, a consciência da importância desses recursos, de como eles realmente funcionam e seus
benefícios.

Antes de prosseguirmos, é importante que você saiba da existência de dois arquivos altamente
importantes no nível de sistema. São eles:

§ /etc/passwd: é a base onde ficam armazenados os usuários da máquina;

www.tinarede.com.br
§ /etc/shadow: é a base onde ficam armazenadas as senhas (hash) dos usuários;
§ /etc/group: é a base onde ficam armazenados os grupos existentes.

4.4.1 Criar usuário


Existem basicamente duas formas de criar um usuário no sistema. Veja a sintaxe:

# useradd zezinho
# adduser zezinha

• useradd: cria um usuário simples, que não possui senha nem diretório /home;
• adduser: cria um usuário completo, com senha e diretório /home.

Estes nomes de usuários são interessantes para nós, meros mortais, porém, o sistema não os
compreende. Quando um usuário é criado, a ele é atribuído um ID, pelo qual o sistema interpreta e
identifica os usuários. Para consultar um ID, utilize a instrução:

$ id nome_do_usuário

Será retornada uma linha com três colunas:

• uid: id do usuário;
• gid: id do grupo do usuário;
• grupos: id dos grupos dos quais o usuário faz parte.

Conforme já foi dito anteriormente, o arquivo /etc/passwd é a base onde ficam armazenados os
usuários da máquina. Logo, se faz necessário entender que este arquivo é dividido em 7 campos
separados por dois-pontos (:). Os respectivos campos são:

• Nome do usuário (login);


• Senha do usuário (se preenchida com x, então aponta para /etc/shadow);
• ID do usuário;
• ID do grupo principal do usuário;
• Informações pessoais do usuário;
• Diretório /home do usuário;
• Shell padrão do usuário.

Agora que sabemos da existência do arquivo /etc/passwd e de como ele é estruturado, podemos
utilizar o cut para listar o login dos usuários e seus respectivos IDs. Veja:

$ cut -f1,3 -d: /etc/passwd

A opção -f é onde indicamos os campos que desejamos selecionar, o -d é onde informamos o


delimitador, neste caso os dois-pontos, e por fim o arquivo alvo.

www.tinarede.com.br
4.4.2 Editar usuário e senha
Para alterar configurações do usuário, como grupo principal, shell, data de expiração e outras, utilize
o usermod. Darei o caminho das pedras, mas o resto é com você:

# usermod --help

Para alterar a senha do usuário, utilize:

$ passwd

Caso o comando seja executado conforme acima, este irá alterar a senha do usuário que o
executou. Se for informado um login, será alterada a senha do usuário informado, porém, para isso,
você necessita ter privilégio de root.

Já para alterar informações adicionais como nome completo do usuário, telefone etc., utilize:

$ chfn

4.4.3 Excluir usuário


O processo de exclusão da conta de um usuário se dá por meio da instrução:

# userdel -r login

A opção -r é utilizada para remover o diretório /home do usuário; caso contrário, somente o seu
login seria removido.

4.4.4 Criar um grupo


O processo de criação de um novo grupo se dá por meio da instrução:

# groupadd nome_do_grupo

A instrução abaixo permite consultar os grupos e seus respectivos IDs:

$ cut -f1,3 -d: /etc/group


$ cut -f1,3 -d: /etc/group | grep –i nomeDoGrupo

A primeira instrução retorna todos os grupos e seus respectivos IDs. Já a segunda instrução faz um
filtro por meio do grep (-i = ignora diferença entre maiúsculo e minúsculo) e retorna somente o grupo
informado.

www.tinarede.com.br
4.4.5 Adicionar e remover usuário de um grupo
Para adicionar o usuário a um grupo, utilize a sintaxe:

# gpasswd -a nome_do_usuario nome_do_grupo

Para remover o usuário do grupo, utilize a sintaxe:

# gpasswd -d nome_do_usuario nome_do_grupo

4.4.6 Excluir grupo


Para excluir um grupo, utilize a sintaxe:

# groupdel nome_do_grupo

4.4.7 Diretório home do usuário


Ao entrar no diretório home (/home/nome_do_usuario) de algum usuário, é comum que você se
depare com 4 arquivos ocultos; são eles:

• .bash_history: histórico de comandos executados na sessão do usuário;


• .bash_logout: comandos a serem executados no encerramento da sessão do usuário;
• .bashrc: alias para personalização do shell do usuário;
• .profile: comandos a serem executados no início da sessão do usuário.

O arquivo .bash_history é criado dinamicamente. Mas, e os outros? Responderei a essa pergunta


com uma linha de comando:

$ ls -a /etc/skel

No diretório /etc/skel ficam os arquivos que serão copiados para o diretório home do usuário sempre
que uma nova conta for criada. Você pode modificar os arquivos presentes no diretório ou até
mesmo adicionar novos.

4.5 Gerenciamento de permissões


Para uma melhor compreensão do gerenciamento de permissões, faz-se necessária uma
demonstração prática; sendo sim, utilizaremos o arquivo criado abaixo como objeto de estudo:

$ cd /tmp
$ touch arquivo
$ ls -l arquivo

www.tinarede.com.br
Caso tenha executado todas as linhas corretamente, o retorno será algo como:

Figura 12 – Output ls -l arquivo

As letras rwx e o caractere - (sinal de hífen) são utilizados para representar as permissões passiveis
de atribuição a algum elemento do sistema, tais como arquivos e diretórios:

• r = leitura / read
• w = escrita / write
• x = execução / execution
• - (sinal de hífen) = permissão desativada

Ao analisar a ocorrência rw-r--r-- presente na Figura 12, conseguimos identificar que:

• rw-: indicam que o dono do arquivo pode ler e escrever nele;


• r--: indicam que os usuários do grupo podem ler o arquivo;
• r--: as três últimas ocorrências indicam que os outros (qualquer um) podem ler o arquivo.

Já a ocorrência subsequente de user user significa:

• A primeira ocorrência de user faz referência ao proprietário (dono) do arquivo;


• A segunda ocorrência de user faz referência ao grupo que tem permissão sobre o arquivo,
ou seja, qualquer outro usuário que esteja neste grupo irá herdar as permissões do grupo
sobre o arquivo em questão.

4.5.1 Adicionar, remover e definir permissões com chmod


Para adicionar, remover ou definir as permissões, utilizamos símbolos representativos, ou seja,
responsáveis por indicar o “tipo” de operação que está sendo realizada. São eles:

• + (sinal de adição) = adiciona permissões


• - (sinal de subtração) = remove permissões
• = (sinal de igual) = define permissões

As permissões são aplicadas ao dono do arquivo, ao grupo atribuído ao arquivo, a outros


(qualquer usuário) ou a todos. Essa referência de “entidades” é representada pelas letras:

• u = dono
• g = grupo
• o = outros
• a = todos

Para alterar permissões, utilizamos o chmod. Veja:

$ chmod u=w,g=rw,o=rw arquivo


$ ls -l arquivo

www.tinarede.com.br
A instrução acima indica que:

• O tipo de operação executada foi de definição, operação indicada pelo sinal de igual (=);
• O dono (u) do arquivo possui permissão de escrita;
• O grupo (g) possui permissão de leitura e escrita;
• Os outros (o) possuem permissão de leitura e escrita.
• O novo conjunto de permissões após a execução da instrução será --w-rw-rw-

O retorno do “ls -l arquivo” será:

Figura 13 – Permissões

Tente executar a instrução abaixo:

$ cat arquivo

Retorno:

Figura 14 – Permissão negada

Não foi possível ler o arquivo; isso se deve ao fato de que o dono não possui permissão de leitura,
apenas de escrita. Para adicionar a permissão de leitura, execute a instrução:

$ chmod u+r arquivo

Ao tentar ler o arquivo novamente, teremos sucesso. Nenhum dado será apresentado, pois o
arquivo está vazio, porém agora temos permissão de leitura.

As permissões do dono, do grupo e de outros podem ser alteradas de forma individual conforme
pode ser observado na operação de adição executada logo acima, coletivamente ao utilizar a vírgula
para separar o conjunto de “entidades/pessoas” com permissões distintas, ou podem-se ainda
informar todas as “entidades” e respectivamente as permissões desejadas. Não se esqueça que
você pode utilizar a representação a (todos) para atribuir as mesmas permissões a todos os três
conjuntos de pessoas.

4.5.2 Usando chmod com método numérico


Já sabemos para que servem as letras rwx e o caractere - (sinal de hífen), porém ainda não
havíamos visto como representá-los em formato decimal. Veja:

• r (leitura / read) = 4
• w (escrita / write) = 2
• x (execução / execution) = 1

www.tinarede.com.br
• - (sinal de hífen / permissão desativada) = 0

Ao utilizar o chmod com método numérico, representamos o conjunto de permissões por meio de
uma sequência de 3 dígitos numéricos, sendo o menor valor 000 e o maior, 777.

Como a representação no método numérico não se dá por meio de três grupos de três números, é
necessário realizar um cálculo para saber qual número representa um conjunto de permissões. Veja
um exemplo:

Exemplo de permissão Na representação octal

-wx (escrita e execução) 2+1=3

r-x (leitura e execução) 4+1=5

rw- (leitura e escrita) 4+2=6

rwx (leitura, escrita e execução) 4+2+1=7

Para simplificar o entendimento, vamos a uma pequena tabela pré-calculada:

Permissões Octal Binário Descrição

--- 0 000 Sem acesso

--x 1 001 Somente execução

-w- 2 010 Somente escrita

-wx 3 011 Escrita e execução

r-- 4 100 Somente leitura

r-x 5 101 Leitura e execução

rw- 6 110 Leitura e escrita

rwx 7 111 Leitura, escrita e execução

Veja um exemplo de uso:

$ chmod 753 arquivo

Ao analisar a instrução acima, podemos dividir a ocorrência 753 em três partes:

• 7: permissão rwx, na primeira posição representa as permissões do dono;


• 5: permissão r-x, na segunda posição representa as permissões do grupo;
• 3: permissão -wx, na terceira (última) posição representa as permissões dos outros.

www.tinarede.com.br
4.5.3 Umask
Já notou que, ao criar um arquivo ou diretório, este já vem com uma máscara padrão de permissão?
Essa configuração padrão vem da variável de sistema umask.

A variável umask também é um comando programa comum. Execute:

$ umask

Será retornado o valor 0022 (valor padrão), que não faz muito sentido, não é mesmo? Experimente
utilizar o próprio umask para traduzir esse número para algo mais compreensivo:

$ umask -S

Será retornado o valor: u=rwx,g=rx,o=rx. Em outras palavras, esse é o conjunto de permissões


atribuído a qualquer novo arquivo ou diretório criado no sistema.

4.5.3.1 Calcular umask

Fórmula: permissão máxima - permissão desejada =

777
- 755
022

Com o umask 0022, terei o seguinte conjunto de permissão: u=rwx,g=rx,o=rx, que em formato
decimal seria 755.

4.5.3.2 Umask para permissão


Fórmula: permissão máxima - umask =

777
- 022
755

O cálculo acima mostra que o umask 0022 representa o conjunto de permissões 755. O umask é
representado por 4 dígitos; o primeiro representa permissões especiais vistas mais adiante.

4.5.3.3 Alterando umask

Podemos utilizar o próprio comando umask para alterar o valor padrão de permissão. Veja:

$ umask 0077

www.tinarede.com.br
Com essa instrução vamos impor a máscara 700 (o dono pode tudo e os demais não podem nada).
Porém, essa alteração é temporária e será esquecida quando o usuário encerrar sua sessão.

Para fazer a alteração de forma permanente, é necessário modificar o umask na profile do usuário
(/home/.nome_do_usuario/.profile); não realizaremos essa alteração agora pois ainda não
apresentei a você, leitor, os editores de texto, porém tenha em mente essa informação.

4.5.4 Permissões especiais


Além do conjunto de permissões simples que vimos, reading (leitura), writing (escrita) e execution
(execução), existe o conjunto das permissões especiais, composto pelos termos SUID (set user id),
SGID (set group id) e Sticky (Sticky bit).

4.5.4.1 SUID (set user id)


A propriedade SUID pode ser aplicada a qualquer arquivo ou diretório, porém, só terá efeito em
arquivos executáveis. No contexto de sistema, o usuário que executa um programa é dono do seu
respectivo processo, porém, a propriedade SUID nos permite mudar isso de modo que, ao disparar
um programa com essa propriedade, serão herdadas as permissões do dono do programa, bem
como o processo será iniciado com o respectivo ID do dono e não do usuário que disparou o
programa.

No conjunto de permissões “rwsr--r--“, a letra “s” substitui a letra “x” no bloco de permissões do dono
do arquivo para representar uma propriedade SUID. Este campo pode assumir dois valores:

• s: significa que o dono possui permissão de execução;


• S: significa que o dono não possui permissão de execução.

Para atribuir este conjunto de permissões, basta fazer assim:

$ chmod 4744 arquivo_executavel


$ chmod u+s arquivo_executavel

Já vimos como o chmod funciona, então vamos nos atentar somente ao que desrespeita a
propriedade SUID. O primeiro número “4” da sequência “4744” e a letra “s” da expressão “u+s”
representam uma propriedade SUID, que pode ser atribuída ou removida como qualquer outra
permissão.

Por fim, é interessante saber que podemos pesquisar arquivos que contenham essa propriedade
por meio de qualquer uma das instruções abaixo:

$ find /home/ -perm /u=s


$ find /home/ -perm +4000

Caso não tenha ficado claro, é importante salientar que a propriedade SUID faz parte do conjunto
de permissões aplicadas ao dono do arquivo.

www.tinarede.com.br
4.5.4.2 SGID (set group id)

Quando se trata de arquivos executáveis, SUID e SGID possuem um comportamento equivalente,


ou seja, se comportam da mesma forma. A diferença fica por conta de que, quando SGID é aplicada
a um diretório, os novos arquivos e subdiretórios criados dentro dele irão automaticamente assumir
o mesmo ID de grupo do diretório que recebeu a propriedade SGID.

No conjunto de permissões “rwxr-sr--“, a letra “s” substitui a letra “x” no bloco de permissões do
grupo para representar uma propriedade SGID. Este campo pode assumir dois valores:

• s: significa que o dono possui permissão de execução;


• S: significa que o dono não possui permissão de execução.

Para atribuir este conjunto de permissões, basta fazer assim:

$ chmod 2754 arquivo_executavel


$ chmod g+s arquivo_executavel

Já vimos como o chmod funciona, então vamos nos atentar somente ao que desrespeita a
propriedade SGID. O primeiro número “2” da sequência “2754” e a letra “s” da expressão “g+s”
representam uma propriedade SGID, que pode ser atribuída ou removida como qualquer outra
permissão.

Por fim, é interessante saber que podemos pesquisar arquivos que contenham essa propriedade
por meio de qualquer uma das instruções abaixo:

$ find /home/ -perm /g=s


$ find /home/ -perm +2000

Caso não tenha ficado claro, é importante salientar que a propriedade SGID faz parte do conjunto
de permissões aplicadas ao grupo.

4.5.4.3 Sticky (sticky bit)

Quando aplicado a arquivos executáveis, faz com que o sistema mantenha uma imagem deles na
memória; isso irá melhorar o desempenho na próxima execução, mas utilize essa capacidade com
sabedoria: lembre-se que a memória RAM é um recurso limitado. Já em diretórios, essa propriedade
impede que outros usuários possam deletar ou renomear arquivos dos quais não são donos
independentemente das permissões que possuam; somente o dono e o root serão capazes de
executar tais ações.

No conjunto de permissões “rwxr-xrwt“, a letra “t” substitui a letra “x” no bloco de permissões que
representa outros usuários. Este campo pode assumir dois valores:

• t: significa que os outros usuários possuem permissão de execução;


• T: significa que os outros usuários não possuem permissão de execução.

www.tinarede.com.br
Para atribuir este conjunto de permissões, basta fazer assim:

$ chmod 1757 diretório


$ chmod o+t diretório

Já vimos como o chmod funciona, então vamos nos atentar somente ao que desrespeita a
propriedade Sticky bit. O primeiro número “1” da sequência “1757” e a letra “t” da expressão “o+t”
representam uma propriedade Sticky bit, que pode ser atribuída ou removida como qualquer outra
permissão.

Por fim, é interessante saber que podemos pesquisar arquivos que contenham essa propriedade
por meio de qualquer uma das instruções abaixo:

$ find /home/ -perm /o=t


$ find /home/ -perm +1000

Caso não tenha ficado claro, é importante salientar que a propriedade Sticky bit faz parte do
conjunto de permissões aplicadas ao grupo.

4.5.4.4 Vantagens (SUID, SGID e Sticky bit)

Pode ser que você esteja pensando: “mas qual a real vantagem destas permissões especiais?”.
Simples: promover uma camada ainda mais sofisticada de segurança. Calma, não fique estressado;
irei explicar.

Vamos supor que existe um programa que somente o usuário “zezinho” pode executar devido às
suas permissões, porém, um belo dia você é informado que outros usuários também devem ser
capazes de executar este mesmo programa. Quais são as possibilidades possíveis?

• Adicionar os outros usuários ao grupo do “zezinho”? Talvez, mas e se forem dezenas ou


centenas de usuários? Lembre-se de que, ao colocar os usuários no grupo do “zezinho”,
você dará acesso a todos a /home/zezinho e, consequentemente, a todos os seus arquivos;
• Poderíamos criar um novo grupo e adicionar todos os usuários a ele; depois bastaria alterar
o grupo do arquivo com o comando chown. Mas, novamente, isso daria muito trabalho e não
me parece certo;
• Então, a “melhor” opção é utilizar SUID ou SGID para permitir que os demais usuários ou
grupos sejam capazes de executar o programa.

Já o Sticky bit é um recurso valioso que pode proteger os arquivos, impedindo que sejam excluídos.

Lembre-se de que essas permissões especiais complementam as permissões “simples”


reading/writing e execution.

Por fim, é valido pontuar que:

• s: possui permissão de execução;

www.tinarede.com.br
• S: não possui permissão de execução;
• t: possui permissão de execução;
• T: não possui permissão de execução.

As letras acima substituem a letra “x”, que representa justamente a permissão de execução. Mas
tenha em mente que, se a nova letra for um “s” ou “t”, isso significa que o arquivo possui a permissão
“x” e mais o recurso SUID, SGID ou Sticky bit, dependendo da letra e da posição em que se
encontra. O que estou querendo pontuar é que a permissão de execução é “somada” à permissão
especial aplicada.

4.5.5 Sudo
O sudo faz parte do contexto de gerenciamento de permissões; ele permite que um usuário comum
possa executar uma ação que somente um usuário com privilégios elevados teria autorização para
executar, como por exemplo o root.

O sudo é um comando programa que normalmente já vem instalado na maioria das distribuições, e
sua forma mais comum de uso é:

$ sudo ifconfig

O ifconfig é um programa que será apresentado ainda nos próximos capítulos, porém, só o root tem
permissão para executá-lo. Mas quando utilizamos o sudo estamos indicando que o usuário comum
que está logado deve ser autorizado a executar a instrução seguinte; logo a senha do root será
solicitada e, caso esteja correta, a instrução será executada pelo usuário comum, utilizando-se para
tanto dos privilégios de root.

O sudo permite que os seguintes comportamentos sejam configurados:

• Permitir que somente determinados usuários tenham acesso a executar sudo;


• Limitar o sudo para executar uma lista específica de instruções e programas;
• Solicitar ou não senha para executar determinado programa.

As possibilidades são muitas, logo não irei me aprofundar em mais detalhes; deixarei esse desafio
para você. Boa sorte! 😉

4.6 Resumo
O gerenciamento de permissões sofisticado do GNU/Linux é um dos seus grandes trunfos. Isso é
o que proporciona a esse sistema operacional uma camada de segurança mais robusta.

Neste capítulo, vimos como criar usuários e grupos, e como limitar o acesso destes a diretórios,
arquivos e recursos do sistema, utilizando-se do mecanismo de permissões.

Identificamos ainda quais são os arquivos de sistema que guardam informações, como a senha
(hash), o diretório home e o shell padrão do usuário. Não podemos nos esquecer do umask e do

www.tinarede.com.br
sudo, dois recursos valiosos que certamente merecem a atenção que a eles foi atribuída no grau
que assim foi apresentado.

www.tinarede.com.br
Capítulo 5
Editores de texto (Nano e VIM)
"Eu apenas invento e espero que outros apareçam precisando do que inventei"
-- R. Buckminster Fuller

Em algum momento seremos obrigados a editar um arquivo e manipular seu conteúdo; para que
isso seja possível é necessário que saibamos trabalhar com editores de texto de linha de comando.

Para nosso estudo, separei dois ótimos software para edição de texto; o Nano, considerado simples
e objetivo, e o VIM, uma opção mais sofisticada e cheia de recursos.

5.1 Nano
O GNU Nano (publicado em 2001) foi projetado para ser um substituto livre para o editor de texto
Pico, parte da suíte de e-mail Pine da Universidade de Washington. Ele tem como objetivo ser tão
simples quanto ou até mais simples que o Pico e incorporar recursos extras.

Para abrir o Nano, execute o comando:

$ nano

Veja o “rosto simpático da criança”:

Figura 15 – Tela inicial do editor nano

Por se tratar de um arquivo novo, no canto superior temos a referência Novo Buffer; ao editar um
arquivo, essa referência indicará a ação de modificação e o nome do arquivo.

www.tinarede.com.br
Observe que no canto inferior do editor existe uma barra de opções; para acessá-las, pressione a
tecla CTRL + a letra da opção a ser executada.

Faça um teste: digite algo e pressione CTRL + O para salvar:

Figura 16 – Aviso de documento não salvo

Um aviso será emitido na parte inferior, questionando com qual nome o arquivo deve ser gravado.
Dê um nome qualquer, como por exemplo curso.txt, e pressione ENTER; ao fazer isso o trabalho
será salvo e você voltará para a tela de edição; pressione CTRL + X para sair. Supondo que você
salvou o arquivo com o nome curso.txt, execute o comando “cat curso.txt” e o conteúdo que você
digitou será apresentado na tela.

Mas como se edita um arquivo? Simples; desta forma:

$ nano nome_do_arquivo

É interessante saber que, se você estiver editando um arquivo e tentar sair do editor sem ter salvado
este trabalho, o nano irá questionar se você deseja salvar ou não o trabalho atual. Basta você
escolher a opção desejada e pressionar ENTER.

Pessoalmente, gosto muito de utilizar o nano devido a sua simplicidade, porém, existem momentos
nos quais ele não atende às minhas necessidades. Nestes casos, utilizo o Vim.

5.2 Vim (VI iMproved)


O Vim (publicado em 1991) é uma versão melhorada do antigo VI. Sua interface simplista esconde
recursos poderosos e uma infinidade de possibilidades. Além de ser muito utilizado, principalmente
por desenvolvedores, este editor caiu no gosto de muitos administradores de sistema. Para abrir o
Vim, execute o comando:

$ vi

www.tinarede.com.br
Veja a tela de boas-vindas:

Figura 17 – Tela de boas-vindas do Vim

O Vim pode operar basicamente de quatro formas: modo normal, modo de inserção, modo visual e
modo de comando. Veja as definições:

• Modo normal: falaremos deste mais adiante; por enquanto se apegue somente à
informação de que para entrar neste modo basta pressionar a tecla ESC. Quando o Vim é
iniciado, ele carrega por padrão neste modo;
• Modo de inserção: esse modo é voltado especificamente para a edição de texto; para
acessá-lo, basta entrar no modo normal e pressionar uma das teclas a seguir:
o a (append): inicia o modo de inserção um caractere após o atual;
o A: inicia o modo de inserção no final da linha;
o i (insert): inicia o modo de inserção antes do caractere atual;
o I (i maiúsculo): inicia o modo de inserção no início da linha.
• Modo visual: permite selecionar texto verticalmente, exibindo um destaque visual; para
acessá-lo, basta entrar no modo normal e digitar:
o v: seleção de caracteres;
o V: seleção de linhas;
o ^V: seleção de blocos.
• Modo de comando: falaremos deste mais adiante; por enquanto se apegue somente à
informação de que, para acessá-lo, basta entrar no modo normal e pressionar : (dois-
pontos).

Siga os passos abaixo para uma demonstração prática:

• Execute o comando vi no terminal;


• A tela de boas-vindas será apresentada; pressione a tecla i para entrar no modo de inserção;
• Digite a frase “Bem-vindo ao curso de Linux...”;
• Pressione ESC para voltar ao modo de comando;
• Digite “:wq curso.txt” e pressione ENTER.

A instrução :wq (modo de comando) informa ao editor que desejamos escrever/salvar o texto e
posteriormente sair do editor. O nome do arquivo só é obrigatório caso este ainda não exista, ou

www.tinarede.com.br
seja, quando se trata de um arquivo novo. Já para editar um arquivo existente, utilize a instrução:

$ vi nome_do_arquivo

Veja uma demonstração prática utilizando os modos normal, inserção e comando:

1. No terminal executamos: vi curso.txt;


2. Com o apoio das teclas direcionais, desloque o cursor até a letra L e digite dw;
3. Pressione a tecla i;
4. Digite GNU/Linux e pressione ESC;
5. Digite :wq e pressione ENTER.

Vamos analisar os passos acima:

1. A instrução “vi curso.txt” indica que iremos abrir o arquivo curso.txt;


2. O Vim inicia por padrão no modo de comando; utilizamos as teclas (setas) direcionais para
deslocar o cursor até a letra L e digitamos dw para apagar a palavra Linux;
3. Após apagar a palavra, entramos no modo de inserção ao pressionar a tecla i;
4. Digitamos o que queríamos e voltamos ao modo de comando por meio da tecla ESC;
5. Digitamos :wq (escreve/salva e sai) e pressionamos ENTER para executar o comando.

5.2.1 Comandos comuns


A lista abaixo representa as operações mais comuns, ou cotidianamente mais utilizadas, dentro do
Vim.

5.2.1.1 Salvar/Sair (modo de comando)

• :w = salva o arquivo. É possível passar um parâmetro adicional para nome;


• :x = salva se o arquivo tiver sido modificado;
• ZZ = salva e sai do editor;
• :wq = salva e sai do editor;
• :w! = salva o arquivo mesmo se tiver sido aberto no modo leitura (readonly);
• :q = sai do editor. Se o arquivo não tiver sido salvo, será apresentado um aviso;
• :q! = força a saída do editor sem apresentar aviso;
• :10,20 w! ~ \texto.txt = salva as linhas de 10 a 20 em ~\texto.txt.

5.2.1.2 Movimentação (modo normal)

• k = move o cursor uma linha para cima;


• j = move o cursor uma linha para baixo;
• h = move o cursor um caractere para a esquerda;
• l = move o cursor um caractere para a direita.

www.tinarede.com.br
A todas as 4 possibilidades acima podemos anteceder um valor numérico caso seja de nosso
interesse deslocar o cursor x caracteres ou x linhas de uma única vez. Por exemplo: 5j (desloca o
cursor 5 linhas para baixo).

5.2.1.3 Saltos (modo normal)

• gg = leva o cursor para o início do arquivo;


• G = leva o cursor para o fim do arquivo;
• 0 (zero) = leva o cursor para o início da linha;
• $ = leva o cursor para o fim da linha;
• * = leva o cursor para a próxima ocorrência da palavra em que ele está no momento;
• % = leva o cursor para o parêntese correspondente;
• } = leva o cursor para o fim do parágrafo.

5.2.1.4 Editar

• dl = apaga uma letra;


• dw = apaga uma palavra a partir da posição do cursor;
• dd = apaga a linha atual;
• dˆ ou d0 = apaga da posição atual até o início da linha;
• d$ ou D= apaga da posição atual até o fim da linha;
• dgg = apaga da posição atual até o início do arquivo;
• dG = apaga da posição atual até o fim do arquivo.

A lista acima nos permite apagar parte do texto, porém, o conteúdo apagado na verdade é copiado
para a memória (buffer = área de transferência), o que nos permite deslocar o cursor para outra
posição e utilizar a tecla p para colar o texto na posição desejada, caso seja essa a intenção. Outra
informação igualmente importante é que um valor numérico pode anteceder os comandos dl, dw e
dd, respectivamente para apagar um número x de letras, palavras ou linhas.

Já se sua intenção for copiar o conteúdo sem deletá-lo/apagá-lo, basta utilizar os comandos:

• yl (L minúsculo) = copia uma letra;


• yw = copia uma palavra;
• yy = copia uma linha;
• yˆ ou y0 = copia da posição atual até o início da linha;
• y$ = copia da posição atual até o fim da linha;
• ygg = copia da posição atual até o início do arquivo;
• yG = copia da posição atual até o fim do arquivo.

Assim como ocorre para dl, dw e dd, também podemos anteceder os comandos yl, we e yy com
um valor numérico para representar respectivamente o número de letras, palavras e linhas a serem
copiadas. Por exemplo: 5yy (irá copiar 5 linhas).

www.tinarede.com.br
5.2.1.5 Desfazer (modo normal)

• u = desfaz a última alteração (pode ser repetido);


• U = desfaz todas as alterações feitas na última linha editada.

5.2.1.6 Buscar/Substituir (modo normal)

• /palavra = busca a palavra informada;


• // = repete a busca realizada anteriormente;
• * = após uma busca, pode ser utilizado para levar o cursor até a próxima ocorrência;
• :s/buscar/substitui = busca uma ocorrência e substitui pelo valor informado;
• :1,10 s/buscar/substitui = busca e substitui da linha 1 até a 10;
• :1,$ s/buscar/substitui = busca e substitui da linha 1 até o fim do arquivo;
• :% s/buscar/substitui = busca e substitui no arquivo inteiro (equivale ao comando anterior);

Wiki de comandos: https://pt.wikibooks.org/wiki/Vim


Documentação oficial (inglês): http://vimdoc.sourceforge.net/htmldoc/help.html

O Vim é muito completo e permite até mesmo realizar operações complexas baseadas em
expressão regular. As possibilidades são muitas; para mais informações consulte os links
apresentados acima.

5.3 Nano ou Vim


Depende; por exemplo, quando desejo fazer uma edição rápida, utilizo o Nano em razão da edição
simplificada proporcionada por este editor minimalista. Porém, quando desejo editar um arquivo
para realizar buscas avançadas, substituição de valores ou até mesmo manipular grandes porções
de conteúdo, quem me salva é o Vim.

Considere utilizar ambos os editores e com o tempo você verá qual atende melhor cada caso;
recomendo que saiba trabalhar com ambos.

Além dos links acima, considere utilizar o help e o man para consultar os manuais
de ajuda do Nano e do Vim.

5.4 Resumo
O Nano e o Vim são dois ótimos editores, tradicionais em qualquer distribuição GNU/Linux. Mas
não tome estas indicações como sendo as únicas opções que você tem; pesquise e teste outros
editores para então determinar qual será sua escolha final.

Só digo uma coisa: você não conseguirá ir muito longe se não souber utilizar nenhum editor de
linha de comando. Mesmo que o Nano ou o Vim não sejam sua escolha preferida, recomendo que

www.tinarede.com.br
saiba ao menos fazer o uso básico destes. Pode ser que um dia você tenha que lidar com uma
máquina onde só existem estas duas opções!

www.tinarede.com.br
Capítulo 6
Instalar, atualizar e remover software
"Quem pouco pensa engana-se muito."
-- Leonardo da Vinci

Os software no universo GNU/Linux são disponibilizados em forma de pacotes, estruturados


especificamente para cada distribuição.

Neste capítulo irei apresentar os gerenciadores de pacotes mais comuns pertencentes às famílias
Debian e Red Hat. Obviamente, se você estiver utilizando um sistema operacional que não é
derivado de nenhuma das duas distribuições citadas anteriormente, não precisa se desesperar;
consulte a documentação do seu gerenciador de pacotes na internet para saber como ele funciona.

6.1 Pacotes
Os pacotes são conjuntos de arquivos encapsulados, ou seja, conjuntos normalmente compostos
de arquivo binário, arquivos de configuração e arquivos de controle, os quais possuem a função de
instalar e realizar as configurações básicas do software com a finalidade de torná-lo utilizável no
escopo do sistema em que foi instalado. Em palavras simples, um pacote nada mais é que o
instalador de um software.

Assim como citado no início deste capítulo, focaremos nas distribuições Debian e Red Hat; com
isso conseguimos atingir os sistemas derivados, tais como Ubuntu, CentOS, Fedora etc.

Nos sistemas derivados do Debian temos os pacotes de extensão .deb; já nos derivados do RedHat
temos os pacotes de extensão .rpm.

6.2 Gerenciador de pacotes


O gerenciador de pacotes é o software responsável por consultar o repositório à procura dos
pacotes que você indicou para instalação ou atualização. Possibilita ainda efetuar ações de reparo
ou remoção dos pacotes anteriormente instalados no SO.

O processo de instalação de um pacote não é muito simples, porém, essa dificuldade é transparente
para nós; o gerenciador de pacotes é quem faz o trabalho pesado. Ele verifica as necessidades de
cada pacote caso possua dependências; ou seja, caso ele dependa de outro pacote o gerenciador
irá procurar este pacote, baixá-lo e instalá-lo “automaticamente”, a fim de satisfazer as
dependências e então poder prosseguir com a instalação do pacote solicitado por você.

Para os sistemas baseados em Debian temos o gerenciador de pacote apt-get ou aptitude; para
os sistemas baseados em RedHat temos o yum.

www.tinarede.com.br
6.3 Repositório
É um local on-line (internet) ou off-line (mídia) onde o gerenciador de pacotes vai buscar novos itens
passíveis de instalação ou atualização.

Para simplificar, pense em um repositório como sendo um diretório cheio de instaladores; o


gerenciador faz o papel de ir a esse diretório e verificar se o pacote que você solicitou existe lá; se
existir, irá instalá-lo ou atualizá-lo no seu SO.

Na distribuição Debian e em sistemas derivados, a lista de repositórios fica armazenada no arquivo


/etc/apt/sources.list. Veja:

Figura 18 – Lista de repositório Debian

Vamos analisar a Figura 18:

• No início da primeira linha temos um símbolo de tralha (#) indicando um comentário;


• Os pacotes a serem baixados são para o Debian versão 8.5.0 de codinome Jessie;
• Estão sendo considerados ao todo 7 repositórios, sendo 1 em mídia física e 6 remotos.

Recomendo que utilize um editor de texto para comentar a segunda linha do arquivo
/etc/apt/sources.list; do contrário, sempre que utilizar o gerenciador de pacotes este tentará fazer
uma consulta primeiro na mídia física CD/DVD para só então ir ao repositório remoto.

A utilização dos repositórios remotos garante que você terá sempre a versão mais recente do pacote
desejado. Novos repositórios podem ser adicionados à lista conforme for necessário.

6.4 Apt-get ou Aptitude?


Tradicionalmente falando, o apt-get é padrão em qualquer distribuição baseada em Debian, porém
o aptitude vem ganhando cada vez mais espaço. Isso se deve ao fato de que este possui vantagens
técnicas consideráveis, e quem sabe futuramente ele venha a ser o sucessor do apt-get.

Na instalação mais básica do Debian, ou seja, sem os complementos da opção standard, o apt-get
será o gerenciador instalado por padrão. Caso queira utilizar o aptitude, você terá que efetuar sua
instalação utilizando o gerenciador de pacotes presente no momento, ou seja, o apt-get.

Além dos gerenciadores citados aqui, existem outras opções tão boas ou quem sabe até melhores;
vai depender do seu “paladar”. Consulte a documentação da sua distribuição para saber qual
gerenciador de arquivos ela utiliza.

www.tinarede.com.br
6.4.1 Apt-get / apt-cache (básico)

# apt-get update

Antes de instalar ou atualizar um pacote, execute a instrução acima. Isso irá garantir que você
instale a versão mais recente presente no repositório. Como assim? Os gerenciadores de pacote,
em um contexto geral, possuem uma lista local dos pacotes e suas respectivas versões presentes
no repositório remoto; porém, com o passar do tempo, a lista local fica desatualizada em relação à
lista remota, e a instrução acima consulta o repositório e atualiza a lista local.

Para instalar um novo pacote ou atualizar um já existente, podemos utilizar a instrução abaixo:

# apt-get -y install aptitude

Opções:

• -y: assume sim para todas as perguntas, ou seja, você não será questionado se deve ser
instalada a dependência “X” ou realizada a configuração “Y”;
• install: indica que o processo em questão se trata de uma instalação;
• aptitude: nome do pacote a ser instalado; neste caso é o “aptitude”.

Figura 19 – Apt-get install aptitude

Na quarta linha, temos o output “Aptitude já é a versão mais nova”, ou seja, neste caso em especial
o pacote atualmente instalado já é a versão mais recente e, conforme pode ser observado na linha
seguinte, não existem novos pacotes para serem atualizados, instalados nem removidos.

A tecla TAB pode ser utilizada para completar o nome do pacote; existindo mais
de uma possibilidade, seus respectivos nomes serão apresentados em uma lista.

Para pesquisar pacotes utilizamos o apt-cache. Veja como usá-lo:

# apt-cache search tree

Opções:

• search: indica que será realizada uma busca/pesquisa na lista local;


• tree: pacote a ser pesquisado; caso nenhuma linha seja retornada, significa que o pacote
não existe.

www.tinarede.com.br
Já para listar os detalhes a respeito de um pacote podemos utilizar a instrução:

# apt-cache show tree

Opções:

• show: mostra os detalhes do pacote informado;


• tree: pacote a ser consultado.

Para atualizar o sistema operacional, utilize a instrução:

# apt-get upgrade
# apt-get dist-upgrade

A primeira opção faz uma atualização dos pacotes que não possuem dependências, e a segunda
realiza uma atualização completa, baixando dependências conforme forem necessárias.

Por fim, veremos como remover um pacote:

# apt-get remove tree


# apt-get autoremove

A primeira linha efetua a remoção do pacote informado, neste caso do pacote “tree”. Já a segunda
linha é responsável por efetuar a remoção de pacotes órfãos, mantendo desta forma o sistema mais
limpo e organizado. Assim como foi visto em capítulos anteriores, poderíamos encadear ambas as
instruções da seguinte forma:

# apt-get remove tree && apt-get autoremove

6.4.2 Aptitude (básico)


O aptitude é um pouco mais “encorpado” que o apt-get, porém seu funcionamento é praticamente
idêntico; até mesmo as instruções são bem parecidas.

# aptitude update
# aptitude install tree
# aptitude search tree
# aptitude show tree
# aptitude upgrade
# aptitude dist-upgrade
# aptitude remove --purge tree

Todas as instruções acima possuem um comportamento similar às instruções apresentadas no


tópico anterior; consulte o item 6.4.1 para obter um entendimento equivalente.

www.tinarede.com.br
A única particularidade relevante fica por conta da instrução “aptitude remove --purge tree”; neste
caso --purge significa que queremos, além de remover os pacotes, remover as configurações
destes.

Algo interessante no aptitude que não encontramos no apt-get é a possibilidade de navegar pela
lista de diretórios. Digite:

# aptitude

Ao pressionar ENTER, temos o seguinte retorno:

Figura 20 – Aptitude

Podemos observar que na segunda linha da imagem existe um conjunto de teclas de funções; por
exemplo, para sair do aptitude basta pressionar a tecla q; já para baixar/instalar/remover um pacote
basta pressionar g.

Navegue entre as listas de diretórios utilizando as setas direcionais, ENTER para acessar os
diretórios e alt+l (L minúsculo) para realizar filtros.

O aptitude é tão simples quanto o apt-get; logo, deixarei você se aventurar nele ao encerrar este
tópico por aqui.

6.5 Yum
O yum, gerenciador de pacote pertencente à distribuição Red Hat e a derivadas dela, possui uma
sintaxe bem parecida com a do apt-get/aptitude.

# yum install pacote


# yum search pacote
# yum info pacote
# yum remove pacote

Como a sintaxe é praticamente a mesma e você já é um expert neste assunto, vamos encerrá-lo
por aqui; não se justifica prolongar o assunto sem uma real relevância/necessidade.

www.tinarede.com.br
Capítulo 7
Gerenciamento de rede
"Pensa como pensam os sábios, mas fala como falam as pessoas simples"
-- Aristóteles

Este conteúdo é vasto e, dependendo da forma como for tratado, pode apresentar características
com alto grau de complexidade. Mas, calma! Parece até que você não me conhece. Não pretendo
complicar as coisas, afinal de contas meu “sobrenome” é simplicidade!

Brincadeiras à parte, vamos ao que interessa. Este capítulo tem como objetivo garantir que você
consiga resolver problemas relacionados à conectividade da sua máquina com o mundo externo.

Para um melhor aproveitamento deste capítulo, é imprescindível que você tenha conhecimento de
alguns conceitos básicos, tais como: ip, máscara de rede, endereço MAC e gateway.

7.1 Testando a conectividade


Os testes abaixo podem ajudar você a determinar se existe ou não conectividade com o mundo
externo, ou até mesmo com outro host da rede local.

7.1.1 Ping
É um utilitário que utiliza o protocolo ICMP para testar a conectividade entre máquinas; este ainda
nos retorna o tempo (time) que levou para receber uma resposta do alvo, que pode ser utilizado
para medir a latência (tempo de espera por uma resposta). Veja:

Figura 21 – Ping

Na ocorrência acima, o número 5 representa o total de testes/saltos que desejo executar antes de
encerrar o teste; caso este parâmetro seja omitido, o teste continuará ocorrendo indefinidamente, e
para encerrá-lo será necessário pressionar o atalho CTRL + C; na sequência vem o endereço alvo
do teste, seja seu nome, seja seu ip.

www.tinarede.com.br
Observe que, ao final do teste, temos um relatório estatístico informando dados como o total de
pacotes transmitidos e recebidos. Na Figura 21 não tivemos nenhuma perda.

Esse teste não é conclusivo e você deve saber que, caso o efetue dentro de uma rede que não seja
a sua, podem existir elementos de segurança que bloqueiam requisições ICMP, algo que poderia
dar a impressão errada de que não existe comunicação externa.

7.1.2 Telnet
O telnet pode proporcionar um teste “mais” assertivo. Veja:

Figura 22 – Telnet

Ao informar o endereço do alvo e a porta, o telnet dispara um teste de conectividade. Na Figura 22


podemos observar a mensagem “Connected to google.com.br”, ou seja, estamos conectados ao
google.com.br, portanto é correto afirmar que nossa conexão externa está ok. Para sair do telnet,
utilize o atalho CTRL + ]. Uma linha de comandos do telnet será exibida; digite quit e pressione
ENTER.

7.1.3 Traceroute
O traceroute é um utilitário de rede que nos permite mapear a rota até um alvo. Veja:

Figura 23 – Traceroute

No teste realizado na Figura 23, somos capazes de observar que existe rota até o destino
google.com.br, tanto é que na segunda linha somos informados que o ip desse destino é
189.6.75.245.

O traceroute tenta mapear a rota; quando não consegue determinar o ip da máquina pela qual ele

www.tinarede.com.br
passou, são retornados * (asteriscos) indicando que naquele ponto não foi possível determinar o ip.

Por padrão, ele realiza 30 saltos e ao fim devolve o cursor para a linha de comandos.

7.2 Visualizando e configurando endereço de rede


Utilizaremos dois programas para lidar com as configurações de rede: o ifconfig e o dhclient.

7.2.1 Ifconfig
Segundo o manual do próprio GNU/Linux, o ifconfig é usado para configurar e posteriormente
manter as interfaces de rede. Para visualizar as configurações de rede, execute:

# ifconfig

O ifconfig deve ser executado com privilégio de usuário root. O resultado será algo parecido com:

Figura 24 – ifconfig

Na Figura 24 temos duas interfaces de rede apontadas pelas setas; uma é a eth0, representando
nossa placa de rede com ip 10.0.2.15, e a outra é a lo, representando a interface de loopback
mantida pelo próprio sistema.

Abaixo temos, respectivamente, as instruções para descer e subir a interface indicada:

# ifconfig eth0 down


# ifconfig eth0 up

Já para definir uma configuração específica de ip e máscara de rede, podemos fazer assim:

# ifconfig eth0 10.1.1.2 netmask 255.255.0.0

www.tinarede.com.br
Neste caso, estamos atribuindo um ip a interface eth0 e posteriormente uma máscara de rede. Essa
configuração é volátil, ou seja, quando a máquina for reiniciada o sistema irá ler o arquivo
/etc/network/interfaces e aplicar as configurações lá presentes.

Para alterar o endereço MAC da interface de rede, podemos utilizar a instrução:

# ifconfig eth0 hw ether 11:22:33:AA:BB:CC

Este conhecimento pode ter sua utilidade, principalmente em momentos em que você está em um
local onde cada endereço MAC tem permissão para usar X horas de conexão, tais como conexões
normalmente disponibilizadas na praça de alimentação de shoppings.

7.2.2 dhclient
O comando dhclient permite efetuar a configuração de uma ou mais interfaces de rede usando o
protocolo DHCP (Dynamic Host Configuration Protocol).

São basicamente duas as instruções relevantes, sendo assim vamos à primeira:

# dhclient -r eth0

Essa instrução libera a configuração atual, ou seja, sua interface de rede ficará sem configuração
alguma. Posteriormente a isso você pode renovar sua conexão solicitando uma nova configuração
desta forma:

# dhclient eth0

Pronto, é só isso. Mais simples impossível, não é? Lembre-se de que você pode utilizar o ifconfig
para ver o que ocorreu para cada uma dessas duas instruções; observe que na primeira instrução
o endereço ip e a máscara de rede somem; já após a execução da segunda instrução, ambos são
atribuídos.

7.2.3 Arquivo de configuração das interfaces de rede


Conforme dito anteriormente, as configurações de rede ficam no arquivo /etc/network/interfaces.
Seu conteúdo padrão é algo parecido com isto:

Figura 25 – /etc/network/interfaces

www.tinarede.com.br
Vamos destrinchar esse arquivo pontuando somente o que é relevante:

• As linhas iniciadas por # são comentários, então não possuem relevância para o sistema;
• auto lo e iface lo inet loopback: interface de loopback mantida pelo sistema;
• allow-hotplug eth0: indica que a interface eth0 deve ser iniciada junto com o sistema;
• iface eth0 inet dhcp: indica que a configuração será atribuída via protocolo DHCP.

Mas e se eth0 fosse estática, ou seja, não tivesse atribuição via DHCP? Como ficaria esse arquivo
de configuração após a edição? Seria algo mais ou menos assim:

Figura 26 – Configuração estática da interface de rede

Foi necessário tão somente informar que a interface eth0 não receberia mais atribuição via DHCL,
mas sim de forma estática (static); logo na sequência passamos às configurações de rede a serem
atribuídas.

Essa configuração será aplicada somente na próxima vez que o sistema for reiniciado. Caso não
possa ou não queira reiniciar a máquina após a configuração, mas deseje ter seu efeito aplicado
imediatamente, basta executar esta instrução:

# /etc/init.d/networking restart

Isso irá reiniciar sua interface de rede e aplicar as configurações presentes no arquivo
/etc/network/interfaces.

7.3 Resumo
Neste capítulo, vimos como realizar testes de conectividade e como configurar uma interface de
rede para endereçamento dinâmico via protocolo DHCP ou via configuração estática.

Os aspectos básicos inerentes a este capítulo foram apresentados considerando uma abordagem
direta, simples e objetiva; com isso não se justifica prolongá-lo, nem que seja uma linha mais. Em
uma obra posterior, poderei entrar em um grau de aprofundamento maior a respeito do
gerenciamento de redes no ambiente GNU/Linux.

www.tinarede.com.br
Lista de exercícios
O questionário abaixo tem como objetivo servir de base ou até mesmo demostrar algumas das
possíveis questões que podem vir a cair na prova 101 da certificação LPI, ou seja, a primeira prova.

Obviamente, a obra “Linux essencial – Por trás da interface gráfica” não foi desenvolvida pensando
exclusivamente na certificação LPI, porém, seu conteúdo tornou propício o lançamento desta lista
de exercícios voltada principalmente para a prova supracitada. Não seria coerente deixar essa
oportunidade “de ouro” passar despercebida!

Considerando o que foi dito vamos em frente; uma lista considerável de exercícios comentados está
à nossa espera. Sugiro que tente fazer toda a lista de exercícios para somente então consultar suas
respectivas respostas!

www.tinarede.com.br
Exercícios
1) Em que arquivo de configuração fica armazenado o shell padrão do usuário?
a. /etc/shells
b. /etc/passwd
c. /etc/profiles
d. /home/shell

2) Quais são as instruções que permitem desligar a máquina imediatamente?


a. poweroff e shutdown off
b. poweroff e shutdown -h now
c. systemoff e poweroff
d. shutdown e off-line

3) Em que diretório ficam as informações do sistema vindas do kernel?


a. /kernel
b. /proc
c. /system
d. /process

4) Abaixo de que diretório ficam os arquivos de configuração no GNU/Linux?


a. /boot
b. /conf
c. /etc
d. /system

5) Abaixo de que diretório ficam os arquivos temporários do sistema no GNU/Linux?


a. /tmp
b. /mnt
c. /temporary
d. /trash

6) O diretório home do usuário root fica em que caminho?


a. /home/root
b. /user/root
c. /root
d. /users/root

7) É correto afirmar que “cd /etc” e “cd /Etc” levam o usuário para o mesmo destino, ou seja,
para o diretório de arquivos de configuração do sistema?
a. Sim
b. Não

www.tinarede.com.br
8) Você está no diretório /etc/network e deve ir para o diretório /tmp. Qual comando irá
proporcionar este resultado?
a. cd ../tmp
b. cd ../.. && cp tmp
c. cd /tmp
d. Todas as anteriores estão corretas

9) Como poderíamos realizar uma busca em todo o sistema pelo arquivo sources.list?
a. find / -name sources.list
b. search / -name sources.list
c. find sources.list
d. locale / sources.list

10) São respectivamente exemplos de entrada e saída padrão de dados:


a. Teclado e impressora
b. Teclado e tela
c. Tela e teclado
d. Monitor e mouse

11) Caso o shell padrão do usuário não seja o bash, qual das instruções abaixo o usuário pode
executar para alterar o shell?
a. set bash
b. Bash
c. bash
d. define bash

12) Como faríamos para remover todos os arquivos que começam com a sequência “arq”, têm
uma quantidade indefinida de caracteres e finalizam com “.txt”?
a. rm arq?.txt
b. rm arq[a-z].txt
c. rm arq[0-9].txt
d. rm arq*.txt

13) Em uma instrução encadeada, como podemos impedir que o processamento continue caso
a instrução anterior não tenha sido concluída com sucesso?
a. Basta separar as instruções com ; (ponto e vírgula)
b. Basta separar as instruções com &&
c. Basta separar as instruções com | (pipe)
d. Basta separar as instruções com , (vírgula)

14) Qual dos comandos abaixo cria um usuário completo, com senha e diretório home?
a. adduser
b. useradd
c. user –create
d. useradd –full

www.tinarede.com.br
15) O número 755 representa respectivamente as permissões que dono, grupo e outros usuários
têm sobre determinado arquivo/diretório ou recurso. Nesse sentido, o número 755
representa que conjunto de permissões?
a. 7 = Leitura/escrita e execução, 5 = Leitura e execução e 1 = execução
b. 7 = Escrita e execução, 5 = Leitura/escrita e execução e 1 = execução
c. 7 = Leitura/escrita e execução, 5 = Leitura e execução e 1 = leitura
d. 7 = Leitura/escrita e execução, 5 = Leitura e execução e 1 = escrita

16) O número 765 representa o conjunto de permissões:


a. r-xrw-r-x
b. rw-rw-r-x
c. rwxrwxr-x
d. rwxrw-r-x

17) O umask 012 representa que permissão?


a. 764
b. 754
c. 765
d. 755

18) A permissão 710 representa qual umask?


a. 67
b. 270
c. 755
d. 167

19) Qual comando me permite listar somente diretórios?


a. ls -d
b. ls -directory
c. list -dir
d. dir

20) Ao utilizar o tail em um arquivo de 50 linhas, este irá retornar por padrão quantas linhas?

21) No bash, qual comando mostra o histórico de comandos executados?

22) No Vim, além das teclas direcionais (setas), quais são as teclas que nos permitem deslocar
o cursor respectivamente para a esquerda, para baixo, para cima e para a direita?
a. h, j, k, l
b. j, k, l, h
c. a, s, w, d
d. a, x, w, d

23) Qual instrução posso utilizar para sair do Vim e salvar o arquivo caso tenha ocorrido alguma
alteração?

www.tinarede.com.br
a. ESC: s
b. ESC: x
c. ESC: m
d. ESC: salve

24) Em que caminho fica o arquivo de configuração do Vim?


a. /etc/vim/vimrc
b. /opt/vim/conf
c. /var/vim/vim_conf
d. /vim/conf

25) Como podemos remover um pacote utilizando o apt-get?


a. apt-get remove nome_do_pacote
b. apt-get rm nome_do_pacote
c. apt-get delete nome_do_pacote
d. apt-get del nome_do_pacote

26) Antes de atualizar ou instalar um pacote com apt-get é recomendado executar qual
instrução?
a. apt-get check
b. apt-get upgrade
c. apt-get update
d. apt-get release

27) Em qual arquivo fica a lista de repositórios utilizados pelo apt-get?


a. /etc/apt-get/list.conf
b. /etc/apt/sources.list
c. /etc/apt/source.list
d. /etc/apt/repo.list

28) Em qual arquivo podemos definir uma configuração de rede estática?


a. /etc/network/conf
b. /etc/network/net.conf
c. /etc/net/network.conf
d. /etc/network/interfaces

29) São exemplos de teste de conectividade:


a. Ping, telnet e traceroute
b. Check, connect e ping
c. Ping, traceroute e connect
d. Telnet, ping e check

30) Que comando remove linhas duplicadas?


a. rmd
b. uniq

www.tinarede.com.br
c. remove -d
d. wc

31) No Vim, que combinação irá apagar a linha atual e as próximas 9 (total 10)?
a. 10dd
b. 10d
c. 10x
d. d10d

32) O arquivo lista.txt contém nome de usuários. Como efetuar a apresentação do conteúdo de
forma ordenada?
a. cat < lista.txt | sort
b. cat > lista.txt | sort
c. sort | lista.txt
d. lista.txt | sort

33) Qual das instruções abaixo faria o mesmo que cat arq1 > arq2?
a. cat arq1 | arq2
b. cat arq1 > arq2
c. cat arq1 && arq2
d. cat arq1 arq2

34) Qual das instruções abaixo ignora linhas que começam com #?
a. grep -v ˆ# arquivo.txt
b. grep -ignore ˆ# arquivo.txt
c. grep -i # arquivo.txt
d. ignore # arquivo.txt

35) Como sair do Vim sem salvar o arquivo?


a. ESC: q!
b. ESC: quit
c. ESC: exit
d. ESC q

36) Independentemente do retorno da primeira instrução, quero executar a segunda. Que opção
me permite isso?
a. ls /var1 && pwd
b. ls /var1 ; pwd
c. ls /var1 | pwd
d. ls /var1 || pwd

37) É correto afirmar que o GNU/Linux é um sistema multiusuários?


a. Sim
b. Não

www.tinarede.com.br
38) É correto afirmar que arquivos e diretórios com sinal de ponto final à esquerda de seu nome
são arquivos ocultos?
a. Sim
b. Não

39) O arquivo texto.txt possui permissão rwxrwxrwx; após a execução do comando “chmod
u=wr, g=r, o=r texto.txt” qual será a permissão final?
a. rwxr--r--
b. rwx---r--
c. rwxr---w-
d. rw-r--r--

40) O arquivo arq.txt possui permissão rw-r--r--; após a execução do comando “chmod u+x
arq.txt” qual será a permissão final?
a. rwxr--r--
b. rw----r--
c. rwxr-xr-x
d. rw-x--x--

41) É correto afirmar que GNU/Linux e Linux são a mesma coisa?


a. Sim
b. Não

42) O kernel é a camada responsável por interagir com o hardware. Isso está correto?
a. Sim
b. Não

43) O atalho CTRL + C pode ser utilizado para abrir uma nova linha de comando descartando a
atual. Essa afirmação está correta?
a. Sim
b. Não

44) No /bin podemos encontrar os binários acessíveis a todos os usuários. Isso está correto?
a. Sim
b. Não

45) Quais são os três caracteres curingas disponíveis?


a. * (asterisco), ? (interrogação) e [ ] (colchetes)
b. * (asterisco), # (tralha) e [ ] (colchetes)
c. ? (interrogação), # (tralha) e [ ] (colchetes)
d. * (asterisco), ? (interrogação) e # (tralha)

46) Qual das alternativas abaixo representa as opções especiais disponíveis no sistema?
a. SUID, SGID e SOID
b. SUID, SGID e Stricky bit

www.tinarede.com.br
c. SGID, SOID e Stricky bit
d. SUID, SGID e Strack

47) É correto afirmar que SUID só tem efeito em arquivos executáveis?


a. Sim
b. Não

48) A propriedade Sticky bit é representada pela letra y. Essa afirmação está correta?
a. Sim
b. Não

49) O comando sudo é utilizado para adicionar novos usuários. Essa afirmação está correta?
a. Sim
b. Não

50) Em que diretório ficam os arquivos executáveis aos quais somente o root tem acesso?
a. /bin
b. /r oot
c. /sbin
d. /system/root

www.tinarede.com.br
Respostas
1. b) /etc/passwd

Explicação:
O shell padrão do usuário é definido por meio da coluna 7 (última coluna) do arquivo
/etc/passwd. Caso queira, pode ser utilizada a instrução “cut -f1,7 -d: /etc/passwd” para
listar respectivamente o usuário e o shell padrão.

2. b) poweroff e shutdown -h now

Explicação:
O comando poweroff é praticamente um alias, ou seja, um apelido para shutdown -h now.

3. b) /proc

Explicação:
O diretório /proc é um diretório virtual, ou seja, construído quando o sistema está em uso.
Neste podemos encontrar informações vindas do/geradas pelo kernel, tais como dados do
processador, memória etc. Veja um exemplo: cat /proc/cpuinfo

4. c) /etc

Explicação:
O padrão FHS (Filesystem Hierarchy Standard) diz que o diretório /etc é o local onde ficam
concentrados os arquivos de configuração do sistema, padrão adotado pelos sistemas
baseados em Linux.

5. a) /tmp

Explicação:
O padrão FHS (Filesystem Hierarchy Standard) diz que o diretório /tmp é utilizado para
armazenar arquivos temporários de sistema, programas e de usuários. Este é esvaziado
quando o sistema é reiniciado.

6. c) /root

Explicação:
O padrão FHS (Filesystem Hierarchy Standard) determina que o diretório pessoal do
usuário root é o /root.

7. b) Não

www.tinarede.com.br
Explicação:
O GNU/Linux é um sistema case-sensitive, ou seja, diferencia letras maiúsculas de
minúsculas. Logo, /etc e /Etc são diretórios distintos e, a menos que você o tenha criado, o
/Etc não existe.

8. d) Todas as anteriores estão corretas

9. a) find / -name sources.list

10. b) Teclado e tela

11. c) bash

Explicação:
Basta chamar o nome do shell que deseja executar. No caso, como se trata de um sistema
case-sensitive, bash é escrito em minúsculo.

12. d) rm arq*.txt

Explicação:
O caractere curinga * (asterisco) atua como substituto para uma sequência de caracteres
na posição em que foi inserido.

13. b) Basta separar as instruções com &&

Explicação:
Ao utilizar &&, a instrução seguinte só será executada caso a anterior tenha sido concluída
com sucesso.

14. a) adduser

15. a) 7 = Leitura/escrita e execução, 5 = Leitura e execução e 1 = execução

16. d) rwxrw-r-x

Explicação:
7 (rwx = leitura/escrita e execução), 6 (rw- = leitura e escrita) e 5 (r-x = leitura e execução).

17. Resposta:
c) 765

Explicação:
Fórmula: permissão total - umask = permissão desejada.
Cálculo: 777 - 012 = 765.

www.tinarede.com.br
18. a) 67

Explicação:
Fórmula: permissão total - permissão desejada = umask.
Cálculo: 777 - 710 = 67.

19. a) ls -d

Explicação:
A opção -d indica que serão listados somente diretórios. Outra alternativa seria ls -l | grep
ˆd

20. 10

Explicação:
Esse valor pode ser alterado ao definir a opção –n

21. history

22. a) h, j, k, l

23. b) ESC: x

Explicação:
Pressione ESC, posteriormente : (dois-pontos) e por fim pressione ENTER. A instrução em
questão orienta o editor a salvar o documento somente caso este tenha sofrido alteração.

24. a) /etc/vim/vimrc

Explicação:
Este caminho não foi mencionado em nossa obra, porém, bastava lembrar-se de que
normalmente os arquivos de configuração ficam dentro do /etc e você logo teria matado
essa questão.

25. a) apt-get remove nome_do_pacote

26. c) apt-get update

Explicação:
Essa instrução irá ler o repositório remoto e atualizar a lista local. É recomendado executar
essa instrução antes de instalar um pacote com o intuito de obter a sua versão mais
recente.

27. b) /etc/apt/sources.list

www.tinarede.com.br
28. d) /etc/network/interfaces

29. a) Ping, telnet e traceroute

30. b) uniq

31. a) 10dd

32. a) cat < lista.txt | sort

Explicação:
O símbolo de direcionamento < (sinal de menor que) está pegando o conteúdo de lista e
direcionando-o para que seja processado/lido por cat; na sequência passamos por meio do
pipe o conteúdo a ser processado por sort. Também poderíamos fazer assim: sort <
lista.txt

33. b) cat arq1 > arq2

34. a) grep -v ˆ# arquivo.txt

35. a) ESC: q!

36. b) ls /var1 ; pwd

37. a) Sim

38. a) Sim

39. d) rw-r--r--

40. a) rwxr--r--

41. b) Não

Explicação:
O Linux nada mais é do que um kernel (núcleo) do sistema; já o GNU/Linux é um
sistema operacional completo, formado pela camada de kernel e pelos demais
componentes do projeto GNU, tais como: programas diversos, drivers, interface gráfica
etc.

42. a) Sim

43. a) Sim

www.tinarede.com.br
44. a) Sim

45. a) * (asterisco), ? (interrogação) e [ ] (colchetes)

46. b) SUID, SGID e Stricky bit

47. a) Sim

48. b) Não

Explicação:
Essa propriedade é representada pela letra “t” ou “T”.

49. b) Não

Explicação:
O sudo está ligado diretamente a fatores de privilégios. Para adicionar um novo usuário ao
sistema, podemos utilizar os comandos adduser ou useradd.

50. c) /sbin

www.tinarede.com.br
Sugestões de estudo
• Copiar, mover e renomear diretórios individualmente ou em “lote”;
• Remover arquivos e diretórios;
• Usar curingas;
• Buscar arquivos por tamanho, tipo e tempo (data de criação, modificação etc.);
• Usar o histórico de comandos;
• Editar arquivo com Vi (Vim);
• Comandos essenciais do Vi (Vim);
• Encadear comandos;
• Redirecionar output;
• Estudar a hierarquia FHS;
• Pesquisar comandos no manual do Linux;
• Gerenciar permissões;
• Permissões especiais SUID, SGID e Sticky bit;
• Criar e gerenciar usuários e grupos;
• Gerenciar pacotes (foco em apt-get e yum).

Obviamente seu estudo deve ir além da lista sugerida acima; pense nesta como um ponto de
partida.

Sugiro ainda que estude todos os comandos apresentados na obra Linux Essencial – Por trás
da interface gráfica, e faça uma listinha com todos os comandos.

Caso seu foco seja uma certificação LPI, sugiro que estude o conteúdo indicado no link:
http://www.lpibrasil.com.br/lpic-1

www.tinarede.com.br
Conclusão
Chegamos ao fim desta obra, mas não fique triste! Seu estudo não acaba aqui. Seu perfil
profissional e até mesmo sua curiosidade incessante devem fazê-lo ir além destas poucas páginas;
considere ler outras obras, pesquisar na internet e visitar fóruns voltados ao assunto.

Assim como esse assunto me conquistou, espero que conquiste seu coração e que você possa
viver uma linda história de amor com a distribuição GNU/Linux que mais lhe agradar. O que importa
é ser feliz, não é mesmo? 😅

A curiosidade, o interesse e o desejo incessante por compreender “tudo” à minha volta me levaram
a estudar assuntos diversos ligados aos mais variados temas da tecnologia da informação. Com
base na experiência adquirida e na convivência com profissionais do segmento estou buscando,
sempre que possível, desenvolver obras como esta. Assim, espero que o leitor faça uma boa leitura
e que este material seja de grande valia para o seu crescimento profissional e pessoal.

Esta obra chegou ao fim, mas deixo como orientação a seguinte mensagem: não encerre por aqui
os estudos iniciados por meio deste material. Procure outras obras, artigos e demais materiais para
aprofundar o conhecimento já adquirido e se destacar perante os demais profissionais da área.

Ficarei agradecido caso o leitor possa me enviar o seu feedback quanto a esta obra. Para
isso deixo, à disposição meus dados para contato na página seguinte.

www.tinarede.com.br
Contatos

Fábio J. L. Ferreira
Em caso de dúvidas, sugestões, elogios, críticas ou demais assuntos,
favor entrar em contato por meio de uma das opções abaixo:

E-mail: fabiojanio@tinarede.com.br

Links do autor:

@_SDinfo #blogfabiojanio

fabiojanio blog

Caso os links acima não funcionem de forma adequada, utilize as ligações abaixo:

Twitter: http://www.twitter.com/_SDinfo

Facebook: http://www.facebook.com/blogfabiojanio

LinkedIn: http://br.linkedin.com/in/fabiojanio

Blog: http://www.fabiojanio.com/

www.tinarede.com.br

You might also like