Post

Tutorial de Configuração da Estação de Trabalho Ubuntu

Guia completo para configurar uma estação de trabalho no Ubuntu com ferramentas essenciais, Tmux e Vim personalizados para desenvolvimento e administração de sistemas.

Tutorial de Configuração da Estação de Trabalho Ubuntu

Tabela de Conteúdos


Introdução

Este tutorial é projetado para configuradores de ambientes de desenvolvimento e administração de sistemas que desejam personalizar e otimizar seu fluxo de trabalho no Ubuntu. Abrangendo desde a instalação de ferramentas básicas até configurações avançadas de Tmux e Vim, este guia oferece um ambiente de trabalho poderoso e fácil de usar.


Instalando Ferramentas Essenciais

Para garantir uma base sólida, começamos com a atualização do sistema e a instalação de ferramentas essenciais. Estes utilitários aprimoram o fluxo de trabalho de desenvolvimento e administração de sistemas.

1 Atualização do Sistema

Antes de instalar qualquer nova ferramenta, é altamente recomendado atualizar o sistema para garantir que todas as bibliotecas e pacotes estejam sincronizados com os repositórios mais recentes.

1
sudo apt update && sudo apt upgrade -y

2 Instalação de Ferramentas de Desenvolvimento e Utilitários

O próximo passo é instalar ferramentas essenciais que ajudarão em tarefas de administração e desenvolvimento. Execute o seguinte comando para instalar todas de uma só vez:

1
2
3
sudo apt install vim fzf ipcalc wget nmap \
    tcpdump git traceroute plocate \
    whois dnsutils grc tmux exa -y

Explicação das Ferramentas Instaladas

Aqui está uma breve descrição das ferramentas incluídas para ajudar a compreender suas funcionalidades:

  • vim: Editor de texto poderoso, muito usado em desenvolvimento e administração de sistemas.
  • fzf: Ferramenta de busca “fuzzy” para pesquisa rápida em arquivos e diretórios.
  • ipcalc: Calculadora de endereços IP, útil para configurações de rede.
  • wget: Utilitário de linha de comando para baixar arquivos da internet.
  • nmap: Scanner de rede, amplamente utilizado para análise de segurança e diagnóstico.
  • tcpdump: Analisador de pacotes de rede para monitoramento e resolução de problemas.
  • git: Sistema de controle de versão, essencial para o desenvolvimento colaborativo.
  • traceroute: Utilitário para rastrear o caminho dos pacotes de rede.
  • plocate: Alternativa rápida para localizar arquivos pelo nome.
  • whois: Realiza consultas sobre registros de DNS.
  • dnsutils: Conjunto de ferramentas para consultas DNS.
  • grc: Colore a saída de comandos para melhorar a legibilidade.
  • tmux: Multiplexador de terminais, útil para criar sessões persistentes.
  • exa: Alternativa aprimorada ao comando ls, com visualização moderna e suporte a ícones.

3 Configuração de Aliases e Prompt do Bash

Para tornar a experiência no terminal mais eficiente, vamos configurar aliases e um prompt personalizado no .bashrc:

  1. Abra o arquivo .bashrc com o comando:

    1
    
    vim ~/.bashrc
    
  2. Adicione as seguintes linhas ao final do arquivo para configurar o prompt e os aliases:

    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
    
    # FZF - Atalhos de busca
    [ -f /usr/share/doc/fzf/examples/key-bindings.bash ] && source /usr/share/doc/fzf/examples/key-bindings.bash
    
    # Configurações de Histórico
    export HISTSIZE=5000
    export HISTCONTROL=ignoredups:erasedups
    export HISTIGNORE="ls:cd:exit"
    export HISTTIMEFORMAT="%d/%m/%Y %T "
    
    # Aliases para melhorar a produtividade
    alias tail='grc tail'
    alias ping='grc ping -c3'
    alias ps='grc ps'
    alias traceroute='grc traceroute'
    alias dig='grc dig'
    alias ss='grc ss'
    alias ipinfo='curl http://ipinfo.io/ip'
    alias ls="exa --long --group-directories-first --icons"
    
    # Configurações do Editor Padrão
    export EDITOR=vim
    export VISUAL=vim
    
    # Prompt Personalizado
    #export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u\[\033[01;34m\]@\[\033[01;33m\]\h\[\033[01;34m\][\[\033[00m\]\[\033[01;37m\]\w\[\033[01;34m\]]\[\033[01;31m\]\$\[\033[00m\] '
    export PS1='${debian_chroot:+($debian_chroot)}\[\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\]'
    

    Explicação das Configurações:

    • PS1: Personaliza o prompt do terminal para exibir o nome do usuário, o host e o diretório atual.
    • HISTSIZE e HISTCONTROL: Ajustam o tamanho do histórico de comandos e evitam duplicidades.
    • Aliases: Facilita o uso de comandos como ping, ps, traceroute, entre outros.
    • EDITOR e VISUAL: Define vim como o editor padrão para comandos de edição no terminal.
  3. Para carregar as configurações do .bashrc sem reiniciar o terminal, execute:

    1
    
    source ~/.bashrc
    

