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.
Tabela de Conteúdos
- Instalando Ferramentas Essenciais
- Função
ssh_menu
para Gerenciamento de Conexões SSH - Instalando e Configurando NerdFont
- Configuração do Tmux com Plugins e Temas
- Configuração do Vim com Plugins e Temas
- Dicas de Solução de Problemas Comuns
- Scripts de Automação em Bash para Profissionais de TI
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
:
-
Abra o arquivo
.bashrc
com o comando:1
vim ~/.bashrc
-
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.
-
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.
- Criar o arquivo
~/.bash_functions
:1
vim ~/.bash_functions
-
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
elist_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.
- Funções
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
- Execute o comando
ssh_menu
no terminal. - Você verá um menu com opções para Adicionar novo host, Remover host, e Listar hosts.
- 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).
- Um host é adicionado corretamente ao arquivo
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
-
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
-
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:
- Abra seu terminal e acesse Preferências.
- Selecione o perfil do terminal que você está usando (por exemplo, Unnamed ou um nome personalizado).
- Na seção de Fonte, habilite a opção de usar uma Fonte Personalizada.
- 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.
-
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.
- Criar ou abrir o arquivo
.tmux.conf
:1
vim ~/.tmux.conf
-
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 otmux-sensible
para configurações úteis e ocatppuccin/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).
- Plugins: A linha
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
: Definea
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çãosynchronize-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 mostraron
(ativado) ouoff
(desativado) de acordo com o status atual.
Exemplo de Uso
Depois de configurar o comando, você pode:
- Pressionar o prefixo (
CTRL + A
) seguido dea
para ativar/desativar a sincronização dos painéis. - Quando a sincronização estiver ativada, tudo o que você digitar em um painel será replicado nos outros painéis abertos da mesma janela.
- 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
-
Iniciar o Tmux: Abra uma nova sessão do Tmux com o comando:
1
tmux
-
Instalar os Plugins: Pressione
CTRL + A
seguido deI
(letra i maiúscula) para instalar os plugins configurados no.tmux.conf
. -
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 + "
eCTRL + 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.
-
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.
- Criar ou abrir o arquivo
.vimrc
:1
vim ~/.vimrc
-
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
, ecolorscheme onedark
configuram o tema visual.
- Configurações Gerais de Edição:
set number
,smartindent
, etabstop=2 shiftwidth=2 expandtab
definem formatação de indentação e visualização de linha.
- Atalhos e Funcionalidades Adicionais:
NERDTreeToggle
eFiles
são mapeados paraCtrl+n
eCtrl+f
, tornando a navegação rápida.- Autocomandos e ajustes de formatação para manter a consistência ao salvar arquivos.
- vim-plug Plugins:
3 Instalar os Plugins no Vim
-
Abrir o Vim: No terminal, abra o Vim.
-
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 ofzf
. - 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. PressioneCTRL + 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#
.
- No
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
eplug#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:
- Instalar o Tmux Navigator:
1
git clone https://github.com/christoomey/vim-tmux-navigator ~/.vim/plugged/vim-tmux-navigator
- Configurar o
.tmux.conf
para o Tmux Navigator:1
set -g @plugin 'christoomey/vim-tmux-navigator'
- 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
eBACKUP_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
eDAYS
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
- Instale o rclone:
1
sudo apt install rclone
- 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.