SSHを使ってログインしたときに確認できるのはこれだけです...
-bash: /usr/bin/id: cannot execute binary file
-bash: [: : integer expression expected
ここでは何もできませんでした。 halt
、poweroff
、reboot
などのコマンドはcommand not found
を返します。
どうすればこれを修正できますか?私はDebian Squeeze Linuxを使っています
通常、このエラーメッセージは、Linuxがファイルをシェルスクリプトまたは実行可能ファイルとして認識していないことを意味します。
通常、原因は間違ったアーキテクチャで実行ファイルを実行していることです - あなたがARM CPUでx86実行ファイルを実行しようとすると、このメッセージが表示されます。
/usr/bin/id
は上書きされたのでしょうか。
Sh executablefilenameではなく./executablefilenameを使用して実行してください。結局、それはシェルスクリプトではありません。
問題は、異なるプロセッサアーキテクチャ用のバイナリを実行していることです。 (binutilsからの)objdumpを使ってバイナリのアーキテクチャをチェックすることができます。あなたはマシンのアーキテクチャをチェックするためにunameを使うことができます。
例えばFF.Communicator - chrome用のFirefoxプラグインをインストールすると、「バイナリファイルを実行できません」というエラーが発生しました(したがって、Javaアプレットを使用するページを実行できます)。
uname私のマシンが32ビットであることを示しますi686
$ ./FF.Communicator bash:./FF.Communicator:バイナリファイルを実行できません$ uname -mpio i686 i686 i386 GNU/Linux $ objdump -a ./FF.Communicator ./FF.Communicator:ファイル形式elf64-x86-64 ./FF.Communicator
objdumpが私のマシンの作業中のバイナリで32ビットであることを示していますelf32-i386
$ objdump -a/bin/ls/bin/ls:ファイル形式elf32-i386
これらのツールを使って、マシンやバイナリのアーキテクチャをチェックすることができます - Intelアーキテクチャだけでなくあらゆるプロセッサも。
Mac OSXユーザーの場合、 "file"コマンドを使って特定のファイルのアーキテクチャ情報を調べることができます。
$ file filename_here
私はここでいくつかのワイルドな推測をしています、しかしそれは以下が起こっているように見えます:
~/.profile
を実行するためのbash
またはあなたのための環境をセットアップするための~/.bashrc
を起動します(これは正常です)。/bin/id
を実行しようとしますが、それは失敗し、整数式エラーを引き起こし、$PATH
を設定する前にスクリプトを終了させます。$PATH
が設定されていないので、bashはフルパスを指定してコマンドを実行することしかできません。/ bin/idの失敗の根本的な原因を解決できるまで、export PATH=/bin:/usr/bin:/sbin:/usr/sbin
を使用して$PATH
の問題を解決してください。
バイナリファイルは、プロセッサが理解できる機械語命令で構成されています。あなたのオペレーティングシステムは、同じ実行ファイルが実行されるという意味ではありません。互換性のあるプロセッサ命令セットの間を行ったり来たりして移動すると、互換性がない場合は通常うまくいきます。CPUは命令を理解できないでしょう。
これはあなたがbashスクリプトを使ってバイナリファイルを実行しようとしていることを意味します。それはすでにバイナリファイルであり、あなたはそれを解析して実行するためにあなたの$ Shellを試みています。
非常に単純な例では、 `w 'コマンドを実行しようとすると
$ bash w
/usr/bin/w: /usr/bin/w: cannot execute binary file
同様に、あなたは同じメソッドを打っているかもしれませんし、それがあなたのコードスニペットから見ているように。
一方、残りのコマンドでは、これらの停止、シャットダウン、再起動などのコマンドはrootが所有するコマンドであり、必要な操作を実行して実行するにはスーパーユーザーの権限が必要です。通常のユーザーはそれらを実行することはできません。これらのコマンドは/ sbin /および/ usr/sbinに配置されており、$ PATH変数には含まれていない可能性があります(管理用のコマンドの検証に使用)