バイナリファイルを表示した後のターミナルを修正


122

私はcat実行可能ファイルでコマンドを試しました:

cat /bin/ls

今、私はこの端末(Linuxコンソール)で単語を読むことができません。どうすれば修正できますか?


4
私が正しく理解していれば、おそらくあなたの端末はねじ込まれています。入力してみてくださいreset
パトリスレベスク


実際に私の答えは、他の方法DUPほど良くマーク優れている、ここだと思う
ilkkachu

回答:


165

たとえば、Unix / Linuxターミナル(Bash)でコマンドを使用しmoreたり、ファイルを表示しlessたりcatすることがよくあります。これを行うと、ファイルを表示することを意図していない/bin/ls場合(など)、次のような出力が得られます。

                バイナリ出力のSS

ここで起こっているのは、プログラムであるファイルを表示しようとしただけです。上で述べたように、標準のビューアで表示することを意図していない実行可能ファイル。

方法#1-リセット

この問題を解決するには、次を実行できます。

  1. Control + Cを数回押す(Ctrl+ C
  2. コマンドresetを入力してReturnキーを押す

これにより、通常、端末はより通常のモードに戻ります。上記の手順を実行するときに、ターミナルにブラインドで入力することにより、もう1つ言及します。したがって、正しく入力していることを確認してください。

方法#2-stty sane

@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
slm

1
実際、これについてさらに調査する必要があります。リセットはrs1文字列を送信することになっています。良いテスト(少なくともxtermの場合)は、カーソルを非表示にし、リセットによって元に戻るかどうかを確認することです。
sendmoreinfo

4
reset私の場合
-code_monk

1
clear軽度の場合にも機能します。
ナビン

36

私は通常のトリック、resetまたはのいずれも機能しなかった機会がありましたstty sane(偶然printPythonのバイトアレイを呼び出した後)。この役立つブログに記載されている方法2で成功しました。

それ以来、最も役立つエイリアスを作成しました。

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

2
私はこれが古いことを知っていますが、これは私のために働いた上記の唯一の答えです!ありがとう
-jredd

これによりecho -e "\033c"、の後に混乱した文字化けしたSSHログインターミナルセッションをクリーンアップできましたcat /etc/localtime
プロバックアップ

これはOpenBSDで機能しましたが、他のすべてでは機能しませんでした。
DHW

1
screen(1)でさらに実験を行ったところ、すべてのセッションの強制的な切り離しが検出され(-D)、実行された端末画面にリセットコマンドを実行すると、問題を修正できました。また、端末で同じバイナリデータを再表示して破損するウィンドウ名を変更する必要がある場合があります(その後、再度リセットします)。
数学

1
SOLを介してリモートLinuxホストのコンソールに接続しているときにviを使用した後、私の端末サイズ(LINES)は約半分に削減されました。リモートセッションにはLINES = 24がありましたが、ローカルMACセッションにはLINES = 51がありました。echo -e "\ 033c"は機能しましたが、他に試した修正はありませんでした( 'stty sane'、tput rs1、tput sgr0、reset)。
マーク

7

事前に答えてくれるものは一つもありませんでした。しかし、これは.bashrc addのトリックを行うように見えました:

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

そして、問題が発生したら、これを入力します(おそらく表示できませんが!)

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

以前の提出者に感謝します。また、サイドノートとして、これらの実行可能ファイル(またはキーストアなど)を表示するときに端末が不安定になる理由は、これらのファイルに制御コードであるバイナリシーケンスが含まれていることが多いためです。制御コードは、グラフィック文字セットに切り替える、前景色と背景色を同じものに設定するなど、ランダムなことを行う場合があります。


同じことが起こりました。私にとっては何の役にも
立ち

1
私はsane
qodeninja

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

私は以前の投稿とほぼ同じエイリアスを持ち、1つの小さな変更(のtput reset代わりにrs1)と1つのコマンド(setterm -reset)を追加しました:

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

1

上記の何も私を助けませんでした。しかし、Jack Waseyがtmuxに言及したので、私は走りtmux、再び終了し、すべてが正常に戻りました。


0

端末をリセットする方法をアドバイスする他の回答に加えて、適切に保護されない限り、破損は回避できないと考えました。そのため、出力を単純なテキストフレンドリーコンバーターに送信する方が良いですcat -v

docker logs myjenkinscontainer 2>&1 | cat -v

バイナリファイルの表示と編集はhexdump -Candで可能に思われますvi -R:%!xxd -g116進表示と:%!xxd -g1 -r16進変更の保存)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.