Como verifico se um pacote está instalado no meu servidor?

174

Eu instalei recentemente o Ubuntu Server edição 13.10 (Saucy Salamander). Mas encontrei um pouco de problema.

No final da instalação, ele solicita vários pacotes extras, quer você os queira ou não, como o servidor OpenSSH e o host da máquina virtual. Aqui está o que eu estou olhando:

Digite a descrição da imagem aqui

Agora, meu problema é que não consigo me lembrar se marquei a caixa de seleção "host da máquina virtual". Como verifico se meu servidor tem os pacotes correspondentes?

Quais pacotes vêm com o host da máquina virtual?

D.Zou
fonte
1
$ apt-cache policy <package-name>, por exemplo$ apt-cache policy dillo
Daniel

Respostas:

230

Você está procurando conhecer todos os comandos do dpkg com opções? Leia o link abaixo.

15 comandos dpkg para gerenciar servidores Linux baseados no Debian

Para listar todos os pacotes instalados

Aqui, "less" é um simples leitor de texto usado para rolar pela lista de pacotes em um novo buffer que é aberto na janela existente do terminal. A lista não será misturada com outros comandos e saídas do terminal. Pressione 'q' para retornar ao prompt do terminal. Veja "menos homem" para mais informações.

dpkg -l | less

Para verificar se um pacote está instalado ou não:

dpkg -l {package_name}
dpkg -l vlc

Para verificar se o pacote está instalado ou não (por exemplo, vlc). Se instalado, inicie o pacote:

dpkg -l | grep vlc

Mostra o local em que o pacote está instalado. O "-S" (S maiúsculo) significa "pesquisa"

sudo dpkg -S {package_name}
sudo dpkg -S skype

Para usar o Grep para pesquisar:

dpkg -l | grep {keywords}
dpkg -l | grep pdf
Babin Lonston
fonte
1
Qual é a diferença entre isso e dpkg-query -l "packagename"
heypaleblue
4
Não dependa do código de saída de dpkg -l packagename, pois ele pode retornar com um código de saída 0, mesmo que o pacote não esteja totalmente instalado - consulte: github.com/bitrise-io/bitrise/issues/433
Viktor Benei
dpkg -l | cut -d " " -f 3 | grep "^vlc"para mostrar todos os nomes de pacotes que começam comvlc
techtonik anatoly
Para sua informação, isso não funciona para os meta-pacotes, pois eles não se correlacionam diretamente com um dpkg. Sua resposta responde à pergunta conforme solicitado.
mtalexan
34

Usar dpkg

Este comando é o gerenciador de pacotes debian.

Você pode listar todos os pacotes instalados com

dpkg -l

Você pode ver detalhes de um pacote específico com

dpkg -p packagename

E para saber se está instalado, use

dpkg -s packagename | grep Status

Você pode aprender qual pacote contém o software que deseja com

apt-cache search name*  

No seu caso, você deve usar este comando para pesquisar o nome do pacote que deseja

apt-cache search virtual machine host 
onurbekiroglu
fonte
29

apt -qq list PACKAGE também pode ser usado para verificar se o PACKAGE está instalado.

Se instalado, ele imprimirá algo como (com [installed]no final da linha):

$ apt -qq list awscli
awscli/stable,now 1.4.2-1 all [installed]

Se não estiver instalado, a saída será:

$ apt -qq list awscli
awscli/stable 1.4.2-1 all
Viktor Benei
fonte
1
Você pode colocar uma estrela no final do nome do pacote para um curinga.
Brannon 22/10
3
Você também pode usar a opção --installed para que esse comando limite as correspondências realmente instaladas.
mtalexan
2
Para que serve -qq? Parece que funciona de forma idêntica sem ele, e essa opção não está no manualman apt
Gabriel Staples
3
@GabrielStaples Parece que o apt listcomando ainda não está totalmente documentado. Alguns testes rápidos no 16.04 parecem indicar que -qé sinônimo de --quietopção. O primeiro -qimpede que a palavra "Concluído" seja impressa. O segundo também impede que "Listagem ..." seja impressa.
Anthony Geoghegan
14

Eu encontrei uma maneira de verificar a instalação de pacotes com apenas o comando dpkg-query e sem pipes.

Eu procurei por essa solução enquanto escrevia uma tarefa para o manual ansible.

Então, você pode fazer algo assim:

/usr/bin/dpkg-query --show --showformat='${db:Status-Status}\n' '<your package name>'

Esta é apenas mais uma maneira de fazer a coisa.

