O Linux é o sistema operacional mais utilizado em servidores e ambientes de nuvem, sendo a espinha dorsal da infraestrutura de TI moderna. Para um profissional DevOps, dominar os conceitos e comandos básicos do Linux é indispensável para gerenciar servidores, automatizar tarefas e garantir a segurança e eficiência dos sistemas. Nesta aula, exploraremos os motivos da hegemonia do Linux, os comandos essenciais de navegação e arquivos, o sistema de permissões e uma visão geral do gerenciamento de pacotes.

Por que Linux domina servidores

O Linux é o sistema operacional preferido para servidores por várias razões. Primeiramente, ele é gratuito e de código aberto, o que reduz custos e permite personalização profunda. Além disso, sua estabilidade e segurança são lendárias: o Linux pode ficar meses ou anos sem reinicialização e sofre menos com malware devido ao seu modelo de permissões e à comunidade ativa que corrige vulnerabilidades rapidamente.

Outro fator crucial é a eficiência. O Linux consome menos recursos que outros sistemas, permitindo que servidores rodem com hardware modesto. Ele também oferece suporte nativo a virtualização, contêineres (Docker, Kubernetes) e uma vasta gama de ferramentas de automação (Ansible, Terraform). A flexibilidade do Linux, combinada com sua adoção maciça em nuvens públicas (AWS, GCP, Azure), torna o conhecimento desse sistema um requisito fundamental para qualquer profissional DevOps.

Navegação e arquivos

A navegação no terminal Linux é feita por meio de comandos simples. O comando pwd mostra o diretório atual, ls lista o conteúdo de um diretório, e cd muda de diretório. Exemplos:

pwd
/home/user
ls
Documentos  Downloads  projetos
cd Documentos/
pwd
/home/user/Documentos

Para manipular arquivos, usamos cp (copiar), mv (mover/renomear), rm (remover) e mkdir (criar diretório). É importante lembrar que o Linux diferencia maiúsculas de minúsculas e que arquivos ocultos começam com ponto (.). O comando cat exibe o conteúdo de um arquivo, enquanto head e tail mostram o início e o fim.

mkdir novo_dir
cp arquivo.txt novo_dir/
mv arquivo.txt novo_dir/renomeado.txt
rm -rf novo_dir/   # Remove recursivamente e com força
cat /etc/passwd | head -5

Outros comandos úteis: find para buscar arquivos, grep para filtrar texto, wc para contar linhas/palavras e sort para ordenar. Dominar esses comandos é essencial para navegar e gerenciar arquivos com eficiência.

Permissões

No Linux, cada arquivo e diretório possui permissões que definem quem pode ler, escrever ou executar. As permissões são divididas em três grupos: dono (user), grupo (group) e outros (others). O comando ls -l exibe as permissões no formato -rwxr-xr--, onde o primeiro caractere indica o tipo (- para arquivo, d para diretório), e os próximos três conjuntos representam as permissões do dono, grupo e outros, respectivamente.

ls -l script.sh
-rwxr-xr-- 1 user group 1024 Jan 1 12:00 script.sh

O dono tem permissão de leitura (r), escrita (w) e execução (x); o grupo tem leitura e execução; outros têm apenas leitura. Para alterar permissões, usamos chmod com números octais (ex.: 755 para rwxr-xr-x) ou símbolos (u+x adiciona execução ao dono). O comando chown altera o dono e o grupo.

chmod 755 script.sh
chmod u+x script.sh
chown user:group script.sh

Entender permissões é vital para a segurança: arquivos de configuração sensíveis devem ter permissões restritas (ex.: 600 para chaves SSH), e scripts executáveis devem ter permissão de execução apenas para quem precisa.

Pacotes (visão geral)

Gerenciadores de pacotes simplificam a instalação, atualização e remoção de software. No Ubuntu/Debian, usamos apt; no CentOS/RHEL, yum ou dnf. Exemplos com apt:

sudo apt update          # Atualiza a lista de pacotes
sudo apt upgrade         # Atualiza todos os pacotes instalados
sudo apt install nginx   # Instala o nginx
sudo apt remove nginx    # Remove o nginx

No CentOS, os comandos equivalentes são sudo yum update, sudo yum install nginx e sudo yum remove nginx. O gerenciamento de pacotes também inclui repositórios: arquivos em /etc/apt/sources.list (Debian) ou /etc/yum.repos.d/ (RHEL) definem de onde os pacotes são baixados.

Além dos gerenciadores nativos, ferramentas como Snap e Flatpak oferecem pacotes isolados. Para DevOps, é comum usar Docker para evitar conflitos de dependências, mas entender o gerenciamento de pacotes do sistema é fundamental para provisionar servidores.

Boas práticas e observações finais

Sempre use sudo com cautela e apenas quando necessário. Mantenha o sistema atualizado com atualizações de segurança. Prefira usar caminhos absolutos em scripts para evitar ambiguidades. E lembre-se: o terminal é seu aliado; pratique regularmente para ganhar fluência.

Referências

Exercícios

  1. Crie um diretório chamado projeto e dentro dele um arquivo README.md com o texto "Meu primeiro projeto". Em seguida, liste o conteúdo do diretório.

    ✓ Resposta:
    mkdir projeto
    cd projeto
    echo "Meu primeiro projeto" > README.md
    ls -l
  2. Altere as permissões do arquivo script.sh para que o dono possa ler, escrever e executar; o grupo possa ler e executar; e outros não tenham nenhuma permissão.

    ✓ Resposta:
    chmod 750 script.sh
    # ou simbolicamente: chmod u=rwx,g=rx,o= script.sh
  3. Use o gerenciador de pacotes para instalar o servidor web Apache (httpd) em uma distribuição baseada em Red Hat.

    ✓ Resposta:
    sudo yum install httpd   # ou sudo dnf install httpd
  4. Encontre todos os arquivos com extensão .log no diretório /var/log que contenham a palavra "error" (ignore maiúsculas/minúsculas).

    ✓ Resposta:
    grep -ril "error" /var/log/*.log
  5. Explique a diferença entre permissões 755 e 700 para um diretório.

    ✓ Resposta:

    755 (rwxr-xr-x): dono tem todas as permissões; grupo e outros têm leitura e execução (podem listar e acessar o diretório). 700 (rwx------): apenas o dono tem acesso total; grupo e outros não têm nenhuma permissão. 700 é mais seguro para diretórios confidenciais.