Домашня мова: Неможливо позначити посилання, / 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
Žižka

Відповіді:


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власним іменем користувача?
Jason Swett

5
Мені довелося також подавати usr/local/optрекурсивно. Це спрацювало після цього.
atripes

5
На мій макінтош (10.9.5) права доступу /usr/local/bin(і друзів) , здається, повертаються до drwxr-xr-x+і root wheelкожен день. Я повинен перенастроювати хімічні речовини кожен раз, коли мені захочеться brew install. Я припускаю, що ОС скидає хімічні речовини для захисту мене? Як я можу змусити його зупинитися? (Я намагався, chflags uchg …але це заважає встановити варіння.)
Quinn Comendant

1
Я додав свій рахунок до групи "колеса". Це дозволяє мені "sudo chmod -R g + w / usr / local" - це дозволяє членам групи "колесо" писати в папки. Здається безпечнішим, ніж зміна власника цих чутливих папок на менш захищений обліковий запис, ніж root.
Майкл Кребс

220

Замість того, щоб виконувати якусь конкретну команду, я б рекомендував запускати brew doctorта сприймати всі попередження серйозно. Можуть виникнути інші проблеми, з якими ви застряєте, і які не можуть бути захоплені цим питанням.

Крім того, коли пиво оновлюється з часом, окремі команди можуть або не можуть залишатися дійсними. brew doctorоднак, ви забезпечите актуальне усунення несправностей.


9
Не можу повірити, що ваша відповідь менш популярна. Це, безумовно, більш розсудливо, ніж здогадки, висловлені вище.
Роберт Ферфакс

34
brew doctorне вирішить проблему, вона лише розповість вам про це, і коли ви приймете поради лікаря, пивоваріть сказати, що не може цього зробити. Це не рішення
Кіт Тайлер

8
Можливо, хтось це покращив. Зараз лікар-заварювач пропонує мені запустити аналогічний cmd до найпопулярнішої відповіді, і після цього заварене посилання працює. Я на mac, тому ми побачимо, як довго це триває. :-)
Джошуа Річардсон

2
Це було дуже корисно дякую. Виправлено деякі інші спеціальні каталоги, щоб придушити вищезгадану пропозицію пропущеною.
SwimBikeRun

6
лікар-пивовар надав ТОЧНУ проблему та надав і ручне рішення!
netrox

74

Інші відповіді правильні, наскільки вони йдуть, але вони не відповідають, чому це може виникнути, і як вирішити цю першопричину.

Причина

Існують дві можливі причини цього питання:

  1. Установка домашнього перекладу виконана з іншим користувачем, ніж той, який ви зараз використовуєте. Homebrew очікує, що тільки користувач, який встановив його спочатку, хотів би ним користуватися.
  2. Ви встановили деяке програмне забезпечення, яке пише в / usr / local, не використовуючи brew. Це причина brew doctorпідказує, якщо ви запустите її.

Рішення

Багатокористувацька домашня мова

Якщо у вас є кілька облікових записів користувачів, і ви хочете, щоб декілька з них могли використовувати пивоварню, вам потрібно пройти кілька кроків, інакше вам доведеться постійно змінювати право власності на структуру файлів Homebrew щоразу, коли ви переключаєте користувачів, і це не чудова ідея.

Детальні інструкції можна знайти в Інтернеті , але швидка відповідь така:

  1. Створіть групу з назвою brew:

    1. Відкрийте Налаштування системи
    2. Клацніть Облікові записи
    3. Клацніть "+" (при необхідності спочатку розблокуйте)
    4. У розділі Новий обліковий запис виберіть Група
    5. введіть пивоваріння
    6. Натисніть Створити групу
  2. Виберіть групу варіння та додайте до неї облікові записи користувачів, які ви хочете використовувати.
  3. змінити / usr / локальну власність групи папок: 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слід повідомити про успіх будь-якого користувача групи пивоваріння , якщо припустити, що ви вийшли з системи та знову увійдете, щоб застосувати нове членство в групі (якщо ви пішли шляхом багатокористувача). Якщо ви просто виправили речі для домашнього домашнього перекладу для одного користувача, то вихід із системи та повторне ввійти не повинні бути необхідними, оскільки жодне з членів вашої групи не змінилося.


2
Дякую! Я, мабуть, повинен прочитати більше про групи користувачів Unix. Я абсолютно незрозумілий про те, як це працює, щоб переконання досить добре засвоїти. Але це звучить дуже розумно, дякую за вказівник!
Jikku Jose Jose

1
Групи unix простіші, ніж ви можете припустити - кожен файл читає, записує та виконує дозволи, доступні для "користувача" та "групи", що володіє цим файлом, та для "інших". Якщо ви встановите групу, яка володіє файлом або папкою, і додаєте дозволи для запису до 'group' для цієї папки, то будь-який користувач цієї групи може записати її в папку. Тут насправді більше немає. не настільки складний, як дозволи в Windows.
stonecrusher

1
Тож це простий спосіб поєднати систему дозволів набору файлів до групи, щоб можна було легко додавати декількох користувачів, щоб застосувати всі ці дозволи за один раз?
Jikku Jose Jose

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


6
Це працювало для мене
Робін

