Sunteți pe pagina 1din 100

Bem-vindo!

Bom dia, boa tarde e boa noite!

Se você ainda não me conhece, sou o professor Juliano Ramos. Tenho dedicado um grande tempo da minha
vida aos estudos de Linux e servidores. Sou professor por amor. Para mim não é trabalho, ou qualquer
outra definição. Acredito que é por isto, que sempre procuro fazer o diferencial e minhas aulas.

Este livro aborda a prova 101 e/ou LX-103 da Comptia Linux+.

Fazer o nosso curso


Este livro é a base do nosso curso. Se você deseja assistir nossas aulas e aprender muito mais. Acesse:

www.certificacoes.net.br

Possuimos diversas opções de treinamento como preparatórios para certificações e cursos de servidores.
Qualquer dúvida, só me encaminhar um e-mail: profjulianoramos@gmail.com

Autor: Prof. Juliano Ramos | profjulianoramos@gmail.com

Certificado Comptia Linux, Linux Professional Institute, Red Hat, SUSE, PMI, Microsoft e Cisco. Professor,
aluno e hacker/geek em sua melhor definição. Apaixonado pelo movimento Open Source desde sua
revolução ao modelo de Software Livre em meados de 1998.

Licença de uso
Este livro não pode ser comercializado. Ele foi criado para ser usado como apostila de apoio pela empresa
Certificações NET.BR em cursos ministrados pelo Prof. Juliano Ramos. Todos os direitos deste livro
pertencem a empresa referida e ao autor.

Você pode: Ler este livro e compartilhá-lo. Mas não pode, alterar seu conteúdo ou comercializá-lo de
nenhum modo.
 

Sumário
Bem-vindo!
Fazer o nosso curso
Licença de uso
Sumário
Preparatório LTC1, LPIC1 e Comptia Linux+
LPIC - Linux Professional Institute Certificate
LPIC1
CompTIA - Computing Technology Industry Association
Linux+ - CompTIA POWERED BY LPI
Sobre o curso
Ame o pinguim
Virtualbox
Distribuições Linux
Distribuição leve
Comandos GNU e UNIX - Tópico 103
103.1 - Como trabalhar na linha de comando.
Como saber qual Shell estou utilizando?
O que é um comando?
Como o SHELL sabe localizar um comando externo?
Quando o comando não está no PATH?
Variáveis de ambiente - Local e Global
Ver todas as variáveis
Ver apenas as variáveis globais
Como remover uma variável
Variáveis pré-definidas
PWD
Comandos de modo sequencial
Navegar pelos comandos - histórico
Limpar arquivo de histórico
Pesquisar um comando que já digitei
Auto-completar do Bash
Obter ajuda
Informaçãoes do sistema
Apelidos de comandos
Tópico 103.2 - Arquivos de texto
Cabeçalho do arquivo
Rodapé do arquivo
Paginação da saída de texto
Ver a quantidade de linhas, caracteres e palavras de um arquivo
Ordenar um arquivo
Ver entradas únicas em um arquivo
Trocando tabs por espaços
Trocar espaços por tab
Exibir texto em formato octal e outros
Combinar arquivos através de um indice
Dividir um arquivo
Apagar e Substituir caracteres
Formatar uma saída de texto
Preparar um arquivo para impressão
Recortar partes de um texto
A ferramenta poderosa sed
Gerenciamento de arquivos - Tópico 103.3
Copia de arquivos
Copiando diretórios
Mover e renomear um arquivo
Criando arquivo de texto vazio
Remover arquivos e diretórios
Remover diretório vazio
Criar um diretório
Procurar arquivos e diretórios
Agrupando arquivos
Compactando arquivos
Usando somente o tar
Usando o cpio
Copiar uma partição inteira
Redirecionamento de entrada e saída - Tópico103.4
Redirecionamento do erro
Um erro comum de redirecionamento
Visualizando a saída e criando um arquivo
Saída de um comando como entrada para outro comando
Iprimindo o resultado de um comando
Exercícios
103.1 - Linha de comando
103.2 - Filtros de texto
103.3 - Gerenciamento básico de arquivos
103.4 - Fluxos, pipes e redirecionamentos.
Gerenciamento de processos - Tópico 103.5
Comando ps
Comando pstree
Ver os PID dos processos
Comando top
Comandos para monitorar, parar e matar processos
Comando killall
Comando pkill
Comando para gerenciar os processos
Controle de tarefas
Exercício do tópico 103.5
Modificar prioridade de processos
Pesquisar arquivos de texto com expressões regulares - Tópico 103.7
Comando grep
Comando egrep
Tabelas de exemplos:
Exercício:
Edição básica de arquivos usando o VI - 103.8
Editor de texto VIM
Editor de texto vim
Como interpretar atalhos e comandos
Os modos do VIM
Abrindo caminhos dentro de um arquivo
Abrindo arquivo em uma linha específica
Alternando entre arquivos
Movimentando-se sobre o texto
Inserindo texto
Deletando texto
Copiar e colar
Recortar e colar
Substituição
Buscando texto dentro do arquivo
Arquitetura do sistema - Tópico 101
Identificar e configurar os dispositivos de Hardware - tópico 101.1
IRQ - Sinais de interrupção
Endereços de I/O - Entrada e saída
Endereços DMA
Barramentos
As partições virtuais
Dispositivos de armazenamento
Arquitetura do kernel Linux
Trabalhando com módulos
Quais módulos estão disponíveis?
Compilando um kernel
Tópico 101.2 - O Boot do sistema
Alterando os Runlevels, Shutdown e Reboot - Tópico 101.3
SystemD
Comandos do systemD
Iniciar, parar e reiniciar serviços
Comandos de shutdown e restart
Tópico 102
Quais as vantagens de um particionamento?
Sistemas de particionamento
Arquivo de swap
LVM - Logical Volume Manager
Comandos essenciais
102.2 - Configuração de boot loader
Principais arquivos de configuração
Criando uma entrada para o Windows
Trocar a senha de root - Grub
102.3 - Bibliotecas compartilhadas
Comandos básicos
Incluir uma biblioteca
102.4 - Gerenciamento de pacotes Debian
O comando dpkg
Comandos do apt
O comando apt-get
Atualizando o sistema operacional
Buscando um pacote
Instalando e removendo um pacote
Apenas fazer o download do pacote
Comando dpkg-reconfigure
Comando dselect
Comando aptitude
O aplicativo alien
102.5 - Gerenciador de pacote RPM
Tópico 104 - Dispositivos, sistemas de arquivos Linux e FHS
104.1 - Criando partições e sistemas de arquivos
104.2 - Mantendo a integridade do sistema de arquivo
Comandos de análise de sistema de arquivo
Comando dumpe2fs
Partições xfs
Setar informações da partição
104.3 - Controle de montagem e desmontagem de partições
Criando e montando a partição
Fstab
auto
ro e rw
auto e noauto
user e nouser
exec e noexec
sync e async
defaults
Exemplos de linhas no fstab
104.4 - Gerenciando cotas de discos.
104.5 - Gerenciando permissões e propriedades do arquivo
Permissão Literal
Permissão octal
Permissões Especiais
Comando chown, chgrp
Tópico 104.6 - Criando e alterando Links Hard e Soft - in
Link simbólico
104.7 - Localização de arquivos no linux
Comandos de busca de arquivos
Comando locate
Comando whereis
Comando which
Comando type
Agradecimento

Preparatório LTC1, LPIC1 e Comptia Linux+


LPIC-1 101-400 e 102-400

Comptia Linux+ LX0-103 e Lx0-104

LPIC - Linux Professional Institute Certificate


A LPI tem um conjunto de certificações independentes de distribuições.
 

A Linux Essentials não é pré-requisito para nenhuma certificação.

LPIC1
1. Voltada para Administadores de sistemas Linux
2. O profissional deve ser capaz de realizar tarefas de manutenção, instalação e configuração em
qualquer sistema linux, via linha de comando.
3. 2 provas: LPI 101-400 e 102-400. Cada uma com 60 questões e 1:30 de prova.

Para você receber a certificação LPIC1 é necessário ser aprovado nas 2 provas.

CompTIA - Computing Technology Industry Association


1. Uma das maiores empresas Certificadoras da Área de TI
2. Também promove treinamentos, palestras e pesquisas em diversas áreas.

Linux+ - CompTIA POWERED BY LPI


1. prova desenvolvida pela LPI
2. Exatamente o mesmo programa da LPIC-1
3. 2 provas: LX0-103 e LX0-104
4. Com a certificação CompTIA Linux+ você recebe também a LPIC-1

A mesma prova da LPIC.

Sobre o curso
O Curso é baseado no programa da LPIC-1

Método: Explicação > Demonstração > Prática

Pré-requisito: Virtualização - Virtualbox


 

Ame o pinguim

Faz parte do processo de aprendizado destruir o sistema :-), então, use sempre uma máquina virtual.

Uma máquina virtual é um software que simula um computador físico.

Virtualbox
Referência:

https://www.virtualbox.org/

O Virtualbox é multi-plataforma (Windows, Linux , Mac, Solaris)

Distribuições Linux
As certificações da LPI e da CompTIA não são focadas em nenhuma distribuição específica, dessa forma
você pode estudar e praticar em qualquer distribuição Linux.

Nas próximas aulas eu mostro como instalar a distribuição Xubuntu, essa escolha foi apenas por esta ser
uma distribuição simples de ser utilizada e bem leve, mais do que o suficiente para nossos objetivos neste
curso.

Mas você pode utilizar a distribuição que preferir, Debian, Ubuntu, Fedora, CentOS, etc. As diferenças serão
mínimas e quando ocorrerem eu informo durante a aula.
Distribuição leve
Como a certificação de linux é independente de distribuição e vamos focar somente na linha de comando,
usaremos uma distribuição bem leve que roda sobre Debian - chamada Bunsenlabs.

https://www.bunsenlabs.org/

Download do arquivo ISO (imagem de CD/DVD e até mesmo de uma partição ou disco).

Comandos GNU e UNIX - Tópico 103


Trabalhar na linha de comando (4)
Aplicando filtros a textos e arquivos (3)
Gerenciamento básico de arquivos (4)
Fluxo, PIPES e redirecionamentos (4)
Criar, modificar e encerrar processos (4)
Pesquisar arquivos de texto com expressões regulares (2)
Edição básica de arquivos usando o VI (3)

O número é o "peso", que nada mais é a quantidade questões que vão estar na prova.

103.1 - Como trabalhar na linha de comando.


A LPIC deseja que você saiba o básico de linha de comando. O Shell é a interface entre o kernel (linux) e o
usuário e também é um ambiente de programação.

Temos vários tipos de SHELL como : Ksh, SH, Dash, FISH entre outros.

Usaremos o BASH que é o cobrado na LPIC.

Como saber qual Shell estou utilizando?

O comando echo mostra na tela o resultado digitado:

# echo "Linux Ubuntu"


Linux Ubuntu

Podemos visualizar o conteúdo de uma variável:

# echo $SHELL
/bin/bash

Neste caso, verificamos que estamos usando o /bin/bash

Se você não estiver executando o bash como padrão, é só chamar o bash:

# bash
O que é um comando?

Um comando pode ser um programa externo (Instalado no linux) ou um comando interno (do próprio
shell). Para saber se é um comando interno ou externo, usamos o comando type, exemplo:

# type echo

Outro exemplo:

# type tar
tar is /bin/tar

Neste caso ele mostra o caminho, dizendo que não é um comando interno do shell. As vezes pode-se
observar a saída: clear is hashed que significa que o comando é externo mas está em cache.

Como o SHELL sabe localizar um comando externo?

Existe uma variável do SHELL que guarda o caminho dos executáveis, esta variável, chama-se PATH.

# echo $PATH

Quando o comando não está no PATH?

Neste caso teremos que referênciar o caminho do comando. O comando pwd mostra o nosso diretório
atual, exemplo:

# pwd

O Linux tem uma estrutura hierárquica de arquivos que começa no /(barra). Podemos navegar por estes
diretórios através do comando cd, exemplo:

# cd /home/aluno

Outro comando importante é o ls que irá listar os arquivos do diretório:

# ls

Ao executar o seu comando que é externo e não está no diretório PATH, você executa-o com o ponto barra,
que significa - este diretório, exemplo:

#./meuprograma.sh

Digamos que você não esteja no diretório do programa, mas deseja executá-lo, neste caso você deve digitar
o caminho completo do programa:
# /home/aluno/script/programa.sh

Variáveis de ambiente - Local e Global

Assim que você inicia o SHELL várias variáveis de ambiente são carregadas. Veja como declarar uma
variável no SHELL:

# NOME_VARIAVEL=valor

Para ver o seu valor:

# echo $NOME_VARIAVEL

Esta variável é local, só esta disponível neste SHELL. Para que os processos possam visualizar está variavel e
novas seções, eu preciso usar o comando export, exemplo:

# export NOME_VARIAVEL

Ao executarmos o comando export tornamos a variável Global, de modo que poderá ter acesso em novas
seções. Podemos já criar a variável como global:

# export LINUX="Eu amo"

Ver todas as variáveis

O comando set me permite visualizar todas as variáveis, porém como é muitas o melhor é páginar, ou seja,
visualizar por página a saída do comando:

# set |less

Ver apenas as variáveis globais

O comando env visualiza apenas as variáveis externas, ou seja, somente o que foi exportado.

# env |less

O env permite alterar o valor de uma variavel somente para uma execução. Para exemplificar, crie com seu
editor simples o seguinte arquivo:

#/bin/bash
echo $LINUX

Salve como programa.sh e feche este arquivo. Daremos permissão para ele ser um executável (veremos
isto mais a frente):
# chmod +x programa.sh

Declare a variável LINUX com o export:

# export LINUX="Eu amo"

Rode o programa:

# ./programa
Eu amo

O resultado é "Eu amo", agora vamos mudar o valor da variável, somente na execução deste programa:

# env LINUX="Muito bom" ./programa.sh


Muito bom

Veja que o resultado somente nesta execução foi "Muito bom", mas o valor da variável LINUX continua
sendo "Eu amo".

Como remover uma variável

O comando é unset e o nome da variável:

# unset LINUX

Variáveis pré-definidas

É importante conhecermos algumas variáveis que podem ser cobradas no exame. Podemos verificar
algumas usando:

# set |less

HISTFILE

Esta variável mostra onde está o arquivo do histórico de comandos

HISTSIZE

Quantidade de linhas máximas do arquivo

HOME

Mostra o home (diretório do usuário) do usuário local

PWD

Armazena o diretório local

SHELL
Mostra o Shell Atual

Hostname

O nome da máquina

TERM

Interface que logamos - Xterm: Interface gráfica | tty : ambiente texto

PS1

Armazena as informações do prompt

Comandos de modo sequencial

Podemos digitar vários comandos ao mesmo tempo em sequência, exemplo:

# clear; date; ls

No exemplo acima ele irá rodar os três comandos, independente se todos eles forem sucesso.

Outra forma é:

# ls /tmp/qualquercoisa.txt && echo $SHELL

O segundo comando só é executado se o primeiro tiver sucesso. Como não temos o arquivo
qualquercoisa.txt o segundo comando não será executado.

Outra forma é:

# ls /tmp/qualquercoisa.txt || echo $SHELL

Neste caso o segundo comando só é executado comando o primeiro dá erro.

Navegar pelos comandos - histórico

Com a seta para cima e para baixo, você navega pelos comandos digitados. Você pode verificar o histórico
de comandos usando:

# history

Para executar o último comando:

# !!

Outro comando importante :


# !19

Neste caso ele vai executar o comando que está na linha 19 da saída do comando history

Limpar arquivo de histórico

history -C

Os comandos do history fica armazenado em arquivo do usuário. Podemos verificar com:

juliano@DarthVader:~$ set |grep HISTFILE


HISTFILE=/home/juliano/.bash_history
HISTFILESIZE=2000
juliano@DarthVader:~$ cat /home/juliano/.bash_history

Observe que eu digitei set |grep HISTFILE neste caso o grep vai filtrar a saida do comando set. O resultado
foi: HISTFILE=/home/juliano/.bash_history

Posso verificar o conteúdo deste arquivo, executando:

# cat /home/juliano/.bash_history

No linux, arquivos que se iniciam com . (ponto) são ocultos. Este arquivo é salvo sempre que a seção é
fechada. Cada usuário visualiza apenas o seu .bash_history, já o usuário Administrador - Root, visualiza o
histórico de todos os usuários.

Pesquisar um comando que já digitei

Para realizar uma pesquisa pelo history você pode usar a teclas de atalho: +

Auto-completar do Bash

Podemos usar a tecla para auto-completar, quando você começa a digitar um comando e digita duas vezes,
ele te mostra comandos que começam com a string que você está digitando:

juliano@DarthVader:~$ ls
ls lsb_release lshw lslocks lsof lspgpot
lsattr lscpu lsinitramfs lslogins lspci lsusb
lsblk lsdiff lsipc lsmod lspcmcia

Também funciona para arquivos:

juliano@DarthVader:~$ cd /
bin/ etc/ lib64/ opt/ sbin/ tmp/
boot/ home/ lost+found/ proc/ snap/ usr/
cdrom/ lib/ media/ root/ srv/ var/
dev/ lib32/ mnt/ run/ sys/
Obter ajuda

Praticamente todos os comandos tem um manual de referência acessados pelo comando man exemplo:

# man ls

Alguns arquivos de configuração também possuem páginas de manual. Quando o comando é interno do
bash, você deve visualizar no :

# man bash

Exemplo o comando cd. O man é uma ferramenta muito importante para o Administrador de sistemas
Linux e para candidatos aos exames de certificação.

Outro comando de ajuda é o info que é uma espécie de man reduzido. Uma opção interessante é a opção
info -k que permite pesquisar por um determinado conteúdo, exemplo:

juliano@DarthVader:~$ man -k "system information"


dumpe2fs (8) - dump ext2/ext3/ext4 filesystem information
uname (1) - print system information

