Linux Fundamentos

Introdução

Este artigo aborda os fundamentos do Linux. Hoje existem dezenas de distribuições, versões e interfaces diferentes, mas os conceitos por trás do sistema continuam os mesmos. Para explicar esses fundamentos, vamos usar o Debian como referência; não uma versão específica, mas a base.

 

O que é Debian?

O Debian é um sistema operacional (SO) livre para o seu computador. Um sistema operacional é um conjunto de programas básicos e utilitários que fazem o seu computador funcionar. O Debian usa o kernel (núcleo de um sistema operacional) Linux, mas a maior parte das ferramentas do SO (sistema operacional) vêm do projeto GNU; daí o nome GNU/Linux.

O Debian GNU/Linux é mais que um simples SO: ele vem com diversos pacotes contendo softwares pré-compilados e distribuídos em um bom formato, que torna fácil a instalação deles na sua máquina.


O que significa GNU?

Projeto GNU, em computação, é um projeto iniciado por Richard Stallman em 1984, com o objetivo de criar um sistema operacional totalmente livre, que qualquer pessoa teria direito de usar, modificar e redistribuir o programa e seu código-fonte, desde que garantindo para todos os mesmos direitos.

Este sistema operacional GNU deveria ser compatível com o sistema operacional UNIX, porém não deveria utilizar-se do código-fonte do UNIX. Stallman escolheu o nome GNU porque este nome, além do significado original do mamífero Gnu, é um acrônimo recursivo de: GNU is Not Unix (em português: GNU não é Unix).



O que é kernel?

O kernel é o centro do sistema operacional, sendo o componente que se comunica diretamente com o hardware, com possibilidade de ser ajustado e compilado de acordo com a plataforma em questão. O kernel compila e gerencia a requisição, seja usando memória, processador ou algum periférico.



O que é Shell?

“Shell” é um interpretador de comandos (ele interpreta os comandos inseridos pelo teclado), ou seja, é o componente que faz a ligação entre o kernel e o usuário. Toda vez que o usuário digitar um comando e pressionar <enter>, a Shell interpreta os comandos e manda para o kernel.


O que é Shell Script?

Shell Script são conjuntos de comandos armazenados em um arquivo que são executados sequencialmente ou de forma condicional.



O que é Exploit?

Exploit é um programa ou código criado para explorar uma vulnerabilidade em um software ou sistema operacional.

No contexto de sistemas UNIX/Linux, o exploit geralmente precisa ser executado no mesmo ambiente e versão para os quais foi desenvolvido. Em alguns casos, ele precisa ser preparado ou compilado antes da execução.

Dependendo da falha explorada, um exploit pode permitir ações como execução de comandos ou tentativa de obtenção de privilégios elevados, como acesso ao usuário root.



O que é root?

Root é o usuário que tem poder total sobre o sistema, ou seja, ele pode criar contas, excluir usuários, criar diretórios etc.



Matrizes (Visão Histórica)

As distribuições listadas abaixo representam matrizes históricas que marcaram a evolução do Linux ao longo das últimas décadas. Elas deram origem a diversas famílias e projetos derivados, servindo como base para experimentações, inovações e para a consolidação dos sistemas que conhecemos hoje.



Famílias de Distribuições (Panorama Atual)
>>>

As distribuições listadas abaixo representam famílias ativas e amplamente utilizadas atualmente, servindo como base para a maioria dos sistemas Linux modernos.


Debian


Red Hat


SUSE


Slackware


Arch



Estrutura de Diretório

Posix (FHS) = “ / ”

POSIX (Portable Operating System Interface)

POSIX (sigla para Portable Operating System Interface, traduzido como Interface Portável entre Sistemas Operacionais) é uma família de normas definidas pelo IEEE e formalmente designada como IEEE 1003. O objetivo dessas normas é garantir que programas possam ser compilados e executados em diferentes sistemas operacionais compatíveis com POSIX, assegurando a portabilidade do código-fonte. Na prática, elas funcionam como uma interface comum entre sistemas distintos. A designação internacional da norma é ISO/IEC 9945.



FHS

O Filesystem Hierarchy Standard (padrão para sistema de arquivos hierárquico), ou FHS, é uma especificação que define a estrutura e o conteúdo dos principais diretórios em sistemas operacionais baseados em Linux e Unix. Seu objetivo é padronizar a organização do sistema de arquivos, garantindo consistência entre diferentes distribuições e facilitando o desenvolvimento de aplicações e a administração do sistema.



Conjunto de Regras

Tudo que pertence ao sistema fica abaixo da raiz, com os principais diretórios:

  • /root – Diretório pessoal do usuário root
  • /home – Diretório dos usuários
  • /etc – Contém os arquivos de configuração
  • /boot – Arquivos de boot + Imagens do kernel
  • /bin – Comandos essenciais do sistema
  • /sbin – Comandos administrativos do sistema
  • /lib – Bibliotecas do sistema
  • /usr – Programas e recursos do sistema
  • /tmp – Arquivos temporários
  • /var – Dados variáveis (ex: e-mails, impressão, caches, logs etc.)
  • /dev – Dispositivos do sistema (representação do ambiente físico)
  • /mnt – Pontos de montagem
  • /proc – Diretório virtual do kernel (representa o estado do kernel em tempo de execução)
  • /opt – Softwares opcionais / terceiros
  • /srv – Dados de serviços (Web, FTP etc.)



No Linux existem vários terminais virtuais chamados TTYs (tty1, tty2, tty3...).

Podemos alternar entre eles usando as teclas: Ctrl + Alt + F1, F2, F3 etc.

Cada TTY executa um shell (como bash ou zsh).

Além disso, existe a interface gráfica, que roda separadamente dos terminais e pode variar dependendo do sistema.



Comandos Base

O comando cd é usado para navegar entre diretórios no Linux. Com ele, você pode acessar um diretório específico, voltar para o diretório anterior ou ir diretamente para o diretório pessoal do usuário. No Linux, as pastas são chamadas de diretórios.

O nome cd vem de change directory (mudar de diretório) sendo o comando principal para se movimentar dentro do sistema Linux.

#cd /etc/default
(Entrar no diretório)

cd = comando para mudar de diretório (change directory)

/etc/default = o caminho do diretório onde você quer entrar

 

#pwd
(Comando que mostra o caminho atual (print working directory))

O comando acima serve para exibir exatamente em qual diretório você está trabalhando no momento.

 

#cd ..
(Voltar um diretório) (diretório pai)

 

#cd -
(Voltar ao diretório anterior)

 

#ls /etc
(Listar tudo que contém no diretório alvo (arquivos e subdiretórios))

 

Na listagem com o comando: “ls”, pode apresentar algumas cores, que tem o seguinte significado:

Branco = Arquivos comuns (textos, códigos)
Azul = Diretórios (pastas)
Ciano = Links (atalhos / estrutura de um ponteiro)
Verde = Executáveis (programas ou scripts com permissão)
Vermelho = Arquivos compactados (ex: .zip, .tar.gz)
Rosa = Arquivos de mídia (imagens e vídeos)
Amarelo/Laranja = Arquivos de dispositivos (hardware)
.nome (com ponto na frente) = Arquivos ocultos


#ls -a ~
(Exibir os arquivos ocultos, o “-a” é o parâmetro que mostra os arquivos)

-a = all (tudo)
O caracter ~ (til) representa o diretório home do usuário atual

 

#ls -lh /etc | less
ls = Lista -l = Formato longo (mostra detalhes em colunas)
h = Formato humano (converte tamanhos para KB, MB, GB) /etc = Diretório alvo
| = Pipe less = Permite a rolagem da lista Com o comando acima vamos listar o conteúdo do diretório de forma detalhada. Neste caso, o primeiro caractere da primeira coluna indica: d = Diretório – = Arquivo l = Link (atalho)

 

#ls -d /etc
(O parâmetro -d (de directory) diz ao sistema para tratar o diretório como um arquivo comum. Ele mostrará apenas o nome do diretório ou informações sobre ele mesmo, sem entrar nele.)

 

#ls -ld /etc
(Frequentemente usado para ver as informações detalhadas (permissões, dono, tamanho e data) especificamente do diretório /etc, e não do que está lá dentro.)

 

#ls -lh /etc | grep ^d
ls -lh = Lista detalhes em formato humano | = Envia o resultado para o próximo comando grep ^d = Filtra linhas que começam com "d" (diretórios) Com o comando acima vamos listar apenas os diretórios que estão dentro de /etc.

 

#file /etc
(O comando file mostra qual é a “extensão” real (o tipo de conteúdo) e traz informações adicionais sobre o arquivo ou diretório em questão.)

OBS: No Linux, o comando file é mais potente que a extensão do nome, pois ele lê o "DNA" do arquivo para saber se ele é um texto, uma imagem ou um diretório.

 

#du
(Exibe o tamanho total de um diretório e de todos os diretórios que estão dentro dele.)

 

#du -hs ~

h = Mostrar os arquivos em MB, Gb etc
s = Resume tudo, somando o conteúdo para retornar uma linha com o valor
~ = Diretório em questão

 

#df -h /tmp
(Exibe o espaço total, o quanto está sendo utilizado e o espaço disponível na partição onde o diretório informado está localizado.)

 

#touch
(Criar um arquivo)

Exemplo: #touch /tmp/teste

 

#mkdir
(Criar um diretório)

Exemplo: #mkdir /tmp/pasta

 

#cp
(Copiar um arquivo)

Exemplo: #cp /tmp/teste /tmp/pasta

 

#mv
(Comando para mover arquivos)

Exemplo: #mv /tmp/teste ~

 

#mv ~/teste ~/doc
(O comando mv também renomeia arquivos)

 

#rm
(Remove arquivos)

Exemplo: #rm ~/doc

 

#rm -f ~/nomedoarquivo

-f (force) = Força a exclusão. Ele ignora arquivos protegidos contra escrita e oculta mensagens de erro caso o arquivo não exista.
OBS: O comando rm sozinho deleta o arquivo imediatamente sem fazer perguntas (desde que você seja o dono dele e tenha permissão de escrita). O parâmetro -f só é necessário em cenários específicos.

 

#rmdir
(Remove diretórios)

Exemplo: #rmdir /tmp/pasta

 

#rm -rf
(Remove o diretório com todos os arquivos dentro)

Exemplo: #rm -rf /tmp/pasta

 

 

Antigamente, em sistemas com o kernel 2.6, o comando locate (que serve para localizar arquivos) já vinha instalado por padrão. Atualmente, em distribuições modernas, o sistema GNU/Debian vem mais enxuto, então precisamos instalá-lo manualmente com o comando sudo apt install plocate antes de usar.

#sudo apt install plocate
(Instala o pacote plocate)
 
sudo = Super User Do (Super usuário faça) - Dá permissão de administrador para o comando.
apt = Gerenciador de pacotes do Debian.
install = Ação de instalar.




Logo abaixo segue um exemplo:

#locate
(Localiza arquivos)
 
Exemplo: #locate -i arquivo



Quando o comando locate não funcionar utilizamos o comando sudo updatedb.

O comando updatedb vai atualizar o banco de dados interno do sistema, permitindo que o locate encontre os novos arquivos.

#sudo updatedb
(Atualiza o banco de dados interno do sistema)




O comando find é uma ferramenta que busca arquivos e diretórios em tempo real diretamente no disco rígido. Ele permite fazer buscas avançadas filtrando por nome, tamanho, tipo de arquivo ou data de modificação.

#find
(Localiza arquivos)


Exemplo:

#find /etc -name "*.conf"
(comando buscar) (diretório) (filtro por nome) (padrão de extensão)
[Busca dentro do diretório /etc por todos os arquivos que terminam com a extensão .conf]


Outro exemplo de find:

#find /var -size +50k
(comando buscar) (diretório alvo) (tamanho) (arquivos acima de 50k)

[Busca dentro do diretório /var por arquivos com tamanho acima de 50 Kilobytes] 
Ou seja, esse comando informa ao sistema: "Localize neste diretório arquivos acima de 50k".



Comandos para Reiniciar o Sistema

#init 6

#reboot

#shutdown -r now
(Todos os comandos acima reiniciam o sistema)

 

Comandos para Desligar o Sistema

#poweroff

#init 0

#halt ### - ⚠️ Cuidado: Não é recomendado em ambientes com usuários ativos ou processos críticos, pois pode encerrar tudo de forma abrupta. - ###

#shutdown -h now
(Todos os comandos acima desligam o sistema)

 

Comandos para Manipulação de Texto

#cat /etc/passwd
(Visualiza todo o conteúdo do arquivo)

 

#cut -f1 -d : /etc/passwd > /tmp/usuarios

cut = Corta/extrai pedaços de texto de um arquivo.
-f1 = Indica a coluna que você quer pegar (neste caso, a coluna 1)
-d : = Indica o divisor de colunas (o caractere : é o separador)
> = Redireciona a resposta para criar ou sobrescrever um arquivo

 

#uniq
(Elimina informações duplicadas em um arquivo)

 

#sort
(Ordena um arquivo na tabela ASCII)

 

#man ascii
(Exibe a tabela ASCII)

 

#echo " lionn "
(Exibe o texto no terminal)

 

#echo linux | tr a-z A-Z
echo = Exibe
linux = Texto em questão
| (Pipe/Canalização) = Ele pega a saída do comando da esquerda (echo linux) e joga direto como entrada para o comando da direita (tr). Ele funciona como um tubo condutor.
tr = Troca
a-z = Fonte minúscula
A-Z = Fonte maiúscula

 

O Comando grep

Nos primórdios do Unix, os programadores utilizavam um editor de texto chamado ed.

Dentro desse editor era possível procurar padrões de texto utilizando a seguinte expressão:

