Удаление пакетов в Mac OS X

Как полностью удалить (удалить файлы, принадлежащие определенному пакету) в Mac OS X? Можно ли это сделать с помощью команды в терминале?

Я установил пакет .pkg на свой Mac, и мне интересно, как я могу удалить весь пакет без использования стороннего приложения, такого как UninstallPKG?

Мне интересно, для удаления файлов .dmg также требуются сторонние приложения или их можно удалить, введя команду в терминал?


person newbieMACuser    schedule 19.09.2014    source источник
comment
Этот вопрос кажется не по теме, потому что он не о программировании. Попробуйте apple.stackexchange.com   -  person Droppy    schedule 18.12.2014
comment
В частности, это тот же вопрос, что и superuser.com/questions/36567/. Я рекомендую закрыть этот вопрос, поскольку он не относится к теме StackOverflow.   -  person James McMahon    schedule 26.11.2016


Ответы (3)


Используйте эту команду в терминале, чтобы проверить список пакетов и удалить ваши файлы.

$ pkgutil --pkgs # list all installed packages

После удаления файлов вы можете удалить квитанцию ​​с помощью:

$ sudo pkgutil --forget the-package-name.pkg

После визуального осмотра списка файлов вы можете сделать что-то вроде:

$ pkgutil --pkg-info the-package-name.pkg # check the location
$ cd / # assuming the package is rooted at /...
$ pkgutil --only-files --files the-package-name.pkg | tr '\n' '\0' | xargs -n 1 -0 sudo rm -i

Будьте осторожны с этим последним шагом. Список каталогов, выдаваемых pkgutil --files, может включать важные общие каталоги, такие как usr, которые вы не хотите удалять.

$ pkgutil --only-dirs --files the-package-name.pkg | tr '\n' '\0' | xargs -n 1 -0 sudo rm -ir

Скопировано с здесь (моментальный снимок Wayback Machine оригинала)

person karthikeyan viswanathan    schedule 18.12.2014
comment
Я попробовал вышеуказанную команду для удаления файлов из пакета, но это не сработало. rm -i запрашивает у пользователя подтверждение, но стандартный ввод поступает из /dev/null благодаря xargs (man7.org/linux/man-pages/man1/xargs.1.html), поэтому вы ничего не можете подтвердить. Вы просто получаете серию множества подсказок, и никакие файлы не удаляются. У кого-нибудь еще был успех? - person LarsH; 08.02.2017
comment
Как удалить файлы/как узнать, какие файлы в каких каталогах относятся к конкретному пакету? - person Tadej; 16.08.2017
comment
@LarsH, вам нужно использовать xargs -n 1 -0 sudo rm -if. Это тоже может занять некоторое время. - person Jorge Orpinel Pérez; 28.10.2019
comment
@Хорхе Спасибо. Я понял это позже; см. мой ответ. - person LarsH; 28.10.2019
comment
Если вы удаляете каталоги только на последнем шаге, почему бы не использовать sudo rmdir в качестве команды? Таким образом, он удалит только пустые каталоги. - person Victor Zamanian; 13.03.2020

Я изменяю ответ @karthikeyan, который у меня не сработал.

В командной строке используйте следующее, чтобы найти нужное имя пакета:

$ pkgutil --pkgs | grep -i {keyword} | less

где {ключевое слово} — это строка, которую вы ожидаете увидеть в имени пакета.

Чтобы найти расположение пакета (корневой каталог, к которому будут относиться все списки файлов), используйте

$ pkgutil --pkg-info package-name.pkg

Используйте это, чтобы вывести список установленных файлов пакета:

$ pkgutil --files package-name.pkg

После визуального осмотра списка файлов вы можете сделать что-то вроде этого, чтобы удалить их:

$ cd / # assuming the package location is /
$ pkgutil --only-files --files package-name.pkg | tr '\n' '\0' | xargs -n 1 -0 -p sudo rm

Будьте осторожны со следующим (последним) шагом, который удаляет каталоги. Список каталогов, выдаваемых pkgutil --files, может включать важные общие каталоги, такие как usr, которые вы не хотите удалять. -p заставляет xargs запрашивать подтверждение, но не срабатывает. (Вы также должны быть в безопасности с rmdir, потому что он удалит только пустые каталоги. Но некоторым людям потребуется настроить командную строку, так что лучше быть ясным!)

$ pkgutil --only-dirs --files package-name.pkg | tr '\n' '\0' | xargs -n 1 -0 -p sudo rmdir

