Tutorial Anterior: Estação de Trabalho como Código (Parte 1): Fundação com Ubuntu 24.04 e Git
Na primeira parte, estabelecemos a fundação da nossa estação de trabalho, atualizando o sistema e iniciando o versionamento com Git. Agora, é hora de mergulhar na personalização do nosso ambiente de linha de comando. Passamos a maior parte do nosso tempo no terminal, e pequenas otimizações aqui podem resultar em grandes ganhos de produtividade e conforto.
Neste tutorial, vamos focar no coração do nosso shell: o Bash. Vamos criar arquivos de configuração dedicados para organizar nossas customizações, definir aliases que economizam tempo, otimizar o histórico de comandos e configurar um prompt (PS1) que seja tanto informativo quanto visualmente agradável.
workspace-as-code deve existir no seu diretório homeEste tutorial é ideal para:
Pré-conhecimento: Familiaridade básica com Bash e terminal Linux é recomendada. Se você completou a Parte 1, você tem o conhecimento necessário.
⏱ 40-50 minutos
Isso inclui:
Dica Útil: Se você quiser apenas copiar e colar, pode fazer em 20 minutos. Mas recomendamos ler e entender cada seção para aproveitar ao máximo.
Antes de começar, certifique-se de que completou a Parte 1 corretamente:
# Verifique se o repositório existe
$ ls -la ~/workspace-as-code/
# Você deve ver:
# drwxr-xr-x ansible/
# drwxr-xr-x dotfiles/
# drwxr-xr-x packer/
# drwxr-xr-x scripts/
# drwxr-xr-x terraform/
# -rw-r--r-- .gitignore
# drwxr-xr-x .git/
# Verifique se as ferramentas estão disponíveis
$ which fzf eza bat ripgrep grc
# Todas devem retornar um caminho como:
# /usr/bin/fzf
# /usr/bin/eza
# /usr/bin/bat
# /usr/bin/rg
# /usr/bin/grc
Se alguma ferramenta não for encontrada, volte à Parte 1 e instale-a.
Dotfiles são arquivos de configuração em sistemas Unix/Linux que começam com um ponto (.). Eles são ocultos por padrão (use ls -la para vê-los) e contêm configurações para programas como shell, editor, git, etc.
| Arquivo | Propósito |
|---|---|
.bashrc |
Configurações do Bash (executado em cada novo terminal) |
.bash_aliases |
Aliases do Bash |
.bash_custom |
Customizações personalizadas e variáveis |
.vimrc |
Configurações do Vim |
.tmux.conf |
Configurações do Tmux |
.gitconfig |
Configurações do Git |
.ssh/config |
Configurações do SSH |
Ao versionarmos nossos dotfiles no Git, conseguimos:
Vamos criar esses arquivos em ~/workspace-as-code/dotfiles/ e depois criar links simbólicos para o home directory.
Antes de adicionar conteúdo, precisamos criar os arquivos onde armazenaremos nossas configurações.
# Navegue até o diretório de dotfiles
$ cd ~/workspace-as-code/dotfiles
# Crie os arquivos vazios
$ touch .bash_custom .bash_aliases
# Verifique se foram criados
$ ls -la
# Você deve ver:
# -rw-r--r-- .bash_custom
# -rw-r--r-- .bash_aliases
Você pode editar os arquivos de várias formas:
Opção 1: Usando Vim (recomendado, será coberto na Parte 3)
$ vim ~/workspace-as-code/dotfiles/.bash_custom
Opção 2: Usando Nano (mais fácil para iniciantes)
$ nano ~/workspace-as-code/dotfiles/.bash_custom
Opção 3: Usando cat com redirecionamento (recomendado para este tutorial)
$ cat > ~/workspace-as-code/dotfiles/.bash_custom << 'EOF'
# [Copie o conteúdo do arquivo aqui]
EOF
Para este tutorial, usaremos a Opção 3 (cat com redirecionamento) para garantir que funcione em qualquer ambiente.
Para manter nossas customizações organizadas, vamos separá-las em arquivos específicos dentro do nosso diretório dotfiles. O ~/.bashrc principal irá apenas carregar esses arquivos.
O arquivo ~/.bashrc é o arquivo de configuração principal do Bash. Ele é executado toda vez que você abre um novo terminal interativo.
# ~/.bashrc
# Se não for shell interativo, saia
[ -z "$PS1" ] && return
# Carregue as configurações customizadas
if [ -f ~/.bash_custom ]; then
source ~/.bash_custom
fi
# Carregue os aliases
if [ -f ~/.bash_aliases ]; then
source ~/.bash_aliases
fi
Este arquivo conterá configurações de ambiente, variáveis de exportação, e a configuração de ferramentas como fzf e o histórico.
Crie o arquivo com o seguinte conteúdo:
# Copie este conteúdo para ~/workspace-as-code/dotfiles/.bash_custom
$ cat > ~/workspace-as-code/dotfiles/.bash_custom << 'EOF'
#!/bin/bash
################################################################################
# .bash_custom
#
# Arquivo de configurações personalizadas para Bash
# Inclui: FZF, Histórico, Editor, SSH Agent, Variáveis de Ambiente
#
# Uso: Adicione ao final do ~/.bashrc:
# if [ -f ~/.bash_custom ]; then
# source ~/.bash_custom
# fi
#
# Autor: Workspace as Code
# Data: 2026-02-21
################################################################################
# ============================================================================
# FZF - FUZZY FINDER CONFIGURATION
# ============================================================================
# Carregar key-bindings do fzf
if command -v fzf &>/dev/null; then
if [ -f /usr/share/doc/fzf/examples/key-bindings.bash ]; then
source /usr/share/doc/fzf/examples/key-bindings.bash
elif [ -f ~/.fzf.bash ]; then
source ~/.fzf.bash
else
FZF_DIR=$(find /usr -name "key-bindings.bash" 2>/dev/null | head -1)
[ -f "$FZF_DIR" ] && source "$FZF_DIR"
fi
else
echo "Aviso: fzf não está instalado. Instale com: sudo apt install fzf"
fi
# ============================================================================
# FZF - CONFIGURAÇÕES AVANÇADAS (com fd e bat)
# ============================================================================
# Usar fd para listar arquivos (mais rápido que find)
if command -v fd &>/dev/null; then
export FZF_DEFAULT_COMMAND='fd --type f --hidden --no-ignore'
export FZF_ALT_C_COMMAND='fd --type d --hidden --no-ignore'
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
fi
# Usar bat para preview (com cores e números de linha)
if command -v bat &>/dev/null; then
export FZF_CTRL_T_OPTS="--preview 'bat --color=always --style=numbers,changes {} 2>/dev/null || head -n 50 {}'"
export FZF_ALT_C_OPTS="--preview 'tree -C {} 2>/dev/null | head -n 50 || eza --tree {} | head -n 50'"
fi
# Tema FZF personalizado (cores modernas)
export FZF_DEFAULT_OPTS="
--color=fg:#cdd6f4,bg:#1e1e2e,hl:#f38ba8
--color=fg+:#cdd6f4,bg+:#313244,hl+:#f38ba8
--color=info:#94e2d5,prompt:#f5c2de,pointer:#f38ba8
--color=marker:#f5c2de,spinner:#f5c2de,header:#94e2d5
--multi
--bind 'ctrl-v:execute(vim {})+abort'
--bind 'ctrl-y:execute-silent(echo {} | xclip -selection clipboard)+abort'
"
# ============================================================================
# HISTÓRICO - CONFIGURAÇÕES AVANÇADAS
# ============================================================================
# Tamanho do histórico
export HISTSIZE=10000
export HISTFILESIZE=20000
# Controle de duplicatas e comandos ignorados
export HISTCONTROL="ignoreboth:erasedups"
export HISTIGNORE="ls:cd:exit:clear:history:pwd:date:uptime:whoami"
# Formato de timestamp no histórico
export HISTTIMEFORMAT="%d/%m/%Y %T "
# Adicionar comandos ao histórico imediatamente
shopt -s histappend
shopt -s cmdhist
# Salvar histórico multi-linha
shopt -s lithist
# ============================================================================
# EDITOR PADRÃO
# ============================================================================
export EDITOR=vim
export VISUAL=vim
export PAGER=less
# ============================================================================
# PROMPT DE COMANDO PERSONALIZADO (PS1)
# ============================================================================
# PS1 Minimalista (padrão)
# Mostra apenas o caminho e o prompt
export PS1="\[\e[38;5;81m\]\w\[\e[0m\] \[\e[38;5;204m\]\$\[\e[0m\] "
# PS1 Informativo (comentado)
# Mostra usuário, host, caminho e status do último comando
# export PS1="\[\e[38;2;161;80;161m\]\u\[\e[0m\]@\[\e[38;2;121;212;133m\]\h\[\e[0m\][\[\e[38;2;0;172;201m\]\w\[\e[0m\]]\[\e[38;2;204;174;135m\]\$ \[\e[0m\] "
# PS1 com Status do Git (comentado - requer git-prompt.sh)
# export PS1="\[\e[38;5;81m\]\w\[\e[0m\]\$(__git_ps1 ' (%s)')\[\e[38;5;204m\] \$ \[\e[0m\]"
# PS1 com Indicador de Erro (comentado)
# export PS1="\[\e[38;5;81m\]\w\[\e[0m\] \[\e[38;5;\$([[ \$? == 0 ]] && echo 82 || echo 196)m\]\$\[\e[0m\] "
# ============================================================================
# SSH AGENT - CONFIGURAÇÃO AUTOMÁTICA
# ============================================================================
SSH_AGENT_FILE=~/.ssh/ssh-agent.env
# Função para iniciar SSH Agent
ssh_agent_start() {
ssh-agent | grep -v '^echo' > "$SSH_AGENT_FILE"
chmod 600 "$SSH_AGENT_FILE"
source "$SSH_AGENT_FILE" > /dev/null
echo "SSH Agent iniciado"
}
# Inicializar SSH Agent se não estiver rodando
if [ -z "$SSH_AUTH_SOCK" ]; then
if [ -f "$SSH_AGENT_FILE" ]; then
source "$SSH_AGENT_FILE" > /dev/null
fi
# Verifica se o agente ainda está rodando
if ! ps -p "$SSH_AGENT_PID" > /dev/null 2>&1; then
ssh_agent_start
fi
fi
# Adicionar chaves SSH automaticamente
# Personalizar com suas chaves
if [ -f ~/.ssh/id_rsa ] && ! ssh-add -l | grep -q "id_rsa"; then
ssh-add ~/.ssh/id_rsa 2>/dev/null
fi
if [ -f ~/.ssh/trabalho ] && ! ssh-add -l | grep -q "trabalho"; then
ssh-add ~/.ssh/trabalho 2>/dev/null
fi
if [ -f ~/.ssh/github ] && ! ssh-add -l | grep -q "github"; then
ssh-add ~/.ssh/github 2>/dev/null
fi
# ============================================================================
# VARIÁVEIS DE AMBIENTE - APLICAÇÕES
# ============================================================================
# EZA - Configurações
if command -v eza &>/dev/null; then
export EZA_STANDARD_OPTIONS="--group-directories-first --icons --color=auto"
fi
# BAT - Configurações
if command -v bat &>/dev/null; then
export BAT_THEME="OneHalfDark"
export BAT_STYLE="numbers,changes"
fi
# RIPGREP - Configurações
if command -v rg &>/dev/null; then
export RIPGREP_CONFIG_PATH=~/.ripgreprc
fi
# ============================================================================
# VARIÁVEIS DE AMBIENTE - DESENVOLVIMENTO
# ============================================================================
# Node.js
export NODE_ENV=development
# Python
export PYTHONUNBUFFERED=1
# Go
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
# Rust
export PATH=$PATH:$HOME/.cargo/bin
# ============================================================================
# VARIÁVEIS DE AMBIENTE - WORKSPACE
# ============================================================================
# Workspace as Code
export WORKSPACE_HOME="$HOME/workspace-as-code"
export WORKSPACE_SCRIPTS="$WORKSPACE_HOME/scripts"
export WORKSPACE_DOTFILES="$WORKSPACE_HOME/dotfiles"
# Adicionar scripts ao PATH
if [ -d "$WORKSPACE_SCRIPTS" ]; then
export PATH="$WORKSPACE_SCRIPTS:$PATH"
fi
# ============================================================================
# OPÇÕES DE SHELL - SHOPT
# ============================================================================
# Permitir ** para busca recursiva
shopt -s globstar
# Corrigir pequenos erros em cd
shopt -s cdspell
# Verificar tamanho da janela após cada comando
shopt -s checkwinsize
# ============================================================================
# FIM DO ARQUIVO .bash_custom
# ============================================================================
EOF
O prompt é a linha que aparece antes de você digitar um comando. Você pode customizá-lo para mostrar informações úteis.
export PS1="\[\e[38;5;81m\]\w\[\e[0m\] \[\e[38;5;204m\]\$\[\e[0m\] "
| Componente | Significado |
|---|---|
\[ e \] |
Marcadores para caracteres não-imprimíveis (cores) |
\e[38;5;81m |
Código de cor (azul) |
\w |
Diretório atual (working directory) |
\e[0m |
Reset de cor (volta ao padrão) |
\$ |
Símbolo $ (ou # se root) |
# Prompt simples
$ export PS1="\w $ "
# Prompt com hora
$ export PS1="\[\e[32m\]\t\[\e[0m\] \w $ "
# Prompt com usuário e host
$ export PS1="\u@\h:\w$ "
# Prompt com status do último comando
$ export PS1="\[\e[32m\]\$?\[\e[0m\] \w $ "
Para tornar permanente, adicione ao .bash_custom.
Aliases são atalhos para comandos mais longos. Eles são uma das maneiras mais eficazes de acelerar seu fluxo de trabalho no terminal.
Neste tutorial, estamos substituindo ferramentas tradicionais por alternativas modernas:
| Tarefa | Ferramenta Tradicional | Ferramenta Moderna | Vantagem |
|---|---|---|---|
| Listar arquivos | ls |
eza |
Cores, ícones, git status |
| Visualizar arquivo | cat |
bat |
Realce de sintaxe, números de linha |
| Buscar em arquivos | grep |
ripgrep |
Muito mais rápido, ignora .gitignore |
| Buscar interativo | history |
fzf |
Interface intuitiva, preview |
| Colorir output | Nenhum | grc |
Cores para ping, traceroute, etc |
Você ainda pode usar as ferramentas tradicionais quando necessário!
Abra o arquivo ~/workspace-as-code/dotfiles/.bash_aliases e adicione o seguinte conteúdo:
# Copie este conteúdo para ~/workspace-as-code/dotfiles/.bash_aliases
$ cat > ~/workspace-as-code/dotfiles/.bash_aliases << 'EOF'
#!/bin/bash
################################################################################
# .bash_aliases
#
# Arquivo de aliases personalizados para Bash
# Organizado por categoria para facilitar manutenção
#
# Uso: Adicione ao final do ~/.bashrc:
# if [ -f ~/.bash_aliases ]; then
# source ~/.bash_aliases
# fi
#
# Autor: Workspace as Code
# Data: 2026-02-21
################################################################################
# ============================================================================
# ALIASES DE FUNÇÕES DO .bash_functions
# ============================================================================
# Atalhos para funções de busca
alias ss='smart_search'
alias fe='fdedit'
alias re='rgedit'
alias po='plocate_open'
alias fo='fopen'
# Atalhos para funções de arquivo
alias bk='backup'
alias bkd='backup_dir'
alias dl='download_file'
alias sb='sync_backup'
# Atalhos para funções de sistema
alias sys='system_info'
alias help='cmd_help'
alias vl='view_lines'
# Atalhos para funções de desenvolvimento
alias ear='edit_and_run'
alias fh='fhistory'
# Atalhos para funções de produtividade
alias mkcd='mkcd'
alias cgr='cd_git_root'
alias ext='extract'
alias cmp='compress'
# ============================================================================
# ALIASES DE REDE (coloridos com grc)
# ============================================================================
if command -v grc &>/dev/null; then
alias tail='grc tail'
alias ping='grc ping'
alias ping3='grc ping -c3'
alias ping5='grc ping -c5'
alias ps='grc ps'
alias traceroute='grc traceroute'
alias dig='grc dig'
alias ss='grc ss'
alias netstat='grc netstat'
alias ifconfig='grc ifconfig'
fi
# ============================================================================
# ALIASES PARA CURL E WGET
# ============================================================================
# Curl com headers JSON
alias curl_json='curl -H "Content-Type: application/json"'
alias curl_post='curl -X POST'
alias curl_get='curl -X GET'
alias curl_put='curl -X PUT'
alias curl_delete='curl -X DELETE'
alias curl_auth='curl -H "Authorization: Bearer"'
alias curl_verbose='curl -v'
# Wget com continuação de download
alias wget='wget -c'
alias wget_bg='wget -b'
alias wget_mirror='wget -m'
# ============================================================================
# ALIASES PARA GREP E RIPGREP
# ============================================================================
if command -v rg &>/dev/null; then
alias grep='rg --smart-case'
alias rg='rg --smart-case'
alias rg_py='rg -g "*.py"'
alias rg_js='rg -g "*.js"'
alias rg_json='rg -g "*.json"'
alias rg_yaml='rg -g "*.yaml" -g "*.yml"'
alias rg_sh='rg -g "*.sh"'
else
alias grep='grep --color=auto'
fi
# ============================================================================
# ALIASES DE VISUALIZAÇÃO E SISTEMA
# ============================================================================
# Informações de disco e memória
alias df='df -hT'
alias du='du -h --max-depth=1'
alias free='free -h'
alias top='btop'
alias monitor='btop'
# Informações de sistema
alias uname='uname -a'
alias uptime='uptime'
alias whoami='whoami'
alias hostname='hostname'
# ============================================================================
# ALIASES EZA (Substituto moderno para ls)
# ============================================================================
if command -v eza &>/dev/null; then
# Aliases básicos
alias ls='eza $EZA_STANDARD_OPTIONS'
alias l="eza --long $EZA_STANDARD_OPTIONS"
alias ll='eza --long --header --git $EZA_STANDARD_OPTIONS'
alias la='eza --long --all --header --git $EZA_STANDARD_OPTIONS'
# Aliases especializados
alias lh='eza --long --all --header --git --no-permissions --no-user --no-time $EZA_STANDARD_OPTIONS'
alias lg='eza --grid $EZA_STANDARD_OPTIONS'
alias lr='eza --long --sort=size --reverse $EZA_STANDARD_OPTIONS'
alias lt='eza --long --sort=modified --reverse $EZA_STANDARD_OPTIONS'
alias lx='eza --long --sort=extension $EZA_STANDARD_OPTIONS'
alias li='eza --long --inode $EZA_STANDARD_OPTIONS'
alias ld='eza --long --only-dirs $EZA_STANDARD_OPTIONS'
alias lm='eza --long --sort=modified $EZA_STANDARD_OPTIONS'
# Aliases de árvore
alias tree='eza --tree --level=2 $EZA_STANDARD_OPTIONS'
alias tree1='eza --tree --level=1 $EZA_STANDARD_OPTIONS'
alias tree3='eza --tree --level=3 $EZA_STANDARD_OPTIONS'
alias tree_all='eza --tree $EZA_STANDARD_OPTIONS'
else
# Fallback para ls normal se eza não estiver instalado
alias ls='ls --color=auto --group-directories-first'
alias ll='ls -alFh --group-directories-first'
alias la='ls -A --group-directories-first'
alias l='ls -lh --group-directories-first'
fi
# ============================================================================
# ALIASES BAT (Substituto moderno para cat)
# ============================================================================
if command -v bat &>/dev/null; then
alias cat='bat --paging=never --theme="OneHalfDark"'
alias b='bat --paging=never'
alias bat_theme='bat --list-themes'
alias bat_lang='bat --list-languages'
else
# Fallback para cat normal
alias cat='cat'
fi
# ============================================================================
# ALIASES FD (Substituto moderno para find)
# ============================================================================
if command -v fd &>/dev/null; then
alias fde='fd -e'
alias fdd='fd --type d'
alias fdf='fd --type f'
alias fdh='fd --hidden'
alias fdx='fd --type x'
fi
# ============================================================================
# ALIASES VIM
# ============================================================================
alias v='vim'
alias vi='vim'
alias view='vim -R'
# ============================================================================
# ALIASES TMUX
# ============================================================================
alias t='tmux'
alias tn='tmux new-session -s'
alias ta='tmux attach-session -t'
alias tl='tmux list-sessions'
alias tk='tmux kill-session -t'
alias tka='tmux kill-server'
alias ts='tmux send-keys -t'
# ============================================================================
# ALIASES GIT
# ============================================================================
alias g='git'
alias ga='git add'
alias gaa='git add -A'
alias gap='git add -p'
alias gb='git branch'
alias gba='git branch -a'
alias gbd='git branch -d'
alias gc='git commit'
alias gcm='git commit -m'
alias gca='git commit --amend'
alias gco='git checkout'
alias gcob='git checkout -b'
alias gd='git diff'
alias gds='git diff --staged'
alias gf='git fetch'
alias gl='git log --oneline'
alias glg='git log --graph --oneline --all'
alias gp='git push'
alias gpu='git push -u origin'
alias gpl='git pull'
alias gr='git rebase'
alias gri='git rebase -i'
alias grm='git reset --mixed'
alias grs='git reset --soft'
alias grh='git reset --hard'
alias gs='git status'
alias gst='git stash'
alias gsta='git stash apply'
alias gstl='git stash list'
alias gstp='git stash pop'
alias gt='git tag'
# ============================================================================
# ALIASES DE PRODUTIVIDADE
# ============================================================================
# Navegação rápida
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
alias cd..='cd ..'
alias cd...='cd ../..'
alias cd....='cd ../../..'
alias back='cd -'
alias home='cd ~'
# Operações de arquivo
alias mkdir='mkdir -pv'
alias rm='rm -i'
alias cp='cp -iv'
alias mv='mv -iv'
alias ln='ln -iv'
# Operações de diretório
alias pwd='pwd -P'
alias dirs='dirs -v'
# ============================================================================
# ALIASES PARA JQ (Processador JSON)
# ============================================================================
if command -v jq &>/dev/null; then
alias jq_format='jq "."'
alias jq_keys='jq "keys"'
alias jq_values='jq "values"'
alias jq_length='jq "length"'
alias jq_type='jq "type"'
fi
# ============================================================================
# ALIASES PARA RSYNC E BACKUP
# ============================================================================
alias rsync_safe='rsync -avz --progress'
alias rsync_delete='rsync -avz --delete --progress'
alias rsync_dry='rsync -avz --dry-run --progress'
# ============================================================================
# ALIASES DE ATUALIZAÇÃO E LIMPEZA
# ============================================================================
alias update='sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y && sudo apt autoclean'
alias upgrade='sudo apt upgrade -y'
alias autoremove='sudo apt autoremove -y'
alias autoclean='sudo apt autoclean'
alias clean='sudo apt clean'
# ============================================================================
# ALIASES DE INFORMAÇÃO
# ============================================================================
alias ipinfo='curl -s http://ipinfo.io/ip'
alias myip='curl -s http://ipinfo.io/ip'
alias publicip='curl -s http://ipinfo.io/ip'
alias localip="hostname -I"
alias ports='netstat -tuln'
alias listening='lsof -i -P -n'
# ============================================================================
# ALIASES DIVERSOS
# ============================================================================
# Editor padrão
alias edit='$EDITOR'
alias nano='nano'
# Compressão
alias tar_gz='tar -czf'
alias tar_bz2='tar -cjf'
alias tar_xz='tar -cJf'
alias untar='tar -xf'
# Permissões
alias chmod_read='chmod 644'
alias chmod_exec='chmod 755'
alias chmod_private='chmod 600'
# Busca rápida
alias path='echo $PATH | tr ":" "\n"'
alias which_all='which -a'
# ============================================================================
# FIM DO ARQUIVO .bash_aliases
# ============================================================================
EOF
Dica Útil: Os blocos
if command -v ...garantem que os aliases só serão criados se a ferramenta correspondente estiver instalada, tornando suas configurações portáteis e à prova de falhas.
Para que o Bash reconheça nossos novos arquivos, precisamos referenciá-los no ~/.bashrc.
Você pode fazer isso de duas formas:
Opção 1: Manualmente (mais seguro)
# Abra o ~/.bashrc em um editor
$ vim ~/.bashrc
# Adicione ao final do arquivo:
# source ~/workspace-as-code/dotfiles/.bash_custom
# source ~/workspace-as-code/dotfiles/.bash_aliases
# Salve e saia
Opção 2: Usando echo (mais rápido)
# Adicione as linhas ao final do ~/.bashrc
$ echo "source ~/workspace-as-code/dotfiles/.bash_custom" >> ~/.bashrc
$ echo "source ~/workspace-as-code/dotfiles/.bash_aliases" >> ~/.bashrc
# Verifique se foi adicionado
$ tail -5 ~/.bashrc
Após adicionar as linhas ao ~/.bashrc, você pode carregá-las de duas formas:
Opção 1: Abrir um novo terminal (mais limpo)
# Feche o terminal atual e abra um novo
# As configurações serão carregadas automaticamente
Opção 2: Usar source (imediato)
# Carregue as configurações na sessão atual
$ source ~/.bashrc
# Ou carregue apenas os arquivos específicos
$ source ~/workspace-as-code/dotfiles/.bash_custom
$ source ~/workspace-as-code/dotfiles/.bash_aliases
Após ativar as configurações, teste cada alias para verificar se está funcionando:
# Listar com eza (cores e ícones)
$ ls
# Você deve ver algo como:
# ansible/ dotfiles/ packer/ scripts/ terraform/ .gitignore
# Listar com detalhes
$ ll
# Listar tudo incluindo ocultos
$ la
# Mostrar estrutura em árvore
$ tree
# Usar cat com realce de sintaxe
$ cat ~/.bashrc
# Você deve ver o arquivo com cores e números de linha
# Ping com cores
$ ping -c 3 google.com
# Você deve ver a saída com cores
# Traceroute com cores
$ traceroute google.com
# Dig com cores
$ dig google.com
# Obter seu IP público
$ ipinfo
# Você deve ver algo como:
# 203.0.113.42
# Atualizar sistema
$ update
# Isso executará apt update, upgrade, autoremove e autoclean
Você deve ver cores, ícones e formatação melhorada em todos os casos!
O FZF foi configurado com atalhos de teclado. Teste-os:
| Atalho | Função | Descrição |
|---|---|---|
Ctrl+R |
Buscar histórico | Busca interativa no histórico de comandos |
Ctrl+T |
Selecionar arquivo | Busca e seleciona um arquivo |
Alt+C |
Navegar diretório | Busca e muda para um diretório |
# Pressione Ctrl+R para buscar no histórico
$ Ctrl+R
# Digite parte de um comando anterior
# Use as setas para navegar
# Pressione Enter para executar
# Pressione Ctrl+T para selecionar um arquivo
$ vim Ctrl+T
# Selecione um arquivo com as setas
# Pressione Enter para abrir no vim
# Pressione Alt+C para navegar entre diretórios
$ Alt+C
# Selecione um diretório
# Pressione Enter para mudar para ele
Se você encontrar problemas, aqui estão as soluções para os erros mais comuns:
Problema: Você executou source mas os aliases não funcionam.
Solução:
# Verifique se o arquivo foi carregado
$ grep "bash_aliases" ~/.bashrc
# Se não estiver, adicione manualmente:
$ echo "source ~/workspace-as-code/dotfiles/.bash_aliases" >> ~/.bashrc
$ source ~/.bashrc
# Verifique se o alias foi criado
$ alias ls
Problema: O prompt não mostra as cores esperadas.
Solução:
# Verifique se seu terminal suporta cores
$ echo $TERM
# Deve ser algo como 'xterm-256color'
# Se não for, adicione ao .bash_custom:
$ export TERM=xterm-256color
$ source ~/.bash_custom
Problema: Ctrl+R ou Ctrl+T não abre o fzf.
Solução:
# Verifique se fzf está instalado
$ which fzf
# Se não estiver, instale:
$ sudo apt install fzf
# Verifique se o arquivo de key-bindings existe
$ ls /usr/share/doc/fzf/examples/key-bindings.bash
# Se não existir, instale o pacote completo:
$ sudo apt install fzf
$ source ~/.bash_custom
Problema: Eza mostra ? em vez de ícones.
Solução:
# Isso geralmente significa que sua fonte não suporta ícones.
# Use uma fonte que suporte Nerd Fonts (será coberto na Parte 5)
# Por enquanto, você pode desabilitar ícones:
$ alias ls='eza --group-directories-first --color=auto'
# Ou edite o .bash_aliases e remova --icons
Problema: Você instalou uma ferramenta, mas o Bash não a encontra.
Solução:
# Recarregue o hash do shell
$ hash -r
# Ou abra um novo terminal
Crie um script para validar que tudo está funcionando corretamente:
# Crie o script
$ cat > ~/workspace-as-code/scripts/validate-bash.sh << 'EOF'
#!/bin/bash
# Script para validar configuração do Bash
echo "=========================================="
echo " Validando Configuracao do Bash"
echo "=========================================="
echo ""
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m'
PASSED=0
FAILED=0
check() {
if eval "$1" &> /dev/null; then
echo -e "${GREEN}[OK]${NC} $2"
((PASSED++))
else
echo -e "${RED}[FAIL]${NC} $2"
((FAILED++))
fi
}
# Verificar arquivos
check "[ -f ~/workspace-as-code/dotfiles/.bash_custom ]" "Arquivo .bash_custom existe"
check "[ -f ~/workspace-as-code/dotfiles/.bash_aliases ]" "Arquivo .bash_aliases existe"
# Verificar se estão carregados
check "grep -q 'bash_custom' ~/.bashrc" ".bash_custom esta carregado no .bashrc"
check "grep -q 'bash_aliases' ~/.bashrc" ".bash_aliases esta carregado no .bashrc"
# Verificar aliases
check "alias | grep -q 'ls='" "Alias 'ls' esta definido"
check "alias | grep -q 'll='" "Alias 'll' esta definido"
check "alias | grep -q 'la='" "Alias 'la' esta definido"
# Verificar ferramentas
check "command -v fzf" "FZF instalado"
check "command -v eza" "EZA instalado"
check "command -v bat" "BAT instalado"
check "command -v rg" "RIPGREP instalado"
# Verificar variáveis de ambiente
check "[ ! -z \$HISTSIZE ]" "HISTSIZE configurado"
check "[ ! -z \$EDITOR ]" "EDITOR configurado"
check "[ ! -z \$PS1 ]" "PS1 configurado"
echo ""
echo "=========================================="
echo -e "Resultado: ${GREEN}$PASSED passou${NC}, ${RED}$FAILED falhou${NC}"
echo "=========================================="
if [ $FAILED -eq 0 ]; then
echo "Tudo esta configurado corretamente!"
exit 0
else
echo "Alguns itens falharam. Revise os passos acima."
exit 1
fi
EOF
# Dê permissão de execução
$ chmod +x ~/workspace-as-code/scripts/validate-bash.sh
# Execute o script
$ ~/workspace-as-code/scripts/validate-bash.sh
# Você deve ver algo como:
# ==========================================
# Validando Configuracao do Bash
# ==========================================
#
# [OK] Arquivo .bash_custom existe
# [OK] Arquivo .bash_aliases existe
# [OK] .bash_custom esta carregado no .bashrc
# [OK] .bash_aliases esta carregado no .bashrc
# [OK] Alias 'ls' esta definido
# ...
# ==========================================
# Resultado: 13 passou, 0 falhou
# ==========================================
# Tudo esta configurado corretamente!
Você transformou seu shell Bash em uma ferramenta poderosa e eficiente. Com aliases inteligentes, histórico aprimorado e integração com ferramentas modernas, você economizará tempo e melhorará sua produtividade.
✓ Entendimento de dotfiles e sua importância
✓ Configurações de Bash organizadas em arquivos dedicados
✓ Aliases para comandos comuns
✓ Histórico de comandos otimizado
✓ Prompt customizado e informativo
✓ Integração com ferramentas modernas (fzf, eza, bat, ripgrep)
✓ Script de validação para verificar configurações
Teste todos os aliases:
$ source ~/.bashrc
$ ls
$ ll
$ tree
$ ping -c 2 google.com
Customize o prompt conforme desejar:
# Edite o PS1 no .bash_custom para seu gosto
$ vim ~/workspace-as-code/dotfiles/.bash_custom
Explore as ferramentas FZF:
# Use Ctrl+R para buscar no histórico
$ Ctrl+R
# Use Ctrl+T para selecionar arquivo
$ vim Ctrl+T
# Use Alt+C para navegar entre diretórios
$ Alt+C
Commit suas mudanças:
$ cd ~/workspace-as-code
$ git add dotfiles/.bash_custom dotfiles/.bash_aliases scripts/validate-bash.sh
$ git commit -m "feat: add bash customizations and aliases"
$ git push origin main
Agora que nosso shell está otimizado, vamos configurar dois editores poderosos: Vim para edição de texto e Tmux para multiplexação de terminal. Essas ferramentas, quando combinadas com nosso Bash customizado, criarão um ambiente de trabalho verdadeiramente profissional.
Fim da Parte 2
Próxima: Configurando Vim e Tmux