g/re/p


Onde:

g = Global (procura em todo o arquivo)
re = Regular Expression (expressão regular ou padrão de busca)
p = Print (exibe as linhas encontradas)


Esse comando significava:

"Procure em todo o arquivo as linhas que correspondem à expressão informada e exiba os resultados."


A expressão era tão utilizada por administradores e programadores que acabou dando origem a um comando próprio do sistema operacional. Assim surgiu o comando: grep cujo nome deriva diretamente de: g/re/p e que até hoje é utilizado para localizar palavras, textos e padrões em arquivos ou na saída de outros comandos.

 

Abaixo alguns exemplos da utilização do comando grep...

#grep "root" /etc/passwd 

Procure a palavra "root" dentro do arquivo /etc/passwd e mostre as linhas encontradas. 

 

#grep -r "root" /etc/

Procure a palavra "root" em todos os arquivos dentro do diretório /etc e também em seus subdiretórios.

 


Um exemplo mais avançado utilizando o comando grep logo abaixo... A explicação é a seguinte: Primeiro o grep seleciona todas as linhas do arquivo que não começam com a letra "g" minúscula. Em seguida, o pipe envia esse resultado para o comando od. O parâmetro -a faz com que o conteúdo seja exibido mostrando também caracteres especiais, como espaços e quebras de linha, utilizando nomes legíveis.

#grep -v ^g /tmp/arqs | od -a

grep = Procura padrões de texto
-v = Inverte a busca (mostra as linhas que NÃO correspondem ao padrão)
^g = Indica linhas que começam com a letra "g" (o símbolo ^ representa o início da linha)
arqs = Arquivo pesquisado | (Pipe) = Pega o resultado do grep e passa para o od od = Exibe o conteúdo em formatos de despejo (dump) -a = É a opção que força o od a mostrar o conteúdo como caracteres nomeados (caracteres normais e caracteres de controle legíveis, como nl para nova linha ou sp para espaço)


O exemplo do comando grep acima era utilizado para analisar o conteúdo de arquivos em detalhes, inclusive caracteres invisíveis como espaços, tabulações e quebras de linha. Atualmente existem ferramentas mais práticas para essa tarefa, por isso esse tipo de combinação é menos comum na administração moderna de sistemas Linux.

 


Documentação