Com isso, a configuração básica das ferramentas essenciais está concluída. A seguir, vamos para a Parte 2, onde criaremos e configuraremos a função ssh_menu para facilitar o gerenciamento de conexões SSH.


Função ssh_menu para Gerenciamento de Conexões SSH

Esta seção ensina a configurar uma função customizada chamada ssh_menu. Ela facilita a conexão e o gerenciamento de hosts SSH a partir de um menu interativo, utilizando o fzf para busca rápida.

Dica de Segurança: Lembre-se de proteger suas chaves SSH com senhas e de usar arquivos de configuração seguros.

1 Criação do Arquivo de Funções Personalizadas

Vamos começar criando um arquivo específico para armazenar a função ssh_menu. Esse arquivo será carregado automaticamente pelo terminal quando o .bashrc for executado.

  1. Criar o arquivo ~/.bash_functions:
    1
    
    vim ~/.bash_functions
    
  2. Adicionar a função ssh_menu no arquivo ~/.bash_functions com o conteúdo abaixo:

    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
    
    ssh_menu() {
        local hosts_file="$HOME/.ssh/hosts_list"
        local ssh_config="$HOME/.ssh/config"
    
        # Garante que os arquivos existam
        touch "$hosts_file" "$ssh_config"
    
        # Função para adicionar um novo host
        add_ssh() {
            echo -n "Digite o alias do host (ex: vm-01): "
            read alias
            echo -n "Digite o IP do host (ex: 192.168.200.100): "
            read ip
            echo -n "Digite a porta SSH (default: 22): "
            read port
            port=${port:-22}
            echo -n "Digite o usuário (default: seu_usuario): "
            read user
            user=${user:-"seu_usuario"}
            echo -n "Digite o caminho da chave SSH (default: ~/.ssh/id_rsa): "
            read key
            key=${key:-"$HOME/.ssh/id_rsa"}
    
            # Validação de IP e porta
            if [[ ! $ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
                echo "IP inválido."
                return
            elif [[ ! $port =~ ^[0-9]+$ ]] || (( port < 1 || port > 65535 )); then
                echo "Porta inválida."
                return
            fi
    
            # Evita duplicação de alias
            if grep -q "Host $alias" "$ssh_config" || grep -q "^$alias:" "$hosts_file"; then
                echo "Alias $alias já existe."
                return
            fi
    
            # Adiciona o host ao ssh_config e ao arquivo de hosts
            {
                echo -e "\nHost $alias"
                echo "    HostName $ip"
                echo "    Port $port"
                echo "    User $user"
                echo "    IdentityFile $key"
            } >> "$ssh_config"
            echo "$alias:$ip" >> "$hosts_file"
            echo "Host $alias adicionado com sucesso."
        }
    
        # Função para remover um host
        remove_ssh() {
            echo -n "Digite o alias do host para remover: "
            read alias
            sed -i "/^$alias:/d" "$hosts_file"
            sed -i "/^Host $alias$/,/^$/d" "$ssh_config"
            echo "Host $alias removido."
        }
    
        # Função para listar hosts
        list_hosts() {
            echo "Hosts disponíveis:"
            cat "$hosts_file"
        }
    
        # Verifica se o `fzf` está instalado
        if ! command -v fzf &> /dev/null; then
            echo "fzf não está instalado. Instale-o para usar esta função."
            return 1
        fi
    
        # Exibe o menu e realiza ações com base na escolha do usuário
        local choice=$( (echo "Adicionar novo host"; echo "Remover host"; echo "Listar hosts"; cat "$hosts_file") | fzf --prompt="Selecione a ação: " )
    
        case "$choice" in
            "Adicionar novo host") add_ssh ;;
            "Remover host") remove_ssh ;;
            "Listar hosts") list_hosts ;;
            *) 
                local alias=$(echo "$choice" | cut -d':' -f1)
                if [[ -n "$alias" ]]; then
                    echo "Conectando ao host $alias..."
                    ssh -q "$alias" || echo "Erro ao conectar."
                else
                    echo "Nenhuma opção válida selecionada."
                fi
                ;;
        esac
    }
    

    Explicação do Script

    • Funções add_ssh, remove_ssh e list_hosts:
      • add_ssh: Adiciona um novo host SSH, recebendo as informações do usuário, validando IP e porta, e evitando duplicação de alias.
      • remove_ssh: Remove o host SSH com base no alias fornecido.
      • list_hosts: Lista todos os hosts disponíveis no arquivo de hosts.
    • Menu fzf: Exibe opções de adição, remoção e listagem de hosts, permitindo também selecionar e conectar-se diretamente a um host.

