【问题标题】:What is /Library/StagedExtensions for and how to remove extensions [closed]什么是 /Library/StagedExtensions 以及如何删除扩展[关闭]
【发布时间】:2018-03-14 02:25:31
【问题描述】:

我正在尝试从 macOS High Sierra 完全卸载 Parallels。 除了存储在 /Library/StagedExtensions/Parallel Desktop.app 下的一些 Parallels 扩展之外,我从磁盘中删除了所有内容

我认为该位置与用户批准的扩展程序有关,但我也想找到一种方法来删除/卸载这些扩展程序。如果我尝试删除扩展程序,它会说尽管有 root 权限,但仍不允许操作。

有什么想法吗?

【问题讨论】:

  • 您是否尝试过使用命令 kextstat 检查内核扩展是否已加载或在内核中?运行这个 kextstat 命令并检查你是否有任何并行扩展。

标签: kernel-extension macos-high-sierra


【解决方案1】:

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

sudo kextcache --clear-staging

此命令将清除 /Library/StageExtensions 文件夹。我们不需要进入恢复模式并手动删除此文件夹,以防安装软件时出现一些权限错误。

【讨论】:

  • 对我来说,它并没有永久删除该目录。下次重启后一切都恢复了。
【解决方案2】:

在我的情况下,当您使 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 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/,其中包含这些新选项。

【讨论】:

  • 这只回答了一半的问题,并没有解释这个文件夹是干什么用的
  • 嗯...只有 Apple 知道为什么这样称呼它,但从外观上看,它用于“分阶段”的 kext,例如被缓存,验证并准备好下次启动。成功启动后将 Kexts 复制到那里 - 例如它们经过验证和批准/准备用于下一次启动。至少这是我从中得到的。
【解决方案3】:

sudo kextcache --clear-staging

在文件夹HD/Library/

干杯

编辑:格式化

Edit2:我相信 Parallels 会直接将一些文件写入引导加载程序/内核。从 CMD+R 运行命令后,按住重新启动磁盘实用程序终端,扩展名已从 /Library 中删除。

我希望这是有道理的。

【讨论】:

  • 请解释您的解决方案如何以及为什么适用于该问题。
【解决方案4】:

我在尝试卸载 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。

【讨论】:

    【解决方案5】:

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

    sudo kextcache -prune-staging

    正如另一条评论中提到的,这只会删除不再存在于其原始位置的内核扩展,即/Library/Extensions。

    您从/Library/Extensions 中删除的扩展名将从/Library/StagedExtensions/ 中消失。它不会影响您的其他内核分阶段扩展。

    /Library/StagedExtensions/ 是一个中间区域,在您开始会话后,您的扩展程序会在其中驻留(如缓存)。如果对/Library/Extensions进行更改,暂存区不会立即受到影响,我认为这是为了提高稳定性和安全性。

    【讨论】:

      【解决方案6】:

      这是因为系统完整性保护 (SIP)。 您可以禁用它(不推荐)并手动删除 kext。

      (来自https://www.imore.com/el-capitan-system-integrity-protection-helps-keep-malware-away)

      • 单击 菜单。选择重启...
      • 按住 command-R 以启动到恢复系统。
      • 单击实用程序菜单并选择终端。
      • 键入csrutil disable 并按回车键。
      • 关闭终端应用程序。单击  菜单并选择重新启动....

      如果您稍后决定要重新使用 SIP(​​我真诚地希望您这样做),请重复这些步骤,改用 csrutil enable。

      【讨论】:

      • 不,以上不是问题的解决方案。客户不会禁用 SIP 并将其删除。我猜这是苹果的严重错误
      • 我已经向苹果报告了这个问题,但我没有得到他们的任何回应。如果他们回复,我会让你知道伙计们
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-06
      • 1970-01-01
      • 2021-10-12
      • 2012-03-14
      • 1970-01-01
      • 2018-07-11
      • 1970-01-01
      相关资源
      最近更新 更多