Outras opções são whatis e apropos :

juliano@DarthVader:~$ whatis tar


tar (1) - The GNU version of the tar archiving utility

O coamando whatis retorna informações sobre um determinado comando e o apropos retorna o


comando definido pela sua opção:

apropos information

Funciona semelhante ao info -k

Informaçãoes do sistema

Podemos usar o comando uname para obter informações do sistema, exemplo:

# uname --help

Mostra as informações que podemos obter com este comando, digitando parâmetros. Exemplo:

# uname -r

Mostra o kernel atual. Já uname -a mostra todas as informações.

Apelidos de comandos

Podemos criar apelidos para comandos. Visualiza alguns já existentes:


juliano@DarthVader:~$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)"
"$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'

No meu caso, quando digito ls na verdade, ele vai executar: ls --color=auto isto está definido em um
arquivo que é lido durante o boot do sistema, que veremos mais a frente. Para criar o nosso atalho,
usamos:

# alias lt='ls /tmp'

Agora sempre que digitarmos o comando que criei chamado lt ele vai executar o comando: ls /tmp. Por
enquanto isto se perde quando fecharmos a seção, mas a frente vamos aprender a colocar na inicialização
do sistema.

Tópico 103.2 - Arquivos de texto


O comando cat lê um arquivo de texto. Por exemplo:

# cat /etc/passwd

O comando pega o arquivo e redireciona para a saída padrão (tela). Podemos ver as linhas numeradas:

# cat -n /etc/passwd

Ver linhas numeradas ignorando as linhas vazias:

# cat -b /etc/passwd

Você pode ver todas as opções:

# cat --help

O comando tac inverte a saída, mostrando o resultado de baixo para cima - inverso ao cat.

Cabeçalho do arquivo

Usamos o comando: head, exemplo:

# head /etc/passwd
Ele mostra as 10 primeiras linhas. Se desejamos verificar por exemplo, apenas as 2 primeiras linhas,
usamos:

# head -n2 /etc/passwd

Rodapé do arquivo

Usamos o camando: tail que é o oposto do Head.

# tail /etc/passwd

Mostra as 10 últimas linhas. Se precisamos das 2 últimas:

# tail -n2 /etc/passwd

Outro comando interessante do tail é a opção -f, que mantém o arquivo aberto esperando mais
informações, excelente para logs. Exemplo:

# tail -f /var/log/auth.log

Este arquivo mantém informações de login, abra outro terminal ou tty e faça login, você verá que
automaticamente o tail mostrou.

Paginação da saída de texto

Temos o comando less e o more, a LPIC cobra apenas o less. Este comando permite navegar pelo arquivo:

# less /etc/passwd

Com seta para baixo ou cima, navegamos linha a linha. Se apertamos ele pula para a próxima página.
Podemos fazer busca na saída usando barra (/) exemplo: /juliano ele vai procurar na saída do comando a
palavra juliano, se tiver mais de uma, usamos n de next, para voltar + .

Usamos muito o less com o pipe (|). O pipe pega a saída do primeiro comando e usa como entrada para o
segundo comando. Exemplo:

# cat /etc/passwd |less

Ele pega a saída do comando cat e vai fazer a sua paginação.

Ver a quantidade de linhas, caracteres e palavras de um arquivo

Usamos para isto o comando wc exemplo:

juliano@DarthVader:~$ wc /etc/passwd
40 70 2252 /etc/passwd

Sendo no meu caso: 40 linhas, 70 palavras e 2252 caracteres. Ver somente linhas:
# wc -l /etc/passwd

Ver somente caracteres:

# wc -c /etc/passwd

Ver somante palavras:

# wc -w /etc/passwd

Podemos usar o comando nl ele é semelhante ao cat -b, ele numera as linhas sem considerar as linhas em
branco:

# nl /etc/passwd

Ordenar um arquivo

O comando sort vai ordenar os arquivos (odem alfabética). Exemplo:

# sort /etc/passwd

Para ordenar de modo reverso, você usa:

# sort -r /etc/passwd

Para ordenar pelo segundo campo, usamos:

# sort -k2 /etc/passwd

Ver entradas únicas em um arquivo

Digamos que você tenha um arquivo com nomes repetidos, exemplo:

juliano
juliano
maria
joaquim
juliano

O comando vai retornar apenas: juliano, maria, joaquim, exemplo:

# uniq alunos.txt

Para mostrar quantos nomes estão duplicados, posso usar:


# uniq -c alunos.txt
3 juliano
1 maria
1 joaquim
1

Mostrou a frente as vezes que tenho aquele nome e a linha em branco (1). É muito útil usarmos o sort para
ordenar junto com o uniq, exemplo:

# sort alunos.txt | uniq -c

Trocando tabs por espaços

Usamos o comando expand para mudar tabulação para espaço, ele considera um tab como 8 espaços.
Sintaxe:

# expand arquivo.txt

Cada vez que ele encontrar um tab ele troca por 8 espaços. Mas este troca é só para imprimir na tela, mas
ele não altera o arquivo.

Trocar espaços por tab

O comando unexpand verifica 8 espaços e transforma em um tab.

# unexpand arquivo.txt

Porém, ele por padrão só olha os espaços do começo da linha, mas você pode verificar em tudo, usando:

# unexpand -a arquivo.txt

Se você desejar, por exemplo, que a cada 2 espaços ele transforme em um tab, use:

# unexpand -t 2 arquivo.txt

Exibir texto em formato octal e outros

O comando od mostra um arquivo em octal, mas ele permite outros formatos, verifique:

# od --help

Combinar arquivos através de um indice

Crie um arquivo com o seguinte conteúdo:

1 Maria

2 Joao
3 Lucas

Salve como alunos.txt. Agora crie outro arquivo com o seguinte conteúdo:

1 10

25

3 3.8

Salve como notas.txt. Execute agora:

# join alunos.txt notas.txt


1 juliano 10
2 maria 5
3 lucas 3.8

Lembre-se que os índices devem ser iguais e as linhas devem estar na mesma ordem. Um comando
semelhantes é o paste, mas ele não se preocupa com indices. Ele simplesmente junta os arquivos.

Dividir um arquivo

Se você tem um arquivo longo, você pode dividir com o comando split exemplo:

split -l3 /etc/passwd

Ele cria arquivos semelhantes a : xaa, xab e etc... Cada arquivo agora terá 3 linhas.

Apagar e Substituir caracteres

O comando tr é usado para substituir caracteres, mas ele deve ser usado com pipe. Exemplo:

# cat /etc/passwd | tr a-z A-Z

Ele altera todas as letras de minúscula para maiúscula. Exemplo 2:

# cat /etc/passwd | tr ei EI

Transforma somente (ei) minúsculo para (EI) maiúsculo. Exemplo 3:

# cat /etc/passwd | tr juliano Grubelilo

Altera juliano para grubelilo. Para excluir um caractere use a opção -d exemplo:

# cat /etc/passwd | tr -d juliano

Formatar uma saída de texto

Quando temos linhas muito longas em um texto, podemos reduzir a quantidade de caracteres usando o
comando fmt que por padrão usa 75 caracteres. Você pode definir o tamanho, usando:
# fmt -w 20 /etc/passwd

Vai mostrar 20 caracteres por linha do arquivo /etc/passwd

Preparar um arquivo para impressão

O comando pr vai preparar o arquivo para impressão, colocando data e cabeçalho. Exemplo:

# pr texto.txt

Se você desejar, pode colocar informações no cabeçalho, exemplo:

# pr -h "Curso prof. Juliano Ramos - FAFICA" arquivo.txt

Recortar partes de um texto

Quero que ele me mostre os primeiros 3 caracteres:

# cut -c1,2,3 texto.txt

Quero que ele mostre os primeiros 5 caracteres (usando range):

# cut -c1-5 texto.txt

A ferramenta poderosa sed

Usado para substituir, deletar conteúdo de um texto e para expressões regulares que veremos a frente.
Exemplo:

# sed 's/ramos/oliveira/' alunos.txt

Sempre que encontrar a palavra: ramos ele substitui por oliveira. Desta forma de uso ele só substitui a
primeira ocorrência de cada linha. Para substituir tudo é preciso usar:

# sed 's/ramos/oliveira/g' alunos.txt

Para deletar uma linha usamos:

# sed '3,5 d'alunos.txt

Apagamos da linha 3 a linha 5. Podemos definir que sempre que aparecer a palavra juliano, ele apagar a
linha.

# sed '/juliano/d'alunos.txt

Gerenciamento de arquivos - Tópico 103.3


A estrutura de diretórios do linux começa pela raíz que é uma barra (/) semelhante ao C:\ do Windows. Para
navegar pelos diretórios usamos o comando cd exemplo: cd /tmp.

Para voltar um diretório usamos:

# cd ..

Para voltar 2 níveis de diretórios:

# cd ../../

Para ir direto para o diretório home do seu usuário:

# cd ~

Para listarmos os arquivos de um diretório usamos o comando ls, com a opção -a, podemos verificar
arquivos ocultos:

# ls -a

Arquivos ocultos começam com . (ponto). Outra opção comum é -l, que mostra uma lista detalhada,
podemos usar em conjunto com o -a para um melhor resultado:

# ls -la
Outra opção interessante é usar o -h para ver os valores em kbyte, mbyte e etc...

# ls -lha

Para ir listando todos os subdiretórios de um diretório, podemos usar o -R de recursivo:

# ls -R /etc/

Para listar somente arquivos que tenha a extensão .txt usamos o caractere curinga asterisco. Exemplo:

# ls *.txt

Digamos que você tenha uma lista com varios arquivos chamados: aula1, aula2, aula3 e etc... Você pode
definir quais listar usando:

# ls -l aula[123]

Para mostrar todos e menos o aula1,aula2 e aula3, uso:

# ls -l aula[!123]

Para ver do 10 ao 20:

# ls -l aula[10-20]

Fazer uma sequencia específica:

# ls -l aula{10,20,30}

Copia de arquivos

O comando cp permite que você copie arquivos, exemplo:

# cp origem destino

Exemplo 2 :

# cp /etc/passwd /tmp

Ver detalhes da cópia, usamos:

# cp -v /etc/passwd /tmp

Para perguntar se deseja sobrescrever um arquivo, use o hábito sempre de usar: -i , exemplo:

# cp -i /etc/passwd /tmp
Caso já tenha o arquivo ele te pergunta se deseja ou não sobrescrever o arquivo, por padrão, ou seja, sem a
opção -i, ele sobrescreve sempre.

Copiando diretórios

O cp não copia por padrão diretórios, mas podemos resolver isto usando a opção de recursividade:

# cp -r diretorio /tmp/

Mover e renomear um arquivo

Usamos o comando mv para mover um arquivo e também para renomeá-lo, exemplo:

# mv diretorio /tmp
# mv arquivo /tmp
# mv arquivo arquivo2

Observe que não usamos -r (recursivo) no mv para diretórios.

Criando arquivo de texto vazio

Usamos o comando touch para criar um arquivo vazio, exemplo:

# touch arquivo.txt

Também podemos alterar a data e hora de alteração de um arquivo. Se você usar ls -l arquivo.txt vai poder
visualizar a hora de modificação do arquivo. Para mudar a data do último acesso:

# touch -a arquivo.txt

Para alterar a data da ultima modificação:

# touch -m arquivo.txt

Podemos definir uma data qualquer, exemplo:

# touch -t 201701011000 arquivo.txt

Alterei para Ano 2017, Mês 01, Dia 01, hora 10:00 tempos anteriores só mostra o ano, ignorando a hora.

Remover arquivos e diretórios

O comando é o rm exemplo:

# rm arquivo

Remove o arquivo sem perguntar, se você quer que ele pergunte, use:
# rm -i arquivo

Para remover diretório, usamos a recursividade:

# rm -r diretório

Remover diretório vazio

Para remover diretório vazio, pode-se usar o comando rmdir na prática, acabamos sempre usando o rm.

Criar um diretório

Usamos para a criação de um diretório o comando: mkdir exemplo:

# mkdir diretorio

Se você desejar criar um diretório com outro diretório use -p ou --parents que tem mesmo efeito.

# mkdir -p diretorio/diretorio2/diretorio3

Procurar arquivos e diretórios

Para procurarmos arquivos e diretórios usamos o comando:

# find /home -name aula1.txt

No comando acima ele vai procurar o arquivo1.txt dentro do diretório /home. Para vermos todos que
começam com aula, usamos:

# find /home -name aula*

Para restringir por um usuário específico:

# find /home -user juliano -name aula1

Agora só vai procurar arquivo1 do usuário juliano. Para procurarmos arquivos por data de modificação:

find ./ -ctime -1

Neste caso, estou procurando a partir do meu diretório atual (./) arquivos modificados no último dia.

Agrupando arquivos

O tar cria um arquivo de backup. Para criar vamos usar:

# tar cpvf backup.tar /tmp

Usamos:
c Criar o arquivo

p Manter as permissões dos arquivos

v Modo verbose - Ver detalhes

f Apontar o arquivo (sempre será utilizado)

Neste caso, não estamos compactando, ou seja, diminuindo o tamanho, estamos apenas agrupando.

Compactando arquivos

Para iniciar, vamos começar com o gzip, usando aquele arquivo que agrupamos:

# gzip backup.tar

Observe que ele gera um novo arquivo chamado: backup.tar.gz que significa que esta compactado. Para
descompactar usamos:

# gunzip backup.tar.gz

Ele remove o backup e volta ao original backup.tar. Se você deseja criar o compactado e manter o original,
use:

# gzip -k backup.tar

Temos outro algoritmo de compactação chamado bzip2 neste caso usamos:

# bzip2 -k backup.tar

Ele vai criar o arquivo backup.tar.bz2. Para descompactar:

# bunzip backup.tar.bz2

Outro algoritmo que podemos usar é o XZ, para compactar:

# xz backup.tar

Para descompactar:

# unxz backup.tar.xz

Podemos usar também para decompactar a opção -d : gzip -d, bzip2 -d, xz -d. Vale lembrar que eles
compactam qualquer arquivo e não somente arquivos .tar como no exemplo.

Usando somente o tar


É possível usar o comando tar para criar arquivos compactados e descompactar. Por exemplo, para criar já
compactado em gzip:

# tar zcvpf backup.tar.tgz /tmp

Para já criar compactado em bzip2:

# tar jcvpf backup.tar.tbz /tmp

Para xz usamos:

# tar Jcvpf backup.txz /tmp

Para verificar como foi compactado determinado arquivo (caso não tenha extensão) use o comando file
exemplo:

# file nome_do_arquivo

Para descompactar qualquer um deles só altere c para x e a letra do formato que está compactado,
exemplo:

# tar zxvf backup.tar.tgz

Usando o cpio

O cpio é semelhante ao tar, porém, ele necessita de uma lista de arquivos como entrada. Por padrão
usamos ele com o comando find, exemplo:

# find /tmp | cpio -o > backup.cpio

Neste caso estamos criando o backup do diretório /tmp com o nome backup.cpio. Para desagrupar,
usamos:

# cpio -i < backup.cpio

Copiar uma partição inteira

O comando dd permite uma copia bit a bit de uma partição ou até mesmo de um disco inteiro. Você pode
verificar as partições que você tem no sistema com o comando:

# df -h

Para fazer uma cópia exata de um disco, use:

# dd if=/dev/sda of=/dev/sdb
No exemplo acima criamos uma cópia exata de um disco para outro. Isto é importante, por exemplo, no
caso de um backup de servidor. Se você quiser fazer uma imagem (.iso) de um disco (DVD, Blu Ray) utilize o
comando:

# dd if=/dev/sr0 of=imagem.iso

Partindo do pré-suposto que seu drive de dvd esteja em /dev/sr0.

Redirecionamento de entrada e saída -


Tópico103.4
No linux temos uma entrada padrão, identificada como STDIN (0) - Teclado, uma saída padrão STDOUT(1) -
sua tela e uma saída de erro STDERR (2) também sua tela.

Quando você desejar redirecionar a saída padrão use o sinal de maior ( > ). Exemplo:

# ls -l /tmp > saida.out

No exemplo acima, ao invés do resultado do comando ls ser a tela do computador, estamos enviando esta
saída para um arquivo, chamado: saida.out. Se você usar o cat ou o less neste arquivo, perceberá que o
conteúdo da listagem está no arquivo.

# cat saida.out

Quando você utiliza o maior (>) ele sobrescreve o arquivo que existir. Por exemplo:

# df -h > saida.out

Ele vai reescrever o arquivo saida.out colocando o resultado do comando df -h. Para adicionar conteúdo e
não reescrever, use ( >> ), exemplo:

# ls /tmp >> saida.out

Redirecionamento do erro

Por exemplo, se você listar um arquivo que não existe, o resultado sai na saida padrão STDIN1:

# ls /tmp/arquivo-inexistente
ls: não é possível acessar /tmp/arquivo-inexistente: Arquivo ou diretório não encontrado

Veja que posso referênciar a saída padrão com > exemplo:

# ls /tmp/arquivo-inexistente > saida_ls


ls: não é possível acessar /tmp/arquivo-inexistente: Arquivo ou diretório não encontrado

Para redirecionar para a saída de erro STDERR2, usamos:


# ls /tmp/arquivo-inexistente 2> saida_ls

Agora temos um arquivo chamado saida_ls com a informação do erro.

# cat saida_ls

Digamos que você queira fazer duas saídas, uma para o padrão STDIN1 e outra para erro STDERR2. Como
exemplo, vou usar 2 arquivos, um que exista no diretório e outro não.

#touch /tmp/existo
ls -l /tmp/{existo,nao-existo} > saida-ls.out 2> saida-ls-erro.out

Temos 2 arquivos agora, um com erro e o outro com a saída:

tux@giovanna /tmp> cat saida-ls.out


-rw-r--r-- 1 tux tux 15 Ago 30 18:25 /tmp/existo

tux@giovanna /tmp> cat saida-ls-erro.out


ls: não é possível acessar /tmp/nao-existo: Arquivo ou diretório não encontrado

Se eu desejar redirecionar a saída padrão e a saída de erro ao mesmo arquivo:

ls -l /tmp/{existo,nao-existo} > saida-ls.out 2>&1

Um erro comum de redirecionamento

Digamos que você tenha um aquivo chamado texto.txt com duas linhas, exemplo:

Olá Mundo
Sou o Tux

Você deseja colocar os números das linhas a frente e resolver usar o comando nl exemplo:

tux@giovanna /tmp> nl texto.txt


1 ola mundo
2 sou o tux

Agora você decide reeditar este arquivo com a saída do comando nl, muitos alunos, fazem:

# nl texto.txt > texto.txt

Pode parecer que está certo, mas tente visualizar o conteúdo do arquivo texto.txt e ficará surpreso, ele
está vazio. Isto por que o Shell vai criar o arquivo e como ele já existe ele apaga o atual.

Diga: Encaminhe a saída alterada para um arquivo com um nome diferente. Exemplo:
# nl texto.txt > texto.tmp
# mv texto.tmp texto.txt

Visualizando a saída e criando um arquivo

O comando tee permite que eu visualize a saída do comando e ao mesmo tempo crie um novo arquivo
com esta informação. Sua sintaxe:

# ls -l /tmp | tee novo_arquivo.tmp

Veja que você teve a saída do comando, mas também terá um arquivo chamado novo_arquivo.tmp com
esta informação.

Saída de um comando como entrada para outro comando

Para pegarmos a saída de um comando e usarmos como argumento para outro comando, usamos o
comando xargs. Exemplo prático:

# find /etc -name "passwd" | xargs ls -l

No exemplo acima, ele pega o resuldado da busca de arquivos (passwd) dentro de /etc e usa como
argumento para o comando ls -l.

Iprimindo o resultado de um comando

Podemos imprimir o resultado de um comando usando crase, exemplo:

# echo "A versão do kernel é: " `uname -r`

Outro modo é:

# echo "A versão do kernel é:" $(uname -r)

Exercícios
Que tal uma pausa para estudar um pouco sobre o que já abordamos? Faça os exercícios abaixo.

103.1 - Linha de comando

1) Encontre as seguintes informações:

Caminho completo de seu .bashrc


O release do kernel instalado
Diretórios que estão no PATH
Hostname da máquina

 
2) Crie e exporte uma variável chamada LINUX com o valor: Eu amo!

3) Crie um comando que escreva na tela: Eu uso Linux e

103.2 - Filtros de texto

1) Gere um comando que mostre as linhas do arquivo /etc/passwd excluindo-se as linhas que contenham a
palavra "daemon".

103.3 - Gerenciamento básico de arquivos

1) Crie a seguinte estrutura de diretórios dentro do seu diretório home:


/curso/comptialinux/profjulianoramos - Com apenas um comando.

2) Copie o diretório criado (profjulianoramos) para /tmp mantendo as permissões.

3) Compacte a estrutura de arquivos criada na questão 1 em tar.gz dentro do diretório /tmp

4) Compacte a estrurura de arquivos criada na questão 1 em tar.bz2 dentro do diretório /tmp

103.4 - Fluxos, pipes e redirecionamentos.

1) Gere um arquivo de saída com nome saida.out, conteúdo o resultado de ls -l no diretório /etc somente
dos arquivos que contenham a string config.

2) Explique os redirecionadores:

> arquivo:
< arquivo:
>> arquivo:
2> arquivo:
>arquivo 2>&1:

Gerenciamento de processos - Tópico 103.5


Todo programa e script que você inicia no linux, você está iniciando um processo. Todo processo tem um
número de identificação chamado de PID - Process Identifier. Além do PID temos o PPID - Parent Process ID
que é o processo pai dentro de uma hierarquia de processos. Exemplo: Se você abre o bash e depois chama
uma aplicação como o firefox, o processo PPID será o bash. O primeiro processo do linux é o init e o PID
dele é 1.

Comando ps

O comando ps é usado para mostrar os processos da máquina. O comando ps tem diversas opções,
usaremos as que possivelmente vão estar no exame.

Ao executarmos apenas ps vamos visualizar apenas os processos do nosso usuário em nosso terminal.
# ps

Para ver mais detalhes usamos a opção -u de usuário:

# ps -u

Agora podemos visualizar além do PID, algumas informações como uso da CPU e da memória que este
processo esta consumindo. Outra opção muito utilizada é o -x que mostra processos que não foram
iniciados diretamente em nosso terminal.

# ps -ux | less

Para visualizar todos os processos incluindo processos de outros usuário, usamos -a exemplo>:

# ps -aux | less

Para ver em formato de árvore hierárquica de processos, podemos usar a opção -f exemplo:

# ps -auxf | less

Para ver a prioridade do processo, podemos usar a opção -l exemplo:

# ps -alx | less

Usamos muito o comando ps com o pipe para filtrar uma saída, exemplo:

# ps -aux | grep vlc

Comando pstree

O comando pstree mostra os processos em formato de árvore hierárquica.

# pstree

Uma opção interessante é o -p que mostra os números do PID:

# pstree -p

Observe que o pstree mostra que o PID 1 é o systemD. O init era o sistema antigo de inicialização que hoje
aponta para o systemD. Então de fato o processo 1 é o SystemD. Mas em uma questão no exame sobre
qual seria o processo 1, seria INIT (por padrão).

Ver os PID dos processos

Podemos usar o comando pgrep para encontrar o PID de um processo, exemplo:


# pgrep bash

Para ver processo de um usuário específico, utilize:

# pgrep bash -u usuario

Comando top

O comando top é um dos principais comandos para monitorar o desempenho da máquina. Ao digitar o
comando top sem nenhum parâmetro, você terá uma tela interativa, com diversas informações sobre o
equipamento, que inclui: Número de processos, uso de CPU, Memória entre outros.

Dentro do comando top se você digitar: shift + M irá visualizar os processos que estão consumindo mais
memória.

Para ordenar por uso de CPU: shift + U

Para mostrar processos apenas de um usuário, digite u e o nome do usuário na caixa de dialogo. Vazio,
para todos.

Para visualizar a saída do top sem usar tela interativa, use:

# top -b

Isto é útil para criação de log. Mas vale lembrar que o ps faz isto muito bem.

Comandos para monitorar, parar e matar processos

Antes de tudo, segue uma tabela sobre sinais de processos, será útil a seguir:

Sinal Código Uso

Termina ou reinicia um processo. Utilizado também para que os arquivos de


SIGHUP 1
configuração de um programa sejam relidos.

SIGINT 2 Interrompe a execução do processo. Relacionado ao ctrl+c

SIGQUIT 3 Termina um processo e normalmente gera um arquivo dump

SIGKILL 9 Finaliza um processo de maneira imediata e condicional

SIGTERM 15 O sinal solicita que o processo se finalize. Sinal padrão do comando Kill.

Interrompe um processo permitindo que ele possa ser retomado.


SIGSTP 20
Relacionado a ctrl+z

SIGCONT 18 Continua a execução de um processo pausado (pelo sinal 20 por exemplo.)


Os processos monitoram os sinais enviados pelo kernel ou pelo usuário. Estes sinais fazem o processo ter
alguma ação. O comando é kill mas ele não é só usado somente para matar processos como muitos
pensam. Se você usar kill -l vai visualizar uma lista de todos os processos que são aceitos no linux. Mas na
tabela acima, eu menciono os mais utilizados.

O primeiro passo é saber o PID do processo, exemplo:

#ps aux | grep nome-do-processo

Com o número do processo, você pode finalizá-lo:

# kill PID

O kill sem nenhum parâmetro, usa o sinal -15 (SIGTERM). Para descrever o sinal, você pode usar o
paramêtro -s exemplo:

# kill -s SIGKILL PID

Outra forma é usando o número:

# kill -9 PID

A forma mais comum de utilização é com o número do sinal.

Comando killall

O comando killall mata os processos baseado nos nomes do processos e não no seu número de PID.
Exemplo:

# killall firefox

Vai matar todos os processos com nome firefox.

Obs: Os processos possuem permissões, apenas o root pode matar os processos de qualquer usuário. Um
usuário comum não pode matar o processo de outro usuário comum.

Comando pkill

O pkill permite que você faça um filtro em processos pelo nome e pelo nome do usuário. Exemplo:
Digamos que você está no servidor como root e tem 4 usuários rodando o processo firefox, para matar
este processo apenas do usuáro juliano, você iria executar:

# pkill -9 firefox -u juliano

Comando para gerenciar os processos

O comando uptime mostra a quanto tempo a máquina está em funcionamento. Outro comando que
também sai no top é o free que mostra a quantidade de memória disponível. Usamos a opção -m para ver
em (KB,MB ou GB).
O used engana as vezes muitos usuários. Na verdade o seu valor é a quantidade de memória alocada para
o Linux e não necessáriamente que ela está em uso. Agora, fique atento a memória swap, pois quando ela
está em uso é por que a memória RAM já chegou ao seu máximo.

O screen é uma ferramenta para trabalharmos em várias abas. Muito útil quando estamos trabalhando em
sessão remota como ssh. Funcionamento básico:

# screen
# <ctrl> + <c>
# <ctrl> + <n>

Ao abrir o screen você cria uma nova aba com ctrl+c e visualiza as existentes com ctrl+n. Para iniciar uma
nova aba já com um comando, execute:

# screen nome_do_comando
# screen top

Controle de tarefas

Quando iniciamos um processo no terminal, o processo fica preso no comando, exemplo:

# firefox

Você abre o firefox mas seu terminal não pode mais ser utilizado até o firefox ser fechado, chamamos isto
de processo em foreground. Para executar um processo, liberando nosso terminal, usamos o que se
chama processo em background, neste caso, basta colocar um & comercial ao final do comando:

# firefox &
[1] 55335

Ao executar este comando, ele mostra o ID do Job e o PID do processo. No exemplo acima, número do Job
[1] e o PID 55335. O comando jobs mostra os processos em background:

# jobs -l

Outra forma de colocar um processo em background é abrir uma aplicação e depois digitar: +

Quando você executa isto, ele fica em stopped ou seja, o processo não foi finalizado, mas não está
funcionando. Se você digitar bg ele pega o último processo e coloca em background, liberando assim o
funcionamento do processo. Se você desejar colocar o processo em foreground você usa o comando fg.
Você pode especificar o processo colocando o número, exemplo:

# bg 2
# fg 2

Podemos evitar alguns sinais, menos o sigkill (-9). Para não permitir por exemplo o SIGHUP(1), podemos
usar o comando:
# nohup firefox &

Isto é útil por exemplo: Se tivessemos executado o comando acima remotamente, ao fechar a seção, não
seria fechado o firefox.

Exercício do tópico 103.5


1) Preencha as informações abaixo:

1. Total de memória RAM utilizada (em MB)


2. Quantidade de processos em execução
3. PID dos 3 últimos processos

2) Execute um processo em foreground, faça stopped depois coloque ele para ser executado em
background. Coloque de volta o processo em foreground e por outro terminal, finalize este processo com
SIGKILL.

Modificar prioridade de processos

Quando você executar o comando top observe a coluna NI ela mostra o valor da prioridade de um
processo. Quanto menor o valor da prioridade maior é a quantidade de recurso para o processo.

Os valores são:

-20...........................................+19

O valor negativo é igual a mais prioridade, o positivo menor prioridade. Somente o usuário root pode
aumentar a prioridade do processo. O usuário comum pode diminuir a prioridade dos seus processos, mas
não pode aumentá-la.

Vamos abrir o firefox com uma prioridade 15:

# nice -n 15 firefox &

Quando executar o comando top você pode verificar a prioridade na coluna NI (nice). Ou executando:

# ps -la | grep firefox

Para alterar o valor da prioridade de um processo em execução:

# renice -n -8 PID

Alterar todas as prioridades de um usuário:

# renice -u juliano -n 5
Pesquisar arquivos de texto com expressões
regulares - Tópico 103.7
Expressões regulares é um assunto muito intenso, existem cursos e livros apenas para isto. Vamos nos
concentrar apenas no conteúdo do exame Comptia Linux+.

O que é uma REGEX ou Regular Expression ? A expressão regular é um conjunto de caracteres que define
um padrão de texto.

Comando grep

O comando grep vai encontrar blocos de texto com uma string especificada, por exemplo:

# grep juliano /etc/passwd

Lembrando que é case sensitive ou seja, tem diferença entre minusculas e maiúscula. A opção -c vai
contar quantas ocorrências encontramos no arquivo:

# grep -c juliano /etc/passwd

Digamos que você queira procurar em diversos arquivos quantas vezes a palavra é repetida, poderia usar:

# grep -c juliano *

Outra opção é -i que vai ignorar o case sensitive.

# grep -i JULIANO /etc/passwd

A opção -r é recursiva, ou seja, ele procura nos diretórios atuais e também dentro dos subdiretórios:

# grep -r juliano /etc/*

No exemplo acima, ele procura "juliano" dentro dos diretórios e subdiretórios /etc. Para expressões
regulares mais avançadas, usamos grep -E ou egrep. Que veremos a seguir com mais detalhes.

A opção -v vai excluir uma determinada palavra na busca, exemplo:

# grep -v juliano /etc/passwd

Podemos usar com outras opções, por exemplo:

# grep -vi JULIANO /etc/passwd

Neste caso, ele vai excluir JULIANO mas excluindo o case sensitive.

Comando egrep
Vamos trabalhar com expressões usando o egrep. Usaremos a expressão entre aspas "". Vejamos um
exemplo:

# egrep "b[aei]g" arquivo.txt

No exemplo acima estamos procurando palavras como bag,beg,big dentro do arquivo.txt. Podemos
também usar uma sequência:

# egrep "b[a-u]g" arquivo.txt

No exemplo acima, ele vai mostrar palavras de A a U (aeiou). Podemos definir também, o começo da linha e
o seu fim:

# egrep "^Linux" arquivo.txt

Sempre mostrará a palavra Linux que estiver no começo do arquivo (^). Para exibir as palavras do final, use:

# egrep "Linux$" arquivo.txt

No começo fica (^) circunflexo, no final ($) dólar.

Exemplo prático:

Para ver todas as linhas com comentários:

# egrep "^#" arquivo.txt

Para ver todas as linhas sem os comentários:

# egrep -v "^#" arquivo.txt

Outro exemplo:

# egrep "b[a-i]g*" arquivo.txt


baseado no debian
bag
beg
big

O * após, informa que tanto faz se o caracter g apareça ou não, o conteúdo deve ser exibido. Observe no
retorno que (baseado no linux) apareceu, isto por que tem (bas) da palavra baseado, mesmo que não tenha
g.

Agora, vamos especificar um pouco mais:

# egrep "b[a-i]g*e" arquivo.txt


bigger
bege
Estou especificando que após quantos g forem, deve aparecer a letra e , outra opção é o + que define que o
caractere anterior apareça pelo menos uma vez, exemplo:

# egrep "b[a-i]g+" arquivo.txt


bag
beg
big

Neste caso a palavra "baseado" não apareceu, já que não tem a letra g.

Outra opção é o ?, ele define que irá aparecer ocorrência ou com nenhum ou com apenas 1 vez o caractere
g exemplo:

# egrep "b[a-i]g?" arquivo.txt


baseado no debian
bag
beg
bege
big
bigger

Observe que ele mostra "bigger" mas por que ele mostra a linha inteira. Para entender melhor faça:

# egrep "b[a-i]g?e" arquivo.txt


bege

Neste caso somente a palavra bege apareceu, mesmo eu tendo bigger. O ponto (.) é usado para definir a
quantidade de caracteres após o g que estamos usando no exemplo:

# egrep "b[a-i]g..."
bigger
beginner

No exemplo acima, estou definindo que quero 3 caracteres depois do g - por isto os três pontos.

Exemplo 2:

# egrep "O.Linux" arquivo.txt


O Linux

Vale lembrar que o espaço equivale a 1 caractere. Outra opção:

# egrep "O.*Linux" arquivo.txt


O Sistema Operacional Linux
O Linux
O Concorrente do Windows é o Linux

Neste caso (.*) ele vai mostrar tudo entro o (O e Linux ).

Tabelas de exemplos:
Expressão Regular Descrição Exemplo

^ Indica o começa da linha. ^linux

$ Indica o final da linha linux$

Conjunto de caracteres e repetições

Expressão
Descrição Exemplo
Regular

Conjunto de caractere único. Determina qualquer


[abc] [Ll]inux = Linux, linux
caractere dentre os pertencentes a lista.

[a-z] ou [0- Range de caractere único. Determina qualquer caractere Versão[5-7] = Versão5,
9] dentros os pertencentes ao range. Versão6,Versão7

Versão[ ^ 0-7 ] =
[^abc] Negação do que está na lista.
versao8,versao9

. Indica qualquer caractere único ca.o = caso,caio,ca9o

bola*= bol, bola,


* Nenhuma ou várias ocorrências do caractere anterior.
bolaaaaa

+ Uma ou várias ocorrências do caractere anterior bola*=bola, bolaaaaa

Nenhuma ou apenas uma ocorrência do caractere


? bola? = bol, bola
anterior

Exercício:

1) Gere um comando que exiba na tela todas as linhas do arquivo /etc/passwd que terminem com
"nologin".

2) Crie um comando que liste todos os arquivos dentro do diretório /etc/ que contenham a palavra "snd"
em seu conteúdo, não nome de arquivo, a pesquisa deve incluir também subdiretórios.

Edição básica de arquivos usando o VI - 103.8


O VI que vamos trabalhar é uma versão melhorada chamada VIM, no exame os comandos são relativos a
ele, você pode verificar executando:

# vi --version

Caso não tenha o vim instalado:


# apt-get install vim

Editor de texto VIM

