Como ter janelas em seu terminal usando tmux
Tags: tutorial, braziliandevs, ptbr, linux
Published: 2021-06-16 12:19:04

---
title: Como ter janelas em seu terminal usando tmux
published: true
description: Como ter janelas em seu terminal usando tmux
tags: tutorial, braziliandevs, ptbr, linux
cover_image: 	https://itexto.com.br/wp-content/uploads/2020/11/receita_tmux.jpg
---
<!-- wp:paragraph -->
<p>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 <a href="https://github.com/tmux/tmux/wiki">tmux</a>. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Esta receita lhe fornecerá o <strong>essencial</strong> para que possa dar os primeiros passos com esta <strong>super</strong> ferramenta de produtividade que não é tão conhecida como deveria por usuários Linux. </p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>Ingredientes</h2>
<!-- /wp:heading -->

<!-- wp:image {"id":1695,"sizeSlug":"large"} -->
<figure class="wp-block-image size-large"><img src="https://itexto.com.br/wp-content/uploads/2020/04/ingredientes.jpg" alt="" class="wp-image-1695"/></figure>
<!-- /wp:image -->

<!-- wp:list -->
<ul><li>Linux (mas você pode substituir pelo WSL no Windows ou mesmo pelo macOS).</li><li>tmux.</li><li>Habilidade e memória manual mínima.</li><li>Um pouco de paciência e persistência pois o primeiro contato pode não ser tão fácil assim.</li></ul>
<!-- /wp:list -->

<!-- wp:heading -->
<h2>Ingrediente principal: tmux</h2>
<!-- /wp:heading -->

<!-- wp:image {"width":536,"height":140} -->
<figure class="wp-block-image is-resized"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e4/Tmux_logo.svg/1920px-Tmux_logo.svg.png" alt="Tmux logo.svg" width="536" height="140"/></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>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).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Abro três janelas no meu desktop:</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":14626,"width":596,"height":365,"sizeSlug":"large","className":"is-style-default"} -->
<figure class="wp-block-image size-large is-resized is-style-default"><img src="https://itexto.com.br/wp-content/uploads/2020/11/tmux_solucao_1-1024x627.png" alt="" class="wp-image-14626" width="596" height="365"/></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Ou crio três abas na interface do meu terminal (também se estou em uma solução gráfica):</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":14627,"sizeSlug":"large"} -->
<figure class="wp-block-image size-large"><img src="https://itexto.com.br/wp-content/uploads/2020/11/image.png" alt="" class="wp-image-14627"/></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>que é uma solução bem ruim, pois não vejo todos os logs ao mesmo tempo. Ou... uso <strong>tmux</strong>.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":14628,"sizeSlug":"large"} -->
<figure class="wp-block-image size-large"><img src="https://itexto.com.br/wp-content/uploads/2020/11/image-1-1024x550.png" alt="" class="wp-image-14628"/></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>As vantagens são nítidas:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><li>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.</li><li>Tenho acesso a todas as informações que preciso ao mesmo tempo diante dos meus olhos.</li><li>Se estou em uma interface gráfica, são n janelas a menos com as quais preciso me preocupar.</li></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Mas o tmux <strong>não é uma ferramenta que você irá dominar de imediato</strong>. 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.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3>Os conceitos</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>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.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>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 <a href="https://en.wikipedia.org/wiki/Terminal_multiplexer">esta na Wikipedia</a> que talvez você prefira.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Para que eu tenha minhas "janelas" na linha de comando o tmux usa os conceitos de sessão (<em>session</em>), janela (<em>window</em>) e painel (<em>pane</em>). Nesta receita lidaremos mais com janelas e painéis para simplificar, mas sou obrigado a falar um pouco sobre sessões também.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>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.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>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.</p>
<!-- /wp:paragraph -->

<!-- wp:image -->
<figure class="wp-block-image"><img src="https://itexto.com.br/wp-content/uploads/2020/11/image-1-1024x550.png" alt="O atributo alt desta imagem está vazio. O nome do arquivo é image-1-1024x550.png"/></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>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:</p>
<!-- /wp:paragraph -->

<!-- wp:video {"id":14633} -->
<figure class="wp-block-video"><video controls src="https://itexto.com.br/wp-content/uploads/2020/11/janelas_tmux.mp4"></video></figure>
<!-- /wp:video -->

<!-- wp:paragraph -->
<p>Acho que com base nisto já podemos colocar a mão na massa.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>Instalando o tmux</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Talvez você já o tenha instalado em seu computador. Sendo assim, para testar, execute o comando <strong>tmux</strong> em seu terminal e veja se já não está presente.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>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:</p>
<!-- /wp:paragraph -->

<!-- wp:preformatted -->
<pre class="wp-block-preformatted">apt-get install tmux</pre>
<!-- /wp:preformatted -->

<!-- wp:paragraph -->
<p>Caso o comando acima não te atenda, <a href="https://github.com/tmux/tmux/wiki/Installing">neste link</a> 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 <a href="https://medium.com/@jeongwhanchoi/install-tmux-on-osx-and-basics-commands-for-beginners-be22520fd95e">neste</a> e <a href="https://gist.github.com/simme/1297707">neste</a> link.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>Iniciando tmux e vendo as sessões</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Iniciar o tmux é simples: te mostrei ali em cima, mas só pra recordar, vamos lá. No seu shell execute o comando a seguir:</p>
<!-- /wp:paragraph -->

<!-- wp:preformatted -->
<pre class="wp-block-preformatted">tmux</pre>
<!-- /wp:preformatted -->

<!-- wp:paragraph -->
<p>O tmux por padrão estará criando uma nova sessão sempre que executar este comando, que é um sinônimo do comando <strong>tmux new</strong>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>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:</p>
<!-- /wp:paragraph -->

<!-- wp:preformatted -->
<pre class="wp-block-preformatted">tmux ls</pre>
<!-- /wp:preformatted -->

<!-- wp:paragraph -->
<p>E uma saída similar à exposta a seguir será exposta:</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":14635,"sizeSlug":"large"} -->
<figure class="wp-block-image size-large"><img src="https://itexto.com.br/wp-content/uploads/2020/11/image-2.png" alt="" class="wp-image-14635"/></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Para entrar de novo na sessão que saiu, execute o comando a seguir:</p>
<!-- /wp:paragraph -->

<!-- wp:preformatted -->
<pre class="wp-block-preformatted">tmux attach-session -t [identificador da sessão]
Exemplo indo para a sessão 5 acima listada:
tmux attach-session -t 5</pre>
<!-- /wp:preformatted -->

<!-- wp:paragraph -->
<p>Ok, até aqui nada de novo, agora vamos ao que interessa: panes e windows.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>Entenda os comandos</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>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.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Esta sequência de teclas segue o seguinte padrão:</p>
<!-- /wp:paragraph -->

<!-- wp:preformatted -->
<pre class="wp-block-preformatted">Ctrl + b [Comando]</pre>
<!-- /wp:preformatted -->

<!-- wp:paragraph -->
<p><strong>Calma agora</strong>. 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.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Não é pra pressionar todas as teclas ao mesmo tempo</strong>. É um procedimento composto por dois passos:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><li>Pressione Ctrl + b (minúsculo mesmo, nem precisa ficar com os dois pressionados o tempo todo, apenas digite na sequência)</li><li>Libere Ctrl + b</li><li>Pressione a tecla que representa o comando</li></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>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 é <em>Ctrl b " </em></p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":14636,"sizeSlug":"large"} -->
<figure class="wp-block-image size-large"><img src="https://itexto.com.br/wp-content/uploads/2020/11/image-3-1024x557.png" alt="" class="wp-image-14636"/></figure>
<!-- /wp:image -->

<!-- wp:list -->
<ul><li>Pressione Ctrl + B</li><li>Digite " (é, aspas duplas, eu sei que é chato no início)</li></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>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.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>Comandos essenciais</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Aqui seguem os comandos mais úteis para um uso <strong>simples</strong> do tmux.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3>Gestão de painéis (os que mais uso sem sombra de dúvidas):</h3>
<!-- /wp:heading -->

<!-- wp:table -->
<figure class="wp-block-table"><table><tbody><tr><td>Comando</td><td>Efeito</td></tr><tr><td>Ctrl b "</td><td>Cria uma novo painel horizontal</td></tr><tr><td>Ctrl b %</td><td>Cria um novo painel vertical</td></tr><tr><td>Ctrl b o</td><td>Navega entre os paineis no sentido horário</td></tr><tr><td>Ctrl b (seta)</td><td>Navega para o painel que está acima, abaixo, à esquerda ou à direita do atual</td></tr><tr><td>Ctrl b x</td><td>Mata o painel corrente</td></tr><tr><td>Ctrl b espaço</td><td>Muda o layout dos painéis. Você zoneou a sua janela e quer tentar salvá-la? Este é o comando.</td></tr></tbody></table></figure>
<!-- /wp:table -->

<!-- wp:paragraph -->
<p><strong>Dica: scroll! </strong>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:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><li>Execute o comando Ctrl b [</li><li>Agora você pode navegar usando setas ou as teclas Page Up e Page Down</li><li>Para sair do modo scroll digite q</li></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":3} -->
<h3>Gestão de janelas </h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>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.</p>
<!-- /wp:paragraph -->

<!-- wp:table -->
<figure class="wp-block-table"><table><tbody><tr><td>Ctrl b w</td><td>Lista as janelas abertas para que você possa navegar entre elas de um modo "quase gráfico"</td></tr><tr><td>Ctrl b c</td><td>Cria uma nova janela</td></tr><tr><td>Ctrl b [número]</td><td>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)</td></tr><tr><td>Ctrl b n</td><td>Vai pra próxima janela</td></tr><tr><td>Ctrl b p</td><td>Vai pra janela anterior</td></tr><tr><td>Ctrl b &amp;</td><td>Fecha a janela atual</td></tr></tbody></table></figure>
<!-- /wp:table -->

<!-- wp:heading {"level":3} -->
<h3>Gestão de sessões</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Depois de ter criado o caos entre suas janelas, você o transfere para as sessões. :)</p>
<!-- /wp:paragraph -->

<!-- wp:table -->
<figure class="wp-block-table"><table><tbody><tr><td>Ctrl b s</td><td>Lista as sessões abertas e te permite navegar entre as sessões</td></tr><tr><td>Ctrl b (</td><td>Muda para a sessão anterior</td></tr><tr><td>Ctrl b )</td><td>Muda para a próxima sessão</td></tr><tr><td>Ctrl b d</td><td>Sai da sessão atual</td></tr></tbody></table></figure>
<!-- /wp:table -->

<!-- wp:paragraph -->
<p>Você pode encontrar diversos outros comandos do tmux <a href="https://tmuxcheatsheet.com/">neste link</a>. 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.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>As deliciosas receitas da itexto</h2>
<!-- /wp:heading -->

<!-- wp:image {"align":"center","id":1584,"sizeSlug":"large"} -->
<div class="wp-block-image"><figure class="aligncenter size-large"><img src="https://itexto.com.br/wp-content/uploads/2020/04/receitas_itexto_block.png" alt="" class="wp-image-1584"/></figure></div>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>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.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>É importante lembrar que o tmux não é a única solução para este problema: há diversas outras, como o <a href="https://www.gnu.org/software/screen/">GNU Screen</a> ou <a href="https://www.byobu.org/">Byobu</a>. Talvez a grande vantagem do tmux seja sua popularidade, mas sem dúvidas não é a melhor solução. Até a próxima receita!</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>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 <a href="https://itexto.com.br/receitas-da-itexto/">neste link</a>.</p>
<!-- /wp:paragraph -->