你想了解所有的 dpkg 命令及其选项吗?请点击下面的链接阅读。
15 dpkg commands to Manage Debian based Linux Servers
列出所有已安装的软件包
这里,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
dpkg -l | grep {keywords}
dpkg -l | grep pdf
dpkg -l packagename
的退出代码,因为即使软件包没有完全安装,它也可能返回0退出代码-请参见:https://github.com/bitrise-io/bitrise/issues/433 - Viktor Beneidpkg -l | cut -d " " -f 3 | grep "^vlc"
命令可以显示所有以vlc
开头的软件包名称。 - anatoly techtonikdpkg
也可以用作dpkg-deb(1)和dpkg-query(1)的前端。支持的操作列表可以在后面的操作部分找到。如果遇到任何此类操作,dpkg
只是使用给定的参数运行dpkg-deb
或dpkg-query
..." - Franklin Yudpkg -l {package_name}
的哪个输出会告知该软件包已安装? - Marinos Andpkg -l
输出的第一列必须显示 ii
才表示该软件包已安装。如果显示其他任何内容(例如 rc
),则表示未完全安装。 - joschdpkg -l
命令来检查软件包是否已安装,却没有解释输出的哪个部分告诉用户软件包是否已安装,竟然能获得超过300个赞同?请在您的回答中注明,dpkg -l
的第一列必须显示为ii
,否则表示该软件包未安装。 - joschapt -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
-qq
是用来做什么的?似乎没有它也能正常工作,而且在 man apt
的手册中也找不到这个选项。 - Gabriel Staplesapt list
命令还没有完全记录。在对16.04进行一些快速测试后,似乎 -q
是 --quiet
选项的同义词。第一个 -q
阻止了打印出 "Done" 这个词。第二个也阻止了打印出 "Listing... "。 - Anthony Geogheganapt list
似乎仍然是“工作中”。无论如何,对于交互使用来说,它能胜任工作。我认为总的来说,apt
系列并不适用于脚本编写,这种情况下你仍然需要 dpkg
。 - Franklin Yudpkg
这个命令是Debian软件包管理器。dpkg -l
dpkg -p packagename
dpkg -s packagename | grep Status
apt-cache search name*
apt-cache search virtual machine host
apt-cache show <pkg_name>
命令来显示关于已安装和可安装版本的详细信息。 - Rockalliteapt list <package>
apt list <package> --installed
--upgradeable
和--all-versions
标志。apt search
后跟部分名称来查看相关软件包的列表。这将允许您使用部分名称或正则表达式来过滤可用软件包的列表,但它没有像apt list
那样的便捷过滤标志。man apt
获取更多信息。apt list --installed | grep <package>
,--installed
部分是必需的。 - Manuel Jordan--installed
参数是必需的,用于仅查看已安装的软件包(我已更新我的帖子以使其更清晰),但使用 grep
命令有些多余,因为你可以直接将软件包指定给命令。 - sk8foretherlist --remote
(与search
相同,在存储库中进行搜索,无论<package>
是否完整)和list --install
(在本地计算机中进行搜索)所有当前已安装的。 - Manuel Jordandpkg-query
命令而不使用管道来检查软件包安装的方法。/usr/bin/dpkg-query --show --showformat='${db:Status-Status}\n' '<your package name>'
shell
模块一起使用。 - sjas我正在撰写一个新答案,因为Tasksel的“任务名称”在dpkg
或apt
查询中不显示。这意味着其他答案是不完整的(或错误的)。
“我记不起来是否已经勾选了'虚拟机主机'复选框..”
重新运行sudo tasksel
后,检查名称后面是否有星号(或者在运行tasksel --list-tasks
时是否有 ' i ')。
如果你没有看到这个,请很可能是没有安装'tasksel meta-package'。
tasksel --list-tasks
tasksel --list-tasks | grep virt
就足够了。virt-host
。
tasksel --task-packages virt-host
virt-host^
。 apt show virt-host^ | grep "Package:"
dpkg -l {each individual pkg name listed above}
这将告诉您单个软件包是否已安装 / 卸载(第二个字母为“i”表示已安装)。对于任务 / 元包下列出的所有软件包执行此操作。
这应该回答原始问题。
附注:/usr/share/tasksel/descs/ubuntu-tasks.desc
还包含Tasksel元包的描述。如果您执行以下操作:grep "virt" /usr/share/tasksel/descs/ubuntu-tasks.desc
,它将显示正确的APT元包名称。 (在您的情况下,这是ubuntu-virt-server
)。您也可以使用此元名称使用apt
命令。
如果您想要删除tasksel包,则会涉及到一些问题。请参阅this Ask Ubuntu answer或任何其他答案。
请注意,“meta”apt软件包与Tasksel软件包名称不匹配。有关更多信息,请参阅Tasksel社区页面。
sudo apt-get install tasksel
)并运行tasksel --list-tasks
。tasksel install <task>
。您要查找的任务名称是virt-host
。dpkg-query --show --showformat='${db:Status-Status}\n' package-name
dpkg-query --show --showformat='${db:Status-Status}\n' package-name 2>/dev/null
ii
。因此,查找的命令将是:# if it prints the package, it is installed
dpkg -l package-name | grep -E '^ii\s'
( ( dpkg -l package-name 2>&1 ) | grep -E '^ii' > /dev/null ) && echo installed
dpkg -l
列出了一些曾经安装过但现在并未安装的软件包,而且没有报错。另外,如果你要在shell管道中使用这个命令,dpkg -l
并不是你想要使用的命令。你应该使用dpkg-query --show --showformat='${db:Status-Status}\n'
或类似的命令,而不是dpkg -l
,因为后者产生的输出是给人类阅读而非脚本执行的。输出格式可能会发生变化,这样你的脚本就会出错。 - joschii
开头,所以基于 grep 的退出码(当没有匹配时为 false
)的 && echo installed
将不会被执行。无论如何,正如你正确指出的,dpkg-query
更好,所以我已经更新了我的回答。 - Marinos Anpkgs='hello certbot'
install=false
for pkg in $pkgs; do
status="$(dpkg-query -W --showformat='${db:Status-Status}' "$pkg" 2>&1)"
if [ ! $? = 0 ] || [ ! "$status" = installed ]; then
install=true
break
fi
done
if "$install"; then
sudo apt install $pkgs
fi
#!/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
apt
命令,这是命令一直都在说的。 - Smar
$ apt-cache policy <package-name>
,例如$ apt-cache policy dillo
- Daniel