İkili dosya görüntüledikten sonra terminali düzelt


122

catÇalıştırılabilir bir dosyayla komutu denedim :

cat /bin/ls

Şimdi bu terminalde (Linux konsolu) herhangi bir kelime okuyamıyorum. Nasıl düzeltebilirim?


4
Doğru anlarsam, belki terminalin bozulur; yazmayı dene reset.
Patrice Levesque


Aslında cevabın burada daha iyi olduğunu düşünüyorum, yani diğer yoldan dup olarak daha iyi işaretleyin
ilkkachu

Yanıtlar:


165

Örneğin, bir Unix / Linux terminalinde (Bash) olduğu zamanlar çoğu zaman komutları kullanacaksınız moreya lessda catbir dosyayı görüntüleyeceksiniz. Bunu yaptığınızda ve dosyanın görüntülenmesi amaçlanmadığında (örneğin /bin/ls) aşağıdaki gibi çıktı alırsınız:

                ikili çıkış ss

Burada olan şey, program olan bir dosyayı görüntülemeye çalıştığınız. Yukarıda belirttiğim gibi standart izleyiciler ile görülmesi gerekmeyen bir çalıştırılabilir dosya.

yöntem # 1 - sıfırla

Bu sorunu çözmek için aşağıdakileri yapabilirsiniz:

  1. Control + C tuşlarına birkaç kez basın ( Ctrl+ C)
  2. Komutu yazın resetve return tuşuna basın

Bu genellikle terminalinizi daha normal bir moda geri getirmelidir. Bir adım daha bahsedeceğim, yukarıdaki adımları uyguladığınızda, terminalinize kör yazarak uygulayacaksınız. Bu yüzden doğru yazdığınızdan emin olun.

yöntem 2 - stty aklı başında

@Sendmoreinfo tarafından yapılan yorumlarda önerildiği gibi, yukarıdakiler işe yaramazsa, aşağıdaki komutları kullanarak daha iyi şanslar elde edebilirsiniz:

$ stty sane
$ tput rs1

dosya türünü belirleme

Bu arada, bir dosyaya rastlarsanız ve terminalinizi bozup bozmayacağından emin değilseniz, dosyanın filetipini geri rapor edecek komutu kullanarak dosyayı inceleyebilirsiniz .

Örneğin, /bin/lsbu dosyayla şu çıktı gösterilir:

$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped

15
resetterminal delilik için% 100 tedavi değildir. stty saneTakip etmeyi dene tput rs1.
sendmoreinfo

@sendmoreinfo - teşekkürler ben önerinize cevabınızı ekledik. Kullandım stty saneama asla tput.
slm

1
Aslında bunu daha fazla araştırmam gerekiyor. sıfırlama rs1 string göndermek gerekiyordu. İyi bir test (en azından xterm için) imleci görünmez yapmak ve sıfırlamanın geri getirip getirmediğine bakmaktır.
sendmoreinfo

4
resetbenim durumumda çalıştı
code_monk 14.06

1
clearhafif vakalarda da çalışır.
Navin

36

Alışılmadık numaraların hiçbirinin resetya da stty saneişe yaramadığı bir zaman geçirdim (yanlışlıkla printpython bytearray'i çağırdıktan sonra ). Bu faydalı blogda listelenen yöntem 2 ile başarı elde ettim .

O zamandan beri yararlı bir takma ad oluşturdum:

alias fix='echo -e "\033c"'

2
Bunun eski olduğunu biliyorum ama bu benim için işe yarayan tek cevap. Thanks
jredd

Bu echo -e "\033c"bana bir sonra karışık bir karakter bozuk SSH giriş terminali oturum temizlemek için yardımcı oldu cat /etc/localtime.
Pro Yedekleme

Bu, diğerleri olmadığı zaman OpenBSD ile çalıştı.
DHW

1
Ekran (1) ile daha ileri deneyler, tüm oturumların (-D) ayrılmasının zor olduğunu buldu ve ardından sıfırlama komutlarını altta yatan terminal ekranına yayınlayarak sorunu çözebildi. terminalde aynı ikili verileri yeniden görüntüleyebilecek bozuk pencere adlarını yeniden adlandırması gerekebilir (ve ardından yeniden sıfırlayın).
matematik

1
Terminal aracılığıyla büyüklüğüm (LINES), vii kullandıktan sonra kabaca ikiye bölündü ve SOL üzerinden uzak bir linux sunucusunun konsoluna bağlandı. Uzak oturumda LINES = 24 varken yerel MAC oturumumda LINES = 51 vardı. echo -e "\ 033c" benim için çalıştı, ancak denediğim diğer düzeltmelerin hiçbiri yapmadı ('stty sane', tput rs1, tput sgr0, reset).
Mark

7

Önceden bir tek cevap benim için işe yaramadı. Ama bu .bashrc ekle de hile yapmak gibiydi:

alias fix='reset; stty sane; tput rs1; clear; echo -e "\033c"'

ve sonra sorun ortaya çıktığında şunu yazın (muhtemelen göremiyor olsanız bile!)

(ctl-c, ctl-c, ctl-c)
fix

Önceki göndericilere çok teşekkürler. Ayrıca, bir yan not olarak, bu yürütülebilir dosyaları (veya anahtar depolarını, vb.) Gösterirken terminalinizin riskli kalmasının nedeni, bu dosyaların genellikle kontrol kodları olan ikili dizileri içermesidir. Kontrol kodları, bir grafik karakter setine geçiş yapmak, ön plan ve arka plan renklerini aynı şeye ayarlamak, vb. Gibi rasgele şeyler yapabilir.


Aynısı oldu. Hiçbir şey benim için işe yaramadı, sadece bu açılan ...
TrueY

1
Ben çağırdımsane
qodeninja

4

tmuxkullanıcılar bu komutların hepsini kabuğuna gönderebilir, ancak sıfırlama tmuxbölmeye yükseltilmez .

Yeni tmux penceresi oluşturun: ctrl-B c tmux list-panes Genelde boş olduğunu düşündüğünüz bölme numarasını not edin 0. Haydi arayalımPPP

Bölünmüş pencere XXXnumarası olan tmux penceresini seçin, mutlaka bölme numarasıyla aynı değil. ctrl-B XXX tmux send-key -R -t PPP

Daha sonra, bu soruyu cevabınıza çeken, ancak işe yaramayan diğer soruların tüm komutlarını göreceksiniz! Belki bir kör tmux send-key -R -t PPPişe yarar , ama test edemiyorum.


3

Neredeyse bir önceki yazı ile aynı takma isme sahibim, küçük bir değişiklik ( tput resetbunun yerine rs1) ve bir de komut ( setterm -reset):

alias clr='echo -e "\033c" ; stty sane; setterm -reset; reset; tput reset; clear'

1

Yukarıdaki hiçbir şey bana yardım etmedi. Ancak Jack Wasey tmux'dan bahsetti, ben de kaçtım tmux, tekrar çıktım ve her şey normale döndü.


0

Terminalin nasıl sıfırlanacağını öneren diğer cevaplara ek olarak, düzgün bir şekilde korunmadıkça yolsuzluğun önlenemeyeceğini düşündüm. Bu yüzden çıktıyı basit bir metin dostu dönüştürücüye göndermeliyim cat -v:

docker logs myjenkinscontainer 2>&1 | cat -v

İkili dosyaların görüntülenmesi ve düzenlenmesi hexdump -Cve vi -R( :%!xxd -g1altıgen görünüm ve :%!xxd -g1 -raltıgen değişiklikleri kaydetmek için) ile mümkündür.

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.