bash kabuk çıktı geçmişi dosya konumu


13

Bash kabuğu gerçek terminal oturumunu nerede saklar? Daha önce kullandığım komutların çıktısını okumak istiyorum. Google'ı bulabildiğim tek şey bir komutun çıktısının nasıl saklanacağı.

Çıktı ekranda görüntülendiğinden, yine de bir yerde saklanmalıdır. Benim sorum şu: nerede?

Yanıtlar:


11

Bash yalnızca yazdığınız komutların geçmişini saklar (yazarak alabilirsiniz history). Zaten sürece kaydırma geri ayarlamak çok yüksek sayıda, kaydırma arka ayarlanan değerden daha eski olan çıkışlarını görmek için hiçbir yolu yoktur. Ayrıca bu değerin çok yüksek bir değere ayarlanması, çizgiler bellekte saklandığından kaydırma işleminizin durgunlaşmasına neden olur .

Gelecekteki komutlarınızı ve çıktılarını saklamak için birkaç seçenek vardır:

kullanma screen

Girerek bir ekran oturumu başlatın screen. Eğer ekranında basın içine yerleştirilince Ctrl- a, o zaman :, o zaman girin log. Komutu screenlogbaşlattığınız dizindeki tüm G / Ç yakalanır screen.

kullanma script

Yazarak başlayabilirsiniz script. Tüm G / Ç'yi adlı bir dosyaya kaydedecek bir komut dosyası oturumu başlayacaktır typescript. scriptOturumdan Ctrl- d ile çıkabilir ve typescriptdosyadaki günlükleri görüntüleyebilirsiniz .

kullanma tee

tee kullanışlı bir araçtır. Bunun gibi bir şey yapabilirsiniz:

$ bash | tee log.txt

Bu, zaten çalıştırdığınızın içinde yeni bir bash kabuğu açacaktır. Bundan çıktığınızda exit, şu dosyadaki çıktıları görebilirsiniz:log.txt

Diğer yollar

Dustin Kirkland'ın bu yazıda önerdiği gibi , byobu da kullanabilirsiniz . Daha önce hiç kullanmamış olsam da , Shelr gibi terminal ekranlama araçları da bir seçenek gibi geliyor.


6

Bununla ilgili birçok soru var, ancak hepsi çıktının günlüğe kaydedilmediğini (sağda) varsayar.

Benim sorum şu: nerede?

Hiçbir yerde: Bash (ve bildiğim diğer kabuklar) çıktıları kaydedilmez.

Çıktı ekranda görüntülendiğinden, yine de bir yerde saklanmalıdır.

Öyle, ancak büyük olasılıkla düz metinde değil, diskte bile değil (bu gerçekten terminal emülatörüne bağlı olsa da): büyük olasılıkla ve en azından çoğu durumda terminal emülatörü tarafından tahsis edilen bir bellek segmentinde.

Ancak, en azından kabuk tarafından değil, bir dosyaya günlüğe kaydedilmediğinden eminim ve çıktıyı varsayılan olarak bir dosyaya kaydeden terminal öykünücülerini bilmiyorum.

Aslında bu, terminal çıkışının kaydedilmesinin imkansız olduğu anlamına gelmez: ilk önce, pek çoğunun farkında olmadığını düşündüğüm bir şeyden bahsedeceğim, çünkü Asla burada Ubuntu'ya sorun diyen birini görmedim: Konsole, bir dosyaya geri kaydırma (belki de böyle bir işlevsellik sağlayan diğer terminal emülatörleri vardır, Konsole sadece bildiğim tek şeydir), ancak bu Konsol'un kaydırma boyutu sınırı ile sınırlıdır.

Bu genellikle gerçekten yararlı değildir ve büyük olasılıkla tüm oturumun çıktısını bir dosyaya kaydetmek için "uygun" çözümlere bakmak isteyeceksiniz ( Bir terminal oturumundaki tüm giriş ve çıkışları nasıl kaydederim ? Ve Ron'un yanıtı ).


1

Komut dosyası olarak adlandırılan bir komut vardır, yüklü değilse o apt-get install scriptzaman bunu yapar.

Sonra terminalde sadece script yazın.

ve istediğinizi yapın, bitirdikten sonra exit yazın ve geçerli dizininizde tüm stdout ve stdin bilgilerini içeren bir dosya oluşturulur.

umarım sana yardımcı olur.



1

Bunun kabuğunuzla ( bash) ilgisi yoktur , kullandığınız terminal öykünücüsünün bir özelliği değildir. Terminalinizin "geri kaydırma arabelleğinde" saklanır. Tam olarak nerede depolandığına dair net bir açıklama bulamadım, ancak kişisel deneyim bana bunun bir yerde saklandığını gösterdi /tmp.

Yukarıda bağlantılı sorunun cevabının da belirttiği gibi, büyük olasılıkla isimsiz bir dosyada saklanmaktadır. Ne demek istediğimi görmek için, metin düzenleyiciyle yeni bir dosya açın:

gedit newfile

Dosyaya bir metin satırı yazın ve kaydedin. Şimdi, bu dosya hala açıkken bir terminal açın ve silin:

rm newfile

Dosya hala açık olduğundan gedit, yazmaya devam edebilirsiniz. Dosyanın silinmiş olmasına rağmen, birkaç gigabayt veri bile yazabilirsiniz. Bunun nedeni, bir dosyanın silinmesinin kendi inode'una işaret eden bağlantıyı kaldırmasıdır . Onun ise dosya tanıtıcı başka bir program tarafından açık tutulan veriler, kendisine yazılı artık dosya sisteminde dosya tanımlayıcı karşılık gelen bir gerçek bağlantı (dosyası) olduğu gerçeğini despitre edilebilir.

Tüm bunlar, terminalinizin geçmişinin, muhtemelen silinmiş bir dosyada bir yerde böyle bir numara kullanılarak kaydedildiğini söylemek içindir /tmp. Muhtemelen aslında istediğiniz şey, terminal emülatörünüzün geri kaydırma arabellek boyutunu artırmaktır, böylece yukarı kaydırıp görebilirsiniz. Bunun nasıl yapılacağı, kullandığınız terminal öykünücüsüne bağlıdır. Çoğu, bunu yapmanıza izin veren bir komut satırı anahtarına sahiptir ve birçoğunun da bunu ayarlamak için bir GUI yolu vardır. Örneğin, gnome-terminal(Ubuntu'da varsayılan olarak) Düzenle -> Tercihler -> Profiller --- profilinize tıklayın -> Düzenle -> Kaydırma -> Kaydırma işlemini NNN ile sınırlandır:

gnome terminali seçenekleri ekranı


İlginç bilgiler. Terminalde daha uzun bir geçmişi incelemek istediğim şey değil: Terminale cout'a erişmek istiyorum yani EG PYTHON'DAN yazılmış her şey
Daniel Böckenhoff

@ DanielBöckenhoff o zaman muhtemelen scriptkabul edilen cevapta tarif edildiği gibi istiyorum .
terdon

Elbette. Kabul ettim :)
Daniel Böckenhoff

-2

Terminal oturumu .bash_historydosyada saklanır . Bunu terminalinize girin echo $HISTFILE, bu size .bash_historydosya yolunu verecektir .


2
Bu, komutların çıktısını değil, yalnızca daha önce çalıştırılan komutları verir .
Ron
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.