Use o comando for para enviar a chave pública para vários hosts: for ip in $(seq 160 170); do ssh-copy-id -i $HOME/.ssh/id_rsa.pub 192.168.200.$ip; done.

2 Habilitando o Arquivo de Funções no .bashrc

Para que o ssh_menu seja carregado em cada nova sessão do terminal, adicione uma linha ao final do .bashrc:

1
echo 'if [ -f ~/.bash_functions ]; then source ~/.bash_functions; fi' >> ~/.bashrc

Após adicionar esta linha, carregue as novas configurações com:

1
source ~/.bashrc

3 Teste da Função ssh_menu

  1. Execute o comando ssh_menu no terminal.
  2. Você verá um menu com opções para Adicionar novo host, Remover host, e Listar hosts.
  3. Selecione cada opção para verificar que a função está funcionando corretamente. Certifique-se de que:
    • Um host é adicionado corretamente ao arquivo ~/.ssh/config.
    • Os hosts listados aparecem no terminal.
    • Ao selecionar um host listado, você se conecta ao host (certifique-se de que a conexão SSH é possível).

Com isso, o ssh_menu está configurado e pronto para uso, facilitando o gerenciamento de hosts SSH diretamente do terminal.


Instalando e Configurando NerdFont

As NerdFonts são fontes que incluem ícones especiais, otimizando a visualização em terminais com temas e plugins avançados. Nesta seção, vamos instalar e configurar a SourceCodePro Nerd Font, mas o processo é semelhante para outras fontes NerdFont.

1 Baixando a NerdFont

  1. Download da Fonte
    Para baixar a NerdFont, acesse o site oficial do NerdFonts para explorar as opções. Vamos fazer o download diretamente da página do GitHub com o seguinte comando:

    1
    
    wget https://github.com/ryanoasis/nerd-fonts/releases/download/v3.2.1/SourceCodePro.zip
    
  2. Descompactar o Arquivo da Fonte
    Após o download, descompacte o arquivo para acessar as fontes .ttf:

    1
    
    unzip SourceCodePro.zip
    

2 Movendo a Fonte para a Pasta de Fontes Locais

Para que o sistema reconheça a fonte, mova os arquivos .ttf para a pasta de fontes locais do usuário:

1
2
mkdir -p ~/.local/share/fonts
mv *.ttf ~/.local/share/fonts/

3 Atualizando o Cache de Fontes

Após mover os arquivos, atualize o cache de fontes para que o Ubuntu reconheça a nova instalação:

1
fc-cache -fv

4 Configuração do Terminal para Usar a NerdFont

Agora que a fonte está instalada, é hora de aplicá-la ao terminal:

  1. Abra seu terminal e acesse Preferências.
  2. Selecione o perfil do terminal que você está usando (por exemplo, Unnamed ou um nome personalizado).
  3. Na seção de Fonte, habilite a opção de usar uma Fonte Personalizada.
  4. Escolha SourceCodePro Nerd Font Mono como a fonte do terminal.

Dica: A escolha da NerdFont é essencial para garantir que ícones e símbolos apareçam corretamente no terminal. Isso será especialmente útil para as configurações de Tmux e Vim nas próximas seções.


Com a NerdFont configurada, o terminal agora está pronto para exibir ícones e símbolos em plugins e ferramentas. Isso melhora a visualização e organização das informações, tornando o ambiente mais produtivo e visualmente agradável.


Configuração do Tmux com Plugins e Temas

O Tmux é uma ferramenta essencial para desenvolvedores e administradores de sistemas, pois permite gerenciar múltiplas sessões e dividir o terminal em painéis. Nesta seção, vamos configurar o Tmux com o Tmux Plugin Manager (TPM) e instalar plugins para temas e funcionalidades adicionais.

1 Instalando o Tmux Plugin Manager (TPM)

O Tmux Plugin Manager (TPM) facilita a instalação e o gerenciamento de plugins no Tmux.

  1. Instalar o TPM: Execute o comando abaixo para clonar o TPM no diretório de plugins do Tmux:

    1
    
    git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
    

2 Configuração Básica do Arquivo .tmux.conf

