GNU Ekranını düzgün kullanmak için ne bilmeliyim? [kapalı]


106

Bir arkadaşımı GNU Screen ile tanıştırdım ve alışmakta zorlanıyorlar. Bu, mükemmel Screen yardımcı programı hakkında bilmesi gereken temel şeyleri düşünmeme neden oluyor, birisine, yeni başlayan birine, sıfırdan öğretmeye değer olduğunu düşündüğünüz şeylerin aynısı. Bağlamaları vb. Hatırlamak için bazı benzetmeler ve kullanışlı ipuçları nelerdir?

Harika olurdu.


1
Buna burada da bazı iyi cevaplar var: stackoverflow.com/questions/70661/what-is-gnu-screen
Chris

Birisi Sunucu Hatası konusunda buna benzer bir soru gönderdi .
Vagnerr

Birisi Screen ile yeni başlıyor ve zor anlar yaşıyorsa, alternatif tmux'a göz atmak isteyebilir .
Christopher Bottoms

Yanıtlar:


93

Screen10 yılı aşkın süredir kullanıyorum ve muhtemelen özelliklerin yarısından azını kullanıyorum. Bu nedenle, tüm özelliklerini hemen öğrenmek kesinlikle gerekli değildir (ve denemenizi tavsiye etmem.) Günlük komutlarım:

^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

Bence bu kadar. Bazen bölünmüş ekran özelliklerini kullanıyorum ama kesinlikle her gün kullanmıyorum. Diğer ipucu, kazara rastgele bir tuş kombinasyonuna bastığınız için ekran kilitlenmiş gibi görünüyorsa, ikisini de yapın ^Qve ^A ^Qkilidini açmaya çalışın.


1
^ Pencereyi kapatmak için listeye k eklenmelidir.
Léo Léopold Hertz 준영

7
Yanlışlıkla niyet ettiğimden daha fazlasını öldürme olasılığı nedeniyle ^ A k kullanmıyorum. Bunun yerine, ^ D (veya exit) kullanarak bir pencerede kabuktan çıkıyorum . Bir penceredeki son kabuktan çıkıldıktan sonra ekran penceresi otomatik olarak kapanır.
Greg Hewgill

9
"^ Geri kaydırma için kullandığım bir esc - kopyalama modu" Siz erkekler arasında bir tanrısınız, efendim.
Rob Howard

4
^ A [tam olarak aynı şeyi yapar.
atx

^ A ^ D numarası için teşekkürler ... Sıkışmıştım ve seansıma dönemedim. Bu, bir süre önce yazdığım birine yardımcı olursa, buradaki gibi ekranların temelini açıklayan ancak birkaç püf noktası
Patrick Forget

36

Ekranın altında hangi 'sekme' veya 'sanal ekranda' olduğunuzu ve başka hangilerinin olduğunu gösteren bir 'durum çubuğu' ayarlamanın bir yolunu bulana kadar ekrana alışamadım. İşte kurulumum:

[roel@roel ~]$ 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"
[roel@roel ~]$ 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"
[roel@roel ~]$

3
Byobu'ya (ekran profilleri) de göz atın: launchpad.net/byobu
Drew Stephens

Bu harika, teşekkürler. Terminalimi bölmeye çalışırken gerçekte ne olduğunu anlamaya çalışıyordum. Bu komutlardan herhangi birinin çalışması için önce ekranı çalıştırmam gerektiğini fark etmemiştim, aptal, biliyorum.
Ogaday

30

Ctrl+ A? - yardım ekranını göster!


Buna tamamen katılıyorum. Bu, diğer yanıtlardan çok daha kullanışlıdır, çünkü diğer komutları ondan çıkarabilirsin, ancak tersini yapamazsın. Ayrıca bir şeyi hatırlamak çok daha kolay.
Léo Léopold Hertz 준영

26

Arkadaşınız ^ABash'te satırın başına geçmek için basma alışkanlığındaysa, bazı sürprizlerle karşı karşıyadır, çünkü ^Aekran komut tuşu bağlayıcıdır. Genellikle, muhtemelen daha sonra ^Abastığım rastgele bir tuş yüzünden donmuş bir ekranla karşılaşıyorum :-)

Bu durumlarda denerim

^A sve ^A qterminal kaydırmayı engelle / engelini kaldır

düzeltmek için. Ekran içindeki bir satırın başına gitmek için tuş sırası ^A a.


1
Kaçış karakterini ^ A'dan başka bir şeye değiştirmek kolaydır. Ayrıntıları cevabıma ekledim.
Andrew Johnson

3
+ 1 + 1 + 1 ^ A s ... teşekkür ederim ... kilitli ekran :)
Yuji 'Tomita' Tomita

