Homebrew: пакетный менеджер для macOS

Рейтинг: 40.9% · 8 голосов
Подробный курс по macOS для разработчиков и админов: архитектура и Apple Silicon, терминал и zsh, Homebrew и пакеты, launchd и автоматизация, APFS и Time Machine, безопасность (SIP, Gatekeeper, TCC, FileVault), сеть, логи и диагностика, MDM и DDM, контейнеры и виртуализация, восстановление. По официальной документации Apple, актуально на 2026 (macOS 26 Tahoe).
Ответить
Аватара пользователя
Artem_MacAdmin
Сообщения: 47
Зарегистрирован: 11 май 2026, 05:31

Homebrew: пакетный менеджер для macOS

Сообщение Artem_MacAdmin »

Оглавление курса (47)
  1. Что такое macOS: Unix под капотом и место в 2026
  2. Архитектура macOS: XNU, тома и Signed System Volume
  3. Apple Silicon: ARM, Rosetta 2 и отличия от Intel
  4. Установка, обновление и восстановление macOS
  5. Finder, рабочий стол и продуктивность
  6. Системные настройки и их управление из CLI (defaults)
  7. Пользователи и группы: учётные записи и управление
  8. Терминал и zsh: командная строка macOS
  9. CLI на macOS: BSD-команды и отличия от Linux
  10. Настройка zsh: .zshrc, prompt, плагины
  11. Файловая система и права: POSIX, ACL, атрибуты, флаги
  12. Homebrew: пакетный менеджер для macOS (вы здесь)
  13. Homebrew глубже: tap, Brewfile, services, обслуживание
  14. Другие пакеты: MacPorts, mas, Nix и App Store
  15. Установка приложений: .app, .dmg, .pkg и Gatekeeper
  16. Управление приложениями и их данные
  17. launchd и launchctl: система запуска macOS
  18. Свои службы и периодические задачи на launchd
  19. Автоматизация: Shortcuts, AppleScript и osascript
  20. Конфигурация как код: defaults, plist и профили
  21. APFS: снапшоты, клоны, контейнеры и шифрование
  22. Управление дисками: diskutil, образы и форматирование
  23. Time Machine и резервное копирование
  24. Внешние диски, форматы и сетевые тома
  25. Модель безопасности macOS: SIP и целостность системы
  26. Gatekeeper, нотаризация и защита от вредоносов
  27. Приватность и TCC: разрешения на доступ
  28. FileVault: полнодисковое шифрование
  29. Связка ключей и управление секретами
  30. Сетевой экран и защита сети
  31. Сеть в macOS: настройка и инструменты
  32. Диагностика сети на Mac
  33. Общий доступ: SSH, экран, файлы, удалённое управление
  34. Процессы и ресурсы: мониторинг производительности
  35. Логи macOS: unified logging и диагностика
  36. Производительность и энергия: powermetrics, диагностика
  37. Энергия, сон и обслуживание системы
  38. Профили конфигурации и основы MDM
  39. Управление парком Mac: MDM, DDM и zero-touch (2026)
  40. Среда разработчика на Mac: Xcode CLT, git, версии
  41. Контейнеры на Mac: Docker Desktop, OrbStack, Apple container
  42. Виртуализация: Virtualization.framework, UTM, Linux и Windows
  43. Режимы загрузки и восстановление (Apple Silicon)
  44. Сброс, NVRAM, Safe Mode и сброс настроек
  45. Траблшутинг macOS: дерево решений по симптомам
  46. Место на диске и обслуживание системы
  47. Сквозной проект: настройка Mac как у профи + куда расти
Зачем Mac нужен пакетный менеджер и какую боль решает Homebrew

macOS из коробки - это полноценный Unix, но без вменяемого способа ставить и обновлять консольный софт. Хочешь свежий git, wget, jq, htop, ffmpeg или новую версию node? В системе либо древняя версия (Apple обновляет системные утилиты раз в эпоху), либо её нет вовсе. Скачивать архивы с непонятных сайтов, собирать из исходников вручную, разбираться с зависимостями - это путь в ад. А когда захочешь снести - ищи руками, что куда легло.

Вот эту боль и закрывает Homebrew. Это де-факто стандарт установки софта на Mac: один менеджер ставит, обновляет, удаляет и CLI-инструменты, и обычные GUI-приложения. Если ты только разбираешься, что такое Homebrew - думай о нём как об App Store для терминала, только с тысячами пакетов, версионированием и автоматическим разрешением зависимостей. Команда brew install ставит пакет вместе со всем, что ему нужно, и держит учёт, чтобы потом чисто удалить.

