बाइनरी फ़ाइल प्रदर्शित करने के बाद टर्मिनल को ठीक करें


122

मैंने catएक निष्पादन योग्य फ़ाइल के साथ कमांड की कोशिश की :

cat /bin/ls

अब मैं इस टर्मिनल (लिनक्स कंसोल) में कोई भी शब्द नहीं पढ़ सकता। मेरे द्वारा यह कैसे किया जा सकता है?


4
अगर मैं सही ढंग से समझता हूं, तो शायद आपका टर्मिनल खराब हो गया है; टाइप करने का प्रयास करें reset
पैट्रिस लेवेस्क


वास्तव में मुझे लगता है कि इसका उत्तर यहां बेहतर है, इसलिए बेहतर तरीका है कि दूसरे तरीके से
नकल करें

जवाबों:


165

अक्सर जब उदाहरण के लिए एक यूनिक्स / लिनक्स टर्मिनल (बैश) में आप आदेशों का उपयोग करेंगे moreया lessया catएक फ़ाइल को देखने के। जब आप ऐसा करते हैं और फ़ाइल को देखा नहीं जाता है (जैसे कि /bin/ls) तो आपको इस तरह आउटपुट मिलेगा:

                बाइनरी आउटपुट के एस.एस.

यहाँ क्या हो रहा है कि आपने बस एक फ़ाइल देखने की कोशिश की है जो एक कार्यक्रम है। एक निष्पादन योग्य जो मानक दर्शकों के साथ देखने के लिए नहीं है जैसा कि मैंने ऊपर उल्लेख किया है।

विधि # 1 - रीसेट

इस समस्या को ठीक करने के लिए आप निम्न कार्य कर सकते हैं:

  1. नियंत्रण मारो + C दो बार ( Ctrl+ C)
  2. कमांड टाइप करें resetऔर रिटर्न हिट करें

यह आमतौर पर आपके टर्मिनल को अधिक सामान्य मोड में वापस रखना चाहिए। मैं एक और बात का उल्लेख करूंगा, जब आप ऊपर दिए गए चरणों को करते हैं, तो आप उन्हें अपने टर्मिनल में अंधा टाइप करके देखेंगे। तो बस सुनिश्चित करें कि आप इसे सही तरीके से टाइप कर रहे हैं।

विधि # 2 - स्टेंट साने

जैसा कि @sendmoreinfo द्वारा टिप्पणियों में सुझाव दिया गया है कि ऊपर दिए गए काम नहीं करने के बजाय आपको निम्नलिखित आदेशों का उपयोग करने के लिए बेहतर भाग्य प्राप्त हो सकता है:

$ stty sane
$ tput rs1

फ़ाइलों का प्रकार निर्धारित करना

संयोग से, यदि आप एक फ़ाइल भर में आते हैं और यह सुनिश्चित नहीं करते हैं कि यह आपके टर्मिनल को गड़बड़ाने वाला है तो आप कमांड का उपयोग करके फ़ाइल का निरीक्षण कर सकते हैं fileजो उस प्रकार के फ़ाइल को वापस रिपोर्ट करेगा।

उदाहरण के लिए, /bin/lsउस फ़ाइल में निम्न आउटपुट दिखाया गया है:

$ 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
resetटर्मिनल पागलपन के लिए एक 100% इलाज नहीं है। stty saneइसके बाद प्रयास करें tput rs1
sendmoreinfo

@sendmoreinfo - धन्यवाद मैंने आपका सुझाव उत्तर में जोड़ दिया है। मैंने इस्तेमाल किया था stty saneलेकिन कभी नहीं tput
स्लम

1
वास्तव में, मुझे इस पर और अधिक शोध करने की आवश्यकता है। रीसेट को rs1 स्ट्रिंग भेजने के लिए माना जाता है। एक अच्छा परीक्षण (xterm के लिए, कम से कम) कर्सर को अदृश्य बनाने के लिए है और देखें कि क्या रीसेट इसे वापस लाता है।
sendmoreinfo

4
resetमेरे मामले में काम किया
code_monk

1
clearहल्के मामलों के लिए भी काम करता है।
नवीं

36

मेरे पास एक ऐसा अवसर है जहां कोई भी सामान्य चाल नहीं है, resetया stty sane, काम किया (गलती printसे एक अजगर बाइटरेयर पर कॉल करने के बाद )। मुझे इस सहायक ब्लॉग पर सूचीबद्ध विधि 2 के साथ सफलता मिली ।

मैंने तब से सबसे अधिक मददगार उपनाम बनाया है:

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

2
मुझे पता है कि यह पुराना है, लेकिन यह केवल एक ही उत्तर है जो मेरे लिए काम करता है! धन्यवाद
jredd

इससे echo -e "\033c"मुझे चरित्र-आधारित SSH लॉगिन टर्मिनल सत्र को साफ करने में मदद मिली जो कि a के बाद मिलाया गया था cat /etc/localtime
प्रो बैकअप

