Próbowałem polecenia cat
z 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 cat
z 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 more
lub less
czy cat
aby 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:
reset
i 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, file
które zgłosi typ pliku.
Na przykład z /bin/ls
tym 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
reset
nie jest w 100% lekarstwem na śmiertelne szaleństwo. Spróbuj, stty sane
a następnie tput rs1
.
stty sane
ale nigdy tput
.
reset
pracował w moim przypadku
clear
działa również w łagodnych przypadkach.
Miałem okazję, gdy żadna ze zwykłych sztuczek, reset
lub stty sane
, nie działała (po przypadkowym wywołaniu print
bajtraya 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
tmux
użytkownicy mogą być w stanie wysłać wszystkie te polecenia do swojej powłoki, ale resetowanie nie zostanie podniesione do tmux
panelu.
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 XXX
znajduje 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 PPP
zadziała, ale nie mogę przetestować.
Mam prawie taki sam alias jak w poprzednim poście, z jedną małą zmianą ( tput reset
zamiast 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 -C
i vi -R
( :%!xxd -g1
dla widoku szesnastkowego i :%!xxd -g1 -r
do zapisywania zmian szesnastkowych).
reset
.