После удаления файлов вы можете удалить системную запись этого пакета:

$ sudo pkgutil --forget package-name.pkg

Источники: справочная страница pkgutil и этот пост.

person LarsH    schedule 08.02.2017
comment
Расширение .pkg не требуется, по крайней мере, на шаге pkg-info. - person Jon L.; 14.05.2017
comment
Предположительно, если на информационном шаге указано location: Applications/xxx.app, а на шаге --files мне ничего не показывают, кроме Contents/, я могу быть достаточно уверен, что простое перетаскивание приложения в корзину удалит все? - person Chris F Carroll; 08.03.2018
comment
Также есть pkgutil --unlink <package-id>, хотя и не задокументированный - person ᆼᆺᆼ; 21.01.2019
comment
См. также gist.github.com/githubutilities/b5318d08a4b970d104f1. (очень похоже, более компактно) - person Jorge Orpinel Pérez; 28.10.2019
comment
@Jorge Хорхе, пожалуйста, объясните свое редактирование: почему вы считаете -i на rm предпочтительнее, чем -p на xargs? - person LarsH; 28.10.2019
comment
@LarsH Я связал оба, и -if сработало (без подсказки). На самом деле -i может даже не иметь эффекта, учитывая -f... Должны ли мы избавиться от -i? Придется сначала попробовать, чтобы перепроверить, но я уже удалил рассматриваемый пакет. - person Jorge Orpinel Pérez; 29.10.2019
comment
@ Хорхе Вы говорите, что -p подсказывал или не подсказывал? Цель -p — подсказать пользователю. Если вы не уверены в назначении кода, не меняйте его. - person LarsH; 29.10.2019
comment
Итак, цель вашего кода — запросить у пользователя подтверждение удаления тысяч файлов один за другим? Да, я определенно никогда не думал, что кто-то захочет этого. Не стесняйтесь снова ухудшить свой ответ, если хотите, потеряете несколько голосов. Ваше здоровье - person Jorge Orpinel Pérez; 31.10.2019
comment
@ Хорхе Не нужно опускаться до оскорблений. Если вам не нужны подсказки, зачем вы добавили -i в команду rm? Цель -p по xargs - подсказка перед удалением группы файлов. Будь то тысячи файлов или три, зависит от пакета. Они сгруппированы по xargs, поэтому вы не получаете приглашение для каждого из них. Пользователь, который хочет удалить подсказку, может сделать это, удалив -p. Это намного безопаснее по умолчанию, чем наоборот. Удаление -p и добавление -f к rm совершенно небезопасно для пользователя, который копирует и вставляет приведенные здесь команды. - person LarsH; 31.10.2019
comment
Простите меня. Я никогда не хотел оскорбить вас, пытаясь улучшить ответ. Я просто очень честный человек. Опять же, пожалуйста, отредактируйте свой ответ так, как считаете нужным, я не буду вмешиваться. Ваше здоровье - person Jorge Orpinel Pérez; 01.11.2019

Концепция удаления PKG отсутствует в OS X. PKG/MPKG может иметь определенные сценарии предварительной установки и постустановки, связанные с этим. То, что делается в сценариях PKG, всегда зависит от создателя PKG. Как неспециалист, мы не можем удалить PKG.

Но в то же время есть командные строки, которые могут выполнять полную обратную разработку файлов PKG. Он может извлекать сценарии и другую связанную информацию. Ссылки, приведенные ниже, дадут вам некоторую информацию

http://s.sudre.free.fr/Stuff/Ivanhoe/FLAT.html http://www.mactech.com/articles/mactech/Vol.26/26.02/TheFlatPackage/index.html

В OS X доступно несколько приложений для удаления/очистки. Большинство из них выполняют поиск в известных каталогах (таких как /Library/Preferences, /Library/Application Support и т. д.) с именем приложения/именем пакета или идентификатором пакета. Это один из способов полного удаления.

DMG не являются установочными файлами. Это файлы образа диска. Он может содержать .apps, pkg, mpkgs, другие файлы и т. д. Устанавливаются установщики внутри DMG. DMG должен быть смонтирован для чтения содержимого и размонтирован, когда это будет сделано.

http://osxdaily.com/2011/12/17/mount-a-dmg-from-the-command-line-in-mac-os-x/

Эта ссылка дает информацию о том, как установить DMG

person Seema Kadavan    schedule 12.12.2014