Исправление ошибки «zsh: permission denied» в Terminal на macOS
Почему возникает ошибка
Ошибка «zsh: permission denied» означает, что текущий пользователь или оболочка Zsh не имеют прав на выполнение или доступ к файлу/папке, либо к ресурсу препятствует системная защита. Коротко: у вас либо нет нужных прав, либо объект заблокирован или защищён системой.
Ключевые причины:
- Неправильная команда или опечатка в пути.
- У файла не выставлен бит выполнения (execute).
- Неправильный владелец или группа (ownership).
- Файл заблокирован в Finder или помечен атрибутами (xattr).
- System Integrity Protection (SIP) или монтирование в режиме только для чтения.
- Скрипт имеет неверный шебанг (shebang) или ожидает другую оболочку.
Проверьте команду и путь
Всегда начните с простого: дважды проверьте команду и путь к файлу. Часто ошибка — опечатка в имени файла или в каталоге.
Пример ошибок:
- ./script.sh вместо ./scripts.sh
- Пробелы/спецсимволы в имени без экранирования
Если вы не уверены, используйте tab-completion или ls для проверки:
ls -l /путь/к/файлуРазблокируйте файл или папку через Finder
Если объект помечен как заблокированный в Finder, откройте контекстное меню (Control‑клик) → Получить информацию (Get Info) и снимите галочку «Locked». Это убирает флаг блокировки для GUI-версии файла.
ALT: Экран Mac с открытым Terminal и курсором в командной строке
Разблокировка через Terminal
Если вы предпочитаете Terminal, удалите флаг пользовательской блокировки:
chflags nouchg /путь/к/файлуДля каталога и его содержимого добавьте -R:
chflags -R nouchg /путь/к/папкеДобавьте право на выполнение (execute)
Если вы пытаетесь запустить shell-скрипт (.sh) или бинарный файл, убедитесь, что у него есть бит выполнения.
Примеры команд:
chmod +x /путь/к/файлу.sh
chmod 755 /путь/к/файлу.shРазница: chmod +x добавляет право выполнения к существующим правам; chmod 755 устанавливает права rwxr-xr-x (владелец — чтение/запись/выполнение, группа и остальные — чтение/выполнение).
Проверьте права:
ls -l /путь/к/файлу.sh
# пример вывода: -rwxr-xr-x 1 username staff 1234 Jan 1 12:00 file.shВажно: избегайте chmod 777 — это даёт полный доступ всем и повышает риск безопасности.
ALT: Окно Terminal с командами chmod и ls, показывающими права файла
Измените владельца и группу
Иногда файл принадлежит другому пользователю. Присвойте владельцем себя (замените $USER вашим логином, если нужно):
sudo chown -R $USER:$USER /путь/к/файлу_или_папкеОпция -R рекурсивно меняет владельца для папки и её содержимого. sudo требуется, если вы не являетесь владельцем и не имеете прав на изменение.
Дополнительные проверки и альтернативные подходы
- Запустить с sudo (только если доверяете коду):
sudo /путь/к/исполняемому_файлу- Запустить через конкретную оболочку:
bash /путь/к/скрипту.sh
sh /путь/к/скрипту.sh- Снять атрибут кворентайна (иногда файл загружен из интернета):
xattr -d com.apple.quarantine /путь/к/файлуПроверить зашифрованный или смонтированный только для чтения диск — нельзя изменить права на read-only.
Если ошибка при попытке доступа к системным ресурсам, учтите System Integrity Protection (SIP). SIP защищает системные каталоги и запрещает изменения даже с sudo.
Модель мышления: как думать о правах Unix
Короткая шпаргалка:
- Владелец (owner): пользователь, которому принадлежит файл.
- Группа (group): набор пользователей с общими правами.
- Остальные (others): все прочие.
- Биты rwx: read=4, write=2, execute=1. Комбинации дают число, например 7 (4+2+1).
- Для директорий execute означает право заходить в каталог.
Эта модель помогает понять, какие команды применять: chmod меняет права, chown — владельца, chflags/xattr — системные флаги.
Быстрый план действий (Playbook)
- Проверьте команду и путь (ls, tab).
- Посмотрите права: ls -l /путь.
- Если нет x — chmod +x /путь.
- Если владелец другой — sudo chown -R $USER:$USER /путь.
- Если файл заблокирован — chflags nouchg /путь и xattr -d com.apple.quarantine /путь.
- Если всё ещё не работает — проверьте, не защищён ли путь SIP, и не монтирован ли диск в режиме read-only.
Командная шпаргалка
ls -l /путь # показать права и владельца
chmod +x file.sh # добавить бит выполнения
chmod 755 file.sh # установить rwxr-xr-x
sudo chown -R $USER:$USER /путь # изменить владельца и группу
chflags nouchg /путь # снять флаг Locked
xattr -l /путь # показать расширенные атрибуты
xattr -d com.apple.quarantine /путь # удалить quarantineКогда перечисленные шаги не помогают
- Файл расположен в защищённом системном каталоге (SIP). Решение: не пытайтесь изменять системные файлы; вместо этого помещайте свои скрипты в /usr/local/bin или ~/bin.
- Файловая система смонтирована как read-only (например, ISO-образ, некоторые сетевые ресурсы).
- Скрипт исполняет команды, требующие дополнительных прав (например, доступ к аппаратуре) — тогда нужен sudo или другая привилегия.
- Исполняемый файл повреждён или несовместим с вашей архитектурой (например, бинарник для другой ОС).
Роль‑ориентированные чек-листы
Для разработчика:
- Убедиться, что shebang корректен (например, #!/usr/bin/env bash).
- Проверить права и владельца.
- Тестировать запуск через bash/sh.
Для администратора:
- Проверить монтирование, права на каталоги, NFS/SMB-права.
- Проверить ACL и расширенные атрибуты (xattr).
Для начинающего:
- Начать с ls -l и chmod +x, затем спросить в сообществе с результатами ls -l.
Диагностическое дерево принятия решения
flowchart TD
A[Ошибка: zsh: permission denied] --> B{Файл/путь верны?}
B -- Нет --> C[Исправьте путь/имя]
B -- Да --> D{Есть бит выполнения?}
D -- Нет --> E[chmod +x /путь]
D -- Да --> F{Вы владелец?}
F -- Нет --> G[sudo chown -R $USER:$USER /путь]
F -- Да --> H{Файл заблокирован или помечен?}
H -- Да --> I[chflags nouchg; xattr -d com.apple.quarantine]
H -- Нет --> J{Файловая система или SIP?}
J -- Да --> K[Проверить монтирование/SIP и действовать осторожно]
J -- Нет --> L[Запустить через bash/sh или с sudo]Вопросы и ответы
Как временно запустить файл без изменения прав?
Вы можете запустить скрипт через оболочку: bash /путь/к/скрипту.sh или sh /путь/к/скрипту.sh.
Можно ли использовать chmod 777 для быстрого решения?
Технически — да, это даст доступ, но это плохая практика с точки зрения безопасности. Используйте минимально необходимые права.
Почему chmod +x не решает проблему?
Потому что проблема может быть в владельце, расширенных атрибутах, монтировании или SIP. Проверьте chown, xattr и статус монтирования.
ALT: Диалог «Получить информацию» файла в macOS с опцией Locked и разделом прав доступа
Краткое резюме
Ошибка «zsh: permission denied» обычно решается простыми действиями: проверьте путь, добавьте бит выполнения (chmod), измените владельца (chown) или снимите флаги блокировки (chflags/xattr). Если всё это не помогает — проверьте системные защиты (SIP), режим монтирования и совместимость бинарника.
Важно: не предоставляйте избыточные права (например, chmod 777) без необходимости и не изменяйте системные файлы вручную.
Краткое объявление для команды (100–200 слов):
Если вы заметили «zsh: permission denied» при работе в macOS Terminal, следуйте короткому чек‑листу: 1) проверьте команду и путь; 2) выполните ls -l; 3) добавьте chmod +x при необходимости; 4) смените владельца через sudo chown -R $USER:$USER; 5) снимите флаги chflags/xattr. Если и после этого проблема остаётся — проверьте, не мешает ли System Integrity Protection или режим монтирования. Эти шаги безопасны и решают большинство распространённых ситуаций.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone