安装结束时,它会询问一些是否需要额外的软件包,例如OpenSSH服务器和虚拟机主机。我正在查看的是:
现在,我的问题是我不记得是否已选中“虚拟机主机”复选框。如何检查服务器是否具有相应的软件包?
虚拟机主机附带哪些软件包?
#1 楼
您是否想了解所有带有选项的dpkg命令?阅读以下链接。15个dpkg命令,用于管理基于Debian的Linux服务器
列出所有已安装的软件包。
less
是一个简单的文本阅读器,用于滚动浏览其中的软件包列表。在现有终端窗口中打开的新缓冲区。该列表不会与其他终端命令混合并输出。按q返回到终端提示。有关更多信息,请参阅man less
。dpkg -l | less
要检查是否已安装软件包:
dpkg -l {package_name}
dpkg -l vlc
要检查是否已安装软件包(例如
vlc
)。如果已安装,请启动软件包:dpkg -l | grep vlc
显示软件包的安装位置。
-S
(大写S)代表“搜索” sudo dpkg -S {package_name}
sudo dpkg -S skype
要使用Grep进行搜索:
dpkg -l | grep {keywords}
dpkg -l | grep pdf
评论
这和dpkg-query -l“ packagename”有什么区别
–heypaleblue
15年5月24日在17:56
不要依赖dpkg -l软件包名称的退出代码,因为即使未完全安装该软件包,它也可能返回0退出代码-参见:github.com/bitrise-io/bitrise/issues/433
–维克多·贝内(Viktor Benei)
16-10-25在18:08
dpkg -l |切-d“” -f 3 | grep“ ^ vlc”显示所有以vlc开头的软件包名称
–anatoly techtonik
17年4月14日在18:49
仅供参考,这不适用于meta包,因为它们不直接与dpkg相关。您的回答确实会按要求回答问题。
– mtalexan
17年10月11日在19:15
@heypaleblue他们是一样的。在手册页上:“ dpkg也可以用作dpkg-deb(1)和dpkg-query(1)的前端。支持的操作列表可在后面的“操作”部分中找到。遇到的dpkg只是使用指定的参数运行dpkg-deb或dpkg-query ...”
–于富兰
19年11月25日在22:19
#2 楼
apt -qq list PACKAGE
也可用于检查是否安装了PACKAGE。如果已安装,它将打印以下内容(在行尾带有
[installed]
):$ apt -qq list awscli
awscli/stable,now 1.4.2-1 all [installed]
如果未安装,输出将是:
$ apt -qq list awscli
awscli/stable 1.4.2-1 all
评论
您可以在包名称的末尾加一个星号,以用作通配符。
–布兰农
16-10-22在3:09
您也可以对该命令使用--installed选项,以限制实际安装的匹配项。
– mtalexan
17-10-11在19:17
-qq代表什么?如果没有它,它似乎可以正常工作,并且该选项不在手动操作中
–加百利·斯台普斯
18 Mar 8 '18 at 0:09
@GabrielStaples似乎apt list命令尚未完全记录。在16.04上进行的一些快速测试似乎表明-q是--quiet选项的同义词。第一个-q阻止打印单词“ Done”。第二个也防止打印“ Listing ...”。
– Anthony Geoghegan
18-4-3在11:39
即使在仿生上,合适的列表似乎仍然是“ WIP”。无论如何进行交互使用,它都能胜任。我认为,一般而言,apt系列并不适合脚本编写,在这种情况下,您仍然需要dpkg。
–于富兰
19年11月25日在18:43
#3 楼
使用dpkg
此命令是Debian软件包管理器。
您可以列出所有已安装的软件包,其中
dpkg -l
您可以通过
dpkg -p packagename
查看特定软件包的详细信息要了解其是否已安装,请使用
dpkg -s packagename | grep Status
,您可以了解哪个软件包包含所需的软件
apt-cache search name*
如果您使用的是,请使用此命令搜索所需的软件包名称
apt-cache search virtual machine host
评论
apt-cache也显示
– Rockallite
20年1月16日,0:56
#4 楼
我找到了一种仅需dpkg-query
命令且没有管道即可检查软件包安装的方法。我在编写用于ansible剧本的任务时搜索了此类解决方案。
您可以执行以下操作:
/usr/bin/dpkg-query --show --showformat='${db:Status-Status}\n' '<your package name>'
这只是做事情的另一种方法。
评论
外壳模块中可以使用ansible管道。
– sjas
17年8月27日在9:51
#5 楼
更简单的解决方案:现在有一个
apt list
命令列出了已安装的软件包。也可以使用apt list <package>
搜索特定的软件包。有关更多信息,请参见
man apt
。如果您不知道确切的软件包名称,则可以使用apt search
及其后一部分来查看相关软件包的列表。评论
这是维克托两年前提到的。
–于富兰
19年11月25日在21:57
#6 楼
我正在写一个新答案,因为Tasksel“任务名称”不会出现在dpkg
或apt
查询中。表示其他答案不完整(或错误)。“我不记得是否已选中“虚拟机主机”复选框。”
重新输入后,检查名称是否存在星号-运行
sudo tasksel
(如果正在运行tasksel --list-tasks
,则为“ i”)。如果未看到此消息,则可能未安装“ tasksel meta-package”。
”。 。如何检查我的服务器是否具有相应的软件包?“
如果要了解在Virtual Machine Host任务包元数据包下安装了什么,请执行以下操作:
tasksel --list-tasks
(在您的情况下
tasksel --list-tasks | grep virt
就足够了)这会给出正确的任务名称并指示是否已安装。
对于您而言,此任务名称是
virt-host
。“附带了哪些软件包虚拟机主机?”
从上一个命令中,找到taskel任务名称。下一条命令需要此命令:
tasksel --task-packages virt-host
此命令列出了组成名称的单个Tasksel元软件包(由附加的'^'表示)。您的情况是
virt-host^
。找到正确的元名称后,您可以使用apt:
apt show virt-host^ | grep "Package:"
(如果
apt-cache show
不起作用,请使用...
apt show
。)这将显示所有组成给定元软件包的软件包。
然后:
dpkg -l {each individual pkg name listed above}
这将告诉您是否已安装/卸载了单个软件包(第二个字母表示:“ i”状态表示已安装)。对task / meta程序包下列出的所有程序包执行此操作。
这应该回答原始问题。
旁注:
/usr/share/tasksel/descs/ubuntu-tasks.desc
还包含Tasksel元程序包的描述。如果您:grep "virt" /usr/share/tasksel/descs/ubuntu-tasks.desc
,它将显示正确的APT元软件包名称。 (您的情况是ubuntu-virt-server
)。您也可以将apt
命令与此元名称一起使用。如果要删除taskel软件包,则这会有点杂草。请查阅此Ask Ubuntu答案或那里的许多其他答案。
请注意,“元” apt软件包与Tasksel软件包名称不匹配。请查阅Tasksel社区页面以获取更多信息。
#7 楼
使用tasksel(如果尚未安装,请使用sudo apt-get install tasksel
)并运行tasksel --list-tasks
。tasksel将打印出任务列表,并且已安装的每个任务旁边都会有一个
i
。未安装的每个任务旁边都有一个u
。如果要安装任务,请使用
tasksel install <task>
。您要查找的任务的名称是virt-host
。软件选择项称为“任务”。
评论
感谢您告诉我任务名称,这是我的问题之一,不确定要查找哪个软件包。
–邹德D
2014年2月20日在22:11
#8 楼
我创建了一个小脚本,您可以使用该脚本从软件包或应用程序列表中自动进行安装,或者只是检查它们是否已安装:#!/bin/bash
apt -qq list YOUR_LIST_GOES_HERE | grep -v "installed" | awk -F/ '{print }' > /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
希望对您有所帮助。
评论
该命令总是说,不应在脚本中使用apt。
– Smar
20年4月23日在6:05
#9 楼
检查是否已安装某些软件包,否则请安装缺少的软件包pkgs='qemu-user pandoc'
if ! dpkg -s $pkgs >/dev/null 2>&1; then
sudo apt-get install $pkgs
fi
更多信息,请访问:https://stackoverflow.com/questions/1298066/check-if-an- apt-get-package-is-installed-and-then-install-it-if-its-not-on-linu / 54239534#54239534
以前在类似的技术中提到过:https:// askubuntu .com / a / 1102572/52975
#10 楼
另一种(不一定更好)的方式:查看字段APT-Manual-Installed
是否出现在apt show <pkgname>
中。如果不存在,则表示未安装该软件包。不幸的是,它没有在apt-cache show <pkgname>
中显示。和往常一样,
apt
是用于交互使用的,不建议用于脚本编写。
评论
$ apt-cache策略