यह OpenBSD के साथ काम करता था, जब अन्य सभी नहीं करते थे।
DHW

1
स्क्रीन के साथ आगे प्रयोग (1) में पाया गया कि सभी सत्रों (-D) के बल को हटाने के बाद अंतर्निहित टर्मिनल स्क्रीन पर रीसेट कमांड जारी किया गया था, जो समस्या को ठीक कर सकता है। दूषित विंडो नामों को भी नाम बदलने की आवश्यकता हो सकती है जो टर्मिनल पर उसी बाइनरी डेटा को फिर से प्रदर्शित कर सकते हैं जो इसे भ्रष्ट बनाता है (और फिर अभी तक रीसेट नहीं होता है)।
गणित

1
मेरे टर्मिनल आकार (LINES) वीई के उपयोग के बाद लगभग आधे में कट गया था, जबकि एसओएल के माध्यम से एक दूरस्थ लिनक्स होस्ट के कंसोल से जुड़ा हुआ था। दूरस्थ सत्र में LINES = 24 था जबकि मेरे स्थानीय MAC सत्र में LINES = 51 था। echo -e "\ 033c" ने मेरे लिए काम किया लेकिन मेरे द्वारा किए गए अन्य सुधारों में से कोई भी नहीं किया ('स्टेंट साने', tput rs1, tput sgr0, रीसेट)।
मार्क

7

मेरे लिए किसी एक पूर्व उत्तर ने काम नहीं किया। लेकिन ऐसा लगता है कि इस चाल में .bashrc add करना है:

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

और तब जब समस्या इस प्रकार की होती है (भले ही आप शायद इसे नहीं देख सकते हैं!)

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

पूर्व प्रस्तुतकर्ताओं के लिए बहुत धन्यवाद। साथ ही, साइड नोट के रूप में, उन निष्पादन योग्य फ़ाइलों (या कीस्टोर्स, इत्यादि) को दिखाते समय आपके टर्मिनल की जीत हो जाती है, इसका कारण यह है कि उन फाइलों में अक्सर बाइनरी अनुक्रम होते हैं जो नियंत्रण कोड होते हैं। नियंत्रण कोड यादृच्छिक चीजें कर सकते हैं जैसे कि एक ग्राफिक्स कैरेक्टर सेट पर स्विच, अग्रभूमि और एक ही चीज़ के लिए पृष्ठभूमि रंग, आदि।


वही हुआ। मेरे लिए कुछ भी काम नहीं किया, बस इस कॉम्बो ...
ट्रू

1
मैंने अपनेsane
कोडीनिन्जा

4

tmuxउपयोगकर्ता इन सभी आदेशों को उनके शेल में भेजने में सक्षम हो सकते हैं, लेकिन रीसेट करना tmuxफलक तक ऊंचा नहीं होता है ।

नई tmux विंडो बनाएं: ctrl-B c tmux list-panes उस पेन नंबर को नोट करें जो आपको लगता है कि बोर हो गया है 0। चलो बुलावा आयाPPP

Tmux विंडो का चयन करें, जहां XXXविंडो नंबर है, जो बोर्कड है, जरूरी नहीं कि पेन नंबर भी हो। ctrl-B XXX tmux send-key -R -t PPP

फिर आप इस प्रश्न के अन्य उत्तर में सभी कमांड देखेंगे जिसने इसे आपके शेल में बनाया है, लेकिन काम नहीं किया! शायद एक अंधा tmux send-key -R -t PPPकाम करेगा, लेकिन मैं परीक्षण नहीं कर सकता।


3

मेरे पास पिछले पोस्ट के समान लगभग एक ही उपनाम है, जिसमें एक छोटा परिवर्तन ( tput resetइसके बजाय rs1) और एक जोड़ा कमांड ( setterm -reset) है:

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

1

ऊपर वाले ने मेरी मदद नहीं की। हालांकि, जैक वासे ने tmux का उल्लेख किया, इसलिए मैं बस भाग गया tmux, फिर से बाहर निकला और सब कुछ वापस सामान्य हो गया।


0

टर्मिनल को रीसेट करने के तरीके की सलाह देने वाले अन्य उत्तरों के अलावा, मुझे लगा कि भ्रष्टाचार से तब तक बचा नहीं जा सकता जब तक कि ठीक से पहरा न दिया जाए। इसलिए मैं बेहतर आउटपुट को एक साधारण टेक्स्ट-फ्रेंडली कन्वर्टर के रूप में भेजता हूं cat -v:

docker logs myjenkinscontainer 2>&1 | cat -v

बाइनरी फ़ाइलों को देखना और संपादित करना संभव है ( hexdump -Cऔर हेक्स दृश्य के लिए और हेक्स परिवर्तनों को बचाने के लिए)।vi -R:%!xxd -g1:%!xxd -g1 -r

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.