Como reinstalar muitos pacotes removidos de uma só vez?

8

Eu usei o sudo apt-get remove pythoncomando e removi acidentalmente um monte de pacotes necessários. Entrei na linha de comando e instalei o ubuntu-desktop novamente, mas há outros pacotes ausentes e estou procurando uma maneira de reinstalar facilmente os pacotes removidos. Como existe o log no centro de software, eu queria perguntar qual seria a maneira mais fácil de reverter as alterações ou extrair a lista de pacotes removidos do centro de software ...

nota: digitei sudo apt-get install .... .... ... ...cerca de duas dúzias desses programas removidos nessa lista, mas quando pressionei enter, não instalei nenhum deles, porque alguns nomes de pacotes não foram encontrados.

Os programas foram removidos na mesma data.

Logan
fonte
11
Veja dentro/var/log/apt/history.log
Lekensteyn

Respostas:

16

Antes de mais, deixe-me dizer que a remoção pythonpode levar a que muitos comandos fundamentais não funcionem mais. Então, eu não sabia se o que segue funcionaria.

Em segundo lugar, presumo que o package names couldn't be founderro que você possui deriva de um nome incorreto na linha de comando ou de um pacote instalado localmente e não disponível em repositórios.

Em seguida, para obter um log de pacotes removidos, relativamente ao último dpkglog disponível (não acho que você precise levar em consideração os logs mais antigos):

awk '$3 == "remove" { print $1, $2, $4 }' /var/log/dpkg.log | tee list

Em seguida, edite o listarquivo criado no diretório atual e deixe apenas as linhas relativas aos pacotes que você deseja reinstalar, com base no registro de data e hora da linha. Digamos que você salve o arquivo modificado em list-mod.

Para reinstalar esses pacotes, use o seguinte comando:

sudo apt-get --simulate install $(awk '{ print $3 }' list-mod)

Inseri a --simulateopção para ver o que o comando faria. Se estiver tudo ok, execute o comando novamente com essa opção removida.

Se o comando disser que alguns pacotes não podem ser encontrados, remova-os list-mode tente novamente.

enzotib
fonte
obrigado, eu fui capaz de reinstalar os pacotes que eu precisava! Uma pergunta, no entanto, existem mais de 200 pacotes removidos no log do centro de software, mas o arquivo de lista tinha cerca de 150, isso significa que o dpkg.log não contém instalações automáticas / pacotes dependentes? mais uma vez obrigado por esta solução :)
Logan
11
Esse arquivo de log contêm cada instalado, atualizado, removido ou purgado pacote, e com cada aplicação a partir dpkgde apt-get, aptitude, Synaptic, Software Center, gdebietc. Você pode dar uma olhada mais velhos dpkg.logarquivos, ver ls -lrt /var/log/dpkg.log*.
enzotib
11
@enzotib Executei um script para remover os cabeçalhos antigos do Linux, e acho que a expressão regular correspondia a muitos dos pacotes que eu não queria excluir (muito importantes !!). Sua resposta me salvou de um certo desastre.
shivisuper
11
@enzotib Você acabou de me salvar de reinstalar o SO após executar um script incorreto. Obrigado!
Brndn2k
ele diz que 0 pacotes atualizados, 0 instalado, 0 a serem removidos e 50 não atualizados
James Casia
2

Por isso, cometi um erro semelhante: em sudo apt-get purge python3.6*vez de sudo apt-get purge python3.6.*.

Consegui corrigi-lo rapidamente, com as seguintes etapas:

  1. Abriu o log vim /var/log/history.log.
  2. Pesquisei meu comando incorreto usando o comando vim /python3.6\*.
  3. Havia uma linha Purge: unity-control-center-signon:amd64 (0.1.7~+14.04.20140211.2-0ubuntu4), ...com uma longa lista de pacotes eliminados (em caso de remoção, ele começará Remove:), que copiei para outro arquivo sem a Purge:parte para trabalhar com ele.
  4. Nesse arquivo, executei o comando vim:, %s/:[^,]*,//gque removeu a parte da versão e me deixou com uma lista de pacotes unity-control-center-signon lxc ....
  5. Finalmente, copiei uma linha da etapa anterior e executei:, sudo apt-get install unity-control-center-signon lxc ...e foi assim que foi corrigida.
Nikita
fonte
para mim foi/var/log/apt/history.log
Taylor