Praticamente quase toda a configuração de um sistema GNU/Linux é realizada através da edição direta de
arquivos de configuração em modo-texto. São diversas aplicações que podemos utilizar para editar estas
arquivos, no entanto, como nosso foco é também se preparar para as certificações de linux, utilizaremos o
editor VIM.

Para definirmos no Debian qual será o nosso aplicativo de texto padrão, usamos o comando:

# update-alternatives --config editor

Editor de texto vim

O VI é o editor básico do GNU/Linux, e está disponível em grande parte das distribuições de GNU/Linux.
Hoje em dia, as distribuições usam uma versão mais completa e com mais recursos do que o VI que é o
VIM = VI IMproved.

Para instalar o VIM no debian, utilize o comando:

# apt-get install vim

Para abrir o VIM digite :

# vim

Quando aberto, você poderá chamar a ajuda do vim, digitando:

:help

Ou, simplesmente:

:h

Como interpretar atalhos e comandos

A tecla é representada na maioria dos manuais e no help do VIM pelo caractere ^ circunflexo, ou seja, o
atalho para < control > + , aparecerá assim:

^L

Vou criar como exemplo um arquivo vazio e abrir o mesmo com o VIM:
# touch arquivo.txt
# vim arquivo.txt

Como estamos iniciando os nossos estudos com o editor VIM, é comum cometermos erros na edição de um
texto. Para recarregar este arquivo que está sendo editado, sem as alterações, execute:

< esc > Para sair do modo de edição


:e! Recarrega o arquivo sem as alterações

Você também, pode optar em fechar este arquivo, sem salvar suas modificações:

< esc > Para sair do modo de edição


:q! Sai do arquivo sem editá-lo

Os modos do VIM

O VIM trabalha com três modos de operação. Vamos supor que temos o arquivo de nome texto.txt,
podemos abrir ele usando o comando:

$ vim texto.txt

Ele abre no modo de visualização. Quando pressionamos a tecla < i > ou < insert > ele abre o modo de
Inserção. Quando você pressiona a tecla < esc > ele volta para o modo de comandos. Neste modo, você
digita um comando colocando dois pontos a frente, exemplo:

:help

Para acessar o modo de visualização novamente, pressione a tecla < v > .

Entendendo melhor:

O modo de inserção é onde você passa o tempo digitando o texto.

O modo de comandos é onde você vai formatar o texto (deletar, copiar e colar, replace e etc).

O modo visual é onde você faz seleção de grandes blocos de texto.

Abrindo caminhos dentro de um arquivo

Caso esteja visualizando um arquivo no vim e este arquivo tenha alguma linha de referência a outro arquivo
dentro do sistema, você pode abrir esta referência, parando sobre a linha do arquivo, digitando < esc > e
depois as teclas:

< ctrl > + < w > + < f >


Exemplo:

Considere que está lendo um arquivo e encontra no meio dele a linha:

O arquivo /etc/passwd contém dados dos usuário.

Use a tecla < esc > deixe o cursor sobre a referência /etc/passwd pressione as teclas: < ctrl > + < w > + < f > ,
o VIM abrirá na parte superior este arquivo, para fechar, utilize:

< esc >


:q

Abrindo arquivo em uma linha específica

Imagina a seguinte situação, você abre um arquivo de configuração como o do proxy squid3 que tem mais
de 7.000 mil linhas e precisa encontrar um determinado comando. Para não ficar um bom tempo
navegando sobre o arquivo, utilize:

$ grep -n "palavra" arquivo

Após a execução do comando acima, será exibido no terminal todas as linhas com o termo pesquisado:

$ grep -n "juliano" /etc/passwd


27:juliano:x:1000:1000:Juliano Ramos,,,:/home/juliano:/bin/bash

Agora que temos o número da linha, no caso do comando acima que executei, linha "27", podemos abrir
este arquivo, executando:

$ vim +27 /etc/passwd

Deste modo, já abrimos o arquivo /etc/passwd com o vim direto na linha 27.

Alternando entre arquivos

Imagine, que você está digitando um script de backup e não alguns parâmetros de configuração que estão
em outro arquivo. Para não precisar fechar o editor, execute o comando abaixo:

:e /caminho/arquivo

Este comando vai permitir que você abra novos arquivos no VIM sem fechar o editor. Quando estamos
editando mais de um arquivo, usamos as teclas : <ctrl > + <6> para alternar entre eles.

Movimentando-se sobre o texto


Estando no modo de visualização do editor "VIM". o melhor modo de se movimentar pelo texto é com as
teclas: h,j,k e l. Pode-se pensar que pelas teclas direcionais é mais fácil, elas funcionam de fato, mas depois
de um tempo usando as letras irá perceber que elas estão mais próximas de outras letras que são
comandos. Vejamos abaixo, as teclas e suas funções:

< h > Esquerda


< j > Baixo
< k > Cima
< l > Direita

Agora, vamos aprender algumas outras opções, notando que são case sensitive (tem diferença maiúscula e
minúscula.)

< G > Vai para o final do


arquivo
< gg > Volta ao topo
< e > Para mover ao final de
uma palavra
< ge > Para mover ao final de
uma palavra voltando ao cursor
< w > Para mover até o começo
da próxima palavra
< b > Para mover até o começo
de uma palavra voltando ao cursor
< f [caractere] > Para mover ao próximo
caractere específico
< 0 > Para mover ao começo da
linha
< $ > Para mover ao final de
uma linha
< } > Para pular ao final de um
parágrafo
< ctrl > + < G > Para saber sua posição no
arquivo
[numero da linha ] + < G > Para seguir para a linha
especificada

O vim mantem um histórico de alterações. Para movimentar-se entre as alterações, use:

< g > + < ; > Segue para a última


alteração
< g > + < , > Segue para a próxima da
lista

Inserindo texto

Para sairmos do modo de visualização do VIM e começarmos a inserir nosso texto, usamos as seguintes
teclas:
< i > Entra no modo de inserção
no local onde o cursor se encontra
< I > Entra no modo de inserção
no começo da linha
< a > Entra no modo de inserção
na frente de onde o cursor se encontra
< A > Entra no modo de inserção
no final da linha
< o > Adiciona uma linha acima
e entra em modo de inserção
< ESC > Volta ao modo
normal/comando
< v > Entra no modo VISUAL

Deletando texto

Estando no modo de visualização, podemos usar as teclas:

< x > Deleta o caractere onde o


cursor estiver
< X > Deleta o caracter atrás
do cursor
< d > + < w > Deleta a partir do cursor
até o começo da próxima palavra
< d > + < $ > Deleta o cursor até o
final da linha
< d > + < d > Deleta a linha inteira
< C > Deleta de onde o cursor
estiver até o final da linha
< c > + < e > Deleta do cursor até o
final da palavra

Copiar e colar

< y > Copia a palavra


< y > + < y > Copia a linha inteira
< p > Cola

O melhor modo de se copiar algo no VIM é navegando até a linha ou palavra que se deseja, entrando no
modo visual (tecla v) e selecionando a linha com as teclas de movimentação. Após selecionar, use a tecla < y
> para copiar, saia do modo de visualização < esc > movimente-se até o local de colar e pressione < p >.

Recortar e colar

Para recortar e colar, use algum comando de exclusão (x, dd, dw ou d$), movimente-se até o local onde
deseja colar e use a tecla < p >.

O último texto/palavra que você deletou será inserido após o cursor.


Substituição

Um recurso muito útil em qualquer editor de texto é a substituição de palavras. No VIM podemos usar, isto
é realizado no modo de comandos. Caso esteja no modo de visualização ou inserção, pressione a tecla <
esc > e depois < : > dois pontos, o comando abaixo fica a frente.

s/antiga/nova Substitui a ocorrência de


antiga para nova na mesma linha
% s/antiga/nova Sustitui em todo o
arquivo
% s/antiga/nova/gc Sustitui em todo o
arquivo, mas solicita confirmação em cada
ocorrência.

Buscando texto dentro do arquivo

Para buscar texto dentro do vim, usamos no modo de comandos, sempre a frente do dois pontos (:) os
comandos abaixo:

/termo-a-ser-pesquisado Pesquisa para baixo do


arquivo
?/termo Pesquisa para cima do
arquivo
// Busca o último termo
pesquisado

Ao entrar no modo de busca, o VIM deixa a /palavra pesquisada na barra inferior, então, podemos usar:

< n > Para a próxima


ocorrência
< N > Para a ocorrência
anterior

Arquitetura do sistema - Tópico 101


Na seção anterior, abordarmos os conteúdos mais básicos do linux. Nesta seção, abordaremos os
disposisitivos de hardware, boot do sistema e alteração do modo de inicialização do sistema.

Identificar e configurar os dispositivos de Hardware - tópico 101.1

A LPI não pergunta só comandos e sim conteúdo relevante ao dia a dia de um administrador de sistemas.
Processo básico de boot:
EFI e UEFI hoje são um padrão de BIOS, no entanto, para fins da LPI saiba apenas que BIOS é o sistema
básico de entrada e saída.

IRQ - Sinais de interrupção

Em aulas de Hardware você já deve ter ouvido falar do IRQ, na prática, usamos pouco, mas na LPI ainda
pode acontecer alguma pergunta sobre. Não precisa decorar a lista, mas dê uma atenção aos IRQs
principais. Para visualizar o mapeamente do IRQ dentro do linux:

# cat /proc/interrupts

Endereços de I/O - Entrada e saída

Em um sistema operacional, temos uma lista de endereços na memória que é utilizada para a comunicação
entre a CPU e os demais dispositivos de Hardware. No linux, visualizamos:

# cat /proc/ioports

Não se faz necessário decorar endereços desta lista.

Endereços DMA
DMA é um modo de o dispositivo de hardware falar direto com a memória (Direct Memory Addressing). Não
são todos os dispositivos que possuem, para listar o DMA do linux, usamos:

# cat /proc/dma

Barramentos

Barramento é a interface de hardware que você conecta seus dispositivos na placa mãe.

Os principais barramentos que são cobrados no exame: PCI e USB. Podemos visualizar o que está
conectado no barramento PCI, com o comando:

# lspci

Para maiores detalhes utilize o código do dispositivo obtido com o comando acima e execute:

# lspci -s 00:01.1 -v

Para barramento USB:

# lsusb

Para detalhes:

# lsusb -s 001:001 -v

Usamos o BUS e o DEVICE.

As partições virtuais

As partições virtuais, são partições dinâmicas, elas não contém dados de arquivos e sim, informações que
acontecem em tempo real. São elas:
/proc
/sys
/dev

/proc contém, informações dos processos ativos e recursos de hardware

/sys contém, informações sobre dispositivos de hardware (sysfs)

/dev Referências aos disposisitivos dos sistema, inclusive de armazenamento (udev)

udev Device manager

dbus Comunicação entre processos, informa aos processos a situação dos dispositivos de hardware.

No linux, tudo é um arquivo ou um processo. Um dispositivo de armazenamento por exemplo, pode ser
/dev/sda1 que por sua vez é o caminho para o acesso físico. O udev é um processo de device manager, ou
seja, ele que monta e referencia os dispositivos em /dev.

O dbus/hald é responsável pela comunicação entre os processos do linux e entre outras funções, ele
informa, quando um novo hardware é adicionado ele é quem espalha esta informação aos processos.

Coldplug e Hotplug: Alguns dispositivos só podem ser trocados com a máquina desligada, exemplo:
Memória (apesar que alguns mainframes permite esta troca em hotplug), neste caso chamamos de
coldplug. Quando você adiciona um HD externo USB por exemplo, sem precisar desligar a máquina,
chamamos de hotplug.

Quando executamos o comando df -a visualizamos além das nossas partições, estas partições virtuais:

# df -a

Arquivos importantes do /proc para o exame de certificação:

/proc/interrupts -- Informação de irq


/proc/dma -- Informação de dma
/proc/ioports -- Informação de entrada e saída
/proc/meminfo -- Informação de memória
/proc/cpuinfo -- Informação de CPU

Dispositivos de armazenamento

PATA - Também chamado IDE é uma tecnologia paralela (Parallel Advanced Technology Attachment). IDE é
referência à interface de conexão. Descrição deste sistema:

1. Sistema Master/slave, 2 discos por cabo.


2. /dev/hda ou sda master

3. /dev/hdb ou sdb slave


4. /dev/hdc ou sdcmaster
5. /dev/hdd ou sddslave

Um drive de CD / DVD, conectado a um IDE, também será referenciado como hdx. Após o PATA temos o
SATA - Serial Advanced Technology Attachment, sua descrição:

1. 1 disco por cabo.

2. Mais rápido que o pata.


3. Mapeados no linux como:

1. /dev/sda --Primeiro disco


2. /dev/sda -- Segundo disco

Discos SCSI - Small Computer System Interface

tipos:

8 bits (permite 7 dispositivos + 1 controlador)

16 bits (permite 15 dispositivos + 1 controlador)

SCSI_ID

Canal - Identificados de cada adaptador

ID - Identificador de cada dispositivo

LUN - Número lógico da unidade

Mapeados no linux como:

/dev/sda -- Primeiro disco

/dev/sdb -- Segundo disco

/dev/sdc -- Terceiro disco

# /proc/scsi/scsi

Mais utilizado é o padrão SATA.

Outros dispositivos:

/dev/fd0 -- Disquete / floppy disk

/dev/scd0 -- SCSI Cd-Rom

/dev/sr0 -- SCSI DVD

/dev/cdrom -- Normalmente criado como um link para o device do cdrom


/dev/dvd -- Normalente criado como um link para o device do dvd

Arquitetura do kernel Linux

Ao instalar o Debian ou outra distribuição Linux, estamos utilizando o kernel que foi compilado pelos
desenvolvedores da distribuição. Este kernel padrão, deve ser capaz de rodar em praticamente qualquer PC
e dar suporte a diversos tipos de recursos que o usuário pretenda utilizar, como sistemas de
arquivos,suporte a usb, suporte a diferentes tipos de protocolos de rede entre outros. O desenvolvedor
compila um kernel básico, com poucas funcionalidades e cria pedaços de código com funções específicas
que podem ser adicionados a este kernel, estes pedaços de código são chamados de módulos.

Quando o sistema é carregado, este kernel básico é colocado na memória e passa a controlar a máquina.
Digamos que você possui uma partição com o sistema de arquivos NTFS que não está no kernel básico
padrão. Durante a inicialização do sistema, o kernel básico vai procurar se o módulo que dá suporte para
este tipo de sistema de arquivos está disponível. Se este módulo for encontrado, ele será carregado
expandido assim as funcionalidades do kernel.

Trabalhando com módulos

O desenvolvimento de uma nova funcionalidade para o kernel linux pode ser implementada diretamente
no kernel ou compilada como um módulo. De modo geral, a escolha tende a ser a compilação como
módulo. Isso significa que o Kernel só vai ativar o módulo caso seja necessário, esta opção otimiza o
sistema tornando o kernel do linux muito dinâmico.

Exemplo prático:

Digamos que você esteja usando uma impressora USB, neste momento o módulo para ela funcionar está
ativo no sistema. Depois de um tempo, você para de usar esta impressora por qualquer motivo, neste caso
o módulo de suporte a impressora não é mais necessário e você pode desabilitá-lo.

Ao executar o comando lsmod você pode visualizar quais módulos estão carregados atualmente na
memória:

# lsmod
Module Size Used by
fuse 98304 3
pci_stub 16384 1
vboxpci 24576 0
vboxnetadp 28672 0
vboxnetflt 28672 0
vboxdrv 454656 3 vboxnetadp,vboxnetflt,vboxpci
xfrm_user 36864 2
xfrm4_tunnel 16384 0
tunnel4 16384 1 xfrm4_tunnel
ipcomp 16384 0
xfrm_ipcomp 16384 1 ipcomp
esp4 20480 0
ah4 20480 0
af_key 36864 0
xfrm_algo 16384 5 xfrm_user,esp4,ah4,af_key,xfrm_ipcomp
snd_usb_audio 180224 2
uvcvideo 90112 0
snd_usbmidi_lib 28672 1 snd_usb_audio
snd_rawmidi 32768 1 snd_usbmidi_lib
videobuf2_vmalloc 16384 1 uvcvideo
videobuf2_memops 16384 1 videobuf2_vmalloc
videobuf2_v4l2 24576 1 uvcvideo
videobuf2_core 40960 2 uvcvideo,videobuf2_v4l2
wl 6365184 0
videodev 176128 3 uvcvideo,videobuf2_core,videobuf2_v4l2
media 40960 2 uvcvideo,videodev
snd_seq_device 16384 1 snd_rawmidi
arc4 16384 2

Cortei a saída acima, por que o meu kernel tem muitos módulos ativos. Estes módulos ativos são diferentes
de máquina para máquina, por causa que possuimos hardware e configurações diferentes. Durante a
instalação do Debian, o sistema verifica seu equipamento e define quais módulos vão estar ou não ativos
no seu sistema.

Os módulos possuem dependências, você pode saber a quantidade de dependências por módulos na
coluna used na saída do comando lsmod a coluna size mostra o tamanho do módulo em bytes. Um
módulo só pode ser removido se o número de dependências for zero.

Os módulos são carregados através do comando insmod. Se o módulo B depende do A, este deve ser
carregado antes. Digamos que na coluna used do módulo A agora esteja mostrando 1, referente ao módulo
B que você carregou. Não será possível remover o módulo A, neste caso, você deve remover sua
dependência B primeiro e só depois removê-lo.

A seguir vamos observar quais são os procedimentos para carregar o módulo vfat que dá suporte ao
sistema de arquivos FAT32, muito comum em pendrivers formatados no Microsoft Windows e depois
veremos como é o procedimento para sua remoção.

O primeiro passo é verificar se o módulo em questão, já não está ativo no sistema, para isto executamos:

# lsmod | grep vfat

Caso não obtenha nenhum retorno, significa, que o seu módulo não está ativo. Se tiver um retorno como:

vfat 20480 0
fat 69632 1 vfat

