Dyld mac os удалить

Обновлено: 03.07.2024

Динамический транслятор Rosetta, позволяющий запускать приложения PowerPC на компьютерах Mac с процессором Intel, не является обязательным и не устанавливается по умолчанию на Snow Leopard. Несмотря на то, что сегодня доступны версии большинства приложений для Intel, для таких людей, как я, у которых все еще есть PowerPC uti

Тофер, активный пользователь Mac в течение последних 15 лет, с весны 2008 года является автором MacFixIt. Одно из его увлечений – устранение неполадок Mac и максимально эффективное использование компьютеров Mac и оборудования Apple дома и в офисе. рабочее место.

Динамический транслятор Rosetta, позволяющий запускать приложения PowerPC на компьютерах Mac с процессором Intel, не является обязательным и не устанавливается по умолчанию на Snow Leopard. Хотя сегодня доступны версии большинства приложений для Intel, для таких людей, как я, у которых все еще есть утилиты PowerPC, было приятно видеть, что Apple делает Rosetta динамически доступной для загрузки на Mac, на которых она не установлена, но нужно запускать более старый код. Несмотря на доступность и простоту установки, на данный момент я бы назвал Rosetta последней попыткой Apple обеспечить поддержку PowerPC и функцией, работа которой не гарантируется.

У некоторых людей, которые включили Rosetta в свои установки, приложения PowerPC могут аварийно завершать работу или отказываться открываться при запуске. В некоторых случаях это конфликт между Rosetta и выполняемым кодом, но в других случаях вы можете предпринять несколько действий, чтобы попытаться исправить проблемы с приложениями PowerPC.

<р>1. Удалить настройки приложения

Очистите настройки программы и повторите попытку. Найдите эти файлы в папке /username/Library/Preferences/ или в папке /Macintosh HD/Library/Preferences/ и удалите их для программы, в которой возникли проблемы. Технически их можно назвать как угодно, но по умолчанию они имеют имя, похожее на «com.apple.Mail.plist» (для почтовой программы Apple).

<р>2. Удалите настройки «ByHost»

Помимо обычных файлов настроек, система содержит настройки приложений для конкретных компьютеров, поэтому один и тот же загрузочный диск можно использовать на различном оборудовании и не возникать проблем ни с системными настройками, ни с работающими на нем приложениями. Они хранятся в папке «ByHost» в папке «Настройки», поэтому перейдите туда и попытайтесь найти соответствующие файлы настроек для приложений, которые вы используете.

ПРИМЕЧАНИЕ. Файлы настроек легко переделываются, поэтому вы можете очистить эти папки, чтобы ваши приложения и система перестроили все файлы настроек, что может быть еще одним способом, который стоит попробовать. Если вы сделаете это, обязательно сохраните файлы настроек в таком месте, как рабочий стол, чтобы вы могли заменить нужные (восстановив все потерянные настройки).

<р>3. Обновите кеш dyld

Обновление общего кэша динамической ссылки заменяет старую процедуру update_prebindings, которая помогает устранять замедления и другие проблемы с недавно установленными приложениями. Выполнение следующей команды в Терминале должно обеспечить правильную настройку кэша dyld:

update_dyld_shared_cache -root/-force

Обычно это не нужно запускать независимо, но если системный компонент, такой как Rosetta, загружается неправильно, зависает или дает сбой, может помочь обновление кеша вручную.

Вопросы? Комментарии? Разместите их ниже.
Обязательно следите за нами в Твиттере и на форумах CNET Mac.

После этого я мог запустить vue serve --open src/App.vue, но ничего не произошло.

amkumar-mdsol прокомментировал 23 марта 2021 г.

Переустановка icu4c помогла brew переустановить icu4c .

marinhero прокомментировал 23 марта 2021 г.

Ни одно из приведенных здесь решений мне не помогло. Что в итоге получилось:

а затем переустановить узел с помощью предоставленного ими официального установщика для Mac

ptthisdan прокомментировал 28 марта 2021 г.

прокомментировал benwoodward 29 марта 2021 г.