Agora vamos configurar o arquivo .tmux.conf para definir preferências e adicionar plugins.

  1. Criar ou abrir o arquivo .tmux.conf:
    1
    
    vim ~/.tmux.conf
    
  2. Adicionar a Configuração de Plugins e Tema: Copie e cole o bloco de configurações abaixo para configurar o Tmux com temas, plugins e variáveis de status personalizadas.

    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
    
    # Configuração do Tmux Plugin Manager
    set -g @plugin 'tmux-plugins/tpm'
    set -g @plugin 'tmux-plugins/tmux-sensible'
    
    # Configuração de tema com o plugin Catppuccin
    set -g @plugin 'catppuccin/tmux'
    set -g @catppuccin_flavor "mocha"            # Escolhe o tema 'mocha'
    set -g @catppuccin_window_status_style "rounded"  # Janela com bordas arredondadas
    run ~/.tmux/plugins/tpm/tpm
    
    # Exibe informações de status com ícones e variáveis de sistema
    set -g status-right "#{E:@catppuccin_status_application} #{E:@catppuccin_status_cpu} #{E:@catppuccin_status_session} #{E:@catppuccin_status_uptime} #{E:@catppuccin_status_battery}"
    
    # Configurações Gerais
    set -g prefix ^A                           # Altera o prefixo padrão para CTRL+A
    set -g default-terminal "tmux-256color"    # Usa 256 cores no terminal
    set -g base-index 1                        # Começa as janelas com o índice 1
    setw -g mode-keys vi                       # Ativa teclas vi no modo de cópia
    set-option -g mouse on                     # Habilita suporte ao mouse
    
    # Atalhos de divisão de janelas na pasta atual
    bind-key '"' split-window -c "#{pane_current_path}"
    bind-key % split-window -h -c "#{pane_current_path}"
       
    # Permite que o usuário envie o mesmo comando simultaneamente para todos os painéis da janela ativa.
    bind-key a set-window-option synchronize-panes\; display-message "synchronize-panes is now #{?pane_synchronized,on,off}"
    
    
    # Teclas de navegação entre painéis no estilo Vim
    bind-key h select-pane -L
    bind-key j select-pane -D
    bind-key k select-pane -U
    bind-key l select-pane -R
    
    # Ajuste de tamanho dos painéis com Ctrl + H/J/K/L
    bind-key C-h resize-pane -L 5
    bind-key C-j resize-pane -D 5
    bind-key C-k resize-pane -U 5
    bind-key C-l resize-pane -R 5
    

    Explicação da Configuração:

    • Plugins: A linha set -g @plugin define os plugins que serão gerenciados pelo TPM. Adicionamos o tmux-sensible para configurações úteis e o catppuccin/tmux para um tema visual agradável.
    • Tema Catppuccin: Configura o tema mocha com bordas arredondadas nas janelas do Tmux.
    • Atalhos de Navegação: Teclas para dividir janelas e navegar entre os painéis no estilo Vim.
    • Status Bar: Exibe status como o uso de CPU, uptime, e nível de bateria, com ícones NerdFont (configurado anteriormente na Parte 3).

1
bind-key a set-window-option synchronize-panes\; display-message "synchronize-panes is now #{?pane_synchronized,on,off}"

Explicação Detalhada

  • bind-key a: Define a como a tecla de atalho que, junto com o prefixo (CTRL + A), ativa ou desativa a sincronização dos painéis.

  • set-window-option synchronize-panes: Esse comando alterna o valor da opção synchronize-panes. Quando a sincronização de painéis está ativada, tudo o que você digitar em um painel será replicado em todos os outros painéis da mesma janela. Essa funcionalidade é útil, por exemplo, para executar o mesmo comando em vários servidores ao mesmo tempo.

  • \;: O ponto e vírgula com a barra invertida é um caractere de escape que separa dois comandos na mesma linha. Ele permite que o próximo comando seja executado após alternar a sincronização dos painéis.

  • display-message "synchronize-panes is now #{?pane_synchronized,on,off}": Exibe uma mensagem na tela confirmando o estado atual da sincronização. O trecho #{?pane_synchronized,on,off} usa uma condicional para mostrar on (ativado) ou off (desativado) de acordo com o status atual.

Exemplo de Uso

Depois de configurar o comando, você pode:

  1. Pressionar o prefixo (CTRL + A) seguido de a para ativar/desativar a sincronização dos painéis.
  2. Quando a sincronização estiver ativada, tudo o que você digitar em um painel será replicado nos outros painéis abertos da mesma janela.
  3. O terminal exibirá uma mensagem indicando se o modo de sincronização está on (ativado) ou off (desativado).

Utilidade

Esse recurso é particularmente útil para tarefas repetitivas em várias sessões simultâneas, como:

  • Executar o mesmo comando em vários servidores conectados via SSH.
  • Testar comandos em diferentes ambientes de maneira sincronizada.

3 Instalando Plugins no Tmux

  1. Iniciar o Tmux: Abra uma nova sessão do Tmux com o comando:

    1
    
    tmux
    
  2. Instalar os Plugins: Pressione CTRL + A seguido de I (letra i maiúscula) para instalar os plugins configurados no .tmux.conf.

  3. Recarregar o Tmux: Caso faça alguma alteração no .tmux.conf, recarregue as configurações com:

    1
    
    tmux source ~/.tmux.conf
    

4 Teste das Configurações

Após configurar o .tmux.conf, experimente o Tmux para verificar se as configurações estão funcionando conforme esperado. Aqui estão algumas ações para testar:

  • Dividir o terminal com os atalhos CTRL + A + " e CTRL + A + %.
  • Mover-se entre painéis usando h, j, k, l ou com o mouse.
  • Verificar a barra de status para confirmar se o tema e as informações de sistema estão sendo exibidos corretamente.

Com o Tmux agora configurado, você possui uma ferramenta poderosa para gerenciar janelas e sessões de terminal em um único painel. Isso é especialmente útil em fluxos de trabalho com múltiplas tarefas ou scripts de longa duração.


Configuração do Vim com Plugins e Temas

Nesta seção, vamos configurar o Vim para um ambiente de desenvolvimento e administração de sistemas, focado em infraestrutura como código. Vamos usar o vim-plug para gerenciar plugins que adicionam suporte a ferramentas como Terraform e Ansible, além de temas visuais para melhorar a experiência no terminal.

1 Instalando o Gerenciador de Plugins do Vim (vim-plug)

O vim-plug simplifica a instalação e o gerenciamento de plugins para o Vim.

  1. Instalar o vim-plug: Execute o comando abaixo para instalar o vim-plug no diretório de autoload do Vim:

    1
    2
    
    curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
        https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
    

2 Configuração do Arquivo .vimrc

Agora, vamos configurar o Vim adicionando plugins, tema visual e ajustes gerais para desenvolvimento.

  1. Criar ou abrir o arquivo .vimrc:
    1
    
    vim ~/.vimrc
    
  2. Adicionar a Configuração de Plugins e Preferências: Copie o conteúdo abaixo e cole no arquivo .vimrc. Ele inclui a configuração do vim-plug e de plugins específicos para desenvolvimento.

    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
    
    " Inicialização básica
    set nocompatible               " Desabilita a compatibilidade com o vi
    filetype off                   " Desativa a detecção de tipo de arquivo temporariamente
    
    " Configuração de plugins com o vim-plug
    call plug#begin('~/.vim/plugged')
    
    " Plugins para infraestrutura como código
    Plug 'hashivim/vim-terraform'          " Suporte a Terraform
    Plug 'pearofducks/ansible-vim'         " Suporte a Ansible
    
    " Plugin para navegação em árvore
    Plug 'preservim/nerdtree'              " Navegação de arquivos em árvore
    Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
    Plug 'junegunn/fzf.vim'
    
    " Tema visual
    Plug 'joshdick/onedark.vim'            " Tema One Dark
    
    call plug#end()
    
    " Configuração de temas e interface
    syntax enable                           " Habilita o destaque de sintaxe
    set background=dark                     " Define o tema como escuro
    colorscheme onedark                     " Aplica o tema One Dark
    
    " Configurações gerais de edição
    set number                              " Mostra números de linha
    set smartindent                         " Ativa indentação inteligente
    set tabstop=2 shiftwidth=2 expandtab    " Configura tabs e espaços
    
    " Atalhos úteis
    map <C-n> :NERDTreeToggle<CR>           " Ctrl+n para abrir/fechar o NERDTree
    map <C-f> :Files<CR>                    " Ctrl+f para buscar arquivos com o FZF
    
    " Configurações específicas para Terraform e Ansible
    let g:terraform_fmt_on_save = 1         " Formata arquivos Terraform ao salvar
    let g:ansible_unindent_after_newline = 1 " Melhora a indentação para Ansible
    
    " Encerra automaticamente espaços em branco
    au FileType html,xml,javascript autocmd BufWritePre <buffer> %s/\s\+$//e
    
    " Retorna ao último local do cursor ao reabrir o arquivo
    if has("autocmd")
      au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
    endif
    
    " Log de encerramento de sessão
    au VimLeave * call system('echo "Sessão encerrada às " . strftime("%c") >> ~/.vim/sessao.log')
    

    Explicação das Configurações:

    • vim-plug Plugins:
      • vim-terraform e ansible-vim: Adicionam suporte a sintaxe e funcionalidades específicas para arquivos Terraform e Ansible.
      • NERDTree: Plugin para navegação em árvore, útil para explorar arquivos no projeto.
      • fzf e fzf.vim: Ferramentas de busca rápida para abrir arquivos e comandos no Vim.
      • onedark.vim: Tema visual que proporciona um esquema de cores agradável e fácil de visualizar.
    • Temas e Interface:
      • syntax enable, background=dark, e colorscheme onedark configuram o tema visual.
    • Configurações Gerais de Edição:
      • set number, smartindent, e tabstop=2 shiftwidth=2 expandtab definem formatação de indentação e visualização de linha.
    • Atalhos e Funcionalidades Adicionais:
      • NERDTreeToggle e Files são mapeados para Ctrl+n e Ctrl+f, tornando a navegação rápida.
      • Autocomandos e ajustes de formatação para manter a consistência ao salvar arquivos.