DenKoren
fonte
tubos em ansible podem ser usados ​​com o shellmódulo.
precisa saber é
4

Estou escrevendo uma nova resposta, pois o Tasksel 'Task names' NÃO aparece dpkgou faz aptperguntas. Significando que as outras respostas estão incompletas (ou incorretas).

"Não lembro se marquei a caixa de seleção 'host da máquina virtual'".

Verifique se há um asterisco pelo nome após a reexecução sudo tasksel.
(ou um ' i ' se estiver em execução tasksel --list-tasks).

Se você não vê isso, provavelmente não possui o ' meta-pacote tasksel ' instalado.


"..Como verifico se o meu servidor tem os pacotes correspondentes?"

Se você deseja descobrir o que está instalado no meta-pacote de tarefas do Virtual Machine Host:

tasksel --list-tasks

(no seu caso tasksel --list-tasks | grep virté suficiente)

Isso fornece o nome apropriado da tarefa e uma indicação sobre se está instalado.

No seu caso, esse nome do taskel é virt-host.


"Quais pacotes vêm com o host da máquina virtual?"

No último comando, encontre o nome da tarefa tasksel.
Isso é necessário para o próximo comando:

tasksel --task-packages virt-host

Isso lista o meta-pacote individual de Tasksel (indicado por '^' em anexo) que compõe o nome.
No seu caso é virt-host^.

Depois de encontrar o meta-nome adequado, você pode usar o apt:

 apt show virt-host^ | grep "Package:"

(ou apt-cache show ...se apt shownão funcionar.)

Isso mostrará todos os pacotes que compõem o meta pacote fornecido.

Então:

 dpkg -l {each individual pkg name listed above}

Isso informará se o pacote individual está instalado / desinstalado (observado pela segunda letra: o status 'i' significa instalado). Faça isso para todos os pacotes listados no pacote task / meta.

Isso deve responder às perguntas originais.

Nota lateral: /usr/share/tasksel/descs/ubuntu-tasks.desc também contém descrições dos meta-pacotes Tasksel. Se você: grep "virt" /usr/share/tasksel/descs/ubuntu-tasks.descele mostrará o nome apropriado do meta-pacote do APT. (No seu caso, isso é ubuntu-virt-server). Você também pode usar aptcomandos com esse meta-nome.

Se você deseja remover os pacotes tasksel, isso entra um pouco no mato. Por favor, consulte https://askubuntu.com/a/88897/169878 ou qualquer número de outras respostas disponíveis.

Observe que os pacotes apt "meta" não correspondem aos nomes dos pacotes Tasksel. Consulte a página da comunidade Tasksel para obter mais informações.

bshea
fonte
1
Ambas as perguntas foram respondidas corretamente. Se você recusar, dê um motivo ou me diga por que eles não o são.
bshea
3

Use o tasksel ( sudo apt-get install taskselse você ainda não o possui) e execute tasksel --list-tasks.

tasksel imprimirá uma lista das tarefas, e haverá um ipróximo a cada tarefa instalada e um upróximo a cada tarefa que não estiver instalada.

Se você deseja instalar a tarefa, use tasksel install <task>. O nome da tarefa que você está procurando é virt-host.

Os itens de seleção de software são chamados de "tarefas".

Blake R
fonte
obrigado por me dizer o nome da tarefa, esse era um dos meus problemas, não tinha certeza de qual pacote procurar.
21414 D.Zou
2

Se alguém estiver interessado, criei um pequeno script com o qual você pode instalar automaticamente a partir de uma lista de pacotes ou aplicativos ou simplesmente verificar se eles já estão instalados:

#!/bin/bash
apt -qq list YOUR_LIST_GOES_HERE | grep -v "installed" | awk -F/ '{print $1}' > /root/list.txt
packages=$(cat /root/list.txt)
grep -q '[^[:space:]]' < /root/list.txt
CHECK_LIST=$?
if [[ $CHECK_LIST -eq 1 ]]; then
echo "Your packages are already installed"
else
echo "Installing packages"
apt-get  install -y $packages
fi

Espero que ajude alguém.

Claudio Taccogna
fonte
2

Solução mais simples:

Agora existe um apt listcomando que lista os pacotes instalados. Você também pode procurar um pacote específico com

apt list <package>

Veja man aptpara mais informações. Se você não souber o nome exato do pacote, poderá usar apt searchseguido por parte dele para ver uma lista de pacotes relacionados.

sk8forether
fonte