Мне не нужно было переустанавливать узел, просто переустановите icu4c :

варить переустановить icu4c

Это произошло после того, как Homebrew решил обновить все мои библиотеки (я предполагаю, что есть настройка, запрещающая ему это делать)

clouedoc прокомментировал 6 апреля 2021 г.

Мне не нужно было переустанавливать узел, просто переустановите icu4c :

brew переустановите icu4c

Это произошло после того, как Homebrew решил обновить все мои библиотеки (я предполагаю, что есть настройка, запрещающая это делать)

По какой-то причине у меня тоже было обновление всех моих библиотек.

Сам себе на заметку: читайте выпуски до конца!

kontramundo прокомментировал 6 апреля 2021 г.

Мне не нужно было переустанавливать узел, просто переустановите icu4c :

brew переустановите icu4c

Это произошло после того, как Homebrew решил обновить все мои библиотеки (я предполагаю, что есть настройка, запрещающая это делать)

nirdeshjoshiya прокомментировал 7 апреля 2021 г.

Спасибо, мне помогло

RCheesley прокомментировал 9 апреля 2021 г.

Мне не нужно было переустанавливать узел, просто переустановите icu4c :

brew переустановите icu4c

Это произошло после того, как Homebrew решил обновить все мои библиотеки (я предполагаю, что есть настройка, запрещающая это делать)

Ура! То же самое и со мной!

codetombomb прокомментировал 14 апреля 2021 г.

Мне не нужно было переустанавливать узел, просто переустановите icu4c :

brew переустановите icu4c

Это произошло после того, как Homebrew решил обновить все мои библиотеки (я предполагаю, что есть настройка, запрещающая это делать)

Спасибо! Мне это помогло!

besi прокомментировал 21 апреля 2021 г.

Но затем я получил сообщение об ошибке, указывающее, что программное обеспечение вообще не было установлено через homebrew:

Странно, если бы я это сделал: brew install icu4c Я выдал следующее сообщение:

Внимание: icu4c 68.2 уже установлена ​​и обновлена.

После моего недавнего сообщения в блоге мой старый друг @_Dark_Knight_ связался со мной и задал вопрос:

"Вы обычно вызываете пользовательские приложения, которые разрешают dyld_insert_libraries?"

И еще несколько подобных, и, честно говоря, я понятия не имел, о чем он говорит, если бы я только понял вопрос :D Несмотря на то, что мои последние сообщения в блоге и доклады посвящены macOS, я много занимаюсь больше с Windows каждый день, вероятно, около 95%, и macOS по-прежнему остается для меня совершенно новой территорией. Поэтому я решил углубиться в вопрос и узнать об этом немного больше.

Оказалось, что для macOS существует очень известная техника внедрения с использованием переменной среды DYLD_INSERT_LIBRARIES. Вот описание переменной из документа dyld man:

Короче говоря, он загрузит любые dylib, которые вы укажете в этой переменной, до того, как загрузится программа, по сути внедрив dylib в приложение. Давай попробуем! Я взял свой предыдущий код dylib, который использовал, играя с перехватом dylib:

Для быстрого теста я написал сложный код hello world C и попробовал его с ним. Чтобы установить переменную среды для запуска приложения, вам нужно указать DYLD_INSERT_LIBRARIES=[путь к вашей dylib] в командной строке. Вот как это выглядит:

Это также влияет на выполнение моего любимого приложения для создания заметок Bear (где я пишу это прямо сейчас):

Мы также можем увидеть все эти события в журнале (поскольку наша dylib помещает туда сообщение):

image

В следующих сообщениях блога есть два хороших примера того, как подключить само приложение:

Я не буду повторять их, поэтому, если вам интересно, прочтите их.

Можете ли вы предотвратить эту инфекцию? Майкл упомянул, что вы можете сделать это, добавив сегмент RESTRICTED во время компиляции, поэтому я решил изучить это подробнее. В соответствии с блокировкой внедрения кода в iOS и OS X есть три случая, когда эта переменная среды будет игнорироваться:

  1. установлены биты setuid и/или setgid
  2. ограничено правами
  3. сегмент с ограниченным доступом

