Estação de Trabalho como Código (Parte 1): Fundação com Ubuntu 24.04 e Git
Primeira parte da série sobre como criar uma estação de trabalho para SysAdmins no Ubuntu 24.04. Aprenda a atualizar o sistema, instalar ferramentas essenciais e versionar seu ambiente com Git, criando uma estrutura de diretórios robusta para gerenciar dotfiles e scripts.
Introdução
Bem-vindo à primeira parte desta série de tutoriais dedicada a construir uma estação de trabalho robusta e automatizada para profissionais de TI e SysAdmins utilizando o Ubuntu 24.04. O conceito central que guia esta jornada é o de Workspace as Code (Estação de Trabalho como Código), onde tratamos as configurações, ferramentas e todo o ambiente de desenvolvimento como código, aplicando práticas de versionamento, automação e reprodutibilidade.
Neste primeiro capítulo, lançaremos a fundação do nosso ambiente, garantindo que o sistema operacional esteja atualizado e equipado com as ferramentas essenciais. Em seguida, daremos o passo mais importante: iniciar um repositório Git para começar a versionar cada mudança, garantindo que possamos rastrear, reverter e compartilhar nossas configurações de forma eficiente.
Informação: Esta série foi projetada para ser sequencial. Cada parte constrói sobre a anterior, embora algumas seções possam ser adaptadas de forma independente.
Objetivos desta Parte
- Atualizar o sistema operacional Ubuntu 24.04 para a versão mais recente.
- Instalar um conjunto de ferramentas de linha de comando (CLI) essenciais para SysAdmins.
- Inicializar um repositório Git para versionar todas as configurações do ambiente.
- Criar uma estrutura de diretórios organizada para o projeto
workspace-as-code. - Validar que todas as ferramentas foram instaladas corretamente.
Pré-requisitos
- Uma instalação funcional do Ubuntu 24.04 Desktop.
- Acesso à internet e privilégios de administrador (sudo).
- Conhecimento básico de terminal Linux.
A quem se destina
Este tutorial é ideal para:
- SysAdmins iniciantes: Que querem estruturar melhor seu ambiente de trabalho
- DevOps Engineers: Que desejam começar com Infraestrutura como Código (IaC)
- Desenvolvedores: Interessados em automação e produtividade
- Profissionais de TI: Que querem modernizar sua estação de trabalho e aplicar práticas profissionais
Não é necessário ter experiência prévia com Git ou Linux avançado, mas é recomendável ter familiaridade básica com terminal e conhecimento de comandos como cd, ls e mkdir.
Tempo Estimado
30-40 minutos
Isso inclui:
- Atualização do sistema: ~10 min
- Instalação de ferramentas: ~15 min
- Configuração do Git: ~5-10 min
- Primeiro commit e push: ~5 min
Dica: A atualização do sistema pode levar mais tempo dependendo da sua conexão e da quantidade de atualizações disponíveis. Você pode deixar rodando enquanto lê a próxima seção.
Verificando Pré-Requisitos
Antes de começar, verifique se você atende aos requisitos mínimos:
Verificando a Versão do Ubuntu
1
2
3
4
5
6
7
8
# Verifique a versão do Ubuntu
$ lsb_release -a
# Você deve ver algo como:
# No LSB modules are available.
# Distributor ID: Ubuntu
# Release: 24.04
# Codename: noble
Se você não vê “24.04”, este tutorial ainda funcionará, mas algumas ferramentas podem ter comportamentos ligeiramente diferentes. Recomendamos atualizar para Ubuntu 24.04 LTS.
Verificando Acesso sudo
1
2
3
4
5
6
7
# Verifique se tem acesso sudo
$ sudo whoami
# Você deve ver:
# root
# Se receber "sudo: command not found", você não tem privilégios de administrador
Atenção: Este tutorial requer acesso sudo. Se você não o possui, peça ao administrador do sistema.
Verificando Conexão com Internet
1
2
3
4
# Teste sua conexão
$ ping -c 1 8.8.8.8
# Você deve ver respostas bem-sucedidas
Atualização do Sistema e Instalação de Ferramentas
O primeiro passo em qualquer nova configuração de sistema é garantir que todos os pacotes estejam atualizados. Isso corrige vulnerabilidades de segurança, melhora a compatibilidade e garante que as novas ferramentas que instalaremos funcionem corretamente.
Atualizando o Sistema Operacional
Execute os seguintes comandos para atualizar os repositórios de pacotes, aplicar as atualizações e, em seguida, limpar pacotes órfãos ou desnecessários.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Atualize os repositórios de pacotes
$ sudo apt update
# Atualize todos os pacotes instalados
$ sudo apt upgrade -y
# Remova pacotes órfãos e desnecessários
$ sudo apt autoremove -y && sudo apt autoclean
# Você verá algo como:
# Reading package lists... Done
# ...
# Processing triggers for ...
# Done.
Informação: O
-yflag responde “sim” automaticamente a todas as perguntas. Se preferir revisar as mudanças antes, omita este flag.
Instalando Ferramentas Essenciais
Agora, vamos instalar um conjunto de ferramentas que formam a espinha dorsal do nosso arsenal de SysAdmin. Cada uma delas tem um propósito específico que facilitará nosso trabalho diário.
Entendendo as Ferramentas
Aqui está uma visão geral de cada ferramenta que instalaremos:
| Ferramenta | Categoria | Propósito | Próxima Parte |
|---|---|---|---|
| vim | Editor | Editor de texto poderoso e ubíquo | Parte 3 |
| fzf | Busca | Fuzzy finder para busca interativa | Parte 2 |
| git | Versionamento | Controle de versão (pode estar pré-instalado) | Esta parte |
| tmux | Terminal | Multiplexador de terminal | Parte 3 |
| curl, wget | Download | Ferramentas para baixar arquivos | Partes posteriores |
| jq | JSON | Processador de JSON em linha de comando | Partes posteriores |
| ripgrep (rg) | Busca | Alternativa rápida ao grep | Parte 2 |
| bat | Visualização | Cat com realce de sintaxe | Partes posteriores |
| eza | Listagem | Alternativa moderna ao ls | Parte 2 |
| btop | Monitoramento | Monitor de sistema interativo | Partes posteriores |
| nmap, tcpdump | Rede | Ferramentas de análise de rede | Partes posteriores |
| rclone | Cloud | Sincronização com provedores de nuvem | Partes posteriores |
Dica Útil: Você não precisa usar todas essas ferramentas imediatamente. Conforme avançar na série, você aprenderá quando e como usar cada uma. Por enquanto, basta instalar e deixar disponível.
Instalação via APT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Instalação de pacotes via APT (gerenciador de pacotes do Ubuntu)
$ sudo apt install -y \
vim fzf ipcalc wget curl tcpdump git traceroute nmap plocate \
whois dnsutils grc tmux eza btop lshw hwinfo fwupd ethtool \
iftop jq bat fd-find ripgrep strace rsync rclone remmina \
network-manager-l2tp network-manager-l2tp-gnome tldr
# Você verá algo como:
# Reading package lists... Done
# Building dependency tree... Done
# The following NEW packages will be installed:
# ...
# Setting up vim (2:x.x.x-1) ...
# Done.
Instalação via Snap (Opcional)
Se desejar, você também pode instalar algumas aplicações via Snap (um gerenciador de pacotes alternativo):
1
2
3
4
5
6
7
# Instalação de pacotes via Snap
$ sudo snap install joplin-desktop brave drawing
# Você verá algo como:
# joplin-desktop 2.x.x from Joplin (joplin) installed
# brave 1.x.x from Brave Software (brave-snapcrafters) installed
# drawing 1.x.x from GNOME (gnome) installed
Informação: Snap é opcional. As ferramentas essenciais já foram instaladas via APT. Snap é útil para aplicações mais pesadas como navegadores e editores gráficos.
Setup Inicial: Versionando seu Ambiente com Git
O coração da nossa abordagem “Workspace as Code” é o Git. Vamos criar um repositório para armazenar todos os nossos arquivos de configuração (dotfiles), scripts e automações.
Escolhendo seu Provedor Git
Este tutorial usa GitLab como exemplo, mas você pode usar qualquer provedor Git que preferir:
| Provedor | URL | Melhor Para | Tipo |
|---|---|---|---|
| GitHub | https://github.com | Comunidade, projetos open-source | Nuvem |
| GitLab | https://gitlab.com | Privacidade, CI/CD integrado | Nuvem |
| Gitea | Auto-hospedado | Controle total, sem dependências externas | Self-hosted |
| Gitbucket | Auto-hospedado | Alternativa leve ao GitLab | Self-hosted |
As instruções abaixo funcionam para qualquer provedor. Apenas ajuste a URL conforme necessário.
Planejando a Estrutura de Diretórios
Uma boa organização é fundamental. Propomos a seguinte estrutura dentro de um diretório principal chamado workspace-as-code/:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
workspace-as-code/
│
├── 📁 dotfiles/ ← Seus arquivos de configuração (.bashrc, .vimrc, etc)
│ ├── .bashrc
│ ├── .bash_aliases
│ ├── .vimrc
│ └── .tmux.conf
│
├── 📁 scripts/ ← Scripts de automação e utilitários
│ ├── setup.sh
│ ├── backup.sh
│ └── validate.sh
│
├── 📁 terraform/ ← Infraestrutura como código (próximas partes)
│ └── main.tf
│
├── 📁 packer/ ← Templates de imagens (próximas partes)
│ └── ubuntu.json
│
├── 📁 ansible/ ← Configuração de máquinas (próximas partes)
│ └── playbook.yml
│
├── 📄 .gitignore ← Arquivos a ignorar no Git
├── 📄 README.md ← Documentação do projeto
└── 📄 .git/ ← Metadados do Git (criado automaticamente)
Cada pasta será preenchida conforme avançamos na série!
Criando o Repositório Local e no Provedor Git
Vamos seguir os passos para criar o projeto no seu provedor Git e configurar o repositório localmente.
Passo 1: Crie um novo projeto no seu provedor Git
Para GitHub:
- Acesse https://github.com/new
- Nomeie o repositório como
workspace-as-code - Marque como Private (recomendado)
- Desmarque “Initialize this repository with a README”
- Clique em Create repository
Para GitLab:
- Acesse sua conta no GitLab e clique em New project
- Selecione Create blank project
- Nomeie o projeto como
workspace-as-code - Marque-o como Private (recomendado, pois pode conter informações sensíveis)
- Desmarque “Initialize repository with a README”
- Clique em Create project
Para Gitea auto-hospedado:
- Acesse seu servidor Gitea
- Clique em + e selecione New Repository
- Nomeie como
workspace-as-code - Clique em Create Repository
Passo 2: Configure o Git localmente e crie a estrutura do projeto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Crie o diretório principal do projeto e acesse-o
$ mkdir ~/workspace-as-code
$ cd ~/workspace-as-code
# Inicialize um repositório Git
$ git init
# Configure sua identidade no Git (apenas para este repositório)
# Substitua pelos seus dados
$ git config --local user.name "Seu Nome"
$ git config --local user.email "seu-email@exemplo.com"
# Verifique a configuração
$ git config --local --list
# Você deve ver algo como:
# user.name=Seu Nome
# user.email=seu-email@exemplo.com
# core.repositoryformatversion=0
# core.filemode=true
# core.bare=false
# Crie a estrutura de diretórios que planejamos
$ mkdir -p ansible dotfiles packer scripts terraform
Informação: Os arquivos de configuração serão criados conforme avançamos na série. Por enquanto, estamos apenas criando a estrutura.
Passo 3: Crie um arquivo .gitignore inteligente
O .gitignore é crucial para evitar que segredos, logs e arquivos de cache sejam enviados para o repositório. Isso é uma questão de segurança crítica.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# Crie o arquivo .gitignore com conteúdo seguro
$ cat << 'EOF' > .gitignore
# ============================================
# Arquivos de Sistema e Cache
# ============================================
.DS_Store
.AppleDouble
.LSOverride
*.swp
*.swo
*~
.vscode/
.idea/
# ============================================
# Logs e Arquivos de Build
# ============================================
*.log
logs/
build/
dist/
*.egg-info/
# ============================================
# SEGREDOS E CREDENCIAIS (MUITO IMPORTANTE!)
# ============================================
*.key
*.pem
*.secret
*.p12
*.pfx
/secrets/
credentials.json
.env
.env.local
.env.*.local
aws_credentials
.aws/credentials
.ssh/
# ============================================
# Arquivos de Cache do Terraform
# ============================================
.terraform/
*.tfstate
*.tfstate.backup
crash.log
crash.*.log
override.tf
override.tf.json
*_override.tf
*_override.tf.json
.tfvars
.tfvars.json
.terraform.lock.hcl
# ============================================
# Arquivos de Cache do Ansible
# ============================================
*.retry
.ansible/
# ============================================
# Arquivos de Cache do Packer
# ============================================
manifest.json
packer-manifest.json
# ============================================
# Arquivos Temporários
# ============================================
*.tmp
*.temp
tmp/
temp/
EOF
Atenção: Nunca versione chaves de API, senhas, certificados ou qualquer tipo de credencial. O
.gitignoreé sua primeira linha de defesa contra vazamentos de segurança. Se você acidentalmente commitar um segredo, usegit rm --cachedegit filter-branchpara removê-lo do histórico.
Passo 4: Realize o Primeiro Commit e Envie para o Provedor Git
Finalmente, vamos salvar nosso progresso e enviá-lo para o repositório remoto.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Adicione todos os arquivos criados ao staging area do Git
$ git add .
# Verifique o que será commitado
$ git status
# Você deve ver algo como:
# On branch master
#
# Initial commit
#
# Changes to be committed:
# new file: .gitignore
# Faça o primeiro commit, a "fundação" do nosso projeto
$ git commit -m "Initial commit: project structure and gitignore"
# Você deve ver algo como:
# [master (root-commit) abc1234] Initial commit: project structure and gitignore
# 1 file changed, 50 insertions(+)
# create mode 100644 .gitignore
Agora, conecte seu repositório local ao projeto no provedor Git:
Para GitHub:
1
2
3
4
5
# Substitua USERNAME e REPO_NAME pelos seus valores
$ git remote add origin git@github.com:USERNAME/workspace-as-code.git
# Ou use HTTPS se preferir:
$ git remote add origin https://github.com/USERNAME/workspace-as-code.git
Para GitLab:
1
2
3
4
5
# Substitua USERNAME pelos seus valores
$ git remote add origin git@gitlab.com:USERNAME/workspace-as-code.git
# Ou use HTTPS se preferir:
$ git remote add origin https://gitlab.com/USERNAME/workspace-as-code.git
Para Gitea auto-hospedado:
1
2
# Substitua DOMAIN, USERNAME e REPO_NAME pelos seus valores
$ git remote add origin git@seu-gitea.com:USERNAME/workspace-as-code.git
Depois, configure a branch principal e envie:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Renomeie a branch principal para 'main' (prática moderna)
$ git branch -M main
# Envie suas alterações para o provedor Git
$ git push -u origin main
# Você deve ver algo como:
# Enumerating objects: 3, done.
# Counting objects: 100% (3/3), done.
# Writing objects: 100% (3/3), 200 bytes | 200.00 KiB/s, done.
# Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
# To github.com:USERNAME/workspace-as-code.git
# * [new branch] main -> main
# Branch 'main' set up to track remote branch 'main' from 'origin'.
Informação: Este tutorial usa SSH para clonar. Se você preferir HTTPS, use as URLs HTTPS acima. SSH é recomendado porque não requer digitar senha a cada push. Para configurar SSH, veja este guia do GitHub ou este guia do GitLab.
Validando Sua Configuração
Após completar todos os passos, execute este script para validar que tudo foi configurado corretamente:
Script de Validação
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/bin/bash
# Script de validação da configuração inicial
# Salve como: ~/workspace-as-code/scripts/validate.sh
echo "=========================================="
echo " Validando Configuração Inicial"
echo "=========================================="
echo ""
# Cores para output
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Contador de sucessos
PASSED=0
FAILED=0
# Função para validar
check() {
if eval "$1" &> /dev/null; then
echo -e "${GREEN}✓${NC} $2"
((PASSED++))
else
echo -e "${RED}✗${NC} $2"
((FAILED++))
fi
}
# Verificações
echo "Verificando Sistema:"
check "lsb_release -a 2>/dev/null | grep -q '24.04'" "Ubuntu 24.04"
check "sudo whoami | grep -q 'root'" "Acesso sudo"
check "ping -c 1 8.8.8.8 &>/dev/null" "Conexão com internet"
echo ""
echo "Verificando Ferramentas Instaladas:"
for tool in git vim fzf tmux curl wget jq ripgrep bat eza; do
check "command -v $tool" "$tool"
done
echo ""
echo "Verificando Repositório Git:"
check "cd ~/workspace-as-code && git rev-parse --git-dir > /dev/null 2>&1" "Repositório Git inicializado"
check "[ -f ~/workspace-as-code/.gitignore ]" "Arquivo .gitignore presente"
check "cd ~/workspace-as-code && git remote -v | grep -q 'origin'" "Git remote configurado"
check "cd ~/workspace-as-code && git log --oneline | grep -q 'Initial commit'" "Primeiro commit realizado"
echo ""
echo "Verificando Estrutura de Diretórios:"
for dir in ansible dotfiles packer scripts terraform; do
check "[ -d ~/workspace-as-code/$dir ]" "Diretório $dir"
done
echo ""
echo "=========================================="
echo -e "Resultado: ${GREEN}$PASSED passou${NC}, ${RED}$FAILED falhou${NC}"
echo "=========================================="
if [ $FAILED -eq 0 ]; then
echo -e "${GREEN}Tudo está configurado corretamente!${NC}"
exit 0
else
echo -e "${YELLOW}Alguns itens falharam. Revise os passos acima.${NC}"
exit 1
fi
Executando o Script de Validação
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# Crie o script
$ cat > ~/workspace-as-code/scripts/validate.sh << 'SCRIPT_EOF'
# [Copie o conteúdo do script acima aqui]
SCRIPT_EOF
# Dê permissão de execução
$ chmod +x ~/workspace-as-code/scripts/validate.sh
# Execute o script
$ ~/workspace-as-code/scripts/validate.sh
# Você deve ver algo como:
# ==========================================
# Validando Configuração Inicial
# ==========================================
#
# Verificando Sistema:
# ✓ Ubuntu 24.04
# ✓ Acesso sudo
# ✓ Conexão com internet
#
# Verificando Ferramentas Instaladas:
# ✓ git
# ✓ vim
# ✓ fzf
# ...
# ==========================================
# Resultado: 20 passou, 0 falhou
# ==========================================
# Tudo está configurado corretamente!
Se tudo estiver OK, você está pronto para a próxima parte!
Troubleshooting
Se você encontrar problemas durante a configuração, aqui estão as soluções para os erros mais comuns:
Erro: “E: Could not open lock file /var/lib/apt/lists/lock”
Causa: Outro processo está usando o apt (gerenciador de pacotes).
Solução:
1
2
3
4
5
6
# Aguarde alguns minutos e tente novamente
$ sudo lsof /var/lib/apt/lists/lock
# Se necessário, force a limpeza (use com cuidado!)
$ sudo rm /var/lib/apt/lists/lock
$ sudo apt update
Erro: “E: Unable to locate package [nome-do-pacote]”
Causa: O pacote não existe nos repositórios padrão.
Solução:
1
2
3
4
5
6
7
8
# Atualize os repositórios
$ sudo apt update
# Verifique se o pacote existe
$ apt search [nome-do-pacote]
# Se não encontrar, pode estar em repositórios PPA ou ser instalado via Snap
$ sudo snap install [nome-do-pacote]
Erro: “fatal: not a git repository”
Causa: Você não está no diretório correto.
Solução:
1
2
3
4
5
6
# Certifique-se de estar no diretório workspace-as-code
$ cd ~/workspace-as-code
$ pwd # Deve mostrar /home/seu-usuario/workspace-as-code
# Verifique se o repositório foi inicializado
$ git status
Erro ao fazer push: “fatal: ‘origin’ does not appear to be a ‘git’ repository”
Causa: A URL remota está incorreta ou não foi configurada.
Solução:
1
2
3
4
5
6
7
8
9
10
11
# Verifique a URL remota
$ git remote -v
# Se estiver vazia, adicione novamente
$ git remote add origin git@github.com:seu-usuario/workspace-as-code.git
# Se precisar corrigir uma URL existente, use:
$ git remote set-url origin git@github.com:seu-usuario/workspace-as-code.git
# Verifique novamente
$ git remote -v
Erro: “Permission denied (publickey)”
Causa: Suas chaves SSH não estão configuradas corretamente.
Solução:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Verifique se sua chave SSH existe
$ ls -la ~/.ssh/id_rsa
# Se não existir, crie uma nova
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""
# Adicione a chave ao ssh-agent
$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/id_rsa
# Copie a chave pública para sua conta no GitHub/GitLab
$ cat ~/.ssh/id_rsa.pub
# Cole o conteúdo nas configurações de SSH do seu provedor Git
Conclusão
Parabéns! Você concluiu a primeira e mais crucial etapa desta jornada. Seu sistema está atualizado, equipado com ferramentas essenciais, e, o mais importante, seu ambiente de trabalho agora é um projeto versionado.
O Que Você Alcançou
✓ Sistema Ubuntu 24.04 atualizado e seguro ✓ Ferramentas CLI modernas instaladas e prontas ✓ Repositório Git criado e versionado ✓ Estrutura de projeto organizada e profissional ✓ Proteção contra vazamento de credenciais com .gitignore ✓ Validação de configuração com script automatizado
Próximos Passos Imediatos
Antes de prosseguir para a Parte 2, faça o seguinte:
- Explore as ferramentas instaladas:
1 2 3 4
$ fzf --version $ ripgrep --version $ eza --version $ bat --version
- Verifique seu repositório:
1 2 3 4
$ cd ~/workspace-as-code $ git log --oneline $ git remote -v $ git status
- Crie um README inicial (opcional, mas recomendado):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
$ cat > README.md << EOF # Workspace as Code Minha estação de trabalho completamente automatizada e versionada. ## Estrutura - **dotfiles**: Configurações de shell e editor - **scripts**: Automações e utilitários - **terraform**: Infraestrutura como código - **packer**: Templates de imagens - **ansible**: Configuração de máquinas ## Como Usar 1. Clone este repositório 2. Execute os scripts de setup 3. Customize conforme necessário ## Série Completa Esta é a Parte 1 de uma série de 15 tutoriais sobre Workspace as Code. EOF $ git add README.md $ git commit -m "docs: add initial README" $ git push origin main
- Commit o script de validação:
1 2 3
$ git add scripts/validate.sh $ git commit -m "chore: add validation script" $ git push origin main
Próximo Tutorial
Com a fundação estabelecida, estamos prontos para começar a personalizar nosso ambiente de linha de comando com aliases, funções e otimizações do Bash.
Recursos Adicionais
- Documentação Oficial do Git
- GitHub SSH Setup
- GitLab SSH Setup
- Ubuntu 24.04 Release Notes
- APT Package Manager Guide
Fim da Parte 1
Próxima: Customizando o Bash com Aliases e Funções