É possível?
Bem, os utilitários mais triviais e importantes estão instalados /bine agora você perdeu o acesso a todos eles. De fato, se você reiniciar, seu sistema não poderá mais inicializar.
De qualquer forma, vamos corrigir o problema e tornar /bino conteúdo o mais próximo possível de onde estava. A única diferença seria alguns links simbólicos que também serão corrigidos.
Quão?
Primeiro, devemos chrootentrar no seu sistema danificado, mas com uma pequena diferença ! Depois disso, obteremos uma lista de pacotes instalados no seu sistema que possuem qualquer arquivo instalado no /bindiretório, então vamos baixar apenas os pacotes necessários e extrair os arquivos necessários /bin. Então estaremos prontos.
Por exemplo, depois chroot, podemos obter uma lista de pacotes que instalaram arquivos /binusando:
dpkg --search /bin | cut -f1 -d: | tr ',' '\n'
E também podemos usar:
dpkg --listfiles PACKAGE-NAME | grep "^/bin/" # or awk '$0 ~ "^/bin/
para listar os arquivos instalados por esses pacotes no /bin.
Em seguida, simplesmente criamos uma lista de todos os pacotes necessários para nós, depois baixamos e extraímos para /binalgo como:
xargs apt download < list-packages
dpkg-deb -x PACKAGE .
mv ./bin/* /bin
No entanto, devemos usar um script para verificar todos os pacotes instalados em nosso sistema, porque fazê-lo manualmente é apenas loucura.
Então, eu escrevi um script que faz tudo o que precisamos. Ele encontra todos os pacotes necessários para restauração /bin, mostra o nome de cada pacote e seus arquivos relacionados aos quais pertence /bin. Aqui está uma captura de tela:

No final, optamos por reinstalar todos os pacotes ou apenas baixar e extrair os arquivos necessários para /bin(que é a opção recomendada):

Você pode pegar uma cópia desse script ou fazer o download diretamente .
Vamos começar
chroot
Inicialize seu sistema com um disco ativo com a mesma arquitetura do Ubuntu instalado, abra um terminal e obtenha acesso root:
sudo -i
Monte seu rootsistema de arquivos (para mim é /dev/sda1):
mount /dev/sda1 /mnt
Precisamos de conectividade com a Internet, então copie resolv.confdo Ubuntu ao vivo para sua partição raiz montada:
cp /etc/resolv.conf /mnt/etc/resolv.conf
Agora copie o script para algum lugar da partição montada, por exemplo:
cp /media/ubuntu/usb/restore-bin.sh /mnt/restore-bin.sh
ou você pode baixá-lo usando wgetetc., como:
wget https://git.io/v9fRm -O /mnt/restore-bin.sh
Monte outros caminhos necessários:
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount -t proc /proc /mnt/proc
E aqui está a pequena diferença : como podemos entrar chrootem um sistema danificado quando não há /bindiretório lá? Qual shell devemos executar?
Portanto, crie um diretório bin temporário. por exemplo: nomeado bintmpdentro da raiz do sistema corrompida:
mkdir /mnt/bintmp
Em seguida, vincule a vida /bina isso:
mount --bind /bin /mnt/bintmp
Faça chroot no sistema enquanto define o /bintmp/bashcomo seu shell de login:
chroot /mnt /bintmp/bash
Exporte a variável de ambiente /bintmpcomo PATH:
export PATH=/bintmp:$PATH
Dê ao script o bit executável:
chmod +x restore-bin.sh
Execute o script:
./restore-bin.sh
Aguarde a pesquisa ser concluída e responda à pergunta que vimos na captura de tela. Ele começará a restaurar o /bine estamos quase terminando.
Depois de concluído, use CTRL+ Dpara sair do chrootambiente e desmontar os caminhos montados:
umount -R /mnt
Reinicie o sistema.
Restaurando os Links dentro /bin
Agora quase todos os arquivos no /bindiretório estão de volta, exceto cerca de 5 links simbólicos que são gerenciados por update-alternatives.
No seu sistema em execução, execute:
sudo update-alternatives --all
Ele faz algumas perguntas; você pode simplesmente pressionar ENTERpara aceitar todos eles.
E agora terminamos.
/binUbuntu não é apenas um link simbólico/usr/binatualmente? Então, tudo o que você precisa fazer é colocar o link simbólico de volta?