Домашний напиток: символическая ссылка не может быть, / usr / local / bin недоступна для записи [закрыто]

361

При установке tig, HomeBrewотображают следующие проблемы при установке зависимости:

Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink bin/a2x
/usr/local/bin is not writable.

You can try again using:
  brew link asciidoc
Джикку Хосе
источник
3
Это не относится к stackowerflow.com, скорее superuser.com или askdifferent.com
Ондра Жижка

Ответы:

582

После ответа Алекса я смог решить эту проблему; Кажется, это проблема не только для устанавливаемых пакетов, но и для разрешений homebrewпапок.

sudo chown -R `whoami`:admin /usr/local/bin

Для некоторых пакетов, вам может понадобиться , чтобы сделать это /usr/local/shareили /usr/local/opt:

sudo chown -R `whoami`:admin /usr/local/share
sudo chown -R `whoami`:admin /usr/local/opt
Джикку Хосе
источник
25
Разве повторное использование всех / usr / local / bin для текущего использования не доставляет проблем системе или другим пользователям?
Дон Джулио
10
Разве sudo chown -R whoami не :admin /usr/local/binбудет эквивалентно команде в ответе, без необходимости замены yourusenameна ваше настоящее имя пользователя?
Джейсон Светт
5
Я должен был также чур usr/local/optрекурсивно. Это сработало после этого.
atripes
5
На моем Mac (10.9.5) права доступа /usr/local/bin(и друзей), кажется, возвращаются к drwxr-xr-x+и root wheelкаждый день. Я должен переконфигурировать завивки каждый раз, когда я хочу brew install. Я предполагаю, что операционная система сбрасывает перми, чтобы защитить меня? Как я могу остановить это? (Я пробовал, chflags uchg …но это мешает
варке кофе
1
Я добавил свой аккаунт в группу "wheel". Это позволяет мне "sudo chmod -R g + w / usr / local" - это позволяет членам группы "wheel" писать в папки. Кажется безопаснее, чем менять владельца этих конфиденциальных папок на менее защищенную учетную запись, чем root.
Майкл Кребс
220

Вместо того, чтобы запускать какую-либо конкретную команду, я бы порекомендовал запустить brew doctorи воспринимать все предупреждения серьезно. Могут возникнуть другие проблемы, с которыми вы можете застрять, и которые не могут быть рассмотрены в этом вопросе.

Кроме того, поскольку brew обновляется со временем, определенные команды могут или не могут оставаться в силе. brew doctorТем не менее, убедитесь, что вы получите актуальную информацию по устранению неполадок.

zakishaheen
источник
9
Я не могу поверить, что ваш ответ менее популярен. Это, безусловно, более разумно, чем предположение, высказанное выше.
Роберт из Фэрфакса
34
brew doctorне решит проблему, она только расскажет вам об этом, и когда вы прислушаетесь к совету врача, Brew говорит, что не может этого сделать. Это не решение
Кит Тайлер
8
Может быть, кто-то улучшил это. Теперь доктор brew предлагает мне запустить команду, аналогичную наиболее популярному ответу, и после этого ссылка на brew работает. Я на маке, так что посмотрим, как долго это будет продолжаться. :-)
Джошуа Ричардсон,
2
Это было очень полезно, спасибо. Исправлены некоторые другие специальные каталоги, чтобы пропустить вышеупомянутое предложение.
SwimBikeRun
6
Доктор Brew предоставил ТОЧНУЮ проблему и предоставил ручное решение!
Нетрокс
74

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

причина

Есть две возможные причины этой проблемы:

  1. Установка homebrew была выполнена с пользователем, отличным от того, которого вы используете в данный момент. Доморощенный ожидает, что только пользователь, который установил это первоначально, когда-либо захочет использовать это.
  2. Вы установили некоторое программное обеспечение, которое пишет в / usr / local без использования brew. Это причина brew doctorподсказывает, если вы ее запустите.

Решение

Многопользовательский доморощенный

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

Подробные инструкции можно найти в Интернете , но быстрый ответ таков:

  1. Создайте группу с именем brew:

    1. Настройки открытой системы
    2. Нажмите Аккаунты
    3. Нажмите «+» (сначала разблокируйте при необходимости)
    4. Под New account выберите Group
    5. введите варево
    6. Нажмите Создать группу
  2. Выберите группу brew и добавьте в нее учетные записи пользователей, которых вы хотите использовать brew.
  3. измените владельца группы папок / usr / local: sudo chgrp -R brew /usr/local
  4. измените разрешения для добавления записи в / usr / local как группу: sudo chmod -R g+w /usr/local
  5. изменить группу каталогов доморощенного кэша: sudo chgrp -R brew /Library/Caches/Homebrew
  6. изменить права доступа к каталогу кеша sudo chmod -R g+w /Library/Caches/Homebrew

