Linux para desenvolvedores: por onde começar e quais comandos dominar?

Linux para desenvolvedores: por onde começar e quais comandos dominar?
Publicado em 09/11/2026 por Admin

Se você trabalha com desenvolvimento de software, aprender Linux pode ser uma das habilidades mais importantes para ampliar seus conhecimentos técnicos.

Mesmo que você utilize Windows ou macOS como sistema operacional principal, provavelmente já teve contato com ambientes Linux em servidores, containers Docker, máquinas virtuais, serviços em cloud ou pipelines de CI/CD.

O Linux está presente em uma grande parte da infraestrutura utilizada atualmente para executar aplicações, hospedar APIs, administrar bancos de dados e disponibilizar serviços na internet.

Para desenvolvedores .NET, por exemplo, conhecer Linux pode facilitar bastante o trabalho com Docker, ASP.NET Core, Azure, AWS e ambientes de produção.

Mas existe uma dúvida comum para quem está começando: por onde devo começar? Preciso aprender todos os comandos? É necessário abandonar o Windows e utilizar Linux diariamente?

A resposta é não.

Você não precisa se tornar um administrador de sistemas para aproveitar os benefícios do Linux. Entretanto, dominar alguns conceitos e comandos fundamentais pode tornar seu trabalho muito mais produtivo.

Neste artigo, vamos apresentar os principais conceitos, mostrar como preparar um ambiente de aprendizado e conhecer os comandos Linux que todo desenvolvedor deveria dominar.

1. Por que desenvolvedores deveriam aprender Linux?

Durante o desenvolvimento de software, nem sempre trabalhamos exclusivamente no ambiente local.

Uma aplicação pode ser desenvolvida no Windows, executada em containers Linux, hospedada em uma máquina virtual na AWS e monitorada por ferramentas disponíveis em um servidor remoto.

Conhecer Linux ajuda a compreender melhor todo esse fluxo.

Entre os principais benefícios estão:

  • Administrar servidores e ambientes remotos.

  • Trabalhar com containers Docker.

  • Investigar problemas em aplicações hospedadas em Linux.

  • Automatizar tarefas utilizando scripts.

  • Gerenciar arquivos e permissões.

  • Trabalhar com ferramentas de DevOps.

  • Compreender melhor ambientes de cloud computing.

  • Executar aplicações e serviços diretamente no sistema operacional.

Outro ponto importante é que muitas ferramentas utilizadas no desenvolvimento moderno possuem suporte nativo ao Linux.

Docker, Git, .NET, Python, Node.js, PostgreSQL e diversas outras tecnologias podem ser utilizadas nesse ambiente.

Para quem trabalha com desenvolvimento backend, infraestrutura ou arquitetura de software, esse conhecimento representa uma vantagem importante.

2. Qual distribuição Linux escolher para começar?

Uma das primeiras decisões para quem deseja aprender Linux é escolher uma distribuição.

Uma distribuição, também conhecida como distro, é um sistema operacional baseado no kernel Linux, acompanhado de ferramentas, bibliotecas, gerenciador de pacotes e outros componentes.

Existem diversas opções disponíveis, mas algumas são especialmente interessantes para desenvolvedores.

Ubuntu

Uma das distribuições mais populares, com documentação extensa, grande comunidade e ampla compatibilidade com ferramentas de desenvolvimento.

Boa escolha para aprender terminal, Docker e desenvolvimento backend.

Fedora

Uma distribuição moderna, interessante para quem deseja trabalhar com tecnologias recentes e conhecer um ambiente Linux bastante utilizado por desenvolvedores.

Linux Mint

Possui uma interface familiar para quem está migrando do Windows e oferece uma experiência bastante amigável para iniciantes.

Debian

Conhecido pela estabilidade e bastante utilizado em servidores. É uma boa opção para compreender ambientes Linux voltados à infraestrutura.

Não existe uma distribuição obrigatoriamente melhor para todos os desenvolvedores.

Para começar, minha sugestão é utilizar Ubuntu. Além da facilidade de aprendizado, muitos tutoriais, ferramentas e exemplos disponíveis na internet utilizam essa distribuição como referência.

3. Como instalar Linux sem abandonar o Windows?

Você não precisa formatar seu computador ou substituir seu sistema operacional atual para começar a aprender Linux.

Existem algumas alternativas interessantes.

Windows Subsystem for Linux (WSL)

O Windows Subsystem for Linux (WSL) permite executar um ambiente Linux diretamente no Windows, sem precisar configurar uma máquina virtual tradicional.

Com o WSL 2, é possível executar distribuições Linux em um ambiente baseado em uma máquina virtual leve, com integração ao Windows.

É uma alternativa bastante interessante para desenvolvedores que trabalham com Windows 10 ou Windows 11.

A instalação pode ser realizada pelo PowerShell, quando o recurso estiver disponível e autorizado no computador:

wsl --install

Depois, é possível instalar uma distribuição compatível e acessar seu terminal diretamente pelo Windows.

Vale observar que computadores corporativos podem possuir restrições administrativas que impedem a instalação ou ativação do WSL.

Máquina virtual

Outra possibilidade é utilizar uma máquina virtual com Ubuntu ou outra distribuição.

Ferramentas de virtualização permitem executar Linux em uma janela, mantendo o Windows como sistema principal.

Essa alternativa oferece maior isolamento entre os sistemas, mas exige recursos adicionais de memória e processamento.

Docker

Se seu objetivo principal é trabalhar com containers, Docker também pode ser uma alternativa para experimentar ambientes Linux.

Entretanto, é importante entender que um container não representa uma máquina virtual completa. Ele compartilha o kernel do sistema operacional hospedeiro ou da infraestrutura de containers.

Para aprender Linux de maneira mais abrangente, recomendo começar com WSL ou uma máquina virtual.

 

4. Entenda a estrutura de diretórios do Linux

Antes de começar a executar comandos, é importante compreender como os arquivos são organizados.

Diferentemente do Windows, que normalmente utiliza unidades como C: e D:, o Linux organiza seu sistema de arquivos a partir de uma estrutura hierárquica que começa na raiz /.

Alguns diretórios importantes:

Diretório

Finalidade

/

Diretório raiz do sistema

/home

Diretórios pessoais dos usuários

/etc

Arquivos de configuração

/var

Dados variáveis, incluindo logs

/tmp

Arquivos temporários

/usr

Programas, bibliotecas e recursos

/opt

Aplicações e softwares adicionais

/bin

Comandos essenciais do sistema

/root

Diretório pessoal do usuário root

Um exemplo:

/
├── home
│   └── developer
│       ├── projects
│       └── documents
├── etc
├── var
│   └── log
├── tmp
├── usr
└── opt

Imagine que você está desenvolvendo uma API e deseja organizar seus projetos dentro do diretório pessoal.

Poderia utilizar:

cd /home/developer
mkdir projects
cd projects

Essa estrutura é bastante comum em ambientes Linux.

Um detalhe importante: nomes de arquivos e diretórios são sensíveis a maiúsculas e minúsculas. Portanto, Projects e projects podem representar diretórios diferentes.

5. Os comandos básicos de navegação

Vamos começar pelos comandos que você utilizará praticamente todos os dias.

pwd — descobrir onde você está

O comando pwd mostra o diretório atual.

pwd

Resultado:

/home/developer/projects

É especialmente útil quando estamos trabalhando com diferentes diretórios e precisamos confirmar nossa localização.

ls — listar arquivos e diretórios

Para visualizar o conteúdo de um diretório:

ls

Algumas variações importantes:

ls -l

Exibe informações detalhadas, como permissões, proprietário, tamanho e data.

ls -a

Mostra também arquivos ocultos.

ls -lah

Combina informações detalhadas, arquivos ocultos e tamanhos em formato mais legível.

cd — navegar entre diretórios

Para acessar um diretório:

cd projects

Para voltar ao diretório anterior:

cd ..

Para acessar diretamente seu diretório pessoal:

cd ~

Para retornar ao diretório anterior:

cd -

Esses comandos parecem simples, mas representam a base da utilização do terminal Linux.

6. Gerenciamento de arquivos e diretórios

Outro grupo de comandos essencial está relacionado à criação, movimentação, cópia e remoção de arquivos.

Comando

Finalidade

mkdir

Criar diretórios

touch

Criar arquivos vazios ou atualizar timestamps

cp

Copiar arquivos

mv

Mover ou renomear arquivos

rm

Remover arquivos

rmdir

Remover diretórios vazios

Vamos observar alguns exemplos.

Criando um diretório

mkdir my-project

Também podemos criar diretórios aninhados:

mkdir -p projects/api/src

Criando um arquivo

touch README.md

Copiando arquivos

cp appsettings.json backup/

Para copiar um diretório e seu conteúdo:

cp -r my-project my-project-backup

Movendo ou renomeando arquivos

mv config.json backup/

Para renomear:

mv old-name.txt new-name.txt

Removendo arquivos

rm temporary-file.txt

Para remover um diretório e seu conteúdo:

