Próbowałem polecenia catz plikiem wykonywalnym:
cat /bin/ls
Teraz nie mogę odczytać żadnego słowa w tym terminalu (konsola Linux). Jak mogę to naprawić?
Próbowałem polecenia catz plikiem wykonywalnym:
cat /bin/ls
Teraz nie mogę odczytać żadnego słowa w tym terminalu (konsola Linux). Jak mogę to naprawić?
Odpowiedzi:
Często czasy, kiedy w terminalu Unix / Linux (bash) na przykład użyjesz polecenia morelub lessczy cataby wyświetlić plik. Gdy to zrobisz, a plik nie jest przeznaczony do przeglądania (np. /bin/ls), Otrzymasz wynik w następujący sposób:

Chodzi o to, że właśnie próbowałeś wyświetlić plik, który jest programem. Plik wykonywalny, który nie powinien być oglądany w standardowych przeglądarkach, jak wspomniałem powyżej.
Aby rozwiązać ten problem, możesz wykonać następujące czynności:
reseti naciśnij klawisz ReturnZwykle powinno to przywrócić terminal do normalnego trybu. Wspomnę jeszcze o jednej rzeczy, gdy wykonasz powyższe kroki, wpisując je na ślepo w swoim terminalu. Upewnij się więc, że wpisujesz go poprawnie.
Jak sugerowano w komentarzach @sendmoreinfo, możesz mieć więcej szczęścia, używając następujących poleceń, jeśli powyższe nie działa:
$ stty sane
$ tput rs1
Nawiasem mówiąc, jeśli natkniesz się na plik i nie jesteś pewien, czy to zepsuje twój terminal, możesz sprawdzić plik za pomocą polecenia, filektóre zgłosi typ pliku.
Na przykład z /bin/lstym plikiem pokazuje następujące dane wyjściowe:
$ 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
resetnie jest w 100% lekarstwem na śmiertelne szaleństwo. Spróbuj, stty sanea następnie tput rs1.
stty saneale nigdy tput.
resetpracował w moim przypadku
cleardziała również w łagodnych przypadkach.
Miałem okazję, gdy żadna ze zwykłych sztuczek, resetlub stty sane, nie działała (po przypadkowym wywołaniu printbajtraya pytona). Odniosłem sukces z metodą 2 wymienioną na tym pomocnym blogu .
Od tego czasu stworzyłem najbardziej pomocny alias:
alias fix='echo -e "\033c"'
echo -e "\033c"pomógł mi oczyścić sesję terminala SSH logowania znakowym zniekształcone, że miesza się po cat /etc/localtime.
Żadna wcześniejsza odpowiedź nie działała dla mnie. Ale wydaje się, że to załatwi sprawę w .bashrc dodaj:
alias fix='reset; stty sane; tput rs1; clear; echo -e "\033c"'
a następnie, gdy wystąpi problem, wpisz to (nawet jeśli prawdopodobnie go nie widzisz!)
(ctl-c, ctl-c, ctl-c)
fix
Ogromne podziękowania dla poprzednich zgłaszających. Na marginesie, powodem, dla którego twój terminal robi się nieporadny podczas wyświetlania plików wykonywalnych (lub magazynów kluczy itp.) Jest to, że pliki te często zawierają sekwencje binarne, które są kodami sterującymi. Kody kontrolne mogą wykonywać losowe czynności, takie jak przełączanie na zestaw znaków graficznych, ustawianie kolorów pierwszego planu i tła na to samo itp.
sane
tmuxużytkownicy mogą być w stanie wysłać wszystkie te polecenia do swojej powłoki, ale resetowanie nie zostanie podniesione do tmuxpanelu.
Utwórz nowe okno Tmux: Zazwyczaj zanotuj
ctrl-B c
tmux list-panes
numer panelu, który Twoim zdaniem jest zablokowany 0. Nazwijmy toPPP
Wybierz okno tmux, gdzie XXXznajduje się numer okna, który jest wykorkowany, niekoniecznie taki sam jak numer panelu.
ctrl-B XXX
tmux send-key -R -t PPP
Zobaczysz wtedy wszystkie polecenia w pozostałych odpowiedziach na to pytanie, które trafiły do twojej powłoki, ale nie działały! Może żaluzja tmux send-key -R -t PPPzadziała, ale nie mogę przetestować.
Mam prawie taki sam alias jak w poprzednim poście, z jedną małą zmianą ( tput resetzamiast rs1) i jedną dodaną komendą ( setterm -reset):
alias clr='echo -e "\033c" ; stty sane; setterm -reset; reset; tput reset; clear'
Oprócz innych odpowiedzi wskazujących, jak zresetować terminal, doszedłem do wniosku, że korupcji nie da się uniknąć, jeśli nie będzie odpowiednio strzeżona. Lepiej więc wyślę dane wyjściowe do prostego konwertera tekstowego cat -v:
docker logs myjenkinscontainer 2>&1 | cat -v
Przeglądanie i edycja plików binarnych wydaje się możliwe przy pomocy hexdump -Ci vi -R( :%!xxd -g1dla widoku szesnastkowego i :%!xxd -g1 -rdo zapisywania zmian szesnastkowych).
reset.