Apenas o código
aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt
wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest \
| cut -f1 | sort -u > defaultinstalled.txt
comm -23 currentlyinstalled.txt defaultinstalled.txt
Explicação
Uma maneira de pensar sobre esse problema é dividir isso em três partes:
- Como obtenho uma lista de pacotes não instalados como dependências?
- Como obtenho uma lista dos pacotes instalados por padrão?
- Como posso obter a diferença entre essas duas listas?
Como obtenho uma lista de pacotes não instalados como dependências?
O seguinte comando parece funcionar no meu sistema:
$ aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt
Abordagens semelhantes podem ser encontradas nos links que Gilles postou como um comentário para a pergunta. Algumas fontes afirmam que isso só funcionará se você tiver usado o aptitude para instalar os pacotes; no entanto, quase nunca uso o aptitude para instalar pacotes e descobri que isso ainda funcionava. Os --disable-columns
impede aptitude de preenchimento linhas de nomes de pacotes com espaços em branco, que impeçam a comparação abaixo. Classifica | sort -u
o arquivo e remove duplicatas. Isso facilita muito a etapa final.
Como obtenho uma lista dos pacotes instalados por padrão?
Nota: Esta seção começa com um 'caminho errado' que eu acho ilustrativo. O segundo pedaço de código é aquele que funciona.
Isso é um pouco mais complicado. Inicialmente, pensei que uma boa aproximação seria todos os pacotes dependentes dos meta-pacotes ubuntu-minimal, ubuntu-standard, ubuntu-desktop e vários pacotes relacionados ao kernel do linux. Alguns resultados nas pesquisas do Google pareciam usar essa abordagem. Para obter uma lista dessas dependências, tentei o seguinte (que não funcionou):
$ apt-cache depends ubuntu-desktop ubuntu-minimal ubuntu-standard linux-* | awk '/Depends:/ {print $2}' | sort -u
Isso parece deixar de fora alguns pacotes que eu sei que tinham que vir por padrão. Ainda acredito que esse método funcione se alguém construir a lista correta de metapacotes.
No entanto, parece que os espelhos do Ubuntu contêm um arquivo "manifesto" que contém todos os pacotes na instalação padrão. O manifesto do Ubuntu 12.04.3 está aqui:
http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest
Se você pesquisar nesta página (ou na página de um espelho mais próxima de você):
http://mirror.pnl.gov/releases/precise/
Você deve conseguir encontrar o arquivo ". Manifest" que corresponde à versão e arquitetura que você está usando. Para extrair apenas os nomes dos pacotes, fiz isso:
wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest | cut -f1 | sort -u > defaultinstalled.txt
A lista provavelmente já estava classificada e única, mas eu queria ter certeza de que estava corretamente classificada para facilitar o próximo passo. Eu então coloco a saída defaultinstalled.txt
.
Como posso obter a diferença entre essas duas listas?
Esta é a parte mais fácil, já que a maioria dos sistemas tipo Unix tem muitas ferramentas para fazer isso. A comm
ferramenta é uma das muitas maneiras de fazer isso:
comm -23 currentlyinstalled.txt defaultinstalled.txt
Isso deve imprimir a lista de linhas exclusivas do primeiro arquivo. Portanto, ele deve imprimir uma lista de pacotes instalados que não estão na instalação padrão.
aptitude search '~i!~M' -F %p
não?http://releases.ubuntu.com/releases/trusty/ubuntu-14.04-desktop-amd64.manifest
e o adicional,| sed "s/ *$//"
mas ainda sem dados.apt-mark showmanual | sort -u
, conforme mostrado em outras respostas. Mais simples e não depende doaptitude
que não está instalado por padrão.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 (julho de 2014) nesta questão. Eles são uma combinação das duas respostas (1) e (2) . Note que eu originalmente postei esta resposta aqui .
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, embora 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.Ambos listam mais pacotes que a solução acima.
fonte
De acordo com
man apt-mark
:fonte
showmanual
está mostrando coisas comoxserver-xorg-video-vesa
, que eu juro que não instalei manualmente.Aqui está um exemplo de saída de
cat /var/log/apt/history.log
:Quanto à sua pergunta, filtre o material com grep (
cat /var/log/apt/history.log | grep Commandline
).Observe que esses arquivos são rotacionados; portanto, verifique outros para não perder nada:
NOTA :
Commandline
, portanto ogrep
truque não funcionará com eles.fonte
aptitude
e outros gerenciadores de pacotes. Se seus registros foram girados para longe, então você está sem sorte.Me deparei com este lindo oneliner enquanto procurava esta consulta
O forro é
Este oneliner filtra pacotes instalados pelo sistema usando logs de
/var/log/installer/initial-status.gz
Postarei o link no tópico original quando o encontrar, pois esse oneliner não é meu e não consigo me lembrar de onde o vi.
fonte
Você gostaria de dar uma olhada neste artigo .
No final do artigo, há um script python que deve fazer o que você deseja.
Foi escrito para (k) ubuntu . mas deve funcionar para o Ubuntu também.
fonte
Abaixo é uma adição à resposta Steven D's .
A seguinte linha parece estar truncando nomes de pacotes com 32 caracteres:
Isso parece funcionar:
veja esta resposta
fonte
Verificação de saída
/var/log/apt/term.log
fonte
Você também pode olhar para o arquivo
/var/lib/apt/extended_states
.Isso é útil se você quiser saber o que foi instalado em uma partição antiga.
fonte
Muito obrigado e parabéns a quem criou a jóia de um roteiro !!!
Queria adicionar meus 2 ¢ e adotei a data de instalação que deduzi de $ info.
Eu não dominei os detalhes por que os arquivos $ info são atualizados ou não e quando, mas funciona na prática.
Meu script lista as atualizações mais recentes dos pacotes sem dependência adicionados após a instalação.
Fazendo uma verificação periódica, eu estava vendo o que eu teria registrado manualmente sem uma única falta.
Ou seja, lotes de pacotes instalados pelo mesmo motivo. Infelizmente, as atualizações quebram essa ordem.
Após uma atualização do sistema, eu tinha uma lista dos meus pacotes adicionados que a atualização não atualizou seguida por aqueles que foram atualizados.
Arrumado! Desfrutar.
fonte