Significa que o seu módulo está ativo e funcionando. Para ativar um módulo, usamos a sintaxe:

# modprobe nome_do_modulo

Neste caso:

# modprobe vfat

Para remover o módulo:


# rmmod vfat

Para saber informações sobre um módulo e ver suas dependências, utilize o comando modinfo, exemplo:

# modinfo vfat
filename: /lib/modules/4.9.0-deepin9-amd64/kernel/fs/fat/vfat.ko
author: Gordon Chaffee
description: VFAT filesystem support
license: GPL
alias: fs-vfat
depends: fat
intree: Y
vermagic: 4.9.0-deepin9-amd64 SMP preempt mod_unload modversions

Observe na saída acima, que a dependência para o vfat chama-se fat. Ao ativar o vfat vamos obter
novamente informação sobre ele:

# lsmod | grep vfat


vfat 20480 0
fat 69632 1 vfat

Observe que fat tem na saída da coluna used o número 1. Tentaremos remover ele:

# rmmod fat
rmmod: ERROR: Module fat is in use by: vfat

Veja que foi impossível remover, já que ele está sendo usado por vfat. Então vamos remover o vfat
primeiro:

# rmmod vfat

O modo vfat foi removido com sucesso, mas ainda temos a dependência fat que precisa ser removida:

# rmmod fat

Para remover de modo automático um módulo e suas dependência, podemos usar o comando modprobe -
r exemplo:

# modprobe -r vfat

O bom neste caso é que além de remover o vfat ele também remove o fat sua dependência.

Quais módulos estão disponíveis?

Para saber quais módulos estão disponíveis no seu sistema, acesse o diretório: /lib/modules/versao-do-
kernel/kernel no meu caso:

# cd /lib/modules/4.9.0-debian-amd64/kernel/
O meu kernel chama-se (4.9.0-debian-amd64) o seu provavelmente terá um nome diferente, já que este
Kernel que estou utilizando não é o padrão do Debian. Dentro deste diretório, você vai encontrar alguns
subdiretórios como:

arch crypto drivers fs lib mm net security sound virt

Dentro de cada um deles você encontra os módulos. Observe o diretório fs - file system ele é o diretório
que contém módulos sobre sistema de arquivos, dentro deste diretório,você pode visualizar todos os
diretórios dos módulos disponíveis de fs:

# cd /lib/modules/4.9.0-debian-amd64/kernel/fs
# ls
9p befs ceph dlm ext4 fuse jbd2 minix
nilfs2 overlayfs reiserfs udf
adfs bfs cifs ecryptfs f2fs gfs2 jffs2 ncpfs
nls pstore romfs ufs
affs binfmt_misc.ko coda efivarfs fat hfs jfs nfs
ntfs qnx4 squashfs xfs
afs btrfs configfs efs freevxfs hfsplus lockd nfs_common
ocfs2 qnx6 sysv
autofs4 cachefiles crypto exofs fscache isofs mbcache.ko nfsd
omfs quota ubifs

No meu caso eu tenho diversos módulos de sistemas de arquivo, dentro do diretório do módulo de sua
escolha, você obtêm o nome do módulo, exemplo:

# cd /lib/modules/4.9.0-debian-amd64/kernel/fs/fat
# ls
# fat.ko msdos.ko vfat.ko

Obseve que dentro do diretório /lib/modules/4.9.0-debian-amd64/kernel/fs/fat/ obtive o nome dos


módulos disponíveis vfat, msdos, fat.

Compilando um kernel

As vezes algumas funcionalidades que necessitamos só estão disponíveis em uma versão mais nova do
kernel, por exemplo:

Recentemente eu comprei um controle de xbox para jogar alguns games no linux. Mas descobri através de
busca na internet, que o módulo para ativar este joystick só estava disponível na versão mais nova do
kernel, para isto, fui obrigado a compilar um kernel novo e não mais utilizar o padrão, oferecido pela
distribuição. O processo a seguir de compilação, serve para qualquer versão de kernel que desejar instalar.

O primeiro passo que realizei para compilar meu kernel novo, foi instalar as aplicações necessárias para o
processo de compilação:

# apt-get install build-essential libncurses5-dev

O segundo passo foi fazer download do kernel no site oficial:

http://www.kernel.org
A versão escolhida foi a última estável no momento da edição do livro: 4.12, segue o link:

https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.12.7.tar.xz

O terceiro passo é descompactar o Kernel que realizei download dentro do diretório /usr/src:

# tar -xvf linux-4.12.7.tar.xz -C /usr/src

Após descompactar o quarto passo foi acessar o diretório e criar um link (atalho) para o diretório
descompactado linux-4.12.7:

# cd /usr/src
# ln -s linux-4.12.7 linux

Observe acima que criei um atalho chamado linux que aponta para linux-4.12.7, agora vamos acessar o
diretório linux e executar o comando para acessar o menu de configuração do kernel menuconfig:

# cd linux
# make menuconfig

Nesta janela de opções, você pode ativar novas funcionalidades para o kernel, por padrão, vamos apenas
salvar (save). Isto vai gerar um arquivo .config necessário para o resto do processo. Nesta quinta etapa,
devemos gerar a imagem do kernel propriamente dita, com o comando:

# make bzImage

Este processo demora um bom tempo, tenha paciência. No meu caso demorou umas três horas. O sexto
passo foi compilar os módulos, com o comando:

# make modules

Esta também é uma longa etapa, deu tempo de ver uns três episódios de "The Big Bang Theory". Agora o
sétimo passo é instalar os módulos no kernel novo:

# make modules_install

Em seguida, vamos instalar o kernel:

# make install

Como oitavo passo, vamos acessar o diretório /boot e gerar a imagem inicial do kernel intrd (de initial ram
disk).

# mkinitramfs -o initrd.img-4.12.7 4.12.7

E para finalizar, execute o comando:


# update-grub

Este comando irá criar a opção de inicialização do seu novo kernel.

Tópico 101.2 - O Boot do sistema


Basicamente o processo de boot do linux acontece na seguinte ordem:

BIOS --> MBR --> Bootloader (GRUB/lilo) --> Kernel --> Init

O boot loader que é o aplicativo de gestão de arranque de boot do linux, fica na MBR que o primeiro setor
de um disco:

O gerenciador de boot tem a função de carregar o sistema operacional na memória. Atualmente, o boot
loader padrão é o GRUB2 (Grand Unified Bootloader). O initrd/initramfs é um filesystem temporário que
carrega informações essenciais na memória RAM, como módulos para alguns dispositivos.

O INIT é o processo de ID 1 sendo o pai de todos os outros processos. Principais INITs utilizados:

SystemV (SYSV) - init original


systemd
upstart

Uma forma de você visualizar o log de boot é usando o comando dmesg:

# dmesg

 
Alterando os Runlevels, Shutdown e Reboot -
Tópico 101.3
A LPI menciona que devemos conhecer o SystemV e o Systemd. O SystemV trabalha com o conceito de
Runlevel que são níveis de execução do sistema. Cada Runlevel inicia o linux de uma maneira, vejamos uma
tabela sobre cada um deles:

No systemV temos um arquivo chamado /etc/inittab que é usado para se configurar o Runlevel padrão
(default), exemplo deste arquivo (com comentários):

#----------------------------------------------------------------------------------------
-----------------------#
# Entendimento dos níveis de execução no arquivo /etc/inittab #
#----------------------------------------------------------------------------------------
-----------------------#
#<identificação> : <Nível de EXecução> : <Ação> : <Processo> #
#----------------------------------------------------------------------------------------
-----------------------#
# Identificação: É a identifcação do nível de execução #
# Nível de Execução: Os níveis válidos de 0 á 6 #
# Ação: É ação que será feita caso o nível seja ligado (executado) #
# Processo: Processo gerado pela execução do nível de execução #
#----------------------------------------------------------------------------------------
-----------------------#

#----------------------------------------------------------------------------------------
-----------------------#
# Descrição do que cada nível de execução faz quando executado e de como colocar
#
# scripts e serviços na inicialização do sistema. OBS: a descrição dos runlevels
foi customizao #
#----------------------------------------------------------------------------------------
-----------------------#
# Os serviços ou scripts de inicialização devem ser colocados no diretório
/etc/init.d #
# para ser incluso em algum nível de execução. #
#----------------------------------------------------------------------------------------
-----------------------#
# <Níveis de execução> <Diretório> <Descrição do que é feito quando executado>
#
#----------------------------------------------------------------------------------------
-----------------------#
# 0 /etc/rc0.d/ modo de desligamento. para todos os serviços e desliga a máquina
#
#----------------------------------------------------------------------------------------
-----------------------#
# Modo de manutenção (single user). usado em casos criticos. #
# 1 /etc/rc1.d como por exemplo recuperar senha do root ou dá manutenção no
sistema. #
# Apenas o usuário root pode executar nesse nível #
#----------------------------------------------------------------------------------------
-----------------------#
# S /etc/rcS.d/ Carrega os serviços essenciais para o sistema, modo similiar ao
"1". #
#----------------------------------------------------------------------------------------
-----------------------#
# Modo multiusuário, usado para rodar o sistema básico sem serviços rede,
#
# 2 /etc/rc2.d e roda em modo texto. uso para fazer update do sistema #
# ou atualizações em massa. #
#----------------------------------------------------------------------------------------
-----------------------#
# 3 /etc/rc3.d/ Modo multiusuário, roda em modo texto com serviços de rede
disponiveis. #
# como samba, ssh e etc. #
#----------------------------------------------------------------------------------------
-----------------------#
# 4 /etc/rc4.d/ Esse nível de execução por padrão não é usado em distros debian
e RedHat#
# Mas uso como multiusuário em modo gráfico sem sem serviços de rede. #
#----------------------------------------------------------------------------------------
-----------------------#
# 5 /etc/rc5.d Modo multiusuário,usado para rodar o ambiente gráfico junto com
serviços#
# redes. #
#----------------------------------------------------------------------------------------
-----------------------#
# 6 /etc/rc6.d/ Modo de reinicialização do sistema. todos os serviços são paados
#
# e a máquina e reiniciada. #
#----------------------------------------------------------------------------------------
-----------------------#

###### indica o nível de execução padrão que o sistema irá usar ######
id:5:initdefault:

#### indica o primeiro runlevel executado durante o boot ###


# This is run first except when booting in emergency (-b)
si::sysinit:/etc/init.d/rcS

#### Runlevel executado em modo mono usuário ####


~~:S:wait:/sbin/sulogin

#### Localização de cada dos serviços e scripts a serem iniciados para cada nível de
execução ####
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6

# Normally not reached, but fallthrough in case of emergency.


z6:6:respawn:/sbin/sulogin

##### Reinicia a máquina pressionando CONTROL + ALT + DEL ####


ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

# Action on special keypress (ALT-UpArrow).


#kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work."

# What to do when the power fails/returns.


pf::powerwait:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
po::powerokwait:/etc/init.d/powerfail stop

#### Terminais virtuais disponiveis para os runlevels em execução ###


# so if you want to add more getty's go ahead but skip tty7 if you run X.
#
1:2345:respawn:/sbin/getty 38400 tty1
2:235:respawn:/sbin/getty 38400 tty2
#3:23:respawn:/sbin/getty 38400 tty3
#4:23:respawn:/sbin/getty 38400 tty4
#5:23:respawn:/sbin/getty 38400 tty5
#6:23:respawn:/sbin/getty 38400 tty6
7:12:respawn:/sbin/getty 38400 tty10

Em distros com SystemD este aquivo não existe. Para o exame LPIC é necessário saber os níveis de
execução (Tabela) e saber que é no arquivo /etc/inittab através da linha: id:5:initdefault: que eu altero
este nível de execução. O diretório /etc/init.d possui os scripts de inicialização dos serviços. A nível de
compatibilidade o systemD e o upstart mantêm os diretórios: /etc/rc0.d , /etc/rc1.d , /etc/rc2.d e etc...
Que simboliza os runlevels.

Para visualizar no systemV qual o runlevel que estamos usando:

# runlevel

Para alterar o runlevel, podemos usar o comando:


# init 2
# telinit 2

Tanto init quando telinit tem a mesma função. No systemD temos os comandos runlevel, init e telinit para
questão de compatibilidade.

SystemD

O systemD utiliza o conceito de units ao invés de runlevel. Entre as melhorias está a paralelização, uso do
dbus entre outros. Os tipos de serviços são:

1. Service
2. Socket
3. Device
4. Mount
5. Automount
6. Target - Equivale ao runlevel
7. Snapchat

Para o exame não é necessário compreender em detalhes cada um dos serviços. Os mais importantes são:
Service e target. Assim como no systemV temos o runlevel padrão, no systemD temos um target padrão.
O diretório principal é o /lib/systemd/system, execute um ls -l para ver os arquivos de configuração das
units.

Comandos do systemD

O primeiro passo é verificar se você utiliza o sistema SystemD, para isto, execute o comando:

# ls -l /sbin/init

Perceba que o seu init aponta para o /lib/system/systemd.

Para listar as units usamos o comando:

# systemctl list-units

As unidades são as configurações que estão em /lib/systemd/system. Para reiniciar a máquina ou desligar
usamos:

# systemctl reboot
# systemctl poweroff

Também podemos definir o target padrão. Para ver o target atual (semelhante ao runlevel) usamos:

# systemctl get-default

Para definir um target, usamos:


# systemctl set-default multi-user.target

Para alterar somente nesta seção, usamos:

# systemctl isolate rescue.target

rescue.target seria semelhante ao init 1 do systemV. Para iniciar o target padrão definido no sistema:

# systemctl default

O target gráfico do sistemD é o graphical.target.

Iniciar, parar e reiniciar serviços

Para obter informação sobre o estado de um serviço, usamos:

# systemctl status cron.service

Para iniciar um serviço usamos:

# systemctl start cron.service

Para reiniciar um serviço usamos:

# systemctl restart cron.service

Para parar um serviço, usamos:

# systemctl stop cron.service

Comandos de shutdown e restart

Temos 2 runlevels especificos para desligar e reiniciar, temos o runlevel 0 que desliga e o runlevel 6 que
reinicia. Mas existe uma forma melhor de fazer isto, usando o comando shutdown.

Se você usar o comando shutdown sem nenhum parâmetro o sistema será desligado daqui a 1 minuto,
mas é possível cancelar usando o comando shutdown -c, exemplo:

# shutdown
# shutdown -c

Para reiniciar :

# shutdown -r

Para desligar o linux e não desligar a máquina (ou seja a fonte de energia) usamos:
# shutdown -h

Para agendar o horário de desligamento:

# shutdown 18:00

Para agendar o desligamento para daqui a um certo tempo (minutos):

# shutdown -r +10
# shutdown -h +10

Também temos o comando: reboot e poweoff

Outro comando que pode ser cobrado no exame é o comando wall ele serve para enviar mensagem para
todos os usuários do sistema, exemplo:

# wall "vamos tomar café?"

Tópico 102
Este é o tópico 102.1 que fala sobre o Desing do Layout do HD. A prova nao tem só comandos, ela também
aborda conceitos. Por isto é importante ficar atento aos conteúdos teóricos do curso.

Considere uma máquina com 2 discos: sda e sdb

Quais as vantagens de um particionamento?

1. Gerenciamento do espaço em disco


2. Diferentes tipos de filesystem para cada partição
3. Proteção contra erros do disco
4. Diferentes níveis de segurança
5. Backup facilitado

Sistemas de particionamento

O MBR é o sistema de particionamento mais comum, mas ele tem a limitação de 2TB por partição. Sistemas
que utilizam EFI já estão atuando com o GPT. Para a certificação linux, vamos trabalhar com MBR.

É possível uma instalação com apenas 1 partição que vai ter o ponto de montagem raíz (/), no entanto,
recomenda-se pelo menos 2 partições:
A área de SWAP é um espaço no disco que simula a memória RAM e é utilizada quando o espaço total da
RAM é usado. Outra maneira de organizar o nosso disco é usando o LVM - Logical Volume Manager.

Arquivo de swap

No exemplo, criaremos um arquivo em /mnt chamado mem.swap:

sudo dd if=/dev/zero of=/mnt/mem.swap bs=1M count=512

Daí seguiremos com a criação do sistema de arquivos no arquivo alvo:

sudo mkswap /mnt/mem.swap

E ativamos a nova SWAP:

sudo swapon /mnt/mem.swap

No detalhe acima os 512MB já foram somados aos que já existiam, então para tornar as mudanças
definitivas, ou seja, para que essa SWAP esteja disponível para uso do sistema a cada reinicialização,
adicionaremos uma entrada no arquivo /etc/fstab assim:

sudo nano /etc/fstab


/mnt/mem.swap swap swap defaults 0 0

Feito isto basta reiniciar o sistema e testar com o comando:

# free -h

LVM - Logical Volume Manager


O LVM apesar de ser mais complexo permite que você gerencie de uma maneira mais lógica o
gerenciamento das partições, aumentando e diminuindo os tamanhos. A certificação não exige
conhecimento profundo em LVM sendo necessário apenas compreender sua lógica.

O LVM tem em sua primeira (CAMADA) os volumes físicos.

Provavelmente não teremos nenhum (se não instalamos o sistema usando lvm).

Vamos criar adicionar as nossas partições ao LVM.

pvcreate /dev/sdb1

pvcreate /dev/sdb2

pvcreate /dev/sdb3

Podemos agora ver com :

pvdisplay

Agora vamos pegar estes (dispositivos) e fazer uma grande massa dedados.

vgcreate storage /dev/sdb1 /dev/sdb2

Vamos verificar:

vgdisplay -vstorage

Agora vamos criar um volume lógico dizendo de qual massa de dadosvamos pegar o espaço.

lvcreate -L 3G -nlv_storage storage

Podemos visualizar com

lvdisplay

Podemos visualizar em nosso volume group que estamos usando 3G em umvolume lógico.

