Lorsque je me connecte à l'aide de SSH, tout ce que je peux voir, c'est ceci ...
-bash: /usr/bin/id: cannot execute binary file
-bash: [: : integer expression expected
Je ne pouvais rien faire ici. Les commandes telles que halt
, poweroff
, reboot
retourneront command not found
.
Comment puis-je réparer cela? J'utilise Debian Squeeze Linux
PATH
est une variable d'environnement qui contient une liste de dossiers dans lesquels le shell recherche des programmes.ls
par exemple, fait habituellement référence à/bin/ls
, et votre shell le trouve en parcourant les dossiers répertoriésPATH
un par un jusqu'à ce qu'il le trouve, ou s'il ne le trouve dans aucun d'entre eux, il abandonne. Je suppose qu'un meilleur point de départ serait, quelle est la sortie deecho $PATH
? (edit: laexport
commande est un moyen de définir une variable d’environnement dans bash.)export PATH=/bin:/user/bin:/sbin:/usr/sbin
. C'est une commande silencieuse.Réponses:
Habituellement, ce message d'erreur signifie que Linux ne reconnaît pas le fichier en tant que script shell ou fichier exécutable.
Généralement, le problème est que l'exécution d'un fichier exécutable se fasse sur une architecture incorrecte. Si vous essayez d'exécuter des exécutables x86 sur un processeur ARM, ce message s'affiche.
Avez-
/usr/bin/id
vous été écrasé, éventuellement?la source
Essayez de l'exécuter en utilisant ./executablefilename au lieu d'utiliser sh executablefilename. Ce n'est pas un script shell après tout.
la source
./kiwix-serve
Le problème consiste à exécuter un fichier binaire pour une architecture de processeur différente. Vous pouvez utiliser objdump (à partir de binutils) pour vérifier l'architecture des fichiers binaires. Vous pouvez utiliser uname pour vérifier l'architecture d'une machine.
Par exemple, j'ai rencontré cette erreur "impossible d'exécuter le fichier binaire" lors de l'installation de FF.Communicator - un plug-in firefox pour Chrome (je peux donc exécuter les pages utilisant des applets java).
Uname montre que ma machine est un i686 32 bits
$ ./FF.Communicator bash: ./FF.Communicator: impossible d'exécuter le fichier binaire $ uname -mpio i686 i686 GNU / Linux $ objdump -a ./FF.Communicator ./FF.Communicator: format de fichier elf64-x86-64 ./Communicateur
objdump sur un binaire de travail sur ma machine montre qu'il est elf32-i386 32 bits
$ objdump -a / bin / ls / bin / ls: format de fichier elf32-i386
À l'aide de ces outils, vous pouvez vérifier les architectures des machines et des fichiers binaires, pas seulement les architectures intel, mais également les processeurs.
Pour les utilisateurs de Mac OSX, vous pouvez trouver les informations d'architecture d'un fichier spécifique à l'aide de la commande "fichier":
la source
Je fais des suppositions folles ici, mais il semble que ce qui suit se passe:
bash
qui vous oblige à exécuter~/.profile
ou~/.bashrc
à configurer votre environnement pour vous (c’est normal)./bin/id
pour obtenir votre uid, ce qui échoue, ce qui provoque une erreur d'expression entière et met fin au script avant qu'il ne puisse configurer votre fichier$PATH
.$PATH
n'est pas défini, bash ne peut exécuter que des commandes avec le chemin complet spécifié.Utilisez cette
export PATH=/bin:/usr/bin:/sbin:/usr/sbin
option pour résoudre le$PATH
problème jusqu'à ce que vous puissiez réparer la cause première de l'échec de / bin / id.la source
Le fichier binaire est constitué d'instructions machine que le processeur peut comprendre. Votre système d'exploitation ne signifie pas que le même exécutable sera exécuté. aller et venir entre le jeu d'instructions du processeur compatible avec fonctionnera généralement bien, si elles ne sont pas compatibles CPU ne sera pas en mesure de comprendre les instructions.
la source
Cela signifie que vous essayez d'exécuter un fichier binaire à l'aide de votre script bash, qui n'est pas destiné à être exécuté tel que vous l'essayez. C'est déjà un fichier binaire et vous essayez d'analyser et de lancer votre $ SHELL.
dans un exemple très simple, si vous essayez d’exécuter la commande `w 'comme
De la même façon, vous pouvez utiliser la même méthode ou ce que vous voyez dans l'extrait de code.
Tandis que, pour le reste de vos commandes, toutes ces commandes d’arrêt, d’arrêt, de redémarrage, etc. appartiennent à la racine et ont besoin de réglages de super-utilisateur pour être exécutées et exécutées. Les utilisateurs normaux ne peuvent pas les exécuter. Une autre explication est que ces commandes sont placées dans / sbin / et / usr / sbin, ce qui pourrait ne pas être dans votre variable $ PATH (utilisée pour valider les commandes sous votre garde)
la source
Vous exécutez une version incorrecte du programme d'installation, par exemple une machine 64 bits, et essayez d'installer la version 32 bits du programme d'installation.
la source