Muitas vezes você lida com ambientes que possuem apenas uma interface de linha de comandos e precisa executar mais de uma ação ao mesmo tempo. Como resolver esta necessidade tendo uma única sessão/janela? Nesta receita apresentamos o tmux.
Esta receita lhe fornecerá o essencial para que possa dar os primeiros passos com esta super ferramenta de produtividade que não é tão conhecida como deveria por usuários Linux.
Ingredientes
- Linux (mas você pode substituir pelo WSL no Windows ou mesmo pelo macOS).
- tmux.
- Habilidade e memória manual mínima.
- Um pouco de paciência e persistência pois o primeiro contato pode não ser tão fácil assim.
Ingrediente principal: tmux
A melhor maneira de entender o problema é vendo-o em ação, sendo assim vamos a um caso real. Preciso iniciar dois processos, acompanhar seus logs de saída e editar um arquivo ao mesmo tempo. Consigo pensar em três soluções imediatas para o problema (há mais, a criatividade é infinita).
Abro três janelas no meu desktop:
Ou crio três abas na interface do meu terminal (também se estou em uma solução gráfica):
que é uma solução bem ruim, pois não vejo todos os logs ao mesmo tempo. Ou… uso tmux.
As vantagens são nítidas:
- Não preciso de uma interface gráfica: o que é excelente quando vou lidar com servidores, por exemplo. Pense em você implantando a solução e acompanhando os logs ao mesmo tempo.
- Tenho acesso a todas as informações que preciso ao mesmo tempo diante dos meus olhos.
- Se estou em uma interface gráfica, são n janelas a menos com as quais preciso me preocupar.
Mas o tmux não é uma ferramenta que você irá dominar de imediato. Leva tempo e, principalmente, habilidade e memória manual, mas depois das dores iniciais ele é um forte candidato a aumentar exponencialmente sua produtividade no terminal. Então é importante ter três conceitos em mente.
Os conceitos
Tmux é um multiplexador de terminais (que termo “elegante”!), traduzindo: é um software capaz de a partir de uma única sessão do usuário com a interface de linha de comando, simular várias. Pense como o análogo ao conceito de multitarefa que temos em interfaces gráficas.
E por sessão, estou falando de sessão mesmo, ou seja, um único processo de autenticação no computador, exatamente como você faz quando inicia seu Windows, macOS ou Linux: você fornece seu login e senha e na sequência inicia vários programas ao mesmo tempo com estas mesmas credenciais. Se achou esta descrição muito ruim, tem esta na Wikipedia que talvez você prefira.
Para que eu tenha minhas “janelas” na linha de comando o tmux usa os conceitos de sessão (session), janela (window) e painel (pane). Nesta receita lidaremos mais com janelas e painéis para simplificar, mas sou obrigado a falar um pouco sobre sessões também.
A sessão é um conjunto de janelas (sério?). Pense nele como os desktops virtuais com os quais você já tenha experiência no ambiente gráfico do seu sistema operacional. É possível ter várias sessões ativas do tmux em paralelo inclusive, o que vai ser muito útil quando você tiver se empolgado e criado inúmeras janelas.
Já a janela é um agregador de painéis. Fica difícil descrever textualmente, sendo assim observe a imagem a seguir: cada retângulo é um painel independente, todos contidos em uma mesma janela.
Gravei minha interação entre janelas no tmux para que você possa ter uma ideia sobre o que estou falando. Note que parto de uma janela já com três painéis, crio uma nova e, na sequência, navego entre as diferentes janelas do sistema:
Acho que com base nisto já podemos colocar a mão na massa.
Instalando o tmux
Talvez você já o tenha instalado em seu computador. Sendo assim, para testar, execute o comando tmux em seu terminal e veja se já não está presente.
Se não estiver presente, na esmagadora maioria das distribuições Linux que usam o APT este é um pacote que já se encontra presente, você pode instalá-lo com o comando a seguir:
apt-get install tmux
Caso o comando acima não te atenda, neste link do site oficial do projeto há instruções que poderão resolver seu problema. Usa Windows, pelo WSL você consegue ter o mesmo resultado. MacOS? Não fique triste, há tutoriais sobre como executar a instalação neste e neste link.
Iniciando tmux e vendo as sessões
Iniciar o tmux é simples: te mostrei ali em cima, mas só pra recordar, vamos lá. No seu shell execute o comando a seguir:
tmux
O tmux por padrão estará criando uma nova sessão sempre que executar este comando, que é um sinônimo do comando tmux new.
Talvez acidentalmente você tenha fechado a janela do seu terminal e queria voltar para a sua sessão: o que você faz? Primeiro execute o comando a seguir para listar todas as sessões do tmux:
tmux ls
E uma saída similar à exposta a seguir será exposta:
Para entrar de novo na sessão que saiu, execute o comando a seguir:
tmux attach-session -t [identificador da sessão] Exemplo indo para a sessão 5 acima listada: tmux attach-session -t 5
Ok, até aqui nada de novo, agora vamos ao que interessa: panes e windows.
Entenda os comandos
Para que o tmux seja produtivo você deve ter muito bem gravado em sua mente o conceito de “comando” no tmux. Se já usou o Emacs este não será um problema, mas se não usou, vai doer um pouquinho no início. Um comando no tmux é uma sequência de teclas.
Esta sequência de teclas segue o seguinte padrão:
Ctrl + b [Comando]
Calma agora. Comando é qualquer outra tecla do seu teclado após o “Ctrl + b”. E lembra quando disse que é importante ter habilidade e memória manual mínimas? Agora você vai entender.
Não é pra pressionar todas as teclas ao mesmo tempo. É um procedimento composto por dois passos:
- Pressione Ctrl + b (minúsculo mesmo, nem precisa ficar com os dois pressionados o tempo todo, apenas digite na sequência)
- Libere Ctrl + b
- Pressione a tecla que representa o comando
Vamos a um exemplo: você já iniciou o tmux e quer dividir sua janela em dois painéis horizontais, tal como na imagem a seguir: o comando é Ctrl b ”
- Pressione Ctrl + B
- Digite ” (é, aspas duplas, eu sei que é chato no início)
Pronto, resultado obtido. Minha sugestão é que você pratique por um minuto pra poder ficar bom mesmo na coisa. Então segue a lista dos comandos que mais uso no tmux.
Comandos essenciais
Aqui seguem os comandos mais úteis para um uso simples do tmux.
Gestão de painéis (os que mais uso sem sombra de dúvidas):
Comando | Efeito |
Ctrl b “ | Cria uma novo painel horizontal |
Ctrl b % | Cria um novo painel vertical |
Ctrl b o | Navega entre os paineis no sentido horário |
Ctrl b (seta) | Navega para o painel que está acima, abaixo, à esquerda ou à direita do atual |
Ctrl b x | Mata o painel corrente |
Ctrl b espaço | Muda o layout dos painéis. Você zoneou a sua janela e quer tentar salvá-la? Este é o comando. |
Dica: scroll! Você muitas vezes precisará fazer scroll no conteúdo que um painel está expondo a você. É possível configurar o tmux para aceitar eventos de mouse, mas há uma solução mais simples usando apenas o teclado (convenhamos, o ideal aqui é usar só o teclado mesmo). Siga este procedimento:
- Execute o comando Ctrl b [
- Agora você pode navegar usando setas ou as teclas Page Up e Page Down
- Para sair do modo scroll digite q
Gestão de janelas
Quando tiver se empolgado e criado uma infinidade de paineis você irá desejar criar o caos em outra janela. Sendo assim, segue uma pequena lista.
Ctrl b w | Lista as janelas abertas para que você possa navegar entre elas de um modo “quase gráfico” |
Ctrl b c | Cria uma nova janela |
Ctrl b [número] | O número representa o identificador da janela de 0 a 9. Serve para que você possa trocar de janelas de uma forma mais ágil (quando sabe o identificador da mesma) |
Ctrl b n | Vai pra próxima janela |
Ctrl b p | Vai pra janela anterior |
Ctrl b & | Fecha a janela atual |
Gestão de sessões
Depois de ter criado o caos entre suas janelas, você o transfere para as sessões. 🙂
Ctrl b s | Lista as sessões abertas e te permite navegar entre as sessões |
Ctrl b ( | Muda para a sessão anterior |
Ctrl b ) | Muda para a próxima sessão |
Ctrl b d | Sai da sessão atual |
Você pode encontrar diversos outros comandos do tmux neste link. São tantos que criaram até um site pra isto. O objetivo desta receita é apenas te dar o essencial para que possa dar seus primeiros passos por conta própria.
As deliciosas receitas da itexto
Esta é apenas mais uma receita da itexto. Nosso objetivo não é nestes posts lhe fornecer todo o aprofundamento para que domine um assunto, mas sim dar aquele pontapé inicial para que você possa dar seus primeiros passos neste.
É importante lembrar que o tmux não é a única solução para este problema: há diversas outras, como o GNU Screen ou Byobu. Talvez a grande vantagem do tmux seja sua popularidade, mas sem dúvidas não é a melhor solução. Até a próxima receita!
Não conhece as nossas receitas? Esta é uma metodologia que ensinamos a nossos clientes com o objetivo de facilitar a divulgação de conhecimento para o público interno ou externo, como neste post. Aprenda a ter seu livro de receitas neste link.