Gostaria de obter uma lista de pacotes instalados manualmente por apt
ou aptitude
e poder descobrir se um foobar
pacote foi instalado manual ou automaticamente. Existe alguma maneira legal de fazer isso na linha de comando?
apt
package-management
aptitude
Umang
fonte
fonte
Respostas:
Você pode usar um desses dois one-liners. Ambos produzem exatamente a mesma saída na minha máquina e são mais precisos do que todas as soluções propostas até agora (6 de julho de 2014) nesta questão.
Usando
apt-mark
:Usando
aptitude
:Pouquíssimos pacotes ainda caem nas falhas, embora eu suspeite que eles sejam realmente instalados pelo usuário, logo após a instalação pela configuração da localização do idioma ou, por exemplo, pelo instalador do codec Totem. Além disso, as versões do cabeçalho linux também parecem se acumular, mesmo que eu tenha instalado apenas o metapacote não específico da versão. Exemplos:
Como funciona:
sed
remove os espaços em branco restantes no final da linha.Outras possibilidades não funcionam tão bem:
ubuntu-14.04-desktop-amd64.manifest
arquivo ( aqui para Ubuntu 14.04) em vez de/var/log/installer/initial-status.gz
. Mais pacotes são mostrados como instalados manualmente, mesmo que não sejam.apt-mark showauto
vez de/var/log/installer/initial-status.gz
.apt-mark
por exemplo, não inclui o pacote xserver-xorg, enquanto o outro arquivo inclui.Eu usei várias outras postagens do StackExchange como referência, no entanto, nenhuma funciona tão bem quanto a solução acima:
Ambos listam mais pacotes que a solução acima.
EDIT: O que fazer se você atualizou de uma versão anterior:
Se você atualizou o Ubuntu de uma versão para a próxima, provavelmente precisará ajustar esse processo. Nesse caso, eu verificaria o arquivo de manifesto da versão mais recente (veja acima) além do arquivo initial-status.gz da versão atual. Você pode fazer isso facilmente adicionando outra comparação. Usar apenas o arquivo de manifesto não funcionará, pois o arquivo de manifesto infelizmente não contém tudo o que o arquivo initial_status.gz (verifiquei).
fonte
/var/log/installer/initial-status.gz
está faltando. Também quero saber se isso depende da marcação de aptosmanual
ou não?showmanual
comando (abaixo). E usecomm
para comparar as duas listas (classificadas). Oshowmanual
resultado me deu mais 1.840 pacotes exclusivos,apt-mark showmanual
não mostrados por esse método. Nenhum pacote foi exclusivo para a saída dessecomm
comando. Eu acho que é mais interessante registrar que, para o meu PC, 894 pacotes estão listados em Ambos os resultados. Não sei por que há tanta discrepância. Alguns (muitos?) Pacotes parecem ser específicos da versão. Outros, como XOrg, componentes GTK e outraslib*
coisas, podem ser atualizações. De qualquer forma, esta resposta é um começo muito bom.apt-mark showmanual
. É interessante quantas diferenças são visíveis. sua lista possui 238 pacotes, enquanto showmanual retorna 1717 pacotes. Dos 2179 pacotes instalados, existem apenas 223 nas duas listas, 15 estão apenas na sua (exemplos: nodejs, lightdm) e 223 estão apenas no showmanual (exemplos: xserver-xorg, ubuntu-desktop). Parece que sua lista é mais útil, mas sem saber de onde vêm essas diferenças, não é fácil decidir ... (mas tenho certeza de que instalei o nginx e o lightdm manualmente ...) [desculpe por ter acabado de escrever o mesmo;)]Nas versões mais recentes do pacote apt, há também o comando apt-mark
fonte
linux-image-3.11.0-*-generic
etc como o manuallinux-image-3.13.0-24-generic
é manual, mas a correntelinux-image-3.13.0-27-generic
é automática. Parece que uma atualização de um pacote de referência (neste casolinux-image-generic
, que mudou as dependências), a marca manual é automaticamente ajustadoapt-get autoremove
. Definitivamente não é o que você deseja.Para o Ubuntu 16.04, confira o arquivo de log
/var/log/apt/history.log
.Por exemplo:
Não é perfeito, mas é muito bom em deixar claro exatamente o que eu instalei manualmente. Coloque um
-B 1
no grep para ver quando ele foi instalado.Saída de exemplo
Não tenho certeza se isso pega
aptitude
ou não. Parece não pegar instalações do aplicativo de desktop Ubuntu Software.fonte
apt-mark showauto | grep -iE '^foobar$'
produzirá "foobar" se o pacote foi instalado automaticamente, nada diferente.aptitude search '!~M ~i'
listará os pacotes que não foram instalados automaticamente. É uma pena que o aptitude não faça parte da instalação padrão no Ubuntu Desktop a partir da 10.10.fonte
aptitude search
mostra todos os pacotes não apenas aqueles que são instalados manualmente (suponho que é o que o OP queria)aptitude search '!~M ~i'
e lista 1043 pacotes. Não há como instalar tantos pacotes manualmente.O script a seguir imprimirá todos os pacotes que não estão configurados para instalação automática e, portanto, foram instalados manualmente:
é baseado em como o apt-mark imprime os pacotes instalados automaticamente.
fonte
sys.exit(1)
semimport sys
pode resultar em um erro nas versões mais recentes do python. Ouimport sys
useexit(1)
.Para obter uma lista de todos os pacotes (não instalados, instalados pelo usuário ou instalados por padrão em todos os PPAs),
apt
use o seguinte método:apt list [option]
As opções possíveis úteis para isso são:
--installed
para exibir apenas os pacotes que estão instalados no sistema (em mais de 50.000)--manual-installed
para listar os pacotes que foram explicitamente instalados por um comando, diretamente ou como dependências.Como alternativa, você pode fazer:
apt list --manual-installed | grep -F \[installed\]
para obter uma lista de pacotes que resultaram apenas de comandos do usuário e suas dependências e obter informações adicionais sobre eles, como versão e arquitetura suportadas (x86, x86_64, amd64, all etc.)fonte
Como várias pessoas comentaram, o apt-mark showmanual parece um pouco complicado (e eu o relatei como bug 727799 ). Quando estou usando, na verdade, ele relata muitas coisas que nem sequer estão logadas / var / lib / apt / extended_states (onde isso deveria estar armazenado) e o apt-get não está registrando as coisas instaladas em / var / lib / apt / extended_states (apenas em / var / lib / dpkg / status). O script python do txwikinger acima chama diretamente de / var / lib / apt / extended_states, mas se você o estiver usando hoje, a sintaxe pode não funcionar (a minha apenas começou a gerar erros com o Kubuntu 13.10). A sintaxe atualizada é:
Para mim, essa era uma lista muito curta de 5 itens que também não parecem precisos.
fonte
sys.exit(1)
semimport sys
pode resultar em um erro nas versões mais recentes do python. Ouimport sys
useexit(1)
.Eu gostaria de dar uma solução GUI.
Abrir
Synaptic Package Manager
Vamos para
Status
Clique
Installed (manual)
Ele fornecerá a lista de pacotes instalados manualmente pelo apt ou aptitude.
Infelizmente, não encontrei nenhuma opção
Custom Filters
para descobrir se umfoobar
pacote foi instalado manual ou automaticamente.Se o pacote estiver abaixo,
Installed
mas não abaixoInstalled (manual)
, ele foi instalado automaticamente. Se o pacote estiver abaixoInstalled (manual)
, ele foi instalado manualmente.fonte
Se ninguém lhe der uma resposta agradável usando um comando apr-something, você poderá fazê-lo da maneira mais difícil . O Apt-get armazena suas informações em / var / lib / apt / extended_states. Qualquer arquivo instalado automaticamente será adicionado a esse arquivo. Se você instalar um pacote já neste arquivo manualmente, o pacote permanecerá nesse arquivo, mas com Instalação automática: 0 na segunda linha. Não é deletado.
Nota: Conforme o esperado, melhores respostas que provavelmente funcionarão se aparecerem alterações no posicionamento do arquivo. Eu mantenho o meu apenas no caso de as informações no local do arquivo serem úteis.
fonte
apt-get install liferea
e ele não foi instalado, mas obtive uma saída que era algo como "marcado como instalado manualmente". Agora liferea ainda está no arquivo, exceto que a próxima linha tem um em0
vez de a1
. Além disso, você deve alterar seu padrão regex para em" foobar$"
vez de apenasfoobar
.Depois de pesquisar muito, consegui montar esse script. Funciona bem para mim:
fonte
sort -u
vez desort | unique
. Comoapt-mark
não exibe arquitetura, você deve retirá-lo da saída do dpkg antes das operações definidas (ou usardpkg-query -W -f='${Package}\n'
). Além disso, o dpkg pode listar alguns pacotes que não estão instalados atualmente. Quanto ao "desc", você pode usar o `dpkg-query -W -f = '# $ {binário: Resumo} \ n' $ pack, que é mais rápido.apt-mark
pode exibir arquitetura para alguns pacotes, mas não para tantos comodpkg -l
.apt-cache search
é lento. Obtendo uma lista de datas instalados com antecedência usando algo como help.ubuntu.com/community/ListInstalledPackagesByDate pode ser mais eficienteComo Li Lo disse,
apt-mark showauto
você deve obter uma lista enorme de coisas instaladas automaticamente.Agora, para mostrar as coisas que são instaladas manualmente, verifica-se que existe um adorável modificador de pesquisa simples para o aptitude. Mas você não quer fazer isso. Você quer escrever um enorme comando bash que faça alguma ciência do foguete.
Nota: Esta é mais uma ilustração de quão legal você ficará, liberando comandos massivos do bash para todos os seus amigos.
Eu quebrei em duas linhas para facilitar a leitura. O que isso faz?
apt-mark
fonte
comm -3 <(dpkg -l | grep '^ii' | cut -d \ -f 3|sort) <(apt-mark showauto|sort)
é propriamente melhor;)Isso listará todos os pacotes instalados manualmente sem: dependências, pacotes desinstalados, pacotes instalados durante a instalação do sistema.
fonte