3 Instalar os Plugins no Vim

  1. Abrir o Vim: No terminal, abra o Vim.

  2. Instalar os Plugins: Dentro do Vim, execute o comando :PlugInstall para instalar todos os plugins listados no arquivo .vimrc.

4 Teste das Configurações

Depois de instalar os plugins, teste as configurações do Vim:

  • Ativar o NERDTree com Ctrl + n e navegar pelos diretórios do sistema.
  • Buscar arquivos usando Ctrl + f e testando a integração com o fzf.
  • Trabalhar com arquivos Terraform ou Ansible e verificar a formatação automática e o suporte à sintaxe.

Com o Vim configurado com plugins e temas, você agora possui um ambiente de edição altamente customizado para desenvolvimento e administração de sistemas.


Dicas de Solução de Problemas Comuns

Esta seção contém soluções para alguns dos problemas mais comuns que podem surgir ao longo da configuração do ambiente de trabalho no Ubuntu. Essas dicas vão ajudar a evitar frustrações e manter o ambiente funcionando como esperado.

1. Erro ao Carregar Plugins no Vim

Problema

Após executar :PlugInstall, alguns plugins não são instalados corretamente ou apresentam mensagens de erro.

Solução

  • Verifique a Conexão com a Internet: O vim-plug precisa de uma conexão para baixar plugins dos repositórios online.
  • Confirme a Instalação do vim-plug: Verifique se o vim-plug está instalado corretamente no caminho ~/.vim/autoload/plug.vim. Reinstale com o comando:
    1
    2
    
    curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
        https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
    
  • Reinstale os Plugins Ausentes: Execute novamente o comando :PlugInstall para instalar os plugins que faltaram.

2. Tmux Não Carrega Plugins ao Iniciar

Problema

Mesmo após a configuração do .tmux.conf, os plugins do Tmux não são instalados ao pressionar CTRL + A + I.

Solução

  • Verifique a Instalação do Tmux Plugin Manager (TPM): Confirme se o diretório ~/.tmux/plugins/tpm existe. Se não estiver presente, reinstale o TPM com:
    1
    
    git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
    
  • Recarregue o Arquivo de Configuração: Execute tmux source ~/.tmux.conf para forçar o Tmux a recarregar as configurações. Pressione CTRL + A + I novamente para tentar instalar os plugins.

3. Fonte NerdFont Não Aparece no Terminal

Problema

Mesmo após a instalação da NerdFont, o terminal não exibe ícones e caracteres especiais corretamente.

Solução

  • Verifique o Diretório de Fontes: Confirme que a fonte foi movida para ~/.local/share/fonts e atualize o cache de fontes com:
    1
    
    fc-cache -fv
    
  • Configuração do Terminal: Abra as preferências do terminal e selecione a fonte SourceCodePro Nerd Font Mono (ou a fonte NerdFont que você escolheu).
  • Reinicie o Terminal: Caso os ícones ainda não apareçam, reinicie o terminal ou faça logout/login no sistema.

4. Erros na Configuração do .vimrc ou .tmux.conf

Problema

Ao abrir o Vim ou o Tmux, você encontra mensagens de erro indicando problemas de sintaxe nos arquivos .vimrc ou .tmux.conf.

Solução

  • Verifique Erros de Sintaxe: Erros de digitação, falta de aspas ou parênteses são causas comuns. Tente comentar temporariamente as últimas linhas adicionadas para identificar qual linha está causando o erro:
    • No .vimrc: Comente linhas adicionando " no início da linha.
    • No .tmux.conf: Comente linhas com #.

5. Desempenho Lento no Vim com Plugins

Problema

