Bash: /bin/XXX Aucun fichier ... de ce type

Fermé
chico200987 Messages postés 791 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 30 juillet 2018 - Modifié par chico200987 le 14/03/2011 à 15:43
mamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 - 15 mars 2011 à 19:52
Bonjour,


D'habitude c'est moi qu'essaie d'aider mais la I need You car Google ne m'aide pas !

Je suis en train de réaliser un petit script d'installation et d'autoconfiguration d'un module que mon entreprise développe.

Ce module utilise notamment les librairies OpenSSL.i686 et glibc.i686.

Je travaille sous plusieurs machines virtuelles de tests (heureusement vu ou j'en suis) et je dois par moment créer des liens symboliques..

Mon script s'exécute et crée un lien symbolique ld-linux.so.2 vers ld-2.13.so

Ca marche parfaitement jusque lorsque je veux continuer mes tests, donc je reviens a mon etat initial, je supprime ld-linux.so.2 et la... c'est le DRAME !

Ca a flingué ma machine, chaque fois que je tape quelque chose dans la console il me sort "Aucun fichier ou dossier de ce type"

Je voudrais juste savoir s'il y a moyen de retrouver la machine sans devoir redeployer une nouvelle VM (deux fois que ca m'arrive.. pas long a faire mais bon)

Merci :)

Edit : Modification du titre pour généraliser mon erreur et ne pas croire que cela concerne uniquement ls

4 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
14 mars 2011 à 15:34
Salut,

donc je reviens a mon etat initial, je supprime ld-linux.so.2 et la... c'est le DRAME !
Comment t-y es-tu pris pour supprimer ton fichier ? Quelle commande as-tu tapée ?
1
chico200987 Messages postés 791 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 30 juillet 2018 143
Modifié par chico200987 le 14/03/2011 à 15:41
Salut,

A la main directement dans /lib (je sais c'est moche)

Etant dans /lib :
rm ld-linux.so.2


Sachant que juste avant je supprimais la lib vers lequel il pointait et que je venais de rajouter manuellement a savoir ld-2.13.so mais entre les deux commandes, les commandes marchaient encore..

Comme je venais de le créer manuellement et que ca marchait sans, je l'ai donc supprimé
0
mamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 7 752
14 mars 2011 à 21:34
C'est simple il ne faut jamais charcuter /lib et plus généralement ce qui concerne le système. Si tu veux y faire le ménage, il faut virer les paquets correspondants. Bon pour être honnête je ne suis même pas sûr que ce soit réparable car tu viens de dégager l'un des trucs les plus importants sous linux. Je pense que tu as meilleur temps de réinstaller et qu'il est urgent de sauver avec un liveCD tes documents importants.

Concrètement je pense que la plupart de tes binaires vont faire n'importe quoi à partir de maintenant. La seule solution est de redéployer le paquet qui fourni ld-linux.so.

(mando@aldur) (~) $ apt-file search ld-linux.so
libc6: /lib/ld-linux.so.2
libc6-i686: /lib/i686/cmov/ld-linux.so.2
libc6-xen: /lib/i686/nosegneg/ld-linux.so.2
manpages: /usr/share/man/man8/ld-linux.so.8.gz
manpages-fr-extra: /usr/share/man/fr/man8/ld-linux.so.8.gz
manpages-ja: /usr/share/man/ja/man8/ld-linux.so.8.gz


Comme tu peux le voir c'est "juste" un composant de la libc ie l'un des paquets les plus importants sous linux puisque que toutes les commandes de bases sont codées en langage C ! Si tu lances aptitude en root et que tu te positionne sur le paquet libc6 il est en priorité "nécessaire" (autant dire la plus haute). Il est donc clair qu'il ne faut en aucun cas le dégager.

Si par miracle ton gestionnaire de paquets marche encore il est urgent de lancer les commandes :

aptitude update
aptitude reinstall libc6


Si ça ne marche pas (ce qui ne serait pas super surprenant), il faut réinstaller libc6 depuis un système tiers (par exemple un liveCD). Ensuite il faut récupérer le paquet .deb qui va bien par exemple ici :

wget http://ftp.fr.debian.org/debian/pool/main/e/eglibc/libc6_2.11.2-11_i386.deb


Ensuite il faut monter la partition / du système cassé par exemple dans le répertoire /mnt/linux. Ce sera une commande du genre (en admettant que / soit sur /dev/sda1 et en ext3) :

mkdir -p /mnt/linux
mount -t ext3 /dev/sda1 /mnt/linux


Ensuite, il faut décompresser le paquet libc6 dans /mnt/linux. Ce sera un truc du genre :

dpkg-deb -x libc6_2.11.2-11_i386.deb /mnt/linux


Maintenant il faut rafraîchir l'édition de lien et réinstaller plus proprement libc6.

mv libc6_2.11.2-11_i386.deb /mnt/linux/var/cache/apt/archives
chroot /mnt/linux
ldconfig
dpkg -i /var/cache/apt/archives/libc6_2.11.2-11_i386.deb
exit


Enfin tu peux rebooter. Bon mais si ça marche on pourra dire que tu l'as échappé belle...
0
chico200987 Messages postés 791 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 30 juillet 2018 143
15 mars 2011 à 00:25
Je te remercie du temps que tu as passe pour essaye de récupérer le système, mais comme j'avais precisé ce sont des machines virtuelles qui n'ont absolument rien dedans, elles avaient 5mn de vie donc je n'ai rien a sauvegarde et une reinstalle se fait en quelques secondes, la magie de la virtualisation <3

Mais pour le probleme, ce qui est "bizarre" est que, comme je le mentionnais aussi, ld-linux,so.2 c'est moi qui l'ait depose dans le dossier /lib, il n'existait pas avant..

Effectivement c'est un composant de la glibc ce qui est normal puisqu'en fait mon script l'install manuellement.. Je m'explique : Comme je suis en mode OFFLINE (donc pas d'acces au reseau Internet) les apt-get sont interdits.. j'installe donc moi même le packet glibc6 (j'ai une version embarquée compilée)..

C'est comme si, une fois que je deposais les fichiers dans le dossier lib, ils etaient devenus indispensables mais j'ai bien fait attention avant, apres l'installation d'Ubuntu aucun fichier ld-* n'existe dans le dossier /lib

J'avoue que Linux n'est pas ma tasse de thé apres l'avoir renié toute ma vie informatique je commence de plus ne plus à m'y intéresser, donc certaines philosophies peuvent m'échapper encore...

Merci encore pour ces éclaircissements :)
0
mamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 7 752
15 mars 2011 à 19:52
Mais pour le probleme, ce qui est "bizarre" est que, comme je le mentionnais aussi, ld-linux,so.2 c'est moi qui l'ait depose dans le dossier /lib, il n'existait pas avant..

Tu n'es pas sensé charcuter /lib et ce d'aucune manière. Si le fichier que tu as déposé a été utilisé par exemple par ldconfig, typiquement après avoir installé un paquet ou fait une mise à jour... et bien il a pu être utilisé :s

j'installe donc moi même le packet glibc6 (j'ai une version embarquée compilée)..

Raison de plus : c'est ce paquet qui doit gérer ce qui se passe dans /lib, pas toi.

J'avoue que Linux n'est pas ma tasse de thé apres l'avoir renié toute ma vie informatique je commence de plus ne plus à m'y intéresser, donc certaines philosophies peuvent m'échapper encore...

C'est un excellent choix. Pour bien réussir sous linux il faut de la rigueur par contre. De manière général un administrateur ne devrait personnaliser que des fichiers dans /etc et ses propres documents dans /root. Un utilisateur ne devrait intervenir que sur son home directory (par exemple /home/toto). Les personnes qui administrent un serveur (par exemple apache, mysql...) peuvent avoir à manipuler certaines arborescences de /var.

Ailleurs, il ne faut pas toucher :-)

Pour les installations tu dois passer autant que possible par des paquets. Idem pour désinstaller. C'est rarissime d'utiliser une autre méthode.

Bonne chance
0
mamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 7 752
14 mars 2011 à 15:14
Je ne comprends pas trop à quel moment tu es obligé de créer des liens symbolique et pourquoi tu vas charcuter les liens dans /lib ou /usr/lib, tu n'es jamais sensé le faire. Tu le fais "au pire" avec ldconfig et si tu travailles avec des paquets, le paquet le fait pour toi.

Pour que /bin/ls soit absent c'est assez inquiétant, car ça laisse penser que tu as flingué le binaire associé à cette commande. Or celle-ci fait partie d'un paquet fondamentale donc ça fleure la fausse manipulation.

Que dis :

ls -l /bin/ls


Quelle distribution utilises-tu ?
Que cherches-tu à faire ?

Bonne chance
0
Tu lui fais faire un ls pour déterminer pourquoi la commande ls ne fonctionne plus ?
0
chico200987 Messages postés 791 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 30 juillet 2018 143
14 mars 2011 à 15:31
Merci pour vos reponses,

J'utilise Ubuntu 10.10 actuellement mais aussi Fedora 14.. j'essaie d'être le plus générique possible.

En fait ce n'est pas que ls qui ne marche pas mais toutes les commandes, que je fasse ls, uname, cp, mv, .... n'importe quelle commande elle me sort la même erreur..

En fait mon script propose une installation d'un module hors ligne et en ligne, le module est compilé avec des librairies dont il dépend. Pour le mode en ligne, aucun probleme avec des apt-get ou yum il installe ce qu'il lui faut..

En revanche pour le mode hors-ligne, je dois utiliser exactement les librairies qu'il a utilisé ou plutôt les liens symboliques qu'il a utilisé afin qu'il puisse s'exécuter..

La perte de la machine ce n'est pas un problème en fait la re-install est rapide, elle est toute fraiche il n'y avait rien du tout hormis mon script dessus, c'est plutôt pour mieux comprendre que je pose cette question
0