É possível voltar de uma situação tão confusa , sem reinstalar o sistema. Bem, mais exatamente, executando um novo sistema a partir de uma chave USB ou em um Virutal Box (mais ou menos) se você tiver um sistema de inicialização dupla.
Corri novamente o mesmo tipo de problema (algum bug em um script que estava escrevendo) e o resolvi, mas você precisa pedir a ajuda de algum especialista. Seja muito cauteloso!
Primeiro, minha situação foi mais fácil de resolver porque eu tinha um sistema de inicialização dupla (ubuntu e meu antigo fedora instalado), mas executar o sistema com uma chave USB (ou talvez um CD / DVD) deve fazer a mesma coisa.
MPOINT = / mount / ubuntu
Primeiro montei meus sistemas de arquivos assim (não esqueça de criar os pontos de montagem): mount / dev / ubuntu / root $ MPOINT mount / dev / ubuntu / home $ MPOINT / home
Em seguida, executei o seguinte comando (meu problema estava apenas em alguns diretórios críticos) para copiar as permissões do sistema em execução para o mais complicado (de fato, no meu caso, instalei um sistema ubuntu no Virtual Box no fedora e obteve as permissões lá):
encontre / etc / usr / bin -exec stat --format "chmod% a $ {MPOINT}% n" {} \; > /tmp/restoreperms.sh
E então eu executei o script restoreperms.sh.
Consegui novamente inicializar no ubuntu.
O conteúdo do restoreperms.sh será algo como:
(...)
chmod 755 /mount/ubuntu//etc/ppp
chmod 755 /mount/ubuntu//etc/ppp/ipv6-up
chmod 2750 /mount/ubuntu//etc/ppp/peers
chmod 640 /mount/ubuntu//etc/ppp/peers/provider
chmod 755 /mount/ubuntu//etc/ppp/ipv6-up.d
chmod 777 /mount/ubuntu//etc/ppp/resolv.conf
(...)
Não testei, mas também deve funcionar para proprietários e grupos de proprietários. Algo como:
encontre / etc / usr / bin -exec stat --format 'chown% U:% G $ {MPOINT}% n' {} \; > /tmp/restoreperms.sh^
(...)
chown root:root /mount/ubuntu//etc/obex-data-server/imaging_capabilities.xml
chown root:root /mount/ubuntu//etc/obex-data-server/capability.xml
chown root:dip /mount/ubuntu//etc/ppp
chown root:root /mount/ubuntu//etc/ppp/ipv6-up
chown root:dip /mount/ubuntu//etc/ppp/peers
chown root:dip /mount/ubuntu//etc/ppp/peers/provider
chown root:root /mount/ubuntu//etc/ppp/ipv6-up.d
chown root:root /mount/ubuntu//etc/ppp/resolv.conf
(...)
Obviamente, você deve tomar cuidado aqui, que o UID e o GID são iguais nos dois sistemas, mas para os usuários e grupos relacionados ao sistema, isso não deve ser um problema.
Rk:
Uma coisa importante para isso é manter um disco de instalação sincronizado com a versão que você está usando, ou pelo menos trabalhar com a versão atual do ubuntu. Agora, eu tenho esses comandos em um cronjob, executando todos os dias (pode demorar semanas) para manter essas informações. Isso facilitará a solução da próxima vez, mas, é claro, como eu tenho isso agora, isso nunca acontecerá novamente. ;-) Algo assim:
0 12 * * * /usr/bin/find / -exec /usr/bin/stat --format="/bin/chmod %a %n" {} \; |/bin/bzip2 -c > /tmp/restore_chmod.$(/bin/date +%w).sh.bz2
0 13 * * * /usr/bin/find / -exec /usr/bin/stat --format="/bin/chown %U:%G %n" {} \; |/bin/bzip2 -c > /tmp/restore_chown.$(/bin/date +%w).sh.bz2
EDIT: para oferecer suporte a links, o comando combinado é:
/usr/bin/find / -exec /usr/bin/stat --format="[ ! -L {} ] && /bin/chmod %a %n" {}