rm -r old-project

 

Atenção

O comando rm -r pode remover permanentemente arquivos e diretórios. Verifique sempre o caminho antes de executar. Evite utilizar rm -rf sem compreender exatamente o que será removido.

 

7. Visualizando e pesquisando conteúdo de arquivos

Desenvolvedores frequentemente precisam investigar arquivos de configuração, logs e resultados de execução.

O Linux possui ferramentas bastante eficientes para isso.

cat — visualizar o conteúdo de arquivos

cat appsettings.json

É útil para arquivos pequenos.

less — navegar por arquivos extensos

less application.log

Permite navegar pelo conteúdo sem carregar tudo visualmente de uma só vez.

Para sair, pressione q.

head — visualizar as primeiras linhas

head -n 20 application.log

Exibe as primeiras 20 linhas.

tail — visualizar as últimas linhas

tail -n 20 application.log

Um dos usos mais interessantes é acompanhar logs em tempo real:

tail -f application.log

Esse comando é especialmente útil quando estamos investigando problemas em uma aplicação.

grep — pesquisar informações

Imagine que você deseja localizar todas as linhas que contêm a palavra ERROR:

grep "ERROR" application.log

Para ignorar diferenças entre maiúsculas e minúsculas:

grep -i "error" application.log

Para pesquisar recursivamente em diretórios:

grep -r "ConnectionString" ./config

O grep é uma ferramenta extremamente útil para localizar mensagens, configurações e informações em projetos.

find — localizar arquivos

Para procurar um arquivo pelo nome:

find . -name "*.cs"

Para localizar arquivos de configuração:

find . -name "appsettings*.json"

Esses comandos podem economizar bastante tempo durante a manutenção de aplicações.

8. Permissões e usuários: entenda chmod, chown e sudo

Um dos conceitos mais importantes do Linux é o sistema de permissões.

Cada arquivo ou diretório possui permissões que determinam quem pode ler, modificar ou executar determinado recurso.

As permissões básicas são:

Permissão

Significado

r

Read — leitura

w

Write — escrita

x

Execute — execução

Podemos visualizar essas permissões utilizando:

ls -l

Exemplo:

-rwxr-xr-- 1 developer developer 1200 script.sh

Nesse exemplo, temos permissões diferentes para o proprietário, o grupo e os demais usuários.

chmod — alterar permissões

Imagine que você criou um script e deseja permitir sua execução:

chmod +x deploy.sh

Agora o arquivo possui permissão de execução para as categorias às quais a permissão foi concedida.

Também podemos utilizar permissões numéricas:

chmod 755 deploy.sh

O valor 755 representa:

  • Proprietário: leitura, escrita e execução.

  • Grupo: leitura e execução.

  • Outros usuários: leitura e execução.

chown — alterar proprietário

Para modificar o proprietário de um arquivo:

sudo chown developer:developer deploy.sh

O comando altera o proprietário e o grupo do arquivo, conforme os usuários e grupos existentes no sistema.

sudo — executar comandos com privilégios administrativos

O comando sudo permite executar determinadas operações com privilégios administrativos, conforme as permissões configuradas para o usuário.

Exemplo:

sudo apt update

É comum utilizá-lo para instalar programas, atualizar pacotes e modificar configurações do sistema.

Entretanto, não utilize sudo indiscriminadamente.

Um comando executado com privilégios administrativos pode modificar arquivos críticos, alterar configurações de segurança ou remover componentes importantes.

Sempre entenda o que está executando antes de conceder privilégios elevados.

9. Gerenciamento de pacotes: instalando ferramentas no Linux

Diferentemente do Windows, onde frequentemente baixamos instaladores individuais, muitas distribuições Linux utilizam gerenciadores de pacotes.

Essas ferramentas permitem instalar, atualizar e remover programas por meio do terminal.

Os comandos variam de acordo com a distribuição.

Distribuição

Gerenciador

Exemplos

Ubuntu / Debian

APT

apt install

Fedora

DNF

dnf install

Arch Linux

Pacman

pacman -S

No Ubuntu, podemos atualizar a lista de pacotes disponíveis:

sudo apt update

Para atualizar os pacotes instalados:

sudo apt upgrade

Para instalar o Git:

sudo apt install git

Para instalar o curl:

sudo apt install curl

Para remover um pacote:

sudo apt remove nome-do-pacote

Uma recomendação importante é priorizar os repositórios oficiais da distribuição ou as fontes oficiais dos projetos.

Evite executar comandos encontrados aleatoriamente na internet sem compreender seu funcionamento.

10. Comandos importantes para desenvolvedores

Agora chegamos a uma parte especialmente interessante para quem trabalha com desenvolvimento de software.

Além dos comandos básicos, existem ferramentas que ajudam a administrar serviços, verificar conexões, trabalhar remotamente e investigar problemas.

ps — visualizar processos

Para listar processos em execução:

ps aux

É possível filtrar resultados utilizando grep:

ps aux | grep dotnet

Esse exemplo ajuda a localizar processos relacionados ao .NET.

top — monitorar processos

top

Permite acompanhar processos e consumo de recursos, como CPU e memória.

free — verificar memória

free -h

Mostra informações sobre a memória física e swap em formato legível.

df — verificar espaço em disco

df -h

Muito útil quando uma aplicação começa a apresentar problemas relacionados ao armazenamento.

du — verificar tamanho de diretórios

du -sh ./logs

Mostra o espaço ocupado pelo diretório de logs.

curl — realizar requisições HTTP

Para desenvolvedores backend, esse comando é particularmente importante.

Podemos testar um endpoint de uma API:

curl https://localhost:5001/api/orders

Para enviar uma requisição POST com JSON:

curl -X POST https://localhost:5001/api/orders \
  -H "Content-Type: application/json" \
  -d '{"customerId": 10}'

Em ambientes com certificado local de desenvolvimento não confiável, a validação TLS pode impedir a chamada. A opção -k desabilita essa validação e deve ser reservada a testes locais controlados, nunca como solução permanente para conexões reais.

ssh — acessar servidores remotamente

O SSH permite estabelecer conexões remotas seguras com outros computadores.

Exemplo:

ssh developer@192.168.1.100

É uma ferramenta fundamental para quem trabalha com servidores Linux, máquinas virtuais e infraestrutura cloud.

scp — transferir arquivos remotamente

Para copiar um arquivo local para um servidor:

scp application.zip developer@192.168.1.100:/home/developer/

Para copiar um arquivo do servidor para sua máquina:

scp developer@192.168.1.100:/home/developer/application.log .

tar — compactar e descompactar arquivos

Para criar um arquivo compactado:

tar -czvf backup.tar.gz ./my-project

Para extrair:

tar -xzvf backup.tar.gz

É uma ferramenta bastante utilizada em processos de backup e transferência de arquivos.

11. Trabalhando com serviços e logs no Linux

Quando começamos a administrar aplicações em servidores Linux, precisamos aprender a trabalhar com serviços.

Muitas distribuições utilizam systemd como sistema de inicialização e gerenciamento de serviços.

Nesses ambientes, o comando systemctl permite consultar e administrar serviços.

Consultar o status de um serviço

systemctl status nginx

Iniciar um serviço

sudo systemctl start nginx

Reiniciar um serviço

sudo systemctl restart nginx

Habilitar inicialização automática

sudo systemctl enable nginx

Esses exemplos utilizam o Nginx, mas os comandos podem ser aplicados a outros serviços gerenciados pelo systemd.

Para consultar logs:

journalctl -u nginx

Para acompanhar novas mensagens:

journalctl -u nginx -f

Imagine que você publicou uma API ASP.NET Core em um servidor Linux e ela está apresentando erros durante a inicialização.

Consultar os logs do serviço pode ajudar a identificar problemas de configuração, dependências ou conexão com recursos externos.

Atenção: systemctl e journalctl dependem de um ambiente que utiliza systemd. Nem todo container ou distribuição utiliza esse modelo.

12. Entenda pipes e redirecionamento: combinando comandos

Um dos recursos mais interessantes do terminal Linux é a possibilidade de combinar diferentes comandos.

O símbolo |, chamado de pipe, permite encaminhar a saída de um comando para a entrada de outro.

Imagine que você deseja localizar erros em um arquivo de log e contar quantas ocorrências foram encontradas.

grep "ERROR" application.log | wc -l

Nesse exemplo:

  1. grep localiza as linhas contendo ERROR.

  2. O pipe encaminha o resultado.

  3. wc -l conta as linhas recebidas.

Outro exemplo:

ps aux | grep dotnet

Aqui, listamos os processos e filtramos aqueles relacionados ao .NET.

Também podemos redirecionar a saída para um arquivo:

ps aux > processes.txt

O operador > cria ou substitui o conteúdo do arquivo de destino.

Já o operador >> acrescenta conteúdo ao final:

echo "Application started" >> application.log

Esses recursos são fundamentais para criar scripts e automatizar tarefas.

13. Como aplicar Linux no desenvolvimento .NET?

