приложение не уходит в корзину
обновлено · автор Anton Shakirov
macOS почти никогда не отказывает без причины, и причина почти всегда одна из пяти. идите по ним по порядку — они расставлены по тому, как часто каждая оказывается той самой, — и остановитесь на совпавшей. в какой из пяти вы находитесь, скажут две команды ещё до всякого гадания, и обе ниже. последнее средство, про которое вы читали, — удалить приложение из «Терминала» от root, — лежит в самом низу страницы, и на одной из этих пяти причин оно не работает вовсе.
первая: приложение ещё работает, даже если выглядит закрытым
«объект нельзя переместить в корзину, так как он открыт» означает ровно то, что написано, а закрыть окно — это не выйти из приложения. и чаще это даже не то приложение, на которое вы смотрите, а оставленный им помощник.
- выйдите из него как положено, по ⌘Q, а если не выходит — завершите принудительно: ⌥⌘⎋.
- откройте «Мониторинг системы» и найдите имя приложения. завершите всё совпавшее, включая то, где в имени есть helper, agent или updater.
- загляните в «Системные настройки» → «Основные», в список объектов входа и расширений, и уберите приложение из обоих списков — объект входа перезапускается в ту же секунду, когда вы его снимаете, отчего и кажется, что приложение с вами борется.
- попробуйте удалить снова.
какой процесс держит его на самом деле
«Мониторинг системы» помогает, только если вы угадали имя, а вся задача часто как раз в том, что не угадываете. спросите файл: наведите lsof не на бандл, а на исполняемый файл внутри него — Contents/MacOS и имя самого приложения, — и получите команду и её номер процесса, по строке на каждого держателя.
целиться во весь бандл через +D тоже можно, но ответ будет обо всём сразу: у приложения на 850 МБ это 270 строк, по одной на каждый фреймворк и ресурс, которые оно отобразило в память, и где-то внутри нужный вам процесс. по времени то же самое, поэтому берите короткий ответ.
вторая: это системное приложение, и это не обсуждается
«Почта», «Музыка», «Заметки», «Карты», «Новости», «Акции», Safari и их соседи защищены System Integrity Protection. Finder их не удалит, «Терминал» от root их не удалит, и ответ здесь не обходной путь: диск подписан и запечатан, а сломать это — значит обменять устойчивый Mac на значок, на который вам не хотелось смотреть.
Apple говорит это прямо — «you can't use the Finder to delete apps that are required by your Mac» (страница английская): удаление программ на Mac
как отличить защищённое приложение от запертого
разница видна из одной команды. запустите ls -lOd на приложении и прочитайте колонку после группы. защищённое отвечает root wheel restricted; поставленное вами самими отвечает вашим именем, admin и прочерком там, где был бы флаг. прочерк означает, что на уровне файловой системы файл ничем не придавлен, — значит, отказ идёт из одного из четырёх остальных разделов.
Safari здесь особняком: это вообще не папка в /Applications, а симлинк с флагами restricted,hidden в /System/Cryptexes/App. а csrutil status в обычном «Терминале» подтвердит, что защита включена, — нетронутый Mac отвечает enabled.
флаг — собственный механизм Apple, и её же заметка прямо говорит, чего он стоит root (страница английская): о защите целостности системы на Mac
что вы действительно можете сделать — убрать приложение из Dock, а если оно лезет в поиск, то и из результатов Spotlight, в разделе Spotlight в «Системных настройках».
третья: приложение заперто или не ваше
- выделите приложение, нажмите ⌘I и снимите вверху окна свойств галочку защиты.
- в том же окне, внизу, разверните общий доступ и права доступа. если вашей учётной записи нет в списке с правом на чтение и запись, нажмите на замок, подтвердите личность и дайте себе это право.
- если приложение лежит не в /Applications — в папке другого пользователя или на внешнем диске, отформатированном под другую систему, — сначала перенесите его туда, где хозяин вы, и удаляйте уже оттуда.
галочка защиты — это флаг uchg
тот же ls -lOd из раздела выше его и показывает: у запертого объекта там, где у обычного прочерк, написано uchg. это файловый флаг BSD, а не право доступа, и на этой разнице держится весь раздел — вы можете владеть файлом, иметь на нём чтение и запись, и всё равно получить отказ. если галочка в окне свойств неактивна или объект уже закопан в корзину, снимите флаг из «Терминала»: chflags nouchg на путь.
запертый файл — это обычно что-то, восстановленное из бэкапа или скопированное с сетевой папки; проблема с правами — обычно приложение, поставленное установщиком от другого пользователя.
это не фольклор — галочка в Finder и флаг это один и тот же переключатель, как пишет Говард Оукли: «to set the user Immutable flag, the same thing as the Finder lock» (страница английская): защита файлов флагом защиты и неизменяемости
программа удаления читает эти флаги до того, как начать, — и в этом разница между отчётом и словом «ошибка»: удаление программ
четвёртая: его поставил ваш работодатель
если приложение возвращается после перезагрузки или корзина очищается, а оно появляется снова, загляните в «Системные настройки» → «Основные», в управление устройствами. приложение, доставленное профилем управления, переустанавливается по замыслу, и местного способа это исправить нет — профиль меняет тот, кому он принадлежит.
то же верно про всё, что корпоративный vpn, антивирус или агент резервного копирования ставит рядом с собой: обычно это демон плюс системное расширение, и удаление видимого приложения оставляет невидимую половину работать дальше.
пятая: оно ушло в корзину, а корзина не очищается
- какой-то файл внутри до сих пор используется. строка с lsof из первого раздела годится и здесь — наводите её на копию в ~/.Trash, а не на /Applications.
- очистите корзину, удерживая ⌥, — так пропускаются проверки, которые останавливаются на занятом файле. пользуйтесь этим, когда уже знаете, чем файл был занят, а не вместо того, чтобы выяснять.
- если дело в одном объекте, нажмите на него в корзине правой кнопкой и выберите немедленное удаление.
- если падает с ошибкой прав, приложение ставил установщик от root — смотрите третий раздел и пробуйте снова.
- всё ещё стоит: выйдите из учётной записи и зайдите обратно. так закрываются все ваши процессы без драмы с перезагрузкой, и именно этот шаг пропускают по дороге к перезапуску машины.
корзина, которую не получается очистить, всё это время занимает диск, и немало пропавшего места находится именно там: чем заняты «Системные данные»
как hop удаляет приложение, которое не удаляется
он не обходит ни одну из пяти. их не обходит никто — инструмент, который это обещает, либо просит у вас пароль администратора, либо выключает SIP, а флаг restricted и профиль управления одинаково сильнее любой программы удаления. меняется другое: вам называют, в какой из пяти причин вы находитесь, по имени, а не словом «ошибка».
- всё, что macOS не отдала, перечислено с причиной. программа удаления, которая всегда рапортует об успехе, работает не лучше — она просто меньше вам рассказывает.
- приложение, уже лежащее в корзине, тоже опознаётся: идентификатор берётся из бандла там же или выводится из остатков, которые его называют, — поэтому брошенное на полпути удаление можно довести до конца, а не оставлять его данные навсегда.
- всё уходит в корзину, а не стирается, и именно здесь это важнее всего: когда что-то упирается, люди как раз и тянутся к команде, у которой нет обратного хода.
почему sudo rm -rf не удалит запертое приложение
любая ветка форума рано или поздно предлагает снести приложение от root из «Терминала», и три страницы, стоящие в выдаче выше этой, дают вам строку, чтобы вставить. на запертом файле это не работает, и увидеть, как оно падает, можно секунд за десять.
создайте где угодно файл, выполните на нём chflags uchg и попробуйте. rm говорит «Operation not permitted» и выходит с кодом 1; rm -rf говорит то же самое; файл после этого на месте. учётная запись, которая это делает, владеет файлом и имеет на нём чтение и запись, так что повышать уже некуда — отказ идёт от флага, а флаг снимают, а не пересиливают. сначала chflags nouchg, потом удаление — и оно проходит с первого раза.
а там, где команда всё-таки отрабатывает, вместе с ней редко проговаривают цену: ни корзины, ни подтверждения, ни пути назад, а пробел, поставленный не туда, уносит что-нибудь ещё с той же скоростью. снимите галочку защиты в окне свойств — результат тот же, но есть откуда восстановить.
frequently asked questions
- почему пишет, что приложение нельзя переместить в корзину, так как оно открыто?
- процесс из этого бандла всё ещё работает. часто это не само приложение, а запущенный им помощник или обновлятор — lsof, наведённый на Contents/MacOS внутри бандла, назовёт процесс и его номер, а постоянные записаны в списке объектов входа и расширений.
- как понять, что приложение защищено самой macOS?
- запустите на нём ls -lOd и прочитайте колонку флагов. у защищённого будет restricted и владелец root, у поставленного вами — ваше имя и прочерк. у Safari стоит restricted,hidden, потому что это симлинк в /System/Cryptexes/App.
- как удалить приложение, которое возвращается?
- проверьте управление устройствами на предмет профиля конфигурации, а список объектов входа и расширений — на предмет помощника, который его переустанавливает. приложение, вернувшееся после перезагрузки, кладёт туда кто-то с бо́льшими полномочиями, чем у Finder.
- можно ли удалить Safari или «Почту»?
- нет. они на подписанном системном томе и защищены SIP. убрать их — значит выключить эту защиту, а это стоит куда дороже, чем значок на экране.
- корзина не очищается и не говорит почему. что делать?
- выйдите из учётной записи и зайдите обратно, потом попробуйте снова — так отпускаются все файлы, которые держала ваша учётная запись. если мешает один объект, нажмите на него в корзине правой кнопкой и удалите немедленно.
- безопасно ли здесь sudo rm -rf?
- на запертом приложении оно даже не действует: флаг uchg отвечает rm отказом «Operation not permitted» при любых раскладах, а пропущенный шаг — это chflags nouchg. там же, где команда отрабатывает, она удаляет без корзины и без отмены, и опечатка в пути уносит что-нибудь ещё с той же скоростью.
the tool behind this
app uninstallerremove an app together with what it left in about thirty places.done with удаление программ
other things people do
- the app is gone. its eighteen folders are not.app uninstaller
- system data: 180 gb, contents unspecifiedapp uninstaller
- the app is gone. its system extension is still there.app uninstaller
об авторе

Anton Shakirovсоздаёт hop
создаёт hop и все страницы этого сайта. девятнадцать инструментов под одной иконкой в menu bar, MIT и открытый код. на issue и письма отвечает сам.