Linux Professional Institute Learning Logo.
Ir para o conteúdo principal
  • Home
    • Todos os recursos
    • LPI Materiais Didáticos
    • Colabore Conosco
    • Publishing Partners
    • Seja um Publishing Partner
    • Quem Somos
    • FAQ
    • Colaboradores
    • Contato
  • LPI.org
103.5 Lição 2
Tópico 101: Arquitetura de Sistema
101.1 Identificar e editar configurações de hardware
  • 101.1 Lição 1
101.2 Início (boot) do sistema
  • 101.2 Lição 1
101.3 Alternar runlevels/boot targets, desligar e reiniciar o sistema
  • 101.3 Lição 1
Tópico 102: Instalação do Linux e administração de Pacotes
102.1 Dimensionar partições de disco
  • 102.1 Lição 1
102.2 Instalar o gerenciador de inicialização
  • 102.2 Lição 1
102.3 Controle de bibliotecas compartilhadas
  • 102.3 Lição 1
102.4 Utilização do sistema de pacotes Debian
  • 102.4 Lição 1
102.5 Utilização do sistema de pacotes RPM e YUM
  • 102.5 Lição 1
102.6 Linux virtualizado
  • 102.6 Lição 1
Tópico 103: Comandos GNU e Unix
103.1 Trabalhar na linha de comando
  • 103.1 Lição 1
  • 103.1 Lição 2
103.2 Processar fluxos de texto usando filtros
  • 103.2 Lição 1
103.3 Gerenciamento básico de arquivos
  • 103.3 Lição 1
  • 103.3 Lição 2
103.4 Fluxos, pipes (canalização) e redirecionamentos de saída
  • 103.4 Lição 1
  • 103.4 Lição 2
103.5 Criar, monitorar e finalizar processos
  • 103.5 Lição 1
  • 103.5 Lição 2
103.6 Modificar a prioridade de execução de um processo
  • 103.6 Lição 1
103.7 Procurar em arquivos de texto usando expressões regulares
  • 103.7 Lição 1
  • 103.7 Lição 2
103.8 Edição básica de arquivos com o vi
  • 103.8 Lição 1
Tópico 104: Dispositivos, sistemas de arquivos Linux e padrão FHS
104.1 Criar partições e sistemas de arquivos
  • 104.1 Lição 1
104.2 Manutenção da integridade de sistemas de arquivos
  • 104.2 Lição 1
104.3 Controle da montagem e desmontagem dos sistemas de arquivos
  • 104.3 Lição 1
104.5 Controlar permissões e propriedades de arquivos
  • 104.5 Lição 1
104.6 Criar e alterar links simbólicos e hardlinks
  • 104.6 Lição 1
104.7 Encontrar arquivos de sistema e conhecer sua localização correta
  • 104.7 Lição 1
How to get certified
  1. Tópico 103: Comandos GNU e Unix
  2. 103.5 Criar, monitorar e finalizar processos
  3. 103.5 Lição 2

103.5 Lição 2

Certificação:

LPIC-1

Versão:

5.0

Tópico:

103 Comandos GNU e Unix

Objetivo:

103.5 Criar, monitorar e eliminar processos

Lição:

2 de 2

Introdução

As ferramentas e utilitários vistos na lição anterior são muito úteis para o monitoramento de processos em geral. No entanto, o administrador do sistema pode precisar ir além. Nesta lição, discutiremos o conceito de multiplexadores de terminal e aprenderemos sobre GNU Screen e tmux, já que — embora os emuladores de terminal modernos sejam excelentes — os multiplexadores ainda preservam alguns recursos interessantes e poderosos para a produtividade de um administrador de sistema.

Recursos dos multiplexadores de terminal

Em eletrônica, um multiplexador (ou mux) é um dispositivo que permite que várias entradas sejam conectadas a uma única saída. Assim, um multiplexador de terminal nos proporciona a capacidade de alternar entre diferentes entradas conforme necessário. Embora não sejam exatamente iguais, screen e tmux compartilham uma série de características comuns:

  • Qualquer invocação bem-sucedida resultará em pelo menos uma sessão que — por sua vez — incluirá ao menos uma janela. As janelas contêm programas.

  • As janelas pode ser divididas em regiões ou painéis — o que ajuda na produtividade ao se trabalhar com vários programas simultaneamente.

  • Facilidade de controle: para executar a maioria dos comandos, usamos uma combinação de teclas — o chamado prefixo de comando ou chave de comando — seguida por outro caractere.

  • As sessões podem ser desanexadas do terminal em que estão (ou seja, os programas são enviados para o segundo plano e continuam em execução). Isso garante a execução completa dos programas, independentemente de fecharmos acidentalmente um terminal, travamentos ocasionais ou até mesmo a perda da conexão remota.

  • Conexão de socket.

  • Modo de cópia.

  • São altamente personalizáveis.

GNU Screen

