Ответ 1
Откройте инструменты командной строки DMG, и вы найдете мета-пакет, который вы можете извлечь с помощью команды pkgutil --expand 'Command Line Tools.mpkg' metapackage
. Откройте файл metapackage/Distribution
, который был просто извлечен в текстовом редакторе, чтобы увидеть пакеты, которые содержат мета-пакет:
com.apple.pkg.DevSDK
com.apple.pkg.X11SDK
com.apple.pkg.QuickTimeSDK
com.apple.pkg.OpenGLSDK
com.apple.pkg.WebKitSDK
com.apple.pkg.FireWireSDK
com.apple.pkg.BluetoothSDK
com.apple.pkg.CoreAudioSDK
com.apple.pkg.JavaSDK
com.apple.pkg.clang
com.apple.pkg.llvm-gcc4.2
com.apple.pkg.X11Documentation
com.apple.pkg.DeveloperToolsCLI
Соответствующие файлы пакетов находятся в скрытом каталоге Packages
рядом с метапакетом. Их содержимое можно указать с помощью pkgutil --payload-files
.
Если у вас есть файл на диске и вы хотите узнать, из какого пакета он пришел:
$ pkgutil --file-info /usr/bin/clang
volume: /
path: /usr/bin/clang
pkgid: com.apple.pkg.clang
pkg-version: 4.3.0.0.1.1249367152
install-time: 1342021874
uid: 0
gid: 0
mode: 755
Теперь, некоторые данные о бонусах, которые будут полезны, если вы когда-нибудь захотите удалить инструменты командной строки. Apple, в своей бесконечной мудрости, отказывается предоставить инструмент для этого, но мы можем получить необходимую информацию, используя pkgutil
для отображения информации об установленных пакетах.
Во-первых, pkgutil --pkgs
отобразит все установленные пакеты. Сравните вывод списка вышеперечисленных пакетов.
pkgutil --info
отобразит информацию о установленном пакете; например:
$ pkgutil --info com.apple.pkg.clang
package-id: com.apple.pkg.clang
version: 4.3.0.0.1.1249367152
volume: /
location: /
install-time: 1342021874
groups: com.apple.FindSystemFiles.pkg-group com.apple.DevToolsBoth.pkg-group com.apple.DevToolsNonRelocatableShared.pkg-group
pkgutil --files
отобразит содержимое установленного пакета относительно полей volume
и location
, заданных pkgutil --info
. Поскольку абсолютные пути не используются, вы не можете просто передать вывод этой команды в xargs rm -f
, чтобы удалить файлы пакета; вам придется самим исправить пути, возможно, с чем-то вроде pkgutil --files com.example.pkgname | while read line; do rm -f "/install_location/$line"; done
.
Как только файлы пакета удаляются, необходимо запустить pkgutil --forget
, чтобы удалить информацию о установленном пакете из базы данных пакета.
Разумеется, вы должны быть очень осторожны, если вы попробуете это: вы один отпечаток, чтобы не повредить вашу систему настолько плохо, что вам придется переустановить ее, не говоря уже о ваших ценных данных!
pkgutil
имеет несколько других полезных опций для проверки наличия всех файлов пакета и для восстановления их разрешений; см. его страницу руководства для деталей.
В общем, это будет работать для любого пакета, однако обратите внимание, что некоторые пакеты могут иметь встроенные скрипты, которые запускаются при установке пакета; очевидно, что просто удаление файлов пакета не удалит все следы пакета из вашей системы. Вам нужно будет извлечь содержимое пакета и прочитать исходный код script, а затем решить, как лучше всего отменить эффекты script самостоятельно.