Você está na página 1de 194

Tabela de conteúdos

Início 1.1
Sumário 1.2
Introdução 1.3
Capítulo 1 - Linux: introdução teórica 1.4
Um pouco da história 1.4.1
Software livre 1.4.2
Open source (código aberto) 1.4.3
Código-fonte 1.4.4
Qual a diferença entre Linux e GNU... 1.4.5
Sistema Operacional (SO) 1.4.6
Licença de software 1.4.7
GPL 1.4.7.1
Copyleft 1.4.7.2
Outras licenças 1.4.7.3
Distribuições Linux 1.4.8
Onde o Linux é usado 1.4.9
Qual é a melhor distribuição Linux? 1.4.10
Os benefícios de uma distribuição Linux 1.4.11
Por trás da interface gráfica 1.4.12
Resumo 1.4.13
Capítulo 2 - Estrutura e funcionamento do Linux 1.5
Estrutura sistêmica do GNU/Linux 1.5.1
Terminal Virtual (ttyN) 1.5.2
Introdução ao shell 1.5.3
Logon e logout 1.5.3.1
Superusuário (root), usuário... 1.5.3.2
Primeiro contato com o shell 1.5.4
Árvore de diretórios ("pastas") 1.5.5
Case-sensitive 1.5.6
Referências absoluta e relativa 1.5.7
Entrada e saída padrão de dados 1.5.8
Resumo 1.5.9
Capítulo 3 - Comandos Programas essenciais 1.6
Comandos Programas básicos 1.6.1
help 1.6.1.1
man 1.6.1.2
logout 1.6.1.3
shutdown, poweroff e halt 1.6.1.4
reboot 1.6.1.5
pwd 1.6.1.6
history 1.6.1.7
Manipulação de arquivos e diretórios 1.6.2
ls (list) 1.6.2.1
Listando o conteúdo do... 1.6.2.1.1
Opções (atributos de...) 1.6.2.1.2
Listar arquivos ocultos 1.6.2.1.3
cd (change directory) 1.6.2.2
cp (copy) 1.6.2.3
rm (remove) 1.6.2.4
mkdir 1.6.2.5
rmdir 1.6.2.6
cat 1.6.2.7
more 1.6.2.8
cut 1.6.2.9
find 1.6.2.10
grep 1.6.2.11
head 1.6.2.12
tail 1.6.2.13
wc 1.6.2.14
tar 1.6.2.15
gzip e bzip2 (compactar e...) 1.6.2.16
Outros comandos 1.6.2.17
Curingas 1.6.3
Utilizando | (pipe) para direcionar... 1.6.4
Encadeando execuções com : (ponto... 1.6.5
Exemplos 1.6.5.1
Redirecionar saída com > ou >> 1.6.5.2
Atalhos essenciais 1.6.6
Resumo 1.6.7
Capítulo 4 - Usuários, grupos e permissões 1.7
O que é um usuário 1.7.1
O que é um grupo de usuários 1.7.2
O que são permissões 1.7.3
Gerenciamento de usuários e grupos 1.7.4
Criar usuário 1.7.4.1
Editar usuário e senha 1.7.4.2
Excluir usuário 1.7.4.3
Criar um grupo 1.7.4.4
Adicionar e remover usuário... 1.7.4.5
Excluir grupo 1.7.4.6
Diretório home do usuário 1.7.4.7
Gerenciamento de permissões 1.7.5
Adicionar, remover e definir... 1.7.5.1
Usando chmod com método... 1.7.5.2
Umask 1.7.5.3
Calcular umask 1.7.5.3.1
Umask para permissão 1.7.5.3.2
Alterando umask 1.7.5.3.3
Permissões especiais 1.7.5.4
SUID (set user id) 1.7.5.4.1
SGID (set group id) 1.7.5.4.2
Sticky (sticky bit) 1.7.5.4.3
Vantagens (SUID, SGID...) 1.7.5.4.4
sudo 1.7.5.5
Resumo 1.7.6
Capítulo 5 - Editores de texto (Nano e VIM) 1.8
Nano 1.8.1
Vim (VI iMproved) 1.8.2
Nano ou Vim 1.8.3
Resumo 1.8.4
Capítulo 6 - Instalar, atualizar e remover... 1.9
Pacotes 1.9.1
Gerenciador de pacotes 1.9.2
Repositório 1.9.3
Apt-get ou Aptitude? 1.9.4
Apt-get / apt-cache (básico) 1.9.4.1
Aptitude (básico) 1.9.4.2
yum 1.9.5
Capítulo 7 - Gerenciamento de rede 1.10
Testando a conectividade 1.10.1
ping 1.10.1.1
telnet 1.10.1.2
traceroute 1.10.1.3
Visualizando e configurando end... 1.10.2
ifconfig 1.10.2.1
dhclient 1.10.2.2
Arquivo de configuração das... 1.10.2.3
Resumo 1.10.3
Lista de exercícios 1.11
Sugestões de leitura 1.12
Conclusão 1.13
Contatos 1.14
Linux Essencial - Por trás da interface gráfica
Autor: Fábio J L Ferreira

Contato:

E-mail: contato@fabiojanio.com

Nas redes:

Facebook: http://www.facebook.com/blogfabiojanio
Twitter: https://twitter.com/_SDinfo
Linkedin: http://br.linkedin.com/in/fabiojanio
Blog: http://www.fabiojanio.com/
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
tecnologias 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 convidando 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
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.

Este material foi desenvolvido em complemento à obra Linux Essencial


- Por trás da interface gráfica, ou seja, se você ainda não a apreciou,
sugiro que suspenda a leitura deste material e faça a apreciação dela
antes de prosseguir.

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 sucesso!

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


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;
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.
Atenção: 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.
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.

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 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...

Dica: 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 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:

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;

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. 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;
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. :)
Dica: 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, 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!
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.
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.