Функция pruneEnvironmentVariables удалит переменные среды:

Если мы ищем, где установлена ​​переменная sRestrictedReason, мы приходим к функции processRestricted:

Это сегмент кода, который идентифицирует ограниченный сегмент:

Теперь это старый исходный код, на который ссылались в статье выше — с тех пор он эволюционировал. Последний доступный код dyld.cpp выглядит немного сложнее, но по сути та же идея. Вот соответствующий сегмент кода, который устанавливает ограничение, и тот, который его возвращает ( configureProcessRestrictions , processIsRestricted ):

Для gLinkContext.allowEnvVarsPath будет установлено значение false, если:

  1. Основной исполняемый файл имеет ограниченный сегмент
  2. установлены биты suid/guid
  3. SIP включен (если кому интересно, CSR_ALLOW_TASK_FOR_PID — это флаг конфигурации загрузки SIP, но я мало что знаю об этом), и программа имеет флаг CS_RESTRICT (в OSX = программа была подписана с правами)

Но! Он не установлен, если установлен CS_REQUIRE_LV. Что делает этот флаг? Если он установлен для основного исполняемого файла, это означает, что загрузчик будет проверять каждую dylib, загруженную в приложение, на предмет того, были ли они подписаны тем же ключом, что и основной исполняемый файл. Если мы подумаем об этом, то в этом есть смысл, поскольку вы можете внедрить dylib только в приложение, которое было разработано одним и тем же человеком. Вы можете злоупотреблять этим только в том случае, если у вас есть доступ к этому сертификату подписи кода — или нет, подробнее об этом позже ;).

Есть еще один вариант защиты приложения — включение усиленной среды выполнения. Затем, если вы хотите, вы можете специально включить переменные среды DYLD: Разрешить права на переменные среды DYLD — Права.Приведенный выше исходный код, кажется, датирован 2013 годом, и эта опция доступна только с Mojave (10.14), который был выпущен в прошлом году (2018), вероятно, поэтому мы ничего не видим об этом в исходном коде.

Для справки, это значения флагов CS, взятые из cs_blobs.h

Это была теория, давайте посмотрим на все это на практике, если они действительно работают так, как рекламируется. Я создам проект Xcode и изменю конфигурацию по мере необходимости. Перед этим мы можем использовать наш исходный код для битового тестирования SUID, и, как мы видим, он работает так, как ожидалось:

Интересно, что в прошлом была ошибка LPE из-за неправильной обработки одной из переменных среды, а с файлами SUID можно было добиться повышения привилегий, здесь вы можете прочитать подробности: OS X 10.10 DYLD_PRINT_TO_FILE Локальная уязвимость повышения привилегий | Раздел Эйнс ГмбХ

Я создал полностью пустое приложение Cocoa для тестирования других вещей. Я также экспортирую переменную среды, поэтому нам не нужно указывать ее всегда:

Если мы скомпилируем его и запустим по умолчанию, мы увидим, что внедрена dylib:

Чтобы иметь раздел с ограниченным доступом, в настройках сборки -> Связывание -> Другие флаги компоновщика установите это значение:

Если мы перекомпилируем, мы увидим целую кучу ошибок, что dylibs игнорируются, например эти:

В качестве альтернативы мы можем использовать команду otool -l [путь к двоичному файлу] для той же цели, вывод будет немного другим.

Следующим шагом является настройка приложения (защищенная среда выполнения). Это можно сделать в разделе «Настройки сборки» -> «Подписание» -> «Включить защищенную среду выполнения» или в разделе «Возможности». Если мы сделаем это, перестроим приложение и попытаемся запустить его, то получим следующую ошибку:

Если я подпишу свой dylib, используя тот же сертификат, dylib будет загружен:

Если я использую другой сертификат для подписи кода, он не будет загружен, как показано ниже. Я хочу подчеркнуть, что эта проверка выполняется всегда, а не гейткипером.

Интересно, что даже если я установлю право com.apple.security.cs.allow-dyld-environment-variables на странице возможностей, я не смогу загрузить dylib с другой подписью. Не знаю, что я делаю не так.

