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.
- Red Hat → Red Hat Linux, Fedora, CentOS, Mandriva (Mandrake + Conectiva)
- Slackware → Slackware, Slax = CD-Live
- Debian → Debian, Ubuntu (Knoppix, Kurumin, Kalango = CD-Live)
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 Hat → RPM → Pacotes .rpm
- Slackware → PKG-TOOL → Pacotes .tgz
- Debian → DPKG → 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)
O 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,infoe 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
- The Linux Documentation Project: https://tldp.org
- Projeto GNU: https://gnu.org
- Debian Official Documentation: https://debian.org/doc
- Kernel Linux: https://kernel.org
“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.
- Red Hat → Red Hat Linux, Fedora, CentOS, Mandriva (Mandrake + Conectiva)
- Slackware → Slackware, Slax = CD-Live
- Debian → Debian, Ubuntu (Knoppix, Kurumin, Kalango = CD-Live)
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 Hat → RPM → Pacotes .rpm
- Slackware → PKG-TOOL → Pacotes .tgz
- Debian → DPKG → 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)
O 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,infoe 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
- The Linux Documentation Project: https://tldp.org
- Projeto GNU: https://gnu.org
- Debian Official Documentation: https://debian.org/doc
- Kernel Linux: https://kernel.org
“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!