Para quem trabalha com C# e .NET, aprender Linux pode trazer benefícios bastante concretos.

A plataforma .NET possui suporte para Linux, permitindo desenvolver, compilar e executar aplicações nesse ambiente.

Vamos considerar alguns exemplos.

Verificar a versão do .NET

dotnet --version

Para consultar os SDKs instalados:

dotnet --list-sdks

Para consultar os runtimes:

dotnet --list-runtimes

Criar uma API ASP.NET Core

dotnet new webapi -n MyLinuxApi

Acessar o diretório:

cd MyLinuxApi

Restaurar dependências:

dotnet restore

Compilar:

dotnet build

Executar:

dotnet run

A aplicação será iniciada conforme as configurações do projeto.

Trabalhar com Docker

Outra aplicação interessante é utilizar Linux como ambiente para executar containers.

Imagine que você possui uma API ASP.NET Core e deseja construir uma imagem Docker:

docker build -t mylinuxapi .

Para executar um container:

docker run -d -p 8080:8080 mylinuxapi

O mapeamento de portas deve corresponder à porta configurada pela aplicação dentro do container.

Com esse conhecimento, você consegue desenvolver localmente e compreender melhor como sua aplicação será executada em um ambiente Linux.

 

14. Um plano prático para aprender Linux em 7 dias

Se você está começando agora, recomendo não tentar memorizar todos os comandos de uma vez.

O melhor caminho é aprender praticando.

Preparei uma sugestão de roteiro de sete dias para desenvolver familiaridade com o terminal.

Dia

Conteúdo

Exercício prático

1

Terminal e navegação

Praticar pwd, ls e cd

2

Arquivos e diretórios

Utilizar mkdir, touch, cp e mv

3

Pesquisa e leitura

Trabalhar com grep, find, cat e tail

4

Permissões

Experimentar chmod, chown e sudo

5

Pacotes e processos

Utilizar apt, ps, top e df

6

Serviços e rede

Conhecer systemctl, journalctl, curl e ssh

7

Desenvolvimento

Criar e executar uma API .NET no Linux

Ao final desse período, você já terá uma boa base para continuar explorando o sistema.

15. Checklist: os comandos Linux que todo desenvolvedor deveria conhecer

Para facilitar sua consulta durante os estudos, reuni os principais comandos apresentados no artigo.

Comando

Finalidade

pwd

Mostrar diretório atual

ls

Listar arquivos

cd

Navegar entre diretórios

mkdir

Criar diretórios

touch

Criar arquivos

cp

Copiar arquivos

mv

Mover ou renomear

rm

Remover arquivos

cat

Visualizar arquivos

less

Navegar pelo conteúdo

grep

Pesquisar textos

find

Localizar arquivos

chmod

Alterar permissões

chown

Alterar proprietário

sudo

Executar com privilégios administrativos

apt

Gerenciar pacotes no Debian/Ubuntu

ps

Listar processos

top

Monitorar processos

free

Consultar memória

df

Consultar espaço em disco

du

Consultar tamanho de diretórios

curl

Realizar requisições HTTP

ssh

Acessar servidores remotamente

scp

Transferir arquivos

tar

Compactar e extrair arquivos

systemctl

Gerenciar serviços systemd

journalctl

Consultar logs do systemd

tail

Visualizar o final de arquivos

wc

Contar linhas, palavras e caracteres

 

Conclusão

Aprender Linux é um investimento importante para qualquer desenvolvedor que deseja ampliar seus conhecimentos sobre infraestrutura, desenvolvimento backend e ambientes de produção.

Você não precisa abandonar o Windows, instalar uma distribuição Linux como sistema principal ou se tornar especialista em administração de servidores.

Começar dominando o terminal, compreender a estrutura de diretórios, aprender a gerenciar arquivos e conhecer os comandos utilizados no dia a dia já representa um excelente avanço.

Para desenvolvedores .NET, esse conhecimento se torna ainda mais interessante quando combinado com Docker, cloud computing, automação e pipelines de CI/CD.

Minha recomendação é simples: escolha uma distribuição, prepare um ambiente de estudos e comece a executar os comandos apresentados neste artigo.

Não tente apenas memorizar. Procure entender o que cada comando faz e em quais situações ele pode ajudar.

Com o tempo, você perceberá que o terminal Linux deixa de ser algo intimidador e passa a ser uma ferramenta natural do seu fluxo de desenvolvimento.

Afinal, um bom desenvolvedor não precisa conhecer apenas a linguagem de programação que utiliza, mas também entender o ambiente onde suas aplicações são executadas.