Estação de Trabalho como Código (Parte 2): Customizando o Bash com Aliases e Funções
Aprenda a customizar seu ambiente Bash criando aliases para comandos comuns, otimizando seu histórico e configurando um prompt de comando mais informativo. Esta segunda parte da série foca em tornar sua linha de comando mais produtiva e agradável.
Tutorial Anterior: Estação de Trabalho como Código (Parte 1): Fundação com Ubuntu 24.04 e Git
Introdução
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.
Objetivos desta Parte
- Entender o conceito de dotfiles e sua importância
- Criar arquivos de configuração dedicados para aliases e funções Bash
- Configurar o histórico de comandos para ser mais útil e persistente
- Definir um prompt de comando (PS1) customizado e informativo
- Criar uma coleção de aliases para comandos comuns utilizando ferramentas modernas
- Integrar fzf para buscas inteligentes no histórico e em arquivos
- Validar que todas as configurações foram aplicadas corretamente
Pré-requisitos
- Conclusão da Parte 1 desta série
- O repositório
workspace-as-codedeve existir no seu diretório home - Familiaridade básica com Bash e terminal Linux
A quem se destina
Este tutorial é ideal para:
- SysAdmins: Que querem otimizar seu fluxo de trabalho no terminal
- DevOps Engineers: Que desejam um ambiente shell mais eficiente e produtivo
- Desenvolvedores: Interessados em melhorar produtividade e velocidade de trabalho
- Profissionais de TI: Que passam muito tempo no terminal e querem maximizar eficiência
Pré-conhecimento: Familiaridade básica com Bash e terminal Linux é recomendada. Se você completou a Parte 1, você tem o conhecimento necessário.
Tempo Estimado
⏱ 40-50 minutos
Isso inclui:
- Leitura e compreensão: ~10 min
- Criação de arquivos: ~5 min
- Adição de conteúdo: ~10 min
- Teste dos aliases: ~10 min
- Customização pessoal: ~5-15 min
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.
Verificando Pré-Requisitos
Antes de começar, certifique-se de que completou a Parte 1 corretamente:
Verificando o Repositório
1
2
3
4
5
6
7
8
9
10
11
# 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/
Verificando as Ferramentas Instaladas
1
2
3
4
5
6
7
8
9
# 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.
O que são Dotfiles?
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.
Exemplos Comuns de Dotfiles
| 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 |
Por que Versionamos Dotfiles?
Ao versionarmos nossos dotfiles no Git, conseguimos:
- Reproduzir nosso ambiente em qualquer máquina
- Rastrear mudanças ao longo do tempo
- Compartilhar configurações com a equipe
- Manter backup seguro de nossas preferências
- Reverter mudanças se algo der errado
Vamos criar esses arquivos em ~/workspace-as-code/dotfiles/ e depois criar links simbólicos para o home directory.
Preparando os Arquivos de Configuração
Antes de adicionar conteúdo, precisamos criar os arquivos onde armazenaremos nossas configurações.
Criando os Arquivos
1
2
3
4
5
6
7
8
9
10
11
12
# 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
Editando os Arquivos
Você pode editar os arquivos de várias formas:
Opção 1: Usando Vim (recomendado, será coberto na Parte 3)
1
$ vim ~/workspace-as-code/dotfiles/.bash_custom
Opção 2: Usando Nano (mais fácil para iniciantes)
1
$ nano ~/workspace-as-code/dotfiles/.bash_custom
Opção 3: Usando cat com redirecionamento (recomendado para este tutorial)
1
2
3
$ 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.
Configuração Inicial do Bash
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.
Entendendo o ~/.bashrc
O arquivo ~/.bashrc é o arquivo de configuração principal do Bash. Ele é executado toda vez que você abre um novo terminal interativo.
Estrutura Típica do ~/.bashrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# ~/.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
Configurações Personalizadas (.bash_custom)
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:
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
# 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
Entendendo o Prompt Customizado (PS1)
O prompt é a linha que aparece antes de você digitar um comando. Você pode customizá-lo para mostrar informações úteis.
Componentes do PS1
1
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) |
Testando Diferentes Prompts
1
2
3
4
5
6
7
8
9
10
11
# 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.
Criando Atalhos com Aliases
Aliases são atalhos para comandos mais longos. Eles são uma das maneiras mais eficazes de acelerar seu fluxo de trabalho no terminal.
Ferramentas Modernas vs Tradicionais
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!
Criando o Arquivo de Aliases
Abra o arquivo ~/workspace-as-code/dotfiles/.bash_aliases e adicione o seguinte conteúdo:
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
# 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.
Ativando as Novas Configurações
Para que o Bash reconheça nossos novos arquivos, precisamos referenciá-los no ~/.bashrc.
Adicionando Nossas Configurações ao ~/.bashrc
Você pode fazer isso de duas formas:
Opção 1: Manualmente (mais seguro)
1
2
3
4
5
6
7
8
# 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)
1
2
3
4
5
6
# 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
Carregando as Configurações
Após adicionar as linhas ao ~/.bashrc, você pode carregá-las de duas formas:
Opção 1: Abrir um novo terminal (mais limpo)
1
2
# Feche o terminal atual e abra um novo
# As configurações serão carregadas automaticamente
Opção 2: Usar source (imediato)
1
2
3
4
5
6
# 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
Testando os Aliases
Após ativar as configurações, teste cada alias para verificar se está funcionando:
Aliases de Listagem
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 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
Aliases de Visualização
1
2
3
4
# Usar cat com realce de sintaxe
$ cat ~/.bashrc
# Você deve ver o arquivo com cores e números de linha
Aliases de Rede
1
2
3
4
5
6
7
8
9
10
# 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
Aliases Úteis
1
2
3
4
5
6
7
8
9
10
# 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!
Usando FZF para Buscas Inteligentes
O FZF foi configurado com atalhos de teclado. Teste-os:
Atalhos do FZF
| 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 |
Exemplos de Uso
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 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
Troubleshooting
Se você encontrar problemas, aqui estão as soluções para os erros mais comuns:
Aliases não funcionam após fazer source
Problema: Você executou source mas os aliases não funcionam.
Solução:
1
2
3
4
5
6
7
8
9
# 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
Prompt não aparece com cores
Problema: O prompt não mostra as cores esperadas.
Solução:
1
2
3
4
5
6
7
# 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
FZF não funciona
Problema: Ctrl+R ou Ctrl+T não abre o fzf.
Solução:
1
2
3
4
5
6
7
8
9
10
11
12
# 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
Eza mostra caracteres estranhos
Problema: Eza mostra ? em vez de ícones.
Solução:
1
2
3
4
5
6
7
# 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
Comando “command not found” para ferramentas instaladas
Problema: Você instalou uma ferramenta, mas o Bash não a encontra.
Solução:
1
2
3
4
# Recarregue o hash do shell
$ hash -r
# Ou abra um novo terminal
Validando Sua Configuração
Crie um script para validar que tudo está funcionando 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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# 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!
Conclusão
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.
O Que Você Alcançou
✓ 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
Próximos Passos Imediatos
- Teste todos os aliases:
1 2 3 4 5
$ source ~/.bashrc $ ls $ ll $ tree $ ping -c 2 google.com
- Customize o prompt conforme desejar:
1 2
# Edite o PS1 no .bash_custom para seu gosto $ vim ~/workspace-as-code/dotfiles/.bash_custom
- Explore as ferramentas FZF:
1 2 3 4 5 6 7 8
# 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:
1 2 3 4
$ 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
Próximo Tutorial
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.
Recursos Adicionais
- Documentação do Bash
- FZF - Fuzzy Finder
- EZA - Modern ls
- Ripgrep - Fast grep
- BAT - Cat with syntax highlighting
- GRC - Generic Colorizer
Fim da Parte 2
Próxima: Configurando Vim e Tmux