Renommé accidentellement / bin Help!

38

J'ai un débutant pour Linux et Bash en urgence et j'ai essayé d'écrire un script pour renommer certains fichiers. La boucle a accidentellement remonté le chemin (exécution du script dans un dossier dans Desktop) et renommé /bin en /D_bin ( D_ étant le préfixe que j'ai ajouté), le système ne peut donc plus utiliser /bin contents, non bash , pas de mv à renommer, pas de sudo ... Les fichiers dans /D_bin sont ok, pas renommés, et peuvent les copier-coller mais ne peuvent pas créer de dossier /bin sans bash. Le système semble stable mais très peu de choses fonctionnent et n’ont pas accès aux fichiers dans Desktop.

Les autres dossiers de / comme /lib /sbin /etc semblent bien fonctionner, et le bureau graphique est toujours là. J'ai peur de redémarrer car je ne sais pas si ça va pouvoir démarrer.

Existe-t-il un shell dans root ou un moyen de renommer /D_bin en /bin ? Besoin d'aide s'il vous plaît, travail très important compromis

Mon script suicidaire: $:

#!/bin/bash
files=~/Desktop/folder_1/*

for j in $files
do
    cd $j
    for i in 10n*  #file names starting by 10n
    do
       find * -maxdepth 0 ! -path . -exec mv {} D_{} \;
    done
    cd ..
done

:( Merci !!!!

    
posée Carlos D. Zapata 02.04.2017 - 14:45
la source

2 réponses

88

Il existe plusieurs manières de résoudre ce problème.

Si vous avez accès à un shell (n'importe quel terminal ouvert), exécutez:

sudo /D_bin/mv -T /D_bin /bin

sudo est dans /usr/bin , il n'est donc pas nécessaire de l'exécuter avec un chemin absolu.

L'autre chose que vous pouvez faire est d'ajouter le /D_bin à votre variable d'environnement PATH , comme ceci:

export PATH=$PATH:/D_bin

Si vous n’avez accès à aucun shell:

  1. redémarrer le système
  2. quand grub apparaît, appuyez sur e pour éditer le grub
  3. à la fin de la ligne qui commence par linux, ajoutez:

    init=/D_bin/bash
    
  4. appuyez sur CTRL + x

Maintenant que vous serez déposé dans un shell bash, vous devriez remonter le système de fichiers en lecture et en écriture.

/D_bin/mount -o remount,rw /

Et déplacez le répertoire D_bin vers bin:

/D_bin/mv -T /D_bin /bin

Puis redémarrez le système.

Cela devrait fonctionner, mais si rien ne fonctionnait pour vous, vous pouvez toujours démarrer le système avec un disque / usb ubuntu en direct et corriger le problème.

    
réponse donnée Ravexina 02.04.2017 - 15:04
la source
8

Pour résoudre ce problème si vous n’avez pas de terminal ouvert, essayez d’abord de trouver un "substitut de shell" que vous pouvez utiliser au lieu de bash. Python est dans /usr/bin , donc cela devrait toujours fonctionner.

Python 2.7.6 (default, Oct 26 2016, 20:30:19) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> subprocess.call(["sudo", "/D_bin/mv", "-T", "/D_bin", "/bin"])

Si cela ne fonctionne pas, je commencerais tout simplement à démarrer à partir d’un CD / USB en direct et je réparerais tout depuis un environnement en cours de fonctionnement.

En guise de conseil général, je serais deuxième Jonathan Leffler dans les commentaires: n'utilisez jamais cd .. dans des scripts, cela peut facilement conduire à de tels problèmes. Mieux encore, cd dans le répertoire $j dans un sous-shell , de cette façon vous n’avez pas à vous soucier de votre retour.

#!/bin/bash
files=~/Desktop/folder_1/*

for j in $files
do
  (
    cd "$j"
    for i in 10n*  #file names starting by 10n
    do
       find * -maxdepth 0 ! -path . -exec mv {} D_{} \;
    done
  )
done

Bien sûr, ne lancez pas les choses en tant que root, sauf si cela est absolument nécessaire.

    
réponse donnée leftaroundabout 03.04.2017 - 14:50
la source

Lire d'autres questions sur les étiquettes