Ключевая идея, которая отличает Homebrew от apt/yum в Linux - он живёт в своём префиксе и принадлежит твоему пользователю, а не root. Поэтому brew на Mac в обычной работе не требует sudo. Это и удобно, и безопасно: пакетный менеджер не лезет в системные каталоги, которые на современной macOS вообще защищены от записи (там SIP и подписанный системный том только для чтения).

Изображение

Что под капотом: Ruby, GitHub, бинарные bottles и префикс

Сам Homebrew написан на Ruby (интерпретатор Ruby идёт в комплекте, системный трогать не надо). Каждый пакет описан "формулой" (formula) - это Ruby-файл с метаданными: откуда качать исходник, какие зависимости, как собирать, какие тесты гонять. Формулы и каски лежат в обычных Git-репозиториях на GitHub (core-репозиторий Homebrew/homebrew-core), поэтому brew update - это по сути git pull свежих описаний пакетов.

Теперь важный момент про скорость. Собирать каждый пакет из исходников долго. Поэтому Homebrew раздаёт bottles - заранее скомпилированные бинарные сборки формул под конкретную архитектуру и версию macOS. Когда ты пишешь brew install wget, и для твоей системы (например, Apple Silicon на macOS 26 Tahoe) есть готовый bottle - он просто скачивается и распаковывается за секунды. Сборка из исходника включается только если bottle нет или ты явно попросил флагом. Поэтому установка обычно мгновенная, а не "пойду заварю кофе".

Куда всё это кладётся - определяет префикс. Здесь принципиальная разница между чипами:
  • Apple Silicon (M-серия): префикс /opt/homebrew
  • Intel: префикс /usr/local
Почему /opt/homebrew на Apple Silicon - не каприз. /usr/local исторически замусорен, и на ARM решили развести Homebrew в чистый отдельный каталог. Внутри префикса главное:
  • /opt/homebrew/Cellar - физические файлы пакетов-формул, по папке на версию: Cellar/wget/1.25.0/...
  • /opt/homebrew/Caskroom - сюда ставятся каски (GUI-приложения)
  • /opt/homebrew/bin - симлинки на бинарники из Cellar (это то, что попадает в PATH)
  • /opt/homebrew/opt - стабильные симлинки на "текущую" версию каждого пакета
Механика такая: brew распаковывает пакет в Cellar под конкретную версию, а потом "линкует" - создаёт симлинки в bin/, lib/, share/. Поэтому в PATH у тебя один аккуратный bin, а под ним - управляемое дерево версий. Удаление - это снос папки в Cellar и чистка симлинков, ничего не размазано по системе.

Установка Homebrew и настройка PATH через brew shellenv

Установка Homebrew - один официальный скрипт с brew.sh. Не качай brew с левых зеркал, бери только официальную команду:

Код: Выделить всё

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Скрипт ведёт себя честно: сначала он печатает полный список того, что собирается сделать (какие каталоги создаст, какие права выставит), и ждёт твоего подтверждения по Enter. Прочитай этот список - это хорошая привычка для любого скрипта, который ты запускаешь из интернета. Один раз скрипт попросит пароль администратора (sudo) - это нужно только на этапе установки, чтобы создать /opt/homebrew и передать владение твоему пользователю. После этого sudo для brew install больше не нужен никогда.

На Apple Silicon есть нюанс, на котором спотыкаются почти все новички: /opt/homebrew/bin не входит в системный PATH по умолчанию. Ты ставишь brew, пишешь brew install, а шелл отвечает command not found. Лечится это строкой brew shellenv, которую тот же скрипт в конце и подсказывает добавить. Для zsh (шелл по умолчанию в macOS):

Код: Выделить всё

echo >> ~/.zprofile
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
Что делает eval "$(/opt/homebrew/bin/brew shellenv)": команда brew shellenv печатает набор export-строк, которые правят окружение, а eval их применяет. Посмотреть, что именно она выдаёт:

Код: Выделить всё

$ /opt/homebrew/bin/brew shellenv
export HOMEBREW_PREFIX="/opt/homebrew";
export HOMEBREW_CELLAR="/opt/homebrew/Cellar";
export HOMEBREW_REPOSITORY="/opt/homebrew";
export PATH="/opt/homebrew/bin:/opt/homebrew/sbin${PATH+:$PATH}";
export MANPATH="/opt/homebrew/share/man${MANPATH+:$MANPATH}:";
export INFOPATH="/opt/homebrew/share/info:${INFOPATH:-}";
Главное здесь - PATH: префикс ставится впереди системных путей. Это значит, что brew-версия инструмента перебивает системную. Например, в системе живёт старый /usr/bin/git, а после shellenv ты получишь свежий /opt/homebrew/bin/git. Проверить, какой именно подхватился:

Код: Выделить всё

$ which git
/opt/homebrew/bin/git
$ git --version
git version 2.49.0
Если which git показывает /usr/bin/git - значит shellenv не применился, открой новый терминал или сделай source ~/.zprofile.

Формулы против касков: brew install и brew install --cask

В Homebrew два типа пакетов, и важно их не путать.
  • Formulae (формулы) - консольные программы, библиотеки, языки, демоны. git, wget, jq, node, python, ffmpeg. Ставятся в Cellar, бинарники линкуются в bin/. Команда: brew install имя.
  • Casks (каски) - готовые macOS GUI-приложения в виде .app-бандлов: браузеры, редакторы, мессенджеры. Homebrew скачивает их .dmg/.pkg, распаковывает и кладёт .app в /Applications. Команда: brew install --cask имя.
На практике:

Код: Выделить всё

$ brew install wget          # формула, CLI-утилита
$ brew install --cask firefox  # каск, GUI-приложение в /Applications
$ brew install --cask visual-studio-code
То есть каски превращают Homebrew в полноценный установщик приложений: не надо вручную монтировать dmg, перетаскивать иконку в Applications и потом гадать, как обновлять. brew upgrade обновит и формулы, и каски заодно. Удаление каска (brew uninstall --cask firefox) уберёт и .app. Поведение нюансное: некоторые каски ставят .pkg, который раскидывает файлы по системе - такие чище удаляются, если у каска прописан uninstall-блок, но мусор в ~/Library каск обычно не подчищает.

Базовые команды: install, search, info, list, deps, outdated, upgrade, uninstall

Минимальный набор, который покрывает 95% работы с brew на Mac:

Код: Выделить всё

$ brew search node        # ищем пакет по имени/описанию
$ brew info wget          # карточка пакета: версия, зависимости, размер
$ brew install wget       # ставим формулу
$ brew list               # что вообще установлено
$ brew deps --tree wget   # дерево зависимостей пакета
$ brew outdated           # что устарело и можно обновить
$ brew upgrade            # обновить всё (формулы и каски)
$ brew upgrade wget       # обновить один пакет
$ brew uninstall wget     # удалить
$ brew autoremove         # снести зависимости, которые больше никому не нужны
Разберём вывод brew info - это твой главный диагностический инструмент перед установкой:

Код: Выделить всё

$ brew info wget
==> wget: stable 1.25.0 (bottled)
Retrieve files using HTTP, HTTPS, FTP and FTPS
https://www.gnu.org/software/wget/
Installed
/opt/homebrew/Cellar/wget/1.25.0 (92 files, 4.5MB) *
==> Dependencies
Required: libidn2, openssl@3, ...
==> Analytics
install: 180,000 (30 days)
Что читаем: stable 1.25.0 (bottled) - доступна стабильная версия и для неё есть bottle (поставится быстро, без сборки). Строка Installed и путь в Cellar говорят, что пакет уже стоит. Блок Dependencies показывает, что вместе с wget приедут libidn2 и openssl - brew подтянет их сам. Это и есть автоматическое разрешение зависимостей: ты просишь один пакет, получаешь рабочий комплект.

Полезная связка для уборки. Со временем в Cellar копятся старые версии и кеши скачанных архивов. Чистится так:

Код: Выделить всё

$ brew cleanup -n     # -n = dry-run, только показать, что удалит
$ brew cleanup        # реально почистить старые версии и кеши
$ brew doctor         # диагностика: brew сам подскажет проблемы
brew doctor - первое, что запускают, когда "что-то сломалось". Он проверяет PATH, права, конфликтующие файлы и пишет конкретные рекомендации (в идеале - Your system is ready to brew).

Для воспроизводимого окружения (новый Mac, командный стандарт) есть Brewfile - декларативный список пакетов:

Код: Выделить всё

