it-swarm-pt.tech

GNU Guia de sobrevivência na tela

O que as pessoas pensam não são apenas as coisas essenciais que você precisa saber sobre o excelente utilitário Screen, mas as coisas que você acha que vale a pena ensinar a alguém, iniciante, desde o início?

Acabei de apresentar um amigo à Screen e eles estão tendo dificuldade para se acostumar. Portanto, analogias e dicas úteis para lembrar de vinculações etc. seriam impressionantes.

106
Henry B

Uso a tela há mais de 10 anos e provavelmente use menos da metade dos recursos. Portanto, definitivamente não é necessário aprender todos os seus recursos imediatamente (e eu não recomendaria tentar). Meus comandos do dia-a-dia são:

^A ^W - window list, where am I
^A ^C - create new window
^A space - next window
^A p - previous window
^A ^A - switch to previous screen (toggle)
^A [0-9] - go to window [0-9]
^A esc - copy mode, which I use for scrollback

Eu acho que é isso. Às vezes, uso os recursos de tela dividida, mas certamente não diariamente. A outra dica é se a tela parece ter bloqueado porque você pressiona alguma combinação aleatória de teclas por acidente, faça as teclas ^ Q e ^ A ^ Q para tentar desbloqueá-la.

91
Greg Hewgill

Não consegui me acostumar com a tela até encontrar uma maneira de definir uma 'barra de status' na parte inferior da tela que mostra em qual 'aba' ou 'tela virtual' você está e quais outras existem. Aqui está a minha configuração:

[[email protected] ~]$ cat .screenrc
# Here comes the pain...
caption always "%{=b dw}:%{-b dw}:%{=b dk}[ %{-b dw}%{-b dg}$USER%{-b dw}@%{-b dg}%H %{=b dk}] [ %= %?%{-b dg}%-Lw%?%{+b dk}(%{+b dw}%n:%t%{+b dk})%?(%u)%?%{-b dw}%?%{-b dg}%+Lw%? %{=b dk}]%{-b dw}:%{+b dw}:"

backtick 2 5 5 $HOME/scripts/meminfo
hardstatus alwayslastline "%{+b dw}:%{-b dw}:%{+b dk}[%{-b dg} %0C:%s%a %{=b dk}]-[   %{-b dw}Load%{+b dk}:%{-b dg}%l %{+b dk}] [%{-b dg}%2`%{+b dk}] %=[ %{-b dg}%1`%{=b dk} ]%{-b dw}:%{+b dw}:%<"

sorendition "-b dw"
[[email protected] ~]$ cat ~/scripts/meminfo
#!/bin/sh
RAM=`cat /proc/meminfo | grep "MemFree" | awk -F" " '{print $2}'`
SWAP=`cat /proc/meminfo | grep "SwapFree" | awk -F" " '{print $2}'`
echo -n "${RAM}kb/ram ${SWAP}kb/swap"
[[email protected] ~]$
36
Roel

Ctrl+A ? - mostre a tela de ajuda!

30
James Muscat

Se seu amigo costuma pressionar ^A para chegar ao início da linha no bash, ele/ela está com algumas surpresas, já que ^A é a ligação da tecla de comando da tela. Normalmente, acabo com uma tela congelada, possivelmente por causa de alguma tecla aleatória que pressionei após ^A :-)

Nesses casos, eu tento

^A s e ^A q bloquear/desbloquear rolagem de terminal

para consertar isso. Para ir para o início de uma linha dentro da tela, a sequência de teclas é ^A a

26
agnul

Você pode remapear a tecla de escape de ctrl-A para ser outra chave de sua escolha. Portanto, se você a usar para outra coisa, por exemplo, Para ir para o início da linha no bash, basta adicionar uma linha ao seu arquivo ~/.screenrc. Para torná-lo ^ b ou ^ B, use:

escape ^bB

Na linha de comando, use as sessões de nomes para manter várias sessões sob controle. Eu uso uma sessão por tarefa, cada uma com várias guias:

 screen -ls lista suas sessões de tela atuais 
 screen -S <name> cria uma nova sessão de tela chamada name 
 screen -r <name> se conecta às sessões de tela nomeadas 

Ao usar a tela, você precisa apenas de alguns comandos:

 ^ A c crie um novo Shell 
 ^ A [0-9] alterne o Shell 
 ^ A mate o atual Shell 
 ^ A desconecte da tela 
 ^ A? mostre a ajuda 

Uma excelente referência rápida pode ser encontrada aqui . Vale a pena marcar.

