Renomeei acidentalmente o diretório /usr
para /usr_bak
.
Eu quero mudá-lo de volta, então eu acrescentar o caminho /usr_bak/bin
para $PATH
permitir que o sistema para encontrar o comando sudo
.
Mas agora sudo mv /usr_bak /usr
me dá o erro:
sudo: error while loading shared libraries: libsudo_util.so.0: cannot open shared object file: No such file or directory
Existe uma maneira de renomear o /usr_bak
as /usr
além de reinstalar o sistema?
sudo
chegou ao estágio de biblioteca, geralmente está dentro/usr/bin/
e deveria ter falhado com um erro de comando não encontrado. Além disso, você tem uma senha root definida?not found
antes, então acrescentei o novo caminho/usr_bak/bin
para$PATH
e agora recebo o erro no meu post aqui .../usr
do Ubuntu 16.04 para substituir o/usr
do Ubuntu 17.10 ...Respostas:
Como você definiu uma senha para root, use
su
ebusybox
, instalado por padrão no Ubuntu. Todassu
as bibliotecas necessárias estão em/lib
. O Busybox é um conjunto de utilitários vinculados estaticamente, portanto, a falta de bibliotecas não deve ser um problema. Faz:(Embora o próprio Busybox também tenha um
su
applet, o/bin/busybox
binário não é setuid e, portanto, não funciona, a menos que seja executado como root.)Se você não tiver uma senha root,
provavelmente poderá usar a solução Gilles aqui usando(Gilles diz que isso não funcionará com binários setuid como sudo), reinicie e edite o menu GRUB para inicializarLD_LIBRARY_PATH
, ouinit=/bin/busybox
como um parâmetro do kernel e mover a pasta de volta.fonte
/lib
.LD_LIBRARY_PATH
não ajudaria a executar o sudo, poissudo
é setuid. Se suas bibliotecas não estiverem no lugar certo, o sudo não funcionará até que a raiz o conserte./sbin
exatamente para esse tipo de cenário: "Estou realizando alguma atividade em que bibliotecas de tempo de execução serão manipuladas, mas ainda precisa manipular arquivos ". Basicamente, a mesma abordagem antes do Busybox ser inventado. (O número de comandos disponíveis desta forma foi muito limitado, porque os binários ligados estaticamente devorar diskspace.)/lib
, então você provavelmente terá que reiniciar parainit=/bin/busybox
Além da resposta de muru :
você poderia ter usado alguma chave USB de inicialização de resgate para reparar seu sistema; por exemplo, se o seu sistema for algum Debian ou Ubuntu, inicialize a chave USB de instalação no modo de recuperação e faça o apropriado
mount
emv
eumount
.para ser capaz de reparar mais facilmente esses erros, eu geralmente também instalar um escudo estático com vários comandos internos (nomeadamente com alguns
cp
,rm
,mv
builtins -como), comosash
(ele é empacotado em Debian e Ubuntu, e também disponível como faixa-3.8. tar.gz no formulário de origem) e inicialize cominit=/bin/sash
passado para o Grub.PS:
sash
é um pouco buggy e não é totalmente compatível com Posix, mas ainda é muito útil.fonte
apt-get install sash
. Mas você também pode baixar o sash-3.8.tar.gz e compilá-lo.Eu acho que a melhor maneira mais segura é reiniciar usando um sistema operacional inicializado por USB, CD ou DVD (Debian, Ubuntu, Suse, etc). Em seguida, monte a unidade que contém os problemas e renomeie.
Mais seguro do que inicializar em um campo minado com / usr ou / lib efetivamente ausente.
fonte
Corri para um problema semelhante onde eu renomeado
/usr/bin
para/usr/bin_bkp
por algum teste e, em seguida, eu não era capaz de mudar o nome (como o comando não encontrou osudo
no diretório padrão que é/usr/bin
) e, em seguida, fui para o/usr/bin_bkp
diretório manualmente (usando o Gerenciador de arquivos ) e a maioria das funções (incluindo a renomeação) no botão direito do mouse estão desabilitadas.Tentei o seguinte comando e ele corrigiu o problema
Invoquei o sudo do caminho atual e funcionou, agora tudo voltou ao normal.
SO: Xubuntu 14.04
fonte
Não posso fazer isso agora (e não tenho certeza se gostaria), mas parece que deve funcionar para criar um novo "/ usr" como um link físico (não um link virtual) para o seu " / usr_bak e exclua o "/ usr_bak"
O link físico criado por "ln" ( sem argumento "-s") no sistema de arquivos deve tornar os diretórios usr e usr_bak igualmente válidos para os diretórios em questão. "rm" apenas remove o link que você pediu para remover, não os dois. Como ainda existe um link válido para o conteúdo, eles devem permanecer acessíveis através do link restante em "/ usr".
fonte
.
e..
, portanto, a contagem de links em um diretório informa o número de subdiretórios de primeiro nível). Além disso,rm
não funciona em diretórios, você precisaria usarrmdir
. (ln
erm
trabalhe com links simbólicos para diretórios, mas estamos falando de um diretório real). Além disso, isso não resolve o problema, porque requerroot
exatamente o mesmomv
, por causa das permissões ativadas/
. Se você pudesse executar isso, poderia executarmv
como uma pessoa normal.ln(1)
no Debian diz isso para a opção-d
/-F
/--directory
: "permite que o superusuário tente vincular diretórios (nota: provavelmente falhará devido a restrições do sistema, mesmo para o superusuário)" . Então você está livre para tentar, mas seu sistema de arquivos provavelmente não permitirá.