Ошибка «zsh: permission denied» в Terminal - частый сюрприз для тех, кто начинает работать с командной строкой на Mac. Появляется при попытке запустить скрипт, открыть файл или выполнить команду. Причин несколько - разберёмся в каждой.
Что значит эта ошибка
Ошибка permission denied означает, что Unix-права файла не позволяют выполнить запрошенное действие. Это базовая защита macOS (как в Linux): каждый файл имеет атрибуты - «чтение», «запись», «выполнение» - для трёх групп пользователей: owner, group, others.
Если у файла нет флага «выполнение» (execute), вы не можете его запустить.
Способ 1: Самая частая причина - нет флага execute
Скачали скрипт с интернета, пытаетесь запустить:
./install.sh
# zsh: permission denied: ./install.sh
Решение: добавить флаг выполнения.
chmod +x install.sh
./install.sh
# теперь работает
Что делает chmod +x: устанавливает executable-флаг для всех пользователей. Команда chmod u+x - только для owner.
Способ 2: Проверить права файла
Прежде чем менять права, посмотрите текущие:
ls -la script.sh
Вывод:
-rw-r--r-- 1 user staff 1234 Apr 18 10:00 script.sh
Расшифровка:
- - - обычный файл (не директория, не link).
- rw- - owner может читать и писать, но не выполнять.
- r-- - group только читать.
- r-- - others только читать.
Для выполнения нужно:
chmod 755 script.sh
# или
chmod u+x,g+x,o+x script.sh
# или просто
chmod +x script.sh
Числовой формат chmod:
- 4 = read, 2 = write, 1 = execute.
- 755 = 7 (rwx) для owner, 5 (rx) для group, 5 (rx) для others.
- 644 = 6 (rw) для owner, 4 (r) для group, 4 (r) для others - без execute.
- 777 = все права всем (небезопасно, не используйте).
Способ 3: Вы не owner файла
Если файл принадлежит другому пользователю или root, у вас может не быть прав его запускать даже с +x:
ls -la /usr/local/bin/mytool
# -rwxr-xr-x 1 root wheel ... mytool
Здесь owner = root. Если вам нужно его запустить:
sudo /usr/local/bin/mytool
sudo - выполнить как root, требует пароль.
Способ 4: Нет доступа к директории
Иногда проблема не в файле, а в папке, где он лежит:
./script.sh
# zsh: permission denied: ./script.sh
ls -la .
# d--------- ...
# rwx для owner сняты
Проверьте права папки:
ls -la .
ls -lad /path/to/folder
Для входа в папку (cd, ls) нужен execute флаг директории (счёт прав для директорий работает слегка иначе: x = «войти внутрь»).
Исправить:
chmod +x /path/to/folder
Способ 5: Quarantine flag (Gatekeeper)
MacOS помечает файлы, скачанные из интернета, атрибутом com.apple.quarantine. Это не чистый permission denied, но результат похож.
xattr скрипт.sh
# com.apple.quarantine
xattr -d com.apple.quarantine скрипт.sh
# снимаем quarantine
# Или рекурсивно
xattr -dr com.apple.quarantine ~/Downloads/package/
После снятия quarantine файл можно запускать без дополнительных предупреждений.
Способ 6: System Integrity Protection (SIP)
SIP - защита системных файлов macOS. Вы не можете изменить или запустить файлы в некоторых системных локациях даже с sudo.
Проверить статус SIP:
csrutil status
# System Integrity Protection status: enabled.
Если запрещено писать в /System/, /usr/ (кроме /usr/local/), /bin/, /sbin/ - это SIP.
Обходить SIP не рекомендуется. Вместо этого:
- Устанавливайте ПО в
/usr/local/bin/или/opt/homebrew/bin/(Apple Silicon). - Для home-directory скриптов -
~/bin/или~/.local/bin/.
Способ 7: Полный диск защищён FileVault / прав на volume
Если пишете в странное место и видите permission denied:
touch /Volumes/ExternalDisk/file
# Permission denied
На внешнем диске может быть выставлен «read-only» или владельцы не те:
# Проверить
ls -la /Volumes/ExternalDisk/
# Включить «Ignore ownership» в Finder
Finder → выделить диск → Get Info → ☑️ «Ignore ownership on this volume»
Для NTFS-дисков с Windows - Mac не может писать (без Mounty или Paragon).
Способ 8: Homebrew permission denied
Частый случай: Homebrew пытается писать в /usr/local/Cellar, а права не настроены (особенно после обновления macOS).
brew install wget
# Error: /usr/local/Cellar is not writable.
Решение:
# Intel Mac
sudo chown -R $(whoami) /usr/local/Cellar /usr/local/Homebrew /usr/local/etc /usr/local/sbin /usr/local/share /usr/local/var
# Apple Silicon Mac (Homebrew в /opt/homebrew)
sudo chown -R $(whoami) /opt/homebrew
После этого Homebrew будет работать без sudo.
Способ 9: Скрипт внутри защищённой папки
Некоторые папки (Documents, Desktop, Downloads) требуют явного разрешения macOS для доступа программам.
./script.sh в ~/Documents
# может выдать permission denied даже с chmod +x
Решение: разрешите Terminal (или iTerm2) доступ к папке:
System Settings → Privacy & Security → Files and Folders → Terminal → галочки на Documents/Desktop/Downloads.
Или дайте Terminal Full Disk Access:
System Settings → Privacy & Security → Full Disk Access → + → добавить Terminal или iTerm2.
Способ 10: Изменить владельца файла
Если файл принадлежит кому-то не тому (например, root после sudo-копирования):
ls -la file
# -rwxr-xr-x 1 root wheel ... file
sudo chown $(whoami) file
# теперь вы - владелец
sudo chown -R $(whoami):staff /path/to/folder
# рекурсивно для папки
Распространённые сценарии
«./configure: permission denied»
Типичная ошибка при компиляции из исходников. Решение: chmod +x configure.
«zsh: permission denied: brew»
Проблема с PATH или правами. Проверьте:
which brew
# должен показать /opt/homebrew/bin/brew (Apple Silicon) или /usr/local/bin/brew (Intel)
ls -la /opt/homebrew/bin/brew
# -rwxr-xr-x - должен быть x
Если брю не там - переустановите Homebrew.
«Operation not permitted»
Это НЕ permission denied, это другая ошибка - macOS Security & Privacy блокирует действие. Решается через разрешения в System Settings (Full Disk Access, Files & Folders).
Сломана домашняя папка
Если cd ~ или ls ~ выдают permission denied - домашняя папка повреждена (редко, но случается после миграции):
sudo chown -R $(whoami):staff ~/
Осторожно: эта команда даст вам права на ВСЮ домашнюю папку. Это нормально если вы её единственный пользователь, опасно - если там есть чужие файлы.
Безопасность
НЕ делайте:
chmod 777где попало - это даёт права всем пользователям.sudo chown -Rна всё подряд - можно сломать систему.- Отключать SIP без понимания последствий.
- Запускать неизвестные скрипты с
sudo.
Правильные практики:
- Минимальные необходимые права: 644 для файлов, 755 для скриптов/папок, 700 для приватных данных.
- Проверяйте что делает скрипт перед запуском -
cat script.shили откройте в VS Code. - Используйте
sudoтолько когда нужно, не «на всякий случай».
Итог
Алгоритм диагностики «permission denied»:
ls -la file- посмотреть текущие права.- Нет
x? -chmod +x file. - Файл не ваш? -
sudo chown $(whoami) fileили запуск черезsudo. - Папка недоступна? -
chmod +x /path/to/folderили права на родителя. - Скачали с интернета? -
xattr -d com.apple.quarantine file. - Homebrew ошибка? -
sudo chown -R $(whoami) /opt/homebrew. - Терминал не может читать папку? - Privacy & Security → Files and Folders → Terminal.
В 80% случаев помогает пункт 2 (забыли chmod +x). Остальные сценарии встречаются реже, но диагностируются похоже: ls -la, проверка владельца, проверка папки, разрешения macOS.
Комментарии (0)