1
^ A a için @agnul +1 sizin için Normal bir bash oturumunda ^ A kullanıcısıyım ve bunu bir ekran oturumunda kullanamıyorum. Harika ipucu için teşekkürler! :)
icasimpan

Ekranda ctrl A'nın nasıl çalıştığını anlattığın için sana 100 kez teşekkür ederim. Hayatım boyunca bunu arıyordum.
user674669

Burada 'A' ve 'a' büyük / küçük harf duyarlı mı?
Aditya MP

12

Seçtiğiniz başka bir anahtar olmak üzere Ctrl+ ' dan kaçış anahtarını yeniden eşleştirebilirsiniz A, bu nedenle başka bir şey için kullanırsanız, örneğin bash'da satırın başına gitmek için, ~ / satırınıza bir satır eklemeniz yeterlidir. screenrc dosyası. ^ B veya ^ B yapmak için şunu kullanın:

escape ^bB

Komut satırından, birden çok oturumu kontrol altında tutmak için oturumları adlandırın. Görev başına her biri birden çok sekme içeren bir oturum kullanıyorum:

  screen -ls # Mevcut ekran oturumlarınızı listeler
  screen -S <name> # İsim adında yeni bir ekran oturumu oluşturur
  screen -r <name> # Adlandırılmış ekran oturumlarına bağlanır

Ekranı kullanırken yalnızca birkaç komuta ihtiyacınız vardır:

  ^ A c Yeni bir kabuk oluştur
  ^ A [0-9] Kabuk değiştir
  ^ A k Mevcut kabuğu öldür
  ^ A d Ekranla bağlantıyı kes
  ^ A? Yardımı göster

Burada mükemmel bir hızlı başvuru bulunabilir . Yer imlerine koymaya değer.


İç içe geçmiş ekran oturumları kullanıyorum. Dıştaki ile başlıyorum, screen -e^ooböylece bunun için Ctrl + O kullanabiliyorum ve sonra iç olanları ile screen -mbaşlayarak yeni seanslara başlasınlar.
staticsan

1
Çıkış anahtarını anında değiştirebilirsiniz. Çalışan bir ekran oturumunda, çıkış anahtarını ^ B olarak ayarlamak için ^A :, \Bbardından Enter tuşuna basın. Genel olarak, anladığınız ^A :komutu değerlendirmenize izin verir .screenrc.
malana

8

Ekrana aşina olan ancak man sayfasında okudukları şeyleri hatırlamama eğiliminde olanlar için bazı ipuçları:

  • Bir ekran penceresinin adını değiştirmek çok kolaydır: ctrl+ A shift+ A.
  • Ekrandaki son mesajı kaçırdınız mı? ctrl+ a ctrl+ mbunu sizin için tekrar gösterecektir.
  • Bir şeyi çalıştırmak (bir dosyayı takip etmek gibi) ve ekranın bir değişiklik olduğunda size haber vermesini istiyorsanız , hedef pencerede ctrl+ A shift+ kullanın m. Uyarı: Herhangi bir değişiklik olursa size haber verir .
  • Pencere 15'i doğrudan seçmek mi istiyorsunuz? .screenrcDosyanızda şunları deneyin :
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

Bu, 10 ile 19 arasındaki pencereler için ctrl+ a shift+ atar 0 through 9.


7

Ctrl+ Atemel komuttur

Ctrl+ A N= *** N *** harici ekrana git

Ctrl+ A P= *** P *** revous ekranına git

Ctrl+ A C= *** C *** yeni ekranı yeniden oluştur

Ctrl+ A D= *** D *** ekranınızı bağlayın


6

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

Bunu birkaç yıl önce yazdım, ancak yine de birçok olumlu geri bildirim alan iyi bir giriş.


Bağlantı (etkili bir şekilde) kesildi:$VAR1 = \'Can\'t connect to local MySQL server through socket \'/var/run/mysqld/mysqld.sock\' (111 "Connection refused") at ../lib/Singleton/DBI.pm line 95. ';
Peter Mortensen

6

Bunu eklemeliyim: ekle

bind s

için senin .screenrc, sen eğer - Benim gibi - gibi kullanım bölünmüş pencereler için kullanılan C-a Sbölünme gerçek pencere, ancak C-a sbunu donar. Bu yüzden dondurma kısayolunu devre dışı bıraktım.


2
^-Qvurursanız çözülür^-S
Plato

Haklısın @ Plato. Yine de, kısayolların neredeyse hiçbirini ezberlemeyen kullanıcılarla birlikte çalışıyorum ... Devre dışı bırakmam gerekiyordu.
Zsolt Botykai

NP az önce bu konuyu buldum ve 'don' aradım ve aradığımı bulamadım
Plato

6

Ctrl+ aözel bir anahtardır.

Ctrl+ a d- [d] etach, programları (irssi?) arka planda bırak, eve git.

Ctrl+ a c[c] yeni bir pencere aç Ctrl+ a 0-9pencereler arasında sayıya göre geçiş yap

screen -r - ayrılmış oturuma geri dön

Bu, kullanım durumlarının% 90'ını kapsar. Tek seferde tüm işlevleri göstermeye çalışmayın.


Hakkında ben ilk öğrendiğimde rağmen screenben ne hakkında karıştı aslında anlamına ayırmak ve yeniden takmak bir ekran. Alıntı : "... belirli bir makinede ayrı konsollarda (uzaktan kumandalı bir makinede ssh, IRC oturumları gibi) uzun süreli çalışan görevler olabilir, oturumdan ayrılabilir, bir fiziksel konumdan diğerine geçebilir, makineyi ssh aracılığıyla ve çalışmaya devam etmek için ekran oturumuna yeniden bağlayın. "
JW.


3

.Screenrc'de yaptığım ilk değişiklik, escape komutunu değiştirmektir. Çoğunuzun aksine, ben varsayılan Ctrl-A dizisini hemen hemen her bağlamda bu temel işlevsellikle çakışması nedeniyle sevmiyorum. .Screenrc dosyamda şunu ekliyorum:

kaçış

Bu geri tepme-e.

Bu, backtick'i kaçış tuşu olarak kullanmamı sağlıyor (örneğin, yeni bir ekran oluşturmak için, geri tik-c'ye basıyorum, ayırma geri tik-d, geri tik-? Yardım, geri tik önceki ekrandır, vb.). Müdahale etmenin tek yolu (ve kendimi bu alışkanlıktan kırmak zorunda kaldım), yürütme çıktısını yakalamak için komut satırında ters işaret kullanmak veya bir backtick içeren herhangi bir şeyi yapıştırmaktır. İlki için, BASH $ (komut) kuralını kullanarak alışkanlığımı değiştirdim. İkincisi için, genellikle başka bir xterm açıyorum veya ekrandan ayırıyorum ve ardından geri işaretini içeren içeriği yapıştırıyorum. Son olarak, gerçek bir backtick eklemek istersem, sadece geri tik-e tuşuna basarım.


parlak. $ (...) kullanmam gerektiğini bildiğim halde her zaman ters tikleri kullanıyorum, bu yüzden şimdi sanırım yöntemlerimi değiştirmem gerekebilir. Backtick biraz yoldan çıktı, ancak değiştiricilere ihtiyaç duymadan tek bir anahtara sahip olmak güzel. Ama neden "e" ve bunu nasıl hatırlıyorsun?
iconoclast

Sadece 'kaçış' ı test ettim ve güzel çalışıyor ve hatırlaması daha kolay görünüyor. Geri tik'e basarsanız ve beklediğinizi alamazsanız, tekrar vurun.
iconoclast

Bunu yaptım, ancak ekrandayken bir geri işaret yazmanın bir yolu var mı? Bazen bunu yapmak gerekiyor ve bunu yapmak için ayrılmamdan nefret ediyorum ...
Guillochon

@ Guillouchon: Önceki yorum tam olarak bunu açıklıyor.
tripleee

3

Ubuntu Sunucusunun sonraki sürümünde varsayılan olarak iyi bir GNU ekran kurulumu elde etmek için yapılan bazı ilginç çalışmalar var ; bu, tüm pencereleri ve diğer kullanışlı makine ayrıntılarını (güncelleme sayısı gibi) göstermek için ekranın altını kullanmayı içerir. kullanılabilir ve makinenin yeniden başlatılması gerekip gerekmediği). Muhtemelen onları .screenrcalıp ihtiyaçlarınıza göre özelleştirebilirsiniz.