vgdisplay -vstorage
Agora, digamos que eu desejo adicionar mais um dispositivo (partição,raid) ao meu volume group. Neste
caso, vamos usar nosso /dev/sdb3,para isto fazemos:

vgextend storage /dev/sdb3

Visualize agora:

vgdisplay -vstorage

Vamos aplicar um file system:

mkfs.ext4 /dev/storage/lv_storage

Agora seria só montar e acessar.

mount -t ext4 /dev/storage/lv_storage /mnt/storage

Visualizamos o tamanho com:

df -h

Digamosagora que ele estourouo espaço e precisamos ampliar o seu tamanho. Oprimeiro passo é
desmonstar.

umount /mnt/storage

Como no VG (Volume group) temos espaço, vamos fazer:

lvextend -L +2G/dev/storage/lv_storage

Se dermos um (lvdisplay) você vai observar que agora temos 5GB e nãomais 3GB.

Mas mesmo assim, o file system (quando formatamos) era de 3G, poristo ele não atualiza quando você
digita :

df -h

Então,temos que mostrar para ele que o disco cresceu. Masantes é necessário executar a verificação do
disco:

e2fsck -f /dev/storage/lv_storage

resize2fs /dev/storage/lv_storage

Agora pode montar novamente o dispositivo e executar:

# df -h

Comandos essenciais

O comando df -h é o responsável pela visualização os pontos de montagem e o espaço livre:

# df -h

A partição swap não é demonstrada aqui, para visualizar eu uso o comando:


# cat /proc/swaps

Para visualizar as partições, podemos usar o comando:

# fdisk -l

Dentro do diretório /sys/block/sda ou o nome do disco que você tenha (sdb,sdc e etc...) você pode
também visualizar as partições.

# cd /sys/block/sda
# ls

102.2 - Configuração de boot loader

Existe o Grub Legacy e o Grub2 - mais usado atualmente.

Principais arquivos de configuração


/boot/grub/grub.cfg Principal arquivo de configuração, é um grande script que substitui o menu.lst, sendo
um arquivo somente leitura.

/etc/grub.d/ Diretório contém diversos scripts, usados para a construção do grub.cfg

/etc/default/grub Arquivo de configuração do menu do GRUB,lido pelos scripts do GRUB e então escrito
no grub.cfg.

Criando uma entrada para o Windows

Dentro do arquivo de configuração /etc/grub.d temos o arquivo 40_custom que é usado para criar
entradas para outros sistemas operacionais. O primeiro passo é dar permissão de execução:

# chmod +x 40_custom

Em seguida, criamos a entrada. No exemplo abaixo vamos adicionar uma entrada para o Windows que está
em um segunda HD (sdb), o resultado seria:

#!/bin/sh
exec tail -n +3 $0

menuentry "Windows 7" --class windows --class os {


insmod part_msdos
insmod ntfs
set root='(/dev/sdb,msdos1)'
chainloader +1
}

Trocar a senha de root - Grub

Na tela de login tecle em seguida edite a linha deixando-a como no exemplo abaixo:

linux /vmlinuz-2.6.32-5-686 root=UUID=1c5f16d2-b410-403b-a7a9-382e3f\1071b6 ro


init=/bin/bash

Tecle ctrl+x para iniciar o sistema. Quando chegar no shell digite:

# mount -o remount,rw /
# passwd root

102.3 - Bibliotecas compartilhadas


Este tópico tem apenas 1 questão na prova (peso 1), sendo assim, é um tópico rápido de ser abordado. A
biblioteca compartilhada é um pedaço de código que está fora de sua aplicação, de modo que facilite ao
desenvolvedor a criação de um software. Muitas vezes diversos recursos são compartilhados entre os
programas, exemplo:
Vou desenvolver uma aplicação que rode um tipo de vídeo, eu não preciso desenvolver o codec para aquele
formato de vídeo, eu posso apenas chamar este codec dentro do código do meu programa, reduzindo
assim, o tempo de desenvolvimento da aplicação.

A biblioteca estática é incorporada na minha aplicação. A desvantagem é que o programa vai ficar maior,
por que quando eu compilar minha aplicação todas as bibliotecas necessárias vão estar dentro do código.

O modo mais inteligente é a biblioteca dinâmica, que faz apenas uma referência no código, a biblioteca vai
ser carregada apenas uma vez e serve para diversos aplicativos.

Comandos básicos

Para saber quais são as bibliotecas que uma aplicação está usando, o primeiro passo e descobrir o caminho
do executável:

# whereis vim.basic

Agora que você sabe o caminho do executável, execute o comando:

# ldd /usr/bin/vim.basic

Tudo que tem "so" são bibliotecas, exemplo:


linux-vdso.so.1 => (0x00007ffdfeb23000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f9113120000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f9112ef8000)
libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007f9112cf0000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9112920000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f91126b0000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f91124a8000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9113658000)
libattr.so.1 => /lib/x86_64-linux-gnu/libattr.so.1 (0x00007f91122a0000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9112080000)

O linux através de um programa interno chamado "ld.so" consegue mapear o caminho das bibliotecas que
a aplicação necessita. O "ld.so" procura basicamente as bibliotecas em dois diretórios que são:

/lib
/usr/lib

Dentro do diretório /etc temos dois arquivos importantes:

/etc/ld.so.cache
/etc/ld.so.conf

O ld.so.cache é o arquivo que mapeia todas as bibliotecas conhecidas pelo linux e faz o vinculo com a
aplicação. O ld.so.conf é o arquivo principal de configuração, que aponta para o diretório ld.so.conf.d.

Para recompilar o cache do "ld.so" usamos o comando:

# ldconfig

Com a opção "-p" podemos visualizar todas as bibliotecas que estão reconhecidas no linux no momento:

# ldconfig -p | less

Incluir uma biblioteca

Para fim de exemplo, vou criar um diretório em /tmp chamado lib:

# mkdir /tmp/lib

E agora vou apontar este caminho para o meu "ld.so", abra o arquivo :

# vim /etc/ld.so.conf

E adicionar a linha:

/tmp/lib
Salve o arquivo e feche-o. Agora execute:

# ldconfig

Uma outra maneira temporária de se configurar um caminho de bibliotecas é usando a variável


LD_LIBRARY_PATH, no entanto, só funciona na sessão atual.

# export LD_LIBRARY_PATH=/tmp/lib/

102.4 - Gerenciamento de pacotes Debian

A certificação trabalha com o padrão Debian e o padrão RPM/Red Hat. Os comandos "base" para a
certificação é o dpkg, apt-get e rpm, yum.

Algumas considerações importantes:

1. Cada sistema deve usar um sistema de gerenciamento único


2. Um pacote é um conjunto de arquivos relacionados a uma aplicação; executáveis, configurações,
bibliotecas, manuais e etc, além de cleinformações sobre dependências.
3. Os gerenciadores de pacotes mantém uma base de dados relacionando todos os pacotes, seus
arquivos e dependências.

O comando dpkg

Você pode visualizar que o dpkg tem uma série de opções com o comando:

# dpkg --help
Para ver a lista de programas instalados, use:

# dpkg -l

Para um pacote específico:

# dpkg -l bash

Outra opção que lista os pacotes instalados é:

# dpkg --get-selections
# dpkg --get-selections | grep bash

Para exemplificar, vou realizar a instalação do shell KSH via dpkg. Primeiro passo realizei o download
(verifique sua versão de arquitetura):

# wget http://ftp.us.debian.org/debian/pool/main/k/ksh/ksh_93u+20120801-1_i386.deb

Para encontrar este link, eu pesquisei no google: "Download ksh debian package". Antes mesmo de realizar
a instalação deste pacote é possível visualizar os arquivos que o contém, para isto, utilize:

# dpkg -I ksh_93u+20120801-1_i386.deb

Uma outra opção seria:

# dpkg --contents ksh_93u+20120801-1_i386.deb

Para instalar um pacote no Debian, usamos:

# dpkg -i ksh_93u+20120801-1_i386.deb

Podemos visualizar que foi instalado (status do pacote) usamos:

# dpkg -l ksh

Para ver a lista de arquivos usados por esta aplicação usamos a opção em maiúscula:

# dpkg -L ksh

Para saber a origem de um arquivo, ou seja, qual pacote ele pertence, podemos usar:

# dpkg -S /usr/share/menu/ksh

Para remover o pacote, usamos:

# dpkg -r ksh
Se você rodar:

# dpkg -l ksh

Vai observar que ele ainda mantém informações do pacote na base de dados. Porém ao executar:

# dpkg --get-selections |grep ksh

Vai observar que o pacote não está instalado. Para remover o pacote e qualquer informação da base de
dados, usamos:

# dpkg --purge ksh


# dpkg -P ksh

Observe que se rodar:

# dpkg -l ksh

Já não vai encontrar nenhuma informação na base de dados.

Comandos do apt

O "apt" utiliza um repositório, com os endereços dos locais onde os pacotes serão encontrados. Este
repositório fica localizado em:

/etc/apt/sources.list

O primeiro comando que vamos observar é o "apt-cache":

# apt-cache

Obseve que ele mostra algumas funções que podemos usar, como por exemplo a opção:

# apt-cache pkgnames

Esta opção mostra uma lista de pacotes instalados no sistema. Para ver detalhes de um pacote em especial,
usamos:

# apt-cache show vim

Para ver quais pacotes (dependências) o vim, por exemplo, precisa para funcionar, usamos:

# apt-cache depends vim

O comando apt-get

O primeiro comando que devemos observar do apt é o apt-get upate.


# apt-get update

Sua função é ler o arquivo de repositórios (/etc/apt/sources.list) e atualizar a base de dados, com as
informações mais recentes de atualizações dos repositórios. Assim, sempre que você solicitar a instalação
de um pacote, ele saberá exatamente onde procurar e qual a última versão disponível para a instalação.

Obs: O comando "apt-get update" não atualiza o sistema operacional, ele somente atualiza a lista de
programas disponíveis nos repositórios.

Atualizando o sistema operacional

Para atualizar o sistema operacional usamos o comando:

# apt-get upgrade

Este comando irá verificar e atualizar todos os pacotes disponíveis no seu sistema, buscando as versões
mais atualizadas no repositório. Outro método, é usando o comando:

# apt-get dist-upgrade

A diferença entre os dois, é que este atualiza a versão de sua distribuição, caso uma nova versão esteja
disponível nos repositórios.

Buscando um pacote

Digamos que você precisa de um editor, mas não sabe o nome de nenhum para realizar sua instalação.
Uma maneira de procurar por todos os editores disponíveis no repositório é usando o comando:

# apt-cache search editor

Neste caso você terá uma lista com todos os pacotes que tenha a "string" editor. Quando encontrar um que
seja adequado, instale-o usando o comando:

# apt-get install nome_do_pacote

Instalando e removendo um pacote

Para a instalação de um pacote, utilize o comando:

# apt-get install nome_do_pacote

Instalar mais de um pacote de uma vez também é possível, basta dar um espaço em cada um deles:

# apt-get install nome_do_pacote nome_do_pacote


Para remover o pacote, utilize o comando:

# apt-get remove nome_do_pacote

Para remover o pacote, removendo também informações da base de dados e arquivos de configurações:

# apt-get purge nome_do_pacote

Apenas fazer o download do pacote

Uma opção que poucos conhecem é a possibilidade de se fazer apenas o download do pacote .deb, mas
não realizar sua instalação. Para isto, você pode usar o comando:

# apt-get --download-only install nome_do_pacote

O Download do pacote é realizado dentro do diretório: /var/cache/apt/archives. Toda vez que você instala
um pacote o arquivo de download fica neste diretório. Para limpar este cache, você pode usar o comando:

# apt-get clean

Comando dpkg-reconfigure

Este comando é utilizado para alguns pacotes que permitem interação com o usuário, como timezone,
definição de programas padrão, modelo de teclado entre outros. Este comando permite, refazer a
configuração deste pacote, exemplo:

# dpkg-reconfigure tzdata

Este comando permite fazer a reconfiguração da timezone. Outro exemplo:

# dpkg-reconfigure keyboard-configuration

Comando dselect

O comando dselect não é padrão na maioria das distros. Ele é uma interface para o comando apt, através
de menus interativos.

# dselect

Comando aptitude

O aptitude também tem uma interface de menu, mais complexa do que a do dselect:

# aptitude

Os comandos do "aptitude" são parecidos com o do apt-get; atualizar repositórios:


# aptitude update

Atualizar distro:

# aptitude safe-upgrade

Pesquisar pacote:

# aptitude search csh

Instalar um pacote:

# aptitude install csh

Remover um pacote:

# aptitde remove pacote


# aptitude purge pacote

O aplicativo alien

O Alien é um aplicativo que permite a conversão de pacotes .deb para .rpm entre outros formatos. Vale
lembrar que não é recomendável a utilização de pacotes que não são nativos a sua distribuição.

Converter um pacote .deb para o formato .rpm :

# alien -r nome_do_pacote.deb

Converter um pacote .rpm para .deb:

# alien pacote.rpm

O padrão do alien é gerar pacotes .rpm para .deb.

102.5 - Gerenciador de pacote RPM


Primeiro passo vamos instalar o centos minimal, que é uma distribuição baseada em Red Hat.

Link de referência: https://www.centos.org/download/

O comando rpm é equivalente ao dpkg do debian. Para verificarmos todos os pacotes instalados na
máquina, usamos:

# rpm -qa

Para informações se um pacote em específico está instalado, você pode usar:


# rpm -qa bash

Para detalhes desta instalação, o comando seria:

# rpm -qi bash

Para verificar os arquivos que pertecem a instalação utilize o comando:

# rpm -ql bash

Para visualizar apenas os arquivos de configuração:

# rpm -qc bash

E os arquivos de documentação:

# rpm -qd bash

Para você verificar um arquivo e saber quem é o pacote dono deste arquivo, utilize:

# rpm -qf /etc/skel/.bashrc

Para os próximos exemplos, vamos necessitar de um pacote .rpm. Para isto, podemos usar comando "yum"
que é semelhante ao "apt-get" com a opção de apenas fazer o download de um pacote sem instalar o
mesmo:

# yum install --downloadonly --downloaddir=/tmp/programa zsh

No exemplo acima, estou fazendo download do pacote "zsh" dentro do diretório: /tmp/programa.

Agora que temos o pacote "zsh.... rpm" dentro do diretório /tmp/programa, vamos visualizar suas
informações:

# rpm -qlp zsh...rpm

Podemos também, ver mais detalhes:

# rpm -qip zsh...rpm

Para instalar um pacote, usamos:

# rpm -i zsh...rpm

Caso você já tenha um pacote instalado e deseja instalar uma nova versão que você fez download, use a
opção:
# rpm -U nome_do_pacote.rpm

Algumas opções interessantes a usar durante a instalação é colocar os detalhes e uma barra de progresso:

# rpm -ivh nome_do_pacote.rpm

O comando "rpm" não resolve dependências de pacotes. Quando um pacote possui dependências o rpm
não instala este pacote. Existe uma forma de você instalar um pacote, ignorando as dependências, isto é
arriscado, por que sua aplicação pode não funcionar corretamente.

# rpm -ivh --nodeps nome_do_pacote.rpm

Outra opção que pode ser usada:

# rpm -ivh --force nome_do_pacote.rpm

Neste caso, ele força a instalação, ignorando dependências e/ou outros erros que poderiam ocorrer na
instalação normal. Também não é uma opção indicada. Antes de instalar um pacote é possível fazer um
teste para saber se o mesmo vai se instalar corretamente em meu sistema. Como informei, isto será um
teste, o pacote não vai ser instalado de fato.

# rpm -ivh --teste nome_do_pacote.rpm

Para remover um pacote, usamos:

# rpm -e zsh

Para remover com detalhes e barra de progresso:

# rpm -evh zsh

Para instalar um pacote, use o comando "yum install", como em:

# yum install mysql-server

Para removê-lo posteriormente, use:

# yum remove mysql-server

O yum possui também um recurso de busca, que é bastante útil quando você está procurando por um
pacote, mas não sabe o nome exato, ou em casos de pacotes que possuem nomes diferentes em relação a
outras distribuições. Use o comando "yum search", seguido por alguma palavra ou expressão, que faça
parte do nome do pacote ou descrição, como em:

# yum search samba


Ele retorna um relatório contendo todos os pacotes relacionados, incluindo o texto de descrição de cada
um. Isso resulta geralmente em uma lista relativamente longa. Para fazer uma busca mais restrita,
procurando apenas nos nomes dos pacotes, use o parâmetro "list", como em:

# yum list httpd

Ele é bem menos falador, retornando apenas os pacotes que possuem "httpd" no nome, sem pesquisar nas
descrições.

Uma terceira opção é a "provides" que mostra pacotes que incluem um determinado arquivo, pesquisando
não no nome ou na descrição, mas sim no conteúdo dos pacotes. Ele é bastante útil em casos em que você
precisa de alguma ferramenta ou biblioteca que faz parte de outro pacote maior, como em:

# yum provides mcedit

Em caso de dúvida, você pode verificar se um determinado pacote está instalado e qual é a versão usando
o comando "rpm -q", como em:

# rpm -q samba

samba-3.0.25b-0.el5.4

Para atualizar um pacote já instalado, use o comando "yum update", como em:

# yum update samba

O comando "yum install" também pode ser usado para atualizar pacotes. A diferença entre o "install" e o
"update" é que o "update" se limita a atualizar pacotes já instalados. Ao perceber que o pacote solicitado
não está instalado, ele exibe um aviso e aborta a instalação, como no exemplo abaixo. Isso reduz a
possibilidade de você acabar instalando um novo serviço por engano:

# yum update mysql-server

Loading "installonlyn" plugin Setting up Update Process Setting up repositories Reading repository
metadata in from local files Could not find update match for mysql-server

Outra observação é que, depois de atualizar um serviço, é necessário recarregar o serviço (como em
"service smb restart") para que a nova versão passe a ser usada. Esta é mais uma pequena diferença com
relação às distribuições derivadas do Debian, onde os serviços são reiniciados de forma automática depois
de atualizados.

