Kiedy loguję się przy użyciu SSH, widzę tylko ...
-bash: /usr/bin/id: cannot execute binary file
-bash: [: : integer expression expected
Nie mogłem tu nic zrobić. Polecenia takie jak halt
, poweroff
, reboot
powróci command not found
.
Jak mogę to naprawić? Używam Debian Squeeze Linux
PATH
jest zmienną środowiskową, która zawiera listę folderów, które powłoka szuka programów.ls
na przykład zwykle odnosi się do/bin/ls
, a twoja powłoka znajduje go, przeglądając foldery wymienionePATH
jeden po drugim, aż go znajdzie, lub jeśli nie znajdzie go w żadnym z nich, poddaje się. Przypuszczam, że lepszym punktem wyjścia byłoby, z czego jest wynikecho $PATH
? (edycja:export
polecenie jest sposobem na zdefiniowanie zmiennej środowiskowej w bash.)export PATH=/bin:/user/bin:/sbin:/usr/sbin
. To ciche polecenie.Odpowiedzi:
Zwykle ten komunikat o błędzie oznacza, że Linux nie rozpoznaje pliku jako skryptu powłoki ani pliku wykonywalnego.
Zazwyczaj przyczyną jest uruchomienie pliku wykonywalnego na niewłaściwej architekturze - jeśli spróbujesz uruchomić pliki wykonywalne x86 na procesorze ARM, pojawia się ten komunikat.
Czy
/usr/bin/id
nadpisywane, ewentualnie?źródło
Spróbuj uruchomić go, używając ./executablefilename zamiast sh pliku wykonywalnego sh. W końcu to nie jest skrypt powłoki.
źródło
./kiwix-serve
Problemem jest uruchomienie pliku binarnego dla innej architektury procesora. Możesz użyć objdump (z binutils), aby sprawdzić architekturę plików binarnych. Możesz użyć uname, aby sprawdzić architekturę komputera.
np. napotkałem ten błąd „nie można uruchomić pliku binarnego” podczas instalowania FF.Communicator - wtyczki Firefox dla Chrome (dzięki czemu mogę uruchamiać strony korzystające z apletów Java).
uname pokazuje, że mój komputer to 32-bitowy i686
$ ./FF.Communicator bash: ./FF.Communicator: nie można wykonać pliku binarnego $ uname -mpio i686 i686 i386 GNU / Linux $ objdump -a ./FF.Communicator ./FF.Communicator: format pliku elf64-x86-64 ./FF.Communicator
objdump na działającym pliku binarnym na moim komputerze pokazuje, że jest to 32-bitowy elf32-i386
$ objdump -a / bin / ls / bin / ls: format pliku elf32-i386
Za pomocą tych narzędzi możesz sprawdzić architektury maszyn i plików binarnych - nie tylko architektury Intel, ale dowolnego procesora.
Użytkownicy systemu Mac OSX mogą uzyskać informacje o architekturze określonego pliku za pomocą polecenia „file”:
źródło
Zgaduję tutaj trochę dzikich przypuszczeń, ale wygląda na to, że dzieje się tak:
bash
uruchomienie~/.profile
lub~/.bashrc
skonfigurowanie środowiska dla ciebie (jest to normalne)./bin/id
aby uzyskać identyfikator użytkownika, co kończy się niepowodzeniem, powodując błąd wyrażenia liczb całkowitych i kończąc skrypt, zanim będzie mógł go skonfigurować$PATH
.$PATH
nie jest ustawiony, bash może uruchamiać polecenia tylko z pełną ścieżką.Użyj,
export PATH=/bin:/usr/bin:/sbin:/usr/sbin
aby rozwiązać$PATH
problem, dopóki nie możesz naprawić głównej przyczyny niepowodzenia / bin / id.źródło
plik binarny składa się z instrukcji komputera, które procesor może zrozumieć. Twój system operacyjny nie oznacza, że uruchomi się ten sam plik wykonywalny. poruszanie się w przód i w tył między zgodnymi zestawami instrukcji procesora zwykle będzie działać dobrze, jeśli nie są one kompatybilne Procesor nie będzie w stanie zrozumieć instrukcji.
źródło
Oznacza to, że próbujesz uruchomić plik binarny za pomocą skryptu bash, który nie jest przeznaczony do uruchamiania tak, jak chcesz. Jest to już plik binarny i próbujesz $ SHELL sparsować i uruchomić go.
w bardzo prostym przykładzie, jeśli spróbujesz uruchomić polecenie `w 'jak
podobnie możesz uderzać w tę samą metodę lub tak, jak to wygląda z fragmentu kodu.
Podczas gdy dla pozostałych poleceń, wszystkie te polecenia zatrzymania, zamknięcia, ponownego uruchomienia itp. Są poleceniami należącymi do roota i wymagają uprawnień administratora do uruchomienia i wykonania wymaganej operacji. normalni użytkownicy nie mogą ich uruchomić, innym wyjaśnieniem jest to, że te polecenia są umieszczone w / sbin / i / usr / sbin, co może nie znajdować się w zmiennej $ PATH (która służy do sprawdzania poprawności poleceń w areszcie)
źródło
Używasz niewłaściwej wersji instalatora, na przykład komputera 64-bitowego i próbujesz zainstalować 32-bitową wersję instalatora.
źródło