Como usar o tmux no Linux (e por que é melhor que a tela)

Um terminal Linux estilizado em um laptop com sessões de shell em segundo plano.
fatmawati achmad zaenuri / Shutterstock

O tmuxcomando Linux é um multiplexador de terminal, comoscreen . Seus defensores são muitos e vocais, então decidimos comparar os dois. É tmuxrealmente melhor ou é apenas uma questão de preferir o que você conhece?

tmux vs. tela

Ambos os  comandos  tmuxe GNU são multiplexadores de terminal . Eles permitem que você tenha várias janelas em uma única janela do terminal e alterne entre elas. Uma janela pode ser dividida em painéis, cada um dos quais oferece uma linha de comando independente.screen

Você também pode desanexar uma sessão e ela se torna uma entidade sem cabeça em execução em segundo plano – você pode até fechar a janela do terminal que a iniciou. Quando estiver pronto, você pode abrir uma nova janela de terminal e reconectar a sessão ainda em execução. Você também pode fazer isso por meio de uma conexão SSH .

Você pode desconectar uma sessão em um computador, ir para casa e fazer logon no computador remoto. Quando reconectado, você pode reconectar a sessão de segundo plano e usá-la interativamente novamente.

Qual é a tela de comando?

screen comando também é um multiplexador de terminal e está repleto de opções. Para saber mais sobre tudo o que você pode fazer com ele, consulte nosso artigo detalhado .

Desta vez, vamos nos concentrar em tmux . À medida que prosseguirmos, mencionaremos como screentrata o mesmo recurso ou função.

Só uma coisa nos incomodou  screen. Abordaremos isso quando chegarmos a ele e veremos se o resultado é tmuxmelhor.

Instalando tmux

Embora screen geralmente seja instalado por padrão em distribuições populares do Linux, tmux não é. Para instalar tmux no Ubuntu, digite o seguinte:

sudo apt-get install tmux

sudo apt-get install tmux em uma janela de terminal.

No Manjaro você pode usar pacman:

sudo pacman -Sy tmux

sudo pacman -Sy tmux em uma janela de terminal.

No Fedora 31, tmux já está instalado.

Iniciando uma Sessão tmux

Para começar tmux, basta digitar e pressionar Enter:

tmux

tmux em uma janela de terminal.

A janela do terminal mostrará uma barra de status quando você estiver em uma tmuxsessão.

Uma nova sessão tmux em uma janela de terminal.

O lado direito da barra de status mostra o nome do host, a hora e a data. O lado esquerdo mostra as seguintes informações relacionadas à sessão:

  • [0]: Este é o nome da sessão. Por padrão, eles são numerados, começando com zero. Abordamos como você pode dar nomes significativos às sessões abaixo.
  • 0: bash *: O 0 indica que esta é a primeira janela nesta sessão. O único processo em execução nesta sessão é bash. Se você executar um programa, seu nome aparecerá aqui. O asterisco (*) significa que esta é a janela para a qual você está olhando. Cada vez que você cria uma nova janela em uma  tmuxsessão, o número da janela e o nome do programa em execução são adicionados à barra de status.

O screencomando não fornece uma barra de status. Você tem que voar às cegas e confiar em sua inteligência para saber o que está acontecendo, o que requer um pouco de prática.

Recomendado:  As melhores piadas, jogos e ovos de Páscoa para o Google Assistente

Do lado positivo, você não perderá uma linha de propriedade da janela do terminal. Claro, você normalmente expandiria sua janela de terminal para fazer o uso de um multiplexador de terminal valer a pena. Nesse caso, a perda de uma linha da barra de status não é um grande problema. Deixamos as imagens das janelas do terminal aqui no tamanho padrão para que você possa ver as informações.

Os comandos são fornecidos para tmuxusar pressionamentos de tecla e há duas partes para isso. Primeiro, você pressiona Ctrl + B para chamar tmuxa atenção. Em seguida, você pressiona rapidamente a próxima tecla para enviar um comando tmux. Os comandos são dados pressionando letras, números, sinais de pontuação ou teclas de seta.

É o mesmo  screen, exceto que você pressiona Ctrl + A para chamar sua atenção.

Para fechar a janela, pressione Ctrl + B e, em seguida, pressione X rapidamente. A barra de status fica âmbar. Em seguida, você será solicitado a confirmar que deseja encerrar a janela.

Pressione Y para fechar a janela ou N se mudar de ideia. Você não precisa pressionar Enter depois; S ou N é suficiente para registrar sua escolha.

sessão tmux com uma barra de status âmbar e feche esta janela sim ou não prompt, em uma janela de terminal.

Se você pressionar Y, a janela fecha. Como esta é a única janela nesta sessão, a sessão é encerrada.

Prompt de comando após fechar uma sessão tmux em uma janela de terminal

A tmuxsessão é encerrada e você retorna à linha de comando a partir da qual foi iniciada tmux. Você verá “[saiu]” na janela do terminal.

Isso pode parecer uma afirmação do óbvio, mas é uma confirmação de que você fechou a sessão e não a deixou separada e funcionando. Discutiremos sessões de desanexação abaixo.

Iniciando uma sessão tmux nomeada

Se você inicia várias tmuxsessões regularmente , rapidamente apreciará a funcionalidade de dar a cada uma delas um nome significativo. Você também pode nomear as sessões screen, mas elas não são exibidas nas janelas da sessão.

Para começar tmuxcom um nome de sessão, use o new comando (nova sessão) e a opção -s(nome da sessão). Nossa sessão será chamada de “geek-1”, então digitamos o seguinte:

tmux new -s geek-1

tmux new -s geek-1 em uma janela de terminal.

Quando a tmuxsessão é carregada, “geek-1” é exibido como a primeira entrada na barra de status, na extremidade esquerda.

Uma sessão tmux com o nome "geek-1" no lado esquerdo da barra de status.

Adicionando mais janelas

Para criar uma nova janela na sessão atual, pressione Ctrl + B e, em seguida, C. Você obterá uma janela de terminal em branco na sessão atual. Portanto, teremos algo em execução nesta nova janela, vamos iniciar o dmesgcomando com a -wopção (seguir):

dmesg -w

dmesg -w em uma janela de terminal.

Agora temos duas janelas na sessão; um está correndo tope o outro  dmesg. No entanto, só podemos ver um de cada vez (mais sobre isso em um momento).

dmesg rodando na janela dois de uma sessão tmux, em uma janela de terminal.

Dê uma olhada no lado esquerdo da barra de status. Ainda estamos na tmuxsessão “geek-1”  . Na janela zero, o top está em execução e, na janela um,  dmesg está em execução. O asterisco (*) após dmesgnos informa qual janela está visível.

Para saltar entre as janelas, pressione Ctrl + B e, em seguida, uma das seguintes teclas:

  • N : exibe a próxima janela.
  • P: Exibir a janela anterior.
  • 0 a 9: exibe uma janela numerada de 0 a 9.
Recomendado:  Como participar de uma reunião de teste com zoom

Você também pode escolher uma janela em uma lista. Se você pressionar Ctrl + B e, em seguida, W, uma lista de janelas será exibida.

Lista de janelas tmux exibida em uma janela de terminal.

Para mover a barra de realce âmbar, pressione as setas para cima ou para baixo, Home ou End. A seção inferior da tela mostra uma prévia do conteúdo na janela destacada.

Pressione Enter para ir para a janela destacada ou Esc para sair da lista de janelas sem alternar.

Desanexando e anexando sessões

Se você pressionar Ctrl + B e, em seguida, D, você desconectará a sessão. Ele continuará a ser executado em segundo plano, mas você não conseguirá ver ou interagir com ele.

Começamos topa sessão, então temos um processo em execução para demonstrar. Em seguida, pressionamos Ctrl + B e, em seguida, D. A sessão desaparece e se torna uma sessão de segundo plano.

mensagem tmux após a retirada de uma sessão, em uma janela de terminal.

Voltamos à janela original do terminal. Há uma mensagem tmuxdizendo que a sessão foi desconectada. Também nos lembra o nome que demos à sessão. Isso é útil porque é o que usamos para anexar a uma sessão em segundo plano e, em seguida, restaurá-la em uma sessão interativa.

Para anexar uma sessão desanexada, usaremos o attach-sessioncomando autoexplicativo com a opção -t(sessão de destino). Também forneceremos o nome da sessão que desejamos lembrar.

Nós digitamos o seguinte:

tmux attach-session -t geek-1

tmux attach-session -t geek-1 em uma janela de terminal.

Nossa sessão retorna e se torna uma sessão visível e interativa novamente.

Uma sessão tmux restaurada em uma janela de terminal.

Quaisquer processos de longa execução ou contínuos que você iniciou antes de desconectar a sessão ainda estarão em execução em segundo plano (a menos que tenham terminado) quando você anexar a sessão.

screen pode fazer isso, mas não tão intuitivamente.

Lidando com várias sessões

Vamos abrir outra janela de terminal e iniciar uma nova tmuxsessão chamada “geek-2”:

tmux new -s geek-2

tmux new -s geek-2 em uma janela de terminal.

Nessa sessão, vamos começar dmesg:

dmesg -w

dmesg -w em uma janela de terminal.

Agora, temos nossa tmuxsessão original “geek-1” e uma nova chamada “geek-2”.

sessão tmux geek-2 executando dmesg em uma janela de terminal.

A barra de status mostra que esta sessão é chamada “geek-2”, e tem uma janela em execução dmesg.

Se pressionarmos Ctrl + B e, em seguida, D, separamos essa sessão.

Sessão geek-2 separada do tmux em um terminal widnow.

De volta à sessão “geek-1” tmux, pressionamos Ctrl + B e, em seguida, S para ver uma lista de tmuxsessões.

lista de sessões do tmux exibida em uma janela de terminal.

Para ser claro, esta é uma lista de sessões. A exibição semelhante que vimos anteriormente era uma lista de janelas em uma única sessão.

Você pode mover a barra de realce âmbar pressionando as setas para cima e para baixo, Home e End. A seção inferior exibe uma visualização do conteúdo na sessão destacada.

lista de sessões do tmux exibida em uma janela de terminal.

Se você pressionar a seta para a direita, as janelas da sessão destacada serão exibidas.

Lista de sessões tmux com detalhes da janela exibidos em uma janela de terminal.

Pressione Enter para mover para a sessão ou janela realçada ou Esc para sair da lista de sessões sem alterar as sessões. Se você selecionar uma nova sessão, a atual se desconecta e a que você selecionou é anexada.

Separamos a sessão “geek-2” antes de fazer isso. No entanto, você pode fazer isso com sessões que ainda estão anexadas às suas janelas de terminal originais. Ao fazer isso, todas as alterações de tela aparecerão simultaneamente em ambas as tmuxsessões.

O screencomando também pode fazer isso por meio de um conjunto semelhante de comandos.

Recomendado:  Como baixar arquivos usando o Safari no seu iPhone ou iPad

Trabalhando com painéis de janela

Se você pressionar Ctrl + B e, em seguida, aspas duplas (“”), você dividirá a janela horizontalmente em dois painéis.

sessão tmux com painéis horizontais em uma janela de terminal.

Isso afeta apenas a janela atual; os outros na sessão não serão alterados. Usamos o tmux lscomando no painel superior para listar as janelas nesta sessão. Existem dois, e a linha de status nos diz que estamos na janela um. Se saltarmos para a janela zero pressionando Ctrl + B e depois 0 (zero), veremos que está exatamente como o deixamos.

Essas são duas linhas de comando independentes, não duas visualizações em uma janela; eles são conchas distintas e separadas. Podemos mostrar isso executando um comando diferente em cada painel.

Nós digitamos o seguinte:

uname -a

ls -hl

Para mover de um painel para outro, pressione Ctrl + B e as setas para cima, para baixo, para a esquerda ou para a direita.

Dois comandos diferentes em dois painéis em uma sessão tmux em uma janela de terminal.

Se você pressionar Ctrl + B e, em seguida, o sinal de porcentagem ( %) ele divide o painel atual verticalmente.

sessão tmux com painéis divididos vertical e horizontal em uma janela de terminal.

Pressione Ctrl + B e, em seguida, Q para fazer  tmux piscar brevemente o número de cada painel.

tmux mostrando os números do painel em uma janela de terminal.

Esses números são usados ​​em prompts e mensagens de tmux. Pressione Ctrl + B e, em seguida, X para fechar o painel atual. A barra de status muda para âmbar e você é solicitado a confirmar que deseja fechar o número do painel. Pressione Y para remover o painel ou N para deixar as coisas como estão.

pedido do tmux para excluir um painel em uma janela de terminal.

Se você pressionar Y, o painel será removido.

tmux com dois painéis horizontais em uma janela terminal.

O screencomando também possui painéis, mas, novamente, eles são menos intuitivos de usar. O que nos incomoda  screen é que se você desconectar uma sessão com painéis, eles desaparecem quando você reconecta essa sessão. Isso envelhece muito rapidamente.

Folha de referências a Ctrl + B

Incluímos tmux abaixo uma folha de dicas dos diferentes comandos que você pode usar .

Comandos de Sessão

  • S: Listar sessões.
  • $: Renomeie a sessão atual.
  • D: Desanexe a sessão atual.
  • Ctrl + B e?:  Exibir a página de Ajuda em tmux.

Comandos de janela

  • C: Crie uma nova janela.
  • ,: Renomeie a janela atual.
  • W: Liste as janelas.
  • N: Mover para a próxima janela.
  • P: Mova para a janela anterior.
  • 0 a 9: Move para o número da janela especificado.

Comandos de painel

  • %: Cria uma divisão horizontal.
  • “: Crie uma divisão vertical.
  • H ou Seta para a esquerda: Mova para o painel à esquerda.
  • I ou Seta para a direita: Mova para o painel à direita.
  • J ou seta para baixo: vá para o painel abaixo.
  • K ou seta para cima: vá para o painel acima.
  • Q : mostre resumidamente os números dos painéis.
  • O: Mova-se pelos painéis em ordem. Cada toque leva você para o próximo, até que você percorra todos eles.
  • }: Troca a posição do painel atual com o próximo.
  • {: Troca a posição do painel atual com o anterior.
  • X: feche o painel atual.

Como eles se comparam

Em termos de funcionalidade, screene tmuxambos agem de forma semelhante e oferecem as mesmas características principais. É a maneira como você acessa esses recursos que é marcadamente diferente. tmux oferece maneiras mais elegantes e confortáveis ​​de acessar as várias funções. No entanto, essa não é a única diferença.

A capacidade de renomear sessões e janelas tmuxé excelente, e o fato de reter os painéis quando você reconecta uma sessão é uma virada de jogo.

screen, por outro lado, perde completamente os painéis quando você desconecta e reconecta uma sessão. Isso é quase irritante o suficiente para evitar que você se desprenda.

Há muito mais tmux, incluindo seus recursos de script incrivelmente flexíveis. Você deve a si mesmo dar uma olhada.