Nos primórdios do Unix (anos 1970-80), os computadores consistiam basicamente em terminais conectados a um computador central. Era só isso mesmo, sem um monte de janelas ou abas. E essa foi a razão por trás da criação do GNU Screen em 1987: emular múltiplas telas VT100 independentes em um único terminal físico.

Janelas

O GNU Screen é invocado simplesmente digitando screen no terminal. Aparece primeiro uma mensagem de boas-vindas:

GNU Screen version 4.05.00 (GNU) 10-Dec-16

Copyright (c) 2010 Juergen Weigert, Sadrul Habib Chowdhury
Copyright (c) 2008, 2009 Juergen Weigert, Michael Schroeder, Micah Cowan, Sadrul Habib Chowdhury
Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 Juergen Weigert, Michael Schroeder
Copyright (c) 1987 Oliver Laumann
(...)

Pressione Espaço ou Enter para fechar a mensagem e será mostrado um prompt de comando:

$

Pode parecer que nada aconteceu, mas o fato é que o comando screen já criou e gerencia sua primeira sessão e janela. O prefixo do comando screen é Ctrl+a. Para ver todas as janelas na parte inferior da tela do terminal, digite Ctrl+a-w:

0*$ bash

Aqui está, nossa única janela até agora! Observe, no entanto, que a contagem começa em 0. Para criar outra janela, digite Ctrl+a-c. Você verá um novo prompt. Vamos iniciar o ps nessa nova janela:

$ ps
  PID TTY          TIME CMD
  974 pts/2    00:00:00 bash
  981 pts/2    00:00:00 ps

e digitar Ctrl+a-w novamente:

0-$ bash  1*$ bash

Agora temos nossas duas janelas (observe o asterisco que indica a que está sendo exibida no momento). No entanto, como foram iniciadas com o Bash, as duas receberam o mesmo nome. Já que chamamos o ps em nossa janela atual, vamos renomeá-lo com esse mesmo nome. Para isso, digite Ctrl+a-A e escreva o novo nome da janela (ps) quando solicitado:

Set window's title to: ps

Agora, vamos criar outra janela, já com um nome desde o início: yetanotherwindow. Para isso, invocamos screen com a opção -t:

$ screen -t yetanotherwindow

Há várias maneiras de se mover entre as janelas:

  • Usando Ctrl+a-n (ir para a próxima janela, next em inglês) e Ctrl+a-p (ir para a janela anterior, previous).

  • Usando Ctrl+a-número (ir para a janela número número).

  • Usando Ctrl+a-" para ver uma lista de todas as janelas. Use as setinhas do teclado para selecionar a janela que deseja e dê Enter:

    Num Name                                                Flags
    
       0 bash                                                   $
       1 ps                                                     $
       2 yetanotherwindow

Ao trabalhar com janelas, é importante lembrar o seguinte:

  • As janelas executam seus programas de forma totalmente independente umas das outras.

  • Os programas continuarão a ser executados mesmo que suas janelas não estejam visíveis (inclusive quando a sessão de screen for desanexada, como veremos em breve).

Para remover uma janela, basta encerrar o programa que está em execução nela (quando a última janela for removida, o próprio screen será encerrado). Outra alternativa é usar Ctrl+a-k enquanto estiver na janela que deseja remover; será solicitada a confirmação:

Really kill this window [y/n]

Window 0 (bash) killed.

Regiões

O screen pode dividir uma tela de terminal em diversas regiões para acomodar janelas. Essas divisões podem ser horizontais (Ctrl+a-S) ou verticais (Ctrl+a-|).

A única coisa que a nova região mostrará é -- na parte inferior, o que significa que está vazia:

   1 ps                                                               --

Para passar à nova região, digite Ctrl+a-Tab. Agora podemos adicionar uma janela com qualquer um dos métodos que já vimos, por exemplo: Ctrl+a-2. Assim, o -- deve se transformar em 2 yetanotherwindow:

$ ps                                                  $
  PID TTY          TIME CMD
 1020 pts/2    00:00:00 bash
 1033 pts/2    00:00:00 ps
$ screen -t yetanotherwindow




   1 ps                                                                2 yetanotherwindow

Alguns aspectos importantes a lembrar ao se trabalhar com regiões:

  • Para se mover entre regiões, digite Ctrl+a-Tab.

  • Para encerrar todas as regiões exceto a atual, use Ctrl+a-Q.

  • Para encerrar a região atual, use Ctrl+a-X.

  • O encerramento de uma região não encerra a janela associada a ela.

Sessões

Até agora brincamos com algumas janelas e regiões, mas todas pertencentes à mesma e única sessão. É hora de começar a brincar com as sessões. Para ver uma lista de todas as sessões, digite screen -list ou screen -ls:

$ screen -list
There is a screen on:
        1037.pts-0.debian       (08/24/19 13:53:35)     (Attached)
1 Socket in /run/screen/S-carol.

Essa é a nossa única sessão no momento:

PID

1037

Nome

pts-0.debian (indicando o terminal — em nosso caso, um pseudo-terminal escravo — e o nome do host).

Status

Attached

Vamos criar uma nova sessão, dando a ela um nome mais descritivo:

$ screen -S "second session"

A tela do terminal será esvaziada e um novo prompt se abrirá. Você pode verificar as sessões mais uma vez:

$ screen -ls
There are screens on:
        1090.second session     (08/24/19 14:38:35)     (Attached)
        1037.pts-0.debian       (08/24/19 13:53:36)     (Attached)
2 Sockets in /run/screen/S-carol.

Para encerrar uma sessão, saia de todas as janelas ou simplesmente digite o comando screen -S SESSION-PID -X quit (também é possível fornecer o nome da sessão). Vamos nos livrar de nossa primeira sessão:

$ screen -S 1037 -X quit

Você será enviado de volta ao prompt do terminal fora de screen. Mas lembre-se, nossa segunda sessão ainda está viva:

$ screen -ls
There is a screen on:
	1090.second session	(08/24/19 14:38:35)	(Detached)
1 Socket in /run/screen/S-carol.

No entanto, como eliminamos a sessão pai, ela recebe um novo rótulo: Detached (desanexada).

Desanexando sessões

Por uma série de razões, podemos querer desanexar uma sessão do screen do terminal a que pertence:

  • Para deixar o computador da empresa cumprir seu dever e conectar-se remotamente mais tarde, de casa.

  • Para compartilhar uma sessão com outros usuários.

Para desanexar uma sessão, a combinação de teclas é Ctrl+a-d. Você é levado de volta ao seu terminal:

[detached from 1090.second session]
$

Para entrar novamente na sessão desanexada, use o comando screen -r SESSION-PID. Outra alternativa é SESSION-NAME, como vimos acima. Se houver apenas uma sessão desanexada, nenhuma dessas opções é obrigatória:

$ screen -r

Este comando basta para anexar novamente a segunda sessão:

$ screen -ls
There is a screen on:
        1090.second session      (08/24/19 14:38:35)     (Attached)
1 Socket in /run/screen/S-carol.

Opções importantes para reanexar sessões:

-d -r

Reanexa uma sessão e — se necessário — a desanexa primeiro.

-d -R

Igual a -d -r, mas o screen cria primeiro uma sessão caso ela não exista.

-d -RR

Igual a -d -R. No entanto, usa a primeira sessão se houver mais de uma disponível.

-D -r

Reanexa uma sessão. Se necessário, o comando a desanexa e faz logout remotamente primeiro.

-D -R

Se uma sessão estiver rodando, ela é reanexada (desanexando e desconectando remotamente primeiro, caso necessário). Se não for o caso, ela é criada e o usuário, notificado.

-D -RR

Igual a -D -R — só que mais poderoso.

-d -m

Inicia o screen em modo detached (desanexado). Uma nova sessão é criada, mas desanexada. Útil para scripts de inicialização do sistema.

-D -m

Igual a -d -m, mas não bifurca um novo processo. O comando é encerrado se a sessão terminar.

Leia as páginas de manual de screen para descobrir outras opções.

Copiar e colar: Modo de rolagem

O GNU Screen apresenta um modo de cópia ou modo de rolagem. Dentro dele, você pode mover o cursor na janela atual e através do conteúdo de seu histórico usando as setas do teclado. Você pode marcar o texto e copiá-lo nas janelas. As etapas a seguir são:

  1. Entre no modo de cópia/rolagem: Ctrl+a-[.

  2. Vá para o início da parte do texto que deseja copiar usando as setas do teclado.

  3. Marque o início do trecho de texto que deseja copiar: Espaço.

  4. Vá para o final da parte do texto que deseja copiar usando as setas do teclado.

  5. Marque o final do trecho de texto que deseja copiar: Espaço.

  6. Vá para a janela de sua escolha e cole o texto: Ctrl+a-].

Personalização de screen

O arquivo de configuração de todo o sistema para screen é /etc/screenrc. Também é possível usar ~/.screenrc no nível do usuário. O arquivo inclui quatro seções de configuração principais:

SCREEN SETTINGS

Você pode definir configurações gerais especificando a diretiva seguida por um espaço e o valor, como em: defscrollback 1024.

SCREEN KEYBINDINGS

Esta seção é bastante interessante, pois permite redefinir os atalhos de teclado que podem interferir no seu uso diário do terminal. Use a palavra-chave bind seguida por um espaço, o caractere a ser usado após o prefixo do comando, outro espaço e o comando, como em: bind l kill (esta configuração mudará a forma padrão de eliminar uma janela para Ctrl+a-l).

Para exibir todos os atalhos de screen, digite Ctrl+a-? ou consulte a página de manual.

Tip

Claro, você também pode alterar o próprio prefixo do comando. Por exemplo, para ir de Ctrl+a a Ctrl+b, basta adicionar esta linha: escape ^Bb.

TERMINAL SETTINGS

Esta seção inclui as configurações relacionadas aos tamanhos de janela de terminal e buffers — entre outros. Para habilitar o modo sem bloqueio para lidar melhor com conexões SSH instáveis, por exemplo, a seguinte configuração é usada: defnonblock 5.

STARTUP SCREENS

Podemos incluir comandos para que diversos programas sejam executados após a inicialização de screen; por exemplo screen -t top top (o screen abre uma janela chamada top com top dentro dela).

tmux

O tmux foi lançado em 2007. Embora muito semelhante ao screen, ele apresenta algumas diferenças notáveis:

  • Modelo cliente-servidor: o servidor fornece uma série de sessões, cada uma das quais pode ter várias janelas anexadas a ele que podem, por sua vez, ser compartilhadas por vários clientes.

  • Seleção interativa de sessões, janelas e clientes via menus.

  • A mesma janela pode ser anexada a várias sessões.

Disponibilidade de atalhos do vim e do Emacs.

  • Suporte para terminal UTF-8 e 256 cores.

Janelas

O tmux pode ser invocado simplesmente digitando tmux no prompt de comando. Você verá um prompt do shell e uma barra de status na parte inferior da janela:

[0] 0:bash*                                                        "debian" 18:53 27-Aug-19

Além do hostname, a hora e a data, a barra de status fornece as seguintes informações:

Nome da sessão

[0]

Número da janela

0:

Nome da janela

bash*. Por padrão, esse é o nome do programa em execução dentro da janela e — ao contrário de screen — o tmux irá atualizá-lo automaticamente para refletir o programa em execução atual. Observe o asterisco indicando que esta é a janela atual em exibição.

Você pode atribuir nomes de sessão e janela ao invocar tmux:

$ tmux new -s "LPI" -n "Window zero"

A barra de status será alterada de acordo:

[LPI] 0:Window zero*                                                 "debian" 19:01 27-Aug-19

O prefixo do comando do tmux é Ctrl+b. Para criar uma nova janela, basta digitar Ctrl+b-c; você será levado a um novo prompt e a barra de status refletirá a nova janela:

[LPI] 0:Window zero- 1:bash*                                         "debian" 19:02 27-Aug-19

Como o Bash é o shell subjacente, a nova janela recebe esse nome por padrão. Inicie top e veja como o nome muda para top:

[LPI] 0:Window zero- 1:top*                                         "debian" 19:03 27-Aug-19

Em qualquer caso, você pode renomear uma janela com Ctrl+b-,. Quando solicitado, informe o novo nome e pressione Enter:

(rename-window) Window one

Para exibir todas as janelas, pressione Ctrl+b-w (use as setas do teclado para se mover para cima e para baixo e enter para selecionar):

(0)  0: Window zero- "debian"
(1)  1: Window one* "debian"

Como em screen, podemos pular de uma janela para outra com:

Ctrl+b-n

ir para a próxima janela, next em inglês.

Ctrl+b-p

ir para a janela anterior, previous.

Ctrl+b-number

ir para a janela de número número.

Para eliminar uma janela, use Ctrl+b-&. Será solicitada a confirmação:

kill-window Window one? (y/n)

Outros comandos de janela interessantes são:

Ctrl+b-f

encontrar uma janela pelo nome.

Ctrl+b-.

alterar o número do índice da janela.

Para conhecer a lista completa de comandos, consulte a página do manual.

Painéis

A facilidade de divisão de janelas do screen também está presente no tmux. As divisões resultantes não são chamadas de regiões, mas de painéis. A diferença mais importante entre regiões e painéis é que os últimos são pseudoterminais completos anexados a uma janela. Isso significa que eliminar um painel também eliminará seu pseudo-terminal e todos os programas associados em execução nele.

Para dividir uma janela horizontalmente, usamos Ctrl+b-":

Tasks:  93 total,   1 running,  92 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  4050960 total,  3730920 free,   114880 used,   205160 buff/cache
KiB Swap:  4192252 total,  4192252 free,        0 used.  3716004 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 1340 carol     20   0   44876   3400   2800 R  0.3  0.1   0:00.24 top
    1 root      20   0  139088   6988   5264 S  0.0  0.2   0:00.50 systemd
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd
    3 root      20   0       0      0      0 S  0.0  0.0   0:00.04 ksoftirqd/0
    4 root      20   0       0      0      0 S  0.0  0.0   0:01.62 kworker/0:0
    5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H
    7 root      20   0       0      0      0 S  0.0  0.0   0:00.06 rcu_sched
    8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh
    9 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0
   10 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 lru-add-drain
   11 root      rt   0       0      0      0 S  0.0  0.0   0:00.01 watchdog/0
   12 root      20   0       0      0      0 S  0.0  0.0   0:00.00 cpuhp/0
$
───────────────────────────────────────────────────────────────────────────────────────────────
$












[LPI] 0:Window zero- 1:Window one*                                      "debian" 19:05 27-Aug-19

Para dividi-la verticalmente, usamos Ctrl+b-%:

                                                                               │$
    1 root      20   0  139088   6988   5264 S  0.0  0.2   0:00.50 systemd     │
                                                                               │
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd    │
                                                                               │
    3 root      20   0       0      0      0 S  0.0  0.0   0:00.04 ksoftirqd/0 │
    4 root      20   0       0      0      0 S  0.0  0.0   0:01.62 kworker/0:0 │
    5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H│
    7 root      20   0       0      0      0 S  0.0  0.0   0:00.06 rcu_sched   │
    8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh      │
    9 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0 │
                                                                               │
   10 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 lru-add-drai│
n                                                                              │
   11 root      rt   0       0      0      0 S  0.0  0.0   0:00.01 watchdog/0  │
                                                                               │
   12 root      20   0       0      0      0 S  0.0  0.0   0:00.00 cpuhp/0     │
                                                                               │
$                                                                              │
───────────────────────────────────────────────────────────────────────────────┴───────────────
$















[LPI] 0:Window zero- 1:Window one*                                      "debian" 19:05 27-Aug-19

Para destruir o painel atual (junto com o pseudoterminal rodando dentro dele e quaisquer programas associados), use Ctrl+b-x. Será solicitada a confirmação na barra de status:

kill-pane 1? (y/n)

Comandos importantes dos painéis:

Ctrl+b-↑,↓,←,→

mover-se entre painéis.

Ctrl+b-;

passar para o último painel ativo.

Ctrl+b-Ctrl+seta

redimensionar o painel em uma linha.

Ctrl+b-Alt+seta

redimensionar o painel em cinco linhas.

Ctrl+b-{

trocar de painel (do atual para o anterior).

Ctrl+b-}

trocar de painel (do atual para o seguinte).

Ctrl+b-z

aproximar/afastar o painel.

Ctrl+b-t

O tmux exibe um relógio elegante dentro do painel (para removê-lo, pressione q).

Ctrl+b-!

transforma o painel em janela.

Para conhecer a lista completa de comandos, consulte a página do manual.

Sessões

Para listar as sessões no tmux, você pode usar Ctrl+b-s:

(0) + LPI: 2 windows (attached)

Outra alternativa é usar o comando tmux ls:

$ tmux ls
LPI: 2 windows (created Tue Aug 27 19:01:49 2019) [158x39] (attached)

Existe apenas uma sessão (LPI) que inclui duas janelas. Vamos criar uma nova sessão de dentro de nossa sessão atual. Isso pode ser feito usando Ctrl+b. Digite :new no prompt e pressione Enter. Você será enviado para a nova sessão, conforme pode ser observado na barra de status:

[2] 0:bash*                                                       "debian" 19:15 27-Aug-19

Por padrão, o tmux denomina a sessão 2. Para renomeá-la, use Ctrl+b-$. Quando solicitado, informe o novo nome e pressione Enter:

(rename-session) Second Session

Para trocar de sessão, o atalho é Ctrl+b-s (use as setas do teclado e enter):

(0) + LPI: 2 windows
(1) + Second Session: 1 windows (attached)

Para eliminar uma sessão, você pode usar o comando tmux kill-session -t SESSION-NAME. Se digitar o comando de dentro da sessão atual anexada, você será retirado do tmux e levado de volta à sua sessão de terminal inicial:

$ tmux kill-session -t "Second Session"
[exited]
$

Desanexando sessões

Ao eliminar Second Session, fomos levados para fora do tmux. No entanto, ainda temos uma sessão ativa. Peça ao tmux uma lista de sessões e você certamente a encontrará ali:

$ tmux ls
LPI: 2 windows (created Tue Aug 27 19:01:49 2019) [158x39]

No entanto, esta sessão está desanexada de seu terminal. Podemos anexá-la com tmux attach -t SESSION-NAME (attach pode ser substituído por at ou — simplesmente — a). Quando há apenas uma sessão, a especificação do nome é opcional:

$ tmux a

Agora você está de volta à sua sessão; para desanexá-la, pressione Ctrl+b-d:

[detached (from session LPI)]
$
Tip

A mesma sessão pode ser anexada a mais de um terminal. Se quiser anexar uma sessão e ter certeza de que ela foi primeiramente desanexada de quaisquer outros terminais, use a opção -d: tmux attach -d -t SESSION-NAME.

Comandos importantes para anexar/desanexar sessão:

Ctrl+b-D

seleciona o cliente a desanexar.

Ctrl+b-r

atualiza o terminal do cliente.

Para conhecer a lista completa de comandos, consulte a página do manual.

Copiar e colar: Modo de rolagem

O tmux também possui um modo de cópia, basicamente igual ao do screen (lembre-se de usar o prefixo de comando do tmux e não o de screen!). A única diferença em termos de comando é que usamos Ctrl + Espaço para marcar o início da seleção e Alt+w para copiar o texto selecionado.

Personalização do tmux