O Vim fica lento ao abrir ou editar arquivos, especialmente com muitos plugins ativos.

Solução

  • Verifique o Uso de Recursos: Confirme que o sistema tem memória e CPU suficientes para lidar com os plugins.
  • Desabilite Plugins Temporariamente: Comente as linhas correspondentes aos plugins no bloco plug#begin e plug#end e execute :PlugClean:
    1
    
    " Plug 'junegunn/fzf.vim'
    

Dica Extra: Fluxo de Trabalho Integrado com Tmux e Vim

Para quem deseja uma integração ainda mais fluida entre Tmux e Vim, considere instalar o Tmux Navigator para facilitar a navegação entre os painéis do Tmux e as janelas do Vim:

  1. Instalar o Tmux Navigator:
    1
    
    git clone https://github.com/christoomey/vim-tmux-navigator ~/.vim/plugged/vim-tmux-navigator
    
  2. Configurar o .tmux.conf para o Tmux Navigator:
    1
    
    set -g @plugin 'christoomey/vim-tmux-navigator'
    
  3. Configurar o .vimrc para permitir navegação entre o Vim e Tmux:
    1
    
    let g:tmux_navigator_no_mappings = 1
    

Com isso, você poderá usar atalhos para mover-se entre janelas do Tmux e painéis do Vim, agilizando ainda mais o trabalho em projetos complexos.


Scripts de Automação em Bash para Profissionais de TI

Automatizar tarefas frequentes com scripts em Bash é uma prática poderosa para profissionais de TI, permitindo que processos de manutenção, backup e monitoramento sejam realizados de forma consistente e eficiente. Nesta seção, veremos alguns exemplos de scripts personalizados para backup, monitoramento de sistema e uso do rclone para sincronização de dados na nuvem.

1. Script de Backup e Sincronização de Diretórios

Esse script realiza um backup incremental de um diretório (usando rsync) e armazena uma cópia em um diretório de backup. Ele é útil para manter backups locais atualizados e economizar espaço.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash

# Configurações
SOURCE_DIR="$HOME/projetos"
BACKUP_DIR="/backup/projetos_$(date +%Y-%m-%d)"
LOG_FILE="/var/log/backup_log.txt"

# Verifica se o diretório de backup existe; se não, cria
mkdir -p "$BACKUP_DIR"

# Executa o backup com rsync (incremental)
echo "Iniciando backup de $SOURCE_DIR para $BACKUP_DIR" | tee -a "$LOG_FILE"
rsync -av --delete "$SOURCE_DIR/" "$BACKUP_DIR/" | tee -a "$LOG_FILE"

echo "Backup concluído em $(date)" | tee -a "$LOG_FILE"
  • Personalização: Altere os valores de SOURCE_DIR e BACKUP_DIR para os diretórios de origem e destino desejados.
  • Automatização com Cron: Adicione este script ao cron para executar diariamente, por exemplo, adicionando uma entrada ao cron com crontab -e:
    1
    
    0 2 * * * /caminho/para/seu/script_backup.sh
    

2. Script para Monitorar o Uso de CPU e Memória

Este script exibe o uso de CPU e memória e envia um alerta por e-mail quando o uso de CPU ou memória ultrapassa um limite específico.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash

# Configuração de Limites
CPU_LIMIT=80   # Percentual
MEMORY_LIMIT=80 # Percentual

# Captura de métricas
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
MEMORY_USAGE=$(free | grep Mem | awk '{print $3/$2 * 100.0}')

# Função de envio de alerta
send_alert() {
    local message=$1
    echo "$message" | mail -s "Alerta de Uso de Recursos" seu_email@example.com
}

# Verificação de limites e envio de alerta
if (( $(echo "$CPU_USAGE > $CPU_LIMIT" | bc -l) )); then
    send_alert "Alerta: Uso de CPU está em $CPU_USAGE%, excedendo o limite de $CPU_LIMIT%"
fi

if (( $(echo "$MEMORY_USAGE > $MEMORY_LIMIT" | bc -l) )); then
    send_alert "Alerta: Uso de Memória está em $MEMORY_USAGE%, excedendo o limite de $MEMORY_LIMIT%"
fi
  • Personalização: Defina os limites de CPU e memória e o e-mail de destinatário no script.
  • Automatização: Adicione este script ao cron para executar periodicamente, como a cada 5 minutos:
    1
    
    */5 * * * * /caminho/para/seu/script_monitoramento.sh
    
  • Personalização: Defina DIR e DAYS de acordo com o que deseja limpar.
  • Automatização: Execute semanalmente ou conforme necessário:
    1
    
    0 3 * * 0 /caminho/para/seu/script_limpeza.sh
    

