Comandos personalizados no Linux
O Linux permite diversas modificações para auxiliar e simplificar o dia a dia do seu usuário. Uma forma de criar comandos customizados no Linux é por meio da modificação do arquivo .bashrc
.
O .bashrc
é um arquivo de script que é executado toda vez que um novo terminal é iniciado no Linux. Neste arquivo existem diversas configurações da sessão atual do terminal.
Além das configurações já existentes também é possível adicionar novos comandos, que variam de acordo com a necessidade do usuário. Alguns exemplos de comandos podem ser:
➤ Apresentar o nome da branch do projeto GIT no terminal;
➤ Comando para descompactar um arquivo;
➤ Comandos para simplificar o uso do GIT;
Modificando o arquivo .bashrc
Para os comandos personalizados funcionarem eles devem ser adicionados no arquivo .bashrc
. Esse arquivo está localizado na pasta: /home/<seu-username>/
Obs: Toda vez que um novo terminal for iniciado, por padrão você já estará nesta pasta.
Existem diversas formas de alterar esse arquivo, uma das formas mais simples é utilizando o vscode. Para abrir o arquivo no vscode você pode utilizar o seguinte comando:
code .bashrc
Após realizar as modificações no arquivo, para o terminal aberto entender as alterações você pode utilizar o seguinte comando:
Obs: Caso você feche o terminal e abra um novo, as modificações realizadas também serão identificadas. Entretanto, é interessante utilizar o comando source antes pois ele informará se existe algum problema no código inserido.
source .bashrc
Outro detalhe importante é tomar cuidado para não modificar ou remover as linhas já existentes no .bashrc
, apenas faça isso se você souber o que está fazendo.
Criação de abreviações (aliases)
O alias serve para evitar a repetição de um mesmo comando sempre que for necessário a sua utilização. Em vez de digitar todo o comando, é possível criar uma abreviação e então chamar o comando a partir da abreviação.
Por exemplo, o primeiro alias do bloco de código abaixo, é um alias para encontrar o IP do computador. Ou seja, toda vez que for digitado no terminal ip
a resposta será o IP do computador. Além disso, a partir do comando xclip o IP é automaticamente copiado para a clipboard / área de transferência.
Obs: Quando uma linha inicia com hashtag (
#
) significa que essa linha é um comentário.
# alias para mostrar o ip do computador
alias ip="echo $(hostname -I | awk '{print $1}') | xclip -sel clip && echo $(hostname -I | awk '{print $1}')"
# alias para aprimorar o comando já existente ls (listar os arquivos de uma pasta)
alias ls='ls -CF --color=auto'
alias la='ls -ACF --color=auto'
alias ll='ls -ACFl --color=auto'
# alias para ls em forma de árvore
alias lstree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^/]*//--/g' -e 's/^/ /' -e 's/-/|/'"
# alias para docker-compose
alias dc='docker-compose'
# alias para utilizar por padrão o python e o pip na versão 3
alias python='python3'
alias pip='pip3'
GIT aliases
Exemplos de aliases para facilitar a utilização do GIT:
alias ga='git add'
alias gl='git pull'
alias gp='git push'
alias gs='git status'
alias gstash='git stash'
alias glog='git log'
Criação de constantes
O script permite a criação de constantes para simplificar a construção dos comandos, como apresentado no bloco de código abaixo, no qual foi construído constantes de cores para personalizar o retorno dos comandos.
Obs: Cada cor possui duas constantes, a diferença é que quando a constante está em letras maiúsculas significa que além da cor é aplicado negrito para o retorno.
# some colors
red="\[\033[0;31m\]"
RED="\[\033[1;31m\]"
green="\[\033[0;32m\]"
GREEN="\[\033[1;32m\]"
yellow="\[\033[0;33m\]"
YELLOW="\[\033[1;33m\]"
purple="\[\033[0;35m\]"
PURPLE="\[\033[1;35m\]"
white="\[\033[0;37m\]"
WHITE="\[\033[1;37m\]"
blue="\[\033[0;34m\]"
BLUE="\[\033[1;34m\]"
cyan="\[\033[0;36m\]"
CYAN="\[\033[1;36m\]"
NO_COLOR="\[\033[00m\]"
Criação de funções
As funções são semelhantes aos aliases e são chamadas no terminal da mesma forma, contudo são utilizadas para comandos mais complexos e permitem a passagem de parâmetros.
Iniciar uma aplicação Python
O bloco de código abaixo é um exemplo de função, nesta função primeiramente é limpado o terminal, em seguida é alterado o diretório atual para a pasta /python-flask-api-rest
, é aberto o vscode com base no diretório atual e em seguida é iniciado a venv do python e iniciado aplicação em python.
start-api() {
clear
cd ~/projects/python-flask-api-rest/
code .
source venv/bin/activate && python app.py
}
Parar todos os containers em execução na máquina
docker-stop-all() {
docker stop $(docker ps -aq)
}
Baixar um arquivo a partir da URL
Essa função recebe dois paramêtros, o primeiro paramêtro é o nome do arquivo para salvar e o segundo paramêtro é a URL para download.
download() {
wget -O ~/Downloads/$1 "$2"
}
Descompactar um arquivo
Essa função recebe um paramêtro, que é o nome do arquivo para descompactar (Deve estar na pasta atual).
extract() {
if [ -f $1 ]; then
case $1 in
*.tar.bz2) tar xvjf $1 ;;
*.tar.gz) tar xvzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xvf $1 ;;
*.tbz2) tar xvjf $1 ;;
*.tgz) tar xvzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo "don't know how to extract '$1'..." ;;
esac
else
echo "'$1' is not a valid file!"
fi
}
Remover branchs que não possuem mais uso
Remove todas as referências locais à branchs já deletadas no remoto (que possuem o status gone).
Obs: Essa função remove apenas as branch locais, não afeta as branchs do repositório remoto.
git-clean() {
git fetch -p
for branch in $(git branch -vv | grep ': gone]' | awk '{print $1}'); do
git branch -D $branch
done
}
Nome da branch no terminal
Caso você trabalhe com GIT, uma ótima customização é apresentar o nome da branch atual no terminal.
Obs: O nome da branch somente aparecerá se você estiver dentro de um projeto GIT.
# show the branch name in the terminal
get-branch-name() {
branch=$(git branch 2>/dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/')
# -n => the length of STRING is nonzero
if [[ -n "$branch" ]]; then
echo -e "\033[1;37m(\033[01;33m$branch\033[1;37m)"
fi
}
# custom terminal with new colors and branch name if exists
PS1="▫️ $PURPLE\u$CYAN\w\$(get-branch-name)\n$WHITE>$NO_COLOR "
Após inserir o código acima no arquivo .bashrc o resultado esperado é o seguinte: