网站搜索

在 FreeBSD 中管理软件包的 23 个有用的 PKG 命令示例


在本教程中,我们将解释如何通过 Ports 借助名为 PKG 的包管理工具来管理 FreeBSD 中预编译的二进制包应用程序> 软件集合存储库。

Ports 存储库提供了从源代码编译应用程序所需的工具及其依赖项,而且还维护了大量预编译包,目前超过 24.000 个包,可以使用pkg命令安装在FreeBSD系统上。

要求:

  1. FreeBSD 11.x 安装

在 FreeBSD 中的端口树中搜索和查找应用程序

1.Ports 存储库在FreeBSD 中分为几类,每个类别由/usr/ports/ 文件系统路径中的一个目录表示。

目录 /usr/ports/ 的简单列表将显示所有可用类别,如下面的屏幕截图所示。

ls /usr/ports/

2. 要查看属于某个类别的所有可用应用程序,请针对类别目录发出 ls 命令。

假设您想显示数据库类别提供的所有可用软件包,请在控制台中执行以下命令。通过 less 命令传送结果,以便更轻松地浏览输出。

ls /usr/ports/databases/ | less

3. 要查看某个类别中有多少个可用包,请列出类别目录并通过 wc 命令传输结果,如下例所示。

ls /usr/ports/databases/ | wc -l

正如您在上面的屏幕截图中看到的,FreeBSD 数据库类别包含超过1000 个数据库预编译包。

4. 为了查看某个类别中是否有特定应用程序,请再次使用 ls 命令并通过 grep 实用程序过滤结果,以搜索自定义应用程序。

在下面的示例中将搜索mongodb数据库可用包和clam antivirus安全包。

ls /usr/ports/databases/ | grep mongodb
ls /usr/ports/security/ | grep clam

正如您所看到的,FreeBSD Ports 中可以提供应用程序的多个版本。

5.如果您不知道某个软件属于哪个类别,您可以使用另一种方法来查找软件类别。使用 shell 通配符 * 字符在整个 Ports 目录树中搜索模式。

假设您想查看在哪个类别中可以找到 mailx 实用程序的软件包,您可以运行以下命令。

ls /usr/ports/*/*mailx

6. 搜索软件包及其所属类别的另一种方法是针对字符串模式使用locate 命令。

在执行搜索字符串之前,您应该使用以下命令更新locate 数据库。

/usr/libexec/locate.updatedb

7.更新定位数据库后,使用软件包名称中的关键字模式搜索特定软件包。例如,如果您想搜索 mailx 实用程序,您可以运行以下命令。

locate mailx

正如您所看到的,有两个可用于 mailx 实用程序的软件包,它们都位于 /usr/ports/mail/ 类别中。

8. 与使用locate命令查找包类似,您也可以使用whereis命令,查看应用程序类别。

whereis mailx

在 FreeBSD 中通过 PKG 命令搜索软件

9. 在 FreeBSD 中搜索和查找应用程序的最简单方法是通过 PKG 包管理命令行。为了搜索应用程序的二进制包,例如 postfix 软件,请发出以下命令。

pkg search package_name

10. 如果您想查看包属于哪个类别,请使用 -o 标志运行与上面相同的命令,如以下示例所示。

pkg search -o package_name

在 FreeBSD 中管理软件

11. 要从 FreeBSD 中的 Ports 存储库安装预编译的软件包,请发出 pkg 命令,如下例所示。

pkg install package_name

12. 要查询系统中特定已安装软件包的信息,请发出以下命令。

pkg info package_name

13. 如果软件包尚未安装在您的系统,如下面的屏幕截图所示。

pkg info tcpdump

14. 要列出 FreeBSD 中所有已安装的软件包,请执行不带任何选项或开关的 pkg info 命令。

针对 pkg info 命令的 grep 过滤器可以显示系统中是否已存在某些特定的软件包或应用程序,如下例所示。

pkg info | grep ftp

15. 要从系统中删除软件包,请发出以下命令。

pkg remove package_name
or
pkg delete package_name

16. 如果您想防止删除或修改已安装的软件包,可以使用 pkg 命令的 lock 开关,如下图所示。

pkg lock package_name

Unlock pkg 命令开关将允许您删除软件包限制并修改或卸载软件包。

pkg unlock package_name

17.为了找出命令或可执行文件属于哪个已安装的包,请发出以下命令,如下面的屏幕截图示例所示。

pkg which /path/to/executable

18. 要从 Ports 存储库本地下载软件包,而不在系统上安装软件包,请使用 运行 pkg 命令获取开关。

下载的二进制包是一个压缩的.txz文件,可以在/var/cache/pkg/系统路径中找到。

pkg fetch package_name
ls /var/cache/pkg/ | grep package_name

19. 要检查已安装的软件包是否存在常见漏洞或错误,请发出以下命令。

pkg audit -F

要查看影响早期版本软件包的旧漏洞列表,请发出以下命令。

pkg audit package_name

以下是为 FreeBSD 编译的 Nginx Web 服务器中发现的所有已知漏洞的摘录。

pkg audit nginx
nginx is vulnerable:
Affected versions:
<= 0.8.41 : > 1.4.4,1
nginx -- Request line parsing vulnerability
CVE: CVE-2013-4547
WWW: https://vuxml.FreeBSD.org/freebsd/94b6264a-5140-11e3-8b22-f0def16c5c1b.html

nginx is vulnerable:
Affected versions:
< 1.0.15
nginx -- Buffer overflow in the ngx_http_mp4_module
CVE: CVE-2012-2089
WWW: https://vuxml.FreeBSD.org/freebsd/0c14dfa7-879e-11e1-a2a0-00500802d8f7.html

nginx is vulnerable:
Affected versions:
< 1.4.7
nginx -- SPDY heap buffer overflow
CVE: CVE-2014-0133
WWW: https://vuxml.FreeBSD.org/freebsd/fc28df92-b233-11e3-99ca-f0def16c5c1b.html
...

在 FreeBSD 中维护包管理实用程序

20. 要确保软件存储库和所有已安装的软件包都是最新版本或安全补丁,请发出以下命令。

pkg update
pkg upgrade

21. 要显示远程存储库和本地软件包统计信息,例如系统中安装了多少软件包以及安装的软件占用了多少磁盘空间,请执行以下命令。

pkg stats

22. 要删除系统中已安装软件包留下的所有依赖项,请发出以下命令。

pkg autoremove

23. 为了自动删除远程下载包的包管理本地缓存目录,请运行以下命令。您应该首先验证本地下载的二进制包的列表。

pkg clean -a -n  
pkg clean -a -y

就这样!正如你所看到的,FreeBSD 拥有令人印象深刻的包收集系统,类似于 Linux 发行版中使用的包管理工具,如 Yum、RPM 和 APT,具有大量预编译的软件二进制文件和简单易用的包管理工具。有效的命令行,pkg,可以用来以适当的方式管理软件。