Làm thế nào tôi có thể giải quyết lỗi mà không thể thực thi tập tin nhị phân


80

Khi tôi đăng nhập bằng SSH, tất cả những gì tôi có thể thấy là ...

-bash: /usr/bin/id: cannot execute binary file
-bash: [: : integer expression expected

Tôi không thể làm bất cứ điều gì ở đây. Lệnh như halt, poweroff, rebootsẽ trở lại command not found.

Làm thế nào tôi có thể sửa lỗi này? Tôi đang sử dụng Debian Bóp Linux


7
Bạn đã làm gì với cái máy đó?
slhck

1
điều cuối cùng tôi đã làm là cài đặt logwatch. Không có gì khác.
siêu người dùng

3
PATHlà một biến môi trường chứa danh sách các thư mục mà shell tìm kiếm các chương trình. lsví dụ, thường đề cập đến /bin/lsvà shell của bạn tìm thấy nó bằng cách đi qua các thư mục được liệt kê PATHtừng cái một cho đến khi tìm thấy nó, hoặc nếu nó không tìm thấy nó trong bất kỳ cái nào trong số chúng, nó sẽ bỏ cuộc. Tôi cho rằng một điểm khởi đầu tốt hơn sẽ là, đầu ra của là echo $PATHgì? (chỉnh sửa: exportlệnh là một cách để xác định biến môi trường trong bash.)
Darth Android

1
À ... Tôi đã cảnh báo bạn không tắt hệ thống: P Bạn có thể truy cập bàn điều khiển vào nó (màn hình vật lý + bàn phím đi kèm) không? Hãy thử khởi động hệ thống ở chế độ một người dùng (có thể được gắn nhãn là chế độ khôi phục) và xem liệu bạn có thể vào được vỏ gốc hay không.
Darth Android

2
@David bạn sẽ không thấy bất kỳ đầu ra nào sau khi gõ export PATH=/bin:/user/bin:/sbin:/usr/sbin. Đó là một mệnh lệnh im lặng.
Ben Richards

Câu trả lời:


84

Thông thường, thông báo lỗi đó có nghĩa là Linux không nhận ra tệp dưới dạng tập lệnh shell hoặc là tệp thực thi.

Thông thường, nguyên nhân là do chạy một thực thi trên kiến ​​trúc sai - nếu bạn cố chạy các tệp thực thi x86 trên CPU ARM, thông báo này xuất hiện.

Đã /usr/bin/idbị ghi đè, có thể?


15
"nếu bạn cố chạy các tệp thực thi x86 trên CPU ARM, thông báo này sẽ xuất hiện." Đó là chính xác những gì gây ra nó. Cảm ơn tất cả mọi người cho đầu vào của bạn!
siêu người dùng

Hóa ra nhị phân của tôi là một tệp exe của Windows: P
forzagreen 18/12/18

Làm thế nào chúng ta có thể giải quyết điều này? Tôi chắc chắn tôi gặp vấn đề tương tự, nhưng câu trả lời này không thực sự cho tôi biết một giải pháp: /
Newskooler

Để giải quyết, bạn cần sử dụng nhị phân ARM chứ không phải nhị phân x86. Nếu nguồn có sẵn, bạn có thể biên dịch lại / xây dựng lại theo hệ thống ARM. Nếu nguồn không có sẵn, hãy kiểm tra với nhà cung cấp để biết nhị phân ARM. JRE chính thức từ Sun, ví dụ, có cả phiên bản x86 và "nhúng" hoặc ARM. Bạn phải sử dụng phiên bản ARM.
LawrenceC

24

Hãy thử chạy nó bằng cách sử dụng ./executablefilename thay vì sử dụng sh execablefilename. Rốt cuộc nó không phải là một kịch bản shell.


Tôi gặp vấn đề này khi cố gắng chạy kiwix-phục vụ trên pi mâm xôi của tôi. Giải pháp tổng thể của tôi, tôi tin là điều chỉnh các quyền của tệp (mặc định nó không được đặt thành thực thi bởi bất kỳ ai) và sau đó chạy nó dưới dạng./kiwix-serve
cchapman

9

Vấn đề là chạy nhị phân cho một kiến ​​trúc bộ xử lý khác. Bạn có thể sử dụng objdump (từ binutils) để kiểm tra kiến ​​trúc của nhị phân. Bạn có thể sử dụng uname để kiểm tra kiến ​​trúc của một máy.

ví dụ: tôi gặp phải lỗi này "không thể thực thi tệp nhị phân" khi cài đặt FF.Cransicator - một plugin firefox cho chrome (vì vậy tôi có thể chạy các trang sử dụng các tiểu dụng java).

  • objdump hiển thị nhị phân là 64-bit elf64-x86-64
  • uname cho thấy máy của tôi là i686 32 bit

    $ ./FF.Cransicator bash: ./FF.Cransicator: không thể thực thi tệp nhị phân $ uname -mpio i686 i686 i386 GNU / Linux $ objdump -a ./FF. ./FF. Truyền thông

  • objdump trên một nhị phân hoạt động trên máy của tôi cho thấy nó là elf32-i386 32 bit

    $ objdump -a / bin / ls / bin / ls: định dạng tệp elf32-i386

Sử dụng các công cụ này, bạn có thể kiểm tra kiến ​​trúc của máy và nhị phân - không chỉ kiến ​​trúc intel mà bất kỳ bộ xử lý nào.

Đối với người dùng Mac OSX, bạn có thể tìm hiểu thông tin kiến ​​trúc của một tệp cụ thể bằng lệnh "tệp":

$ file filename_here

6

Tôi đang thực hiện một số dự đoán hoang dã ở đây, nhưng có vẻ như những điều sau đây đang xảy ra:

  1. Bạn đăng nhập qua SSH, kích hoạt bashđể chạy ~/.profilehoặc ~/.bashrcthiết lập môi trường cho bạn (điều này là bình thường).
  2. Tại một số điểm, nó cố gắng thực thi /bin/idđể lấy uid của bạn, điều này không thành công, gây ra lỗi biểu thức số nguyên và chấm dứt tập lệnh trước khi nó có thể thiết lập $PATH.
  3. Vì bạn $PATHchưa được đặt, bash chỉ có thể chạy các lệnh với đường dẫn đầy đủ được chỉ định.

Sử dụng export PATH=/bin:/usr/bin:/sbin:/usr/sbinđể khắc phục sự cố $PATHcho đến khi bạn có thể khắc phục nguyên nhân gốc của / bin / id không thành công.


0

tệp nhị phân bao gồm các hướng dẫn máy mà bộ xử lý có thể hiểu. Hệ điều hành của bạn không có nghĩa là cùng thực thi sẽ chạy. di chuyển qua lại giữa bộ hướng dẫn bộ xử lý tương thích thường sẽ hoạt động tốt, nếu chúng không tương thích CPU sẽ không thể hiểu hướng dẫn.


0

Điều này có nghĩa là bạn đang cố gắng thực thi một tệp nhị phân bằng cách sử dụng tập lệnh bash không có ý định chạy như bạn đang cố gắng. Nó đã là một tệp nhị phân và bạn đang thử $ SHELL để phân tích và chạy nó.

trong một ví dụ rất đơn giản, nếu bạn cố chạy lệnh `w 'như

$ bash w
/usr/bin/w: /usr/bin/w: cannot execute binary file

tương tự như vậy, bạn có thể đang nhấn cùng một phương thức hoặc như nó nhìn từ đoạn mã của bạn.

Trong khi, đối với các lệnh còn lại của bạn, các lệnh tạm dừng, tắt máy, khởi động lại, v.v ... là các lệnh sở hữu gốc và cần các siêu người dùng để chạy và thực hiện thao tác cần thiết. Người dùng bình thường không thể chạy cho họ một lời giải thích khác là các lệnh này được đặt tại / sbin / và / usr / sbin, có thể không nằm trong biến $ PATH của bạn (được sử dụng để xác thực các lệnh trong quyền giám hộ của bạn)


-1

Bạn đang chạy sai phiên bản trình cài đặt, ví dụ: máy 64 bit và đang cố cài đặt phiên bản 32 bit của trình cài đặt.

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.