Sửa lỗi thiết bị đầu cuối sau khi hiển thị một tệp nhị phân


122

Tôi đã thử lệnh catvới một tệp thực thi:

cat /bin/ls

Bây giờ tôi không thể đọc bất kỳ từ nào trong thiết bị đầu cuối này (bảng điều khiển Linux). Làm thế nào tôi có thể sửa chữa nó?


4
Nếu tôi hiểu chính xác, có thể thiết bị đầu cuối của bạn bị vặn; thử gõ reset.
Patrice Levesque


Trên thực tế tôi nghĩ rằng câu trả lời ở đây là tốt hơn, vì vậy đánh dấu tốt hơn là nhân đôi theo cách khác
ilkkachu 17/03/2017

Câu trả lời:


165

Thông thường khi trong một thiết bị đầu cuối Unix / Linux (Bash) ví dụ bạn sẽ sử dụng các lệnh morehoặc lesshoặc catđể xem một tập tin. Khi bạn làm điều này và tập tin không có nghĩa là được xem (chẳng hạn như /bin/ls), bạn sẽ nhận được đầu ra như thế này:

                ss của đầu ra nhị phân

Điều đang diễn ra ở đây là bạn vừa cố gắng xem một tập tin là một chương trình. Một tệp thực thi không có nghĩa là được xem với người xem tiêu chuẩn như tôi đã đề cập ở trên.

phương pháp số 1 - thiết lập lại

Để khắc phục vấn đề này, bạn có thể làm như sau:

  1. Nhấn Control + C một vài lần ( Ctrl+ C)
  2. Nhập lệnh resetvà nhấn return

Điều này thường sẽ đưa thiết bị đầu cuối của bạn trở lại một chế độ bình thường hơn. Tôi sẽ đề cập đến một điều nữa, khi bạn thực hiện các bước trên, bạn sẽ bằng cách gõ chúng vào thiết bị đầu cuối của bạn. Vì vậy, chỉ cần chắc chắn rằng bạn đang gõ nó chính xác.

phương pháp # 2 - stty sane

Như được đề xuất trong các nhận xét của @sendmoreinfo, bạn có thể gặp may mắn hơn khi sử dụng các lệnh sau thay vào đó nếu cách trên không hoạt động:

$ stty sane
$ tput rs1

xác định loại tệp

Ngẫu nhiên, nếu bạn gặp một tệp và không chắc chắn liệu nó có làm hỏng thiết bị đầu cuối của bạn không, bạn có thể kiểm tra tệp bằng lệnh filesẽ báo cáo lại loại tệp đó.

Ví dụ: với /bin/lstệp đó hiển thị đầu ra sau:

$ 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
resetkhông phải là một phương pháp chữa trị 100% cho chứng điên cuối cùng. Hãy thử stty sanetheo sau tput rs1.
sendmoreinfo

@sendmoreinfo - cảm ơn tôi đã thêm đề xuất của bạn vào câu trả lời. Tôi đã sử dụng stty sanenhưng không bao giờ tput.
slm

1
Thật ra, tôi cần nghiên cứu thêm về điều này. thiết lập lại được cho là để gửi chuỗi rs1. Một thử nghiệm tốt (ít nhất là đối với xterm) là làm cho con trỏ ẩn đi và xem liệu thiết lập lại có đưa nó trở lại không.
sendmoreinfo

4
resetđã làm việc trong trường hợp của tôi
code_monk

1
clearcũng hoạt động cho các trường hợp nhẹ.
Navin

36

Tôi đã có một dịp mà không có bất kỳ thủ thuật thông thường nào, resethoặc stty sane, đã hoạt động (sau khi vô tình gọi printmột con trăn bằng con trăn). Tôi đã thành công với phương pháp 2 được liệt kê trên blog hữu ích này .

Kể từ đó tôi đã tạo ra một bí danh hữu ích nhất:

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

2
Tôi biết điều này là cũ, nhưng đây là câu trả lời duy nhất ở trên đã làm việc cho tôi! Cảm ơn
jredd

Điều này echo -e "\033c"giúp tôi dọn sạch phiên cuối thiết bị đăng nhập SSH bị cắt xén nhân vật được trộn lẫn sau một cat /etc/localtime.
Pro Backup