Однопользовательский доморощенный

Если вы не пытаетесь использовать более одного пользователя с Homebrew, то, brew doctorвероятно, будет достаточно решения, предоставленного другими ответами на основе предложений :

sudo chown -R $(whoami) /usr/local

sudo chown -R $(whoami) /Library/Caches/Homebrew

верификация

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

stonecrusher
источник
2
Спасибо! Я, вероятно, должен прочитать больше о пользовательских группах Unix. Я совершенно не понимаю, как это работает, чтобы достаточно хорошо переварить рассуждения. Но это звучит очень разумно, спасибо за указатель!
Джикку Хосе
1
Unix-группы проще, чем вы можете предположить - у каждого файла есть разрешения на чтение, запись и выполнение, доступные для «пользователя» и «группы», которым принадлежит этот файл, и для «других». Если вы установите группу, которая владеет файлом или папкой, и добавите разрешения на запись в «группу» для этой папки, то любой пользователь в этой группе сможет писать в эту папку. Там действительно не больше, чем это. не так сложно, как разрешения в окнах.
каменщик
1
Таким образом, это простой способ объединить систему разрешений набора файлов в группу, чтобы можно было легко добавить нескольких пользователей, чтобы применить все эти разрешения за один раз?
Джикку Хосе
2
Это исправило мои проблемы с пивоваренной связью, спасибо.
Кит Тайлер
Тем не менее, мне кажется немного опасным иметь секретный каталог, такой как /usr/local/binдоступный для записи, esp. в многопользовательской среде. Это действительно "официальный" способ приготовления?
corwin.amber
67

Для тех, кто ищет /usr/local/sbinне записываемую ошибку:

ОБНОВЛЕНИЕ: Это может быть, /usr/local/someOtherFolderNameнапример /usr/local/include. Вам просто нужно создать эту папку с:

  • sudo mkdir someOtherFolderName

