Ketika saya masuk menggunakan SSH, yang bisa saya lihat adalah ini ...
-bash: /usr/bin/id: cannot execute binary file
-bash: [: : integer expression expected
Saya tidak bisa melakukan apa pun di sini. Perintah seperti halt
, poweroff
, reboot
akan kembali command not found
.
Bagaimana saya bisa memperbaikinya? Saya menggunakan Debian Squeeze Linux
PATH
adalah variabel lingkungan yang berisi daftar folder tempat shell mencari program.ls
misalnya, biasanya merujuk ke/bin/ls
, dan shell Anda menemukannya dengan menelusuri folder yang tercantum dalamPATH
satu per satu hingga menemukannya, atau jika tidak menemukannya di salah satu dari mereka, itu menyerah. Saya kira titik awal yang lebih baik adalah, apa outputnyaecho $PATH
? (edit:export
perintah adalah cara untuk mendefinisikan variabel lingkungan dalam bash.)export PATH=/bin:/user/bin:/sbin:/usr/sbin
. Itu perintah diam.Jawaban:
Biasanya pesan kesalahan itu berarti Linux tidak mengenali file sebagai skrip shell atau sebagai file yang dapat dieksekusi.
Biasanya penyebabnya adalah menjalankan executable pada arsitektur yang salah - jika Anda mencoba menjalankan executable x86 pada CPU ARM, pesan ini muncul.
Apakah
/usr/bin/id
ditimpa, mungkin?sumber
Cobalah untuk menjalankannya menggunakan ./executablefilename alih-alih menggunakan sh executablefilename. Lagipula itu bukan skrip shell.
sumber
./kiwix-serve
Masalahnya adalah menjalankan biner untuk arsitektur prosesor yang berbeda. Anda dapat menggunakan objdump (dari binutils) untuk memeriksa arsitektur binari. Anda dapat menggunakan uname untuk memeriksa arsitektur sebuah mesin.
misalnya saya menemukan kesalahan ini "tidak dapat mengeksekusi file biner" ketika menginstal FF.Communicator - plugin firefox untuk chrome (jadi saya dapat menjalankan halaman yang menggunakan applet java).
uname menunjukkan mesin saya adalah i686 32-bit
$ ./FF.Communicator bash: ./FF.Communicator: tidak dapat mengeksekusi file biner $ uname -mpio i686 i686 i386 GNU / Linux $ objdump -a ./FF.Communicator ./FF.Communicator: format file elf64-x86-64 ./FF.Comunicator
objdump pada biner yang berfungsi pada mesin saya menunjukkan itu adalah 32-bit elf32-i386
$ objdump -a / bin / ls / bin / ls: format file elf32-i386
Dengan menggunakan alat-alat ini Anda dapat memeriksa arsitektur mesin dan binari - tidak hanya arsitektur intel tetapi prosesor apa pun.
Untuk pengguna Mac OSX, Anda dapat mengetahui info arsitektur dari file tertentu menggunakan perintah "file":
sumber
Saya membuat beberapa tebakan liar di sini, tetapi sepertinya hal berikut terjadi:
bash
untuk menjalankan Anda~/.profile
atau~/.bashrc
mengatur lingkungan Anda untuk Anda (ini normal)./bin/id
untuk mendapatkan uid Anda, yang gagal, menyebabkan kesalahan ekspresi integer, dan menghentikan skrip sebelum dapat mengatur Anda$PATH
.$PATH
tidak disetel, bash hanya dapat menjalankan perintah dengan path lengkap yang ditentukan.Gunakan
export PATH=/bin:/usr/bin:/sbin:/usr/sbin
untuk memperbaiki$PATH
masalah sampai Anda dapat memperbaiki penyebab root / bin / id gagal.sumber
file biner terdiri dari instruksi mesin yang dapat dimengerti prosesor. Sistem operasi Anda tidak berarti executable yang sama akan berjalan. bergerak bolak-balik antara set instruksi prosesor yang kompatibel dengan biasanya akan bekerja dengan baik, jika mereka tidak kompatibel CPU tidak akan dapat memahami instruksi.
sumber
Ini berarti bahwa Anda mencoba untuk mengeksekusi file biner menggunakan skrip bash Anda yang tidak dimaksudkan untuk dijalankan seperti yang Anda coba. Ini sudah merupakan file biner dan Anda mencoba $ SHELL Anda untuk menguraikan dan menjalankannya.
dalam contoh yang sangat sederhana, jika Anda mencoba menjalankan perintah `w 'like
sama halnya Anda mungkin memukul metode yang sama atau seperti yang terlihat dari cuplikan kode Anda.
Sementara, untuk sisanya untuk perintah Anda, Al ini menghentikan, mematikan, me-reboot perintah dll adalah perintah yang dimiliki root dan perlu prilveges super-pengguna untuk menjalankan dan melakukan operasi yang diperlukan. pengguna normal tidak dapat menjalankannya. Penjelasan lain adalah bahwa perintah ini ditempatkan di / sbin / dan / usr / sbin, yang mungkin tidak ada dalam variabel $ PATH Anda (yang digunakan untuk memvalidasi perintah dalam tahanan Anda)
sumber
Anda menjalankan versi penginstal yang salah, misalnya, mesin 64bit dan mencoba menginstal versi penginstal 32bit.
sumber