什么是 /Library/StagedExtensions,如何移除扩展?

22
我想完全从 macOS High Sierra 中卸载 Parallels。 除了某些存储在 /Library/StagedExtensions/Parallel Desktop.app 下的 Parallels 扩展之外,我已从磁盘中删除了所有东西。
我认为这个位置与用户批准的扩展有关,但我想找到一种方法来删除/卸载它们。如果尝试删除这些扩展,即使具有 root 权限也会显示“操作不允许”。
有任何想法吗?

你是否尝试检查内核扩展是否已通过命令kextstat加载或在内核中? 运行此kextstat命令并检查您是否有任何并行扩展。 - Vikram Sinha
6个回答

37

有一种新的方式来清除StageExtensions文件夹,如下所示

sudo kextcache --clear-staging

此命令将清空 /Library/StageExtensions 文件夹。若安装软件时出现权限错误,我们无需进入恢复模式并手动删除该文件夹。


2
对我来说,它没有永久删除目录。在下一次重启后,一切都回来了。 - phdoerfler

20
在我的情况下,当您使kext缓存无效时,已删除的kext会从StagedExtensions中消失。
sudo rm -rf /Library/Extensions/Parallel\ Desktop.app # check if the name is correct so you don't delete some other kext
sudo kextcache -invalidate /
# now you should not see your deleted kext here
ls /Library/StagedExtensions/

更新2019:

有关所有详细信息,请参见man页面:man kextcache。 与-invalidate相关的摘录,简写为-i

 -i os_volume, -invalidate os_volume
              Rebuild out-of-date caches and update any helper partitions
              associated with os_volume.

              This option mimics sudo touch /System/Library/Extensions on
              os_volume.  If kextcache cannot find or make sense of
              os_volume/usr/standalone/bootcaches.plist, the volume is treated
              as if no caches need updating: success is returned.

还有新的选项:

     -clear-staging
          Clears the kernel extension staging area by removing all staged content.

     -prune-staging
          Prunes the kernel extension staging area by removing all kernel extensions
          no longer present in their original location.

看起来 -prune-staging 只会删除已删除的扩展,从下一次 kext 缓存重建中节省了一点时间。

请参阅 Mojave 手册页 https://www.unix.com/man-page/mojave/8/KEXTCACHE/,其中包含这些新选项。


这只回答了问题的一半,没有解释这个文件夹的用途。 - Elliott B
嗯...只有苹果知道为什么叫它这个名字,但从外观上看,它似乎用于“分阶段”使用的内核扩展,例如缓存、验证并准备好下一次启动。内核扩展在成功启动后被复制到那里 - 例如它们被验证并批准/分阶段用于下一次启动。至少我是这样理解的。 - Dalibor Filus

4

sudo kextcache --clear-staging

这条命令在文件夹HD/Library/中执行。

提示:我相信Parallels会将某些文件直接写入引导加载程序/内核。在按住CMD+R键重启Disk Utility Terminal后运行此命令后,扩展名从/Library中被移除了。

希望这样讲清楚了。


1
请解释一下您的解决方案如何以及为什么适用于这个问题。 - Ayazmon

3

我曾经遇到了卸载ScreenFlow的TelestreamAudio.kext的类似问题。可能出现的情况是,当您处于常规模式时,StagedExtensions中的kext正在使用或受保护。一旦进入恢复模式,您就可以在不禁用系统完整性保护的情况下删除它。以下步骤对我有效,但请谨慎操作。

  • 点击菜单。选择重新启动
  • 按住command-R进入恢复系统
  • 从恢复菜单中选择磁盘工具
  • 在磁盘工具中点击您的主硬盘(例如Macintosh HD),然后点击挂载
  • 退出磁盘工具
  • 在菜单栏中点击实用工具,选择终端
  • 使用以下命令:

.

cd /Volumes/Macintosh\ HD/Library/StagedExtensions/Library/Extensions/
rm -rf NAME_OF_EXTENSION.kext
  • 关闭终端应用程序
  • 点击菜单并选择重新启动

从那里开始,我能够重新安装ScreenFlow的音频kext并使其正常工作。这也可能帮助您完全删除Parallels kext。


0

如果您已经从/Library/Extensions中删除了扩展程序,请从启动台打开终端应用程序,复制/粘贴以下命令并按Enter键运行:

sudo kextcache -prune-staging

如其他评论中提到的,这将仅删除不再位于其原始位置即/Library/Extensions中的内核扩展程序。

您从/Library/Extensions中删除的扩展程序将随后从/Library/StagedExtensions/中消失。这不会影响其他内核暂存的扩展程序。

/Library/StagedExtensions/是一个中间缓存区,用于在您启动会话后存储您的扩展程序。如果对/Library/Extensions进行更改,暂存区不会立即受到影响,我认为这旨在提高稳定性和安全性。


-1
这是由于系统完整性保护(SIP)所致。 您可以禁用它(不建议),并手动删除kext。
(来自https://www.imore.com/el-capitan-system-integrity-protection-helps-keep-malware-away
  • 单击菜单。选择重新启动...
  • 按住命令-R以启动恢复系统。
  • 单击“实用工具”菜单,然后选择“终端”。
  • 输入csrutil disable,然后按回车键。
  • 关闭终端应用程序。单击菜单,然后选择重新启动....
如果您随后决定重新启用SIP(我真诚地希望您这样做),请重复这些步骤,改用csrutil enable

1
不,以上并不是解决问题的方法。客户不会禁用并删除SIP。我猜这是苹果的一个严重漏洞。 - hrishikesh chaudhari
我已经向苹果报告了这个问题,但是我还没有得到他们的任何回复。如果他们回复了,我会告诉你们的。 - hrishikesh chaudhari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接