Điều này đã làm việc với OpenBSD, khi tất cả những người khác thì không.
DHW

1
thử nghiệm thêm với màn hình (1) đã tìm thấy lực lượng của tất cả các phiên (-D) sau đó ban hành các lệnh đặt lại cho màn hình đầu cuối bên dưới đã được chạy, có thể khắc phục sự cố. cũng có thể cần phải đổi tên các tên cửa sổ bị hỏng có thể hiển thị lại cùng một dữ liệu nhị phân tại thiết bị đầu cuối khiến nó bị hỏng (và sau đó thiết lập lại một lần nữa).
toán

1
Kích thước thiết bị đầu cuối của tôi (LINES) đã bị cắt giảm khoảng một nửa sau khi sử dụng vi trong khi kết nối với bàn điều khiển của máy chủ linux từ xa thông qua SOL. Phiên từ xa có LINES = 24 trong khi phiên MAC cục bộ của tôi có LINES = 51. echo -e "\ 033c" hoạt động với tôi nhưng không có cách khắc phục nào khác mà tôi đã thử ('stty sane', tput rs1, tput sgr0, reset).
Đánh dấu

7

Không có câu trả lời trước làm việc cho tôi. Nhưng điều này dường như thực hiện thủ thuật trong .bashrc thêm:

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

và sau đó khi sự cố xảy ra, hãy nhập loại này (mặc dù bạn có thể không nhìn thấy nó!)

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

Rất cám ơn những người nộp trước. Ngoài ra, như một lưu ý phụ, lý do khiến thiết bị đầu cuối của bạn trở nên khó khăn khi hiển thị các tệp thực thi đó (hoặc kho khóa, v.v.) là vì các tệp đó thường chứa các chuỗi nhị phân là mã kiểm soát. Các mã điều khiển có thể thực hiện những điều ngẫu nhiên như chuyển sang bộ ký tự đồ họa, đặt màu nền trước và màu nền cho cùng một thứ, v.v.


Điều tương tự đã xảy ra. Không có gì làm việc cho tôi, chỉ có combo này ...
TrueY

1
Tôi gọi cho tôisane
qodeninja

4

tmuxNgười dùng có thể gửi tất cả các lệnh này đến trình bao của mình, nhưng việc đặt lại không được nâng lên tmuxkhung.

Tạo cửa sổ tmux mới: ctrl-B c tmux list-panes Thông thường, hãy lưu ý số khung bạn nghĩ là có nhiều nút 0. Hãy gọi nó làPPP

Chọn cửa sổ tmux, trong đó XXXsố cửa sổ được borked, không nhất thiết phải giống với số khung. ctrl-B XXX tmux send-key -R -t PPP

Sau đó, bạn sẽ thấy tất cả các lệnh trong các câu trả lời khác cho câu hỏi này đã đưa nó vào vỏ của bạn, nhưng không hoạt động! Có lẽ một người mù tmux send-key -R -t PPPsẽ làm việc, nhưng tôi không thể kiểm tra.


3

Tôi có gần như cùng một bí danh như bài trước, với một thay đổi nhỏ ( tput resetthay vì rs1) và một lệnh được thêm vào ( setterm -reset):

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

1

Không có gì ở trên giúp tôi. Tuy nhiên, Jack Wasey đã đề cập đến tmux, vì vậy tôi chỉ chạy tmux, thoát ra một lần nữa và mọi thứ trở lại bình thường.


0

Ngoài các câu trả lời khác tư vấn cách thiết lập lại thiết bị đầu cuối, tôi cho rằng tham nhũng không thể tránh được trừ khi được bảo vệ đúng cách. Vì vậy, tốt hơn tôi nên gửi đầu ra cho một trình chuyển đổi thân thiện với văn bản đơn giản cat -v:

docker logs myjenkinscontainer 2>&1 | cat -v

Xem và chỉnh sửa các tệp nhị phân dường như có thể với hexdump -Cvi -R( :%!xxd -g1cho chế độ xem hex và :%!xxd -g1 -rđể lưu các thay đổi hex).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.