在 FreeBSD 中管理软件包的 23 个有用的 PKG 命令示例
在本教程中,我们将解释如何通过 Ports 借助名为 PKG 的包管理工具来管理 FreeBSD 中预编译的二进制包应用程序> 软件集合存储库。
Ports 存储库提供了从源代码编译应用程序所需的工具及其依赖项,而且还维护了大量预编译包,目前超过 24.000 个包,可以使用pkg命令安装在FreeBSD系统上。
要求:
- 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,可以用来以适当的方式管理软件。