Aliases e funções no Bash que todo dev deveria ter
1. Fundamentos: Por que aliases e funções são essenciais para devs
1.1. Redução de digitação repetitiva e prevenção de erros
Todo desenvolvedor que passa horas no terminal sabe o quanto comandos repetitivos consomem tempo e aumentam a chance de erros de digitação. Aliases e funções no Bash resolvem esse problema ao transformar sequências longas de comandos em atalhos de poucos caracteres. Um git log --oneline --graph --decorate --all vira simplesmente glg. Além de agilizar o trabalho, você reduz drasticamente erros como esquecer flags importantes.
1.2. Diferença entre alias simples e funções complexas no Bash
Aliases são ideais para substituições diretas de comandos com parâmetros fixos. Já funções permitem lógica condicional, loops, parâmetros posicionais e processamento mais elaborado. A regra prática: se você precisa de argumentos variáveis ou múltiplos comandos encadeados, use função. Caso contrário, um alias resolve.
# Alias simples - substituição direta
alias ll='ls -lahF'
# Função - aceita argumentos e executa lógica
mkcd() {
mkdir -p "$1" && cd "$1"
}
1.3. Onde armazenar: .bashrc, .bash_aliases e boas práticas de organização
O arquivo ~/.bashrc é carregado em todo shell interativo. Para manter a organização, crie um arquivo separado ~/.bash_aliases e inclua no .bashrc:
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
Isso mantém seus atalhos isolados e fáceis de versionar com Git.
2. Aliases indispensáveis para navegação e manipulação de arquivos
2.1. ll, la, lt e variações personalizadas do ls
alias ll='ls -lahF'
alias la='ls -A'
alias lt='ls -ltrh' # ordenado por data, mais recentes no final
alias ldot='ls -ld .*' # apenas arquivos ocultos
2.2. Atalhos para cd com histórico (.., ..., back)
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias back='cd "$OLDPWD"' # volta ao diretório anterior
2.3. Comandos protegidos: cp -i, mv -i, rm -i e rm -rf com confirmação
alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -i'
# Para rm -rf com prompt de segurança
alias rmrf='rm -rfv'
alias rmsafe='rm -rfv --interactive=once'
3. Aliases e funções para versionamento com Git
3.1. Atalhos para git status, git log e git diff com formatação visual
alias gs='git status -sb'
alias gl='git log --oneline --graph --decorate --all'
alias gd='git diff --color-words'
alias gds='git diff --staged'
alias gtree='git log --graph --oneline --all --pretty=format:"%C(yellow)%h%C(cyan)%d%Creset %s %C(green)(%cr)%Creset"'
3.2. Função para criar branch com push automático e checkout rápido
gcb() {
if [ -z "$1" ]; then
echo "Uso: gcb nome-da-branch"
return 1
fi
git checkout -b "$1" && git push -u origin "$1"
}
3.3. Alias para git add --all + git commit -m em um só comando
gacm() {
if [ -z "$1" ]; then
echo "Uso: gacm \"mensagem do commit\""
return 1
fi
git add --all && git commit -m "$1"
}
4. Funções para gerenciamento de processos e busca
4.1. find e grep com cores, recursão e exclusão de diretórios
alias grep='grep --color=auto'
alias grepr='grep -r --color=auto --exclude-dir={.git,node_modules,vendor}'
# Busca recursiva ignorando binários
alias grept='grep -rI --color=auto'
4.2. Função psgrep para localizar e matar processos pelo nome
psgrep() {
if [ -z "$1" ]; then
echo "Uso: psgrep nome-do-processo"
return 1
fi
ps aux | grep -i "$1" | grep -v grep
}
pskill() {
if [ -z "$1" ]; then
echo "Uso: pskill nome-do-processo"
return 1
fi
ps aux | grep -i "$1" | grep -v grep | awk '{print $2}' | xargs -r kill -9
}
4.3. Alias para monitoramento rápido: htop, top e df -h com parâmetros frequentes
alias mem='free -h'
alias disk='df -h --total | grep -v tmpfs'
alias ports='ss -tulanp'
alias myip='curl -s ifconfig.me'
5. Funções avançadas para automação de tarefas do dia a dia
5.1. Função para criar diretórios e entrar neles em um passo (mkcd)
mkcd() {
if [ -z "$1" ]; then
echo "Uso: mkcd nome-do-diretorio"
return 1
fi
mkdir -p "$1" && cd "$1"
}
5.2. Extração de arquivos compactados com detecção automática de formato (extract)
extract() {
if [ -f "$1" ]; then
case "$1" in
*.tar.bz2) tar xjf "$1" ;;
*.tar.gz) tar xzf "$1" ;;
*.bz2) bunzip2 "$1" ;;
*.rar) unrar e "$1" ;;
*.gz) gunzip "$1" ;;
*.tar) tar xf "$1" ;;
*.tbz2) tar xjf "$1" ;;
*.tgz) tar xzf "$1" ;;
*.zip) unzip "$1" ;;
*.Z) uncompress "$1" ;;
*.7z) 7z x "$1" ;;
*) echo "Formato nao reconhecido: $1" ;;
esac
else
echo "Arquivo nao encontrado: $1"
fi
}
5.3. Função para backup rápido de arquivos com timestamp (bak)
bak() {
if [ -z "$1" ]; then
echo "Uso: bak arquivo"
return 1
fi
cp -r "$1" "${1}.bak.$(date +%Y%m%d_%H%M%S)"
}
6. Segurança, logs e debugging de aliases e funções
6.1. Como evitar conflitos com comandos nativos (uso de unalias e command)
Para desabilitar temporariamente um alias e usar o comando original:
# Desabilita alias temporariamente
\ls
command ls
/bin/ls
# Remove alias permanentemente no shell atual
unalias ll
6.2. Testando aliases em subshell e depurando com set -x e type
# Verifica o que um alias expande
type ll
type mkcd
# Depura execução de função
set -x
mkcd /tmp/teste
set +x
# Testa em subshell sem modificar o shell atual
bash -c 'source ~/.bash_aliases; ll'
6.3. Carregamento condicional: aliases específicos por host ou projeto
# Aliases específicos para servidor de produção
if [[ "$HOSTNAME" == "prod-server" ]]; then
alias deploy='cap production deploy'
alias logs='tail -f /var/log/app/production.log'
fi
# Aliases específicos para projetos com Docker
if [ -f "docker-compose.yml" ]; then
alias dc='docker-compose'
alias dcu='docker-compose up -d'
fi
7. Bônus: Como criar seu próprio arsenal personalizado
7.1. Estrutura de arquivo .bash_aliases modular e comentado
# ==========================================
# NAVEGAÇÃO
# ==========================================
alias ..='cd ..'
alias ...='cd ../..'
# ==========================================
# LISTAGEM DE ARQUIVOS
# ==========================================
alias ll='ls -lahF'
alias la='ls -A'
# ==========================================
# GIT
# ==========================================
alias gs='git status -sb'
alias gl='git log --oneline --graph --all'
# ==========================================
# FUNÇÕES
# ==========================================
mkcd() { mkdir -p "$1" && cd "$1"; }
extract() { ... }
7.2. Versionamento dos aliases com Git e sincronização entre máquinas
cd ~
git init
git add .bash_aliases .bashrc
git commit -m "Inicializando dotfiles"
# Em outra máquina
git clone https://github.com/seuuser/dotfiles.git ~/dotfiles
ln -s ~/dotfiles/.bash_aliases ~/.bash_aliases
7.3. Checklist de aliases essenciais para começar hoje mesmo
- [ ]
ll,la,ltpara listagem - [ ]
..,...,backpara navegação - [ ]
cp -i,mv -i,rm -ipara proteção - [ ]
gs,gl,gdpara Git - [ ]
mkcdpara criar e entrar em diretórios - [ ]
extractpara descompactar qualquer formato - [ ]
bakpara backup rápido com timestamp - [ ]
psgrepepskillpara gerenciar processos - [ ]
gacmpara add + commit em um comando
Referências
- Bash Reference Manual - Aliases — Documentação oficial do GNU Bash sobre criação e gerenciamento de aliases.
- Advanced Bash-Scripting Guide: Functions — Guia avançado com exemplos detalhados de funções no Bash.
- Git SCM - Git Aliases — Capítulo oficial do livro Pro Git sobre como criar aliases personalizados para comandos Git.
- Bash Aliases: A Beginner's Guide — Tutorial da DigitalOcean com aliases práticos e explicações claras para iniciantes.
- Dotfiles GitHub Guide — Curadoria de melhores práticas para gerenciar dotfiles, incluindo aliases e funções do Bash.