Академический Документы
Профессиональный Документы
Культура Документы
br
DlteC do Brasil®
www.dltec.com.br
info@dltec.com.br | 41 3045.7810
Sobre o E-book/Apostila
Direitos Autorais
Aviso Importante!
Copyright © 2016.
Indice
Introdução .................................................................................................................................. 5
Capítulo 01 – A Comunidade Linux e uma Carreira em Opensource .............................................. 6
Capítulo 02 – Encontrando seu Caminho em Sistemas Linux ....................................................... 23
Capítulo 03 – O Poder da Linha de Comandos ............................................................................ 53
Capítulo 04 - O sistema operacional Linux.................................................................................. 76
Capítulo 05 - Segurança e Permissões de Arquivos ................................................................... 102
Introdução
Olá,
Capítulo 01 - A Comunidade
Linux e uma Carreira em
Opensource
Objetivos do Capítulo
Ao longo desse capítulo você deverá:
Sumário do Capítulo
Tópicos Importantes:
Filosofia OpenSource
Distribuições
Sistemas Embarcados
Veja abaixo uma lista parcial com os arquivos, termos e utilitários mais utilizados:
Android
Debian
CentOS
Open Source é por si só uma filosofia que promove a livre distribuição, redistribuição e
acesso a um determinado software, incluindo ao código do mesmo (por isso o nome Open
Source - código aberto), onde você tem o direito de ler, alterar e redistribuir suas (ou com
suas) alterações. Existem variações de licenças Open Source que permite ou não algumas
coisas, mas chegaremos neste ponto mais adiante.
Uma das coisas que fez com que o Open Source se popularizasse foi a evolução da internet,
com esta foi possível a interação e colaboração de voluntários do mundo todo em determinados
projetos, tornando a evolução dos mesmos surpreendentes, um bom exemplo disso é o Linux.
Uma frase padrão que costumamos utilizar para descrever este processo é que enquanto um
desenvolvedor brasileiro para de trabalhar e vai dormir, um desenvolvedor japonês acorda e
começa a trabalhar no Linux, tornando desta forma o desenvolvimento rápido e constante.
O Open Source deu espaço para a criação de várias outras culturas, como por exemplo a
Creative Commons, esta é uma licença de direitos autorais com a qual você pode ou não
permitir que as pessoas utilizem seu produto (artístico), alterem, redistribuam, e assim por
diante, mantendo você mencionado no trabalho através de vários pontos da licença.
Distribuições são por assim dizer “caixas” de software. Basicamente é um Linux, com uma
seleção de softwares que aqueles que a montaram acreditam ser o ideal para o seu público
alvo.
Estas distribuições são montadas por grupos de voluntários (como é o caso do slackware ,
Debian e gentoo por exemplo) ou por empresas como acontece com o RedHat Linux ou SuSE
Linux (novel). Dentro deste ponto você costuma ter distribuições para diferentes pontos de
interesse, veja abaixo uma pequena lista com alguns casos.
A grande questão que fica é o porque montar uma distribuição? Já não existem muitas?
Como citamos no inicio, uma distribuição é feita por um grupo de voluntários ou uma empresa
analisando necessidades que eles acham necessárias. Para exemplificar imagine o seguinte
cenário: você trabalha em uma empresa que utiliza um Linux RedHat e em cada desktop,
depois de instalado o linux, você precisa instalar uma série de softwares e aplicativos.
Não seria muito mais fácil, já que trata-se de um processo repetitivo, que você monte um CD
com todos os aplicativos dentro e um processo automático de instalação já no seu perfil? Assim
nasce uma nova distribuição Linux que pode ou não chegar a conhecimento publico.
Sistemas embarcados são hardwares criados para um propósito especifico, ou uma série de
propósitos, mas é um equipamento limitado, podendo ser um pabx, um celular, um pda, um
receptor de tv ou uma tv.
Na verdade existem vários ambientes onde o Linux pode ser utilizado, por exemplo, os
celulares que chamamos de Android são celulares com Linux Embarcado, ou seja, ele vem de
fábrica com o Linux controlando suas funções principais, os receptores de satélite da AZBox são
outro caso onde é um sistema Linux que roda no hardware.
Tópicos Importantes:
Veja abaixo uma lista parcial com os arquivos, termos e utilitários mais utilizados:
Gerenciadores de Desktop
Os usuários finais que desejavam utilizar o computador para tarefas corriqueiras, como acessar
a internet, ver um email e etc acabavam não gostando do linux devido a essa dificuldade inicial.
Com o intuito de difundir a utilização do linux para todos os tipos de usuários (residenciais,
comerciais) os programadores desenvolveram interfaces gráficas, chamadas de gerenciadores
de desktops, para permitir ao usuário uma melhor experiência de usabilidade.
A grande questão é que existem várias versões diferentes, com focos diferentes e com recursos
diferentes, onde o melhor deles depende unicamente das suas escolhas e do seu gosto.
Gnome ( http://www.gnome.org/ )
KDE ( http://www.kde.org/ )
Estes dois são os mais completos e amplamente utilizados, mas existem vários outros , alguns
levíssimos com alguns recursos interessantes, outros praticamente sem recurso algum,
variando conforme sua finalidade, segue abaixo uma pequena lista com alguns exemplos.
LXDE ( http://www.lxde.org/ )
Fluxbox ( http://www.fluxbox.org/ )
XFCE ( http://www.xfce.org/ )
FVWM ( http://www.fvwm/ )
Icewm ( http://www.icewm.org/ )
WindowMaker ( http://www.windowmaker.org/ )
Além destes existem muitos outros, mas vamos deixar isso para você mesmo descobrir e fazer
a escolha da melhor opção para o seu perfil.
Aplicativos de Desktop
Como quase tudo no Linux, temos muitas variações de vários de tipos de softwares. Existem
diversas opções de gerenciadores de arquivos, suítes de escritório, gravadores de cd, players
de áudio, mas existem algumas que se destacam em meio a multidão. Veja abaixo apenas
alguns exemplos.
Suíte de Escritório
OpenOffice/LibreOffice ( http://www.openoffice.org/ / http://www.libreoffice.org/ )
Gravador de CDs/DVD
K3b ( http://www.k3b.org/)
Gráficos 3D
Blender ( http://www.blender.org/ )
Editor de vídeo
Cinelerra ( http://www.cinelerra.org/ )
Hoje os sistemas Linux vários serviços na internet, um deles e amplamente utilizado por todos
nós são os websites, na maior parte das vezes hospedados em servidores Linux rodando o
software Apache.
Para termos uma ideia da sua popularidade a utilização do Linux hoje correspondente a 62%
dos servidores mundiais (relatório da netcraft até junho de 2011), mas também existem
muitos servidores de e-mails, bancos de dados, firewalls, proxys e outras aplicações.
Também existem vários aplicativos para compartilhamento de arquivos como o samba, nfs,
coda, aplicações para serviço de DNS como o BIND, PowerDNS e outras
O Linux também é muito utilizado em aplicações móveis, um dos primeiros Linux que saiu
para dispositivo móvel foi o Symbian da Nokia. Sua primeira release saiu em 1997 e foi
embarcado na maior parte dos dispositivos Nokia até a chegada do AndroidOS. Outro exemplo
que podemos citar é o MeeGo que foi criado de uma junção dos projetos Moblin e Maemo.
Também existem vários dispositivos que vem com sistemas Linux, mas que devido aos seus
fabricantes darem uma interface própria e não mostrarem as telas de boot, muitas vezes não
percebemos que são na verdade um Linux. Um bom exemplo desses casos é o AndroidOS que
levou estes sistemas a um novo patamar, trazendo um sistema Linux mais completo e mais
compatível com os softwares que existem para o mesmo.
Você pode por exemplo pegar um celular com AndroidOS, fazer o jailbreak do mesmo para ter
acesso root e então instalar um Samba para compartilhar dados do seu celular em uma rede
Windows, ou pode colocar um servidor apache no mesmo entre outras funções.
Informação Adcional:
Em uma tradução livre e literal, "Jailbreak" significa "fugir da prisão", e representa uma
metáfora para o ato de burlar as restrições impostas por uma empresa em seus dispositvos,
adicionando funcionalidades não oficiais a eles.
O método, desenvolvido por grupos hackers, tem sido comumente relacionado aos
dispositivos da Apple e ao seu sistema operacional móvel, o iOS, devido à grande
popularidade que o processo ganhou entre esses usuários. Entretanto, é possível realizar o
Jailbreak para "desbloquear" outros aparelhos, como no Playstation 3, da Sony, ou o Xbox
360, da Microsoft, por exemplo.
Informação Adcional:
Não confuda Kernel com distribuições linux, o Kernel faz parte de uma distribuição. Toda
distribuição tem a sua versão de Kernel.
Diferentemente do Windows, onde você pode pegar um arquivo .exe que contenha toda a
estrutura necessária para a aplicação rodar, no Linux quando você desenvolve um software
normalmente você não o cria inteiro, você utiliza muito código pronto como bibliotecas
gráficas, bibliotecas para conexão com bancos de dados, manipulação de arquivos e etc.
Neste caso, se você baixar apenas o software X e tentar instalar o mesmo usando por exemplo
o rpm ou o dpkg (falaremos mais sobre o rpm e dpkg posteriormente) ele irá falar que para
instalar o software X é necessário A, B, C e etc, e não vai prosseguir com a instalação.
Tópicos Importantes:
Licenciamento
Free Software Foundation (FSF), Open Source Initiative (OSI)
Veja abaixo uma lista parcial com os arquivos, termos e utilitários mais utilizados:
3.1 Licenciamento
O Linux foi inicialmente lançado sob uma licença de software que proibia qualquer uso
comercial.
Infomação adcional:
http://pt.wikipedia.org/wiki/GNU_General_Public_License
Tópicos Importantes:
Conhecimentos em Desktop
Linha de Comando no Linux
Uso do Linux na Indústria, Computações nas Nuvens e Virtualização
Veja abaixo uma lista parcial com os arquivos, termos e utilitários mais utilizados:
Using a browser, privacy concerns, configuration options, searching the web and saving content
Terminal and Console
Password issues
Privacy issues and tools
Use of common open source applications in presentations and projects
4.1 Desktops
Antes de mais nada vamos entender o que é ICT (Information and Communication
Technology). ICT é basicamente tecnologia da informação, seja ela a utilização de softwares
para pesquisa, comunicação, conteúdo multimídia ou qualquer outro modelo, basicamente aqui
estamos falando de navegação na web, conceitos de privacidade e outras questões que
envolvem comunicação usando o computador.
Figura 1 Figura 2
Graças a estes desktops, você tem uma experiência muito mais simples atualmente durante a
utilização de sistemas Linux. Desde o surgimento dos primeiros desktops para Linux muito se
evoluiu, inclusive suporte a placas de vídeo e tudo mais, ganhando-se em performance e
qualidade.
Os softwares desktops para Linux incluem atualmente excelentes aplicações, como por
exemplo, os navegadores Firefox, Google Chrome e Opera (além de outros), suíte de escritório
OpenOffice/LibreOffice e o Calligra que faz parte da suíte do KDE e também alguns
aplicativos do Gnome para determinadas funções como o Abiword (editor de texto), gnumeric
(planilhas), Inkscape (editoração) e outras aplicações.
Conforme falado existem muitas aplicações para Linux, para várias finalidades. Basta procurar
um pouco e normalmente você acha tudo que precisa com uma versão open source de ótima
qualidade.
A utilização de desktops que falamos anteriormente é mais utilizada por usuários finais, que
utilizam o Linux em seus micros e laptops. Quando falamos em Linux, principalmente para
funções de servidor é muito comum utilizarmos apenas linha de comando para
manipulação do sistema, desta forma é imprescindível que conheçamos algumas questões
básicas sobre isso.
No Linux através da linha de comando é possível verificar status de rede, configurar a rede,
configurar um compartilhamento de rede, alterar informações de data e hora, alterar
configurações de funcionamento do equipamento, executar programas, instalar atualizações e
por ai vai.
A Linha de Comando:
A navegação via linha de comando é similar ao utilizado no Windows por exemplo, digamos que
você tenha no Windows sua partição C: com uma pasta chamada teste dentro dela, no
Windows o comando para acesso seria:
C:\> cd teste
root@localhost ~/ # cd /teste
A “/" que informarmos no caso do Linux é porque no exemplo a pasta não está no mesmo
diretório que o usuário se encontra, isso no Windows também é possível com o comando “cd
\teste”
Além destes você tem vários outros comandos para, por exemplo:
Como já comentamos, basicamente no Linux tudo é possível de ser feito na linha de comando,
entraremos mais a fundo nestas questões no próximo tópico desse módulo.
Atualmente temos muitas empresas utilizando Linux em sistema críticos, para quem não
conhece o termo a ideia de sistema crítico é aquele sistema que não pode parar, tendo que
se manter o tempo todo estável e disponível.
O Linux por sua flexibilidade e variedade de aplicações é utilizado em várias áreas diferentes. É
comum encontramos empresas que utilizam o Linux em seus roteadores para fazer
conectividade de grande porte com operadoras de telecomunicações, ou utilizam o Linux como
seu servidor radius para autenticação e controle de seus usuários de internet. Também existem
plataforma de voz (voip) construída com Linux utilizando softwares Asterisk, OpenSIPS e
FreeSwitch, além de bancos de dados MySQL e outras ferramentas.
Enfim, como podemos perceber existem muitos usos de Linux, em diferentes ambientes para
diferentes finalidades
Capítulo 02 - Encontrando
seu Caminho em Sistemas
Linux
Objetivos do Capítulo
Ao longo desse capítulo você deverá:
Tópicos Importantes:
Shell básico
Comandos de formatação
Trabalhando com opções
Variáveis
Globbing
Quoting
Veja abaixo uma lista parcial com os arquivos, termos e utilitários mais utilizados:
echo
history
PATH env variable
which
Substitutions
||, && and ; control operators
O Shell é o interpretador de comandos, quando você digita algum comando ele é que
interpreta. Quando você usa um comando para alterar diretório, ou limpar a tela, isso é um
comando do shell.
O shell padrão do Linux é o bash (bourne again shell), mas existem outras opções como o csh,
tcsh , ksh , zsh . Quando estamos em um prompt do Linux com o shell bash carregado é
comum que o prompt de comando tenha um formato similar ao mostrado no comando
abaixo.
usuário@nome_da_maquina:/caminho/onde/voce/esta $
Nesse tópico iremos introduzir de forma bem básica nossos três primeiros comandos, o pwd
(print working directory), cd (change directory) e ls (list files and directories). Se você nunca
trabalhou com a linha de comandos antes em sua vida você deve prestar bem atenção nesse
tópico, pois ele será crucial para o seu entendimento de todos os conceitos que veremos mais
adiante.
Quando pensamos em comandos no Linux temos que pensar como vamos andar pelos
diretórios, editar e copiar arquivos, listar conteúdo de arquivos, encontrar comandos e
outras coisas mais. Nesse tópico veremos um pouco sobre esse tema.
Assim como em outros sistemas operacionais o Linux utiliza uma estrutura hierárquica de
diretórios, organizada em um padrão conhecido como árvore de diretórios, onde cada
diretório pode conter arquivos ou outros diretórios.
Nessa árvore o primeiro diretório é chamado de root. Root é a raiz do sistema, representado
pelo caractere “/” (barra para direita), tudo está abaixo da raiz, ela é nosso top-level, nossa
ponta da pirâmide. Vamos exemplificar uma pequena árvore de diretórios abaixo.
/ ---> raiz
|---home -> diretório de usuários
|---me -> diretório do usuário me
As configurações do seu shell estão definidos em uma variável de ambiente que podem ser
verificadas através do comando env, acompanhe abaixo a imagem da exibição do mesmo.
dltec@dltec:~$ env
LC_PAPER=pt_BR.UTF-8
LC_ADDRESS=pt_BR.UTF-8
LC_MONETARY=pt_BR.UTF-8
TERM=xterm
SHELL=/bin/bash
SSH_CLIENT=10.0.2.2 47905 22
LC_NUMERIC=pt_BR.UTF-8
SSH_TTY=/dev/pts/2
USER=dltec
LC_TELEPHONE=pt_BR.UTF-8
MAIL=/var/mail/dltec
PATH=/home/dltec/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
:/usr/games
LC_IDENTIFICATION=pt_BR.UTF-8
PWD=/home/dltec
LANG=en_US.UTF-8
LC_MEASUREMENT=pt_BR.UTF-8
SHLVL=1
HOME=/home/dltec
LOGNAME=dltec
SSH_CONNECTION=10.0.2.2 47905 10.0.2.15 22
LESSOPEN=| /usr/bin/lesspipe %s
LESSCLOSE=/usr/bin/lesspipe %s %s
LC_TIME=pt_BR.UTF-8
LC_NAME=pt_BR.UTF-8
_=/usr/bin/env
OLDPWD=/
dltec@dltec:~$
Veja que no mesmo temos informações referente ao SHELL utilizado, o diretório de e-mail do
usuário (MAIL), quais são os diretórios de executáveis do usuário (PATH), o diretório ao qual o
mesmo se encontra (PWD) além de outras variáveis possíveis de acordo com o a finalidade do
sistema.
export JAVA_HOME=/usr/local/java/bin/
No exemplo mostrado está sendo exportado a variável JAVA_HOME, que é utilizada para
localizar onde ficam os binários do java e normalmente é utilizado quando você roda alguma
aplicação ou serviço java no sistema.
Porém não se torna muito prático ter de executar esse comando cada vez que você entra no
sistema, além do mais algumas vezes podem ser necessárias várias variáveis.
1.4 PATH
Vimos no tópico anterior a saída do comando env. Uma das linhas importantes do comando
env é a que mostra o PATH (figura 1). Vamos agora entender o que seria o PATH através de
um exemplo bem simples.
dltec@dltec:~$ env
…
TERM=xterm
SHELL=/bin/bash
SSH_CLIENT=10.0.2.2 47905 22
LC_NUMERIC=pt_BR.UTF-8
SSH_TTY=/dev/pts/2
USER=dltec
LC_TELEPHONE=pt_BR.UTF-8
MAIL=/var/mail/dltec
PATH=/home/dltec/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
:/usr/games
LC_IDENTIFICATION=pt_BR.UTF-8
Quando queremos que o sistema execute um comando nós não precisamos digitar o caminho
completo do comando. Por exemplo, quando queremos listar o conteúdo do diretório em que
estamos simplesmente digitamos o comando ls.
dltec@dltec:~$ ls
Desktop Music Templates essentials php.versoes
Documents Pictures Videos examples.desktop
Downloads Public bin lpi102
O comando ls está localizado na pasta /bin, mas então por que não precisamos digitar o
caminho completo do comando, como por exemplo, /bin/ls ? Por que simplesmente digitando ls
o sistema entende que deve executar o comando ls que está localizado no diretório /bin ?
A resposta a essa pergunta é a variável PATH. Essa variável lista os diretórios do sistema
onde os arquivos executáveis podem ser encontrados. Para visualizar o conteúdo da variável
PATH entre com o comando mostrado abaixo.
/home/dltec/bin
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
Isso faz com que o sistema faça um busca, do primeiro ao último diretório listado, quando
tentamos executar algum comando. Assim que uma correspondência é encontrado a procura é
encerrada, mesmo que não tenha sido verificado todos os diretórios listados.
Ou seja, em nosso exemplo do ls, quando digitamos ls o sistema irá buscar por uma
correspondência nos diretórios listados na variável PATH, tão logo a correspondência seja
encontrado (no caso, no diretório /bin) a busca é interrompida e o comando é executado.
um na pasta /usr/bin e
outro na pasta /home/aluno/bin/WC
E vamos supor também que você queira utilizar o comando o wc (word count) padrão, ou
seja, o que está na pasta /usr/bin e que sua variável PATH está definida como mostrado
abaixo.
Uma das soluções para resolver esse problema seria informar o caminho completo do
comando desejado. Para tal, você utilizaria o comando which -a wc para exibir todas as
correspondências para o comando wc. Em seguida entraria com o caminho completo do
comando wc desejado, ou seja, /usr/bin/wc -l arquivo1.txt.
Através do shell nós podemos executar vários comandos diferentes, para finalidades diferentes,
utilizando opções diferentes para visualização dos resultados e muitas vezes fazendo uso de
vários comandos ao mesmo tempo.
Vamos agora ver um exemplo um pouco mais avançado do que podemos fazer na linha de
comandos. Ao longo desse curso você aprenderá a utilizar esse e outros tipos de recursos
avançados. Imagine que eu quero listar o conteúdo de um arquivo, mas quero filtrar apenas as
linhas que contenham a palavra php, por exemplo.
Para ilustrar o processo vamos criar um arquivo chamado teste.txt (comando touch teste.txt -
veremos mais para frente o uso desse comando) e dentro deste arquivo vamos escrever
algumas coisas e vamos também colocar em 3 linhas do arquivo a palavra php. Para editar o
arquivo teste.txt você pode utilizar o aplicativo nano ou vi (também veremos mais detalhes
sobre isso posteriormente nesse curso). Acompanhe o exemplo abaixo, com todos os passos
mostrados.
Conteúdo do arquivo:
asfdfasdf
adfadfas
dfadf902u3423 42390 rfs0 fs dfasdf php
fdasfdasf
d asdfa
sdfasdfasdfh9283r fpsdhfasdf php fdsafdasfd
Pressione ctrl+o para salvar o arquivo e depois ctrl+x para sair do editor.
Perceba que apenas 3 linhas foram mostradas, justamente as que continham a palavra php.
Isso pode ser muito útil no seu dia a dia, imagine um arquivo de log com 10.000 linhas e você
quer visualizar todos os logs referente ao daemon openvpn por exemplo, então você digita o
comando cat /var/log/syslog | grep openvpn e todo o conteúdo do arquivo de log
referente ao openvpn será exibido e você poderá analisar o conteúdo sem tanta “sujeira” na
visualização do arquivo.
1.6 Variáveis
No shell do Linux nós podemos utilizar os comandos e criar variáveis para serem usadas por
estes comandos.
MYFILE=”/tmp/teste.txt”
cat .bash_profile > $MYFILE
Neste caso estamos definindo a variável MYFILE com o caminho para o arquivo que queremos,
depois exibimos o conteúdo do .bash_profile direcionando a saída do comando para a variável
$MYFILE que no caso é o arquivo /tmp/teste.txt
A título de ilustração vamos ver um exemplo real do uso de variáveis no linux. Imagine que
em um diretório existam diversos arquivos de imagem com a extensão .JPG (em maiúscula) e
que você queira renomear esses arquivos de forma que fique .jpg (em minúscula). Vamos ver
como é possível fazer isso com uso de variáveis? Acompanhe o código abaixo.
cd /tmp/teste
for i in *; do NEWNAME=$(echo $i | sed –e s/JPG/jpg/g); mv $i $NEWNAME; done
O comando utilizado é bem complexo mas é um exemplo válido para exemplificar um uso real
para este tipo de utilização (variáveis), acompanhe a descrição dos passos:
O que acha, isso é muito mais prático do que selecionar um a um e então fazer a troca do
nome não acha?
O Glob foi um programa que existiu no unix para expandir a capacidade de utilização de
caracteres curingas de forma estendida, atualmente isso é incorporado no shell e graças a esta
ferramenta podemos utilizar uma série de parâmetros para fazer varredura, leitura, alteração
em diretórios e assim por diante.
Também podemos utilizar alguns outros tipos de glob, vamos ver abaixo:
Classes de caracteres:
Classes de caractere, seria por exemplo alguns caracteres dentro de um [ ], não
necessariamente sequenciais, podendo ser algo como [ac3t], qualquer um destes caracteres
que casarem a regra serão aceitos.
Range de caracteres:
Este possui uma convenção especial, dois caracteres separados por um traço “-“ denotam um
range, desta forma [a-cA-C0-3] é equivalente a [abcABC0123]
Quotting significa “aspas”, no caso em especifico não é bem isso que ele quer dizer, a questão
aqui é escape de caracteres. Você deve pensar da seguinte forma, se no shell o cifrão “$” é
inicio de variável, como você irá manipular um arquivo que possui este caractere em seu nome,
ou mesmo um arquivo ou diretório que contenha uma barra “/” em seu nome ?
A questão é bastante simples, nós fazemos o escape do caractere, vamos fazer alguns
exemplos para tentarmos entender. Acompanhe o comando abaixo.
$ echo $date
$
No comando acima foi executado o comando echo $date que irá mostrar o valor da variável
$date, porém ele aparece em branco já que a variável não possui nenhuma valor.
$ echo \$date
$date
$
O mesmo processo também pode ser executado digitando aspas simples ( ‘ ) que neste caso
faz a interpretação literal do que está dentro, acompanhe o comando ao lado.
Neste caso é importante lembrar que não deve haver uma aspas simples dentro de um outro
par, ou seja, não pode usar:
‘ teste’a ‘
A aspas dentro do contexto irá cancelar a última. Nesses casos podemos utilizar uma barra
invertida “\” para cancelar a funcionalidade do caractere, no caso a expressão ficaria:
‘ teste\’a ‘
As aspas duplas também fazem a preservação dos caracteres, exceto pelo cifrão, mas o mesmo
também pode ser utilizando se houver uma barra invertida antes.
No caso da existência de uma barra invertida como parte da string é importante que você
adicione outra para realizar o escape da mesma, no caso pensemos no seguinte exemplo
abaixo.
$ cd /teste\2
-bash: cd: teste2: No such file or directory
$ cd /teste\\2
:~/teste\2 $
Perceba que o diretório foi criado com o nome de teste\2, ao tentar entrar no diretório com o
comando puro “cd teste\2” ele não entende e tenta entrar em teste2, ao digitarmos com
barra de escape nós conseguimos entrar no diretório, dessa forma o comando ficou “cd
teste\\2” , no caso com a utilização de aspas simples ou duplas não se torna necessária a
barra de escape.
Uma coisa importante nesta questão é que no Linux um espaço é um caractere, então você tem
dois modos de entrar, por exemplo, no diretório “teste 2”, sendo elas
cd “teste 2”
cd teste\ 2
Tópicos Importantes:
Man
Info
Veja abaixo uma lista parcial com os arquivos, termos e utilitários mais utilizados:
man
info
Man pages
/usr/share/doc
locate
apropos, whatis, whereis
O comando man é um dos recursos mais úteis do Linux e de outros sistemas unix, através dele
você obtém toda a documentação de um comando, com explicações detalhadas e muitas vezes
alguns exemplos.
Vamos pegar por exemplo um pedaço do comando “man tar”. Acompanhe abaixo. Veja que
ele traz o inicio uma sinopse, em seguida uma descrição e exemplos.
Obs: para sair da página do manual e voltar para a linha de comandos basta pressionar a tecla
q.
Veja a figura a seguir que mostra uma outra pagina do mesmo manual .
Como você pode perceber a saída do comando lhe fornece explicações a respeito de cada um
dos parâmetros que o comando aceita, infelizmente é necessário dar uma boa treinada no
inglês para conseguir ter mais domínio, mas com certeza isso fará toda a diferença para você.
O comando info acessa as mesmas documentações que o man, mas ele na verdade é um
leitor para estas documentações, basicamente ele permite uma navegação mais fácil pelas
paginas por ter mais recursos como procura, navegação por links e etc..
O comando man por padrão utiliza o paginador more para permitir que você navegue na
documentação, se existir o comando less instalado já facilita um pouco pois permite descer e
subir o conteúdo (o comando more apenas desce). Veja abaixo as figuras d as telas para os
comandos man e info, respectivamente.
Além dos manuais em alguns casos temos arquivos de exemplos e outros no diretório
/usr/share/doc seguido do nome do comando ou programa que você está buscando, veja
abaixo a listagem dos arquivos do diretório /usr/share/doc/rsync
dltec@dltec:~$ ls /usr/share/doc/rsync
README.gz changelog.Debian.gz examples tech_report.tex.gz
TODO.gz copyright scripts
dltec@dltec:~$
Perceba que dentro do diretório além dos arquivos de licença (copyright), temos o README,
changelog e alguns outros dependendo de que diretório estamos listando. No caso do rsync
temos um diretório examples e outro scripts, no diretório examples são alguns exemplos de
configuração para o rsync e no diretório scripts alguns scripts que podem ser utilizados para
algumas operações como log, verificação de status e outros.
Algumas vezes nós sabemos o nome de um arquivo ou comando e queremos saber onde tem
informações sobre ele, para este caso nós utilizamos o comando apropos. A ideia deste
comando é simplesmente localizar em que manual contém a informação que você solicitou,
veja o exemplo abaixo.
Veja que perguntei sobre o arquivo rsyncd.conf, este arquivo em especifico possui um manual
próprio explicando suas configurações, no caso a resposta dele foi:
Questionamos o apropos sobre “passwd” e como pode ser verificado, ele trouxe vários
manuais com referências ao termo, ou seja, se você quer procurar algo, mas não sabe de qual
manual é, utilize o apropos para esta função.
apropos passwd
auth_passwd (3) - Change accounts password
authpasswd (1) - Generate login passwords
chgpasswd (8) - update group passwords in batch mode
chpasswd (8) - update passwords in batch mode
exim4_passwd (5) - Files in use by the Debian exim4 packages
exim4_passwd_client (5) - Files in use by the Debian exim4 packages
expect_mkpasswd (1) - generate new password, optionally apply it to a user
gpasswd (1) - administer the /etc/group and /etc/gshadow files
htpasswd (1) - Manage user files for basic authentication
mkpasswd (1) - Overfeatured front end to crypt(3)
Informação adcional:
Outra forma de encontrar uma página de um manual é através do comando whatis, este
comando assim como o apropos traz a informação do manual referente a string que você
buscou, com uma diferença, o apropos busca em todo o manual e o whatis busca apenas na
descrição do manual.
Como no Linux utilizamos muito a linha de comando é importante que saibamos através do
modo console procurar por um arquivo.
Tenha em mente que nem sempre você saberá onde um determinado arquivo se encontra, ele
pode estar fora de padrão ou com uma instalação especifica e nestes casos você precisará
localizar esse arquivo.
$ locate dovecot.conf
/usr/local/etc/dovecot/dovecot.conf
/usr/local/share/doc/dovecot/example-config/dovecot.conf
/usr/local/var/run/dovecot/dovecot.conf
/usr/src/dovecot.conf.tar.gz
O comando que utilizamos foi o locate, o nome é bem sugestivo e trata-se de um comando
para localização de arquivos. Um ponto importante é que ele não irá procurar o arquivo no
momento em que você o acionou, pois ele possui um banco de dados que roda uma ou mais
vezes por dia e atualiza as informações.
Você pode executar o update através do comando updatedb e com esta tabela devidamente
atualizada você consegue encontrar qualquer arquivo no sistema, veja que no nosso exemplo
ele trouxe várias linhas de resultado contendo a string “dovecot.conf”.
whereis passwd
passwd:/usr/src/apr-1.4.6/passwd /usr/bin/passwd /etc/passwd
/usr/share/man/man1/passwd.
1ssl.gz /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.
5.gz
Veja que ele trouxe a string passwd: seguida de tudo que ele achou, o primeiro passwd trata-
se de um fonte, o segundo é o binário de troca de senhas, o terceiro é o arquivo de senhas do
Linux, depois os manuais.
Você pode por exemplo no comando whereis especificar que tipo de resultado você quer, como
por exemplo apenas binário:
whereis –b passwd
Existem outras opções de uso do comando que você pode verificar no man whereis.
Tópicos Importantes:
Arquivos e diretórios
Ocultando arquivos e diretórios
Home
Caminhos relativos e absolutos
Veja abaixo uma lista parcial com os arquivos, termos e utilitários mais utilizados:
Arquivos e diretórios no Linux não possuem muito segredos, porém, existem algumas
configurações que ajudam você a identificar de forma mais simples quando trata-se de um
diretório e quando trata-se de um arquivo. Acompanhe a figura abaixo onde mostramos a saída
do comando ls / .
dltec@dltec:/$ ls
bin dev initrd.img media proc sbin sys var
boot etc lib mnt root selinux tmp vmlinuz
cdrom home lost+found opt run srv usr
dltec@dltec:/$
Vale lembrar que no Linux não faz diferença a extensão do arquivo, ela tem o intuito apenas de
informação, facilitar para quem está vendo o arquivo sobre o que se trata, mas não é
primordial sua utilização. Mas e então, a primeira vista, que conclusão tiramos da listagem do
diretório root (/)?
Bom, eu não tiraria nenhuma no momento. Vamos verificar um outro modo de visualizar esta
listagem.
dltec@dltec:/$ ls -p
bin/ dev/ initrd.img media/ proc/ sbin/ sys/ var/
boot/ etc/ lib/ mnt/ root/ selinux/ tmp/ vmlinuz
cdrom/ home/ lost+found/ opt/ run/ srv/ usr/
dltec@dltec:/$
Veja que agora utilizamos o comando ls –p o qual acrescentou uma / após cada diretório e
não fez o mesmo nos arquivos. Muito mais fácil assim não acha?
Outro parâmetro interessante é o color. Normalmente o color já vem habilitado como padrão
na maioria das distribuições. Caso esse não seja o caso, basta acrescentarmos o parâmetro --
color=auto. Este comando produz uma saída colorida, onde cada cor tem seu significado.
Vamos listar algumas delas.
Existem algumas outras cores que você verá depois, mas basicamente esta é uma das formas
mais praticas para identificar os tipos de arquivos e diretórios, pois trata-se do modo mais
diferenciado.
Podemos ainda exibir a saída do comando como uma listagem com as propriedades, veja a
abaixo.
dltec@dltec:/$ ls -l --color=auto -p
total 88
drwxr-xr-x 2 root root 4096 Jul 23 12:41 bin/
drwxr-xr-x 3 root root 4096 Jul 23 12:41 boot/
drwxr-xr-x 2 root root 4096 Jul 23 12:34 cdrom/
drwxr-xr-x 14 root root 4000 Sep 17 11:52 dev/
drwxr-xr-x 129 root root 12288 Sep 17 11:52 etc/
drwxr-xr-x 4 root root 4096 Sep 13 20:48 home/
lrwxrwxrwx 1 root root 36 Jul 23 12:40 initrd.img -> boot/initrd.img-3.2.0-
23-generic-pae
drwxr-xr-x 21 root root 4096 Jul 23 12:41 lib/
drwx------ 2 root root 16384 Jul 23 12:28 lost+found/
drwxr-xr-x 2 root root 4096 Apr 23 2012 media/
drwxr-xr-x 2 root root 4096 Apr 19 2012 mnt/
drwxr-xr-x 2 root root 4096 Apr 23 2012 opt/
dr-xr-xr-x 112 root root 0 Sep 17 11:51 proc/
drwx------ 3 root root 4096 Jul 23 12:47 root/
drwxr-xr-x 22 root root 820 Sep 17 11:52 run/
drwxr-xr-x 2 root root 4096 Jul 23 12:41 sbin/
drwxr-xr-x 2 root root 4096 Mar 5 2012 selinux/
drwxr-xr-x 2 root root 4096 Apr 23 2012 srv/
drwxr-xr-x 13 root root 0 Sep 17 11:51 sys/
drwxrwxrwt 7 root root 4096 Sep 17 12:21 tmp/
drwxr-xr-x 10 root root 4096 Apr 23 2012 usr/
drwxr-xr-x 14 root root 4096 Sep 16 20:10 var/
lrwxrwxrwx 1 root root 33 Jul 23 12:40 vmlinuz -> boot/vmlinuz-3.2.0-23-
generic-pae
dltec@dltec:/$
Perceba que para gerar esta saída utilizamos todas as opções que vimos anteriormente. O
comando ficou ls –l –color=auto –p , o –l significa lista longa, que é o que ele mostra, vamos
analisar uma saída. Acompanhe também na figura abaixo um exemplo.
Com estas informações você já pode identificar arquivos e diretórios sem maiores dificuldades.
Obs: Mais para frente nesse curso entraremos em mais detalhes sobre como interpretar o
campo de permissões do arquivo. Não se preocupe com isso nesse momento, tudo ficará
mais claro mais para frente.
Uma outra utilização que vale apena ressaltar no comando ls é a listagem recursiva, esta
opção é utilizada com o parâmetro –R.
A listagem recursiva irá executar um ls para cada diretório que for encontrado. Por exemplo, se
tiramos um ls -R do diretório teste, a saída irá mostrar o conteúdo do diretório teste e para
cada diretório que for encontrado ele irá executar um ls desse diretório e assim
sucessivamente. Veja abaixo.
Perceba que no primeiro nível temos os diretórios teste2, teste3, teste4 e teste5, dentro de
teste2 temos outro diretório teste2, dentro de teste5 temos outro diretório teste2, dentro deste
teste2, temos um diretório teste6, onde temos um diretório de número 8.
Se você reparar para cada diretório ele executou uma listagem também, em nosso caso não
havia nenhum arquivo dentro então nada foi exibido.
No Linux temos uma facilidade que são os diretórios ou arquivos ocultos. Normalmente estes
arquivos/diretórios ocultos são utilizados para não gerar volume desnecessário quando estamos
visualizando um determinado diretório. Vamos exemplificar esta questão, acompanhe na saída
seguinte.
dltec@dltec:~$ ls
Desktop Music Templates essentials php.versoes
Documents Pictures Videos examples.desktop
Downloads Public bin lpi102
dltec@dltec:~$
Veja que a listagem da imagem traz apenas alguns diretórios, nada muito poluído salvo alguns
arquivos e diretórios.
Agora vamos usar o comando ls –a para listar todos os arquivos, inclusive os ocultos.
dltec@dltec:~$ ls -a
. .dbus .mozilla Music
.. .dmrc .mysql_history Pictures
.ICEauthority .gconf .profile Public
.Xauthority .gnome2 .pulse Templates
.bash_history .goutputstream-2NA22W .pulse-cookie Videos
.bash_logout .gtk-bookmarks .xsession-errors bin
.bashrc .gvfs .xsession-errors.old essentials
.bashrc.swp .lesshst Desktop examples.desktop
.cache .local Documents lpi102
.config .mission-control Downloads php.versoes
dltec@dltec:~$
Perceba que agora vemos muitos outros diretórios que não estavam lá antes, estes são
diretórios ocultos. A maior parte é alguma configuração ou diretório de configurações de algum
aplicativo. Por exemplo, você poderá ver o diretório .mozilla que contém os dados do Firefox
ou o diretório .local onde ficam as configurações do KDE.
Uma questão muito importante a se saber sobre o Linux, é que o caractere “.” aparece em
todos os arquivos e diretórios ocultos.
Desde o início do curso até agora você já deve ter reparado que várias vezes falamos do
diretório home. Esse é o diretório especifico para armazenamento dos dados dos
usuários, por exemplo, o usuário mike possui por padrão seu home (sua casa) no diretório
/home/mike.
É importante ressaltar que nada impede que você utilize outro local para isso, porém você
estaria fugindo do padrão e os padrões foram criados para que o conhecimento pudesse ser
compartilhado por todos. Assim qualquer administrador que precise sabe onde ficam as coisas
desde que elas estejam utilizando os devidos padrões.
Dica:
Um uso comum que fazemos é criar o diretório /home em uma partição separada do HD,
desta forma podemos atualizar ou reinstalar o sistema operacional sem nos preocupar com
estes dados.
O diretório /home é muitas vezes referenciado pelo caractere “~” , por exemplo, de
qualquer lugar do sistema se você digitar cd ~ você será direcionado para o diretório
/home de seu usuário, caso seja o usuário root o diretório de home do mesmo é /root.
O caminho nada mais é do que a direção que você deve seguir, dentro da estrutura de
diretórios, para chegar a um determinado arquivo ou diretório.
O caminho absoluto inicia a partir do diretório raiz (o root) e guia você por entre a estrutura
de diretórios, desde da raiz até o destino final. Por exemplo, temos no linux um diretório onde
ficam instalados a maioria dos programas no linux. O caminho para esse diretório é /usr/bin.
Isso significa que o caminho absoluto para esse diretório é:
aluno@dltec-VirtualBox:~$ cd /usr/bin
aluno@ dltec-VirtualBox:/usr/bin$ pwd
/usr/bin
aluno@ dltec-VirtualBox:/usr/bin$ ls
[ linux32
2to3 linux64
2to3-2.7 linux-boot-prober
a2p listres
accountwizard lnstat
aconnect loadkeys
acpi_fakekey loadunimap
acpi_listen localc
Enquanto que o caminho absoluto inicia a partir do root, um caminho relativo inicia a partir
do seu diretório atual. Para indicar um caminho relativo utilizamos o "." (ponto) e o ".."
(ponto ponto).
O "." faz referência ao seu diretório atual e o ".." faz referência ao diretório pai do seu
diretório atual. Vamos exemplificar no exemplo abaixo.
Estamos no diretório /usr/bin e desejamos mudar para o diretório pai do /usr/bin, ou seja,
para o diretório /usr. Podemos fazer isso de duas formas:
aluno@dltec-VirtualBox:/usr/bin$ pwd
/usr/bin
aluno@dltec-VirtualBox:/usr/bin$ cd /usr
aluno@dltec-VirtualBox:/usr$ pwd
/usr
ou
aluno@dltec-VirtualBox:/usr/bin$ pwd
/usr/bin
aluno@dltec-VirtualBox:/usr/bin$ cd ..
aluno@dltec-VirtualBox:/usr$ pwd
/usr
Da mesma forma uma vez dentro do diretório /usr podemos ir para o diretório /usr/bin de
duas formas. Acompanhe abaixo.
Importante:
Na maioria dos casos você pode omitir o "./", pois ele está implícito. Ou seja, no exemplo
anterior, a partir do /usr para se chegar no /usr/bin basta digitar:
aluno@dltec-VirtualBox:/usr$ pwd
/usr
aluno@dltec-VirtualBox:/usr$ cd bin
aluno@dltec-VirtualBox:/usr/bin$ pwd
/usr/bin
Tópicos Importantes:
Arquivos e diretórios
Case sensitive (maiúsculas e minúsculas)
Globbing e quoting simples
Veja abaixo uma lista parcial com os arquivos, termos e utilitários mais utilizados:
A manipulação de arquivos e diretórios (criar, mover, copiar e deletar) é feita via linha de
comando basicamente através da utilização dos seguintes comandos:
É claro que existem maneiras mais simples de se fazer essas coisas através das interfaces
gráficas, no entanto, a utilização da linha de comando nos dá uma flexibilidade que não é
encontrada nas interfaces gráficas.
Antes de prosseguirmos para a explicação dos comandos vamos voltar a um tópico muito
importantes - os caracteres curingas (wildcards). Os caracteres curinga nos permitem fazer
a seleção de nomes de arquivos baseada em padrões de caracteres. Já vimos no tópico sobre
"Globbing" a utilização do * e ?. Agora veremos mais detalhes sobre os caracteres curinga.
Acompanhe na tabela abaixo.
WildCard Significado
* Corresponde qualquer caractere.
? Corresponde um caractere único.
[characters]
Corresponde qualquer caractere que seja membro do
grupo especificado. A especificação do grupo pode ser feita
através de:
Pattern Matches
* Todos os arquivos
g* Todos os arquivos que iniciem com “g”
b*.txt Todos os arquivos que iniciem com “b” e terminem com
“.txt”
Data??? Qualquer arquivo que inicie com “Data” e termine com
exatamente 3 caracteres
[abc]* Qualquer arquivo com “a” com “b” ou com “c” seguidos de
quaisquer outros carateres
[[:upper:]]* Qualquer arquivo que inicie com uma letra maiúscula
BACKUP.[[:digit:]][[:digit:]] Qualquer arquivo que inicie com os caracteres “BACKUP.”
seguido por exatamente 2 numerais
*[![:lower:]] Qualquer arquivo que não termine com uma letra
minúscula. Perceba que aqui estamos utilizando o ! para
negar a condição.
Dica: Você pode utilizar os caracteres curinga (wildcard) com qualquer comando que
aceite nome de arquivos como argumento.
Utilizamos para mover arquivos ou diretórios o comando mv. Este comando é uma abreviação
da palavra move (do inglês mover) e a sintaxe básica de comando é mv [origem] [destino],
desta forma, se temos um diretório teste e queremos move-lo para testeok basta digitar mv
teste testeok.
Veja o exemplo abaixo onde queremos mover a pasta netqmail-1.0.6 que se encontra em
nosso diretório home, para o diretório /usr/src.
mv netqmail-1.0.6 /usr/src/
Se você quiser, além de mover para o diretório você também pode no mesmo comando alterar
o nome que o diretório terá no seu novo destino. Para tal, utilize o comando conforme
mostrado abaixo.
mv netqmail-1.0.6 /usr/src/netqmail
Mas é importante lembrar que caso existe no destino um diretório com o nome que você está
especificando a pasta netqamil-1.0.6 constará dentro do diretório em questão.
No caso do nosso exemplo se houvesse a pasta netqmail o caminho total para acesso ao
diretório movido seria
/usr/src/netqmail/netqmail-1.0.6 .
O comando para copia de arquivos ou diretórios é o cp, que é uma abreviação da palavra
copy. A sintaxe básica do copy é similar a do comando mv, porém tem uma diferença básica,
ao copiar um diretório inteiro é necessário acrescentar o parâmetro –r que significa recursivo
(lembra do recursivo que vimos no comando ls??).
Este comando fará com que ele pegue qualquer diretório e acrescente a copia, ou seja, copiar o
diretório netqmail-1.0.6 para o diretório /usr/src seria realizado da seguinte forma, veja abaixo.
cp –r netqmail-1.0.6 /usr/src/
Dessa forma, todos os diretórios existentes dentro do netqmail-1.0.6 seriam também copiados.
Existem outros parâmetros que podem ser utilizados, segue abaixo alguns dos mais comuns
Case Sensitive:
Case sensitive basicamente significa que o sistema é sensível a diferença de caixa alta
(maiúscula) ou caixa baixa (minúscula). Isso na prática significa que para o sistema
operacional o arquivo arvore é diferente do arquivo Arvore. O mesmo vale para diretórios e
outras coisas mais e também para muitos aplicativos, um exemplo disso é que o banco de
dados MySQL ao criar um banco de dados de nome banco01 é diferente de BANCO01.
Isso faz muita diferença na hora de realizar cópias, interação em arquivos e outras coisas
mais. Precisa-se ter atenção a esta questão ou você estará manipulando algo que ou é
errado ou não existe.
Não é muito comum criarmos arquivos vazios mas as vezes é necessário ou simplesmente
preferimos criar o arquivo antes de começar a editar.
4.5.1 Touch
O comando touch (toque em inglês) é utilizado para gerar um arquivo vazio, ele apenas o cria
da forma que você solicitou. Ou seja, para criarmos um arquivo com o nome arquivo.txt
utilizamos da forma mostrada abaixo.
touch arquivo.txt
Vamos lembrar que no Linux a extensão não é tão importante, mas é bom utilizarmos alguma
referencia para que ao olhar para o arquivo já tenhamos em mente qual a finalidade do mesmo.
Temos algumas maneiras alternativas para gerar arquivos no Linux, vamos exemplificar
algumas abaixo.
>arquivo.txt
No caso acima, geramos um arquivo vazio, pegamos o nada, e jogamos para dentro dele.
Agora no próximo exemplo, utilizamos o comando echo gerando a palavra teste e direcionando
para dentro de arquivo.txt.
cat arquivo.txt
teste
Se em seguida você exibir o conteúdo do arquivo arquivo.txt verá que será exibido o conteúdo
"teste".
Obs: Podemos também abrir um editor de texto e salvar a saída do mesmo em um arquivo
que não existe, como é comum de fazermos em ambiente gráfico (abro o editor de texto,
coloco o conteúdo e salvo gerando assim meu arquivo). Veremos mais sobre editores de
texto em linha de comando no Linux mais para frente nesse curso.
Falamos anteriormente de como mover diretórios, agora vamos ver como nós podemos criar os
diretórios. Basicamente utilizamos o comando mkdir, o nome é bastante sugestivo, mk =
make – dir = directory (make directory).
mkdir teste
mkdir teste/teste
Informação importante:
mkdir –p teste/teste1/teste2/teste3/teste4/teste5/teste6
Agora foi criado todos os diretórios necessários para criar o ultimo que é o teste6. Com o -p
o sistema entende que como não existe o diretório anterior ele vai criando sucessivamente
todos eles.
Nós podemos aplicar esta ideia ao remover ou copiar diretórios, como exemplo podemos citar o
seguinte caso, em um backup eu tenho os diretórios organizados por data da seguinte forma:
2012-03-01, contendo diretórios até o mês de julho.
Suponha agora que eu queria apagar todos os diretórios que correspondam o período de
março até maio, para isso podemos utilizar o comando mostrado em seguida.
rm –vr 2012-0[345]-??
Com isso foram removidos os diretórios de março, abril e maio, independente do dia, desde que
contendo dois dígitos, no caso os dias menores que 10 eram compostos pelo 0 na frente, então
funcionou da forma adequada.
Capítulo 03 - O Poder da
Linha de Comandos
Objetivo do capítulo:
Sumário do Capítulo
Tópicos Importantes:
Arquivos e diretórios
Arquivos e compressão
Veja abaixo uma lista parcial com os arquivos, termos e utilitários mais utilizados:
tar
Opções comuns do tar
gzip, bzip2
zip, unzip
Extraindo arquivos individuais dos arquivos
1.1 Arquivamento
Um dos usos mais comuns para arquivamento é quando você vai pegar um código fonte de
algum aplicativo, ele vem arquivado normalmente com a ferramenta tar, ao desarquivar o
mesmo você tem um diretório e todos os arquivos fontes dentro.
Para exemplificar vamos criar dois arquivos de texto de nome teste.txt e teste2.txt e realizar o
arquivamento deles.
Primeiro criamos os dois arquivos teste.txt e teste2.txt utilizando o comando "touch" que já
estudamos anteriormente. Depois executamos o comando tar, ele nos mostrou o que foi
executado e então listamos os arquivos no diretório e constatamos que foi gerado um terceiro
arquivo de nome teste.tar.
Agora vamos ver como podemos visualizar o conteúdo deste arquivo via linha de comando,
ou seja, como podemos ver o que está dentro desse arquivo teste.tar. Acompanhe a seguir.
Veja que agora podemos ver o conteúdo do arquivo num formato similar ao do ls, vamos
explicar os parâmetros que vimos até aqui.
-v: verbose.
-c: Realiza a criação de um novo arquivo.
-f: executar sobre ou para o nome de arquivo informado, no caso é o arquivo de onde ele irá
ler ou onde vai gravar.
-t: realiza apenas a listagem do conteúdo sem realizar a extração.
Existem outras opções que também podem ser utilizadas, como por exemplo a função –r que é
para acrescentar (append) um novo arquivo ao fim do arquivo tar, veja abaixo como
funciona.
Primeiro realizamos a listagem do arquivo teste.tar mostrando que o mesmo continha dois
arquivos dentro dele.
Depois listamos o diretório onde você pode ver que ali existia o arquivo teste3.txt.
ls
E finalmente realizamos o comando tar –rvf teste.tar teste3.txt que inseriu o dentro do
arquivo teste.tar
Veja que ele traz o nome do diretório principal que é teste e traz o nome de cada arquivo
contido dentro do mesmo e de cada diretório .
E se nós quisermos extrair apenas um dos arquivos que está dentro do arquivo .tar, isso é
possível? A resposta é claro que sim.
É importante lembrar que caso o arquivo esteja em um diretório dentro do tar ele irá extrair
toda a estrutura de diretórios, mas não extrairá os arquivos, vamos ver um exemplo a seguir.
Observe que primeiro listamos o diretório atual onde estávamos (comando ls), havia apenas o
arquivo teste-dir.tar dentro do mesmo. Depois listamos o conteúdo do arquivo (tar -vtf teste-
dir.tar). Deste conteúdo solicitamos a extração do arquivo teste/teste3.txt (tar -xvf teste-
dir.tar teste/test3.txt) e ao realizarmos a listagem do diretório novamente lá estava o
diretório teste e ao listar o diretório vemos o arquivo que solicitamos que é o teste3.txt
O comando tar permite que durante sua utilização nós possamos realizar também a
compressão (muito comum este uso inclusive) através de dois parâmetros básicos que são:
Obviamente para utilizar estes parâmetros é necessário que você tenha estas ferramentas (gzip
e bzip2) instaladas em seu sistema, normalmente o gzip já vem por padrão mas o bzip2 precisa
ser instalado.
Um arquivo tar comprimido leva o nome de .tar.gz ou .tar.bz2 para simbolizar que o arquivo
inicialmente é um bzip ou gzip e após realizar a compressão você deve desempacotar o arquivo
tar, por isso o nome .tar.gz. Para exemplificar vamos fazer um teste onde vamos criar um
arquivo utilizando cada um dos formatos e ver a diferença entre os arquivos finais. Acompanhe
a seguir.
Veja que no inicio da tela realizamos a compressão nos dois formatos, o formato .tar sem
compressão nós já havíamos gerado, então depois realizamos a listagem dos arquivos, veja a
área que está selecionada na tela, você tem os três formatos, observe a diferença do tamanho
deles em bytes:
Como você pode ver a diferença realmente é considerável, se você pensar em grandes arquivos
de log por exemplo você chega a ter 2 GB diminuído em cerca de 20 MB, isso quando falamos
em backup é muito importante pois significa economia de espaço.
Informação adcional:
Outros compactadores:
Também temos disponíveis alguns outros compactadores como é o caso do zip, rar, 7zip e
muitos outros que existem disponíveis no Linux.
Nada impede você de gerar o arquivo tar e depois compactar com um compactador de sua
preferência, mas é importante lembrar que o gzip e o bzip2 estão disponíveis em todas as
distribuições.
Tópicos Importantes:
Veja abaixo uma lista parcial com os arquivos, termos e utilitários mais utilizados:
find, grep
less
head, tail
sort, cut, wc
Partial POSIX Basic Regular Expressions ([^ ], ^, $)
Partial POSIX Extended Regular Expressions (+, ( ), |)
Xargs
Saída Padrão
Muitos programas da linha de comando que utilizamos exibem seus resultados enviando esses
resultados para a saída padrão (standard output). Via de regra, a saída padrão utilizada é o
display, ou seja, nossa tela.
Para redirecionarmos a saída padrão para outro lugar, como um arquivo, utilizamos o caractere
">". Veja o exemplo abaixo.
Importante: o uso do caractere ">" faz com que toda vez que esse comando seja repetido (ls
> lista.txt) o arquivo seré sobrescrito e os dados anteriores serão perdidos. Para fazer de forma
incremental, ou seja, redirecionar o resultado para o final do arquivo lista.txt (sem apagar o
conteúdo anterior) basta utilizar o caractere ">>" (ls >> lista.txt)
Entrada Padrão
Muitos comandos utilizam como entrada padrão os dados vindo do teclado. No entanto, isso
também pode ser redirecionado, ou seja, podemos redirecionar a entrada padrão de um
comando para que ele utilize os dados vindo de outro arquivo e não do nosso teclado.
Acompanhe um exemplo a seguir.
O que fizemos foi informar ao comando grep sys para que ele utilize como entrada os dados
que estão no arquivo /etc/passwd. Ou seja, esse comando irá no arquivo /etc/passwd e irá
exibir na tela todas as ocorrências dos caracteres "sys" que ele encontrar.
Perceba que o comando anterior irá exibir na tela, pois não redirecionamos a saída padrão. Mas
poderíamos fazer esse redirecionamento também, acompanhe o exemplo abaixo.
Agora o que fizemos foi redirecionar a saída para que fosse enviada para o arquivo sys.txt
e não para a tela.
Este tipo de redirecionamento pode também ser feito de outras formas, não necessariamente
para utilização em arquivos de texto.
Na prática o que o comando faz é inicialmente descompactar o arquivo tar (gunzip) e depois
desarquivar o resultado com o comando tar
Uma das práticas mais comuns que utilizamos no redirecionamento I/O é a conexão de vários
comandos juntos, formando o que chamamos de pipes de linha de comando. Com os pipes, a
saída padrão de um comando é enviada para a entrada padrão do outro comando para
continuidade do processamento. Os dados enviados são processados pelo próximo comando
que mostrará o resultado do processamento.
Podemos dizer que os pipes são como se fossem uma peneira, o símbolo do pipe é “|” e
dependendo da fonte de seu terminal ele irá parecer como uma barra com um furo no meio. A
ideia é de um filtro, ou seja, vou barrar o conteúdo e deixar sair uma parte apenas, esta parte
é o que me interessa do conteúdo.
Vamos pegar como exemplo o arquivo /etc/passwd, dentro deste temos a entrada referente
ao usuário root, se eu quiser listar apenas esta entrada sem a necessidade de abrir o
arquivo eu poderia utilizar o comando mostrado a seguir.
root:x:0:0:root:/root:/bin/bash
Ou seja, listamos o arquivo /etc/passwd e filtramos a saída do mesmo para nos mostrar
apenas o que contivesse a palavra root, para isso utilizamos o comando grep, cuja função é
exatamente esta, exibir linhas que casam com uma expressão.
Informação importante:
A principal diferença entre o "|" e o ">", é que o Pipe envolve processamento entre
comandos, ou seja, a saída de um comando é enviado a entrada do próximo e o ">"
redireciona a saída de um comando para um arquivo/dispositivo.
Você pode notar pelo exemplo (ls -la | more) que ambos ls e more são comandos porque
estão separados por um "|". Se um deles não existir ou estiver digitado incorretamente,
será mostrada uma mensagem de erro.
Um resultado diferente seria obtido usando um ">" no lugar do "|". A saída do comando ls -
la > more seria gravada em um arquivo chamado more.
Poderíamos também sermos mais genéricos, solicitando que fosse exibido tudo que tivesse
/bin/bash, para isso utilizaríamos o comando conforme a seguir.
root:x:0:0:root:/root:/bin/bash
mike:x:1001:1001::/home/mike:/bin/bash
Este comando nos retornaria todas as linhas que iniciem pela letra m
Dica: O comando grep em especifico possui um parâmetro –i que pode ser utilizado para
deixar a interpretação insensível a maiúscula e minúscula (insensitive), dependendo do que
você está buscando no arquivo isso torna mais simples a formação do comando.
Existem outros comandos que podemos utilizar para filtrar conteúdo, por exemplo, digamos que
queiramos retirar uma lista de todos os usuários que estão no arquivo /etc/passwd, neste
caso podemos usar o comando cut. Vamos ver um exemplo e explicamos o comando em
seguida.
A parte da listagem do arquivo cat não é preciso explicar, portanto, vamos direto ao comando
cut. O parâmetro –d do cut especifica o delimitador, que no nosso exemplo é o “:”, depois
especificamos que queremos o primeiro campo da seleção (-f1), a saída do comando pode ser
verificada na figura abaixo.
usbmux
kernoops
pulse
rtkit
speech-dispatcher
hplip
saned
dltec
sshd
mysql
dltec1
Entendeu?
Você conseguiu entender o que o cut fez? Perceba que a saída do comando cat /etc/passwd
é algo do tipo:
root:x:0:0:root:/root:/bin/bash
mike:x:1001:1001::/home/mike:/bin/bash
Ao utilizarmos o cut -d ":" -f1 estamos solicitando apenas o primeiro campo da seleção.
root:x:0:0:root:/root:/bin/bash
mike:x:1001:1001::/home/mike:/bin/bash
Podemos ainda fazer um pipe de um pipe, ou seja, pegar um resultado filtrado e filtrar
novamente.
Vamos supor que queiramos contar a quantidade de resultados que este comando gerou, para
isso podemos acrescentar o comando wc com o parâmetro –l que utiliza a linha como base
de contagem. Vamos ver como fica, acompanhe o exemplo abaixo.
O comando wc possui vários parâmetros possíveis, vamos colocar alguns abaixo para a escolha
do que queremos contar.
-c: bytes
-m: caracteres
-w: palavras
-l: linhas
Ainda é possível acrescentar outros parâmetros no comando, por exemplo ordenação com o
comando sort.
Se você acrescentar o parâmetro –r ao sort ele irá trazer o resultado em ordem inversa ou
com o –R para aleatório.
asterisk
backup
bin
cl-builder
daemon
Debian-exim
games
gnats
irc
libuuid
list
LP
Os comandos head e tail também podem ser utilizados juntamente com outros comandos
através do pipe, os nomes dos dois comandos simbolizam exatamente o que eles querem dizer,
head (cabeça = inicio do arquivo), tail (rabo = final do arquivo).
É muito comum quando queremos verificar as ultimas linhas de um arquivo de log utilizarmos o
tail para exibição, vamos exemplificar com a figura a seguir.
Como você pode ver ele mostrou as últimas linhas do arquivo, mais especificamente as últimas
10 linhas que é o padrão dele.
Você pode utilizar o parâmetro –n para especificar a quantidade de linhas que deseja que ele
exiba e claro, dentro desta quantidade de linhas você por exemplo aplicar um grep para
procurar algo especifico dentro das linhas que ele vai exibir.
Também é possível utilizar o parâmetro –k para exibir uma quantidade X de bytes na saída
O comando head funciona da mesma forma mas a contagem dele é a partir do inicio do
arquivo e não do fim.
Uma utilização bastante comum do comando tail é com o parâmetro –f que abre as ultimas
linhas e continua carregando as demais linhas que forem inseridas no arquivo, isso é útil e
usado normalmente para leitura de arquivos de log em tempo real.
Com o comando tail –f, por exemplo, você pode acompanhar os logs do apache ou do squid
enquanto os acessos estão acontecendo.
Quando abrimos arquivos grandes para serem analisados ou mesmo lidos é muito comum ao
invés de abrirmos com um editor de texto abrirmos com um paginador.
Os mais comuns de serem utilizados são o more e o less, nas definições dos dois no manual
diz o seguinte:
As diferenças básicas entre os dois são que o less permite que você volte o arquivo, enquanto
o more permite que você apenas avance no arquivo.
Outra questão base é que o less não precisa carregar o arquivo inteiro para exibir, se você abrir
um arquivo muito grande isso é de grande ajuda.
Outra diferença grande é que o less permite que você utilize alguns comandos similares aos do
editor vi para fazer procura no arquivo e outras coisas mais.
Como todo usuário nós temos muitas vezes que manipular arquivos de texto, procurar
conteúdos, configurações e coisas do tipo. No Linux é possível fazer tudo isso de forma muito
simples utilizando a linha de comando.
Falamos anteriormente sobre o comando locate, uma outra opção para pesquisa de arquivos é
a utilização do comando find, o nome já diz tudo (find = encontrar).
Digamos que estamos em qualquer lugar do sistema e queremos localizar o arquivo de nome
apache2.conf (lembrando que no caso em questão o arquivo existe no mesmo pois o servidor
apache está funcionando). Veja o comando a seguir.
Se ele encontrar o arquivo ele irá retornar o caminho completo para o mesmo.
O comando find permite também que adicionemos comandos para ele, por exemplo,
digamos que queiramos encontrar todos os arquivos alterados a mais de 20 dias em um
diretório e fazer a remoção do mesmo, para tal utilizaríamos o comando conforme mostrado
abaixo.
No caso o sistema irá procurar os arquivos com alteração a mais de 20 dias e executará o
comando rm para remover, as duas chaves que existem após o rm é o valor que o find
encontrar e a \ significa o fim do comando.
Dica: Procure ajuda sobre o comando find (man find) e verifique quais parâmetros que
podem ser utilizados e o que faz o -ctime.
Aqui vamos ver um pouco de expressões regulares, de forma bastante superficial, apenas
para termos uma ideia.
As expressões regulares são utilizadas quando queremos buscar algo mais especifico onde
apenas uma única palavra não traria o resultado desejado.
Existem alguns caracteres especiais que são utilizados para isso, alguns deles até já vimos aqui
como o ^ para referenciar inicio de linha ou opções de valores como [a-z] que seria qualquer
caractere de a até z minúsculo.
Vamos então na sequência ver mais um pouco a respeito das expressões regulares.
ls /home/mike/*.txt
onde queremos procurar qualquer coisa terminada em .txt dentro do diretório /home/mike.
Exemplo 2 – Interrogação(?)
Também temos outros caracteres especiais como “?” (interrogação) que representa qualquer
coisa apenas uma vez. Acompanhe o exemplo abaixo:
ls /home/mike/test?.txt
Esta expressão encontrará por exemplo o arquivo teste.txt mas não encontrará o teste2.txt
Exemplo 3 – Colchetes []
Podemos também usar sequências de caracteres com o [ ] (colchetes). Um exemplo seria
conforme abaixo:
ls /home/mike/teste[0-9].txt
Nesse comando o resultado mostraria para nós o arquivo teste2.txt mas não mostraria o
arquivo teste.txt
A primeira vista parece estranho, mas na verdade é bem simples, nós utilizamos o egrep invés
do grep porque o egrep é um alias (apelido) para o comando grep –E que significa a
utilização de expressões regulares estendidas.
No nosso caso o primeiro comando egrep informou para ele procurar valores que fossem um
numero de 0-9 de até 3 casas, ou seja [0-9] repetindo + {2} a regra, isso é o mesmo que
escrever [0-9][0-9][0-9].
No segundo egrep utilizamos expressões simples separadas por um “|” (pipe), o pipe neste
caso significa que pode ser o resultado da direita ou o da esquerda, no pé da letra, é a
representação de OR (OU).
Informação importante:
Imagine por exemplo que você quer listar todas as linhas de um arquivo que contenha um
endereço ip. Os endereços possuem tamanhos variáveis, onde eles podem ter de 1 a 3
dígitos, repetindo este padrão por mais 3 vezes separados por um ponto (.). Você poderia
utilizar o comando da forma abaixo:
Tópicos Importantes:
Veja abaixo uma lista parcial com os arquivos, termos e utilitários mais utilizados:
/bin/sh
Variables, Arguments
for loops
echo
Exit status
pico, nano, vi (only basics for creating scripts)
Bash
if, while, case statements
read and test, and [ commands
Um script é nada mais que uma série de comandos colocados em ordem dentro de um
arquivo para que estes sejam executados sempre da mesma forma. Os scripts podem ou não
receber valores extras pela linha de comando, isso vária de acordo com a finalidade do script.
VI
Gnu NANO
Emacs
Pico
Em alguns casos você tem apenas a versão pura do vi instalado, este é um pouco mais
complexo de se utilizar pois depende de muitas funções do teclado.
Já a versão vim já possui algumas facilidades de uso, mas os comandos que passaremos aqui
correspondem aos dois.
vi nome_do_arquivo
:open nome_do_arquivo
Obs: lembre-se que no caso de estar dentro do vi para abrir o arquivo é necessário passar o
caminho todo para ele (ex: :open /etc/apache2/sites-enabled/000-default)
Ao entrar no editor você não estará em modo de edição, para isso é necessário pressionar a
tecla i do teclado ou o botão insert, desta forma você estará pronto para começar a digitar.
Comandos no vi:
i: inserir
x: apaga um caractere
dd: apaga uma linha
o: adiciona uma nova linha e entra em modo edição (i)
q: sair
w: salvar
Importante: para alterar de um comando para outro é necessário pressionar a tecla esc
para sair do modo que você está.
Por exemplo, para salvar o documento que você está utilizando é possível utilizar o comando
:wq, onde o w seria para salvar e o q para sair do vi.
Um comando muito útil é o split, utilizado para abrir um segundo conteúdo na mesma
interface. Por exemplo, vamos dizer que você está com o arquivo do apache instalado e quer
abrir a configuração do serviço de ftp, você então digita o comando abaixo
:split /etc/vsftpd.conf
Com isso sua tela será dividida ao meio (horizontalmente) e você pode alterar entre elas com o
comando Ctrl+w . Se quiser uma divisão vertical utilize vsplit .
Veja abaixo uma tela do vi, onde estamos com o vi aberto com dois arquivos de código fonte,
como você pode ver o vi permite a utilização de syntax hilight.
Dica: O mais importante de tudo é que você se sinta bem ao utilizar um determinado editor
de texto, seja ele qual for. Mas também é muito importante que você tenha alguma prática
em outro tipo de editor, como uma alternativa, pois pode acontecer de o sistema que você
precisar manipular não ter o editor de sua preferência.
Maiores informações sobre os editores você pode ver no man de cada um deles.
Um shell script pode ser basicamente uma série de comandos colocados juntos dentro de
um arquivo para ser executado, como também pode ser praticamente um programa inteiro,
depende muito do que você coloca dentro dele. Aqui vamos cobrir apenas scripts em bash .
Normalmente ao abrir um script você verá no seu inicio qual o interpretador deste, no caso de
um script em bash normalmente será conforme mostrado a seguir.
#!/bin/bash
Este apontamento indica como o script deve ser executado quando for chamado.
Nada impede que você o chame usando outro interpretador, mas provavelmente o script
retornará erro neste caso, porém se você apenas o executar sem especificar o interpretador
então ele precisa desta informação para saber como deve proceder a execução.
Atente que definimos a opção :set number no vi para que exibisse no canto esquerdo o
número das linhas, assim fica mais fácil de explicar.
Este é um pequeno exemplo de shell script, vamos na sequência utilizar algo mais real, apenas
como forma de exemplificar o que pode ser feito.
Pense que este arquivo possui 84 linhas, imagine que tamanho ficaria isso se fosse uma única
linha de comando!
Linha de comando:
$ for i in *; do if [ -e "$i" ]; then echo "O Arquivo $i existe"; echo "$i" >
/tmp/teste2.txt; sleep 1 ;else "Nao encontrei o arquivo informado" ; fi; done
Arquivo:
#!/bin/bash
for i in *; do
if [ -e "$i" ]; then
echo "O Arquivo $i existe"
echo "$i" > /tmp/teste2.txt
sleep 1
else
"Nao encontrei o arquivo informado"
fi
done
Na linha de comando para não precisar digitar o if você pode usar a ferramenta test juntamente
com estas opções, por exemplo, testar se um arquivo tem permissão de escrita para você:
Nesse caso nós utilizamos o echo para definir, se for verdadeiro utiliza-se o comando da
esquerda, se for falso, utiliza-se o comando da direita.
Capítulo 4 – O sistema
operacional Linux
Objetivos do Capítulo
Ao final desse capítulo você deverá ser
capaz de:
Sumário do Capítulo
Tópicos Importantes:
Veja abaixo uma lista parcial com os arquivos, termos e utilitários mais utilizados:
Hoje em dia temos muitos sistemas operacionais, mas os mais conhecidos são o MS Windows,
MacOS, Linux e os derivados de BSD como o FreeBSD e OpenBSD.
O MacOS da Apple é baseado em BSD também, então acaba sendo um sistema muito parecido
com o Linux. A grande diferença é o Windows, que não é baseado em Unix como os outros, o
sistema da Microsoft também incorporou algumas coisas do Linux e BSD, por exemplo, da
versão 2000 do Windows em diante não é necessário reiniciar o computador após trocar a
configuração de rede porque foi implementando um modelo baseado em BSD. Uma das grandes
vantagens dos sistemas "Unix Like" é a questão da segurança devido a seu modelo de
permissões e arquitetura do sistema.
O Windows como você já deve ter percebido é líder no mercado de Desktops, mas nos
últimos anos o Linux evoluiu muito nesta área. Se você comparar as primeiros interfaces
gráficas com as atuais você consegue ter uma noção nítida desta questão.
Alguns anos atrás era comum ouvir as pessoas falando que não usavam Linux porque não
conseguiam utilizar o cdrom ou o disquete, isso tudo na verdade se dava devido a diferença de
conceito, no Windows você coloca o CD no drive e o Windows já o disponibiliza para você, no
Linux era necessário utilizar o processo de montagem manualmente, existiam alguns
programas que ajudavam neste processo como o automount que já não é mais usado. Com a
chegada do haldaemon e posteriormente do udev isso tudo mudou, o Linux tornou-se mais fácil
para trabalhar com dispositivos removíveis.
Fora estas questões a grande diferença é a questão do modelo comercial, como o Windows é
proprietário e ninguém além da própria Microsoft pode ter acesso ao código fonte do mesmo
isso gera um entrave muito grande, pois não sabemos até onde nossos dados são mantidos em
sigilo já que o código do mesmo é fechado.
O mesmo é claro acontece com o sistema da Apple, por mais que o sistema seja baseado em
BSD a apple não libera a sua versão das coisas em modelo aberto, assim sendo, a mesma
duvida recai sobre a apple.
Algum tempo atrás a Sun Microsystem abriu o código fonte de seu Solaris (Unix da Sun)
criando assim o projeto OpenSolaris, do qual rapidamente nasceu algumas distribuições. A
licença da Sun não é GPL, porém, também permite visualização e alteração do código fonte.
Com a aquisição da Sun pela Oracle o projeto foi extinto porém criou-se um fork do mesmo,
uma das distribuições existentes é o OpenIndiana, você pode ver mais a respeito em
http://openindiana.org/
Agora como uma opinião pessoal eu diria, o melhor sistema operacional a ser utilizado
depende muito de sua necessidade, existem sistemas operacionais que são excelentes em
algumas tarefas e pecam em outras. Existem restrições de projeto que também não lhe
permitem uma escolha, como por exemplo a utilização de banco de dados SQL Server ou
páginas escritas em ASP utilizando recursos que só existem no Windows (como o framework
.NET). Tirando estes casos é quase sempre possível a utilização de Linux e existem aqueles que
preferem o BSD ao Linux.
Distribuição debian
Normalmente nós utilizamos um sistema operacional quando o mesmo está estável, salvo
quando queremos testar novos recursos. Em sistemas Debian nós temos 3 estágios, sendo
eles, stable (estável), testing (teste), unstable (instável).
No caso do Debian basicamente a coisa funciona assim, quando uma versão stable é lançada os
pacotes da unstable são colocados na testing e começam a sofrer alterações (já houve casos
onde este período durou cerca de 5 anos). Após o sistema estar de acordo a equipe do Debian
coloca a testing em freeze (congelado), neste momento o sistema não recebe mais
modificações de versões, apenas correções das versões atuais. Algum tempo depois ele se
tornará a nova versão testing, a unstable continuará sempre unstable e uma nova série de
pacotes entram na testing que um dia se tornará estável novamente.
Também é possível atualizar a distribuição de oldstable para stable (você usava a stable e
agora existe uma nova stable), utilizando o gerenciador de pacotes apt-get. Após fazer as
devidas configurações basta realizar o comando apt-get dist-upgrade que todo o seu sistema
será atualizado para nova versão, é claro que você pode atualizar também para testing ou
mesmo para unstable porém não é recomendado para sistemas em produção.
Maiores informações sobre as versões do Debian podem ser verificadas no link abaixo:
http://www.debian.org/releases/
Distribuição CentOS
O CentOS é baseado no RedHat Enterprise Linux, basicamente a RedHat disponibiliza todo o
código fonte de seus sistema operacional e o pessoal do CentOS baixa os fontes, compila e
transforma em um CD para você provendo as atualizações e etc.
Baseado nesta questão é trabalhado o ciclo de vida que a RedHat estabelece, as versões 5 e 6
destes possuem um tempo de vida de 10 anos, seguido de 3 anos de tempo de vida extra. As
versões 3 e 4 já tiveram seu tempo de vida encerrado, a versão 3 em 2010 e a versão 4 em
2012.
Maiores informações sobre o tempo de vida desta pode ser verificado no link abaixo:
https://access.redhat.com/support/policy/updates/errata/?cid=1480606
A utilização de linha de comando, como você já pode ver no decorrer do curso, exige muito
mais habilidade de que simplesmente pressionar um botão do mouse.
Com certeza a curva de aprendizado para utilização de linha de comando é maior, mas você
sempre aprenderá como as coisas funcionam.
Através da linha de comando você pode passar muitos parâmetros para o sistema, e como já
foi dito anteriormente, no Linux é possível fazer praticamente tudo através da linha de
comando, exemplos disso que eu tenho da “vida real” são:
Gravação de TV
Alteração de Metadados de Imagens
Inserção de Marca d’agua em Imagens
Backups
Monitoramento
Scripts para automação de processos.
Seja feito digitando manualmente ou através de scripts, no fim tudo é linha de comando e isso
nos permite dimensionar de forma mais inteligente os recursos que dispomos.
Tópicos Importantes:
Hardware
Veja abaixo uma lista parcial com os arquivos, termos e utilitários mais utilizados:
Hard drives and partitions, motherboards, processors, power supplies, optical drives,
peripherals
Display types
Drivers
2.1 HD e Partições
Também podemos utilizar o comando dmesg | less para tentar localizar as informações do
disco, veja abaixo com o resultado da busca no dmesg
Perceba que temos destacado a palavra SAMSUNG que foi o argumento da busca feito e em
azul temos as partições listadas sda: sda1 sda2 sda3.
Perceba que no caso para o disco sda as partições exibidas são exatamente as informadas
anteriormente (sda1 sda2 sda3).
Quando nós ligamos um dispositivo de bloco, como um pendrive por exemplo, ele é exibido da
mesma forma tanto no dmesg devido ao reconhecimento do dispositivo e no fdisk para poder
verificar as partições e fazer a montagem das mesmas.
Curiosidade:
A pouco tempo atrás para utilizar gravadores de CD no Linux normalmente era preciso
especificar no grub/lilo a opção hdX=ide-scsi, neste caso o X era o drive de CD.
Por exemplo, hdc e habilitando o parâmetro ide-scsi ativava a emulação de scsi que era
necessária para gravação de CDS, atualmente este processo não é mais necessário
conforme já informamos anteriormente.
Alguns dispositivos no Linux precisam de drivers extras para rodar. No Linux não chamamos
de drivers e sim de módulos, estes módulos externos normalmente vem em código fonte
para ser compilado.
E existem alguns binários que executam algumas compilações mas a base do código é
proprietária. Um exemplo disso são os drivers de vídeo da NVIDIA, alguns Linux já trazem
uma opção de instalação automática, mas você pode baixar o driver para Linux no site da
NVIDIA e tendo os pacotes certos a compilação e instalação do mesmo ocorre de forma
razoavelmente automática.
Existem algumas placas de rede que utilizam drivers externos para funcionar, hoje isso não é
tão comum de se ver mas pode acontecer. Se o fabricante disponibiliza o driver é importante
observar as limitações do mesmo, algumas vezes o mesmo só funciona em algumas versões de
kernel, mas realizando a instalação o mesmo é inserido no kernel do Linux e passa a funcionar
de forma automática.
Existem também alguns drivers que são utilizado para liberação de recursos, como acontece
com algumas controladores scsi/raid que possuem softwares de gerenciamento e
monitoramento para o Linux.
No geral para a compilação destes módulos é necessário que você tenha os aplicativos gcc,
make, g++ além dos fontes do kernel, com tudo isso devidamente instalado os passos de
compilação normalmente são make, make install.
Em alguns casos é necessários executar o arquivo configure para que este gere o arquivo
Makefile responsável pelas instruções de compilação, mas não é tão comum para módulos.
Existe no Linux um utilitário muito bom chamado hwinfo, que permite que você gere um
dump de todo o hardware disponível.
O hwinfo traz informações sobre memória, hd, placa mãe, processador e outros dispositivos.
Veja a seguir a saída do comando referente a memória.
No Linux existem disponíveis recursos para APM (Advanced Power Management) e ACPI
(Advanced Configuration and Power Interface).
Atualmente todos os laptops suportam ACPI, o suporte já vem ativo no Kernel do Linux
bastando que seja feita apenas a configuração do mesmo. O APM e o ACPI basicamente
realizam o gerenciamento de energia, a verificação se uma fonte está ligada ou se a bateria
está descarregada. Também disponibiliza, por exemplo, a configuração para ajustes de brilho
do monitor.
Tópicos Importantes:
Kernel
Processos
syslog, klog, dmesg
/lib, /usr/lib, /etc, /var/log
Veja abaixo uma lista parcial com os arquivos, termos e utilitários mais utilizados:
3.1 Kernel
As informações do kernel durante a execução ficam localizadas nos diretório /proc, /dev, por
exemplo, nosso drive de CD após reconhecido aparece como dispositivo em /dev/sr0, se você
verificar em /proc/scsi poderá ver os dispositivos reconhecidos.
3.2 Processos
Todo processo executado gera um número chamado PID (process ID). Este número é
criado também no /proc, onde você pode verificar algumas informações sobre os processo,
mas existem outros meios de se ter acesso as informações mais relevantes, uma delas é
através do comando ps. Acompanhe na imagem abaixo.
As informações do processo no /proc você pode verificar no man proc que irá trazer uma
explicação detalhada de cada item.
Outra forma muito utilizada para acompanhar os processos é através do comando top. O
comando top mostra em tempo real o que acontece, veja abaixo.
A verificação da memória via linha de comando é realizada através do comando free, veja a
seguir a saída do comando.
dltec@dltec:~$ free
total used free shared buffers cached
Mem: 738856 508056 230800 0 69068 298372
-/+ buffers/cache: 140616 598240
Swap: 1046524 0 1046524
dltec@dltec:~$
Atente que esses valores são exibidos em kilobytes. Uma informação importante é que o
campo shared é obsoleto e deve ser ignorado de acordo com informação no manual.
Você pode especificar alguns parâmetros para facilitar a leitura, como por exemplo –m para
exibição de memória em MB, ou –g para GB, veja abaixo o mesmo resultado anterior agora
com –m.
dltec@dltec:~$ free -m
total used free shared buffers cached
Mem: 721 496 225 0 67 291
-/+ buffers/cache: 137 584
Swap: 1021 0 1021
dltec@dltec:~$
Dica: O comando top já demonstrado anteriormente também permite que você ordene os
resultados baseado na utilização de memória.
syslog
O syslog antes de ser um aplicativo ele é um protocolo definido pela RFC5424. Com base nesta
RFC foi criado no Linux os aplicativos syslog, rsyslog, syslog-ng e outros.
O syslog permite uma divisão das mensagens recebidas utilizando alguns nomes de
serviços e outras facilities, desta maneira é possível pelo aplicativo separar as mensagens
que recebe e organizar em arquivos separados
lpr.* -/var/log/lpr.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log
Ou seja, ele recebe a informação do log com os parâmetros lpr, mail e user (além de outras) e
direciona cada um para um determinado arquivo.
Também é possível direcionar vários tipos de mensagens para um único arquivo, veja a seguir.
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none -/var/log/messages
O resultado disso tudo, no caso do servidor de onde pegamos essa configuração, é para o
arquivo /var/log/mail.log o seguinte conteúdo.
Ou seja, no fim, os aplicativos mandam as mensagens pelo syslog e o rsyslog recebe e trata
estas mensagens.
klog
O Kernel do Linux também gera mensagens que são interpretadas pelo syslog, anteriormente
havia um daemon chamado klogd para realizar a recepção destas mensagens, porém
atualmente o rsyslog realiza todo o processo.
No entanto, é comum ainda encontrarmos sistemas mais antigos (Debian) ou sistemas CentOS
que ainda utilizam desta forma.
Vale a pena mencionar que o CentOS utiliza o sysklogd para daemon de syslog, o mesmo
possui sua configuração em /etc/syslog.conf.
dmesg
As mensagens do kernel também podem ser exibidas pelo comando dmesg. Já vimos um
pouco sobre esse comando no tópico sobre HD e partições.
Este comando exibe um buffer de 16384 bytes, após isso é feito o dump para ao arquivo
/var/log/dmesg. Este buffer é necessário pois de acordo com a falha apresentada a
mensagem de erro pode ocorrer apenas no buffer, não chegando a ser transferida para o
arquivo de log devido a algum tipo de travamento.
No quadro abaixo descrevemos a estrutura padrão de diretórios do Linux apenas para que
você tenha uma noção melhor da finalidade de cada diretório.
/ - Raiz do sistema
/bin - Binários do sistema
/boot - Arquivos necessários para o boot do sistema
/dev - Arquivos relacionados a comunicação com dispositivos
/home - Arquivos de usuários
/lib - Bibliotecas do sistema
/lib32 - Bibliotecas do sistema para compatibilidade com sistemas 32 bits
/media - Medias removíveis (pendrive, cds etc..)
/mnt - Montagem de dispositivos (cds, pendrives, etc)
/opt - Diretório para sofwares que não são do próprio sistema (software externos)
/proc - Sistema de arquivo virtual para utilização de memória e alguns dispositivos
/root - Diretório do usuário root
/sbin - Binários do sistema para serem utilizados apenas pelo root
/srv - Arquivos para serem oferecidos para serviços como ftp, rsync e outros
/sys - Arquivos específicos de devices plug and play?
/tmp - Arquivos temporários
/usr - Arquivos instalados pela distribuição
/var - Dados variáveis como logs , fila de e-mail e outros.
De todos estes diretórios existem dois em especial que precisam ser mencionados, sendo
eles:
/etc/
/var/log
Estes diretórios são dos mais utilizados por qualquer administrador, o diretório /etc/ contém
normalmente a configuração de todos os serviços que você executa e o /var/log contém
os logs destes serviços. Vamos exemplificar.
Como já foi falado os gerenciadores de pacotes possuem uma lista com os pacotes. Ele
utiliza esta lista para poder realizar o download dos pacotes e suas dependências.
Tenha em mente que cada repositório possui sua lista de arquivos lá e quando você solicita a
instalação de algo o pacote é armazenado em /var/cache/apt/archive. Aqui ele será
processado após o download e caso o download seja interrompido o pacote ficará em
/var/cache/apt/archives/partial.
No caso do gerenciador de pacotes yum existem três comandos base para limpar os dados do
mesmo, sendo eles:
Apenas para mantermos claro a questão do pacote, vamos novamente explicar alguns detalhes.
Pacotes neste caso são uma série de arquivos e scripts prontos para serem executados
através de um gerenciador de pacote e mantidos todos em um único arquivo
Debian:
http://www.debian.org/doc/manuals/maint-guide/
RPM:
https://fedoraproject.org/wiki/Packaging/Guidelines
http://www.ibm.com/developerworks/library/l-rpm1/
http://www.gurulabs.com/GURULABS-RPM-LAB/GURULABS-RPM-GUIDE-v1.0.PDF
3.7 Bibliotecas
Já falamos aqui sobre biblioteca e agora vamos ver um pouco mais sobre o tema com o intuito
de deixar claro alguns pontos importantes. A biblioteca é na verdade um código que é criado
para ser utilizado por outros programas, com o objetivo de permitir a utilização de recursos já
previamente criados.
Basicamente imagine o seguinte, o aplicativo wget que é utilizado para realizar downloads via
linha de comando precisa acessar algumas vezes sites que utilizam SSL. Para isso ele precisa
ter suporte a SSL, no caso o wget utiliza a biblioteca libssl. Através do comando ldd você
pode ver as bibliotecas que um determinado software utiliza, vamos ver o caso do wget na
figura abaixo.
Como você pode ver o wget utiliza algumas bibliotecas, para ssl e outras finalidades. O mesmo
acontece com muitos outros aplicativos, em geral como o Linux é aberto, ao invés de você criar
uma biblioteca de criptografia você usa a libcrypto, e assim por diante, de acordo com o que já
existe disponível. Dessa forma você ganha tempo, o seu software utiliza bibliotecas de
excelente qualidade e você foca nas necessidades de seu software.
Tópicos Importantes:
Veja abaixo uma lista parcial com os arquivos, termos e utilitários mais utilizados:
route
resolv.conf
IPv4, IPv6
ifconfig, netstat, ping
ssh, dig
No Linux é normal termos bastante convívio com ambientes de rede por isso é importante
mencionarmos aqui algumas questões sobre esse tema.
Uma rede de computadores nada mais é que um grupo de computadores que “falam” uns com
os outros, permitindo assim o compartilhamento de recursos como arquivos, impressoras e
outras finalidades.
Quando você passa a ter a necessidade de acessar algum conteúdo externo (que não esteja na
sua rede) isso é realizado através de um roteador, que é o dispositivo que coloca você em
contato com a internet, seja através de um modem adsl ou uma conexão dedicada.
Muitas pessoas/empresas utilizam o Linux como roteador. Além de possível essa solução se
torna bem flexível devido a quantidade de recursos disponíveis no Linux. Veja abaixo uma
topologia simples como exemplo.
Esta é uma topologia muita utilizada em ambientes de escritório e até mesmo em empresas
maiores. Quanto maior a empresa, mais micros e switches você encontrará, mas a ideia básica
é que você terá esses micros conectados no switch e o switch conectado no roteador/firewall.
É importante ressaltar que tanto a função do roteador quanto do firewall podem ser realizados
pelo Linux ou estarem em equipamentos com essa finalidade própria. Normalmente o firewall é
um firewall Linux (existem muitos firewall BSD também além de soluções proprietárias).
4.2 DNS
DNS é DOMAIN NAME SERVICE ou seja, Serviço de Nome de Domínio. A ideia do DNS é
simples, ele pega os endereços IPs e traduz para um nome. Imagine o seguinte, um endereço
IP hoje, na versão IPv4, possui quatro sequências numéricas que vão de 0 até 255. Por
exemplo, o endereço IP do site www.uol.com.br é 200.221.2.45.
E essa é justamente a função do DNS, ao digitarmos www.uol.com.br o DNS irá traduzir esse
endereço para 200.221.2.45, ou seja, ele realiza uma conversão de nomes para endereços IP.
O dns também permitiu a criação de outros tipos de registros que no caso são utilizados para
informar qual o host de email, qual o servidor de dns do domínio, quando o mesmo foi
modificado, quem é o contato do domínio e por ai vai.
No Linux temos vários aplicativos para fazer consultas em serviços de dns. O pacote bind-
utils (CentOS) / dnsutils (Debian) trazem uma série de ferramentas como os comandos
dig, nslookup e o comando host que já é padrão no Linux.
Por exemplo, para saber por exemplo qual o endereço de mx (servidor de email) do domínio
dltec.com.br podemos utilizar o comando dig. Veja o exemplo a seguir.
$ dig –t mx dltec.com.br
O comando trará a seguinte saída (extraído apenas a parte que nos interessa)
Ou seja, o domínio dltec.com.br tem o MX apontado para o host dltec.com.br com prioridade 0.
Em seguida você poderia digitar dig –t A dltec.com.br para saber qual o ip do host .
Vamos separar a configuração de rede para facilitar o entendimento em dois pontos, um que é
o manual e outro que é a configuração por arquivo.
Também iremos diferenciar cada uma das formas nos sistemas Debian e CentOS, pois cada
um apresenta suas particularidades.
Configuração de Rede:
a configuração do endereço IP
a configuração de sua rota para internet (apontamento do gateway)
a configuração dos servidores de DNS
Configurando endereço IP
Vamos imaginar nossa rede residencial, vamos supor também que iremos utilizar uma faixa de
IP 192.168.0.0/24, onde o host 1 (IP: 192.168.0.1) será o nosso roteador (ou seja, esse é
o endereço do seu roteador ADSL de conexão com a Internet da sua casa) e o host 10 (IP:
192.168.0.10) será o nosso endereço IP (ou seja, o endereço IP do seu micro).
Então para configurarmos o ambiente que descrevemos acima usaremos o comando abaixo.
Feito isso, se você digitar o comando ifconfig, sem nenhum parâmetro, deverá trazer uma
saída similar a figura a seguir.
Configuração do roteador
Agora vamos realizar o apontamento do roteador, ou seja, definir qual o nosso gateway
default. Esta expressão é bem assertiva porque gateway significa porta de entrada e default
significa padrão, ou seja, para a internet, nós vamos definir a nossa porta de entrada padrão.
Para isso utilizamos o comando route, que deve ser utilizado na seguinte sintaxe:
No nosso caso, de acordo com ambiente que descrevemos anteriormente, o comando seria:
Veja que descrevemos na sintaxe do comando que após a opção add|del deveria vir a definição
de host ou net e depois a rede e no exemplo colocamos apenas default. A expressão default
significa –net 0.0.0.0/0, ou seja, isso significa qualquer rede. No caso este endereço é
substituído pela palavra default ou então você pode se preferir, digitar o comando com a rede
completa, que ficaria da seguinte forma:
Para listar as rotas que temos agora digite o comando route –n (o parâmetro –n é para que
ele não tente resolver nomes para o endereço, mostrando assim apenas os números dos
endereços).
Na imagem abaixo você pode verificar que do lado direito ele traz na segunda linha o endereço
de destino 0.0.0.0 através do roteador 192.168.0.1 através da interface eth0, desta forma está
definida a nossa configuração de rota padrão.
Ou seja, no nosso exemplo, basta abrir com o editor de texto que acharmos mais interessante
e colocar a seguinte informação dentro do arquivo:
nameserver 8.8.8.8
nameserver 8.8.4.4
Testando as configurações
Bem, agora que tudo está configurado vamos testar se a configuração está ok. A ferramenta
básica de teste de conectividade é o ping.
A ideia do ping é que ele manda um pacote icmp e este pacote é respondido pelo host de
destino, se o host de origem receber a resposta então está tudo certo.
Vamos fazer o teste realizando o ping para o nosso gateway. Acompanhe na saída abaixo.
$ ping -c 5 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_req=1 ttl=255 time=5.62 ms
64 bytes from 192.168.0.1: icmp_req=2 ttl=255 time=2.25 ms
64 bytes from 192.168.0.1: icmp_req=3 ttl=255 time=2.26 ms
64 bytes from 192.168.0.1: icmp_req=4 ttl=255 time=2.93 ms
64 bytes from 192.168.0.1: icmp_req=5 ttl=255 time=4.35 ms
Se a sua resposta foi como a da imagem então está tudo ok com sua rede, você tem
conectividade.
ping –c 5 www.dltec.com.br
Se a sua configuração de DNS estiver ok e claro, o seu gateway também estiver ok, então sua
conexão está 100% funcional.
Curiosidade:
Nesses casos toda a configuração de endereço IP, gateway default e dns será enviada
automaticamente do servidor DHCP para o seu micro.
Veja que temos para cada interface (lo, eth0) um parâmetro auto. Isso significa que o
sistema deverá iniciar a interface no boot, depois temos a definição básica dela, iface eth0
inet static, e no caso da loopback, iface lo inet loopback.
É muito importante ter a configuração de loopback, muitos serviços a utilizam essa interface
para o seu funcionamento, seguindo a configuração temos então as definições de address
(endereço ip), netmask, network, broadcast, gateway. Os parâmetros de network e
broadcast não precisam ser colocados se a opção netmask está sendo utilizada, o sistema irá
calcular automaticamente a rede e o broadcast.
Esta configuração é lida sempre que a máquina é iniciada ou então se você iniciar pelo
comando /etc/init.d/networking [start|stop|restart].
No caso de tentar reiniciar via comando é importante ter em mente que se a configuração está
de um modo (um endereço ip X) e você troca para Y (com a rede funcionando) ele não irá
conseguir aplicar suas configurações, pois ele irá tentar derrubar a rede e os endereços não irão
coincidir. Nesses casos, uma opção seria aplicar a configuração manualmente (e apenas alterar
os dados no arquivo) ou então alterar pelo arquivo e reiniciar a maquina.
Se você fosse utilizar a eth0 recebendo ip por dhcp bastaria na linha onde está static alterar
para dhcp e remover as configurações referente aos endereços, desta forma ele já funcionaria
via dhcp.
/etc/sysconfig/network
/etc/sysconfig/network-scripts/ifcfg-[interface name]
A ideia da configuração é bem parecida com a do Debian. O script do CentOS busca todos os
arquivos ifcfg-* e dentro de cada arquivo nós informamos as configurações.
DEVICE="eth0"
BOOTPROTO="none"
ONBOOT="yes"
TYPE="Ethernet"
IPADDR="192.168.0.11"
NETWORK="192.168.0.0"
NETMASK="255.255.255.0"
GATEWAY="192.168.0.1"
Capítulo 5 - Segurança e
Permissões de Arquivos
Objetivos do Capítulo
Ao final desse capítulo você deverá
entender os seguintes assuntos:
Sumário do Capítulo
Peso: 2
Descrição: Tomar conhecimento sobre os vários tipos de usuários no sistema Linux.
Tópicos Importantes:
Veja abaixo uma lista parcial com os arquivos, termos e utilitários mais utilizados:
/etc/passwd, /etc/group
id, who, w
sudo
su
O usuário root é o superusuário do Linux (e dos sistemas Unix e Unix Like), este é o usuário
com UID 0, é o usuário com permissão completa no sistema, capaz de realizar qualquer
modificação e também cometer erros catastróficos.
Obs: quando estamos, via linha de terminal, acessando o sistema como root nosso prompt
geralmente tem essa aparência (root@nomedaquina:# )
Um usuário comum no Linux tem permissão apenas para executar tarefas em seu diretório,
não tendo acesso a comandos de superusuário. Mesmo que consiga acessar os comandos
normalmente não consegue executar algumas tarefas por não ter permissão para isso.
Obs: quando estamos, via linha de terminal, acessando o sistema como um usário comum
nosso prompt geralmente tem essa aparência (usuario@nomedaquina:$ )
Normalmente é adicionado o usuário comum em alguns grupos estratégicos para que ele tenha
acesso a manipulação de impressoras, portas seriais, modems e outros periféricos.
Basicamente o usuário comum deve ter acesso a menor quantidade possíveis de coisas,
qualquer acesso que precise de mais permissões deve ser executado pelo root, isso garante que
usuários mal intencionados não consigam realizar nada significante em seu sistema.
Comando sudo:
Em sistemas mais recentes popularizou-se o uso do comando sudo para executar comandos
com permissão de root, porém isso também abre algumas brechas de segurança já que um
usuário pouco experiente pode digitar sua senha para execução de algum código malicioso.
Analisando a saída dos comandos você consegue ver que basicamente o comando who e o
comando w exibem a mesma informação, mas o comando w traz algumas outras
informações como uptime, quantidade de usuários logados, média de carga do equipamento e
horário do login do usuário.
Já o traz apenas nome, console, horário de login, ip, então dependendo de que informação você
precisa é utilizado um ou outro comando.
dltec@dltec:~$ who
dltec pts/2 Sep 17 11:52 (10.0.2.2)
dltec pts/3 Sep 17 15:56 (10.0.2.2)
dltec@dltec:~$
dltec@dltec:~$ w
15:57:02 up 4:05, 2 users, load average: 0.12, 0.23, 0.28
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
dltec pts/2 10.0.2.2 11:52 58.00s 0.75s 0.75s -bash
dltec pts/3 10.0.2.2 15:56 0.00s 0.31s 0.00s w
dltec@dltec:~$
Este comando irá trazer algumas informações como ip de origem (caso seja um acesso
remoto), qual console foi utilizada, tempo de seção e data do login.
Estes dados podem ser levantados utilizando o comando id USUARIO, veja a seguir um
exemplo.
mike@web:~$ id mike
uid=1000(mike) gid=1000(mike) groups=1000(mike)
Com esta informação eu vejo que o id do usuário mike é 1000, e o grupo principal dele é
1000 também, e ele não faz parte de nenhum outro grupo.
Importante:
Você também pode querer buscar no /etc/passwd qual o home do usuário ou então alguma
anotação que possa existir neste, para isso podemos utilizar o comando:
mike:x:1000:1000::/home/mike:/bin/bash
Neste caso nós temos a informação de nome, id, gid, diretório home e shell
aluno@dltec-VirtualBox:~$ su
Senha: (digite a senha do root)
root@dltec-VirtualBox:/home/aluno#
Curiosidade:
E muito comum em alguns sistemas atuais que o usuário root não tenha senha definida, isso
acontece porque o intuito é a centralização do gerenciamento utilizando o comando sudo.
Usuários de sistemas são usuários criados para que alguns serviços possam rodar sem a
utilização do usuário root. O objetivo é prevenir que possíveis falhas nos serviços possam ser
exploradas para ganhar acesso root ao sistema.
Normalmente você verá alguns usuários como mysql, ntp, News, mail, lp, man e alguns outros,
estes usuários não possuem nem devem possuir senha definida. Sempre que possível também
é interessante que eles não tenham um shell válido, desta forma você evita que seja possível
qualquer forma de login utilizando estes usuários, veja a seguir um exemplo.
O avahi é um daemon de cache para dns e outros protocolos, no caso dele você vê que o shell
definido é /bin/false, como este shell não existe ele não consegue realizar login mesmo que
seja definida uma senha.
Tópicos Importantes:
Veja abaixo uma lista parcial com os arquivos, termos e utilitários mais utilizados:
A criação de grupos é bastante simples e utiliza-se apenas o comando groupadd, onde você
pode definir alguns parâmetros ou não.
Execução simples:
$ groupadd meugrupo
$ groupadd –g 89 meugrupo
Neste exemplo criamos o grupo com GID 89, enquanto no primeiro exemplo o grupo foi criado
de forma automática. No caso da forma automática o grupo é criado utilizando a regra que está
no arquivo /etc/login.defs
GID_MIN 100
GID_MAX 60000
Ou seja, ele irá criar o grupo com um GID mínimo de 100 e máximo de 60000, porém ele
segue uma contagem, se o ultimo grupo criado foi o 110, o próximo será o 111 e assim por
diante.
Existem dois comandos que podem ser utilizados para criação de usuários, sendo que eles
estão mostrados abaixo.
Comando useradd
Comando adduser
Os dois fazem basicamente a mesma coisa, porém o adduser utiliza um dialogo enquanto o
useradd precisa que os dados sejam informados na linha de comando, mostraremos a seguir o
funcionamento de ambos os comandos.
Apenas para ter uma explicação básica dos parâmetros informados vejamos a lista abaixo:
Após criar o usuário, conforme mostrado ao lado, se você digitar o comando id teste você
verá todos os grupos que o mesmo faz parte.
Depois de criado o usuário é necessáiro definir uma senha para o mesmo, para isso é
necessário utilizarmos o comando passwd:
$ passwd teste
Após digitar este comando você será solicitado para digitar a senha e a confirmação da senha.
As senhas ficam em um arquivo chamado /etc/shadow, este arquivo traz várias informações
referente as senhas inclusive a quantidade de dias desde a ultima alteração de senha e outras
informações. Você pode verificar a definição exata dos campos acessando o man shadow.
Veja que foi digitado apenas adduser aluno e então ele solicitou a senha e outras
informações.
Importante:
Vamos ver agora como ficaria o mesmo comando mas informando alguns parâmetros via
linha de comando.
Com este comando ele irá já lhe solicitar a senha para o usuário.
Remoção de Usuários
$ userdel aluno02
$ userdel –r aluno02
O comando –backup irá produzir um arquivo de nome aluno.tar.gz no diretório de onde você
executou o comando, obviamente o nome do arquivo vai variar de acordo com o nome do
usuário que você está removendo.
Removendo Grupos
A remoção de grupos pode ser realizada pelo comando groupdel e delgroup.
O comando groupdel não tem muito o que falar a respeito, a sintaxe dele é:
$ groupdel GRUPO
Já o comando delgroup permite que você utilize o parâmetro –only-if-empty que irá
proceder com a remoção apenas se o grupo não estiver sendo utilizado por nenhum usuário.
Manipulação de grupos:
Após realizara esse comando se você consultar os grupos do usuário com o comando id teste
você receberá a seguinte saída.
uid=1001(teste)
gid=1001(teste) grupos=1001(teste),1004(grupo01),1005(grupo02),1006(grupo03)
É importante saber que se depois de executar este comando você digitar o comando usermod
–G grupo04 teste ele irá remover os demais grupos e manter apenas o grupo04.
Para evitar isso é necessário quando utilizando o parâmetro –G utilizar também o parâmetro –
a. Dessa forma a maneira correta de adicionarmos o grupo04 para o usuário teste seria
conforme mostrado abaixo.
uid=1001(teste)
gid=1001(teste)
grupos=1001(teste),1004(grupo01),1006(grupo03),1007(grupo02),1008(grupo04)
Por exemplo, para remover apenas o grupo02 do usuário teste você poderia executar o
comando a seguir (considerando que ele esta com todos os grupos de 01 até 04)
nome_do_grupo:senha:GID:lista_de_usuários
Normalmente não é utilizado senha para o grupo, mas é possível. Como exemplo, a seguir as
linhas as quais o usuário teste se encontra em nosso arquivo.
teste:x:1001:
grupo01:x:1004:teste
grupo03:x:1006:teste
grupo02:x:1007:teste
grupo04:x:1008:teste
Veja só, o primeiro grupo é o próprio grupo base do usuário, o grupo mencionado no arquivo
/etc/passwd. Sequencialmente temos os demais grupos que criamos, e em todos, temos o
usuário teste no ultimo campo.
audio:x:29:mike,teste2,teste3
Tópicos Importantes:
Veja abaixo uma lista parcial com os arquivos, termos e utilitários mais utilizados:
ls -l
chmod, chown
chgrp
No Linux temos três permissões básicas que são dono, grupo e outros, todas as permissões
básicas são tratadas por estes três “indivíduos”.
dltec@dltec:~$ ls -l
total 88
drwxr-xr-x 2 dltec dltec 4096 Jul 23 12:48 Desktop
drwxr-xr-x 2 dltec dltec 4096 Jul 23 12:48 Documents
drwxr-xr-x 2 dltec dltec 4096 Sep 3 22:47 Downloads
drwxr-xr-x 2 dltec dltec 4096 Jul 23 12:48 Music
drwxr-xr-x 2 dltec dltec 4096 Jul 23 12:48 Pictures
drwxr-xr-x 2 dltec dltec 4096 Jul 23 12:48 Public
drwxr-xr-x 2 dltec dltec 4096 Jul 23 12:48 Templates
drwxr-xr-x 2 dltec dltec 4096 Jul 23 12:48 Videos
drwxr-xr-x 2 root root 4096 Sep 13 13:13 bin
drwxr-xr-x 2 root root 4096 Sep 17 12:07 essentials
-rw-r--r-- 1 dltec dltec 8445 Jul 23 12:35 examples.desktop
drwxr-xr-x 3 root root 4096 Sep 16 15:47 lpi102
-rw-rw-r-- 1 dltec dltec 29500 Sep 3 22:36 php.versoes
dltec@dltec:~$
Perceba que temos os diretórios dos usuários, no primeiro campo temos em todos o conteúdo
drwxr-xr-x. Vamos entender primeiro o que significam estes parâmetros.
d = diretório
rwx = read (leitura), write (escrita), execution (execução ) (para o dono)
r-x = read, execution (para o grupo)
r-x = read, execution (para outros usuários)
Basicamente isso quer dizer que o dono pode tudo, o grupo e os outros podem acessar o
diretório, mas não podem gravar no diretório. Continuando com a saída do comando ainda
temos:
A alteração do grupo pode ser feita utilizando o comando chgrp ou chown, o nome dos
comandos como em outros casos é bem sugestivo.
O Comando chgrp
O comando chgrp possui uma string básica (chgrp opções grupo [pasta|arquivo]).
Desta forma definimos que o diretório teste é permitido ao grupo mike, porém vamos rever
a permissão do mesmo:
Veja que a permissão para o grupo é r-x e isso permite ao grupo entrar no diretório mas não
permite escrever nada no diretório.
Atente que quando falamos escrever falamos em editar arquivos, criar arquivos, remover
arquivos ou diretórios, mais a frente veremos a utilização do comando chmod que resolve esta
questão.
O Comando chown
O comando chown tem como função primária alterar o dono de um diretório ou arquivo,
também podendo realizar a troca do grupo.
Vamos alterar o nosso diretório teste para que ele pertença ao usuário mike. Acompanhe a
seguir.
Digamos que queiramos altera de uma única vez o dono e o grupo, então utilizamos o
comando:
Perceba que desta forma ainda temos a questão de que o grupo mike não tem permissão de
escrita no diretório.
Vamos tratar o chmod de duas formas aqui, primeiro em forma literal e depois numérica.
Um arquivo precisa ao menos ter permissão de leitura, o correto seria ter também permissão
de escrita, pelo menos para o dono.
Se queremos que o dono e o grupo tenham permissão no diretório teste então devemos
aplicar as seguintes permissões, conforme mostrado abaixo.
Como você pode ver os demais usuários possuem permissão para entrar em nosso diretório.
Vamos então remover esta permissão:
chmod o-r-x
| |--- permissões a serem removidas (r-x)
| |----- símbolo de subtração, remoção
|------- permissão para outros
Permissões Numéricas
Antes de fazermos exemplos precisamos entender bem o funcionamento deste modelo de
permissões, mesmo porque ele é o comumente mais utilizado.
Por exemplo, para dar as permissões que demos na pasta teste poderíamos executar: chmod
770 teste e o resultado seria o mesmo, mas antes precisamos entender o que significa este
770. Acompanhe a explicação abaixo.
Cada permissão corresponde a um octeto derivado da soma dos números 1,2,4 e qualquer
digito não utilizado é entendido como 0.
A ideia é :
(4) = leitura
(2) = escrita
(1) = execução
Desta forma é, se eu quero ter permissão de leitura e escrita então (4+2)=6, então o
parâmetro que usarei é 6.
Por exemplo, digamos que fossemos dar um arquivo a permissão chmod 600 teste.txt, neste
caso o arquivo teste.txt terá permissão rw-------.
Se eu quero dar ao grupo a mesma permissão então o chmod será 660 e então nossa
permissão será rw-rw---- .
Podemos dar permissão também para os demais usuários com um chmod 666 teste.txt,
ficando nossa permissão rw-rw-rw-. Não é tão difícil, certo?
Informação adcional:
Vamos então ver a permissão para diretório. Falamos anteriormente que um diretório
precisa ter permissão de leitura e execução, realizando a soma dos números temos
(4+1)=5.
No entanto, queremos dar permissão completa para o dono, então seria (4+2+1)=7.
Nesse caso o nosso chmod ficaria assim: chmod 750 teste, ficando nossa permissão rwx-
rw----
Set-user-id (SUID)
Set-group-id (SGID)
Sticky Bit
Via de regra, quando um usuário executa um arquivo, o processo resultante dessa execução
possui a mesma permissão do usuário que executou o arquivo. Quando o SUID é aplicado em
um arquivo executável, esse arquivo será executado com o ID do dono desse arquivo e não
do usuário que o executou.
$ chmod 4764
$ ls –la meuarquivo
-rwsrw-r-- 1 aluno aluno 0 Sep 01 15:56 meuarquivo
Reparem que apareceu um "s" no campo relativo ao usuário (dono) do meuarquivo. Isso faz
com que quando o "meuarquivo" for executado por algum outro usuário ele será executado com
as permissões do seu dono, ou seja, com as permissões do usuário aluno.
Obs: se o SUID for aplicado em um arquivo que não tenha permissão de execução, em vez
de s (minúsculo) aparecerá um S (maiúsculo).
Digamos que os usuários de um determinado sistema devam ser responsáveis por manter seu
firewall rodando, ou seja, iniciar, parar, reiniciar o serviço. Mas, por questões de segurança o
administrador do sistema não queira passar a senha de root para os usuários.
A solução para essa questão é aplicar um SUID nesse firewall. Dessa forma, os usuários
poderão executar o programa com as mesmas permissões do root e sem a necissadade de
passarmos a senha de root para eles.
O SGID é bem similar ao SUID, sua finalidade é fazer com que, quando um arquivo/diretório
for criado, herde a permissão do grupo do diretório. Esta é uma permissão que sempre se
encontrará no campo groups (g) e é representada pela letra "s".
Por exemplo, se queremos que todos arquivos e diretórios que forem criados dentro de
/home/aluno/meudir herdem a permissão do diretório meudir, basta aplicarmos o SGID nesse
diretório.
$ ls -ld meudir
drwxrwxr-x 2 aluno aluno 4096 Set 8 22:55 meudir
ou
$ ls -ld meudir
drwxrwsr-x 2 aluno aluno 4096 Set 8 22:55 meudir
$ ls -ld meudir
drwxrwxr-x 2 aluno aluno 4096 Set 8 22:55 meudir
Obs: se o SGID for aplicado em um diretório que não tenha permissão de execução
(permissão que permite entrar nesse diretório), em vez de s (minúsculo) aparecerá um S
(maiúsculo).
O Bitsticky é uma permissão que chamamos de pegajosa, isso quer dizer que quando nós
damos esta permissão a um arquivo/diretório, esse arquivo ou os arquivos dentro do diretório
só poderão ser movidos ou removidos pelo dono do arquivo/diretório ou pelo root.
Mesmo se o usuário tiver permissões de escrita não irá conseguir apagá-lo, só alterá-lo. Essa
permissão é representada pela letra (t) e sempre se encontrará no bloco outros (o).
Para aplicarmos o sticky bit utilizamos a sintaxe especial "o+t" no comando chmod ou
adicionando o prefixo "1" no modo numérico. Veja um exemplo a seguir.
$ ls –la aluno_linux.sh
-rwxrwxr-x 1 aluno aluno 0 Sep 01 16:08 aluno_linux.sh
ou
$ chmod 1775
$ ls –la aluno_linux.sh
-rwxrwxr-t 1 aluno aluno 0 Sep 01 16:08 aluno_linux.sh
$ ls -l aluno_linux.sh
-rwxrwxr-x 1 aluno aluno 0 Set 8 23:28 aluno_linux.sh
se o sticky bit for aplicado em um arquivo/diretório que não tenha permissão de execução, em
vez de t (minúsculo) aparecerá um T (maiúsculo).
Obs: se o sticky bit for aplicado em um arquivo/diretório que não tenha permissão de
execução, em vez de t (minúsculo) aparecerá um T (maiúsculo).
Tópicos Importantes:
Veja abaixo uma lista parcial com os arquivos, termos e utilitários mais utilizados:
/etc, /var
/tmp, /var/tmp and Sticky Bit
ls -d
ln -s
Hard links
Setuid/Setgid
Nos sistemas Linux nós temos muitos arquivos importantes referentes a configurações de
sistema. Muita coisa você já viu no decorrer do curso, mas vamos enfatiza-los mais uma vez
para que você possa entender adequadamente.
Arquivos do Sistema
Os arquivos de configuração do sistema e dos aplicativos em geral ficam no diretório /etc.
Este diretório é onde normalmente você vai trabalhar as configurações, vamos dar alguns
exemplos:
Estes são apenas alguns exemplos para ilustrar onde as configurações costumam ficar
armazenadas, como você pode ver, tudo fica no /etc e aí em algum diretório referente ao tipo
de configuração.
Bibliotecas
Existem diretórios específicos onde as bibliotecas são armazenadas, mas existem duas
opções básicas, sendo elas uma do sistema operacional em si e outra para os aplicativos.
No /lib, por exemplo, você tem a biblioteca da pam (módulo de autenticação), tem a biblioteca
do devmapper que é o módulo de LVM do Linux e muitos outros.
No diretório /usr/lib temos as bibliotecas do mysql, ldap, X11 e muitos outros, basicamente
tudo que não é do sistema operacional estará lá.
O Diretório /tmp
O diretório /tmp é como o nome sugere um diretório temporário. Ele é utilizado por algumas
aplicações para armazenar alguns arquivos e depois os mesmos são removidos.
Alguns Linux (como o Debian) removem todo o conteúdo do diretório quando o sistema está
iniciando, então não é recomendado usar este diretório para nada que você queira consultar
mais tarde.
Um link simbólico é como se fosse um atalho, é um arquivo que na verdade aponta para
outro arquivo, não aparecendo como um outro arquivo mas sim como um arquivo com o
caminho para o arquivo original.
Você pode notar que antes das permissões temos um l. Este l simboliza um link, depois
temos o nome do arquivo (teste) seguido por um seta (apontamento) para um determinado
diretório, no nosso caso /var/cache/apt/archive.
Isso significa que seu eu digitar cd teste vou entrar na verdade em /var/cache/apt/archive
(poderia também ser um arquivo ao invés de um diretório).
ln -s /var/cache/apt/archives teste
Conclusão
Tenha certeza de que compreendeu todos os conceitos aqui mostrados. Dê uma repassada na
matéria e tome notas dos pontos que não entendeu muito bem.
Sobre o E-book/Apostila