O Linux possui diversos recursos de documentação integrados. Existem também projetos externos como o The Linux Documentation Project (https://tldp.org), contendo guias, tutoriais e documentação técnica.

Documentação Externa (TLDP):

  • Tutoriais > documentação detalhada sobre diversos tópicos Linux.

  • HOWTOs > guias práticos para executar tarefas específicas no sistema.


Dúvidas sobre um comando?

#rm --help
(Exibe a ajuda rápida sobre o comando rm)



Ou então você pode utilizar o comando less através do pipe para permitir a rolagem da saída do terminal...

#rm --help | less
rm = Comando para remover
--help = Exibe a ajuda rápida do comando
| less = Permite a rolagem da saída no terminal

(Exibe a ajuda rápida sobre o comando rm com rolagem no terminal)

 

#man ip
(Abre o manual completo do comando)

 

#whereis ip
(Exibe a localização do binário e arquivos relacionados ao manual)

 

#which grep
(Exibe o caminho exato do executável)

 

#whatis
(Exibe uma descrição resumida do comando)

Exemplo: #whatis cut

 

#apropos
(Procura comandos relacionados a uma determinada palavra-chave)

Exemplo: #apropos copy (Vai exibir comandos relacionados ao copy)

 

#mandb
(Atualiza a base de dados utilizada pelos comandos whatis e apropos)

 

 

 

Comandos para verificar a versão da distribuição e do kernel...

 

Abaixo seguem dois exemplos para verificar a versão da distribuição Linux.

#cat /etc/os-release
(Exibe informações detalhadas da distribuição)


Segundo exemplo:

#lsb_release -a
(Exibe um resumo das principais informações da distribuição)

 

 

Agora, mais dois exemplos para verificar a versão do kernel...

#uname -a
(Exibe informações detalhadas do kernel e do sistema)

 

Segundo exemplo:

#uname -r
(Exibe apenas a versão do kernel)

 


Verificando a versão da distro: Debian 3.1

  • Stable (Sarge) = versão estável e recomendada para uso em produção (amplamente testada)

  • Unstable (Etch) = versão em desenvolvimento

OBS: Os exemplos acima fazem referência ao Debian da época dos estudos originais (2006).

 

Atualmente, o Debian continua utilizando diferentes ramificações de desenvolvimento.

  • Stable = versão estável e recomendada para produção

  • Testing = próxima versão estável em fase de testes

  • Unstable (Sid) = desenvolvimento contínuo


Embora os nomes das versões mudem ao longo do tempo, o Debian continua utilizando as ramificações Stable, Testing e Unstable.

 


Instalando o Debian

Na época do Debian 3.1, o sistema utilizava o kernel Linux 2.4 como padrão, existindo também versões alternativas com kernel 2.6.

OBS: Esta documentação foi baseada em estudos realizados sobre o Debian no ano de 2006.

Significado da versão do Kernel:

Versão = 2.6.8

  • 2 → versão principal (major).
  • 6 → versão secundária (minor) - números pares indicavam versões estáveis.
  • 8 → revisão (patch) - correções e melhorias.

O kernel Linux continua utilizando o mesmo conceito de versionamento, porém com versões muito mais recentes.

 

Evolução do Linux: Do Debian 3.1 aos Debian Modernos

O ecossistema Linux mudou drasticamente nas últimas décadas. Este artigo traça um paralelo entre o processo de instalação e particionamento da época do Debian 3.1 Sarge / 4.0 Etch e as diretrizes utilizadas atualmente no Debian.


1. A Inicialização do Instalador (Boot)

Na época: A instalação era feita via CDs. Na tela de boot, o usuário precisava digitar comandos manuais como linux26 para forçar o instalador a usar o kernel Linux 2.6, que era a versão mais moderna da época, em vez do antigo kernel 2.4.

Atualmente: O boot é feito via Pen Drive USB (usando ferramentas como Ventoy ou Rufus). O hardware moderno roda em modo UEFI e o menu do GRUB 2 inicia tudo de forma visual e automática. Parâmetros manuais de kernel raramente são necessários.


2. A Evolução do Hardware e Armazenamento

A forma como o Linux enxerga os discos mudou com a extinção dos cabos IDE e a chegada dos SSDs de altíssima velocidade.

Característica O Padrão Antigo O Padrão Atual
Interface de Disco Cabos IDE (Master / Slave) Conexões SATA III e NVMe M.2
Nomenclatura /dev/hda, /dev/hdb /dev/sda (SATA) ou /dev/nvme0n1 (NVMe)
Tabela de Partição MBR (Máximo de 4 partições primárias) GPT (Até 128 partições)
Estrutura lógica Partições Estendidas e Lógicas Tornou-se muito menos comum com a adoção do GPT



3. Configuração de Rede

Na época: Embora o DHCP já existisse, a configuração manual era frequente devido à falta de drivers nativos no instalador para muitas placas de rede (especialmente placas Wi-Fi e PCMCIA). Era comum ter de configurar IPs fixos, máscaras e DNS de provedores locais na unha após a instalação, além de usar nomes de domínios simples para redes internas (ex: LIONN).

Atualmente: O instalador detecta automaticamente a grande maioria das placas de rede modernas e configura tudo via DHCP (IPv4 e IPv6) de forma automática. Além disso, a resolução de nomes mudou drasticamente, popularizando o uso de DNS globais de alta velocidade como Cloudflare (1.1.1.1) e Google (8.8.8.8).


4. Batalha dos Sistemas de Arquivos (File System)

O conceito de Journaling (registro de operações para evitar corrupção de dados) tornou-se padrão no Linux moderno.

O padrão antigo: O ecossistema era dividido entre EXT2 (sem journaling), EXT3 (com journaling), ReiserFS, JFS e XFS.

O padrão atual: O EXT4 tornou-se o sistema de arquivos padrão na maioria das distribuições Linux. O XFS evoluiu para grandes servidores e o Btrfs ganhou destaque com recursos de snapshots.

Status de Obsolescência: O ReiserFS foi removido do kernel Linux por abandono do projeto.


5. Estrutura de Particionamento do HD (Ontem vs. Hoje)

A evolução do tamanho dos sistemas e dos arquivos mudou drasticamente o espaço necessário para rodar o Linux.


Como era feito antigamente

Antigamente, separar diretórios como /usr, /var e /tmp era comum para evitar que logs ou arquivos temporários afetassem o sistema.

/root (15 MB)      -> /dev/hda1
/ (500 MB)         -> /dev/hda2
Swap (2x RAM)      -> /dev/hda3
/usr (15 GB)       -> /dev/hda5
/var (300 MB)      -> /dev/hda6
/tmp (200 MB)      -> /dev/hda7
/home (3 GB)       -> /dev/hda8



Como é feito atualmente

Hoje, subdividir excessivamente o sistema doméstico caiu em desuso. O Debian moderno exige muito mais espaço e utiliza arquitetura UEFI.

/boot/efi (512 MB)
Partição obrigatória para sistemas UEFI

/ (40 GB a 50 GB)
Partição raiz principal

Swap (2 GB a 4 GB)
Área de memória virtual

/home (Restante do disco)
Arquivos pessoais dos usuários



Observações

Apesar de todas as mudanças em hardware, particionamento e sistemas de arquivos, o coração da inicialização do Debian continua fiel ao GRUB. O GRUB evoluiu para o GRUB 2, adaptou-se ao padrão UEFI e continua sendo a ponte entre o Linux clássico e o Linux moderno.



Documentação Histórica (2006)

Os trechos abaixo foram preservados da documentação original utilizada nos estudos da época.

Após colocar o CD no driver, na tela de boot digite:

linux26



Configuração de Rede

No processo de instalação selecionar a configuração manual:

Endereço IP = 192.168.0.3

Mascara = 255.255.255.0

Gateway = 192.168.0.1

Domínio = LIONN

DNS = 200.204.0.10

Nome da maquina = Micro01



Particionar Disco

Editar manualmente a tabela de partições.

Filesystem
O Filesystem padrão da época utilizava principalmente EXT2 e EXT3.

  • REISERFS* - Suporta 256 TB
  • JFS* - Suporta 256 TB
  • XFS* - Suporta 2 EB

*Journaling = Grava logs do sistema de arquivos. Em caso de falhas, o sistema pode utilizar os logs para recuperação de dados.



Esquema de Partição HD

No modelo MBR, o sistema podia ter até 4 partições primárias. As partições lógicas eram identificadas após a quinta partição.


Partições Primárias

HD1 = 15 Mb  -> /root -> /dev/hda1
HD2 = 500 Mb -> /     -> /dev/hda2
HD3 = 2xRam  -> Swap  -> /dev/hda3



Partições Lógicas

HD5 = 15 Gb  -> /usr  -> /dev/hda5
HD6 = 300 Mb -> /var  -> /dev/hda6
HD7 = 200 Mb -> /tmp  -> /dev/hda7
HD8 = 3 Gb   -> /home -> /dev/hda8

Na tabela acima, o HD4 representava a partição estendida. Sem a partição estendida não era possível criar partições lógicas.

A partição estendida era uma partição primária que continha partições lógicas.



.....:::::.  GRUB → Boot Loader do Sistema
(Inicialização do Sistema)  .::::.....

(O GRUB é responsável pela inicialização do sistema operacional durante o processo de boot)



Comandos Extras

#history
(Exibe os comandos que você executou no terminal)

 

#history -c
(Limpa o histórico de comandos)

Caso você não se recordar de um comando, basta digitar o começo do comando e depois apertar a tecla <TAB> para completar a informação.

 

#date
(Exibe a data e hora do sistema)

 

#uptime
(Exibe há quanto tempo o sistema está em execução)

 

#whoami
(Exibe o nome do usuário atual)

 

#hostname
(Exibe o nome da máquina)

 

#clear
(Limpa o terminal)

OBS: Você também pode utilizar as teclas CTRL + L para realizar a mesma operação.

 



Editor de Texto Padrão

O editor de texto padrão no Linux é o VI. O VIM é uma versão aprimorada e compatível com o VI.

Na época do Debian 3.1, era comum utilizar o gerenciador de pacotes Aptitude para instalar programas no sistema.

Para instalar o editor de texto VIM, utilizava-se o comando abaixo:

#aptitude install vim



OBS: Atualmente, as distribuições Linux baseadas em Debian utilizam predominantemente o comando apt para gerenciamento de pacotes. O comando equivalente é o seguinte:

#apt install vim

 

Testando o VIM...

#vim /tmp/doc.txt

 

No VIM
Para entrar no modo de edição, pressione a tecla:  i 

<tecla> i


Modo comando: <ESC>

Comandos VIM:

yy → Copia a linha atual
p → Cola a linha copiada
cc → Substitui a linha atual
dd → Deleta a linha atual
x → Remove o caractere sob o cursor (igual à tecla <DEL>)
v → Entra no modo Visual (seleção de texto)
gg → Vai para o início do arquivo
G → Vai para o final do arquivo



Modo de Linha de Comando

No modo de linha de comando é possível executar comandos de gerenciamento do arquivo.
Para acessar esse modo, pressione a tecla <ESC> + :

Comandos:

: set nu →  Numera as linhas do arquivo
: set nonu →  Retira a numeração de linhas do arquivo
: w → Salva o arquivo
: wq →  Salva e sai
: q! →  Sai sem salvar



Dispositivos

Os exemplos a seguir utilizam dispositivos bastante comuns na época em que este material foi elaborado, como disquetes e unidades de CD-ROM. Embora esses dispositivos sejam raramente utilizados atualmente, os comandos apresentados ajudam a compreender como o Linux realiza o gerenciamento de dispositivos de armazenamento.

#fdformat /dev/fd0
(Formata o disquete)

Observação

O comando fdformat não está mais incluso na instalação padrão do sistema, pois os disquetes são considerados obsoletos. Caso queira testar este comando em máquinas virtuais ou hardware antigo, instale-o com:

#sudo apt update

#sudo apt install fdformat

E lembre-se: para disquetes de alta densidade (1.44MB), utilize o dispositivo específico, como /dev/fd0H1440, em vez de apenas /dev/fd0.

 

Embora o exemplo abaixo utilize um disquete, o comando mkfs continua sendo utilizado atualmente para criar ou recriar sistemas de arquivos em dispositivos modernos, como pendrives, HDs, SSDs e outras mídias de armazenamento.

#mkfs -t ext2 /dev/fd0

mkfs → Cria um sistema de arquivos (filesystem)
-t → Define o sistema de arquivos (filesystem)
ext2 → Sistema de arquivos (filesystem) utilizado
fd0 → Unidade de disquete

Observação

A utilização do comando mkfs apaga permanentemente todos os dados existentes no dispositivo selecionado.


#mkboot
(Cria um disco de boot)

Observação

O comando mkboot fazia parte de distribuições Linux antigas e atualmente não está presente na maioria das distribuições modernas. Ele é apresentado apenas para preservar o conteúdo histórico deste material.

 

 

#touch /media/floppy/teste
(Cria um arquivo vazio no diretório)

 

#mount -t ext2 /dev/fd0 /media/floppy
(Monta o dispositivo de disquete)

 

#df
(Exibe os sistemas de arquivos montados)

 

#umount /dev/fd0
(Desmonta o dispositivo de disquete)

 

#eject
(Abre a bandeja do CD-ROM)

 

#eject -t
(Fecha a bandeja do CD-ROM)

 

#mount -t iso9660 /dev/cdrom /media/cdrom
(Monta o dispositivo de CD-ROM)

*ISO9660 – Sistema de arquivos (filesystem) do CD-ROM

 

#ls -l /dev/cdrom
(Lista o dispositivo de CD-ROM)

 

#dmesg | grep -i atapi

dmesg = Exibe o log de inicialização
grep = Procura padrões de texto
-i = Ignora diferenças entre letras maiúsculas e minúsculas
atapi = CD-ROM

O comando acima exibe informações do CD-ROM registradas durante a inicialização do sistema.



Manipulando Partições

Os comandos apresentados nesta seção mostram como o Linux realiza o gerenciamento de partições e sistemas de arquivos. Embora alguns exemplos utilizem nomenclaturas antigas, como /dev/hda e o sistema de arquivos ext3, os conceitos apresentados continuam sendo amplamente utilizados nas distribuições Linux atuais.

#cfdisk
(Cria e gerencia partições por meio de uma interface em modo texto)

 

#fdisk -l
(Lista todas as partições existentes no sistema)

Exemplo: #fdisk -l /dev/hda

 

#df
(Exibe os sistemas de arquivos montados e seus pontos de montagem)

 

#mkfs -t ext3 /dev/hda9

Explicando o comando acima...

mkfs = Cria um sistema de arquivos (formata a partição)
-t = Define o sistema de arquivos (filesystem)
ext3 = Sistema de arquivos (filesystem)
hda9 = Disco em questão

 

Fazendo o ponto de montagem:

#mkdir /mnt/backup
(Cria o diretório que será utilizado como ponto de montagem da partição.)
#mount -t ext3 /dev/hda9 /mnt/backup (Monta a partição no diretório criado, tornando seu conteúdo acessível ao sistema.) #touch /mnt/backup/arqteste (Cria um arquivo de teste dentro da partição montada.)


Para desmontar o dispositivo /dev/hda9, utilize o comando abaixo:

#umount /dev/hda9



O arquivo fstab, localizado no diretório /etc, faz parte da configuração do sistema e é utilizado para definir a montagem automática de partições.

Visualizando o conteúdo do arquivo fstab:

#vim /etc/fstab

Na tabela (/etc/fstab) =
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

RW: Leitura / Gravação
RO: Somente leitura
AUTO: Montando automaticamente
NOAUTO: Montar manualmente
USER: Qualquer usuário pode montar/acessar
NOUSER: Apenas o root monta
EXEC: Executar binários
DEFAULTS = RW, AUTO, NOUSER, EXEC

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

5° coluna
DUMP → Ele é um utilitário usado para fazer backup(ext2). Ele tem dois valores: 0 e 1

0 = Não executa na inicialização
1 = Executa a função (de backup)

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

6° coluna
FSCK → Ele faz o “Scandisk”, possui 3 valores

0 = Não executa na inicialização
1 = Executa na inicialização porém só pode ser associado na raiz ( / )
2 = Executa na inicialização

 

Para montar a partição automaticamente entre no arquivo com vim /etc/fstab e adicione na última linha do arquivo o comando:

/dev/hda9 /mnt/backup ext3 defaults 0 2

 

Feito isso, salve o arquivo, retorne ao terminal e utilize o comando:

#mount -a
(Aplica as configurações definidas no arquivo /etc/fstab)


Verifique com o comando abaixo:

#df 
(Informa se a partição foi montada ou não)

 



 

Personalizando comandos com Alias

O Bash permite criar atalhos para comandos utilizados com frequência por meio do recurso conhecido como alias. Isso facilita a execução de comandos longos ou repetitivos, tornando o uso do terminal mais prático no dia a dia.

#ls --color=auto /etc
(Comando para inserir cores na listagem de arquivos)

 

#alias
(Lista os aliases atualmente configurados)

Exemplo:

#alias ls=’ls --color=auto’ 
(Definindo cores para o ls) #alias desligar=’init0’
(Definindo a palavra desligar ao init0)

Observação

Os exemplos acima são mantidos apenas para preservar o conteúdo histórico deste material. Atualmente, comandos como init0 e operações envolvendo unidades de CD-ROM são pouco utilizados nas distribuições Linux modernas.

 

Exemplos atuais

#alias cls='clear'
(Cria um atalho chamado cls para limpar a tela do terminal)

 

#alias ll='ls -lha'
(Cria um atalho para exibir uma listagem detalhada dos arquivos)

 

Removendo um alias


Para os exemplos do material original:

#unalias ls

 

#unalias desligar


Para os exemplos atuais:

#unalias cls

 

#unalias ll



Tornando o alias permanente

Para deixar o alias salvo no sistema, verifique os arquivos:

  • /etc/bash.bashrc → (alias globais)

  • ~/.bashrc → (alias locais)

#vim ~/.bashrc
(Vamos editar o bashrc)

$ → antes do comando significa que ele chama uma variável

 

No arquivo adicione o comando:

Exemplos atuais de alias:
alias cls='clear'
alias ll='ls -lha'
#########################################################################################
# Abaixo segue os exemplos antigos de alias no Debian 3.1 #########################################################################################
alias desligar=’init0’ alias cdrom=’eject;echo “Coloque o CD”; sleep 5; eject -t; mount /dev/cdrom; df’
#########################################################################################

 

#source ~/.bashrc
(Recarrega o arquivo ~/.bashrc, aplicando imediatamente as alterações)



Manipulando Variáveis

Os comandos apresentados nesta seção demonstram como criar, visualizar e manipular variáveis no Linux. As variáveis são utilizadas para armazenar informações que podem ser acessadas pelo shell, por programas e pelo próprio sistema operacional, facilitando a configuração do ambiente e a execução de comandos.

#Unix="BSD"
(Definindo um valor para a variável)

#echo $Unix
(Para ver o valor da variável)



O comando set exibe variáveis disponíveis na sessão atual do shell. Já o comando env mostra as variáveis de ambiente exportadas.

#set | grep -i Unix
(Exibe a variável definida na sessão atual do shell)

 

#env | grep -i Unix
(Exibe as variáveis de ambiente exportadas)

 

O comando export transforma essa variável em uma variável de ambiente, permitindo que ela seja herdada pelos processos iniciados a partir da sessão atual.

#export Unix
(Exporta a variável para os processos iniciados na sessão atual)



O Linux já possui diversas variáveis de ambiente predefinidas. Entre elas estão $USER, que identifica o usuário atual; $HOSTNAME, que informa o nome da máquina; $PATH, responsável por armazenar os diretórios onde o sistema procura comandos executáveis; e $PS1, utilizada para definir a aparência do prompt do terminal.

#echo $USER
(Exibe o usuário atualmente logado)

 

#echo $HOSTNAME
(Exibe o nome da máquina)

 

#echo $PATH
(Exibe os diretórios onde o sistema procura comandos executáveis)



Podemos alterar temporariamente o prompt atribuindo um novo valor à variável $PS1.

#echo $PS1
(Mostra: \h → Nome da máquina, 
\w → Caminho absoluto do diretório, 
\$ → Identificador do usuário)

 

#PS1="Lionn> "
(Altera/Personaliza o valor do prompt)

Opções para PS1
\u → Nome do usuário
\t → Hora
\w → Caminho



Até agora trabalhamos com variáveis válidas apenas para a sessão atual do terminal. Para que elas sejam carregadas automaticamente a cada novo login, podemos defini-las em arquivos de configuração do Bash.

  • /etc/profile → variáveis globais

  • ~/.profile → variáveis locais

O arquivo /etc/profile é utilizado para configurações globais do sistema. Já o arquivo ~/.profile, localizado no diretório pessoal do usuário, armazena configurações específicas desse usuário.



Para finalizar esta seção, vamos conhecer alguns arquivos do sistema relacionados às informações exibidas durante o processo de login.

#cat /etc/issue
(Exibe informações apresentadas antes do login local)

 

#cat /etc/motd
(Exibe a mensagem do dia (Message of the Day))

 

#cat /etc/issue.net
(Exibe a mensagem apresentada em conexões remotas, como SSH, quando configurada)



Gerenciamento de Programas

Os programas no Linux são distribuídos em pacotes. Cada distribuição utiliza o seu próprio formato de pacote e ferramentas específicas para instalar, atualizar, remover e gerenciar esses softwares.

  • Red HatRPM → Pacotes .rpm

  • SlackwarePKG-TOOL → Pacotes .tgz

  • DebianDPKG → Pacotes .deb

#dpkg -l | more
(Exibe todos os programas instalados no sistema)

 

#dpkg -l | wc -l
(Exibe a quantidade de pacotes instalados)
Explicação do comando: (dpkg = gerenciador de pacotes do Debian) (-l = lista) (wc -l = conta a quantidade de linhas da saída)

 

#dpkg -l | grep ssh
(Exibe se o pacote ssh está instalado no sistema)

 

#dpkg -l 's*'
(Exibe resultados relacionados ao padrão informado)
Outra forma para filtrar pacotes por nome é utilizando o comando abaixo:

#dpkg -l | awk '$1=="ii" && $2 ~ /^s/'
(Filtra pacotes instalados (ii) cujo nome do pacote começa com “s”)

 

#dpkg -L vim
(Exibe todos os arquivos instalados pelo pacote vim)

 

#dpkg -S /usr/bin/ls
(Identifica qual pacote instalou o arquivo informado)



Observações

Os comandos listados abaixo fazem parte dos estudos originais deste artigo (2006) e foram mantidos por questões históricas.

#mount /dev/cdrom
(Monta a mídia de instalação no sistema de arquivos)
#cd /media/cdrom/pool/main
(Acessa o diretório principal onde os pacotes do Debian estão armazenados no CD-ROM)
#cd v/vlock
(Acessa o diretório que contém o pacote vlock)
#dpkg -I vlock (Exibe informações detalhadas sobre um pacote .deb antes da instalação)

 

#dpkg -c vlock
(Exibe os arquivos e diretórios contidos no pacote .deb)

 

#dpkg -i vlock
(Instala um pacote .deb manualmente)



Testando o pacote vlock

#vlock -a
(travar) (todos os terminais) -a = all (todos)

 

#dpkg --purge vlock
(Remove o pacote e seus arquivos de configuração)

 

Evolução do gerenciamento de pacotes

Os comandos acima fazem parte de uma forma mais antiga de utilização do Debian, quando era comum a instalação de pacotes a partir de mídias físicas (como CD-ROM). Atualmente, o gerenciamento de pacotes é feito principalmente por meio de repositórios online, utilizando o APT, o que torna o processo mais rápido, seguro e automático.

A partir deste ponto, o conteúdo do artigo passa a utilizar os métodos modernos de gerenciamento de pacotes no Debian.


 

Gerenciamento moderno de pacotes (APT)

Além do DPKG, o Debian utiliza o APT (Advanced Package Tool), responsável por automatizar o gerenciamento de pacotes. O arquivo sources.list armazena os repositórios utilizados pelo sistema.

#cat /etc/apt/sources.list
(Exibe a lista de repositórios utilizados pelo APT)
### Legado ### [binary - n° = Indica o número do CD para inserir no PC para instalar] - (Entrada de repositório baseada em CD-ROM - Comum em instalações antigas)
###################################################################################################################################################

 

#vim /etc/apt/sources.list
(Edita a lista de repositórios de onde o APT obtém os pacotes)

 

#apt-setup
(Ferramenta utilizada para configurar os repositórios do APT)

 

#apt-get update
(Atualiza a lista de pacotes disponíveis nos repositórios)

 

#apt-cache search office | less
(Pesquisa pacotes disponíveis nos repositórios)

 

#apt-cache showpkg bluefish | less
(Exibe informações e dependências do pacote)

 

#apt-get install lynx
(Instala o pacote)

 

#apt-get clean
(Limpa o cache de pacotes baixados pelo APT)

 

#apt-get remove lynx
(Remove o pacote)

 

#apt-get remove --purge lynx
(Remove o pacote e seus arquivos de configuração)

 

#apt-get upgrade*
(Atualiza os pacotes instalados para versões mais recentes)

⚠️*Cuidado ao usar esse comando...

 

#apt-get dist-upgrade*
(Realiza uma atualização completa do sistema, podendo instalar ou remover dependências quando necessário)

⚠️*Cuidado ao usar esse comando...



Processos

Os processos representam todos os programas e serviços em execução no sistema. Cada processo possui um identificador único (PID) e pode ser monitorado, priorizado ou finalizado por meio de comandos específicos do Linux.

PID
→ Identificador único de um processo no sistema.

#ps aux | less
(Visualiza os processos) A → Mostra todos os processos U → Mostra o nome do usuário X → Independente do terminal 1° coluna = Nome do usuário 2° coluna = PID = Identificador do processo 3° coluna = %CPU = Consumo de processador (CPU) 4° coluna = %MEM = Consumo de memória 5° coluna = 6° coluna = 7° coluna = TTY (Terminal não tem controle) 8° coluna = STAT = Estado do processo R = Running (Processo em execução) S = Sleeping (Processo dormindo) T = Traced/Stopped (Processo parado ou suspenso) D = Uninterruptible Sleep (Processo aguardando uma operação de entrada/saída (I/O), como acesso ao disco; não pode ser interrompido) 9° coluna = START = Indica quando o processo foi iniciado 10° coluna = TIME = Indica o tempo de CPU utilizado pelo processo 11° coluna = COMMAND = Comando utilizado para iniciar o processo Z = Zombie (Processo finalizado, mas ainda presente na tabela de processos até que seu processo pai colete seu status)

 

#pstree | more
(Exibe a árvore de processos)

 

#top
(Monitora os processos em tempo real)

S = Interface que altera o delay de visualização. Depois coloca o n°1 (de 1 em 1 segundo
O top vai mostrar/atualizar as informações de sistema.
P = CPU (indica o uso da CPU, processamento)
M = Memória (indica quais processos estão usando mais memória)
A = Idade (mostra os processos mais recentes)
K = Matar (finalizar um processo)

[Para finalizar um processo, você deve indicar o n° do PID, <ENTER> em seguida colocar n° 9]


PRIORIDADE

|-----------------------|----------------------------|--------------------------------|---------------------------|
-20                       -10                                 0                                      10                                20
prioridade alta                                      padrão                                                     prioridade baixa


Quanto menor o valor (mais negativo), maior a prioridade do processo.

Prioridades mais baixas são normalmente utilizadas para processos menos importantes, permitindo que processos críticos tenham preferência no uso da CPU.

A prioridade padrão é 0 (zero). Dependendo da necessidade, é possível aumentar ou reduzir esse valor utilizando os comandos nice e renice.


#nice -n 10 top
(Define a prioridade de um processo ao iniciá-lo)

A coluna NI exibe o valor de prioridade ( nice ) do processo.


pgrep = O comando pgrep localiza o PID de um processo.

Exemplo:

#pgrep gnome-shell


Alterando prioridade do processo:

#renice -4 -p [PID]

renice = Alterar prioridade
-4 = Novo valor de prioridade (nice)
-p = Indica o n° do PID
[PID] = n° do PID (exemplo: 2248)

 

#sleep 200 &
& = Executa o comando em segundo plano

Ao executar o comando com o &, ele apresenta:
[N°]  [N°]
Job   PID

 

#jobs -l
(Mostra os comandos que estão em segundo plano)

 

#pgrep <Nome_do_Processo>
(Localiza o PID do processo informado)

 

#fg %<n° do job>
(Deixa o comando em primeiro plano)

==========================================================
(Sinais para Finalizar Processos)
==========================================================

1 – SIGHUP = (restart)
  Interage direto com o processo
  Tenta restaurar o processo

==========================================================

2 – SIGINT = (ctrl + c)
  Para o processo na hora

==========================================================

9 – SIGKILL = (matar)
Encerra imediatamente o processo

==========================================================

15 – SIGTERM = (sinal padrão)

==========================================================

 

#kill -9 [n° PID]

kill → Finaliza um processo pelo PID
-9 → Número do sinal
[n° PID] → Código do processo

 

#killall -9 <Nome_do_Processo>
(Finaliza todos os processos com o nome informado)

 

#kill -9 `lsof -t -u user`

kill → Matar processo
-9 → Sinal
`lsof -t -u user` → Lista os PIDs dos processos pertencentes ao usuário informado
-t → Pega os PIDs
-u → Somente o usuário
user → Nome do usuário



RUNLEVEL (Init)

Antes da adoção do systemd, a inicialização do Linux era controlada pelo Init, o primeiro processo iniciado pelo kernel. O Init utilizava os chamados Runlevels, que definiam os diferentes modos de execução do sistema, como modo monousuário, multiusuário, desligamento e reinicialização.

Embora os sistemas modernos utilizem o systemd, compreender os Runlevels é importante para entender a evolução da inicialização no Linux.

Runlevels = São os diferentes modos de execução do Init. Existem sete modos de execução (Runlevels).


RUNLEVEL Debian

0 : Desligar
1 : Monousuário (só inicia com o root)
2 : Multiusuário
3 : Multiusuário
4 : Multiusuário
5 : Multiusuário
6 : Reiniciar

 

RUNLEVEL Red Hat

0 : Desligar
1 : Monousuário (só inicia com o root)
2 : Multiusuário sem rede
3 : Modo texto
4 : (Nada)
5 : Modo gráfico
6 : Reiniciar

 

RUNLEVEL Slackware

0 : Desligar
1 : Monousuário (só inicia com o root)
2 : Multiusuário
3 : Multiusuário
4 : Modo gráfico
5 : (Nada)
6 : Reiniciar

 

Observações

Os comandos apresentados abaixo fazem parte do modelo tradicional baseado no SysV-Init e foram mantidos neste artigo por questões históricas.

Nas distribuições Linux atuais, a inicialização do sistema é realizada pelo systemd, tornando comandos como init, /etc/inittab e init q obsoletos ou utilizados apenas para fins de compatibilidade.

#init 1
(Altera o Runlevel para o modo monousuário)

 

Manutenção do sistema de arquivos

Os comandos a seguir estão relacionados à verificação do sistema de arquivos. Eles costumavam ser executados no modo monousuário (Runlevel 1), quando o sistema estava com o mínimo de serviços ativos, reduzindo o risco de inconsistências durante a manutenção.

#file -s /dev/hda1
(Informa o tipo do sistema de arquivos)

 

#fsck -t ext3 /dev/hda8
(Verifica e corrige o sistema de arquivos)

 

#fsck -t ext3 /dev/hda[1,2,3,4,5,6,7,8]
(Executa a verificação do sistema de arquivos em múltiplas partições)

 

 

Inittab - Legado

O arquivo /etc/inittab armazenava as configurações do Init, nele era possível definir o Runlevel padrão utilizado durante a inicialização do sistema. Esse arquivo deixou de ser utilizado com a chegada do systemd.

#vim /etc/inittab
(Edita o arquivo de configuração do Init, controla o processo principal)

Na linha 5 é definido o Runlevel padrão utilizado na inicialização do sistema

Nas linhas 32 e 33 é possível alterar o comportamento da combinação CTRL + ALT + DEL, inserindo a linha:
:/bin/echo “Isso não é Windows!!!”

Na linha 54 é realizado o controle dos terminais, definindo a sequência de inicialização dos consoles
(No ambiente de testes desativamos os consoles: 3,4,5 e 6)

 

#init q
(Recarrega a configuração do Init)

 

#ls /etc/rc*.d
(Lista os diretórios de inicialização de cada Runlevel)

#cd /etc/rc2.d
(Entra no diretório do Runlevel 2 - modo multiusuário)

 


Abaixo estão os diretórios tradicionais onde os scripts de inicialização (Daemons/serviços) eram armazenados em cada distribuição.

DAEMONS = processos responsáveis por executar serviços do sistema em segundo plano.

/etc/init.d → Debian

 

/etc/rc.d → Slackware

 

/etc/rc.d/init.d → Red Hat





systemd (Evolução do Init)

systemd é o sistema de inicialização e gerenciador de serviços utilizado nas distribuições Linux modernas, substituindo o antigo sistema baseado em init e scripts localizados em /etc/init.d.

Enquanto o init utilizava runlevels para definir os modos de execução do sistema, o systemd utiliza o conceito de targets, que desempenham função semelhante, porém com mais recursos e flexibilidade.

O systemd permite inicialização paralela de serviços, melhor gerenciamento de dependências e controle mais eficiente do sistema.


Comparação entre Runlevels e Targets

RUNLEVEL FUNÇÃO SYSTEMD TARGET
0 Desligar poweroff.target
1 Monousuário rescue.target
2,3,4 Multiusuário multi-user.target
5 Modo gráfico graphical.target
6 Reiniciar reboot.target


Comandos básicos no systemd

#systemctl start serviço
(Inicia um serviço)

#systemctl stop serviço
(Interrompe um serviço)

#systemctl restart serviço
(Reinicia um serviço)

#systemctl status serviço
(Exibe o status do serviço)

#systemctl enable serviço
(Habilita o serviço durante a inicialização do sistema)

#systemctl disable serviço
(Desabilita o serviço durante a inicialização do sistema)



Observação

Mesmo com o uso do systemd, muitos sistemas ainda mantêm compatibilidade com o modelo antigo baseado em /etc/init.d, permitindo utilizar scripts tradicionais.



Shell Script (Exemplo Básico)

Shell Scripts são arquivos que contêm comandos que podem ser executados automaticamente pelo sistema. A seguir, vamos criar um script simples para desligar a máquina.

Passo 1: Criar o arquivo

#touch /tmp/desligar.sh

O comando acima cria um arquivo chamado desligar.sh.



Passo 2: Editar o arquivo

#vim /tmp/desligar.sh


Dentro do arquivo, adicione o seguinte conteúdo:

#!/bin/bash

shutdown -h now

Salve o arquivo pressionando ESC + : wq <enter>.



Passo 3: Dar permissão de execução

#chmod +x /tmp/desligar.sh

O comando acima permite que o arquivo seja executado como um programa.



Passo 4: Executar o script

#/tmp/desligar.sh

Ao executar o script, o sistema será desligado.



Observação

É possível também utilizar o chmod para alterar as permissões de usuários e grupos. Porém, em scripts, o mais comum é utilizar o chmod +x, que adiciona a permissão de execução ao arquivo. Como este script executa um comando administrativo, normalmente ele deve ser executado com privilégios de superusuário.

 






Considerações

Chegamos ao final deste artigo sobre os fundamentos do Linux, com foco especial no Debian e suas principais vertentes. Ao longo deste guia, exploramos desde os conceitos básicos, de o que é o Debian, o projeto GNU, o kernel e a Shell, até tópicos mais avançados, como gerenciamento de processos, runlevels e a transição para o systemd.

O Linux é um universo vasto e em constante evolução. Dominar os comandos e a estrutura do sistema é o primeiro passo para se tornar um administrador ou usuário avançado. Mais do que decorar comandos, o importante é compreender a filosofia por trás do sistema: liberdade, transparência e controle total sobre o ambiente computacional.

As distribuições Linux evoluíram muito desde os primórdios do Slackware e Debian, mas os fundamentos apresentados aqui continuam sendo a base de qualquer sistema GNU/Linux moderno. Seja você um iniciante ou alguém revisando conceitos, esperamos que este material tenha sido útil e esclarecedor.


Próximos Passos

  • Pratique os comandos em um ambiente real. Uma máquina virtual, por exemplo, é uma ótima opção para testes sem riscos.

  • Explore a documentação oficial: man, info e projetos como o The Linux Documentation Project (TLDP).

  • Aprofunde-se em temas como redes, segurança, shell script avançado e administração de servidores.

  • Participe da comunidade: fóruns, grupos de usuários e eventos são ótimas oportunidades para aprender e compartilhar conhecimento.



Referências



“Este documento foi baseado em estudos realizados a partir de 2006, atualizado e revisado para refletir as práticas e comandos utilizados nas distribuições Linux modernas.”



Bons estudos e bem-vindo ao mundo Linux!




Introdução

Este artigo aborda os fundamentos do Linux. Hoje existem dezenas de distribuições, versões e interfaces diferentes, mas os conceitos por trás do sistema continuam os mesmos. Para explicar esses fundamentos, vamos usar o Debian como referência; não uma versão específica, mas a base.

 

O que é Debian?

O Debian é um sistema operacional (SO) livre para o seu computador. Um sistema operacional é um conjunto de programas básicos e utilitários que fazem o seu computador funcionar. O Debian usa o kernel (núcleo de um sistema operacional) Linux, mas a maior parte das ferramentas do SO (sistema operacional) vêm do projeto GNU; daí o nome GNU/Linux.

O Debian GNU/Linux é mais que um simples SO: ele vem com diversos pacotes contendo softwares pré-compilados e distribuídos em um bom formato, que torna fácil a instalação deles na sua máquina.


O que significa GNU?

Projeto GNU, em computação, é um projeto iniciado por Richard Stallman em 1984, com o objetivo de criar um sistema operacional totalmente livre, que qualquer pessoa teria direito de usar, modificar e redistribuir o programa e seu código-fonte, desde que garantindo para todos os mesmos direitos.

Este sistema operacional GNU deveria ser compatível com o sistema operacional UNIX, porém não deveria utilizar-se do código-fonte do UNIX. Stallman escolheu o nome GNU porque este nome, além do significado original do mamífero Gnu, é um acrônimo recursivo de: GNU is Not Unix (em português: GNU não é Unix).



O que é kernel?

O kernel é o centro do sistema operacional, sendo o componente que se comunica diretamente com o hardware, com possibilidade de ser ajustado e compilado de acordo com a plataforma em questão. O kernel compila e gerencia a requisição, seja usando memória, processador ou algum periférico.



O que é Shell?

“Shell” é um interpretador de comandos (ele interpreta os comandos inseridos pelo teclado), ou seja, é o componente que faz a ligação entre o kernel e o usuário. Toda vez que o usuário digitar um comando e pressionar <enter>, a Shell interpreta os comandos e manda para o kernel.


O que é Shell Script?

Shell Script são conjuntos de comandos armazenados em um arquivo que são executados sequencialmente ou de forma condicional.



O que é Exploit?

Exploit é um programa ou código criado para explorar uma vulnerabilidade em um software ou sistema operacional.

No contexto de sistemas UNIX/Linux, o exploit geralmente precisa ser executado no mesmo ambiente e versão para os quais foi desenvolvido. Em alguns casos, ele precisa ser preparado ou compilado antes da execução.

Dependendo da falha explorada, um exploit pode permitir ações como execução de comandos ou tentativa de obtenção de privilégios elevados, como acesso ao usuário root.



O que é root?

Root é o usuário que tem poder total sobre o sistema, ou seja, ele pode criar contas, excluir usuários, criar diretórios etc.



Matrizes (Visão Histórica)

As distribuições listadas abaixo representam matrizes históricas que marcaram a evolução do Linux ao longo das últimas décadas. Elas deram origem a diversas famílias e projetos derivados, servindo como base para experimentações, inovações e para a consolidação dos sistemas que conhecemos hoje.



Famílias de Distribuições (Panorama Atual)
>>>

As distribuições listadas abaixo representam famílias ativas e amplamente utilizadas atualmente, servindo como base para a maioria dos sistemas Linux modernos.


Debian


Red Hat


SUSE


Slackware


Arch



Estrutura de Diretório

Posix (FHS) = “ / ”

POSIX (Portable Operating System Interface)

POSIX (sigla para Portable Operating System Interface, traduzido como Interface Portável entre Sistemas Operacionais) é uma família de normas definidas pelo IEEE e formalmente designada como IEEE 1003. O objetivo dessas normas é garantir que programas possam ser compilados e executados em diferentes sistemas operacionais compatíveis com POSIX, assegurando a portabilidade do código-fonte. Na prática, elas funcionam como uma interface comum entre sistemas distintos. A designação internacional da norma é ISO/IEC 9945.



FHS

O Filesystem Hierarchy Standard (padrão para sistema de arquivos hierárquico), ou FHS, é uma especificação que define a estrutura e o conteúdo dos principais diretórios em sistemas operacionais baseados em Linux e Unix. Seu objetivo é padronizar a organização do sistema de arquivos, garantindo consistência entre diferentes distribuições e facilitando o desenvolvimento de aplicações e a administração do sistema.



Conjunto de Regras

Tudo que pertence ao sistema fica abaixo da raiz, com os principais diretórios:

  • /root – Diretório pessoal do usuário root
  • /home – Diretório dos usuários
  • /etc – Contém os arquivos de configuração
  • /boot – Arquivos de boot + Imagens do kernel
  • /bin – Comandos essenciais do sistema
  • /sbin – Comandos administrativos do sistema
  • /lib – Bibliotecas do sistema
  • /usr – Programas e recursos do sistema
  • /tmp – Arquivos temporários
  • /var – Dados variáveis (ex: e-mails, impressão, caches, logs etc.)
  • /dev – Dispositivos do sistema (representação do ambiente físico)
  • /mnt – Pontos de montagem
  • /proc – Diretório virtual do kernel (representa o estado do kernel em tempo de execução)
  • /opt – Softwares opcionais / terceiros
  • /srv – Dados de serviços (Web, FTP etc.)



No Linux existem vários terminais virtuais chamados TTYs (tty1, tty2, tty3...).

Podemos alternar entre eles usando as teclas: Ctrl + Alt + F1, F2, F3 etc.

Cada TTY executa um shell (como bash ou zsh).

Além disso, existe a interface gráfica, que roda separadamente dos terminais e pode variar dependendo do sistema.



Comandos Base

O comando cd é usado para navegar entre diretórios no Linux. Com ele, você pode acessar um diretório específico, voltar para o diretório anterior ou ir diretamente para o diretório pessoal do usuário. No Linux, as pastas são chamadas de diretórios.

O nome cd vem de change directory (mudar de diretório) sendo o comando principal para se movimentar dentro do sistema Linux.

#cd /etc/default
(Entrar no diretório)

cd = comando para mudar de diretório (change directory)

/etc/default = o caminho do diretório onde você quer entrar

 

#pwd

(Comando que mostra o caminho atual (print working directory))

O comando acima serve para exibir exatamente em qual diretório você está trabalhando no momento.

 

#cd ..
(Voltar um diretório) (diretório pai)
 
#cd 
 
(Voltar ao diretório anterior)
 

 

 
#ls /etc
(Listar tudo que contém no diretório alvo (arquivos e subdiretórios))
 

 

 

Na listagem com o comando: “ls”, pode apresentar algumas cores, que tem o seguinte significado:

Branco = Arquivos comuns (textos, códigos)
Azul = Diretórios (pastas)
Ciano = Links (atalhos / estrutura de um ponteiro)
Verde = Executáveis (programas ou scripts com permissão)
Vermelho = Arquivos compactados (ex: .zip, .tar.gz)
Rosa = Arquivos de mídia (imagens e vídeos)
Amarelo/Laranja = Arquivos de dispositivos (hardware)
.nome (com ponto na frente) = Arquivos ocultos


 
#ls -a ~
(Exibir os arquivos ocultos, o “-a” é o parâmetro que mostra os arquivos)

-a = all (tudo)
O caracter ~ (til) representa o diretório home do usuário atual
 

 

 
#ls -lh /etc | less
ls = Lista -l = Formato longo (mostra detalhes em colunas)
h = Formato humano (converte tamanhos para KB, MB, GB) /etc = Diretório alvo
| = Pipe less = Permite a rolagem da lista Com o comando acima vamos listar o conteúdo do diretório de forma detalhada. Neste caso, o primeiro caractere da primeira coluna indica: d = Diretório – = Arquivo l = Link (atalho)
 

 

 
#ls -d /etc
(O parâmetro -d (de directory) diz ao sistema para tratar o diretório como um arquivo comum. Ele mostrará apenas o nome do diretório ou informações sobre ele mesmo, sem entrar nele.)
 

 

 
#ls -ld /etc
(Frequentemente usado para ver as informações detalhadas (permissões, dono, tamanho e data) especificamente do diretório /etc, e não do que está lá dentro.)
 

 

 
#ls -lh /etc | grep ^d
ls -lh = Lista detalhes em formato humano | = Envia o resultado para o próximo comando grep ^d = Filtra linhas que começam com "d" (diretórios) Com o comando acima vamos listar apenas os diretórios que estão dentro de /etc.
 

 

 
#file /etc
(O comando file mostra qual é a “extensão” real (o tipo de conteúdo) e traz informações adicionais sobre o arquivo ou diretório em questão.)

OBS: No Linux, o comando file é mais potente que a extensão do nome, pois ele lê o "DNA" do arquivo para saber se ele é um texto, uma imagem ou um diretório.
 

 

 
#du
(Exibe o tamanho total de um diretório e de todos os diretórios que estão dentro dele.)
 

 

 
#du -hs ~

h = Mostrar os arquivos em MB, Gb etc
s = Resume tudo, somando o conteúdo para retornar uma linha com o valor
~ = Diretório em questão
 

 

 
#df -h /tmp
(Exibe o espaço total, o quanto está sendo utilizado e o espaço disponível na partição onde o diretório informado está localizado.)
 

 

 
#touch
(Criar um arquivo)

Exemplo: #touch /tmp/teste
 

 

 
#mkdir
(Criar um diretório)

Exemplo: #mkdir /tmp/pasta
 

 

 
#cp
(Copiar um arquivo)

Exemplo: #cp /tmp/teste /tmp/pasta
 

 

 
#mv
(Comando para mover arquivos)

Exemplo: #mv /tmp/teste ~
 

 

 
#mv ~/teste ~/doc
(O comando mv também renomeia arquivos)
 

 

 
#rm
(Remove arquivos)

Exemplo: #rm ~/doc
 

 

 
#rm -f ~/nomedoarquivo

-f (force) = Força a exclusão. Ele ignora arquivos protegidos contra escrita e oculta mensagens de erro caso o arquivo não exista.
OBS: O comando rm sozinho deleta o arquivo imediatamente sem fazer perguntas (desde que você seja o dono dele e tenha permissão de escrita). O parâmetro -f só é necessário em cenários específicos.
 

 

 
#rmdir
(Remove diretórios)

Exemplo: #rmdir /tmp/pasta
 

 

 
#rm -rf
(Remove o diretório com todos os arquivos dentro)

Exemplo: #rm -rf /tmp/pasta
 

 

 

 

 

Antigamente, em sistemas com o kernel 2.6, o comando locate (que serve para localizar arquivos) já vinha instalado por padrão. Atualmente, em distribuições modernas, o sistema GNU/Debian vem mais enxuto, então precisamos instalá-lo manualmente com o comando sudo apt install plocate antes de usar.

 
#sudo apt install plocate
(Instala o pacote plocate)
 
sudo = Super User Do (Super usuário faça) - Dá permissão de administrador para o comando.
apt = Gerenciador de pacotes do Debian.
install = Ação de instalar.
 




 

Logo abaixo segue um exemplo:

 
#locate
(Localiza arquivos)
 
Exemplo: #locate -i arquivo
 



Quando o comando locate não funcionar utilizamos o comando sudo updatedb.

O comando updatedb vai atualizar o banco de dados interno do sistema, permitindo que o locate encontre os novos arquivos.

 
#sudo updatedb
(Atualiza o banco de dados interno do sistema)
 




O comando find é uma ferramenta que busca arquivos e diretórios em tempo real diretamente no disco rígido. Ele permite fazer buscas avançadas filtrando por nome, tamanho, tipo de arquivo ou data de modificação.

 
#find
(Localiza arquivos)
 


Exemplo:

 
#find /etc -name "*.conf"
(comando buscar) (diretório) (filtro por nome) (padrão de extensão)
[Busca dentro do diretório /etc por todos os arquivos que terminam com a extensão .conf]
 


Outro exemplo de find:

 
#find /var -size +50k
(comando buscar) (diretório alvo) (tamanho) (arquivos acima de 50k)

[Busca dentro do diretório /var por arquivos com tamanho acima de 50 Kilobytes] 
Ou seja, esse comando informa ao sistema: "Localize neste diretório arquivos acima de 50k".
 



Comandos para Reiniciar o Sistema

 
#init 6

#reboot

#shutdown -r now
(Todos os comandos acima reiniciam o sistema)
 

 

 

Comandos para Desligar o Sistema

 
#poweroff

#init 0

#halt ### - ⚠️ Cuidado: Não é recomendado em ambientes com usuários ativos ou processos críticos, pois pode encerrar tudo de forma abrupta. - ###

#shutdown -h now
(Todos os comandos acima desligam o sistema)
 

 

 

Comandos para Manipulação de Texto

 
#cat /etc/passwd
(Visualiza todo o conteúdo do arquivo)
 

 

 
#cut -f1 -d : /etc/passwd > /tmp/usuarios

cut = Corta/extrai pedaços de texto de um arquivo.
-f1 = Indica a coluna que você quer pegar (neste caso, a coluna 1)
-d : = Indica o divisor de colunas (o caractere : é o separador)
> = Redireciona a resposta para criar ou sobrescrever um arquivo
 

 

 
#uniq
(Elimina informações duplicadas em um arquivo)
 

 

 
#sort
(Ordena um arquivo na tabela ASCII)
 

 

 
#man ascii
(Exibe a tabela ASCII)
 

 

 
#echo " lionn "
(Exibe o texto no terminal)
 

 

 
#echo linux | tr a-z A-Z
echo = Exibe
linux = Texto em questão
| (Pipe/Canalização) = Ele pega a saída do comando da esquerda (echo linux) e joga direto como entrada para o comando da direita (tr). Ele funciona como um tubo condutor.
tr = Troca
a-z = Fonte minúscula
A-Z = Fonte maiúscula
 

 

 

O Comando grep

 

Nos primórdios do Unix, os programadores utilizavam um editor de texto chamado ed.

 

Dentro desse editor era possível procurar padrões de texto utilizando a seguinte expressão:

 
g/re/p
 


Onde:

 
g = Global (procura em todo o arquivo)
re = Regular Expression (expressão regular ou padrão de busca)
p = Print (exibe as linhas encontradas)
 


Esse comando significava:

 
"Procure em todo o arquivo as linhas que correspondem à expressão informada e exiba os resultados."
 


A expressão era tão utilizada por administradores e programadores que acabou dando origem a um comando próprio do sistema operacional. Assim surgiu o comando: grep cujo nome deriva diretamente de: g/re/p e que até hoje é utilizado para localizar palavras, textos e padrões em arquivos ou na saída de outros comandos.

 

 

 

Abaixo alguns exemplos da utilização do comando grep...

 
#grep "root" /etc/passwd 

Procure a palavra "root" dentro do arquivo /etc/passwd e mostre as linhas encontradas. 
 

 

 
#grep -r "root" /etc/

Procure a palavra "root" em todos os arquivos dentro do diretório /etc e também em seus subdiretórios.
 

 

 


Um exemplo mais avançado utilizando o comando grep logo abaixo... A explicação é a seguinte: Primeiro o grep seleciona todas as linhas do arquivo que não começam com a letra "g" minúscula. Em seguida, o pipe envia esse resultado para o comando od. O parâmetro -a faz com que o conteúdo seja exibido mostrando também caracteres especiais, como espaços e quebras de linha, utilizando nomes legíveis.

 
#grep -v ^g /tmp/arqs | od -a

grep = Procura padrões de texto
-v = Inverte a busca (mostra as linhas que NÃO correspondem ao padrão)
^g = Indica linhas que começam com a letra "g" (o símbolo ^ representa o início da linha)
arqs = Arquivo pesquisado | (Pipe) = Pega o resultado do grep e passa para o od od = Exibe o conteúdo em formatos de despejo (dump) -a = É a opção que força o od a mostrar o conteúdo como caracteres nomeados (caracteres normais e caracteres de controle legíveis, como nl para nova linha ou sp para espaço)
 


O exemplo do comando grep acima era utilizado para analisar o conteúdo de arquivos em detalhes, inclusive caracteres invisíveis como espaços, tabulações e quebras de linha. Atualmente existem ferramentas mais práticas para essa tarefa, por isso esse tipo de combinação é menos comum na administração moderna de sistemas Linux.

 

 

 


Documentação

 

O Linux possui diversos recursos de documentação integrados. Existem também projetos externos como o The Linux Documentation Project (https://tldp.org), contendo guias, tutoriais e documentação técnica.

Documentação Externa (TLDP):

 
  •  
  • Tutoriais > documentação detalhada sobre diversos tópicos Linux.

  •  
  • HOWTOs > guias práticos para executar tarefas específicas no sistema.


  •  
 

Dúvidas sobre um comando?

 
#rm --help
(Exibe a ajuda rápida sobre o comando rm)
 



Ou então você pode utilizar o comando less através do pipe para permitir a rolagem da saída do terminal...

 
#rm --help | less
rm = Comando para remover
--help = Exibe a ajuda rápida do comando
| less = Permite a rolagem da saída no terminal

(Exibe a ajuda rápida sobre o comando rm com rolagem no terminal)
 

 

 
#man ip
(Abre o manual completo do comando)
 

 

 
#whereis ip
(Exibe a localização do binário e arquivos relacionados ao manual)
 

 

 
#which grep
(Exibe o caminho exato do executável)
 

 

 
#whatis
(Exibe uma descrição resumida do comando)

Exemplo: #whatis cut
 

 

 
#apropos
(Procura comandos relacionados a uma determinada palavra-chave)

Exemplo: #apropos copy (Vai exibir comandos relacionados ao copy)
 

 

 
#mandb
(Atualiza a base de dados utilizada pelos comandos whatis e apropos)
 

 

 

 

 

 

 

Comandos para verificar a versão da distribuição e do kernel...

 

 

 

Abaixo seguem dois exemplos para verificar a versão da distribuição Linux.

 
#cat /etc/os-release
(Exibe informações detalhadas da distribuição)
 


Segundo exemplo:

 
#lsb_release -a
(Exibe um resumo das principais informações da distribuição)
 

 

 

 

 

Agora, mais dois exemplos para verificar a versão do kernel...

 
#uname -a
(Exibe informações detalhadas do kernel e do sistema)
 

 

 

Segundo exemplo:

 
#uname -r
(Exibe apenas a versão do kernel)
 

 

 


Verificando a versão da distro: Debian 3.1

 
  •  
  • Stable (Sarge) = versão estável e recomendada para uso em produção (amplamente testada)

  •  
  • Unstable (Etch) = versão em desenvolvimento
  •  
 

OBS: Os exemplos acima fazem referência ao Debian da época dos estudos originais (2006).

 

 

 

Atualmente, o Debian continua utilizando diferentes ramificações de desenvolvimento.

 
  •  
  • Stable = versão estável e recomendada para produção

  •  
  • Testing = próxima versão estável em fase de testes

  •  
  • Unstable (Sid) = desenvolvimento contínuo
  •  
 


Embora os nomes das versões mudem ao longo do tempo, o Debian continua utilizando as ramificações Stable, Testing e Unstable.

 

 

 


Instalando o Debian

 

Na época do Debian 3.1, o sistema utilizava o kernel Linux 2.4 como padrão, existindo também versões alternativas com kernel 2.6.

 

OBS: Esta documentação foi baseada em estudos realizados sobre o Debian no ano de 2006.

 

Significado da versão do Kernel:

 

Versão = 2.6.8

 
  •  
  • 2 → versão principal (major).
  •  
  • 6 → versão secundária (minor) - números pares indicavam versões estáveis.
  •  
  • 8 → revisão (patch) - correções e melhorias.
  •  
 

O kernel Linux continua utilizando o mesmo conceito de versionamento, porém com versões muito mais recentes.

 

 

 

Evolução do Linux: Do Debian 3.1 aos Debian Modernos

 

O ecossistema Linux mudou drasticamente nas últimas décadas. Este artigo traça um paralelo entre o processo de instalação e particionamento da época do Debian 3.1 Sarge / 4.0 Etch e as diretrizes utilizadas atualmente no Debian.

 


1. A Inicialização do Instalador (Boot)

 

Na época: A instalação era feita via CDs. Na tela de boot, o usuário precisava digitar comandos manuais como linux26 para forçar o instalador a usar o kernel Linux 2.6, que era a versão mais moderna da época, em vez do antigo kernel 2.4.

 

Atualmente: O boot é feito via Pen Drive USB (usando ferramentas como Ventoy ou Rufus). O hardware moderno roda em modo UEFI e o menu do GRUB 2 inicia tudo de forma visual e automática. Parâmetros manuais de kernel raramente são necessários.


 

2. A Evolução do Hardware e Armazenamento

 

A forma como o Linux enxerga os discos mudou com a extinção dos cabos IDE e a chegada dos SSDs de altíssima velocidade.

 
Característica O Padrão Antigo O Padrão Atual
Interface de Disco Cabos IDE (Master / Slave) Conexões SATA III e NVMe M.2
Nomenclatura /dev/hda, /dev/hdb /dev/sda (SATA) ou /dev/nvme0n1 (NVMe)
Tabela de Partição MBR (Máximo de 4 partições primárias) GPT (Até 128 partições)
Estrutura lógica Partições Estendidas e Lógicas Tornou-se muito menos comum com a adoção do GPT
 



3. Configuração de Rede

 

Na época: Embora o DHCP já existisse, a configuração manual era frequente devido à falta de drivers nativos no instalador para muitas placas de rede (especialmente placas Wi-Fi e PCMCIA). Era comum ter de configurar IPs fixos, máscaras e DNS de provedores locais na unha após a instalação, além de usar nomes de domínios simples para redes internas (ex: LIONN).

 

Atualmente: O instalador detecta automaticamente a grande maioria das placas de rede modernas e configura tudo via DHCP (IPv4 e IPv6) de forma automática. Além disso, a resolução de nomes mudou drasticamente, popularizando o uso de DNS globais de alta velocidade como Cloudflare (1.1.1.1) e Google (8.8.8.8).


 

4. Batalha dos Sistemas de Arquivos (File System)

 

O conceito de Journaling (registro de operações para evitar corrupção de dados) tornou-se padrão no Linux moderno.

 

O padrão antigo: O ecossistema era dividido entre EXT2 (sem journaling), EXT3 (com journaling), ReiserFS, JFS e XFS.

 

O padrão atual: O EXT4 tornou-se o sistema de arquivos padrão na maioria das distribuições Linux. O XFS evoluiu para grandes servidores e o Btrfs ganhou destaque com recursos de snapshots.

 

Status de Obsolescência: O ReiserFS foi removido do kernel Linux por abandono do projeto.


 

5. Estrutura de Particionamento do HD (Ontem vs. Hoje)

 

A evolução do tamanho dos sistemas e dos arquivos mudou drasticamente o espaço necessário para rodar o Linux.

 


Como era feito antigamente

 

Antigamente, separar diretórios como /usr, /var e /tmp era comum para evitar que logs ou arquivos temporários afetassem o sistema.

 
/root (15 MB)      -> /dev/hda1
/ (500 MB)         -> /dev/hda2
Swap (2x RAM)      -> /dev/hda3
/usr (15 GB)       -> /dev/hda5
/var (300 MB)      -> /dev/hda6
/tmp (200 MB)      -> /dev/hda7
/home (3 GB)       -> /dev/hda8
 



Como é feito atualmente

 

Hoje, subdividir excessivamente o sistema doméstico caiu em desuso. O Debian moderno exige muito mais espaço e utiliza arquitetura UEFI.

 
/boot/efi (512 MB)
Partição obrigatória para sistemas UEFI

/ (40 GB a 50 GB)
Partição raiz principal

Swap (2 GB a 4 GB)
Área de memória virtual

/home (Restante do disco)
Arquivos pessoais dos usuários
 



Observações

 

Apesar de todas as mudanças em hardware, particionamento e sistemas de arquivos, o coração da inicialização do Debian continua fiel ao GRUB. O GRUB evoluiu para o GRUB 2, adaptou-se ao padrão UEFI e continua sendo a ponte entre o Linux clássico e o Linux moderno.

 



 

Documentação Histórica (2006)

 

Os trechos abaixo foram preservados da documentação original utilizada nos estudos da época.

 

Após colocar o CD no driver, na tela de boot digite:

 
linux26
 



Configuração de Rede

 

No processo de instalação selecionar a configuração manual:

 
Endereço IP = 192.168.0.3

Mascara = 255.255.255.0

Gateway = 192.168.0.1

Domínio = LIONN

DNS = 200.204.0.10

Nome da maquina = Micro01
 



Particionar Disco

 

Editar manualmente a tabela de partições.

 

Filesystem
O Filesystem padrão da época utilizava principalmente EXT2 e EXT3.

 
  •  
  • REISERFS* - Suporta 256 TB
  •  
  • JFS* - Suporta 256 TB
  •  
  • XFS* - Suporta 2 EB
  •  
 

*Journaling = Grava logs do sistema de arquivos. Em caso de falhas, o sistema pode utilizar os logs para recuperação de dados.

 



Esquema de Partição HD

 

No modelo MBR, o sistema podia ter até 4 partições primárias. As partições lógicas eram identificadas após a quinta partição.


 

Partições Primárias

 
HD1 = 15 Mb  -> /root -> /dev/hda1
HD2 = 500 Mb -> /     -> /dev/hda2
HD3 = 2xRam  -> Swap  -> /dev/hda3
 



Partições Lógicas

 
HD5 = 15 Gb  -> /usr  -> /dev/hda5
HD6 = 300 Mb -> /var  -> /dev/hda6
HD7 = 200 Mb -> /tmp  -> /dev/hda7
HD8 = 3 Gb   -> /home -> /dev/hda8
 

Na tabela acima, o HD4 representava a partição estendida. Sem a partição estendida não era possível criar partições lógicas.

 

A partição estendida era uma partição primária que continha partições lógicas.



 

.....:::::.  GRUB → Boot Loader do Sistema
(Inicialização do Sistema)  .::::.....

 

(O GRUB é responsável pela inicialização do sistema operacional durante o processo de boot)

 



Comandos Extras

 
#history
(Exibe os comandos que você executou no terminal)
 

 

 
#history -c
(Limpa o histórico de comandos)

Caso você não se recordar de um comando, basta digitar o começo do comando e depois apertar a tecla <TAB> para completar a informação.
 

 

 
#date
(Exibe a data e hora do sistema)
 

 

 
#uptime
(Exibe há quanto tempo o sistema está em execução)
 

 

 
#whoami
(Exibe o nome do usuário atual)
 

 

 
#hostname
(Exibe o nome da máquina)
 

 

 
#clear
(Limpa o terminal)

OBS: Você também pode utilizar as teclas CTRL + L para realizar a mesma operação.
 

 

 



Editor de Texto Padrão

 

O editor de texto padrão no Linux é o VI. O VIM é uma versão aprimorada e compatível com o VI.

 

Na época do Debian 3.1, era comum utilizar o gerenciador de pacotes Aptitude para instalar programas no sistema.

 

Para instalar o editor de texto VIM, utilizava-se o comando abaixo:

 
#aptitude install vim
 



OBS: Atualmente, as distribuições Linux baseadas em Debian utilizam predominantemente o comando apt para gerenciamento de pacotes. O comando equivalente é o seguinte:

 
#apt install vim
 

 

 

Testando o VIM...

 
#vim /tmp/doc.txt
 

 

 

No VIM
Para entrar no modo de edição, pressione a tecla:  i 

 
<tecla> i
 


Modo comando: <ESC>

 

Comandos VIM:

 
yy → Copia a linha atual
p → Cola a linha copiada
cc → Substitui a linha atual
dd → Deleta a linha atual
x → Remove o caractere sob o cursor (igual à tecla <DEL>)
v → Entra no modo Visual (seleção de texto)
gg → Vai para o início do arquivo
G → Vai para o final do arquivo
 



Modo de Linha de Comando

 

No modo de linha de comando é possível executar comandos de gerenciamento do arquivo.
Para acessar esse modo, pressione a tecla <ESC> + :

Comandos:

 
: set nu →  Numera as linhas do arquivo
: set nonu →  Retira a numeração de linhas do arquivo
: w → Salva o arquivo
: wq →  Salva e sai
: q! →  Sai sem salvar
 



Dispositivos

 

Os exemplos a seguir utilizam dispositivos bastante comuns na época em que este material foi elaborado, como disquetes e unidades de CD-ROM. Embora esses dispositivos sejam raramente utilizados atualmente, os comandos apresentados ajudam a compreender como o Linux realiza o gerenciamento de dispositivos de armazenamento.

 
#fdformat /dev/fd0
(Formata o disquete)
 

Observação

 

O comando fdformat não está mais incluso na instalação padrão do sistema, pois os disquetes são considerados obsoletos. Caso queira testar este comando em máquinas virtuais ou hardware antigo, instale-o com:

 
#sudo apt update

#sudo apt install fdformat
 

E lembre-se: para disquetes de alta densidade (1.44MB), utilize o dispositivo específico, como /dev/fd0H1440, em vez de apenas /dev/fd0.

 

 

 

Embora o exemplo abaixo utilize um disquete, o comando mkfs continua sendo utilizado atualmente para criar ou recriar sistemas de arquivos em dispositivos modernos, como pendrives, HDs, SSDs e outras mídias de armazenamento.

 
#mkfs -t ext2 /dev/fd0

mkfs → Cria um sistema de arquivos (filesystem)
-t → Define o sistema de arquivos (filesystem)
ext2 → Sistema de arquivos (filesystem) utilizado
fd0 → Unidade de disquete
 

Observação

 

A utilização do comando mkfs apaga permanentemente todos os dados existentes no dispositivo selecionado.


 
#mkboot
(Cria um disco de boot)
 

Observação

 

O comando mkboot fazia parte de distribuições Linux antigas e atualmente não está presente na maioria das distribuições modernas. Ele é apresentado apenas para preservar o conteúdo histórico deste material.

 

 

 

 

 
#touch /media/floppy/teste
(Cria um arquivo vazio no diretório)
 

 

 
#mount -t ext2 /dev/fd0 /media/floppy
(Monta o dispositivo de disquete)
 

 

 
#df
(Exibe os sistemas de arquivos montados)
 

 

 
#umount /dev/fd0
(Desmonta o dispositivo de disquete)
 

 

 
#eject
(Abre a bandeja do CD-ROM)
 

 

 
#eject -t
(Fecha a bandeja do CD-ROM)
 

 

 
#mount -t iso9660 /dev/cdrom /media/cdrom
(Monta o dispositivo de CD-ROM)

*ISO9660 – Sistema de arquivos (filesystem) do CD-ROM
 

 

 
#ls -l /dev/cdrom
(Lista o dispositivo de CD-ROM)
 

 

 
#dmesg | grep -i atapi

dmesg = Exibe o log de inicialização
grep = Procura padrões de texto
-i = Ignora diferenças entre letras maiúsculas e minúsculas
atapi = CD-ROM

O comando acima exibe informações do CD-ROM registradas durante a inicialização do sistema.
 



Manipulando Partições

 

Os comandos apresentados nesta seção mostram como o Linux realiza o gerenciamento de partições e sistemas de arquivos. Embora alguns exemplos utilizem nomenclaturas antigas, como /dev/hda e o sistema de arquivos ext3, os conceitos apresentados continuam sendo amplamente utilizados nas distribuições Linux atuais.

 
#cfdisk
(Cria e gerencia partições por meio de uma interface em modo texto)
 

 

 
#fdisk -l
(Lista todas as partições existentes no sistema)

Exemplo: #fdisk -l /dev/hda
 

 

 
#df
(Exibe os sistemas de arquivos montados e seus pontos de montagem)
 

 

 
#mkfs -t ext3 /dev/hda9

Explicando o comando acima...

mkfs = Cria um sistema de arquivos (formata a partição)
-t = Define o sistema de arquivos (filesystem)
ext3 = Sistema de arquivos (filesystem)
hda9 = Disco em questão
 

 

 

Fazendo o ponto de montagem:

 
#mkdir /mnt/backup
(Cria o diretório que será utilizado como ponto de montagem da partição.)
#mount -t ext3 /dev/hda9 /mnt/backup (Monta a partição no diretório criado, tornando seu conteúdo acessível ao sistema.) #touch /mnt/backup/arqteste (Cria um arquivo de teste dentro da partição montada.)
 


Para desmontar o dispositivo /dev/hda9, utilize o comando abaixo:

 
#umount /dev/hda9
 



O arquivo fstab, localizado no diretório /etc, faz parte da configuração do sistema e é utilizado para definir a montagem automática de partições.

 

Visualizando o conteúdo do arquivo fstab:

 
#vim /etc/fstab

Na tabela (/etc/fstab) =
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

RW: Leitura / Gravação
RO: Somente leitura
AUTO: Montando automaticamente
NOAUTO: Montar manualmente
USER: Qualquer usuário pode montar/acessar
NOUSER: Apenas o root monta
EXEC: Executar binários
DEFAULTS = RW, AUTO, NOUSER, EXEC

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

5° coluna
DUMP → Ele é um utilitário usado para fazer backup(ext2). Ele tem dois valores: 0 e 1

0 = Não executa na inicialização
1 = Executa a função (de backup)

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

6° coluna
FSCK → Ele faz o “Scandisk”, possui 3 valores

0 = Não executa na inicialização
1 = Executa na inicialização porém só pode ser associado na raiz ( / )
2 = Executa na inicialização
 

 

 

Para montar a partição automaticamente entre no arquivo com vim /etc/fstab e inserir na última linha do arquivo o comando:

 
/dev/hda9 /mnt/backup ext3 defaults 0 2
 

 

 

Feito isso, salve o arquivo, retorne ao terminal e utilize o comando:

 
#mount -a
(Aplica as configurações definidas no arquivo /etc/fstab)
 


Verifique com o comando abaixo:

 
#df 
(Informa se a partição foi montada ou não)
 

 

 



 

 

 

Personalizando comandos com Alias

 

O Bash permite criar atalhos para comandos utilizados com frequência por meio do recurso conhecido como alias. Isso facilita a execução de comandos longos ou repetitivos, tornando o uso do terminal mais prático no dia a dia.

 
#ls --color=auto /etc
(Comando para inserir cores na listagem de arquivos)
 

 

 
#alias
(Lista os aliases atualmente configurados)

Exemplo:

#alias ls=’ls --color=auto’ 
(Definindo cores para o ls) #alias desligar=’init0’
(Definindo a palavra desligar ao init0)
 

Observação

 

Os exemplos acima são mantidos apenas para preservar o conteúdo histórico deste material. Atualmente, comandos como init0 e operações envolvendo unidades de CD-ROM são pouco utilizados nas distribuições Linux modernas.

 

 

 

Exemplos atuais

 
#alias cls='clear'
(Cria um atalho chamado cls para limpar a tela do terminal)
 

 

 
#alias ll='ls -lha'
(Cria um atalho para exibir uma listagem detalhada dos arquivos)
 

 

 

Removendo um alias

 


Para os exemplos do material original:

 
#unalias ls
 

 

 
#unalias desligar
 


Para os exemplos atuais:

 
#unalias cls
 

 

 
#unalias ll
 



 

Tornando o alias permanente

 

Para deixar o alias salvo no sistema, verifique os arquivos:

 
  •  
  • /etc/bash.bashrc → (alias globais)

  •  
  • ~/.bashrc → (alias locais)

  •  
 
#vim ~/.bashrc
(Vamos editar o bashrc)

$ → antes do comando significa que ele chama uma variável
 

 

 

No arquivo adicione o comando:

 
Exemplos atuais de alias:
alias cls='clear'
alias ll='ls -lha'
#########################################################################################
# Abaixo segue os exemplos antigos de alias no Debian 3.1 #########################################################################################
alias desligar=’init0’ alias cdrom=’eject;echo “Coloque o CD”; sleep 5; eject -t; mount /dev/cdrom; df’
#########################################################################################
 

 

 
#source ~/.bashrc
(Recarrega o arquivo ~/.bashrc, aplicando imediatamente as alterações)
 



Manipulando Variáveis

 

Os comandos apresentados nesta seção demonstram como criar, visualizar e manipular variáveis no Linux. As variáveis são utilizadas para armazenar informações que podem ser acessadas pelo shell, por programas e pelo próprio sistema operacional, facilitando a configuração do ambiente e a execução de comandos.

 
#Unix="BSD"
(Definindo um valor para a variável)

#echo $Unix
(Para ver o valor da variável)
 



O comando set exibe variáveis disponíveis na sessão atual do shell. Já o comando env mostra as variáveis de ambiente exportadas.

 
#set | grep -i Unix
(Exibe a variável definida na sessão atual do shell)
 

 

 
#env | grep -i Unix
(Exibe as variáveis de ambiente exportadas)
 

 

 

O comando export transforma essa variável em uma variável de ambiente, permitindo que ela seja herdada pelos processos iniciados a partir da sessão atual.

 
#export Unix
(Exporta a variável para os processos iniciados na sessão atual)
 



O Linux já possui diversas variáveis de ambiente predefinidas. Entre elas estão $USER, que identifica o usuário atual; $HOSTNAME, que informa o nome da máquina; $PATH, responsável por armazenar os diretórios onde o sistema procura comandos executáveis; e $PS1, utilizada para definir a aparência do prompt do terminal.

 
#echo $USER
(Exibe o usuário atualmente logado)
 

 

 
#echo $HOSTNAME
(Exibe o nome da máquina)
 

 

 
#echo $PATH
(Exibe os diretórios onde o sistema procura comandos executáveis)
 



Podemos alterar temporariamente o prompt atribuindo um novo valor à variável $PS1.

 
#echo $PS1
(Mostra: \h → Nome da máquina, 
\w → Caminho absoluto do diretório, 
\$ → Identificador do usuário)
 

 

 
#PS1="Lionn> "
(Altera/Personaliza o valor do prompt)

Opções para PS1
\u → Nome do usuário
\t → Hora
\w → Caminho
 



Até agora trabalhamos com variáveis válidas apenas para a sessão atual do terminal. Para que elas sejam carregadas automaticamente a cada novo login, podemos defini-las em arquivos de configuração do Bash.

 
  •  
  • /etc/profile → variáveis globais

  •  
  • ~/.profile → variáveis locais

  •  
 

O arquivo /etc/profile é utilizado para configurações globais do sistema. Já o arquivo ~/.profile, localizado no diretório pessoal do usuário, armazena configurações específicas desse usuário.



Para finalizar esta seção, vamos conhecer alguns arquivos do sistema relacionados às informações exibidas durante o processo de login.

 
#cat /etc/issue
(Exibe informações apresentadas antes do login local)
 

 

 
#cat /etc/motd
(Exibe a mensagem do dia (Message of the Day))
 

 

 
#cat /etc/issue.net
(Exibe a mensagem apresentada em conexões remotas, como SSH, quando configurada)
 



Gerenciamento de Programas

 

Os programas no Linux são distribuídos em pacotes. Cada distribuição utiliza o seu próprio formato de pacote e ferramentas específicas para instalar, atualizar, remover e gerenciar esses softwares.

 
  •  
  • Red HatRPM → Pacotes .rpm

  •  
  • SlackwarePKG-TOOL → Pacotes .tgz

  •  
  • DebianDPKG → Pacotes .deb

  •  
 
#dpkg -l | more
(Exibe todos os programas instalados no sistema)
 

 

 
#dpkg -l | wc -l
(Exibe a quantidade de pacotes instalados)
Explicação do comando: (dpkg = gerenciador de pacotes do Debian) (-l = lista) (wc -l = conta a quantidade de linhas da saída)
 

 

 
#dpkg -l | grep ssh
(Exibe se o pacote ssh está instalado no sistema)
 

 

 
#dpkg -l 's*'
(Exibe resultados relacionados ao padrão informado)
Outra forma para filtrar pacotes por nome é utilizando o comando abaixo:

#dpkg -l | awk '$1=="ii" && $2 ~ /^s/'
(Filtra pacotes instalados (ii) cujo nome do pacote começa com “s”)
 

 

 
#dpkg -L vim
(Exibe todos os arquivos instalados pelo pacote vim)
 

 

 
#dpkg -S /usr/bin/ls
(Identifica qual pacote instalou o arquivo informado)
 



 

Observações

 

Os comandos listados abaixo fazem parte dos estudos originais deste artigo (2006) e foram mantidos por questões históricas.

 
#mount /dev/cdrom
(Monta a mídia de instalação no sistema de arquivos)
#cd /media/cdrom/pool/main
(Acessa o diretório principal onde os pacotes do Debian estão armazenados no CD-ROM)
#cd v/vlock
(Acessa o diretório que contém o pacote vlock)
#dpkg -I vlock (Exibe informações detalhadas sobre um pacote .deb antes da instalação)
 

 

 
#dpkg -c vlock
(Exibe os arquivos e diretórios contidos no pacote .deb)
 

 

 
#dpkg -i vlock
(Instala um pacote .deb manualmente)
 



Testando o pacote vlock

 
#vlock -a
(travar) (todos os terminais) -a = all (todos)
 

 

 
#dpkg --purge vlock
(Remove o pacote e seus arquivos de configuração)
 

 

 

Evolução do gerenciamento de pacotes

 

Os comandos acima fazem parte de uma forma mais antiga de utilização do Debian, quando era comum a instalação de pacotes a partir de mídias físicas (como CD-ROM). Atualmente, o gerenciamento de pacotes é feito principalmente por meio de repositórios online, utilizando o APT, o que torna o processo mais rápido, seguro e automático.

 

A partir deste ponto, o conteúdo do artigo passa a utilizar os métodos modernos de gerenciamento de pacotes no Debian.


 

 

 

Gerenciamento moderno de pacotes (APT)

 

Além do DPKG, o Debian utiliza o APT (Advanced Package Tool), responsável por automatizar o gerenciamento de pacotes. O arquivo sources.list armazena os repositórios utilizados pelo sistema.

 
#cat /etc/apt/sources.list
(Exibe a lista de repositórios utilizados pelo APT)
### Legado ### [binary - n° = Indica o número do CD para inserir no PC para instalar] - (Entrada de repositório baseada em CD-ROM - Comum em instalações antigas)
###################################################################################################################################################
 

 

 
#vim /etc/apt/sources.list
(Edita a lista de repositórios de onde o APT obtém os pacotes)
 

 

 
#apt-setup
(Ferramenta utilizada para configurar os repositórios do APT)
 

 

 
#apt-get update
(Atualiza a lista de pacotes disponíveis nos repositórios)
 

 

 
#apt-cache search office | less
(Pesquisa pacotes disponíveis nos repositórios)
 

 

 
#apt-cache showpkg bluefish | less
(Exibe informações e dependências do pacote)
 

 

 
#apt-get install lynx
(Instala o pacote)
 

 

 
#apt-get clean
(Limpa o cache de pacotes baixados pelo APT)
 

 

 
#apt-get remove lynx
(Remove o pacote)
 

 

 
#apt-get remove --purge lynx
(Remove o pacote e seus arquivos de configuração)
 

 

 
#apt-get upgrade*
(Atualiza os pacotes instalados para versões mais recentes)

⚠️*Cuidado ao usar esse comando...
 

 

 
#apt-get dist-upgrade*
(Realiza uma atualização completa do sistema, podendo instalar ou remover dependências quando necessário)

⚠️*Cuidado ao usar esse comando...
 



Processos

 

Os processos representam todos os programas e serviços em execução no sistema. Cada processo possui um identificador único (PID) e pode ser monitorado, priorizado ou finalizado por meio de comandos específicos do Linux.

PID
→ Identificador único de um processo no sistema.

 
#ps aux | less
(Visualiza os processos) A → Mostra todos os processos U → Mostra o nome do usuário X → Independente do terminal 1° coluna = Nome do usuário 2° coluna = PID = Identificador do processo 3° coluna = %CPU = Consumo de processador (CPU) 4° coluna = %MEM = Consumo de memória 5° coluna = 6° coluna = 7° coluna = TTY (Terminal não tem controle) 8° coluna = STAT = Estado do processo R = Running (Processo em execução) S = Sleeping (Processo dormindo) T = Traced/Stopped (Processo parado ou suspenso) D = Uninterruptible Sleep (Processo aguardando uma operação de entrada/saída (I/O), como acesso ao disco; não pode ser interrompido) 9° coluna = START = Indica quando o processo foi iniciado 10° coluna = TIME = Indica o tempo de CPU utilizado pelo processo 11° coluna = COMMAND = Comando utilizado para iniciar o processo Z = Zombie (Processo finalizado, mas ainda presente na tabela de processos até que seu processo pai colete seu status)
 

 

 
#pstree | more
(Exibe a árvore de processos)
 

 

 
#top
(Monitora os processos em tempo real)

S = Interface que altera o delay de visualização. Depois coloca o n°1 (de 1 em 1 segundo
O top vai mostrar/atualizar as informações de sistema.
P = CPU (indica o uso da CPU, processamento)
M = Memória (indica quais processos estão usando mais memória)
A = Idade (mostra os processos mais recentes)
K = Matar (finalizar um processo)

[Para finalizar um processo, você deve indicar o n° do PID, <ENTER> em seguida colocar n° 9]
 


PRIORIDADE

|-----------------------|----------------------------|--------------------------------|---------------------------|
-20                       -10                                 0                                      10                                20
prioridade alta                                      padrão                                                     prioridade baixa

 


Quanto menor o valor (mais negativo), maior a prioridade do processo.

Prioridades mais baixas são normalmente utilizadas para processos menos importantes, permitindo que processos críticos tenham preferência no uso da CPU.

A prioridade padrão é 0 (zero). Dependendo da necessidade, é possível aumentar ou reduzir esse valor utilizando os comandos nice e renice.


 
#nice -n 10 top
(Define a prioridade de um processo ao iniciá-lo)
 

A coluna NI exibe o valor de prioridade ( nice ) do processo.


pgrep = O comando pgrep localiza o PID de um processo.

 

Exemplo:

 
#pgrep gnome-shell
 


Alterando prioridade do processo:

 
#renice -4 -p [PID]

renice = Alterar prioridade
-4 = Novo valor de prioridade (nice)
-p = Indica o n° do PID
[PID] = n° do PID (exemplo: 2248)
 

 

 
#sleep 200 &
& = Executa o comando em segundo plano

Ao executar o comando com o &, ele apresenta:
[N°]  [N°]
Job   PID
 

 

 
#jobs -l
(Mostra os comandos que estão em segundo plano)
 

 

 
#pgrep <Nome_do_Processo>
(Localiza o PID do processo informado)
 

 

 
#fg %<n° do job>
(Deixa o comando em primeiro plano)

==========================================================
(Sinais para Finalizar Processos)
==========================================================

1 – SIGHUP = (restart)
  Interage direto com o processo
  Tenta restaurar o processo

==========================================================

2 – SIGINT = (ctrl + c)
  Para o processo na hora

==========================================================

9 – SIGKILL = (matar)
Encerra imediatamente o processo

==========================================================

15 – SIGTERM = (sinal padrão)

==========================================================
 

 

 
#kill -9 [n° PID]

kill → Finaliza um processo pelo PID
-9 → Número do sinal
[n° PID] → Código do processo
 

 

 
#killall -9 <Nome_do_Processo>
(Finaliza todos os processos com o nome informado)
 

 

 
#kill -9 `lsof -t -u user`

kill → Matar processo
-9 → Sinal
`lsof -t -u user` → Lista os PIDs dos processos pertencentes ao usuário informado
-t → Pega os PIDs
-u → Somente o usuário
user → Nome do usuário
 



RUNLEVEL (Init)

 

Antes da adoção do systemd, a inicialização do Linux era controlada pelo Init, o primeiro processo iniciado pelo kernel. O Init utilizava os chamados Runlevels, que definiam os diferentes modos de execução do sistema, como modo monousuário, multiusuário, desligamento e reinicialização.

 

Embora os sistemas modernos utilizem o systemd, compreender os Runlevels é importante para entender a evolução da inicialização no Linux.

 

Runlevels = São os diferentes modos de execução do Init. Existem sete modos de execução (Runlevels).


RUNLEVEL Debian

 
0 : Desligar
1 : Monousuário (só inicia com o root)
2 : Multiusuário
3 : Multiusuário
4 : Multiusuário
5 : Multiusuário
6 : Reiniciar
 

 

 

RUNLEVEL Red Hat

 
0 : Desligar
1 : Monousuário (só inicia com o root)
2 : Multiusuário sem rede
3 : Modo texto
4 : (Nada)
5 : Modo gráfico
6 : Reiniciar
 

 

 

RUNLEVEL Slackware

 
0 : Desligar
1 : Monousuário (só inicia com o root)
2 : Multiusuário
3 : Multiusuário
4 : Modo gráfico
5 : (Nada)
6 : Reiniciar
 

 

 

Observações

 

Os comandos apresentados abaixo fazem parte do modelo tradicional baseado no SysV-Init e foram mantidos neste artigo por questões históricas.

 

Nas distribuições Linux atuais, a inicialização do sistema é realizada pelo systemd, tornando comandos como init, /etc/inittab e init q obsoletos ou utilizados apenas para fins de compatibilidade.

 
#init 1
(Altera o Runlevel para o modo monousuário)
 

 

 

Manutenção do sistema de arquivos

 

Os comandos a seguir estão relacionados à verificação do sistema de arquivos. Eles costumavam ser executados no modo monousuário (Runlevel 1), quando o sistema estava com o mínimo de serviços ativos, reduzindo o risco de inconsistências durante a manutenção.

 
#file -s /dev/hda1
(Informa o tipo do sistema de arquivos)
 

 

 
#fsck -t ext3 /dev/hda8
(Verifica e corrige o sistema de arquivos)
 

 

 
#fsck -t ext3 /dev/hda[1,2,3,4,5,6,7,8]
(Executa a verificação do sistema de arquivos em múltiplas partições)
 

 

 

 

 

Inittab - Legado

 

O arquivo /etc/inittab armazenava as configurações do Init, nele era possível definir o Runlevel padrão utilizado durante a inicialização do sistema. Esse arquivo deixou de ser utilizado com a chegada do systemd.

 
#vim /etc/inittab
(Edita o arquivo de configuração do Init, controla o processo principal)

Na linha 5 é definido o Runlevel padrão utilizado na inicialização do sistema

Nas linhas 32 e 33 é possível alterar o comportamento da combinação CTRL + ALT + DEL, inserindo a linha:
:/bin/echo “Isso não é Windows!!!”

Na linha 54 é realizado o controle dos terminais, definindo a sequência de inicialização dos consoles
(No ambiente de testes desativamos os consoles: 3,4,5 e 6)
 

 

 
#init q
(Recarrega a configuração do Init)
 

 

 
#ls /etc/rc*.d
(Lista os diretórios de inicialização de cada Runlevel)

#cd /etc/rc2.d
(Entra no diretório do Runlevel 2 - modo multiusuário)
 

 

 


Abaixo estão os diretórios tradicionais onde os scripts de inicialização (Daemons/serviços) eram armazenados em cada distribuição.

 

DAEMONS = processos responsáveis por executar serviços do sistema em segundo plano.

 
/etc/init.d → Debian
 

 

 
/etc/rc.d → Slackware
 

 

 
/etc/rc.d/init.d → Red Hat
 



 



systemd (Evolução do Init)

 

systemd é o sistema de inicialização e gerenciador de serviços utilizado nas distribuições Linux modernas, substituindo o antigo sistema baseado em init e scripts localizados em /etc/init.d.

 

Enquanto o init utilizava runlevels para definir os modos de execução do sistema, o systemd utiliza o conceito de targets, que desempenham função semelhante, porém com mais recursos e flexibilidade.

 

O systemd permite inicialização paralela de serviços, melhor gerenciamento de dependências e controle mais eficiente do sistema.

 


Comparação entre Runlevels e Targets

 
RUNLEVEL FUNÇÃO SYSTEMD TARGET
0 Desligar poweroff.target
1 Monousuário rescue.target
2,3,4 Multiusuário multi-user.target
5 Modo gráfico graphical.target
6 Reiniciar reboot.target
 


Comandos básicos no systemd

 
#systemctl start serviço
(Inicia um serviço)

#systemctl stop serviço
(Interrompe um serviço)

#systemctl restart serviço
(Reinicia um serviço)

#systemctl status serviço
(Exibe o status do serviço)

#systemctl enable serviço
(Habilita o serviço durante a inicialização do sistema)

#systemctl disable serviço
(Desabilita o serviço durante a inicialização do sistema)
 



Observação

 

Mesmo com o uso do systemd, muitos sistemas ainda mantêm compatibilidade com o modelo antigo baseado em /etc/init.d, permitindo utilizar scripts tradicionais.

 



Shell Script (Exemplo Básico)

 

Shell Scripts são arquivos que contêm comandos que podem ser executados automaticamente pelo sistema. A seguir, vamos criar um script simples para desligar a máquina.

 

Passo 1: Criar o arquivo

 
#touch /tmp/desligar.sh
 

O comando acima cria um arquivo chamado desligar.sh.

 



Passo 2: Editar o arquivo

 
#vim /tmp/desligar.sh
 


Dentro do arquivo, adicione o seguinte conteúdo:

 
#!/bin/bash

shutdown -h now
 

Salve o arquivo pressionando ESC + :wq.

 



Passo 3: Dar permissão de execução

 
#chmod +x /tmp/desligar.sh
 

O comando acima permite que o arquivo seja executado como um programa.

 



Passo 4: Executar o script

 
#/tmp/desligar.sh
 

Ao executar o script, o sistema será desligado.

 



Observação

 

É possível também utilizar o chmod para alterar as permissões de usuários e grupos. Porém, em scripts, o mais comum é utilizar o chmod +x, que adiciona a permissão de execução ao arquivo. Como este script executa um comando administrativo, normalmente ele deve ser executado com privilégios de superusuário.

 

 

 






 

Considerações

 

Chegamos ao final deste artigo sobre os fundamentos do Linux, com foco especial no Debian e suas principais vertentes. Ao longo deste guia, exploramos desde os conceitos básicos, como o que é o Debian, o projeto GNU, o kernel e a Shell, até tópicos mais avançados, como gerenciamento de processos, runlevels e a transição para o systemd.

 

O Linux é um universo vasto e em constante evolução. Dominar os comandos e a estrutura do sistema é o primeiro passo para se tornar um administrador ou usuário avançado. Mais do que decorar comandos, o importante é compreender a filosofia por trás do sistema: liberdade, transparência e controle total sobre o ambiente computacional.

 

As distribuições Linux evoluíram muito desde os primórdios do Slackware e Debian, mas os fundamentos apresentados aqui continuam sendo a base de qualquer sistema GNU/Linux moderno. Seja você um iniciante ou alguém revisando conceitos, esperamos que este material tenha sido útil e esclarecedor.

 


Próximos Passos

 
  •  
  • Pratique os comandos em um ambiente real. Uma máquina virtual, por exemplo, é uma ótima opção para testes sem riscos.

  •  
  • Explore a documentação oficial: man, info e projetos como o The Linux Documentation Project (TLDP).

  •  
  • Aprofunde-se em temas como redes, segurança, shell script avançado e administração de servidores.

  •  
  • Participe da comunidade: fóruns, grupos de usuários e eventos são ótimas oportunidades para aprender e compartilhar conhecimento.
  •  
 



Referências

 
 



“Este documento foi baseado em estudos realizados a partir de 2006, atualizado e revisado para refletir as práticas e comandos utilizados nas distribuições Linux modernas.”

 



Bons estudos e bem-vindo ao mundo Linux!