Para atualizar todo o sistema, comece usando o parâmetro "check-update", que lista as atualizações
disponíveis:

# yum check-update

Se usado sem especificar um pacote, o "update" vai atualizar de uma vez só todos os pacotes do sistema,
de forma similar ao "apt-get upgrade" do Debian:

# yum update

Existe ainda o comando "yum upgrade", que é um pouco mais incisivo, incluindo também pacotes
marcados como obsoletos (que não existem mais na versão atual). Ele é útil em casos em que é necessário
atualizar uma versão antiga do sistema:

# yum upgrade
É possível também fazer com que o yum atualize o sistema automaticamente todas as madrugadas. Para
isso, basta ativar o serviço "yum" e configurá-lo para ser ativado durante o boot:

# chkconfig yum on # service yum start

Isso faz com que a atualização seja agendada através do cron e seja (por padrão) executada todos os dias
às 4:02 da manhã, como especificado no arquivo "/etc/crontab".

Tópico 104 - Dispositivos, sistemas de


arquivos Linux e FHS
Este é o último tópico que vamos estudar referente ao exame 101.

104.1 - Criando partições e sistemas de


arquivos
A certificação utiliza o utilitário "fdisk" que é a principal ferramenta de particionamento de discos. Para
visualizar os dispositivos e partições, você pode usar o comando:

# fdisk -l

Para iniciar um disco a ser particionado, utilize o comando:

# fdisk /dev/sdb

Onde "sdb" é o disco que utilizaremos para a criação das partições. Dentro do utilitário "fdisk", podemos
apertar a tecla < m > para visualizar o help e ver a teclas básicas de navegação dentro do fdisk.

Para criar uma nova partição, apertamos a tecla < n > , na primeira etapa, escolha o tipo de partição entre
primária (tecla p) e extendida (tecla e), já estuamos isto no tópico 102. Após escolher o tipo, você deverá
escolher o número da partição, recomendo que escolha o padrão ( enter ).

A outra etapa é para escolher o "First sector" ou seja, o setor que vai iniciar a partição, também escolha o
padrão ( enter ). O "Last sector" ou último setor, é a opção para você definir o tamanho de sua partição. O o
padrão é colocar o sinal de adição com o valor em (K)ilobyte, (M)egabyte, (G)igabyte e etc... exemplo:

+5G

Neste exemplo, estou definindo em 5Gb. Estas alterações só vão ser gravadas no disco, quando usarmos a
opção < w > que irá salvar e fechar o utilitário fdisk.

Agora que salvamos e fechamos o fdisk, devemos formatar esta partição, ou seja, aplicar um sistema de
arquivos, para isto, usaremos o padrão ext4:

# mkfs.ext4 /dev/sdb1
O utilitário (mkfs) é o responsável de aplicar o sistema de arquivos. Ao digitar "mkfs" tecle < tab > para ver
as opções disponíveis em seu sistema. Você pode formatar discos em NTFS, FAT32, Ext2,3,4 entre outros
formatos.

Journal é como se fosse um log de registros do que está acontecendo com o disco em tempo real, em caso
de uma queda abrupta de energia, ele consegue recuperar melhor as informações do disco, evitando
falhas. Sistemas modernos, utilizam Journal.

Antes de acessarmos esta partição, vamos abrir novamente o utilitário fdisk e apagar a partição:

# fdisk /dev/sdb

A tecla para remover uma partição é < d > . Se você tiver apenas uma partição ela será removida, se tiver
mais de uma, deverá colocar o número da partição a ser removida, após teclar < d >.

Agora que já aprendeu a remover a partição, crie novas partições e aplique o sistema de arquivos ext4.

104.2 - Mantendo a integridade do sistema


de arquivo
Neste tópico vamos aprender a fazer a manutenção de sistemas de arquivos já criados e verificar o estado
destas partições. Para visualizarmos as partições, podemos usar o comando:

# df

Uma opção melhor de visualizar estas informações é utilizando o parâmetro -h:

# df -h

Esta opção é útil por que mostra o tamanho em "Mb, Gb, e etc...". Outra opção interessante é a de se ver o
tipo de sistema de arquivos que a partição foi formatada:

# df -hT

Eu também posso visualizar as partições que eu tenho montada com um tipo de sistema de arquivos:
# df -ht ext4

É possivel também verificar o número de Inodes. Mas o que é um inode?

Creio que você já deve ter se perguntado, porque o meu pendrive de 1.5G mostra disponível apenas 1.38G,
ou mais, o meu recém adquirido HD de 80G me disponibiliza um pouco menos, por volta de 78G, ou
mesmo um disquete de 1.44M mas só dispõe 1.36M. Afinal, pra onde foram esses bytes que na hora de
venda anunciam, mas quando eu vou usar, não estão disponíveis?

Calma, esses bytes não sumiram e muito menos você foi enganado pelo vendedor, fazendo propaganda
enganosa. Esse espaço "invisível" é reservado para um tipo especial de estrutura de dados chamado INODE.

Essa estrutura é responsável por conter informações básicas sobre seus arquivos e pastas, como
permissões de acesso, identificação dos donos dos arquivos, data e hora do último acesso e alterações,
tamanho e o mais importante, os famosos ponteiros para o arquivo em si. De modo geral, o INODE é a
identidade de um arquivo ou diretório, é uma identificação única para ele.

Ao ler qualquer arquivo ou diretório, o kernel trata de ler primeiramente o INODE do arquivo para depois
chegar o dito cujo. Ao ler essa estrutura, são checadas as permissões e em caso de negada é retornada a
famosa mensagem de "Permission denied", caso contrário o procedimento segue normalmente.

Listando arquivos e verificando o seu inode:

# ls -li

Pode acontecer de você ainda ter um pequeno espaço no disco, mas não conseguir mais gravar
informações no diso, por falta de inode. Para verificar, execute:

# df -i

O comando "du" mostra quanto espaço está sendo utilizado por cada diretório.

# du

É possível listar também além dos diretórios os arquivos:

# du -a

Uma forma melhor é usar:

# du -ah

A forma mais simples de se verificar o tamanho dos diretórios é usando:

# du -hs *

Ou especificando um diretório:
# du -hs /home

Para limitar a quantidade de subdiretórios que o comando vai se aprofundar, podemos usar:

# du -h --max-depth=2

No exemplo acima, o comando vai verificar até 2 níveis de diretório.

Comandos de análise de sistema de arquivo


Um comando bem conhecido é o "fsck - File System Check", ele faz correções de blocos com defeito, que
normalmente acontece quando a energia é cortada de forma abrupta.

Observação: O fsck só funciona quando a partição não esta montada, ou se ela estiver somente leitura.

O "fsck" tem variações para outros sistemas de arquivos, além do ext4 padrão do linux, você pode verificar
as disponibilidades usando o comando:

# ls -l /sbin/fsck*

O comando para realizar a análise em um sistema ext4 :

# fsck.ext4 /dev/sdb2

Comando dumpe2fs
Para obter informações sobre uma determinada partição, usamos o comando "dumpe2fs", exemplo:

# dumpe2fs /dev/sda1 -h

Com este comando podemos visualizar diversas informações sobre a partição. Uma informação
interessante é "Reserved Block Count" que mostra quanto espaço da partição está reservado para não ser
usado, o padrão em média é 5%.

O comando dumpe2fs só funciona para sistema ext2, 3 e 4.

Partições xfs
Para partições "xfs" podemos obter informações usando:

# xfc_info /dev/sc1

Para gerar um dump com informações da partição e gerar um arquivo, podemo usar:

# xfs_metadump /dev/sdc1 /tmp/arquivodump_xfs

Setar informações da partição


Para setar as informações que obtemos no dumpe2fs, usamos o comando "tune2fs". Assim como o
dumpe2fs o tune2fs só funciona em partições ext2, 3 e 4.

Para colocar um "label" em uma partição, executamos:

# tune2fs -L "Partição de backup" /dev/sdb1

Você pode verificar com:

# dumpe2fs /dev/sdb1

Para definir o tempo da checagem do sistema de arquivos, usamos:

# tune2fs -i 1m /dev/sda1

No exemplo acima, defini que a checagem irá ocorrer a cada 1 mês. Para habilitar o "journal" em uma
partição que não tem journal, eu uso:

# tune2fs -j /dev/sdb4

Neste caso ele transforma uma partição sem journal (ext2) em uma com journal (ext3).

104.3 - Controle de montagem e


desmontagem de partições
Agora que já criamos uma partição e aplicamos um sistema de arquivos, é necessário, criar um ponto de
montagem para acessar os arquivos desta partição. Um ponto de montagem é o diretório que eu vou
associar a partição.

Podemos visualizar as partições que estão montadas, usando:

# df -h

Ou através do comando:

# mount

clePara montarmos uma partição de forma temporária (perde no reboot da máquina) usamos os comandos
mount/umount, para que a partição esteja disponível após o reboot, devemos editar o arquivo: /etc/fstab.

Para montarmos todas as partições que estão no arquivo "/etc/fstab" usamos o comando:

# mount -a

Para desmontar todas as partições que estejam no arquivo "/etc/fstab" mas que não estão em uso, usamos:
# umount -a

Criando e montando a partição


No meu sistema, eu possuo uma partição (/dev/sdb1) com o sistema de arquivos ext4. O primeiro passo é
eu criar um diretório que será usado como ponto de montagem. Para seguir um padrão do FHS, vou criar
este ponto de montagem dentro do diretório /mnt (mount).

# mkdir /mnt/sdb1

Obseve, que criei o diretório com o mesmo nome da partição que irei associar (montar), mas isto é somente
para facilitar, poderia criar este diretório com qualquer nome. Aliás, é possível montar em qualquer
diretório, criei em /mnt para seguir um padrão.

Agora que já tenho o diretório vou executar o comando para montar a partição:

# mount -t ext4 /dev/sdb1 /mnt/sdb1

Para desmontar esta partição; podemos usar:

# umount /dev/sdb1

Ou

# umount /mnt/sdb1

Fstab
Abra o arquivo fstab com o seu editor de texto de preferência:

# vim /etc/fstab

Vemos abaixo um exemplo de uma linha do arquivo Fstab:

/dev/cdrom /media/cdrom auto ro,noauto,user,exec 0 0

A primeira coluna (/dev/cdrom) corresponde ao hardware que queremos montar. A segunda coluna
significa o lugar que queremos montar (lugar que aparecerá o seu conteúdo) o hardware, no caso, o cdrom
(/media/cdrom). Na terceira coluna (auto) começa a complicar um pouco.

auto

Essa opção se refere ao sistema de arquivos da unidade. Se ela é ext3, ext4, ntfs, etc. Recomendável deixar
a opção auto, que o sistema de arquivos será detectado automaticamente. Em seguida teremos a quarta
coluna (ro,noauto,user,exec). Ela é composta de valores em sequência e sem espaço entre elas. Vamos
tentar entender o que significa esses valores.

ro e rw

O ro significa read-only ou somente leitura. E rw significa read-write ou leitura e escrita.


auto e noauto

Com a opção automática (auto), o dispositivo será montado automaticamente (na inicialização). auto é a
opção padrão. Se você não quer que o dispositivo seja montado automaticamente, use a opção noauto.
Com noauto, o dispositivo pode ser montado apenas manualmente.

user e nouser

Estas são opções muito úteis. A opção do usuário (user) permite que os usuários normais montem o
dispositivo, ao passo que nouser permite apenas ao root montar o dispositivo. nouser é o padrão, que é
uma das principais causas de dor de cabeça para os novos usuários Linux. Se você não é capaz de montar o
seu cdrom, disquete, partição do Windows, ou algo como um usuário normal, adicione a opção do usuário
no /etc/fstab.

exec e noexec

exec permite executar binários que estão nessa partição, enquanto noexec não permite que você faça isso.
noexec pode ser útil para uma partição que contém os binários que você não deseja executar no seu
sistema, ou que nem sequer pode ser executado em seu sistema. Este poderia ser o caso de uma partição
Windows. exec é a opção padrão, que é uma coisa boa. Imagine o que aconteceria se você acidentalmente
utilizar a opção noexec com sua partição raiz do Linux…

sync e async

Como a entrada e saída para o sistema de arquivos deve ser feito. sync significa que é feito de forma
síncrona. Se você olhar para o fstab da unidade de disquete, você vai perceber que esta é a opção utilizada.
Significa que quando você, por exemplo, copiar um arquivo para o disquete, as alterações são gravadas no
disquete, no mesmo tempo que você emitir o comando de cópia. No entanto, se você tem a opção async
em /etc/fstab, entrada e saída são feitas de forma assíncrona. Agora, quando você copiar um arquivo para o
disquete, as alterações podem ser fisicamente gravadas muito tempo depois de emitir o comando. Isso não
é ruim, e pode ser favorável, mas pode causar alguns acidentes desagradáveis: se você acabou de remover
o disquete sem desmontar primeiro, o arquivo copiado pode não existir fisicamente no disquete ainda!
async é o padrão. No entanto, use a sincronização com o disquete, especialmente se você está acostumado
ao modo como ele é feito no Windows e tem uma tendência a retirar os disquetes antes de desmontar
primeiro.

Você pode ainda ao invés de usar todas essas variáveis, utilizar uma opção que reúne todas as opções
padrão na quarta coluna.

defaults

Usa as opções padrão que são rw,exec,auto,nouser,async. Exemplo:

/dev/hda2 / ext2 defaults 1 1

Na quinta coluna, temos um número que pode ser 0 ou 1. Se 0, a unidade não será checada pela análise de
sistema de arquivos do Linux rotineiramente. A sexta coluna, é apenas a ordem em que será verificado o
sistema de arquivos. Se 1, será o primeiro. Se 2, será a segunda unidade a ser verificada.

Exemplos de linhas no fstab


/dev/fd0 /media/floppy auto rw,noauto,user,sync 0 0/dev/cdrom /media/cdrom auto
ro,noauto,user,exec 0 0/dev/hda2 / ext2 defaults 1 1/dev/hdb1 /home ext2 defaults 1 2

104.4 - Gerenciando cotas de discos.


Podemos definir o espaço que o usuário poderá utilizar do disco.

Instalando no Debian: apt-get install quota Instalando no Centos: yum install quota

1) Criamos uma partição com o serviço de quota habilitado.

Poderia ser a partição /home - desde que ela estivesse separada no arquivo:

/etc/fstab

Exemplo de edição no arquivo /etc/fstab:

/dev/sdb1 /mnt/sdb1 ext4 defaults,usrquota,grpquota 0 2

Reinicie e deixe o sistema montar normalmente, ou execute:

# mount -o remount /dev/sdb1

Verifique se as opções de quota estão ativas:

# mount

Criar dentro da raíz da partição o comando:

# quotacheck -cug /mnt/sdb1

Onde:

Criar arquivos de quota u Checa quota dos usuários g Checa quota dos grupos

Você pode forçar a criação do arquivo de quota com:

f Forçar a criação do sistema de quotas

Verifique com ls ( vai ser criado 2 arquivos)

aquota.group e aquota.user
 

Tudo certo até aqui, habilite o sistema de quota:

# quotaon /mnt/sdb1

Para desabilitar o quota:

# quotaoff /mnt/sdb1

Verificar se a quota está ativa:

# repquota -va

Definir quota para um usuário:

# edquota -u nome_do_usuário

No arquivo que abre, devemos saber que:

soft Limite de espaço disponivel para gravação.

Hard limite máximo, após exceder esta quota, ele fica no "grace time" devendo remover em um
determinado tempo arquivos.

Comando:

edquota -t

Permite aumentar ou diminuir o "grace time".

104.5 - Gerenciando permissões e


propriedades do arquivo
 

Um arquivo no linux pertence a um usuário, normalmente o usuário que o crio e um grupo dono ou
associado a este arquivo. Um arquivo como na imagem acima, tem 12 bits com as informações das
permissões deste arquivo.

Estes bits são divididos em 4 grupos. Sendo os primeiros 3 bits para configurações de permissões especiais,
que veremos mais a frente, os próximos 3 bits, configurações de permissões do usuário, os 3 outros,
configurações do grupo do arquivo e os bits finais, configurações das permissões para outros usuários.
Cada arquivo no sistema possui três permissões básicas:

r (4) read - para leitura; w (2) write - para escrita; x (1) execute - para execução;

A cada permissão é atribuído um valor, mostrado entre parênteses, que será utilizado para a definição de
permissões. Além disso, cada arquivo contém três conjuntos de permissões, sendo elas:

permissão do dono (u) - “user” do arquivo;


do grupo (g) - “group” ao qual o arquivo pertence;
outros (o) - “others” aqueles que não pertencem ao grupo e não são os donos do arquivo;

Sendo assim, considere a seguinte saída do comando ls -l, para um arquivo: permis- são do arquivo:

-rw -r --r - - 1 root root 0 Jan 15 09:52 arquivo

E para um diretório: permissão do diretório:

drwxr -xr - x 2 root root 4096 Jan 15 09:52 diretório

Vamos entender o que essas linhas significam. O primeiro caractere pode ser:
“-” -> indicando a listagem de um arquivo comum”; d -> indicando um diretório; l -> indicando um “link”
simbólico; p -> indicando um “pipe” nomeado; s -> indicando um “socket”; c -> indicando um dispositivo de
caractere; b -> indicando um dispositivo de bloco.

Os próximos três conjuntos de três caracteres indicam as permissões do usuário dono do arquivo,
permissões de grupo e permissões para outros usuários. Nesses três conjuntos, se o caractere encontrado
for um “-” (hífen) significa que a permissão está ausente, ou seja, não há a respectiva permissão. Se alguma
ou todas as letras (r, w e x) forem encontradas, indicará as permissões que o arquivo tem permissões
definidas.

Seguindo o conjunto de permissões, há um número que indica a quantidade de “links” simbólicos que o
arquivo ou diretório tem. Após o número de “links”, vem a indicação do usuário dono do arquivo, seguido
do grupo ao qual ele, o arquivo ou diretório, pertence.

