RoverX

Comandos personalizados no Linux

Criação de comandos personalizados no Linux utilizando o arquivo .bashrc.

TecnologiaLinuxBashComandos

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: Os comandos abaixo usam ~ para apontar para sua pasta pessoal, independentemente do diretório atual. O .bashrc é carregado por sessões interativas do Bash, não por todos os terminais ou shells.

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 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 parâmetros: o nome do arquivo para salvar e a URL para download.

download() {
  wget -O ~/Downloads/$1 "$2"
}

Descompactar um arquivo

Essa função recebe um parâmetro: 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 branches que não possuem mais uso

Após atualizar as referências remotas, tenta remover as branches locais cujas branches remotas foram deletadas (status gone).

Obs: Essa função não afeta as branches remotas. A opção -D só remove branches já integradas; branches com trabalho não integrado são preservadas e exigem revisão manual. Revise as branches listadas antes de executar a função.

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

Autor

Mathias Artur Schulz

Engenheiro de Software Sênior

Bacharel em Ciência da Computação e Pós-graduado em Engenharia de Software

Email:mathias@schulz.net.br