image

Чтобы двигаться дальше, давайте установим требование проверки библиотеки ( CS_REQUIRE_LV ) для приложения. Это можно сделать, перейдя в Настройки сборки -> Подписание -> Другие флаги подписи кода и установив для него значение -o library. Если мы перекомпилируем и проверим подпись кода для нашего двоичного файла, мы увидим, что он включен:

И мы получим то же сообщение об ошибке, что и в защищенной среде выполнения, если попытаемся загрузить dylib с другим подписывающим лицом.

Последним пунктом, который нужно попробовать, будет установка флага CS_RESTRICT, но единственное, что я нашел по этому поводу, это то, что это специальный флаг, устанавливаемый только для двоичных файлов Apple. Если кто-то может дать больше информации, дайте мне знать, мне любопытно. Единственное, что я мог сделать, чтобы проверить это, — это попытаться внедрить в двоичный файл Apple, для которого не установлены предыдущие флаги, а не в suid-файл и не имеет сегмента RESTRICTED. Интересно, что флаг CS_RESTRICT не отражается утилитой подписи кода. Я взял Дисковую утилиту. Действительно наша dylib не загружена:

Я бы сказал, что это все, но нет. Вернемся к тому, что dylib можно внедрить даже в SUID-файлы, если установлен флаг CS_REQUIRE_LV. (Ведь возможно и к файлам с флагом CS_RUNTIME). Да, только дилибы с такой же сигнатурой, но есть потенциал (хотя и небольшой) для повышения привилегий. Чтобы показать, я изменил свою dylib:

Давайте подпишем это и тестовую программу тем же сертификатом, установим бит SUID для тестового двоичного файла и запустим его. Как мы видим, мы можем внедрить dylib, как и ожидалось, и он действительно будет работать от имени пользователя root.

Теоретически, чтобы использовать это, вам нужно одно из следующего:

  1. Имейте сертификат подписи кода исходного исполняемого файла (очень маловероятно)
  2. Имейте доступ на запись к папке, где находится файл с битом SUID -> в этом случае вы можете подписать файл своим собственным сертификатом (кодовый знак заменит файл, который вы подписываете, поэтому он удалит исходный файл и создаст новый). new - это возможно, потому что в системах *nix вы можете удалять файлы из каталогов, где вы являетесь владельцем, даже если файл принадлежит root), дождаться восстановления бита SUID (скрестим пальцы) и, наконец, внедрить свою собственную dylib . Можно подумать, что такого сценария не существует, но я нашел для него пример.

Последняя мысль по этой теме — GateKeeper. Вы можете внедрить помеченные карантином двоичные файлы в Мохаве, что на самом деле вполне ожидаемо.

Однако это больше не работает на Catalina, что также ожидается с внесенными изменениями:

image

Я думаю, что приложения должны защищать себя от такого типа внедрения dylib, и в нынешнем виде это довольно легко сделать, у вас есть несколько вариантов, поэтому на самом деле нет причин не делать этого. Поскольку Apple движется к нотариальному заверению, усиленная среда выполнения будет медленно включаться для большинства / всех приложений (это обязательно для нотариально заверенных приложений), поэтому, надеюсь, этот метод внедрения постепенно исчезнет. Если вы разрабатываете приложение, в котором вы устанавливаете бит SUID, обязательно правильно установите разрешения для родительской папки.

Если на вашем Mac мало места, у вас может возникнуть соблазн удалить эти папки, но трогать их опасно.

macOS имеет глубокую и вложенную структуру папок, а установка macOS по умолчанию содержит множество незнакомо звучащих каталогов. Большинству пользователей даже не нужно прикасаться к этим файлам.

Apple не просто так скрывает определенные папки. Работа с этими каталогами может привести к нестабильной работе системы, потере данных или, что еще хуже, к невозможности загрузки вашего Mac. Мы покажем вам места в файловой системе macOS, которые большинству пользователей не следует трогать.

1. Языковые файлы и папки

Приложения для Mac поставляются с языковыми файлами для каждого поддерживаемого языка. Когда вы переключаете системный язык вашего Mac, приложение сразу переключается на этот язык.

Чтобы просмотреть языковые файлы приложения, щелкните его, удерживая клавишу Control, и выберите в контекстном меню пункт «Показать содержимое пакета». Путь будет выглядеть так: AppName.app/Contents/Resources/Lang.lproj

Удаление языковых файлов для сторонних приложений легко выполняется через Терминал. Но для приложений macOS по умолчанию вам необходимо отключить защиту целостности системы, что мы вообще не рекомендуем.

Несмотря на то, что в Интернете можно найти много советов по удалению языковых файлов, чтобы освободить место на диске, количество заработанного вами места недостаточно для связанных с этим рисков.

Быстрое сканирование с помощью CleanMyMac показывает, что мой Mac освободит около 520 МБ дискового пространства, удалив эти файлы. В вашем случае результат может быть другим, но маловероятно, что вы выиграете больше нескольких гигабайт. Кроме того, эти шаги необходимо повторять после каждого серьезного обновления macOS.

Когда вы удаляете языковые файлы, вы не можете предсказать, какие приложения будут аварийно завершать работу или зависать. В худшем случае вам придется переустановить приложение. Кроме того, старые версии программ, таких как приложения Microsoft Office и Adobe, могут не работать или обновляться должным образом. Поэтому лучше игнорировать языковые файлы и папки.

Ознакомьтесь с нашими советами по освобождению места на вашем Mac, чтобы узнать, как это сделать лучше.

2. Скрытая папка /private/var

macOS создает несколько пользовательских и связанных с системой файлов кэша для ускорения работы системы. Кэш и временные данные, расположенные в /Library/Caches, находятся под вашим контролем. Вы можете вручную удалить этот кеш без каких-либо сторонних инструментов.

Но файлы в системной папке полностью управляются macOS. Они даже не видны вам. Иногда элементы в этих каталогах могут занимать огромное количество места на диске. Таким образом, вы можете задаться вопросом, безопасно ли удалять содержимое /private/var/folders или нет.

Расположение /private/var/folders

Самый простой способ найти папку /private/var — через меню Finder Go to Folder. Нажмите Cmd + Shift + G, чтобы открыть окно «Перейти к папке», и введите /private/var/folders. Сразу же откроется новая вкладка Finder.

Чтобы открыть расположение системных кэшированных и временных файлов, запустите окно терминала и введите следующее: open $TMPDIR. Вы увидите двухсимвольное имя папки с длинными, казалось бы, случайными именами вложенных папок. Перемещаясь по дереву папок, исследуйте эти три папки. Папка C представляет кэш, а T — временные файлы. Пользовательские файлы находятся в папке 0.

Проблемы с /private/var/folders

Быстрое сканирование с помощью OmniDiskSweeper показывает, что размер папки /private/var/folders составляет около 1 ГБ, а размер папки /private/var — около 4 ГБ. Размер этих папок может варьироваться в зависимости от системы, но не должен быть слишком большим.

Если эти каталоги занимают более 10 ГБ, это не повод для беспокойства.

Не следует пытаться вручную удалять файлы из любых каталогов /private/var, даже если они большие. Это может привести к повреждению основных файлов macOS, повреждению данных документов, а также к тому, что ваш Mac не сможет загружаться или вести себя должным образом. Тогда вам придется переустанавливать macOS с нуля.

Чтобы безопасно удалить эти файлы, закройте все приложения и выключите компьютер Mac. Когда вы перезагружаете свой Mac, вы запускаете встроенные механизмы очистки кэша. Это удалит ненужное содержимое, кеши и временные элементы в /tmp, /private/var и /private/var/folders.

Если по какой-то причине эти файлы не очищаются, перезагрузите Mac в безопасном режиме.macOS использует дополнительные встроенные механизмы для избавления от кешей и временных файлов в этом режиме. Затем перезагрузитесь в обычном режиме и снова проверьте доступное место на диске.

Другие важные папки в /private/var