Benim sahip olduğum en kullanışlı komutlar .screenrcşunlardır:

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

Böylelikle hangi pencerelerin açık olduğunu ve o anda içlerinde neyin çalıştığını her zaman bilirim.


3

Aşağıdakileri için kullanıyorum 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

Sonra aşağıdaki bash takma adlarını ayarladım:

vim() {
        scr vim $*
}

man() {
        scr man $*
}

info() {
        scr info $*
}

watch() {
        scr watch $*
}

ssh() {
        scr ssh $*
}

Yukarıdaki takma adlar için yeni bir ekran açar ve ssh kullanarak, ekran başlığını ssh ana bilgisayar adıyla yeniden adlandırır.


2

Pencereler için açıklayıcı adlar içeren bir ekran oturumu kurmayı seviyorum. ^ a A, geçerli pencereye bir ad vermenize izin verir ve ^ a "size pencerelerinizin bir listesini verir. Bittiğinde, ekranı ^ ad ile ayırın ve ekran -R ile yeniden ekleyin


1

screen -d -RRBelirli bir ekranı otomatik olarak oluşturmak / eklemek için kullanmayı seviyorum . Bunu kolaylaştırmak için bash fonksiyonları yarattım ...

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;
}

Bir takma ad oluştururlar /usr/bin/screen -d -RR -S $name $command. Örneğin, irssi'yi bir ekran oturumunda kullanmayı seviyorum, bu nedenle .bashrc dosyamda (bu işlevlerin altında):

mkscreen irc /usr/bin/irssi

O zaman ircirssi'ye girmek için bir terminal yazabilirim . Eğer 'irc' ekranı henüz mevcut değilse oluşturulur ve / usr / bin / irssi ondan çalıştırılır (tabii ki otomatik olarak bağlanır). Zaten çalışıyorsa, ona yeniden bağlarım, zaten ona bağlı olan diğer herhangi bir örneği zorla ayırırım. Oldukça güzel.

Başka bir örnek, perldoc'larla karşılaştıkça geçici ekran takma adları oluşturmaktır:

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 seçeneği (ilk argüman olmalıdır) ekran diğer adını .bashrc'ye ekler (böylece kalıcıdır) ve -d onu kaldırır (bunlar potansiyel olarak yıkıcı olabilir, bu nedenle riski üstlenerek kullanın). xD

Ekle:

Ekranla çok çalışırken uygun bulduğum başka bir bash-izm:

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

Bu şekilde, ekranlarınızı çok daha az tuş vuruşuyla listeleyebilirsiniz. slsHerhangi bir mevcut yardımcı programla çarpışır mı bilmiyorum , ama o zaman sistemimde yoktu, bu yüzden bunun için gittim.


0

^ AA, yeni geldiğiniz ekrana geri döner.


2
^ A ^ A geri döner, ^ AA pencere başlığının yeniden adlandırılmasına izin verir.
Andrey Starodubtsev

0

Ctrl+ A, Unix kullanıcıları için harika bir özel karakterdir, ancak OpenVMS ile konuşmak için ekranı kullanıyorsanız , ^ A yapamamak sizi vaktinden önce kelleştirecektir.

In VMS bir düzenleyecekseniz, DCL geçmişi tampon yürütme öncesinde komutu, Ekle modu (ben burada girmeyeceğim birkaç nedeni olmak zorunda) ... don böylece açmak için kapalıdır Bir şeyleri boşa çıkarmak yerine komutunuzu fazla yazmayın, `^ A'ya basmanız gerekir.


Kullandığım screen -e ^Llbenzer nedenlerle; Emacs'ta satırın başına gitmek için ctrl-A yazmayı unutamıyorum. Neyse ki, ctrl-L nadiren ihtiyaç duyduğum bir tuş vuruşudur ve ayrıca IMHO genel anlamıyla (yeniden çiz / temizle) güzel bir şekilde bağlanır.
üçlü

@tripleee: Kontrol-A yerine null karakteri kullanan benim .screenrchas escape ^@^@. Çoğu sistemde, null karakteri kontrol alanı olarak girebilirsiniz, bu da yazması çok kolaydır. (Ana oturumumda bir pencere içinde iç içe geçmiş bir ekran oturumum var; bunun için sahip olduğum bir tane var escape ^]^].)
Keith Thompson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.