Os arquivos de configuração do tmux tipicamente se localizam em /etc/tmux.conf and ~/.tmux.conf. Quando iniciado, o tmux procura por esses arquivos, se eles existirem. Também existe a possibilidade de iniciar o tmux com a opção -f para fornecer um arquivo de configuração alternativo. Um exemplo de arquivo de configuração do tmux pode ser encontrado em /usr/share/doc/tmux/example_tmux.conf. O nível de personalização é altíssimo. Eis algumas das coisas que é possível fazer:

  • Alterar a tecla de prefixo

    # Change the prefix key to C-a
    set -g prefix C-a
    unbind C-b
    bind C-a send-prefix
  • Definir atalhos de teclado extras para janelas superiores a 9

    # Some extra key bindings to select higher numbered windows
    bind F1 selectw -t:10
    bind F2 selectw -t:11
    bind F3 selectw -t:12

Para ver uma lista abrangente com todos os atalhos, digite Ctrl+b-? (pressione q para sair) ou consulte a página de manual.

Exercícios Guiados

  1. Indique se as seguintes afirmações/recursos correspondem ao GNU Screen, ao tmux ou a ambos:

    Recurso/Afirmação GNU Screen tmux

    O prefixo dos comandos por padrão é Ctrl+a

    Modelo Cliente-Servidor

    Os painéis são pseudo-terminais

    Eliminar uma região não elimina as janelas associadas

    As sessões incluem janelas

    As sessões podem ser desanexadas

Mude o nome da janela atual para vi: . Instale o tmux em seu computador (nome do pacote: tmux) e realize as tarefas a seguir:

+ * Inicie o programa. Que comando você usa?

+

+ * Inicie top (note como — em poucos segundos — o nome da janela na barra de status muda para top):

+

+ * Usando o prefixo de teclado do tmux, abra uma nova janela; em seguida, crie ~/.tmux.conf usando nano:

+

+ * Divida a janela verticalmente e reduza o tamanho do novo painel algumas vezes:

+

+ * Agora mude o nome da janela atual para text editing; em seguida, faça o tmux exibir uma lista de todas as sessões:

+

+ * Passe para a janela que está rodando top e volte à janela atual usando a mesma combinação de teclas:

+

+ * Desanexe a sessão atual e crie uma nova chamada ssh com uma janela chamada ssh window:

+

+ * Desanexe também a sessão ssh e faça o tmux exibir outra vez a lista de sessões:

+

+

Note

A partir deste ponto, o exercício requer o uso de uma máquina remota para conexões ssh ao seu host local (uma máquina virtual é perfeitamente válida e pode ser muito prática). Certifique-se de ter o openssh-server instalado e rodando em sua máquina local e que pelo menos o openssh-client esteja instalado na máquina remota.

+ * Agora, inicie uma máquina remota e conecte-se via ssh de seu host local. Quando a conexão for estabelecida, procure por sessões do tmux:

+

+ * No host remoto, anexe a sessão do ssh pelo nome:

+

+ * De volta à máquina local, anexe a sessão do ssh pelo nome, garantindo que a conexão ao hospedeiro remoto seja encerrada antes:

+

+ * Exiba todas as sessões para seleção e vá à primeira sessão ([0]). Uma vez ali, elimine a sessão ssh pelo nome:

+

+ * Finalmente, desanexe a sessão atual e elimine-a pelo nome:

+

Exercícios Exploratórios

  1. Tanto screen quanto tmux podem entrar no modo de linha de comando através do atalho prefixo do comando + : (já vimos um breve exemplo com tmux). Faça uma pesquisa e realize as seguintes tarefas em modo de linha de comando:

    • Faça o screen entrar em modo de cópia:

    • Faça o tmux renomear a janela atual:

    • Faça o screen fechar todas as janelas e encerrar a sessão:

    • Faça o tmux dividir um painel em dois:

    • Faça o tmux eliminar a janela atual:

  2. Quando entramos no modo de cópia no screen, não somente podemos usar as setas do teclado e PgUP or PgDown para navegar na janela atual e no buffer de rolagem; também há a possibilidade de usar um editor de tela completo como o vi. Usando esse editor, realize as seguintes tarefas:

    • Ecoe (echo) supercalifragilisticexpialidocious em seu terminal de screen:

    • Agora, copie os cinco caracteres consecutivos (da esquerda para a direita) na linha acima de seu cursor:

    • Finalmente, cole a seleção (stice) em seu prompt de comando:

  3. Suponha que você quer compartilhar uma sessão do tmux (our_session) com outro usuário. Você criou o socket (/tmp/our_socket) com as permissões corretas, para que você e o outro usuário possam ler e escrever. Quais são as outras duas condições para que o segundo usuário possa anexar com sucesso a sessão usando tmux -S /tmp/our_socket a -t our_session?

Resumo

Nesta lição, você aprendeu sobre multiplexadores de terminal em geral e o GNU Screen e o tmux em particular. Estes são os conceitos importantes a lembrar:

  • Prefixo do comando: o screen usa Ctrl+a + caractere; o tmux, Ctrl+b + caractere.

  • Estrutura de sessões, janelas e divisões de janelas (regiões ou painéis).

  • Modo de cópia.

  • Desanexar sessões: um dos recursos mais poderosos dos multiplexadores.

Comandos usados nesta lição:

screen

Inicia uma sessão do screen.

tmux

Inicia uma sessão do tmux.

Respostas aos Exercícios Guiados

  1. Indique se as seguintes afirmações/recursos correspondem ao GNU Screen, ao tmux ou a ambos:

    Recurso/Afirmação GNU Screen tmux

    O prefixo dos comandos por padrão é Ctrl+a

    x

    Modelo Cliente-Servidor

    x

    Os painéis são pseudo-terminais

    x

    Eliminar uma região não elimina as janelas associadas

    x

    As sessões incluem janelas

    x

    x

    As sessões podem ser desanexadas

    x

    x

  2. Instale o GNU Screen no seu computador (nome do pacote: screen) e realize as seguintes tarefas:

    • Inicie o programa. Que comando você usa?

      screen

    • Inicie top:

      top

    • Usando o prefixo de teclado de screen, abra uma nova janela; em seguida, abra /etc/screenrc usando vi:

      Ctrl+a-c

      sudo vi /etc/screenrc

    • Liste as janelas na parte de baixo da tela:

      Ctrl+a-w

    • Mude o nome da janela atual para vi:

      Ctrl+a-A. Depois digitamos vi e pressionamos enter.

    • Mude o nome da janela restante para top. Para isso, primeiro exiba uma lista de todas as janelas para poder navegar entre elas e selecionar a correta:

      Primeiro, digitamos Ctrl+a-". Em seguida usamos as setas do teclado para marcar a janela que diz 0 bash e pressionamos enter. Finalmente, digitamos Ctrl+a-A, em seguida top e pressionamos enter.

    • Confira se os nomes foram alterados exibindo o nome das janelas novamente na parte de baixo da tela:

      Ctrl+a-w

    • Agora, desanexe a sessão e faça o screen criar uma nova de nome ssh:

      Ctrl+a-d screen -S "ssh" e pressione enter.

    • Desanexe ssh e faça o screen exibir a lista de sessões:

      Ctrl+a-d screen -list ou screen -ls.

    • Agora, anexe-a à primeira sessão usando seu PID:

      screen -r PID-OF-SESSION

    • Você deve ter retornado à janela que está exibindo top. Divida a janela horizontalmente e passe para a nova região vazia:

      Ctrl+a-S

      Ctrl+a-Tab

    • Faça o screen listar todas as janelas e selecione vi para ser exibido na nova região vazia:

      Usamos Ctrl+a-" para exibir todas as janelas para seleção, marcamos vi e pressionamos enter.

    • Agora, divida a região atual verticalmente, passe para a nova região vazia e associe-a a uma nova janela:

      Ctrl+a-|

      Ctrl+a-Tab

      Ctrl+a-c

    • Elimine todas as regiões exceto a atual (lembre-se de que, embora você esteja eliminando as regiões, as janelas ainda estão vivas). Depois, saia de todas as janelas da sessão atual até que a sessão em si seja encerrada:

      Ctrl+a-Q. exit (para sair do Bash). Shift+:, depois digitamos quit e pressionamos enter (para sair do vi). Em seguida, digitamos exit (para sair do shell Bash subjacente), q (para encerrar top); depois digitamos exit (para sair do shell Bash subjacente).

    • Finalmente, faça o screen listar novamente suas sessões, elimine a sessão ssh restante pelo PID e confira se não sobrou nenhuma sessão:

      screen -list ou screen -ls

      screen -S PID-OF-SESSION -X quit

      screen -list ou screen -ls

  3. Instale o tmux em seu computador (nome do pacote: tmux) e realize as tarefas a seguir:

    • Inicie o programa. Que comando você usa?

      tmux

    • Inicie top (note como — em poucos segundos — o nome da janela na barra de status muda para top):

      top

    • Usando o prefixo de teclado do tmux, abra uma nova janela; em seguida, crie ~/.tmux.conf usando nano:

      Ctrl+b-c nano ~/.tmux.conf

    • Divida a janela verticalmente e reduza o tamanho do novo painel algumas vezes:

      Ctrl+b-"

      Ctrl+b-Ctrl+↓

    • Agora mude o nome da janela atual para text editing; em seguida, faça o tmux exibir uma lista de todas as sessões:

      Ctrl+b-,. Daí informamos o novo nome e pressionamos enter. Ctrl+b-s ou tmux ls.

    • Passe para a janela que está rodando top e volte à janela atual usando a mesma combinação de teclas:

      Ctrl+b-n or Ctrl+b-p

    • Desanexe a sessão atual e crie uma nova chamada ssh com uma janela chamada ssh window:

      Ctrl+b-d tmux new -s "ssh" -n "ssh window"

    • Desanexe também a sessão ssh e faça o tmux exibir outra vez a lista de sessões:

      Ctrl+b-d tmux ls

      Note

      A partir deste ponto, o exercício requer o uso de uma máquina remota para conexões ssh ao seu host local (uma máquina virtual é perfeitamente válida e pode ser muito prática). Certifique-se de ter o openssh-server instalado e rodando em sua máquina local e que pelo menos o openssh-client esteja instalado na máquina remota.

    • Agora, inicie uma máquina remota e conecte-se via ssh de seu host local. Quando a conexão for estabelecida, procure por sessões do tmux:

      No hospedeiro remoto: ssh local-username@local-ipaddress. Depois de conectá-lo à máquina local: tmux ls.

    • No host remoto, anexe a sessão do ssh pelo nome:

      tmux a -t ssh (a pode ser substituído por at ou attach).

    • De volta à máquina local, anexe a sessão do ssh pelo nome, garantindo que a conexão ao hospedeiro remoto seja encerrada antes:

      tmux a -d -t ssh (a pode ser substituído por at ou attach).

    • Exiba todas as sessões para seleção e vá à primeira sessão ([0]). Uma vez ali, elimine a sessão ssh pelo nome:

      Digitamos Ctrl+b-s, usamos as setas do teclado para marcar a sessão 0 e damos enter tmux kill-session -t ssh.

    • Finalmente, desanexe a sessão atual e elimine-a pelo nome:

      Ctrl+b-d tmux kill-session -t 0.

Respostas aos Exercícios Exploratórios

  1. Tanto screen quanto tmux podem entrar no modo de linha de comando através do atalho prefixo do comando + : (já vimos um breve exemplo com tmux). Faça uma pesquisa e realize as seguintes tarefas em modo de linha de comando:

    • Faça o screen entrar em modo de cópia:

      Ctrl+a-: — depois, digitamos copy.

    • Faça o tmux renomear a janela atual:

      Ctrl+b-: — depois, digitamos rename-window.

    • Faça o screen fechar todas as janelas e encerrar a sessão:

      Ctrl+a-: — depois, digitamos quit.

    • Faça o tmux dividir um painel em dois:

      Ctrl+b-: — depois, digitamos split-window.

    • Faça o tmux eliminar a janela atual:

      Ctrl+b-: — depois, digitamos kill-window.

  2. Quando entramos no modo de cópia no screen, não somente podemos usar as setas do teclado e PgUP or PgDown para navegar na janela atual e no buffer de rolagem; também há a possibilidade de usar um editor de tela completo como o vi. Usando esse editor, realize as seguintes tarefas:

    • Ecoe (echo) supercalifragilisticexpialidocious em seu terminal de screen:

      echo supercalifragilisticexpialidocious

    • Agora, copie os cinco caracteres consecutivos (da esquerda para a direita) na linha acima de seu cursor:

      Para entrar no modo de cópia: Ctrl+a-[ ou Ctrl+a-: e digitamos copy. Daí, passamos para a linha de cima usando k e pressionamos espaço para marcar o início da seleção. Finalmente, avançamos quatro caracteres usando l e pressionamos espaço novamente para marcar o final da seleção.

    • Finalmente, cole a seleção (stice) em seu prompt de comando:

      Ctrl+a-]

  3. Suponha que você quer compartilhar uma sessão do tmux (our_session) com outro usuário. Você criou o socket (/tmp/our_socket) com as permissões corretas, para que você e o outro usuário possam ler e escrever. Quais são as outras duas condições para que o segundo usuário possa anexar com sucesso a sessão usando tmux -S /tmp/our_socket a -t our_session?

    Ambos os usuários devem ter um grupo em comum, p. ex. multiplexer. Em seguida o socket também deve ser passado para esse grupo: chgrp multiplexer /tmp/our_socket.

Linux Professional Insitute Inc. Todos os direitos reservados. Visite o site dos Materiais Didáticos: https://learning.lpi.org
31/5000 Este trabalho está licenciado sob a Licença Creative Commons Atribuição-Uso Não-Comercial-NãoDerivativos 4.0 Internacional.

Próxima Lição

103.6 Modificar a prioridade de execução de um processo (103.6 Lição 1)

Ir para a próxima lição

Linux Professional Insitute Inc. Todos os direitos reservados. Visite o site dos Materiais Didáticos: https://learning.lpi.org
31/5000 Este trabalho está licenciado sob a Licença Creative Commons Atribuição-Uso Não-Comercial-NãoDerivativos 4.0 Internacional.

A LPI é uma organização sem fins lucrativos.

© 2023 O Linux Professional Institute (LPI) é um organismo de apoio aos profissionais de Open Source e referência mundial em certificação. Com mais de 200.000 pessoas certificadas, somos o principal organismo de certificação independente para Linux e Open Source do mundo. O LPI certificou profissionais de mais de 180 países, oferece exames em diversos idiomas e tem centenas de parcerias de formação em todo o globo.

Nossa missão é proporcionar oportunidades econômicas e criativas para todos, tornando universalmente acessível a certificação de conhecimentos e competências em matéria de Open Source.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Entre em Contato
  • Política de Privacidade e Cookies

Encontrou um erro ou quer ajudar a aprimorar esta página? Escreva pra nós.

© 1999–2023 The Linux Professional Institute Inc. Todos os direitos reservados.