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:

Terminal linux customizado com nome da branch do projeto GIT


As informações nesta publicação representam a minha experiência como desenvolvedor de software e pesquisas realizadas. Se você encontrou alguma inconsistência ou deseja sugerir uma melhoria entre em Contato comigo e irei ajustar.