Başka bir kabukta yürütülen komutları nasıl görebilirim?


9

Başka bir kabukta hangi komutların yürütüldüğünü izlemenin bir yolu var mı? Her iki kabuk da bash, ve eğer önemliyse root erişimim var. Ekstra yazılım yükleyemiyorum ve diğer kabuğun çalışma ekranı gibi özel bir şey yapmasını istemiyorum.

Durum: Bir Linux makinesine uzaktan giriş yaptım, bu yüzden bir iş arkadaşınız. Kabuğunda çalıştırdığı komutları görmek istiyorum. Çalışmak için bir saniyeden uzun süren komutların bazı kombinasyonlarını watchve pskomutlarını görebileceğimi biliyorum , ancak bunun çok kısa komutlarla yardımcı olacağına inanmıyorum.


5
gibi yerleşik komutlar killve cdalt süreçleri ortaya çıkmaz ve ps çıkışında asla görünmez.
jordanm

@jordanm Teşekkürler, bu iyi bir nokta. Sadece bir fork / exec komutuna neden olan komutlarda bile, bu muhtemelen yeterince iyi olacaktır.
Tom Panning

Yanıtlar:


7

Kök olduğunuz için her zaman yapabilirsiniz strace -f -e execve -p her_bash_pid. Bu -fgereklidir, çünkü kabuğu daha önce yeni bir süreci çatallayacaktır exec, ancak bu aynı zamanda çocuk süreçlerinin de yürüttüğü her şeyi göreceğiniz anlamına gelir.


Teşekkürler, grepping strace'nin exec için çıktısı onu oldukça okunabilir hale getirir. Eminim ki çocukların çocuklarını takip etmeye devam etmesi bir gün beni şaşırtacak, ama şimdilik güvende olacağımı düşünüyorum. Exec çağırdıktan sonra bir işlemden otomatik olarak ayrılmanın bir yolu olmaması utanç verici.
Tom Panning

Açık kaynak kodlu; gerçekten ihtiyacınız varsa bu özelliği her zaman ekleyebilirsiniz. :) Ya da bir kez PID'yi yok sayan strace çıktısını ayrıştıran biraz daha akıllı bir script ekleyin exec.
Jim Paris

5

İş arkadaşınız bash kabukları için bazı geçmiş ayarlarını değiştirebilirse, bu bilgileri -f /home/user/.bash_history kuyrukundan alabilirsiniz. Kabuk çıkışında değil, her komuttan sonra .bash_history'nin yazılması için gereken ayar şunlardır:

export PROMPT_COMMAND="history -a"
shopt -s histappend

Yine de bir ekran oturumunun "ideal" bir çözüm olduğunu düşünürdüm.


5

Hızlı bir araştırmadan (ve biraz düşünmeden) sonra size aşağıdaki olası seçenekler listesini verebilirim:

  • Onun bash_history okuyun. Ancak genellikle sadece oturumdan çıkarılır. askubuntu.com'un bu davranışı değiştirme hakkında bir yayını var ( değiştir : @jordanm görünüşte aynı fikre sahipti ve yayınlamak daha hızlıydı ...).
  • Fiziksel bir terminaldeyse (/ dev / ttyX), programı kullanabilirsiniz conspy.
  • Onu kullan screen. Sadece ona yardım etmek ve casusluk yapmak istemiyorsanız, oturumunu ekranın içinde yürütmeye istekli olabilir. Daha sonra oturumunasudo -u herUsername screen -x
  • Komutları istediğiniz bir günlük dosyasına kaydeden bir kabuk sarmalayıcı komut dosyası yazabilirsiniz. Kabuğunu bu komut dosyasına ayarlamanız gerekir (Bu sadece bir fikir, işe yarayıp yaramayabilir).
  • cat /dev/pts/X | tee /dev/pts/XAklıma ilk gelen şey kullanmaktı . Ancak denemeden sonra gerçekten işe yaramaz ve çok kirli bir çözümdür. Her karakter sadece bağlı terminallerden birine yazdırılır (bu da arama nedenidir tee). Denerken her ikinci karakteri gözetleyebilirim. Biraz hayal gücü ile ne yaptığını tahmin edebilirsiniz ...

yanlış: conspy ttys ile çalışmıyor
Zibri

3

GNU ekranı IMO şimdiye kadarki en iyi övgüdür. GNU ekranı (veya tmux) yoksa, iş arkadaşınızı çalıştırın script -f.

Ve sonra onun ne yaptığını izleyebilirsiniz tail -fn +0 /path/to/typescript.


0

Bir Unix ekran terminalini paylaşmak için iş arkadaşınızın giriş ve çıkışlarını gerçek zamanlı olarak görebilmeniz için Unix screenkomutunu kullanın.

  1. Siz ve iş arkadaşınız ssh ile aynı Unix kullanıcısı olarak oturum açıyorsunuz
  2. Komutu yazıyorsunuz

    screen -d -m -S myscreenname

    screen -x myscreenname

    (Elbette myscreenname öğesini ekran adının olmasını istediğinizle değiştirin).

  3. İş arkadaşınız komutu yazıyor

    screen -x myscreenname

  4. Unix terminallerinizi paylaşmayı bitirmek için, herhangi bir kişi komutu yazabilir

    exit

Ekranın harika özelliği, Unix terminalinizden komutlar yazabilmeniz ve iş arkadaşınızın çıktısını ekranda görebilmesidir. Çift yönetim ve mentor genç Unix yöneticileri için mükemmel bir yoldur.


0

@ Jordanm'ın cevabını tamamlamak için ... ikiniz de aynı kullanıcı hesabını kullanıyorsanız, yani

echo $HOSTNAME
echo $USER 

sizin ve iş arkadaşınız için aynıdır, o zaman biraz eğlenebiliriz.

Bir terminalde çağrılan komutların başka bir terminalde anında kullanılabilmesi için görüntülemeyi etkinleştirebiliriz

historyTerminalinizde çağırırsanız önceki komutlarınızı görürsünüz. Varsayılan olarak, bash ~/.bash_history filevar olan dosyanın üzerine güncellenmiş bir sürümün üzerine yazarak her oturumun sonunda geçmişini a olarak yazar. Bu, birden fazla bash oturumuyla oturum açtıysanız, yalnızca son çıkan oturumun geçmişinin kaydedileceği anlamına gelir.

-------------------------------------------------- -----

Kendinizi ~/.bashrcdüzenleyin ve ekleyin

export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

nerede

history -a~/.bash_historyoturumun sonunda değil hemen dosyaya eklenir

history -c geçerli oturum geçmişini temizler

history -r~/.bash_historyeklediğimiz dosyayı oturum geçmişimize geri okur

Not: Parametre yürütülen komutları içerir önce istemi her yeni komuta. böylece command1 sadece tarihe kaydedilecektir zaman command2 yürütülürPROMPT_COMMAND

Ayrıca, geçmişi görüntülerken kolaylık sağlamak için her komutun yanında bir zaman damgası atmak isteyebilirsiniz. Tekrar, düzenleme ~/.bashrcve ekleme

export HISTTIMEFORMAT="%d/%m/%y %T "

Ayrıca birden fazla terminal kullanmak ve komut geçmişinizin mevcut olmasını istiyorsanız güzel bir kesmek :)

Daha fazla bilgi

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.