Saatin disk belleği sürümü var mı?


24

Bir UNIX kabuğunun altında, watchkomuta benzer bir etki nasıl elde edebilirim , ancak birden fazla ekran kaplarsa çıktıda dolaşabilmem için çağrı yaparak?

Başka bir deyişle, watchne lessyapılması gerektiği ile ilgili bir program istiyorum cat.

Örnek olarak, çıktısını izlemek istediğimi söyleyebilirim qstat, kullanabilirim

watch qstat

qstat'ın çıktısını izlemek için, ancak bu sadece ilk ekran göstericiyi gösterir.

Sayfalama sürümüyle watch, hala sürekli tarafından güncelleştirildiği gibi çıktı içinde hareket edebilecektim watch. Şu anda mevcut hizmet programlarıyla bunu yapmanın bir yolu var mı?


Bu muhtemelen SuperUser veya belki ServerFault'a aittir.

Muhtemelen haklısın, nasıl hareket ettirebilirim?
David Dean

Şimdiye kadar taşımak için üç kişi oy kullandı; iki kişi (veya bir moderatör) onu taşımak için oy kullanırsa, o zaman otomatik olarak gerçekleşir.
Greg Hewgill

Neden sadece daha büyük bir pencere açıp tamamen sayfalamaya başlamıyorsunuz?
Marcin,

1
çünkü ekranım zaten dolu? neden lesssadece catdaha büyük bir pencere kullanabiliyorsanız kullanın ?
David Dean

Yanıtlar:


18

'İzle' komutunu değiştirmek yerine, ekranı kullanın!

Örneğin, 300 satır yükseklik ve 100 karakter genişlik görmeniz ve bunun etrafında hareket etmeniz gerektiğini varsayalım. Ekranı başlattıktan sonra, boyutu şu şekilde zorlayın:

C-a :height -w 300
C-a :width -w 100

Şimdi saat komutuna başla. Daha sonra C-a <ESC>ekranın etrafında gezinmek için kullanabilirsiniz .

Ne yazık ki, kopyalama modundayken ekran yenilenmiyor. Ancak, görüntülemekte olduğunuz pencerenin hangi bölümünü ayarlamak istiyorsanız, en kolay yol yükseklik / genişlik komutlarını varsayılan olarak tekrarlamak olabilir; terminaliniz sanal pencerenin sağ alt köşesini gösterir.


tek sorun o zaman her seferinde ekranı boşaltırken sürekli olarak komutu nasıl tekrarlayacağınızdır
David Dean

Hata! Watch komutunu ekran içinde çalıştırmak istedim. Sabit.
MikeyB

iplikler - ekranı sevmek için başka bir neden :)
warren

Bu C-aka olduğunu unutmayınctrl-
henry

5

Bunu deneyebilirsiniz:

vmstat iken; 1 uyu; bitti | az

vmstat'ı qstat ile değiştirin ve uykunuzu ihtiyaçlarınıza göre ayarlayın


tüm bunlar komutu tekrarlamaya devam etmektir less, bu da en son çıktıyı görmek için kaydırmaya devam etmeniz gerektiği anlamına gelir.
David Dean

Evet, ancak geri dönebilirsiniz. Aynı anda ikisine birden sahip olamazsınız. F tuşuna basıldığında, bu büyük 'F', kuyruk gibi çalışacaktır.
Spacen Jasset


2

Tamam, biraz watchlessfonksiyona girdim . Bu biraz zor ve henüz tamamen işe yaramadı gibi görünüyor, ama işte burada:

#!/bin/bash -u
out=$(mktemp)
(while [ 1 ]; do
    "$@" > $out;
    sleep 2;
done) &
less $out
kill $!

REkranın güncellenmesini sağlamak için tuşu daha az manuel olarak kullanmanız gerekir .

Her ikisi de boş görünen watchless dateiçin watchless qstatveya değil için çalışıyor gibi görünüyor watchless pstree. Herhangi bir fikir?


Komutun bir sonraki çalıştırmasının çıktısını yazmak için ikinci bir dosya kullanmalı ve ardından mvbu ikinci dosyayı atomik lessolarak okunan dosyaya yazmalısınız mv. Aksi takdirde less, dosya ile birlikte yazıldığı sırada bir yenileme istenirse, dosyanın kaybolduğunu düşünebilir "$@" > $out. Ayrıca, döngüyü başlatmadan önce bir kez de çıktı dosyasına yazmalısınız.
Aurélien Ooms 19

0

Satır içeriği değiştikçe bunun nasıl uygulanabileceğini görmüyorum ve watchaşağı kaydırsanız bile her 2 saniyede bir ilk satıra geri dönecekti.

Bazı geçici çözümler şunlardır:

watch 'qstat | tail -n40' 40. satırdan başlayarak qstat çıktısını göstermek

watch 'qstat | grep jsmith' Çıktıyı kavramak, böylece ilgilendiğiniz satırlar her zaman ilk ekranda olacaktır.

Komutları borunun etrafına tek tırnaklar halinde koymanız gerektiğine dikkat edin - aksi takdirde çıkışı watchdeğil boru çıkışını yapacaksınız qstat.


0

Enkrs'in cevabına devam etmek,

'qstat izle | kafa -300 | kuyruk -15 '

size qstat'ın çıktısına rastgele sayfalar göndermenizi sağlar.


0

İşte attığım birkaç komut için işe yarayan oldukça kaba bir senaryo.

#!/bin/bash
# ---- mywatch.sh ----

if [ $# -lt 1 && $# -gt 2 ]; then
    echo "Usage: $0 <command> <delay>" 
    exit 1
fi

CMD=$1
if [ $# -eq 2 ]; then
  DELAY=$2
else
  DELAY=2 # default
fi

while : ; do
  ( (echo -e "Every ${DELAY}s: $CMD\n"; $CMD) | less )&
  PID=$!
  sleep $DELAY
  kill -9 $PID &> /dev/null
  clear
done

Gibi kullanılır:

alias mywatch="~/bin/mywatch.sh"

mywatch vmstat
mywatch "ps aux" # commands in options need to be quoted
mywaych pstree 10 # change delays

Oldukça sersemletici olduğu için, canlandırmalar arasındaki geçiş istediğim kadar yumuşak değil. Doğal olarak, basit bir senaryo olması, diff'in (watch -d) vurgulanmasını desteklemez. Ayrıca, giriş argümanlarının ayrıştırılması daha iyi yapılabilir.



0

Bu isteği yerine getirmek için "watchall" adlı basit bir python betiği uyguluyorum.

anla : pip yüklemek watchall

saatinizi watchall ile değiştirin ve kaydırılabilir ekranın keyfini çıkarın. şimdi sadece -n ve -d bayraklarını destekliyor.


-1

deneyebilirsin:

watch command > file

Daha sonra, dosyanızda ek çıktı çıktısını görmelisiniz (bunu test etmek için şu anda bir linux kutu donanımına sahip değilim)


1
Bu niyetleneni yapmayacak, gerçekten, sadece fileaynı çıktıyı tekrar tekrar dolduracak . Kesinlikle asıl soruya değinmiyor.
Greg Hewgill

o zaman ben dunno :)

1
Verileri dosyaya eklemek için ">" olarak ">>" değiştirilsin mi?
Rory
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.