$ brew bundle dump     # выгрузить текущий набор в файл Brewfile
$ brew bundle install  # на другой машине поставить всё из Brewfile
Типичные грабли
  • command not found: brew после установки. Классика Apple Silicon - забыл eval brew shellenv в ~/.zprofile. /opt/homebrew/bin просто не в PATH. Добавь строку и открой новый терминал.
  • Не лезь под sudo. sudo brew install - грубая ошибка: ломает права в префиксе, потом brew ругается на "permissions". sudo нужен ровно один раз при первичной установке. Если уже сломал - brew doctor подскажет команду chown для починки владельца.
  • Путаешь формулу и каск. brew install firefox упадёт или поставит не то - Firefox это каск, нужно --cask. И наоборот, CLI-утилиты каском не ставятся.
  • Apple Silicon vs Intel и Rosetta 2. Если ты случайно поставил Homebrew из-под Rosetta (терминал в режиме Intel), он уедет в /usr/local и будет тянуть x86-бинарники. Проверь arm: команда arch должна показывать arm64, а which brew - путь /opt/homebrew/bin/brew. Для нативной M-серии префикс обязан быть /opt/homebrew.
  • brew cleanup и Brewfile-cleanup - разные вещи. brew cleanup безопасно чистит старьё. А вот brew bundle cleanup агрессивен: он сносит всё, чего нет в Brewfile, и в свежих версиях цеплял даже приложения из Mac App Store. Всегда гоняй сначала с флагом проверки и читай, что он собрался удалить.
  • "Старый" инструмент всё равно запускается. which показал /usr/bin/..., а не /opt/homebrew/... - значит порядок PATH неправильный либо shellenv не применился. Помни: brew shellenv ставит свой bin впереди системного, и это by design.
Мини-лаба: ставим, осматриваем, удаляем

Повтори руками на своём Mac, по шагам:

Код: Выделить всё

# 1. Проверь, есть ли brew и где он
which brew
brew --prefix          # на M-серии ждём /opt/homebrew

# 2. Обнови описания пакетов и проверь здоровье
brew update
brew doctor

# 3. Поставь лёгкую формулу и разбери карточку
brew info jq
brew install jq
jq --version

# 4. Посмотри дерево зависимостей и где физически лежит
brew deps --tree jq
ls $(brew --prefix)/Cellar/jq

# 5. Поставь GUI-приложение каском (на свой вкус)
brew install --cask rectangle

# 6. Что устарело и общая уборка
brew outdated
brew cleanup -n

# 7. Снеси формулу и проверь, что симлинк ушёл
brew uninstall jq
which jq
Обрати внимание на шаге 4: $(brew --prefix) сам подставит верный префикс независимо от чипа - так пишут переносимые скрипты. А на шаге 7 после uninstall команда which jq уже ничего не найдёт - симлинк в bin/ удалён, дерево чистое.

Контрольные вопросы
  • Какой префикс Homebrew на Apple Silicon, какой на Intel, и почему на ARM выбрали именно /opt/homebrew?
  • Чем formula отличается от cask, и какой командой ставится каждое? Приведи по примеру.
  • Что делает строка eval "$(/opt/homebrew/bin/brew shellenv)" и почему без неё brew не находится после установки?
  • Почему brew install не требует sudo, и что произойдёт, если всё же запустить его через sudo?
Итог

Homebrew - это стандартный способ жить с софтом на Mac: установка Homebrew одним официальным скриптом, свой префикс (/opt/homebrew на Apple Silicon, /usr/local на Intel), PATH через brew shellenv - и дальше brew install для CLI-формул, brew install --cask для GUI-приложений, brew upgrade/cleanup/doctor для поддержания порядка. Под капотом - Ruby-формулы из Git-репозиториев и быстрые бинарные bottles, а владение префиксом твоим пользователем убирает sudo из повседневной работы. Запомни три вещи: правильный префикс под свой чип, shellenv в профиле и никогда не brew под sudo - на этом построено всё остальное.
👍6 ❤️1 🔥 😄 🤔1
Аватара пользователя
maclean
Сообщения: 1
Зарегистрирован: 11 май 2026, 00:11

Re: Homebrew: пакетный менеджер для macOS

Сообщение maclean »

Спасибо, наконец понял почему brew после установки писал command not found - забыл строку с shellenv в .zprofile. Добавил, новый терминал, заработало.
👍1 ❤️ 🔥 😄 🤔
Аватара пользователя
emacsmaster
Сообщения: 1
Зарегистрирован: 18 май 2026, 03:04

Re: Homebrew: пакетный менеджер для macOS

Сообщение emacsmaster »

А brew bundle dump реально удобно для нового мака: выгрузил Brewfile со старого, на новом brew bundle install и весь набор приехал. Только cleanup трогать боюсь после ваших слов про App Store.
👍 ❤️ 🔥 😄 🤔
Ответить
← Предыдущая глава
Файловая система и права: POSIX, ACL, атрибуты, флаги
Следующая глава →
Homebrew глубже: tap, Brewfile, services, обслуживание

Все главы курса «macOS для профи: администрирование, терминал и Homebrew»

Поделиться темой: ✈ Telegram VK
  • Похожие темы
Похожие запросы: Что такое macOS и Unix под капотомHomebrew для macOS: установка и пакеты

Вернуться в «macOS для профи: администрирование, терминал и Homebrew»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя