Buscar

Apostila - Módulo 1 - Bootcamp Administrador(a) Linux

Prévia do material em texto

Fundamentos em Linux 
Douglas Rafael Silva 
 
 
 
 
2022 
 
 
 
 
2 
 
 
Fundamentos em Linux 
Douglas Rafael Silva 
© Copyright do Instituto de Gestão e Tecnologia da Informação. 
Todos os direitos reservados. 
 
 
 
 
 
3 
Sumário 
Capítulo 1. Um pouco de história, FHS e instalação do sistema .................... 6 
1.1 Um pouco de história e distribuições ................................................. 6 
1.2 Padrão de hierarquia do sistema de arquivos (FHS) ........................... 8 
1.3 Instalação VirtualBox e Putty .............................................................. 9 
1.4 Instalação do CentOS 7 ..................................................................... 13 
1.5 Instalação de pacotes .rpm ............................................................... 26 
1.6 Gerenciador de pacotes “yum” ......................................................... 27 
Capítulo 2. Comandos básicos ...................................................................... 29 
2.1 Conhecendo o shell e explorando o sistema de arquivos................. 29 
2.2 Pedindo ajuda e curingas do shell ..................................................... 30 
2.3 Gerenciando arquivos e diretórios .................................................... 32 
2.4 Leitor de texto ................................................................................... 33 
2.5 Compressão de arquivos ................................................................... 35 
2.6 Editor de texto Vi............................................................................... 36 
2.7 Variáveis de ambiente ....................................................................... 37 
2.8 Tipos de arquivos e Links .................................................................. 39 
Capítulo 3. Redirecionamentos e Filtros ...................................................... 41 
3.1 Redirecionamentos >, >>, tee e pipe ................................................ 41 
3.2 Comandos head, tail e sort ............................................................... 41 
 
 
 
 
4 
3.3 Comandos find, locate e xargs .......................................................... 42 
3.4 Comandos cut, awk, tr, sed e grep .................................................... 44 
Capítulo 4. Shell Script .................................................................................. 46 
4.1 Introdução a shell script (aspas, crase e $) ....................................... 46 
4.2 Passando parâmetros para o script................................................... 47 
4.3 Loop “for” .......................................................................................... 48 
4.3.1 Loop “for” (Parte 1) ...................................................................... 48 
4.3.2 Loop “for” (Parte 2) ...................................................................... 50 
4.4 Condicionais (if, else, elif) e o comando read ................................... 51 
4.5 Variável especial $? && e || ............................................................. 52 
4.6 Gerando logs ..................................................................................... 54 
4.7 Condicional “case” ............................................................................ 54 
4.8 Loop com “while” e ‘funções” ........................................................... 55 
Capítulo 5. Gerenciamento de processos ..................................................... 57 
5.1 PID, processo init e load average ...................................................... 57 
5.2 Comandos ps, kill, killall e pkill .......................................................... 58 
5.3 Processos em foreground, background e prioridades ...................... 59 
Capítulo 6. Comandos básicos de rede ......................................................... 61 
6.1 Verificando as interfaces e adicionando IP ....................................... 61 
6.2 Rotas .................................................................................................. 62 
 
 
 
 
5 
6.3 Fixando as configurações de rede ..................................................... 63 
6.4 Resolução de nomes ......................................................................... 64 
6.5 Verificando conexões (netstat, telnet e nc) ...................................... 65 
Capítulo 7. Gerenciamento de usuários e grupos ........................................ 66 
7.1 Gerenciamento de usuários .............................................................. 66 
7.2 Gerenciamento de grupos................................................................. 67 
Capítulo 8. Permissões de arquivos e diretórios .......................................... 69 
8.1 Definindo permissões de arquivos e diretórios ................................ 69 
8.2 Alterando os donos de arquivos ....................................................... 70 
8.3 Atributos especiais ............................................................................ 70 
Referências ........................................................................................................ 73 
 
 
 
 
 
 
 
 
 
6 
Capítulo 1. Um pouco de história, FHS e instalação do sistema 
1.1 Um pouco de história e distribuições 
Antes do surgimento do Linux, já existiam alguns sistemas operacionais 
proprietários, como o DOS e o Unix. O Unix nasceu nos anos 60 através de um projeto 
da Empresa AT&T. Seus principais programadores foram Ken Thompson e Dennis Ritchie 
(criador da linguagem C). Em meados dos anos 70, o Unix tornou-se um sistema 
efetivamente disponível no meio acadêmico, o que permitiu a sua evolução e o 
surgimento de variações. No entanto, na década seguinte, o Unix parou de compartilhar 
o código fonte com universidades. 
Então, um professor chamado Andrew S. Tanenbaum, em 1987, decidiu criar 
um sistema operacional baseado no Unix com um único propósito de ensinar. O sistema 
foi chamado de Minix. Inspirado no trabalho de Tanenbaum, um estudante universitário 
finlandês chamado Linus Torvalds desenvolveu um sistema operacional baseado no 
Minix/Unix em 1991. Linus criou uma interface de linha de comando, uma ferramenta 
para salvar dados em disco e um compilador para instalar novos programas. A ideia de 
Linus era criar um sistema operacional e compartilhar o código-fonte do sistema para 
que outros programadores contribuíssem. 
O que o Linus Torvalds criou foi o Kernel (núcleo) do Sistema, responsável por 
realizar a comunicação entre hardware e software. No entanto, a distribuição do sistema 
completo, com ferramentas e utilitários, deu-se pela junção do Kernel Linux, criado por 
Linus, com programas desenvolvidos pelo projeto chamado GNU. 
GNU é a sigla para um nome: "GNU is Not Unix” (GNU Não é Unix). É um projeto 
que Richard Stallman iniciou em 1984. O projeto GNU já desenvolvia diversos projetos 
de software livre que rodavam no Unix. A ideia inicial de Richard Stallman era fazer com 
 
 
 
 
 
 
 
7 
que o próprio GNU desenvolvesse um núcleo para o sistema operacional, mas não havia 
uma versão estável até aquele momento. Quando o Linus Torvalds lançou o Linux em 
1991, ele foi incorporado aos programas do projeto GNU e distribuído com a licença GPL 
(GNU General Public License), criada em 1989 com Richard Stallman como principal 
autor. Diante disso, muitos dizem que o correto seria chamarmos o sistema de 
GNU/Linux, e não somente Linux. 
A GPL tem como principal foco o software livre, que consiste em 4 liberdades 
essenciais: a liberdade de executar o software como quiser para qualquer objetivo, a 
liberdade de estudar como funciona o software e modificá-lo conforme sua necessidade 
e a liberdade de redistribuir e distribuir cópias de suas versões modificadas. 
Devido a essa liberdade, temos tantas versões diferentes do GNU/Linux, que 
chamamos de distribuições. Distribuições contêmo Kernel mais os aplicativos mantidos 
por uma empresa ou comunidade. Existem distribuições com foco em atender usuário 
final, servidores web, executar containers, segurança etc. No entanto, apesar das 
diferenças entre distribuições para diversos objetivos, possuem características comuns, 
que mantêm um padrão entre elas. Dessa forma, aprendendo administrar o sistema 
como um todo, fica mais fácil migrar entre distribuições. O principal projeto para o 
esforço em manter certos padrões é o Linux Standard Base (LSB). 
Figura 1 – TUX 
 
Fonte: Mascote oficial do kernel Linux – Imagens Google 
 
 
 
 
 
 
 
8 
1.2 Padrão de hierarquia do sistema de arquivos (FHS) 
Os arquivos no Linux são organizados em uma estrutura de diretórios 
hierárquica, em que cada diretório tem um propósito. O FHS (Filesystem Hierarchy 
Standard) é o padrão que define o conteúdo desses diretórios. Foram listados abaixo os 
principais diretórios com seus respectivos objetivos: 
▪ / → Raiz de toda a hierarquia do sistema de arquivos. 
▪ /boot → Arquivos utilizados para boot do sistema. 
▪ /bin → Programas essenciais para todos os usuários. 
▪ /sbin → Programas essenciais de root. 
▪ /lib → Bibliotecas para programas do /bin/ e /sbin/. 
▪ /usr → Programas não essenciais, bibliotecas e documentações. 
▪ /usr/bin → Programas não essenciais para todos os usuários. 
▪ /usr/sbin → Programas não essenciais de root. 
▪ /usr/lib → Bibliotecas para programas do /usr/bin e /usr/sbin. 
▪ /dev → Dispositivos (Exemplo: arquivos do tipo bloco – HD’s). 
▪ /var → Arquivos variáveis como filas de e-mail e logs. 
▪ /home → Diretório padrão dos usuários. 
▪ /root → Diretório home do root. 
▪ /etc → Arquivos de configuração. 
 
 
 
 
 
 
 
9 
▪ /mnt e /media → Pontos de montagem temporário. 
▪ /opt → Programas de terceiros. 
▪ /tmp → arquivos temporários. 
▪ /proc → informações de processos. 
▪ /sys → informações do sistema. 
1.3 Instalação VirtualBox e Putty 
Links das ferramentas utilizadas durante as aulas práticas. 
VirtualBox: 
▪ https://download.virtualbox.org/virtualbox/6.1.12/VirtualBox-6.1.12-139181-
Win.exe 
 
https://download.virtualbox.org/virtualbox/6.1.12/VirtualBox-6.1.12-139181-Win.exe
https://download.virtualbox.org/virtualbox/6.1.12/VirtualBox-6.1.12-139181-Win.exe
 
 
 
 
 
 
 
10 
 
 
 
 
 
 
 
 
 
11 
 
 
 
 
 
 
 
 
 
12 
 
 
 
 
 
 
 
 
 
13 
Putty: 
▪ https://the.earth.li/~sgtatham/putty/0.74/w64/putty.exe 
 
1.4 Instalação do CentOS 7 
Link para download do CentOS 7, distribuição Linux utilizada nas aulas práticas: 
‒ http://centos.itsbrasil.net/7.9.2009/isos/x86_64/CentOS-7-x86_64-
Minimal-2009.iso 
https://the.earth.li/~sgtatham/putty/0.74/w64/putty.exe
http://centos.itsbrasil.net/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso
http://centos.itsbrasil.net/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso
 
 
 
 
 
 
 
14 
 
 
 
 
 
 
 
 
 
15 
 
 
 
 
 
 
 
 
 
16 
 
 
 
 
 
 
 
 
 
17 
 
 
 
 
 
 
 
 
 
18 
 
 
 
 
 
 
 
 
 
19 
 
 
 
 
 
 
 
 
 
20 
 
 
 
 
 
 
 
 
 
21 
 
Aguarde desaparecer o ícone de exclamação dos itens “Fonte de Instalação” 
e “Seleção de Software”. 
 
 
 
 
 
 
 
 
22 
 
 
 
 
 
 
 
23 
 
 
 
 
 
 
 
 
24 
 
 
 
 
 
 
 
 
 
25 
 
 
 
 
 
 
 
 
 
26 
 
1.5 Instalação de pacotes .rpm 
Distribuições baseadas no Red Hat utilizam pacotes do tipo rpm. O comando 
rpm verifica pacotes instalados no sistema e manipula pacotes com extensão .rpm. 
A desvantagem de instalar um pacote usando o comando rpm se dá porque ele 
não resolve dependências, sendo necessário instalar todos os pacotes dependentes 
antes de instalar o pacote desejado. 
Principais comandos: 
Lista pacotes instalados no sistema: 
▪ rpm -qa 
 
 
 
 
 
 
 
27 
Informações sobre um pacote: 
▪ rpm -qi "pacote“ 
Mostra arquivos referente a um pacote instalado: 
▪ rpm -ql "pacote" 
Informa o pacote que instalou um arquivo: 
▪ rpm -qf "caminho do arquivo" 
Instala pacote rpm (não resolve dependências): 
▪ rpm -i "pacote.rpm" 
▪ -v → verbose 
▪ -r → mostra progresso da instalação 
Remove pacote: 
▪ rpm -evh "pacote" 
1.6 Gerenciador de pacotes “yum” 
O principal gerenciador de pacotes utilizado em distribuições baseadas no Red 
Hat é o Yum. Ao contrário do comando rpm, o Yum resolve dependências, facilitando a 
instalação de programas no sistema. Ele consulta repositórios pré-configurados no 
sistema para localizar os pacotes. 
Diretório de repositórios: 
▪ /etc/yum.repos.d/ 
 
 
 
 
 
 
 
28 
Principais comandos: 
Atualiza todos os pacotes da máquina: 
▪ yum update 
Procura pacotes nos repositórios: 
▪ yum search "pacote" 
Instala pacote: 
▪ yum install "pacote“ 
Parâmetro: 
▪ -y → Instala sem pedir confirmação 
Remove pacote: 
▪ yum remove "pacote" 
 
 
 
 
 
 
 
 
 
 
29 
Capítulo 2. Comandos básicos 
2.1 Conhecendo o shell e explorando o sistema de arquivos 
O shell é um interpretador de comandos. Ele faz o meio de campo entre o 
usuário e o sistema, ou seja, é uma interface para o usuário executar programas e 
interagir com o sistema. Também é um ambiente de programação (shell script) muito 
utilizado para automatizar tarefas. 
Em ambientes Desktop, além do shell, existe uma interface gráfica para 
interação. No entanto, em ambientes corporativos, na maioria dos casos, a única forma 
de interação com o sistema é através do shell para administração de servidores. Existem 
alguns tipos de shell, porém o mais utilizado atualmente é o “BASH”. 
Acessando os diretórios: 
▪ Exemplos: 
‒ cd /var → usando caminho absoluto 
‒ cd log → usando caminho relativo 
‒ cd /var/log → caminho absoluto 
O caminho absoluto sempre vai começar com o “/”. Ou seja, é o caminho 
completo de um arquivo ou diretório. O caminho relativo depende do diretório atual. 
Informa o diretório atual: 
▪ pwd. 
‒ . → representa o diretório atual 
‒ .. → representa um diretório anterior 
 
 
 
 
 
 
 
30 
Acessando um diretório anterior: cd 
O diretório /home por padrão armazena os diretórios dos usuários. 
▪ Exemplo: /home/douglas 
‒ ~ representa o home do usuário. 
‒ cd ~/Downloads é igual a cd /home/douglas/Downloads 
‒ cd sem informar qualquer diretório retorna para o home do usuário. 
Listando arquivos: ls 
▪ Principais parâmetros do ls: 
‒ -l → lista longa, mostra mais informações sobre os arquivos 
‒ -t → organiza pela data de modificação 
‒ -r → organiza de forma reversa 
‒ -d → lista somente o diretório sem o conteúdo do mesmo. 
‒ -a → lista arquivos ocultos 
No Linux, arquivos ocultos são iniciados com “.” 
2.2 Pedindo ajuda e curingas do shell 
Dicas: 
▪ Sempre que aprender um novo comando, explore sua documentação utilizando 
os comandos man e help; 
‒ man ls 
 
 
 
 
 
 
 
31 
‒ ls --help 
▪ Acostume-se a utilizar atalhos do shell e o Tab para acelerar a digitação dos 
comandos. 
▪ Tab auto completa comandos e caminhos dos arquivos/diretórios. 
Atalhos mais usados: 
▪ Ctrl+L → limpa a tela (igual ao comando clear) 
▪ Ctrl+R → realiza busca no histórico de comandos (history) 
▪ Ctrl+U → recorta a linha inteira 
▪ Ctrl+W → recorta a palavra à esquerda 
▪ Ctrl+K → recorta do cursor até o fim da linha 
▪ Ctrl+Y → cola o trecho recortado 
Curingas do shell: 
▪ * → qualquer coisa 
▪ ? → um caractere qualquer 
▪ [ ] → qualquer um dos caracteres listados ou um intervalo 
▪ { } → strings específicas separadas por “,” 
Os curingas do shell podem ser utilizados para qualquer comando. 
Alguns exemplos usando o ls: 
 
 
 
 
 
 
 
32 
▪ ls -l /dev/sda* 
▪ ls -l /dev/sd? 
▪ ls -l /dev/sda[13] 
▪ ls -l /dev/sd{a,a5} 
2.3 Gerenciando arquivos e diretórios 
Cria diretório: 
▪ mkdir [caminho absoluto ou relativo] 
Cria árvore de diretórios: 
▪ mkdir -p /diretorio1/dir2/dir3 
▪ tree /diretorio => visualiza toda a àrvore de diretório 
Cria um arquivo vazio: 
▪ toucharquivo.txt 
Copia arquivos: 
▪ cp [arquivo origem] [destino do arquivo] 
Parâmetros: 
▪ -i → interativo, pede uma confirmação antes de sobrescrever. 
▪ -r → cópia recursiva. 
▪ -p → preserva atributos (data de modificação, permissões etc.). 
 
 
 
 
 
 
 
33 
▪ -a → cópia recursiva e preserva permissões do arquivo. 
Move e/ou renomeia arquivos: 
▪ mv [arquivo ou diretório de origem] [destino]. 
▪ Origem e destino no mesmo diretório o arquivo é renomeado. 
Parâmetros: 
▪ -i → interativo, pede uma confirmação antes de sobrescrever um arquivo. 
▪ -f → força sobrescrever o arquivo de destino. 
Remove arquivos e diretórios: 
▪ rm arquivo.txt 
Parâmetros: 
▪ -i → interativo, pede uma confirmação antes de remover. 
▪ -f → força remoção do arquivo. 
▪ -r → remove diretório de forma recursiva. 
Remove diretório vazio: 
▪ rmdir [diretório] 
2.4 Leitor de texto 
Concatena arquivos e imprime na saída padrão: 
▪ cat arquivo1 arquivo2 
 
 
 
 
 
 
 
34 
Informando somente um arquivo, é impresso na tela: 
▪ cat [arquivo1] 
Alguns parâmetros: 
▪ -n → enumera todas as linhas. 
▪ -b → enumera as linhas, exceto linhas em branco (igual o comando nl). 
Lê um arquivo de texto de forma paginada: 
▪ less [arquivo] 
Opção de busca: 
▪ / → realiza buscas dentro do arquivo. 
▪ n → mostra a próxima busca encontrada. 
▪ N → retorna busca anterior encontrada. 
▪ q → para sair. 
Mostra quantidade de linhas, palavras e bytes de um arquivo: 
▪ wc [arquivo] 
Parâmetro: 
▪ -l → quantidade de linhas. 
▪ -w → quantidade de palavras. 
▪ -c → quantidade de bytes. 
 
 
 
 
 
 
 
35 
2.5 Compressão de arquivos 
Empacota arquivos: 
▪ tar cvf arquivo.tar arquivo1 arquivo2 
Primeiro o nome do arquivo que será criado e, na sequência, os arquivos a 
serem empacotados. 
Mostra os arquivos: 
▪ tar tvf arquivo.tar. 
▪ c => cria. 
▪ t => lista. 
▪ v => verbose. 
▪ f => define o nome do arquivo. 
Compactar arquivos com gzip: 
▪ gzip arquivo.tar 
Descompactar arquivo gzip: 
▪ gunzip arquivo.tar.gz 
Ou 
▪ gzip -d arquivo.tar.gz 
Podemos unir o recurso do tar com gzip para compactar e descompactar. 
Compacta: 
 
 
 
 
 
 
 
36 
▪ tar zcvf arquivo.tar.gz arquivo1 arquivo2 
Descompacta: 
▪ tar zxvf arquivo.tar.gz (extrai no diretório corrente). 
▪ tar zxvf arquivo.tar.gz -C /home ( -C define o diretório de destino). 
▪ z → invoca o gzip. 
▪ x → extrai. 
Comandos úteis para ler arquivos compactados sem precisar extrair: “zcat” e 
“zgrep” 
2.6 Editor de texto Vi 
Acessa um arquivo para edição: 
▪ vi [caminho_nome-arquivo]. 
▪ i → entra no modo de inserção (“o” modo de inserção na próxima linha). 
▪ Esc → entra no modo de navegação. 
▪ Esc : → entra no modo de comandos. 
Alguns comandos: 
▪ :w → salva o arquivo 
▪ :q → sai do arquivo sem salvar 
▪ :wq → sai do arquivo salvando ou :x 
 
 
 
 
 
 
 
37 
Mais alguns comandos úteis: 
▪ :%s/string_velha/nova_string => substitui string. 
▪ :5,10 s/string_velha/nova_string => substitui string. 
Opções para o modo de navegação: 
▪ / → busca (n próxima | N anterior). 
▪ gg → move o cursor para primeira linha. 
▪ G → move o cursor para última linha. 
▪ yy → copia a linha. 
▪ cc → recorta a linha. 
▪ p → cola a linha. 
▪ dd → apaga a linha. 
▪ u → desfazer. 
2.7 Variáveis de ambiente 
Assim como qualquer outra linguagem de programação, o shell também se 
utiliza de variáveis para armazenar dados em memória. Podemos aproveitar essas 
variáveis do shell ou criar novas para serem utilizadas em um script, por exemplo. 
Existem as variáveis locais e globais. As locais não são vistas por processos filhos do bash. 
Lista todas as variáveis: 
▪ set 
 
 
 
 
 
 
 
38 
Lista somente variáveis globais (exportadas): 
▪ env 
Define uma variável local: 
▪ NOMEVAR=Valor 
Define uma variável global: 
▪ NOMEVAR=Valor 
▪ export NOMEVAR 
Ou 
▪ export NOMEVAR=Valor 
Remove variável: 
▪ unset NOMEVAR 
Imprime uma mensagem e/ou valor de uma variável: 
▪ echo Fundamentos de Linux - IGTI 
▪ echo $ NOMEVAR 
▪ echo $HISTFILE 
O shell possui comandos internos, como, por exemplo, o “echo”, e utiliza a 
variável de ambiente PATH para localizar o caminho absoluto dos comandos externos. 
Verifica se um comando é interno do shell ou externo: 
 
 
 
 
 
 
 
39 
▪ type echo 
Verifica o caminho absoluto de um comando, utiliza a variável PATH: 
▪ which cp 
Mostra informações do sistema: 
▪ uname -a 
2.8 Tipos de arquivos e Links 
O comando “file” informa o tipo do arquivo: 
Comandos de exemplo em arquivos de tipos diferentes: 
▪ file / 
▪ file /dev/sda 
▪ file /etc/passwd 
Mostra mais detalhes sobre o arquivo: 
▪ stat /etc/passwd 
O Linux não trabalha com conceito de extensão de arquivo. Você pode usar 
uma extensão para facilitar a identificação do arquivo, mas, para o Linux, não faz 
nenhuma diferença. 
Hardlink são arquivos espelhados (mesmo inode), porém independentes. 
Comando “ln” cria um hardlink: 
▪ ln [arquivo] [link] 
 
 
 
 
 
 
 
40 
Link simbólico é um atalho. 
Parâmetro -s cria um link simbólico: 
▪ ln -s [arquivo] [link] 
 
 
 
 
 
 
 
41 
Capítulo 3. Redirecionamentos e Filtros 
3.1 Redirecionamentos >, >>, tee e pipe 
▪ > → redireciona a saída de um comando substituindo o conteúdo do arquivo. 
▪ >> → redireciona a saída de um comando adicionando o conteúdo ao final do 
arquivo. 
▪ 2> → redireciona a saída de erro de um comando substituindo o conteúdo do 
arquivo. 
▪ 2>> → redireciona a saída de erro de um comando adicionando o conteúdo ao 
final do arquivo. 
▪ 2>&1 → redireciona a saída de erro para a mesma saída padrão. 
▪ | → envia a saída de um comando para entrada de outro. 
Comando “tee” redireciona a saída padrão para um arquivo e imprime na 
tela: 
▪ Exemplo de concatenação de dois arquivos enviando a saída padrão para 
arquivo3 usando o comando “tee”: 
‒ cat arquivo1 arquivo2 | tee arquivo3 
3.2 Comandos head, tail e sort 
Mostra as 10 primeiras linhas de um arquivo: 
▪ head [arquivo] 
Parâmetro: 
 
 
 
 
 
 
 
42 
▪ n → define a quantidade de linhas para mostrar 
Mostra as 10 últimas linhas de um arquivo: 
▪ tail [arquivo] 
Parâmetro: 
▪ n → define a quantidade de linhas para mostrar. 
▪ f → fica aguardando novas saídas no arquivo. 
3.3 Comandos find, locate e xargs 
Ordena linhas de um arquivo (padrão ordenar por ordem alfabética): 
▪ sort [arquivo] 
Parâmetro: 
▪ -u → remove linhas repetidas (igual ao comando uniq). 
Verifica o uso de espaço em disco de arquivos e diretórios: 
▪ du -sh [arquivo ou diretório] 
Comando muito útil para identificar diretórios com maior consume de disco: 
▪ du -sh /home/* | sort -h 
Procura arquivos baseados pelo nome: 
▪ find /etc -name services 
▪ find /etc -name *.conf 
 
 
 
 
 
 
 
43 
▪ find [diretório] [opção] [busca] 
Procura arquivos baseados pelo tipo: 
▪ find /etc -type d (diretório) 
▪ find /etc -type l (link simbólico) 
Procura arquivos baseados pelo tamanho: 
▪ find /etc -size +100k 
-exec => executa uma ação baseado na saída do find: 
▪ find /etc -size +100k -exec du -sh {} \; 
No exemplo acima, após localizar arquivos maiores que 100k, foi executado o 
comando du -sh em cada saída do find. 
Faz busca por arquivos baseado no nome: 
▪ locate arquivo.txt (precisa do pacote mlocate). 
▪ updatedb (antes de realizar a busca, execute o comando updatedb para atualizar 
a base de dados que o locate consulta). 
▪ whereis cp (procura baseado no primeiro nome). 
xargs → executa comandos baseados na saída padrão: 
▪ find /etc -size +100k | xargs ls -l 
▪ mkdir ~/backup ; find /etc -size +100k | xargs -i cp {} ~/backup 
 
 
 
 
 
 
 
 
44 
3.4 Comandos cut, awk, tr, sed e grep 
Corta partes de um texto: 
cut -c1,2 /etc/passwd (c = caracter) 
cut -c1-5 /etc/passwd 
cut -d: -f1 /etc/passwd (d = delimitador e f = campo (field) ) 
cut -d: -f1,2 --output-delimiter="|" /etc/passwd 
 
awk '{print$1}' /etc/services 
awk -F: '{print$1" | " $6}' /etc/passwd 
ls /etc/*.conf | head -n3 | awk '{print "echo 3 primeiros arquivos 
encontrados: " $1}' 
 
Troca caracteres ou deleta: 
▪ cat /etc/passwd | tr [:lower:] [:upper:] 
▪ cat /etc/passwd | tr -d [:space:] 
Realiza filtros e transformações em arquivos: 
▪ sed -i s/velho/novo/ arquivo.txt => substitui string “velho” para “novo”. 
▪ sed -n 5p arquivo.txt => imprime a linha 5 de um arquivo. 
▪ sed -n 50,70p arquivo.txt => Imprime um bloco, linha 50 a 70. 
▪ sed /string/d arquivo.txt => Deleta a linha que contém uma string específica. 
Mostra linhas filtradas por um padrão: 
▪ grep root /etc/passwd 
 
 
 
 
 
 
 
45 
Parâmetros: 
▪ -i → desconsidera o case sensitive. 
▪ -r → busca de forma recursiva. 
▪ -w → resultado somente com a palavra completa. 
▪ -v → resultado exceto o que encontrar. 
O grep e o sed são comandos que aceitam expressões regulares. Um exemplo 
do grep para remover linhas em branco (quebra de linha) e comentadas: 
▪ grep -v -E ‘^#|^$’ /etc/services → grep -E = egrep 
 
 
 
 
 
 
 
46 
Capítulo 4. Shell Script 
4.1 Introdução a shell script (aspas, crase e $) 
Por convenção shell, scripts são nomeados com .sh. 
Exemplo: 
▪ script.sh 
A primeira linha do arquivo deve conter um shebang “#!” seguido do 
interpretador de comandos que será utilizado no script: 
Exemplo: 
▪ #!/bin/bash 
▪ ; → utilizado para executar comandos sequenciais. 
▪ ` ` e $() → comandos dentro de crase e $() são executados e retornam a saída do 
comando. 
A saída de um comando pode ser armazenada em uma variável. 
Exemplo: USUARIOS=$(ls /home) ; echo $USUARIOS 
▪ \ → protege o caractere seguinte. 
Exemplos: 
▪ echo * 
▪ echo \* 
Diferença entre aspas simples e duplas: 
 
 
 
 
 
 
 
47 
▪ echo “$PATH” 
▪ echo ‘PATH’ 
▪ echo “`pwd`” 
▪ echo ‘`pwd`’ 
Aspas duplas protege os caracteres: $ ` 
4.2 Passando parâmetros para o script 
Passando parâmetros para o script: 
O script interpreta parâmetros como $ mais um número de acordo com a 
sequência passada. 
Exemplo: Ao executar o script: ~/script.sh /backup/logs 7 
▪ $1 = /backup/logs 
▪ $2 = 7 
Uma forma debugar o que está sendo feito em um script é executá-lo usando 
o parâmetro -x do bash. 
▪ bash -x script.sh → debug 
Script de exemplo utilizando passagem de parâmetros: 
 
 
 
 
 
 
 
48 
#!/bin/bash 
DIRETORIO=$1 
DIAS_RETENCAO=$2 
 
echo Realizando limpeza dos logs do diretório: $DIRETORIO 
echo Deletando Logs dos últimos $DIAS_RETENCAO dias. 
 
find $DIRETORIO -mtime +7 -exec rm {} \; 
 
Execução: 
▪ ./script.sh /backup/logs 7 
4.3 Loop “for” 
4.3.1 Loop “for” (Parte 1) 
O “for” é utilizado para executar tarefas repetitivas (loop). 
Sintaxe: 
for VARIAVEL in LISTA → pode ser saída de um comando ` ` ou $() 
do 
 “comandos” 
done 
 
For é muito útil no dia a dia, não somente dentro de um script. 
Exemplo: for servers in `cat servidores` ; do echo $servers ; curl 
https://servers:443 ; echo ; done 
 
 
 
 
 
 
 
49 
Para cada servidor listado no arquivo “servidores”, será armazenado o valor de 
cada um na variável “servers”, e, em seguida, serão executados os comandos que 
estiverem dentro de “do” e “done”. Nesse caso: echo $servers ; curl https://servers:443 
; echo 
Se, dentro do arquivo servidores, estiver: 
▪ servidor1 
▪ servidor2 
Será executado: 
echo servidor1 ; curl https:// servidor1:443 ; echo 
echo servidor2; curl https:// servidor2:443 ; echo 
Script de exemplo: 
#!/bin/bash 
for LISTA_USUARIOS in $(cat /etc/passwd | tr -d [:blank:]) 
do 
echo $LISTA_USUARIOS 
USUARIO=$(echo $LISTA_USUARIOS | cut -d: -f1) 
HOME_USUARIO=$(echo "$LISTA_USUARIOS" | cut -d: -f6) 
SHELL_USUARIO=$(echo "$LISTA_USUARIOS" | cut -d: -f7) 
echo 
echo -e "\n ===== $USUARIO ===== " 
echo "HOME: $HOME_USUARIO" 
echo "SHELL: $SHELL_USUARIO" 
echo " ==================== " 
done 
 
 
 
 
 
 
 
 
50 
4.3.2 Loop “for” (Parte 2) 
O comando “seq” é útil para definir uma quantidade exata de loops para 
qualquer fim. 
Exemplo: 
#!/bin/bash 
for num in `seq 10` 
do 
echo 
echo "Realizando teste de conexao... Tentativa $num" 
sleep 3 
done 
For dentro de For: 
#!/bin/bash 
 
for EMP in `cat empresas` ; do 
for DEP in `cat departamento` ; do 
mkdir -p ~/backups/$EMP/$DEP 
done 
done 
 
Para cada linha dentro do arquivo empresas, o valor é armazenado na variável 
EMP e será executado o segundo “for”, lendo o arquivo departamento e armazenando 
cada linha na variável DEP. 
Exemplo: 
Arquivo empresas 
 
 
 
 
 
 
 
51 
Empresa1 
Empresa2 
 
Arquivo departamento 
Juridico 
Financeiro 
TI 
 
Será executado: 
mkdir -p ~/backups/Empresa1/Juridico 
mkdir -p ~/backups/Empresa1/ Financeiro 
mkdir -p ~/backups/Empresa1/TI 
 
mkdir -p ~/backups/Empresa2/Juridico 
mkdir -p ~/backups/Empresa2/ Financeiro 
mkdir -p ~/backups/Empresa2/TI 
4.4 Condicionais (if, else, elif) e o comando read 
Condicionais (if, else, elif) e o comando read 
O comando read aguarda a entrada de dados do usuário e armazena os dados 
em uma variável. As condicionais if (se), else (senão) e elif (senão se) são utilizadas para 
tomada de decisão baseado se a condição testada for verdadeira. 
Script de exemplo usando read e uma estrutura de if, else e elif: 
#!/bin/bash 
 
echo "Verifica se um usuário existe" 
read -p "Informe o nome do usuário: " usuario 
 
 
 
 
 
 
 
52 
 
USUARIO=$(cut –d: -f1 /etc/passwd | grep -i $usuario) 
HOME=“/home/$(echo $usuário | tr [:upper:] [:lower:])” 
 
if [[ -n $USUARIO ]] 
then 
echo "Usuario $usuario existe!" 
elif [[ -d $HOME ]] 
then 
echo "Usuario nao existe mas possue um home" 
echo "Deletando o diretorio home..." ; sleep 2 
rm -riv $HOME 
else 
echo "Usuario $usuario NAO existe!" 
fi 
4.5 Variável especial $? && e || 
Variável especial $? 
A variável $? armazena o código de saída do último comando executado. Alguns 
exemplos de código de saída: 
▪ 0 - executado com sucesso 
▪ 1 - erros comuns 
▪ 127 - comando não encontrado 
Sempre que o último comando tiver sucesso na execução a saída será “0”. 
Portanto, a variável $? é utilizada para realizar validações no script, usando a condicional 
if. 
 
 
 
 
 
 
 
53 
Se a saída do último comando for 0, significa que foi executado com sucesso; 
caso contrário, ocorreu alguma falha. 
echo "Criando um diretório..." ; echo 
read -p "Informe um caminho absoluto: " DIR 
echo "Criando o diretório $DIR..." ; sleep 2 
mkdir $DIR 
 
if [[ $? -eq 0 ]] 
then 
echo "Diretório criado com sucesso" 
else 
echo "Falha ao criar o diretório" 
fi 
 
Outra maneira de checar o código de retorno do último comando e executar 
uma ação é utilizando && e ||: 
▪ && → Somente executa o segundo comando se o primeiro foi executado com 
sucesso. 
|| → Somente executa o segundo comando se o primeiro não foi executado 
com sucesso. 
 
 #!/bin/bash 
echo "Criando um diretório..." ; echo 
read -p "Informe um caminho absoluto: " DIR 
echo "Criando o diretório $DIR..." ; sleep 2 
mkdir $DIR && echo "Diretório criado com sucesso" || echo "Falha ao criar o 
diretório" 
 
 
 
 
 
 
 
54 
4.6 Gerando logs 
É muito importante gerar logs em todo programa, e, com o shell script, não é 
diferente. Para isso, basta utilizar os redirecionadores, > e >> para saída padrão e 2> e 
2>> para saídas de erros. 
#!/bin/bash 
echo "======= `date "+%d/%m/%Y %H:%M"` ======" >> log.info 
echo "Criando um diretório..." ; echo 
read -p "Informe um caminho absoluto: " DIR 
echo "Criando o diretório $DIR..." >> log.info ; sleep 2 
mkdir $DIR 2>> log.info 
if [[ $? -eq 0 ]] ; then 
echo "Diretório $DIR criado com sucesso" >> log.info 
fi 
echo ============================= >> log.info 
4.7 Condicional “case” 
Uma outra forma de construir uma estrutura condicional é utilizando a 
estrutura do case. Cada opção passada é como se fosse if, elif e, por último, o asterisco 
(*) representa o senão. 
#!/bin/bash 
 
read -p "Informeo nome do usuario: " usuario 
echo "Consultando a base de usuários..." 
cut -d: -f1 /etc/passwd | grep -i $usuario 
if [[ $? -ne 0 ]] ; then 
echo "usuario $usuario nao existe" 
fi 
 
read -p "Deseja realizar uma nova busca? [ s/n ]" opcao 
case $opcao in 
s) $0 ;; 
 
 
 
 
 
 
 
55 
n) echo “Saindo…” ; exit ;; 
*) echo “opcao invalida” ;; 
esac 
4.8 Loop com “while” e ‘funções” 
O while (enquanto) é uma outra maneira de realizar loops, assim como o “for”. 
Porém, o while é usado nos casos em que a quantidade de repetições (loop) depende 
de uma ação do usuário ou do retorno de um comando, por exemplo. While é a junção 
do if com o for: é feita uma verificação antes de realizar um comando, e esse comando 
é repetido enquanto a verificação for verdadeira. 
#!/bin/bash 
 
echo “Procura arquivos .conf..." 
 
if [[ -z $1 ]] ; then 
while [[ -z $diretorio ]] ; do 
read -p "Parametro nao informado. Informe um diretorio para consulta: " diretorio 
find $diretorio -iname "*.conf" 
done 
else 
find $1 -iname "*.conf" 
fi 
 
As funções são utilizadas para simplificar um programa, pois evitam repetições 
do código. Uma função é escrita uma vez e sempre que for necessário executar uma 
sequência de comandos específica, basta chamar a função para ser executada. 
Função 
Sintaxe: 
 
 
 
 
 
 
 
56 
function NOME_FUNCAO () { 
comandos 
} 
 
NOME_FUNCAO () { 
comandos 
} 
 
busca_conf () { 
find $1 -iname "*.conf" 
} 
 
if [[ -z $1 ]] ; then 
while [[ -z $diretorio ]] ; do 
read -p "Parametro nao informado. Informe um diretorio para consulta: " diretorio 
busca_conf $diretorio 
done 
else 
busca_conf $1 
fi 
 
 
 
 
 
 
 
57 
Capítulo 5. Gerenciamento de processos 
5.1 PID, processo init e load average 
Todos os processos do sistema possuem um identificador único => PID e 
possuem um processo pai => PPID. 
O primeiro processo executado no sistema, e pai de todos os outros, é o 
processo init (systemd) de PID = 1. 
Lista processos em forma de árvore: pstree 
▪ -p → mostra ID do processo. 
Monitora todos os processos do sistema: top. 
Opção útil: 
▪ 1 → mostra o consumo de cada processador. 
▪ q → para sair. 
Load average valor normal é relativo para cada máquina. 
Mostra 1, 5 e 15 últimos minutos. 
▪ Shift+M => ordena por consumo de memória. 
▪ Shift+C => ordena por consumo de cpu. 
Mostra o tempo que o servidor está ligado → uptime. 
Mostra o uso de memória → free -m. 
Busca processo por nome: 
 
 
 
 
 
 
 
58 
▪ pidof “nome exato do processo” 
▪ pgrep “parte do nome do processo” 
5.2 Comandos ps, kill, killall e pkill 
Processos em execução do usuário no terminal corrente: ps. 
▪ -u → mostra mais informações relacionadas a usuário. 
▪ -x → mostra processos que não foram iniciados diretamente em seu terminal. 
▪ -a → mostra os processos de todos os usuários. 
Envia sinais para processos: kill. 
▪ kill -l → lista todos os sinais. 
Quando executamos Crtl+C estamos enviando o sinal 2) SIGINT (interrupção). 
▪ 15) SIGTERM => termina processo. 
▪ 9) SIGKILL => termina processo de forma abrupta. 
Duas maneiras de enviar sinais para os processos: 
▪ kill -s SIGTERM “PID_PROCESSO” 
▪ kill -15 “PID_PROCESSO” 
Mata processo por nome: 
▪ killall “nome exato do processo” 
▪ pkill “parte do nome do processo” 
 
 
 
 
 
 
 
59 
5.3 Processos em foreground, background e prioridades 
Foreground (fg) e Background (bg): 
▪ fg → prende o terminal. 
▪ bg → libera o terminal para execução de comandos. 
Lista jobs com seu id (processos em Background): jobs. 
Executa um comando enviando para background: 
▪ [ Comando ] & 
Retorna um comando para Foreground: 
▪ fg “id do job” 
▪ Crtl+Z => envia um sinal de stop para o processo. 
Envia processos nos jobs para background: 
▪ bg "id do job“ 
Mata o processo pelo id do job: 
▪ kill %"id do job" 
Prioridades dos processos: 
▪ PR → Prioridade ( 0 até 39 ) 
▪ NI → Nice ( -20 até +19 ) 
▪ nice -n -20 “comando" 
 
 
 
 
 
 
 
60 
▪ nice -n 15 “comando“ 
▪ renice -n -8 “pid" 
▪ renice -n 8 “pid" 
 
 
 
 
 
 
 
61 
Capítulo 6. Comandos básicos de rede 
6.1 Verificando as interfaces e adicionando IP 
Pacotes para gerenciamento de rede: 
▪ net-tools (descontinuado): 
Comandos → ifconfig e route 
▪ iproute: 
Comando → ip 
Lista as interfaces: 
▪ ip address show 
▪ ifconfig 
Baixa interfaces: 
▪ ip link set "interface" down 
▪ ifconfig "interface" down 
Sobe interfaces: 
▪ ip link set "interface" up 
▪ ifconfig "interface" up 
Define um IP: 
▪ ip addr add "IP/MASK" dev "interface" 
 
 
 
 
 
 
 
62 
▪ ifconfig "interface" "IP" netmask "mascara“ 
Deleta um IP de uma interface: 
▪ ip addr del "IP/MASK" dev "interface“ 
▪ ifconfig "interface" delete "IP" 
Define novos IP's em uma interface: 
▪ ip addr add "IP/MASK" dev "interface" 
▪ ifconfig "interface":"num" "IP" netmask "mascara" 
6.2 Rotas 
Lista as rotas: 
▪ ip route show 
▪ route 
Deleta rota default: 
▪ ip route del default 
▪ route del default 
Cria rota default: 
▪ ip route add default via "IP“ 
▪ route add default gw "IP" 
Adiciona rota: 
 
 
 
 
 
 
 
63 
▪ ip route add "rede/mask" via "IP" dev "interface“ 
▪ route add -net "REDE" gw "IP" 
Deleta rota: 
▪ ip route del "rede/mask" via "IP" dev "interface“ 
▪ route del -net "REDE" gw "IP" 
6.3 Fixando as configurações de rede 
Configurando IP e Máscara: 
▪ /etc/sysconfig/network-scripts/ifcfg-xxx 
▪ IPADDR=192.168.1.10 
▪ NETMASK=255.255.255.0 
Reinicia as interfaces de rede: 
▪ systemctl restart network 
Fixar rota default: 
▪ /etc/sysconfig/network 
▪ GATEWAY=192.168.1.1 
Fixar rota: 
▪ /etc/sysconfig/network-scripts/route-xxx 
▪ 192.168.2.0/24 via 192.168.2.1 dev enp0xx 
 
 
 
 
 
 
 
64 
6.4 Resolução de nomes 
Configuração dos servidores de DNS: 
▪ /etc/resolv.conf 
▪ nameserver => aponta o servidor de DNS 
 
Resolução de Nomes: 
▪ /etc/hosts 
▪ Apontamento de IP -> nome (por padrão, é consultado antes do DNS) 
Precedência da resolução de nomes é configurada no arquivo: 
▪ /etc/nsswitch.conf 
Comandos úteis: pacote bind-utils. 
Resolução de nomes e dns reverso: 
▪ host [endereco] 
▪ dig [endereco] 
▪ nslookup [endereco] 
Verifica conectividade: 
▪ ping [endereco] 
▪ -c => define a quantidade de pacotes 
 
 
 
 
 
 
 
65 
6.5 Verificando conexões (netstat, telnet e nc) 
Conexões – netstat, telnet e nc. 
Mostra conexões ativas: 
▪ netstat 
Parâmetros: 
▪ -n → não resolve nome 
▪ -a → todas as conexões (all) 
▪ -t → tcp 
▪ -u → udp 
▪ -p → pid do processo 
Testa conexões: 
▪ telnet [endereco] 
▪ nc –v [endereco] 
Abre uma porta no servidor (útil para testar conectividade com alguma 
porta): 
▪ nc -l -p “Porta” 
 
 
 
 
 
 
 
 
66 
Capítulo 7. Gerenciamento de usuários e grupos 
7.1 Gerenciamento de usuários 
Usuários são armazenados no arquivo /etc/passwd. 
7 campos separados por “:”. 
▪ Nome: Senha: UID: GID: Descrição: Home: Shell 
O Campo “Senha” com x indica que as senhas estão armazenadas no arquivo: 
/etc/shadow. 
Criar usuário: 
▪ useradd "nome do usuario" 
Opções: 
▪ -s → shell 
▪ -c → comentário 
▪ -m → solicita a criação de um home 
▪ -d → home 
▪ -g → grupo primário 
▪ -G → grupo secundário 
Definir senha do usuário: 
▪ passwd "usuario" 
 
 
 
 
 
 
 
67 
Remove usuário: 
▪ userdel "nome do usuario" 
Opção: 
▪ -r → remove o home do usuário 
Modifica usuário: 
▪ usermod "opcoes" "nome do usuario“ (Mesmas opções do useradd). 
7.2 Gerenciamento de grupos 
Grupos são armazenados no arquivo /etc/group. 
4 campos separados por “:”. 
▪ Grupo: Senha: ID: Usuários 
O Campo “Senha” com x indica que as senhas estão armazenadas no arquivo: 
/etc/gshadow. 
Criar grupo: 
▪ groupadd "nome grupo" 
Altera o grupo primário de um usuário: 
▪ usermod -g "grupo" "usuario" 
Altera o grupo secundário de um usuário: 
▪ usermod -G "grupo" "usuario" 
Adiciona usuário em um grupo: 
 
 
 
 
 
 
 
68▪ usermod -a -G "grupo" "usuario" 
Mostra o UID e todos GID que usuário pertence: 
▪ id "usuario" 
Mostra os grupos de um usuário: 
▪ groups "usuario" 
▪ getent pode ser usado para consultar /etc/passwd e /etc/group 
▪ getent passwd "usuario" 
▪ getent group "grupo" 
 
 
 
 
 
 
 
 
69 
Capítulo 8. Permissões de arquivos e diretórios 
8.1 Definindo permissões de arquivos e diretórios 
- r w - r - - r - - root root 
Usuário Dono → Grupo Dono → Outros 
O primeiro caractere representa o tipo do arquivo e os demais conforme as 
cores. 
▪ r = leitura (read) 
▪ w = escrita (write) 
▪ x = execução (execute) 
▪ Arquivo → ler (r), escrever (w) e executar (x) 
▪ Diretório → listar (r) criar e remover (w) e acessar (x) 
▪ u → usuário g → grupo o → outros a → todos 
▪ = -> define 
▪ + -> adiciona 
▪ - -> remove 
Modificar permissões: 
▪ chmod u=rw,g=rw,o=r arquivo.txt 
▪ chmod a=rw arquivo.txt 
 
 
 
 
 
 
 
70 
▪ r = leitura (read) → 4 
▪ w = escrita (write) → 2 
▪ x = execução (execute) → 1 
Modificar permissões de forma octal: 
▪ chmod 644 arquivo.txt 
Parâmetro: 
▪ -R => define permissões de forma recursiva 
▪ Comando stat mostra as permissões das duas formas 
8.2 Alterando os donos de arquivos 
Alterar usuário e grupo dono: 
▪ chown usuário “arquivo ou diretório”. 
▪ chown usuário:grupo “arquivo ou diretório”. 
▪ chown :grupo “arquivo ou diretório”. 
▪ chgrp grupo “arquivo ou diretório”. 
▪ -R → altera de forma recursiva. 
8.3 Atributos especiais 
Atributos especiais: 
▪ SUID → utiliza a permissão do usuário dono. 
 
 
 
 
 
 
 
71 
▪ SGID → cria arquivos e diretórios herdando o mesmo grupo dono. 
▪ Stick → somente quem criou um arquivo no diretório consegue apagar e 
renomear. 
 
r w s r – x r – x root root /bin/passwd 
 
S – sem permissão de execução 
s – com permissão de execução 
T – sem permissão de execução 
t – com permissão de execução 
 
Adicionar os atributos especiais: 
chmod u+s “arquivo” 
chmod g+s “arquivo” 
chmod o+t “arquivo” 
 
SUID → 4 
SGID → 2 
Stick → 1 
 
chmod 4644 “arquivo” 
 
umask → máscara usada para definir permissões de novos arquivos e 
diretórios 
 
umask 0022 
 
 
 
 
 
 
 
72 
 
0777 
- 0022 
-------- 
0755 → Diretório 
0644 → Arquivo 
 
 
 
 
 
 
 
 
 
 
73 
Referências 
SIQUEIRA, Luciano. Certificações LPI-1 101 102 Linux. 6. ed. [S. l.]: Alta Books, 2019. 
GUIA FOCA LINUX. Guia Foca Online Iniciantes. Página inicial. Disponível em: 
https://www.guiafoca.org/. Acesso em: 03 jan. 2022. 
 
https://www.guiafoca.org/

Continue navegando