4. Script para Gerenciamento de Serviços

Este script verifica se um serviço (como nginx ou mysql) está em execução e, se não estiver, tenta reiniciá-lo. É útil para manter serviços essenciais sempre ativos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash

# Nome do serviço para monitorar
SERVICE="nginx"

# Verifica se o serviço está ativo
if systemctl is-active --quiet "$SERVICE"; then
    echo "$SERVICE está em execução."
else
    echo "$SERVICE está parado! Tentando reiniciar..."
    systemctl restart "$SERVICE"

    # Verifica se o serviço foi reiniciado com sucesso
    if systemctl is-active --quiet "$SERVICE"; then
        echo "$SERVICE reiniciado com sucesso."
    else
        echo "Falha ao reiniciar $SERVICE!" | mail -s "Falha no Serviço $SERVICE" seu_email@example.com
    fi
fi
  • Personalização: Substitua SERVICE pelo nome do serviço que deseja monitorar.
  • Automatização: Execute este script a cada minuto para monitoramento contínuo: ```bash
            • /caminho/para/seu/script_gerenciamento_servico.sh ```

5. Script de Relatório Diário de Sistema

Este script gera um relatório sobre o status do sistema, incluindo uso de disco, memória, CPU e serviços críticos, e envia por e-mail. Útil para revisões diárias do status do servidor.

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
#!/bin/bash

# Configurações do E-mail
EMAIL="seu_email@example.com"

# Gera o relatório
REPORT="/tmp/system_report.txt"
{
    echo "Relatório de Status do Sistema - $(date)"
    echo "---------------------------------------"
    echo "Uso de Disco:"
    df -h
    echo
    echo "Uso de Memória:"
    free -h
    echo
    echo "Uso de CPU:"
    top -bn1 | grep "Cpu(s)"
    echo
    echo "Serviços Críticos:"
    systemctl is-active nginx mysql
    echo
} > "$REPORT"

# Envia o relatório por e-mail
cat "$REPORT" | mail -s "Relatório Diário de Sistema" "$EMAIL"
  • Personalização: Ajuste os serviços críticos que deseja monitorar e o e-mail do destinatário.
  • Automatização: Configure para ser executado diariamente, por exemplo, às 7h da manhã:
    1
    
    0 7 * * * /caminho/para/seu/script_relatorio_sistema.sh
    

rclone para Backup na Nuvem

O rclone é uma excelente ferramenta para sincronizar diretórios locais com vários provedores de armazenamento em nuvem. Abaixo, apresento a configuração básica e exemplos de uso.

Configuração do rclone

  1. Instale o rclone:
    1
    
    sudo apt install rclone
    
  2. Configure um Remoto no rclone: Inicie a configuração com:
    1
    
    rclone config
    

    Siga as instruções para configurar o acesso a um provedor de nuvem, como o Google Drive, e nomeie a configuração (por exemplo, meu_gdrive).

Script de Backup com rclone

Este script sincroniza um diretório local com um diretório na nuvem, mantendo-o atualizado automaticamente.

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash

# Nome do remoto e diretório de backup
REMOTE="meu_gdrive:/backups"
LOCAL_DIR="$HOME/projetos"
LOG_FILE="/var/log/rclone_backup.log"

# Sincroniza os arquivos com a nuvem e registra no log
echo "Iniciando backup em $(date)" >> "$LOG_FILE"
rclone sync "$LOCAL_DIR" "$REMOTE" --log-file="$LOG_FILE" --log-level INFO
echo "Backup concluído em $(date)" >> "$LOG_FILE"

Automatização com Cron: Configure para ser executado diariamente às 2h:

1
0 2 * * * /caminho/para/seu/script_rclone_backup.sh

Limpeza Automática de Arquivos Temporários

Este script remove arquivos antigos de um diretório específico, útil para liberar espaço em disco.

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash

# Configurações
DIR="/var/logs/meu_app"
DAYS=30

# Remove arquivos antigos
find "$DIR" -type f -mtime +$DAYS -exec rm -f {} \;

# Registro da operação
echo "Limpeza concluída em $(date) para arquivos com mais de $DAYS dias em $DIR" >> /var/log/cleanup_log.txt

Automatização com Cron: Execute semanalmente, por exemplo, aos domingos às 3h:

1
0 3 * * 0 /caminho/para/seu/script_limpeza.sh

Esses scripts oferecem uma automação prática para tarefas de rotina, e o uso do rclone facilita o backup e a sincronização na nuvem. Essas ferramentas deixam o ambiente mais seguro e eficiente, além de reduzir a carga de trabalho manual.

This post is licensed under CC BY 4.0 by the author.