Eu tenho uma emergência, iniciante em 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 na área de trabalho) e renomeou /bin
para /D_bin
( D_
foi o prefixo que eu adicionei), agora o sistema não pode usar o /bin
conteúdo, então não bash
, não mv
para renomear, não sudo
... Os arquivos em /D_bin
são ok, não renomeado, e pode copiar e colá-los, mas não pode criar a pasta /bin
novamente sem bash. O sistema parece estável, mas poucas coisas funcionam e não têm acesso aos arquivos no Desktop.
As outras pastas do /
like também /lib
/sbin
/etc
parecem bem, 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
novamente /bin
? Precisa de ajuda, por favor, trabalho muito importante comprometido
Meu script 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!!!!
fonte
/D_bin/mv -T /D_bin /bin
e não execute seus scripts como root na próxima vez.Respostas:
Existem várias maneiras de corrigir esse problema.
Se você tiver acesso a um shell (qualquer terminal aberto), execute:
sudo
está em/usr/bin
modo, não há necessidade de executá-lo com caminho absoluto.A outra coisa que você pode fazer é, adicionando o
/D_bin
à suaPATH
variável de ambiente, como este:Se você não tem acesso a nenhum shell:
no final da linha que começa com linux, adicione:
pressione CTRL+x
Agora você será direcionado para um shell bash; remonte o sistema de arquivos como lido e gravável.
E mova o diretório D_bin para bin:
Em seguida, reinicie o sistema.
Deve funcionar, mas se nada funcionou para você, você ainda pode inicializar o sistema com um disco / usb ativo do ubuntu e corrigir o problema.
fonte
cd "$j"
(o nome deve estar entre aspas duplas) e substitua a criação de travessuras pelocd ..
parêntese próximo correspondente. Além disso, por que você estava executando como root. Você não deve ser capaz de causar tanto dano.cd ..
colocar umpwd
, remova seufind
comando do script e execute-o como um usuário normal. você verá o script entrar/
, porque você faz um cd $ j que eu acho que são arquivos, não diretórios. então, em cada loop, você recua um passo e finalmente entra/
./bin
porque estava trabalhando em pastas dentro/bin
. Eu iria verificar aqueles (embora não como root!)mv
.Para corrigir esse problema se você não tiver um terminal em execução aberto, primeiro tentaria encontrar um “substituto de shell” que você possa usar em vez do bash. Python está dentro
/usr/bin
, então isso ainda deve funcionar.Se isso não funcionar, eu simplesmente inicializava diretamente do CD / USB ativo e corrigia tudo, desde um ambiente de execução conhecido.
Como um conselho geral, gostaria de destacar Jonathan Leffler nos comentários: nunca use
cd ..
em scripts, isso pode facilmente levar a esses problemas. Melhor apenas fazer o cd no$j
diretório dentro de um subshell , assim você não precisa se preocupar em voltar.Além disso, é claro, não execute coisas como root, a menos que seja absolutamente necessário.
fonte
python
processo, você só precisa de um aplicativo de terminal, e para executar,os.system("sudo ...")
você só precisa de um kernel * nix. Talvez eu vou experimentá-lo em uma VM mais tarde ...cd
inserir scripts, geralmente é melhorcd -
voltar para onde você estava, em vez de assumir que você colocou um diretório em um CD. Se você alterar a inicialcd
,cd ..
ela não o levará de volta para onde estava, mascd -
sim.cd ..
eu não usariacd -
em scripts, apenas na linha de comando.cd -
é talvez menos garantia de problemas do quecd ..
, mas eu ainda não consideraria seguro - se alguém adicionar mais alterações de diretório no meio, isso o levará a algum lugar não intencional. Enquanto os subshells fornecem um escopo claramente delimitado para onde o diretório é alterado e para qual ponto você volta.os.system
se não trabalhar semsh
presentes, massubprocess.call
obras.