Сначала создайте sbinпапку, обратите внимание, что это требует sudoпривилегий

  • cd /usr/local

  • sudo mkdir sbin

  • sudo chown -R $(whoami) $(brew --prefix)/*

  • brew link yourPackageName

gokcand
источник
6
Это сработало для меня
Робин
Мне также нужно было добавить каталог в мой ~ / .bash_profile:PATH=$PATH:/usr/local/sbin
Julien
После нескольких часов поисков, это единственное, что сработало для меня. Я в Высокой Сьерре.
ItsJoeTurner
34

Я нашел для моей конкретной настройки следующие команды работали

brew doctor

И тогда это показало мне, где были мои ошибки, а затем эта немного отличающаяся команда от комментария выше.

sudo chown -R $(whoami) /usr/local/opt
kinnth
источник
2
Спасибо за очевидное предложение. Я склонен забыватьbrew doctor
Энтони
1
Это решило проблему здесь
хаосдоктор
brew doctorхороший.
AechoLiu
работал как шарм, спасибо
hexley
15

Я нашел ту же проблему, мы можем решить в три этапа:

Шаг 1

sudo chown -R $(whoami) $(brew --prefix)/*

Шаг 2

brew doctor

Шаг 3

brew prune

Если у вас все еще есть проблемы со ссылками, скажем mysql, просто напишите

brew link mysql

Это будет работать

Harry_pb
источник
1
работал для меня на rabbitmq
Омар
Какова цель «Шаг 1»?
Конрад C
1
доктор варит палец вверх! Не делал brew prune, но установил другие недостающие пакеты, и это сработало для mongodb.
Chenlu
Вызов «варки чернослива» отключен. Вместо этого используйте «brew cleanup».
ХануманДев
12

Для тех, кто сталкивался с этой проблемой (предоставленной через 4 года после создания этого поста) во время работы с Mac OS High Sierra - описанные здесь шаги решили эту проблему для меня. По сути, просто описывает удаление и повторную установку Brew.

https://medium.com/@mrkdsgn/brew-error-on-macos-high-sierra-check-you-have-permission-to-write-to-usr-local-e8bd1c6a22d4

После выполнения этих шагов, brew link работал как шарм!

Эрон Саллинг
источник
Я обнаружил, что это работает для меня (без начальной команды дампа): github.com/Homebrew/brew/issues/3285#issuecomment-334976806
vr_driver
Спасибо! Попробовал верхний ответ Гарри, не повезло - попробовал это, и это сработало как шарм!
Джо
Работал на меня, спасибо!
Дзен
9

Для меня решение было запустить brew update.

Итак, сделайте это в первую очередь.

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

Изменить: я обнаружил, что мне нужно обновить, запустив, brew doctorкак предложено в ответе @ kinnth на этот же вопрос.

Общий процесс устранения неполадок может выглядеть следующим образом: 1. запустить brew update 2. если это не помогает запустить brew doctorи следуйте его указаниям 3. если это не поможет проверить переполнение стека

FragmentalStew
источник
1
Это исправило все для меня и хорошо стоит сделать прежде всего.
Роб Эванс
Все, что делает доктор по пивоварению, это указывает на то, что у меня в подвале нет кег, поэтому я ничего не могу сделать, чтобы решить проблему ОП
AlxVallejo
@AlxVallejo Это то, что я сделал, чтобы решить проблему, возникшую у меня, когда я получал почти такую ​​же ошибку, как OP. Сообщение, которое вы получили от Brew Doctor, звучит для меня как другая проблема. Рабочий процесс «1. запустить обновление brew 2. если это не помогает запустить brew doctor и следовать его указаниям 3. если это не помогает проверить переполнение стека», вероятно, все еще применяется.
FragmentalStew
6

При выполнении узла brew link Кроме того, у меня появились следующие проблемы:

Ошибка: не удалось включить символическую ссылку / узел / usr / local / include.

Ссылка /usr/local/Cellar/node/9.3.0 ... Ошибка: в доступе отказано @ dir_s_mkdir - / usr / local / lib

Чтобы решить вышесказанное, просто перейдите в / usr / local / и проверьте наличие папок «include» и «lib», если эти папки недоступны, просто создайте их вручную.

И снова запустите узел установки brew

Васанта Виджаяратна
источник
5

Это потому, что текущему пользователю не разрешено писать по этому пути. Таким образом, для изменения прав на чтение / запись вы можете использовать либо 1. терминал, либо 2. Графическое окно «Информация».

1. Использование терминала

Google, как использовать команды chmod / chown (сменить режим / сменить владельца) из терминала

2. Использование графического «Получить информацию»

Вы можете щелкнуть правой кнопкой мыши по папке / файлу, для которого вы хотите изменить права доступа, а затем открыть Get Info, который покажет вам окно, как показано ниже, в нижней части которого вы можете легко изменить права доступа: введите описание изображения здесь

Не забудьте изменить разрешение обратно на «только чтение» после вашей временной работы, если это возможно

Хасаан Али
источник
используйте brew doctor - он правильно определит (системные) папки, которые необходимо исправить.
Johndpope
3

Для пользователей Антивируса Sophos я нашел следующее:

https://stackoverflow.com/a/32981184

https://community.sophos.com/products/free-antivirus-tools-for-desktops/f/17/t/10029

Короче говоря, Sophos меняет разрешения определенных каталогов / usr / local. Sophos исправил это, и исправление включено в версию 9.4.1.

joshau
источник
К сожалению, я все еще получаю это, и у меня установлен Sophos, FWIW: |
rogerdpack 20.09.16
2

Моя проблема была

Error: Could not symlink share/man/man7/ABORT.7
/usr/local/share/man/man7 is not writable.

chownне помогло, но я последовал brew doctorсоветам, и это предупреждение помогло мне:

Warning: Broken symlinks were found. Remove them with `brew prune`:
/usr/local/share/man/man3/* 

Ведь brew pruneвсе работало нормально!

Павел Дружинин
источник
Отлично. Работает для меня.
Bagusflyer
1

Для тех, кто не знаком:

sudo chown -R YOUR_COMPUTER_USER_NAME PATH_OF_FILE
Джастин
источник
0

Если вы перейдете в папку в Finder, щелкните правой кнопкой мыши и выберите «Получить информацию», вы можете перейти в раздел «Общий доступ и разрешения» для папки и разрешить «Чтение и запись» «всем».

Это то, что я делаю, чтобы символические ссылки проходили с этой ошибкой. Также brew, кажется, сбрасывает права доступа к папке, как будто вы ничего не меняли.

Карл Липперт
источник
0

Если у вас уже есть каталог /usr/localдля устанавливаемого пакета, вы можете попробовать удалить этот каталог.

В моем случае я ранее установил пакет, который пытался установить без использования brew, а затем удалил его. После /usr/local/<my_package>/предыдущей установки остался каталог . Я удалил эту папку ( sudo rm -rf /usr/local/<my_package>/), и после этого шаг brew link прошел успешно.

Сэмюэл Питер
источник