Buscar

livro-lpic-1-profjuliano_pagenumber

Prévia do material em texto

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.
1
af://n16
af://n21
http://www.certificacoes.net.br/
mailto:profjulianoramos@gmail.com
mailto:profjulianoramos@gmail.com
af://n31
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
2
af://n36
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
3
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
4
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.
5
af://n39
af://n43
 
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
6
af://n48
af://n58
af://n65
af://n77
 
Ame o pinguim 
 
Faz parte do processo de aprendizado destruir o sistema :-), então, use sempre umamá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.
7
af://n82
af://n87
https://www.virtualbox.org/
af://n91
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:
Podemos visualizar o conteúdo de uma variável:
Neste caso, verificamos que estamos usando o /bin/bash
Se você não estiver executando o bash como padrão, é só chamar o bash:
O que é um comando? 
# echo "Linux Ubuntu"
Linux Ubuntu
# echo $SHELL
/bin/bash
# bash
8
af://n95
https://www.bunsenlabs.org/
af://n99
af://n117
af://n121
af://n129
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:
Outro exemplo:
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.
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:
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:
Outro comando importante é o ls que irá listar os arquivos do diretório:
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:
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:
Variáveis de ambiente - Local e Global 
# type echo
# type tar
tar is /bin/tar
# echo $PATH
# pwd
# cd /home/aluno
# ls
#./meuprograma.sh
# /home/aluno/script/programa.sh
9
af://n136
af://n139
af://n150
Assim que você inicia o SHELL várias variáveis de ambiente são carregadas. Veja como declarar uma variável
no SHELL:
Para ver o seu valor:
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:
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:
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:
Ver apenas as variáveis globais 
O comando env visualiza apenas as variáveis externas, ou seja, somente o que foi exportado.
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" 
# NOME_VARIAVEL=valor
# echo $NOME_VARIAVEL
# export NOME_VARIAVEL
# export LINUX="Eu amo"
# set |less
# env |less
10
af://n159
af://n162
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
11
af://n176
af://n179
af://n188
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:
12
af://n199
af://n209
af://n217
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 :
13
af://n225
af://n227
af://n232
# 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:
14
af://n245
af://n251
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 
15
af://n257
af://n267
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:
16
af://n272
af://n280
af://n287
# 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:
17
af://n298
af://n305
# 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
18
af://n314
af://n319
af://n326
af://n329
3 Lucas
Salve como alunos.txt. Agora crie outro arquivo com o seguinte conteúdo:
1 10
2 5
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:
19
af://n341
af://n345
af://n354
# 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 
20
af://n358
af://n363
af://n368
af://n377
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:
21
# 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:
22
af://n404
# 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 
23
af://n414
af://n417
af://n421
af://n431
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 
24
af://n438
af://n440
af://n445
af://n455
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 
25
af://n465
af://n481
É 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 casode um backup de servidor. Se você quiser fazer uma imagem (.iso) de um disco (DVD, Blu Ray) utilize o
comando:
26
af://n492
af://n497
# 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.
27
af://n505
af://n515
# 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 
28
af://n530
af://n540
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 <utilize a variável LINUX>
 
29
af://n544
af://n548
af://n554
af://n557
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:
30
af://n572
af://n575
af://n581
af://n585
af://n587
# 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:
31
af://n603
af://n609
Sinal Código Uso
SIGHUP 1
Termina ou reinicia um processo. Utilizado também para que os arquivos de
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ãodo comando Kill.
SIGSTP 20
Interrompe um processo permitindo que ele possa ser retomado. Relacionado
a ctrl+z
SIGCONT 18 Continua a execução de um processo pausado (pelo sinal 20 por exemplo.)
# 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:
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:
32
af://n615
af://n623
Com o número do processo, você pode finalizá-lo:
O kill sem nenhum parâmetro, usa o sinal -15 (SIGTERM). Para descrever o sinal, você pode usar o paramêtro -
s exemplo:
Outra forma é usando o número:
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:
#ps aux | grep nome-do-processo
# kill PID
# kill -s SIGKILL PID
# kill -9 PID
33
af://n668
af://n673
af://n676
# 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:
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:
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:
Podemos evitar alguns sinais, menos o sigkill (-9). Para não permitir por exemplo o SIGHUP(1), podemos usar
o comando:
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 
# firefox &
[1] 55335
# jobs -l
# bg 2
# fg 2
# nohup firefox &
34
af://n683
af://n696
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 
35
af://n707
af://n720
af://n723
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 
36
af://n740
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 
Sempremostrará 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.
37
Expressão Regular Descrição Exemplo
^ Indica o começa da linha. ^linux
$ Indica o final da linha linux$
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: 
Conjunto de caracteres e repetições
38
af://n775
Expressão
Regular
Descrição Exemplo
[abc]
Conjunto de caractere único. Determina qualquer caractere
dentre os pertencentes a lista.
[Ll]inux = Linux, linux
[a-z] ou [0-
9]
Range de caractere único. Determina qualquer caractere
dentros os pertencentes ao range.
Versão[5-7] = Versão5,
Versão6,Versão7
[^abc] Negação do que está na lista.
Versão[ ^ 0-7 ] =
versao8,versao9
. Indica qualquer caractere único ca.o = caso,caio,ca9o
* Nenhuma ou várias ocorrências do caractere anterior.
bola*= bol, bola,
bolaaaaa
+ Uma ou várias ocorrências do caractere anterior bola*=bola, bolaaaaa
? Nenhuma ou apenas uma ocorrência do caractere anterior bola? = bol, bola
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:
39
af://n823
af://n828
af://n833
# 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:
40
af://n837
af://n847
< 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. 
 
41
af://n856
af://n866
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 maispróximas de outras letras que são comandos.
Vejamos abaixo, as teclas e suas funções:
42
af://n874
af://n882
af://n886
< 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:
43
af://n893
af://n896
< 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 
 
44
af://n899
af://n902
af://n905
af://n908
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 
45
af://n914
af://n916
af://n920
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.
46
af://n924
af://n928
af://n931
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)
47
af://n943
 
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 comohdx. 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:
48
af://n960
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
49
af://n1014
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 
50
af://n1017
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:
51
# 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:
52
af://n1050
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 romfsufs 
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
53
af://n1060
http://www.kernel.org/
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.
54
af://n1088
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
 
55
af://n1088
af://n1107
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> 
56
# 
#--------------------------------------------------------------------------------------------
-------------------# 
# 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. # 
#--------------------------------------------------------------------------------------------

Continue navegando