12
Andrew Johnson

Algumas dicas para aqueles que estão familiarizados com a tela, mas que tendem a não se lembrar das coisas que lêem na página de manual:

  • Alterar o nome de uma janela de tela é muito fácil: ctrl+Ashift+A.
  • Você perdeu a última mensagem da tela? ctrl+actrl+m mostrará novamente para você.
  • Se você deseja executar algo (como seguir um arquivo) e solicitar que a tela informe quando houver uma alteração, use ctrl+Ashift+m na janela de destino. Aviso: permitirá que você saiba se qualquer coisa muda.
  • Deseja selecionar a janela 15 diretamente? Experimente estes em seu .screenrc Arquivo:
bind  ! select 11
bind  @ select 12
bind \# select 13
bind  $ select 14
bind  % select 15
bind \^ select 16
bind  & select 17
bind  * select 18
bind  ( select 19
bind  ) select 10

Isso atribui ctrl+ashift+0 through 9 para janelas 10 a 19.

8
staticsan

ctrl+a é uma chave especial.

ctrl+ad - [d] etach, deixe programas (irssi?) em segundo plano, vá para casa.

ctrl+ac [c] criar uma nova janela ctrl+a0-9 alternar entre janelas por número

screen -r - retorna à sessão desanexada

Isso cobre 90% dos casos de uso. Não tente mostrar todas as funcionalidades ao mesmo tempo.

6
tadeusz

Ctrl+A é o comando base

Ctrl+AN = vá para a tela ext *** N ***

Ctrl+AP = vá para a tela de revisão *** P ***

Ctrl+AC = *** C *** reate nova tela

Ctrl+AD = *** D *** etach sua tela

6
Niko Gunadi

http://www.debian-administration.org/articles/34

Escrevi isso alguns anos atrás, mas ainda é uma boa introdução que recebe muito feedback positivo.

6
user14038

Eu "devo" adicionar isto: add

bind s

para o seu .screenrc, se Você - como eu - costumava usar janelas divididas, como C-a S divide a janela atual, mas C-a s congela. Acabei de desativar o atalho de congelamento.

6
Zsolt Botykai

Não é realmente essencial, não apenas relacionado à tela, mas ativando 256 cores no meu terminal, GNU Screen e Vim melhorou muito a minha experiência na tela (especialmente desde que eu codifiquei no Vim cerca de 8h por dia - existem ótimos esquemas de cores amigáveis ​​aos olhos).

4
jkramer