Crie um usuário chamado aluno, que terá um grupo padrão também definido como aluno. Vamos criar um
diretório para testes e criar um arquivo dentro, se logue como usuário aluno:

$ mkdir / tmp / aula


$ cd / tmp / aula
$ touch arquivo

Visualize a permissão do arquivo criado:

$ ls -l / tmp / arquivo
-rw -r --r - - 1 aluno aluno 0 2011 -11 -04 12:17 arquivo

Sua permissão para o dono é Leitura e escrita: **r w -** Sua permissão para grupo é Somente leitura: **r -
-** Sua permissão para outros é Somente leitura: **r--**

Permissão Literal
O comando que usamos para alterar os valores das permissões é o "chmod". Observe :

$ chmod u - rw / tmp / arquivo

O parâmetro “u-rw” é que define o esquema de permissões. A primeira letra indica para qual(is) usuário(s)
as permissões estão sendo alteradas. Usamos a letra “u” para indicar o próprio dono, “g” para indicar o
grupo, “o” para outros e ainda a letra “a” para indicar todos.

O caractere seguinte poderá ser um sinal de “=” para deixar a permissão igual à que se deseja, “+” para
garantir a permissão ou “-” para retirar a permissão. Por fim, detalhamos a permissão: A letra “r” significa
leitura, “w” escrita e “x” execução, como era de se esperar.
Assim, o exemplo anterior retira as permissões de leitura e escrita para o usuário dono do arquivo.
Verifique novamente a permissão do arquivo:

$ ls -l / tmp / arquivo
----r --r - - 1 aluno aluno 0 2011 -11 -04 12:17 arquivo

Sua permissão para o dono é Nenhuma: **- - -** Sua permissão para grupo é Somente leitura: **r - -** Sua
permissão para outros é Somente leitura: **r - -**

As permissões seguem uma ordem dono, grupo, outros, ou seja, se você é o dono as permissões que se
encaixam no seu perfil é a de dono, mesmo que você pertença ao grupo, as permissões de dono
prevalecem.

Tente visualizar o arquivo:

$ cat / tmp / arquivo

Faça login com um outro usuário e tente ler o arquivo:

$ cat / tmp / arquivo

Será possível por que a permissão outros possui permissão de leitura. As permissões de grupo permitem
que ele abra o arquivo para leitura, mas não para escrita:

$ echo oi >> arquivo

Vejamos mais um exemplo, como usuário aluno faça:

$ chmod g + w arquivo

Este comando adiciona a permissão de escrita para os usuários que fazem parte do mesmo grupo ao qual
o arquivo pertence. As demais permissões não são altera-das.

Vamos testar agora a permissão de execução. Crie um novo arquivo:

$ touch / tmp / diretorio / novo

Visualize e acesse o diretório:

$ ls -l / tmp / diretorio
$ cd / tmp / diretorio

Para que os usuários acessem um diretório, ele precisa ter, permissão de execução. Vamos remover a
permissão de execução de todos os diretórios:

$ cd ..
$ chmod a - x / tmp / diretorio
Agora tente acessar o diretório:

$ cd / tmp / diretorio

Não é possível isso porque o x é o responsável por dar acessos ao diretório, mas ainda é possível visualizar
o conteúdo do diretório:

$ ls / tmp / diretorio

Visualize as permissões do diretório e do arquivo:

$ ls -ld / tmp / diretorio


drw -r --r - - 2 aluno aluno 4096 2011 -11 -04 17:02 diretorio /

$ ls -l / tmp / diretorio / novo


-rw -r --r - - 1 aluno aluno 0 2011 -11 -04 17:40 novo

Permissão octal
A segunda sintaxe é a forma numérica. Neste caso, o parâmetro que define as permissões é composto de
três números de 0 a 7, que correspondem às permissões para o usuário dono, para o grupo e para outros.
Cada número é formado pela soma das permissões atribuídas, sendo que execução vale 1, escrita vale 2 e
leitura 4.

Vejamos um exemplo:

# chmod 640 / tmp / arquivo

Neste caso, estamos atribuindo a permissão de: leitura e escrita 6 (r=4 + w=2) ao usuário dono leitura 4
(r=4) ao grupo 0 (sem permissões) à outros usuários. É importante observar que quando usamos a forma
literal, alteramos apenas o pa-râmetro especificado, não alterando as demais permissões. Já na forma
numérica, alteramos todas as permissões simultaneamente.

Exemplos de permissões Comando para atribuir permissão total a um arquivo chamado naofazer:

# touch / tmp / naofazer


# chmod 777 / tmp / naofazer
# chmod a + rwx / tmp / naofazer

Ou

# chmod u + rwx , g + rwx , o + rwx / tmp / naofazer

Verifique a permissão:
# ls -l / tmp / naofazer
- rwxrwxrwx 1 root root 0 2011 -11 -06 22:17 naofazer

Evite dar permissão total para um arquivo ou diretório a não ser que seja realmente preciso. Não se deve
fazer isso em nenhum tipo de arquivo, isso é apenas um exem-plo!!!

Comando para retirar a permissão de escrita de todos os usuários do arquivo “nao- fazer”:

# chmod 666 / tmp / naofazer

Visualize:

# ls -l / tmp / naofazer

Comando para alterar a permissão padrão do arquivo “arquivo” para que todos os usuários apenas possam
lê-lo.

# chmod 444 / tmp / arquivo

Visualize:

# ls -l / tmp / naofazer

Utilizando o exemplo anterior do modo Literal, vamos alterar a permissão recursiva- mente, dando
permissão total somente para o dono:

ANTES:

# ls -ld / tmp / diretorio


drw -r --r - - 2 aluno aluno 4096 2011 -11 -04 17:02 diretorio /

# ls -l / tmp / diretorio / novo


-rw -r --r - - 1 aluno aluno 0 2011 -11 -04 17:40 novo

# chmod -R 700 / tmp / diretorio

DEPOIS:

# ls -ld / tmp / diretorio

drwx ----- - 2 aluno aluno 4096 2011 -11 -04 17:02 diretorio /

# ls -l / tmp / diretorio / novo

-rwx ----- - 1 aluno aluno 0 2011 -11 -04 17:40 novo

###Umask
O “umask” altera o valor da máscara de criação de arquivos e diretórios. Essa “máscara” é utilizada para
definir o “permissionamento” padrão de um arquivo ou diretório quando ele é criado. Para calcular a
“umask” para um diretório, pegue a permissão total que um diretório pode chegar, “777”. Subtraia “022” de
“777” (esse é o valor padrão de “umask” do sistema).

Para calcular a “umask” para um arquivo, pegue a permissão total que um objeto pode chegar, que é “777”.
Subtraia “111” de “777” (valores de execução do arquivo) e de “0022” (valor padrão de “umask” do sistema
no Debian).

O valor padr ã o da " umask " fica armazenada no arquivo " / etc / profile". Caso não exista adicione umask:

Exemplo: umask 0022

O primeiro " 0 " significa modo octal , pode - se passar o valor em hexadecimal colocando " 0 x " como
prefixo .

Permissões Especiais
Há um conjunto especial de permissões, conhecido também como “bits” especiais, sendo eles:

O “SUID bit” é atribuído a um arquivo binário com permissão de execução, quando desejamos que um
usuário qualquer execute o comando com as permissões do usuário dono do comando. Se esse comando
pertencer ao usuário “root” um usuário qualquer irá executá-lo com as permissões de “root” desde que
tenha permissões para executá-lo. Por esse motivo o “SUID” constitui uma grande ameaça de segu- rança e
sua utilização deve ser bastante cautelosa.

O “SGID bit” é geralmente atribuível a diretórios. Quando um arquivo é criado dentro de um diretório com
“SGID bit” ativado, o conteúdo gravado dentro do diretório irá herdar o grupo do diretório e não o grupo do
usuário que criou tal conteúdo. Este “bit” especial é muito útil quando utilizamos diretórios para grupos de
trabalhos e em servidores de arquivos.

O “Sitcky bit” era bastante utilizado para realizar otimizações de acesso a conteú-dos, entretanto, a partir
da série 2.6 do kernel do Linux essa tarefa é realizada dire-tamente pelo kernel. A única utilidade desse
“bit”, atualmente, é fazer diretórios de utilização comum a todos os usuários, como no “/tmp”. Quando esse
“bit” está ativo em um diretório, todo conteúdo criado dentro dele pertencerá ao criador do conteúdo e por
mais que ele atribua a esse conteúdo permissões totais para todos os usuários, o único que poderá excluir
o arquivo ou diretório será o próprio dono ou o “root” ou ainda o dono do diretório que tem a permissão.
Para atribuirmos esses “bits” especi-ais, procedemos da mesma forma que nas permissões comuns,
somando os valores e utilizando o comando “chmod”, mas agora utilizando quatro números, o primeiro
número sendo o “bit” especial, seguido dos três da permissão padrão.

Veja o exemplo abaixo:

# chmod 4000 / tmp / a


# chmod 2000 / tmp / b
# chmod 1000 / tmp / c
# ls -l / tmp
---S ----- - 1 aluno aluno 0 2008 -07 -21 13:50 a
------S -- - 1 aluno aluno 0 2008 -07 -21 13:50 b
---------T 1 aluno aluno 0 2008 -07 -21 13:50 c

O “bit” especial para o campo de permissões do dono é o “SUID” representado por “s” ou “S”. Para o grupo é
“SGID” também representado por “s” ou “S”. Já o campo de permissões de outros usuários, o “Sticky BIT”, é
representado por “t” ou “T”.

Veja que quando o arquivo ou diretório não tem permissão de execução, o “bit” especial é representado por
uma letra “S” (Upper Case), e quando possuem uma permissão de execução, o “bit” especial é apresentado
como “s” (Lower Case). O mesmo acontece com o “Sticky bit”, mas com a letra “t” e “T”.

Exemplo dos bits especiais com permissão de execução:

# chmod 4100 / tmp / a


# chmod 2010 / tmp / b
# chmod 1001 / tmp / c

# ls -l
---s ----- - 1 root root 0 2008 -07 -21 13:50 a
------s -- - 1 root root 0 2008 -07 -21 13:50 b
---------t 1 root root aluno 0 2008 -07 -21 13:50 c

Todas as permissões especias que não contiverem execução são maiúsculas. “S” e “T”.

Exemplos: Suid Bit: Podemos usar como exemplo o comando “passwd”.

# ls -l / usr / bin / passwd


-rwsr -xr - x 1 root root 31640 2008 -06 -12 20:39 / usr / bin / passwd

Os nossos usuários comuns só podem mudar sua senha pois o comando passwd está com o “bit SUID”
ativado.

Desabilite o Suid:

# chmod 755 / usr / bin / passwd


# ls -l / usr / bin / passwd

Agora se logue como aluno e tente mudar sua senha:

$ passwd

Não é possível, pois o aluno não tem permissão de escrita nos arquivos /etc / passwd e / etc / shadow .

Como root, volte a permissão original: # chmod 4755 / usr / bin / passwd

# ls -l / usr / bin / passwd

SGID Bit: Crie um diretório com permissão total para qualquer usuário:

# mkdir / teste
# chmod 777 / teste

Agora qualquer usuário tem acesso ao diretório teste. Como usuário aluno crie um arquivo no diretório
teste:

$ touch / teste / numero1

$ ls -l / teste

-rw -r --r - - 1 aluno aluno 0 2011 -11 -07 11:01 numero1

Verifique que o grupo é o mesmo do usuário. Agora como root altere a permissão do diretório teste,
adicionando o SGID Bit:

# chmod 2777 / teste

Novamente como usuário aluno, crie um novo arquivo dentro do diretório teste:

$ touch / teste / numero2

Verifique quem é o dono e quem é o grupo do arquivo criado: $ ls -l / teste

-rw -r --r - - 1 aluno aluno 0 2011 -11 -07 11:01 numero1

-rw -r --r - - 1 aluno root 0 2011 -11 -07 11:19 numero2

Visualize que o grupo agora não é mais o do usuário e sim o mesmo do diretório.

Stick Bit: Como root modifique novamente a permissão do diretório teste, adicone o Stick Bit:

# chmod 1777 / teste

Agora modifique as permissões dos arquivos dentro dele dando permissão total para todos os usuários:

# chmod 777 / teste /*

Agora se logue como usuário aluno2, visualize as permissões do diretório e dos arquivos:

$ ls -ld / teste
drwxrwsrwt 2 root root 4096 2011 -11 -07 11:19 / teste

$ ls -l / teste
- rwxrwxrwx 1 aluno aluno 0 2011 -11 -07 11:01 / teste / numero1
- rwxrwxrwx 1 aluno aluno 0 2011 -11 -07 11:19 / teste / numero2

Agora que você viu que tem permissão total nos arquivos, tente deletar algum arquivo dentro do diretório
teste:

$ rm / teste / numero1

Apesar da permissão total no arquivo, não é possível remover devido a permissão do diretório com Stick
Bit.
O comando para trocar as permissões é o chmod. Há duas sintaxes possíveis: literal e octal.

Comando chown, chgrp


Para alterar o nome de um usuário dono de um arquivo, uso:

# chown luizinho arquivo

Neste caso o dono do arquivo, será luizinho. Para alterar o nome do usuário e do grupo, usamos:

# chown luizinho:financeiro arquivo

Neste exemplo, o grupo foi alterado para financeiro. Para trocar somente o grupo, usamos:

# chown :admin arquivo

Troquei de financeiro para admin, suprimindo o nome do usuário à frente dos : (dois pontos).

Para alterar de forma recursiva, usamos:

# chown -R juliano:financeiro diretorio2

Neste caso ele alterou o usuário do diretório2 para juliano e o grupo para financeiro, tanto do diretório2
quanto dos subdiretórios.

O comando chgrp muda apenas o grupo, exemplo:

# chgrp -R suporte arquivo2

Tópico 104.6 - Criando e alterando Links


Hard e Soft - in
O Link Hard cria um arquivo com o mesmo "inode" sendo assim um mesmo arquivo físico. Crie um arquivo
em /tmp de nome teste e verifique o seu inode:

# ls -li teste

Agora crie um link hard:

# ln teste link-hard

Verifique que tanto o arquivo "teste" quanto o arquivo "link-hard" possuem o mesmo "inode":

#ls -li teste link-hard

Se você alterar a permissão de um dos dois arquivos, muda a permissão dos dois. Link Hard nada mais é do
que você criar um atalho para o mesmo arquivo físico (mesmo local na partição).

Você pode apagar um dos dois e o outro continua. "Você apaga apenas uma das referências".

Considerações importantes sobre Link Hard:

Só é possível criar link dentro da mesma partição


Não posso criar Hard Link para diretórios
 

Link simbólico
Link simbólico é um arquivo que aponta para outro arquivo.

# ln -s arquivo link-simbolico

Observe que ele mostra para qual arquivo ele aponta:

# ls -ld link-simbolico

É possível criar um link para diretório:

# ln -s /var variaveis

104.7 - Localização de arquivos no linux


Este é o último tópico para que você possa realizar a prova 101 da LPI ou LX-LX103 da Comptia Linux+. O
FHS - FileSystem Hierarchy Standard é um padrão que a comunidade adotou para que os arquivos e
diretórios fiquem localizados no mesmo local indiferente da distribuição. Isto não é obrigatório, mas por
conveniência, as distribuições adotam o FHS.

Diretórios que obrigatóriamente iniciam em / (raíz). Estes diretórios não podem ser montados fora da
partição / (root).

Os diretórios abaixo, podem ser montados, ou seja, não precisam estar na mesma partição:
 

Os principais diretórios de /usr

Comandos de busca de arquivos

O comando mais utilizado é o find, exemplo:

# find /home -name juliano

No exemplo acima ele busca tudo o que encontrar com o nome juliano. Digamos que você tenha arquivos
(juliano2,juliano10), você pode fazer uma busca recursiva:

# find /home -name juliano*

Para procurar arquivos de um determinado usuário, ou seja, que ele é o dono do arquivo, usamos:

# find /home -user aluno

Neste exemplo, o find vai prourar todos os arquivos do usuário aluno no diretório /home. Podemos usar
pelo tamanho, exemplo:

# find /home -size +50M

Neste caso, vai procurar arquivos com mais de 50M.

Comando locate

O comando locate busca string através de sua base de dados. Exemplo:


# locate juliano

Neste exemplo ele vai buscar tudo que tenha "juliano" em sua base de dados. Como ele busca na base de
dados e não faz varredura do disco, ele é bem mais rápido. Mas é necessário, atualizar a base de dados.

# updatedb

O arquivo de configuração do updatedb fica em: /etc/updatedb.conf

Comando whereis

Este comando localiza executáveis, bibliotecas e páginas de manual. Exemplo:

# whereis rpm

Comando which

O which procura somente nos diretórios PATH, e mostra somente o primeiro retorno que ele encontrar.

# which rpm

Comando type

O comando type mostra o tipo de um executável. Exemplos:

# type ls

# type cd

Agradecimento
Agradeço a Deus sempre, por indiferente de meus erros humanos, tem sempre me abençoado e me
mostrado o caminho do bem e do amor. Agradeço a minha filha, que me inspira todos os dias e sabe
respeitar o meu trabalho. Algumas vezes quando venho a procrastinar o trabalho é ela quem me disciplina,
minha pequena princesa de nove anos.

Agradeço aos meus alunos, que confiam no meu trabalho. Sempre aprendo nas aulas, por que sou humilde
e mente aberta: "Ninguém é tão grande que não possa aprender, nem tão pequeno que não possa
ensinar."

Para finalizar, agradeço a mim mesmo! Por que aprendi a me amar, respeitar meus limites e acima de tudo,
aprendi a me perdoar. Confie em Deus e em ti mesmo, que a vida será doce.

**- Vamos que vamos!**

Prof. Juliano Ramos


 

S-ar putea să vă placă și