Что касается места на диске, есть еще несколько папок, которые не следует трогать:

  • /private/var/db: включает набор файлов конфигурации и данных macOS. К ним относятся база данных Spotlight, файлы конфигурации сети и многое другое.
  • /private/var/VM: содержит файлы образов подкачки и сна. Если вы переведете свой Mac в режим гибернации, этот каталог займет более 5 ГБ дискового пространства.
  • /private/var/tmp: еще один каталог временных файлов.

3. Папка системной библиотеки

Файловая система macOS содержит несколько папок библиотеки. Это сделано намеренно, и хотя между содержимым папок библиотеки существует много общего, каждая папка играет свою роль в файловой системе macOS. Вы найдете три папки библиотеки:

Папка основной библиотеки и системной библиотеки имеет глобальную область действия. Их содержимое поддерживает каждый аспект системы. Папка System Library содержит файлы, необходимые для работы macOS. Только ОС имеет право изменять свои данные, и на них должны влиять только события системного уровня. Вам не нужно ничего трогать в этой папке.

4. Папка пользовательской библиотеки

Папка «Библиотека» в домашнем каталоге — это личная библиотека вашей учетной записи. Здесь macOS хранит систему, стороннюю поддержку и файлы настроек. Он также включает настройки Mail, закладки Safari, данные истории просмотров, данные календаря и многое другое. В папку «Библиотека» также входят папки, которые необходимо время от времени очищать. Однако не ко всем папкам можно прикасаться.

~/Библиотека/Поддержка приложений

В этой папке как системные, так и сторонние приложения хранят файлы поддержки, обычно в подпапке, названной в честь соответствующего приложения. Они содержат регистрационные данные и даже хранят сохраненные данные приложения, используемые в конкретном сеансе. Не удаляйте содержимое файлов поддержки приложений напрямую. Вместо этого используйте приложение AppCleaner, чтобы удалить файлы поддержки вместе с приложением.

~/Библиотека/Настройки

Эта папка содержит все данные о настройках для стандартных и сторонних приложений. Опять же, не удаляйте содержимое папки Preferences; в противном случае приложение вернется в состояние по умолчанию или может аварийно завершить работу. AppCleaner позаботится о настройках при удалении приложения.

~/Библиотека/Мобильные документы

Это фактическое расположение папки iCloud. Документы, файлы настроек приложений, данные приложений iOS и многое другое находятся в этой папке. Вы не должны перемещать, переименовывать или удалять его. Это также папка, которая занимает много места на диске, если вы используете iCloud. Удалите ненужные файлы из iCloud Drive, чтобы уменьшить его размер.

~/Библиотека/Контейнеры

Он содержит файлы поддержки, кэшированные данные и временные файлы для приложений, загруженных из Mac App Store. Поскольку приложения в App Store изолированы, они не могут записывать данные в любом месте системы. Опять же, не удаляйте содержимое этой папки. Если папка «Контейнеры» занимает много места на диске, переустановите соответствующее приложение.

5. Скрытые папки в домашней папке

При нажатии клавиш Cmd + Shift + точка в Finder вы увидите множество файлов и папок в домашнем каталоге, которые обычно скрыты от глаз. Различные технологии и приложения macOS хранят свои данные в этих папках для бесперебойной работы вашего Mac. Вы не должны изменять или удалять какие-либо из этих папок:

Держитесь подальше от важных папок macOS

Работать с этими папками рискованно, так как это может повредить ваши приложения, документы и macOS. Хотя большинству пользователей Mac не нужно беспокоиться об этих папках, у вас может возникнуть соблазн начать изучение этих папок, когда место на диске станет проблемой.

В таких случаях необходимо иметь резервную копию, чтобы в случае потери данных их можно было относительно легко восстановить. К счастью, на вашем Mac уже есть множество способов помочь вам в этом.

Надеемся, вам понравятся товары, которые мы рекомендуем и обсуждаем! У MUO есть аффилированные и спонсируемые партнерские отношения, поэтому мы получаем долю дохода от некоторых ваших покупок. Это не повлияет на цену, которую вы платите, и поможет нам предлагать лучшие рекомендации по продуктам.

Читайте также: