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

本文介绍如何通过端口名为PKG的软件包管理工具帮助在FreeBSD中管理预编译的二进制包应用程序。

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

Ports存储库提供了从源代码编译应用程序及其依赖关系所需的工具,同时还维护了一个庞大的预编译包集,目前有24000个包,可以通过pkg命令安装在FreeBSD系统上。

要求:

  1. FreeBSD 11.x安装

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

1.端口仓库在FreeBSD中分类,每个类别由/ usr / ports / file系统路径中的目录表示。

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

# ls /usr/ports/
列出端口存储库类别

列出端口存储库类别

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

假设要显示数据库类别提供的所有可用软件包,请在控制台中执行以下命令。 通过较少的命令管道结果通过输出更容易导航。

# ls /usr/ports/databases/ | less
列出数据库类别

列出数据库类别

3.为了查看类别中有多少包,请列出类别目录,并通过wc命令管道输出结果,如下例所示。

# ls /usr/ports/databases/ | wc -l
列出类别中的可用包

列出类别中的可用包

如上图所示,FreeBSD数据库类别包含1000多个数据库预编译包。

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

在下面的例子中将搜索mongodb数据库可用包和蛤蜊防病毒安全包。

# ls /usr/ports/databases/ | grep mongodb
# ls /usr/ports/security/ | grep clam
列出MongoDB软件包

列出MongoDB软件包

您可以看到,FreeBSD Ports中可以使用多个版本的应用程序。

列出蛤蜊防病毒软件包

列出蛤蜊防病毒软件包

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

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

# ls /usr/ports/*/*mailx
查找软件类别

查找软件类别

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

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

# /usr/libexec/locate.updatedb
更新查找数据库

更新查找数据库

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

# locate mailx
搜索软件包

搜索软件包

如您所见, Mailx实用程序有两个可用的软件包 ,位于/ usr / ports / mail / category中。

8.类似于使用locate命令查找包,还可以使用whereis命令来查看应用程序类别。

# whereis mailx
查看软件类别

查看软件类别

通过PKG Command在FreeBSD中搜索软件

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

# pkg search package_name
搜索和查找包

搜索和查找包

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

# pkg search -o package_name
搜索包装类别

搜索包装类别

在FreeBSD中管理软件

11.为了从FreeBSD的Ports仓库安装一个预编译的包,请按照下面的示例所示发出pkg命令。

# pkg install package_name
在FreeBSD中安装软件包

在FreeBSD中安装软件包

要查询有关系统中特定安装包的信息,请执行以下命令。

# pkg info package_name
查询安装的软件包信息

查询安装的软件包信息

13.如果软件包尚未安装在系统中, pkg info命令开关将显示“ 没有与package_name匹配的软件包 ”消息,如下图所示。

# pkg info tcpdump
查找包信息

查找包信息

14.为了在FreeBSD中列出所有安装的软件包,请执行pkg info命令,无需任何选项或开关。

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

# pkg info | grep ftp
列出FreeBSD中的所有安装的软件包

列出FreeBSD中的所有安装的软件包

15.为了从系统中删除包,请发出以下命令。

# pkg remove package_name
or
# pkg delete package_name
在FreeBSD中删除软件包

在FreeBSD中删除软件包

16.如果要防止拆卸或修改已安装的软件包,可以使用pkg命令的锁定开关,如下图所示。

# pkg lock package_name
从FreeBSD中删除软件包

从FreeBSD中删除软件包

解锁 pkg命令开关将允许您删除程序包限制并修改或卸载程序包。

# pkg unlock package_name

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

# pkg which /path/to/executable
查找命令或文件包名称

查找命令或文件包名称

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

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

# 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
更新FreeBSD中的软件包

更新FreeBSD中的软件包

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

# pkg stats
列出安装的软件包摘要

列出安装的软件包摘要

要删除系统中安装的软件包遗留的所有依赖关系,请执行以下命令。

# pkg autoremove
删除依赖关系包

删除依赖关系包

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

# pkg clean -a -n  
# pkg clean -a -y
删除PKG本地缓存

删除PKG本地缓存

就这样! 您可以看到, FreeBSD有一个令人印象深刻的包收集系统,类似于Linux发行版中使用的包管理工具,如YumRPMAPT ,大量的预编译软件二进制文件和简单有效的命令行pkg,可以以体面的方式来管理软件。