Мені також потрібно було додати каталог до мого ~ / .bash_profile:PATH=$PATH:/usr/local/sbin
Julien

Після годин пошуків це єдине, що працювало на мене. Я на Високій Сьєррі.
ItsJoeTurner

34

Я знайшов для моєї конкретної установки такі команди працювали

brew doctor

І тоді це показало мені, де мої помилки, а потім ця трохи інша команда від коментаря вище.

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

2
Дякую за очевидну пропозицію. Я, як правило, забуваюbrew doctor
Антоній

1
Це вирішило тут проблему
khaosdoctor

brew doctorце добре.
AechoLiu

працював як шарм, спасибі
hexley

15

Я знайшов таку ж проблему, яку ми можемо вирішити в три етапи: -

Крок 1

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

Крок 2

brew doctor

Крок 3

brew prune

Якщо у вас все-таки виникає якась проблема зв’язування, давайте скажемо mysql, просто напишіть

brew link mysql

Це спрацює.


1
працював у мене на кролика
Омар

Яка мета "Крок 1"?
Конрад C

1
заварити великий палець лікаря! Не заварив чорнослив, але встановив інші відсутні пакети, і він працював на mongodb.
Ченлу

Виклик "чорносливу" відключений. Використовуйте замість цього «очищення заварити».
hanumanДев

12

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

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

Після виконання цих кроків brew link працював як шарм!


Я виявив, що це працювало для мене (без початкової команди dump): github.com/Homebrew/brew/isissue/3285#issuecomment-334976806
vr_driver

Дякую! Спробував гарну відповідь Гаррі, не пощастило - спробував це, і це спрацювало як шарм!
Джо

Працювали для мене, дякую!
zen

9

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

Отже, РОБИТИ ЦЕ ПЕРШЕ.

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

Редагувати: Я виявив, що мені потрібно оновити, запустивши, brew doctorяк запропонував відповідь @ kinnth на це ж запитання.

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


1
Це все виправляло для мене, і це варто зробити перед усім.
Роб Еванс


@AlxVallejo Це те, що я зробив, щоб вирішити проблему, яка була в мене, коли я отримував майже ідентичну помилку, як OP. Повідомлення, яке ви отримали від Brew Doctor, звучить для мене як інше питання. Мабуть, все ще застосовується робочий процес "1. запустити оновлення пивоварення 2. якщо це не допомагає запустити лікар-пивоваріння та виконувати його вказівки 3. якщо це не допомагає перевірити переповнення стека".
FragmentalStew

6

Окрім того, роблю вузол зв’язування варіння. Крім того, у мене з'явилися також такі проблеми:

Помилка: Не вдалося символізувати посилання include / node / usr / local / include не може бути записано.

Посилання /usr/local/Cellar/node/9.3.0 ... Помилка: дозволу відмовлено @ dir_s_mkdir - / usr / local / lib

Щоб вирішити вищесказане, просто перейдіть до / usr / local / і перевірте наявність папок "include" та "lib", якщо ці папки недоступні, просто створіть їх вручну.

І запустіть варити встановити вузол знову


5

Це пояснюється тим, що поточному користувачеві заборонено писати таким шляхом. Отже, для зміни дозволу r / w (читання / запис) ви можете скористатися 1. терміналом або 2. Графічним вікном "Отримати інформацію".

1. Використання терміналу

Google, як використовувати команди chmod / chown (змінити режим / змінити власника) з терміналу

2. Використання графічного "Отримати інформацію"

Ви можете клацнути правою кнопкою миші на папці / файлі, для якого потрібно змінити дозволи, а потім відкрити Отримати інформацію, яка покаже вам таке вікно, як внизу, в нижній частині якого ви можете легко змінити права доступу r / w: введіть тут опис зображення

Не забудьте змінити дозвіл назад на "лише читання" після вашої тимчасової роботи, якщо це можливо


скористайтеся варильним доктором - він правильно визначить (системні) папки, які потребують виправлення.
johndpope

3

Я знайшов таке, що стосується користувачів антивірусу Sophos:

https://stackoverflow.com/a/32981184

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

Коротше кажучи, Sophos змінює дозволи певних / usr / локальних каталогів. Sophos це зафіксував, і виправлення включено у версію 9.4.1.


На жаль, я все ще отримую це, і у мене встановлений Sophos, FWIW: |
rogerdpack

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


0

Якщо ви перейдете до папки в пошуку, клацніть правою кнопкою миші та виберіть "Отримати інформацію", ви можете перейти до розділу "Обмін та дозволи" для папки та дозволити "Читати і писати" для "всіх"

Це те, що я роблю, щоб переходити посилання з цією помилкою. Також пивоварня, схоже, скидає дозволи в папці також, як ніби ви нічого не змінили


0

Якщо у вас вже є каталог у /usr/local для встановленого пакету, ви можете спробувати видалити цей каталог.

У моєму випадку я раніше встановив пакет, який я намагався встановити, не використовуючи brew, і потім видалив його. З /usr/local/<my_package>/цього попереднього встановлення залишився каталог . Я видалив цю папку ( sudo rm -rf /usr/local/<my_package>/), і після цього крок заварювання посилання був успішним.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.