/pkg 到底是什么?

Hacker News Top 新闻

摘要

作者在排查 PATH 问题时发现 macOS 27.0 新增了根目录 `/pkg`(含 env、etc、inv、var 子目录),并通过 path_helper 被加入全局 PATH,但目前尚无人清楚该目录的确切用途,可能与未来的官方包管理系统有关。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/10/19 01:59

# /pkg 到底是什么? 来源:https://anderegg.ca/2026/10/18/what-the-heck-is-pkg ### 2026年10月18日 最近在排查一个 PATH(https://en.wikipedia.org/PATH_%28variable%29)问题时,我注意到 PATH 中有一条指向 `/pkg/env/global/bin` 的条目。起初我担心是不是系统出了严重问题。结果发现,这是 macOS 27.0 的一部分……只不过目前还没人知道它到底有什么用。 先说点背景。自 2007 年的 Mac OS X 10.5 以来,操作系统就内置了一个 `path_helper`(https://hea-www.harvard.edu/~fine/OSX/path_helper.html)工具。它会从 `/etc/paths` 以及 `/etc/paths.d` 目录下的所有文件中读取条目。虽然理论上可以利用这个系统,但我(我猜大多数人也一样)通常是通过 `.zshrc` 文件(https://zsh.sourceforge.io/Doc/Release/Files.html#Startup_002fShutdown-Files)或类似方式来添加新的 PATH 条目的。`path_helper` 工具似乎主要是供 Apple 自己使用的。 在 macOS 10.15 中,`/etc/paths.d` 下新增了一个条目,以支持 `rvictl` 工具(https://developer.apple.com/forums/thread/125402?answerId=392314022#392314022)的新位置。在 macOS 13.3 中,Apple 又添加了一些新条目(https://eclecticlight.co/2023/04/05/how-cryptexes-are-changing-macos-ventura/#comment-85119)以支持 Cryptexes(https://eclecticlight.co/2023/04/05/how-cryptexes-are-changing-macos-ventura/)。如今在 macOS 27.0 中,出现了一个新的 `10-pmk-global` 文件¹(https://anderegg.ca/2026/10/18/what-the-heck-is-pkg#fn:1),它将 `/pkg/env/global/bin` 添加到了 PATH 列表中。 我是在 PATH 中发现这个以 `/pkg` 开头的陌生条目后才开始研究的。我以为是哪里出了问题。然后我发现在我的文件系统根目录下确实有一个 `/pkg` 目录。稍微慌了一下之后,我便一头扎进了这个兔子洞。 在一篇关于 macOS 启动卷结构如何更新(https://eclecticlight.co/2026/09/19/macos-tahoe-26-4-changed-boot-volume-structure/)的文章中,Howard Oakley 解释说,`pkg` 目录在 macOS 26.4 时被添加到了 Data 卷中,但直到 27.0 才被添加到签名系统卷(Signed System Volume)的根目录。他还指出,这在某种程度上是一件大事(https://eclecticlight.co/2026/09/19/macos-tahoe-26-4-changed-boot-volume-structure/#comment-116877)。 奇怪的是,据我所知,似乎没有人知道这个新目录是干什么用的!Apple 更新了文件系统结构,把它加入了每个人的 PATH 中,但却没有一个说得通的理由,这确实很奇怪。 `/pkg` 目录包含四个子目录:`env`、`etc`、`inv` 和 `var`。从它的名字和这些子目录来看,它可能是为即将到来的第一方包管理系统准备的——但这纯属大胆猜测。Apple 最近刚接手了 Swift Package Index(https://www.theregister.com/software/2026/06/25/apple-takes-over-swift-package-index-vows-to-remove-github-dependency/5262048),但这看起来与此无关。我不明白为什么需要一个根级别的目录来管理项目级别的依赖。另外,`/etc/paths.d/10-pmk-global` 中的 "pmk" 代表什么也不清楚。 希望我们能在某个时候获得更多关于此事的细节。在此期间,希望这些信息能帮助其他人避免看到 PATH 中这条条目时惊慌失措。 ---

相似文章

不要在路径中使用波浪号

Hacker News Top

一篇技术博文指出在 shell 配置中用引号包裹的 `PATH="$PATH:~/.local/bin"` 不会展开波浪号,导致当前目录下的字面 `./~/` 路径被加入 PATH,带来潜在劫持风险;建议改用 `$HOME`,并介绍了 nono 沙箱工具的相关警告与排查方法。

两个路径分隔符的故事(2021)

Lobsters Hottest

解释了macOS如何处理两个路径分隔符(斜杠和冒号),这是由于它从经典Mac OS和NeXTSTEP双重继承而来,并且这导致文件在Finder中显示为斜杠,但在终端中显示为冒号。

@GitHub_Daily: Birth,一个开源的 macOS 启动项管理器,把用户级、全局级、系统守护进程、登录项四层全拉到一个界面里。 每个启动项都能看到开发者签名身份,冒充系统签名的会直接标红提示,一键禁用或移除。 GitHub:http://github.c…

X AI KOLs Timeline

Birth 是一个开源的 macOS 启动项管理器,集中管理用户级、全局级、系统守护进程和登录项,并显示代码签名身份、标记伪装的系统签名,支持一键禁用/移除和搜索定位。

pkgbump:从简陋工具到不可或缺的助手

Lobsters Hottest

Michał Górny 详细介绍了 pkgbump 的演变过程,这是一款用于自动化软件包版本升级的 Gentoo 开发者工具,从一个简单的脚本发展成一个支持版本增量和组操作的通用助手。

pkgcli: PackageKit 的命令行界面

Lobsters Hottest

介绍了 pkgcli,一个全新的 PackageKit 命令行客户端,提供人性化命令、彩色输出、JSON 脚本模式以及更好的国际化支持,取代了已有十年历史的 pkcon。