Atenção: 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;
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.

Atenção: 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.

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. :wink:

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
Diretório de comandos programas essenciais ao sistema.
bin
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
Neste local ficam armazenados os diretórios pessoais dos
home
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
Diretório virtual onde ficam as informações do sistema
proc
obtidas do Kernel
root Diretório pessoal do usuário root
run Dados de execução variáveis
Binários essenciais ao sistema; somente o root tem
sbin
privilégio para executá-los
Contém praticamente as mesmas informações do diretório
sys
proc, porém, mais organizadas
Arquivos temporários. Por exemplo: dados temporários
tmp criados por programas ou usuários 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), documentação
usr
(/usr/share/doc) etc. São programas portáveis e não
essenciais ao sistema
Diretório Descrição
var Dados variáveis. Por exemplo, arquivos de log
Dados para os serviços disponibilizados pelo sistema e de
srv
acesso público
Pacotes de software e aplicações adicionais que não fazem
opt
parte do sistema

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

Atenção: 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

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


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

Veja outro exemplo:

Diretório atual: arquivos


Destino: bkp
Via referência absoluta: /etc/bkp
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: representa a entrada padrão de dados => Teclado


stdout: 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 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.
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.
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.
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:

$ 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

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

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.
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.

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:

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.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:

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:

$ 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
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

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;

>> (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.

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!
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;
/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.
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.
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

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

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
- (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.
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

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.
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.

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;
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 ip

O ip é 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 sudo, dois recursos
valiosos que certamente merecem a atenção que a eles foi atribuída no grau
que assim foi apresentado.
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.

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

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:
a (append): inicia o modo de inserção um caractere após o atual;
A: inicia o modo de inserção no final da linha;
i (insert): inicia o modo de inserção antes do caractere atual;
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:
v: seleção de caracteres;
V: seleção de linhas;
^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 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.

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).

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);

:link: 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.

Dica: 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 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!
Capítulo 6 - Instalar, atualizar e remover software
"Quem pensa pouco erra 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.
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órios 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.
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.

:bulb: 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 pesqusiar 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.

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.

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.
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 - Aptitude

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.

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 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

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

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.
Lista de exerçicios
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!

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

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

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?
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
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

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
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
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

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- c) 765

Explicação: Fórmula: permissão total - umask = permissão desejada.


Cálculo: 777 - 012 = 765.

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

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

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
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
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.
Contatos
Em caso de dúvidas, sugestões, elogios, críticas ou demais assuntos, por
favor entre em contato por meio de uma das opções abaixo:

Contato:

E-mail: contato@fabiojanio.com

Nas redes:

Facebook: http://www.facebook.com/blogfabiojanio
Twitter: https://twitter.com/_SDinfo
Linkedin: http://br.linkedin.com/in/fabiojanio
Blog: http://www.fabiojanio.com/

Você também pode gostar