Há algumas trabalho interessante sendo realizado para obter uma boa configuração da tela gnu acontecendo por padrão na próxima versão do Ubuntu Server, que inclui o uso da parte inferior da tela para mostrar todas as janelas e outras detalhes úteis da máquina (como # atualizações disponíveis e se a máquina precisa de uma reinicialização). Você provavelmente pode pegar o seu .screenrc e personalize-o de acordo com suas necessidades.

Os comandos mais úteis que tenho no meu .screenrc são as seguintes

shelltitle "$ |bash" # make screen assign window titles automatically
hardstatus alwayslastline "%w" # show all window titles at bottom line of term

Dessa forma, eu sempre sei quais janelas estão abertas e o que está funcionando nelas no momento também.

3
David Dean

A primeira modificação que faço no .screenrc é alterar o comando de escape. Não muito diferente de muitos de vocês, não gosto da sequência Ctrl-A padrão por causa de sua interferência com essa funcionalidade fundamental em quase todos os outros contextos. No meu arquivo .screenrc, adiciono:

escape `e

Isso é backtick-e.

Isso me permite usar o backtick como tecla de escape (por exemplo, para criar uma nova tela, pressiono backtick-c, desanexo é backtick-d, backtick-? É ajuda, backtick-backtick é a tela anterior, etc.). A única maneira de interferir (e eu tive que me livrar do hábito) é usar o backtick na linha de comando para capturar a saída da execução ou colar qualquer coisa que contenha um backtick. No primeiro, modifiquei meu hábito usando a convenção BASH $ (comando). Para o último, eu geralmente apenas abro outro xterm ou retiro da tela e colo o conteúdo que contém o backtick. Finalmente, se eu quiser inserir um backtick literal, simplesmente pressiono backtick-e.

3
Gary Chambers

Não me lembro de quem roubei isso (alguém no dotfile.org). Eu o modifiquei um pouco para ssh:

#!/bin/sh
# scr - Runs a command in a fresh screen
#
# Get the current directory and the name of command

wd=`pwd`
cmd=$1
shift

# We can tell if we are running inside screen by looking
# for the STY environment variable.  If it is not set we
# only need to run the command, but if it is set then
# we need to use screen.

if [ -z "$STY" ]; then
        $cmd $*
else
        # Screen needs to change directory so that
        # relative file names are resolved correctly.
        screen -X chdir $wd

        # Ask screen to run the command
        if [ $cmd == "ssh" ]; then
                screen -X screen -t ""${1##*@}"" $cmd $*
        else
                screen -X screen -t "$cmd $*" $cmd $*
        fi
fi

Em seguida, defino os seguintes aliases de bash:

vim() {
        scr vim $*
}

man() {
        scr man $*
}

info() {
        scr info $*
}

watch() {
        scr watch $*
}

ssh() {
        scr ssh $*
}

Ele abre uma nova tela para os aliases acima e, se estiver usando ssh, renomeia o título da tela com o nome do host ssh.

Cheers z0mbix

3
user203445

Eu gosto de configurar uma sessão de tela com nomes descritivos para as janelas. ^ a A permitirá que você dê um nome à janela atual e ^ a "fornecerá uma lista de suas janelas. Quando terminar, desconecte a tela com ^ ad e reconecte-a com a tela -R

2
innaM

Alguém postou uma pergunta semelhante a esta em Falha no servidor .

2
Vagnerr

Eu gosto de usar screen -d -RR para criar/anexar automaticamente a uma determinada tela. Eu criei funções bash para facilitar ...

function mkscreen
{
    local add=n

    if [ "$1" == '-a' ]; then
        add=y
        shift;
    fi

    local name=$1;
    shift;
    local command="$*";

    if [ -z "$name" -o -z "$command" ]; then
        echo 'Usage: mkscreen [ -a ] name command

    -a          Add to .bashrc.' 1>&2;
        return 1;
    fi

    if [ $add == y ]; then
        echo "mkscreen $name $command" >> $HOME/.bashrc;
    fi

    alias $name="/usr/bin/screen -d -RR -S $name $command";

    return 0;
}

function rmscreen
{
    local delete=n

    if [ "$1" == '-d' ]; then
        delete=y
        shift;
    fi

    local name=$1;

    if [ -z "$name" ]; then
        echo 'Usage: rmscreen [ -d ] name

    -d          Delete from .bashrc.' 1>&2;
        return 1;
    fi

    if [ $delete == y ]; then
        sed -i -r "/^mkscreen $name .*/d" $HOME/.bashrc;
    fi

    unalias $name;

    return 0;
}

Eles criam um alias para /usr/bin/screen -d -RR -S $name $command. Por exemplo, eu gosto de usar o irssi em uma sessão de tela; portanto, no meu .bashrc (abaixo dessas funções), tenho:

mkscreen irc /usr/bin/irssi

Então, basta digitar irc em um terminal para entrar no irssi. Se a tela 'irc' ainda não existir, é criada e/usr/bin/irssi é executada a partir dela (que se conecta automaticamente, é claro). Se já estiver em execução, basta reconectá-lo, desanexando à força qualquer outra instância que já esteja anexada a ele. É bem legal.

Outro exemplo é a criação de aliases de tela temporários para os perldocs à medida que os encontro:

mkscreen perlipc perldoc perlipc
perlipc # Start reading the perldoc, ^A d to detach.
...
# Later, when I'm done reading it, or at least finished
# with the alias, I remove it.
rmscreen perlipc 

A opção -a (deve ser o primeiro argumento) anexa o alias da tela a .bashrc (por isso é persistente) e -d a remove (elas podem ser potencialmente destrutivas, portanto, use por sua conta e risco). xD

Acrescentar:

Outro bash-ism que acho conveniente quando se trabalha muito com tela:

alias sls='/usr/bin/screen -ls'

Dessa forma, você pode listar suas telas com muito menos pressionamentos de tecla. Não sei se sls colide com quaisquer utilitários existentes, mas na época não existia no meu sistema, então fui em frente.

1
bambams

^ A é um ótimo caractere especial para o pessoal do UNIX, mas se você estiver usando a tela para conversar com o OpenVMS, não conseguir ^ A fará com que você fique careca prematuramente. No VMS, se você estiver editando um comando DCL antes da execução do buffer de histórico, o modo Inserir está desativado (deve ser por alguns motivos que não entrarei aqui) .. para ativá-lo para que você não exagere digite seu comando em vez de espaçar as coisas, você deve pressionar ^ A

0
user2146463

^ A A volta para a tela da qual você acabou de sair.

0
dummy