Acidentalmente renomeado / bin Help!

38

Eu tenho um iniciante de emergência, Linux e Bash aqui e errei tentando escrever um script para renomear alguns arquivos. O loop acidentalmente subiu o caminho (executou o script em uma pasta no Desktop) e renomeou /bin para /D_bin ( D_ foi o prefixo que eu adicionei), agora o sistema não pode usar /bin contents, então não bash , não mv para renomear, não sudo ... Os arquivos em /D_bin estão ok, não foram renomeados e podem copiá-los e colá-los, mas não podem criar a pasta /bin novamente sem bash. O sistema parece estável, mas poucas coisas funcionam e não têm acesso a arquivos no Desktop.

As outras pastas de / como /lib /sbin /etc parecem estar ok também, e a área de trabalho gráfica ainda está lá. Tenho medo de reiniciar porque não sei se será capaz de inicializar.

Existe um shell na raiz ou uma maneira de renomear /D_bin de volta para /bin ? Precisa de ajuda por favor, trabalho muito importante comprometido

Meu roteiro suicida: $:

#!/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

:( Obrigado !!!!

    
por Carlos D. Zapata 02.04.2017 / 14:45

2 respostas

88

Existem várias formas de corrigir este problema.

Se você tiver acesso a um shell (qualquer terminal aberto), execute:

sudo /D_bin/mv -T /D_bin /bin

sudo está em /usr/bin , por isso não há necessidade de executá-lo com o caminho absoluto.

A outra coisa que você pode fazer é adicionar a variável de ambiente /D_bin ao seu PATH , desta forma:

export PATH=$PATH:/D_bin

Se você não tiver acesso a nenhum shell:

  1. reinicialize o sistema
  2. quando o grub aparecer pressione e para editar o grub
  3. no final da linha que começa com linux, adicione:

    init=/D_bin/bash
    
  4. pressione CTRL + x

Agora você será deixado em um bash shell, você deve remontar o sistema de arquivos como lido e gravável.

/D_bin/mount -o remount,rw /

E mova o diretório D_bin para bin:

/D_bin/mv -T /D_bin /bin

Em seguida, reinicie o sistema.

Ele deve funcionar, mas se nada funcionou para você, você ainda pode inicializar o sistema com um disco / usb ubuntu ao vivo e corrigir o problema.

    
por Ravexina 02.04.2017 / 15:04
8

Para corrigir esse problema se você não tiver nenhum terminal em execução aberto, eu tentarei primeiro encontrar um “substituto do shell” que você possa usar em vez de bash. O Python está em /usr/bin , então isso ainda deve funcionar.

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"])

Se isso não funcionar, eu apenas inicializo direto do CD / USB ativo e corrijo tudo em um ambiente de execução conhecido.

Como um conselho geral, eu colocaria Jonathan Leffler em segundo lugar nos comentários: nunca use cd .. em scripts, pode facilmente levar a tais problemas. Melhor apenas cd no diretório $j dentro de um subshell , desta forma você não precisa se preocupar em voltar.

#!/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

Além disso, é claro, não execute coisas como root, a menos que seja absolutamente necessário.

    
por leftaroundabout 03.04.2017 / 14:50