Homebrew: Không thể symlink, / usr / local / bin không thể ghi được [đã đóng]


361

Trong khi cài đặt tig, HomeBrewsẽ hiển thị các vấn đề sau trong khi cài đặt một phụ thuộc:

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
Điều này không thuộc về stackowerflow.com, thay vì superuser.com hoặc askdifferent.com
Ondra

Câu trả lời:


582

Theo câu trả lời của Alex, tôi đã có thể giải quyết vấn đề này; dường như đây là một vấn đề không cụ thể đối với các gói được cài đặt nhưng về quyền của các homebrewthư mục.

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

Đối với một số gói, bạn cũng có thể cần phải làm điều này để /usr/local/sharehoặc /usr/local/opt:

sudo chown -R `whoami`:admin /usr/local/share
sudo chown -R `whoami`:admin /usr/local/opt

25
Không giới thiệu tất cả / usr / local / bin cho việc sử dụng hiện tại có gây ra bất kỳ rắc rối nào cho hệ thống hoặc cho những người dùng khác không?
Don Giulio

10
Sẽ không sudo chown -R whoami :admin /usr/local/bintương đương với lệnh trong câu trả lời, mà không cần phải thay thế yourusenamevới Tên truy nhập thực tế của bạn?
Jason Swett

5
Tôi cũng phải chown usr/local/optđệ quy. Nó đã làm việc sau đó.
atripes

5
Trên máy mac của tôi (10.9.5), quyền của /usr/local/bin(và bạn bè) dường như trở lại drwxr-xr-x+root wheelmỗi ngày. Tôi phải cấu hình lại các perm mỗi lần tôi muốn brew install. Tôi giả sử hệ điều hành đang thiết lập lại perms để bảo vệ tôi? Làm thế nào tôi có thể làm cho nó dừng lại? (Tôi đã thử chflags uchg …nhưng điều đó ngăn cản việc cài đặt bia.)
Quinn Comendant

1
Tôi đã thêm tài khoản của mình vào nhóm "bánh xe". Điều này cho phép tôi "sudo chmod -R g + w / usr / local" - điều này cho phép các thành viên của nhóm "bánh xe" ghi vào các thư mục. Có vẻ an toàn hơn là thay đổi chủ sở hữu của các thư mục nhạy cảm này thành một tài khoản kém an toàn hơn root.
Michael Krebs

220

Thay vì chạy bất kỳ lệnh cụ thể nào, tôi khuyên bạn nên chạy brew doctorvà thực hiện nghiêm túc tất cả các cảnh báo. Có thể có những vấn đề khác mà bạn gặp khó khăn mà có thể không được ghi lại trong câu hỏi này.

Ngoài ra, khi brew được cập nhật theo thời gian, các lệnh cụ thể có thể hoặc không thể còn hiệu lực. brew doctortuy nhiên, sẽ đảm bảo rằng bạn nhận được cập nhật khắc phục sự cố.


9
Tôi không thể tin rằng câu trả lời của bạn là ít phổ biến hơn. Nó chắc chắn là khôn ngoan hơn so với phỏng đoán được trình bày ở trên.
Robert của Fairfax

34
brew doctorSẽ không khắc phục được vấn đề, nó sẽ chỉ cho bạn biết về vấn đề đó và khi bạn nghe lời khuyên của bác sĩ, hãng bia nói rằng không thể làm được. Đó không phải là một giải pháp
Keith Tyler

8
Có lẽ ai đó đã cải thiện nó. Bây giờ bác sĩ bia gợi ý tôi chạy một cmd tương tự với câu trả lời phổ biến nhất, và sau khi làm như vậy, symlink brew hoạt động. Tôi đang dùng mac, vì vậy chúng tôi sẽ xem nó tồn tại bao lâu. :-)
Joshua Richardson

2
Điều này rất hữu ích cảm ơn. Đã sửa một số thư mục đặc biệt khác để bỏ qua gợi ý trên.
BơiBikeRun

6
bác sĩ bia cung cấp vấn đề CHÍNH XÁC và cung cấp giải pháp thủ công là tốt!
netrox

74

Các câu trả lời khác là chính xác, theo như họ đi, nhưng họ không trả lời tại sao vấn đề này có thể xảy ra và làm thế nào để giải quyết nguyên nhân gốc rễ đó.

Nguyên nhân

Có hai nguyên nhân có thể gây ra vấn đề này:

  1. Cài đặt homebrew được thực hiện với người dùng khác với người dùng bạn hiện đang sử dụng. Homebrew hy vọng rằng chỉ người dùng đã cài đặt nó ban đầu mới muốn sử dụng nó.
  2. Bạn đã cài đặt một số phần mềm ghi vào / usr / local mà không sử dụng brew. Đây là nguyên nhân brew doctorgợi ý, nếu bạn chạy nó.

Giải pháp

Đa người dùng Homebrew

Nếu bạn có nhiều tài khoản người dùng và bạn muốn nhiều tài khoản có thể sử dụng brew, bạn cần phải thực hiện một vài bước, nếu không bạn sẽ phải liên tục thay đổi quyền sở hữu cấu trúc tệp Homebrew mỗi khi bạn chuyển người dùng, và đó không phải là một ý tưởng tuyệt vời.

Hướng dẫn chi tiết có thể được tìm thấy trực tuyến , nhưng câu trả lời nhanh là:

  1. Tạo một nhóm có tên brew:

    1. Tùy chọn hệ thống mở
    2. Bấm vào tài khoản
    3. Nhấp vào "+" (mở khóa trước nếu cần)
    4. Trong tài khoản mới, chọn nhóm
    5. nhập bia
    6. Nhấp vào Tạo nhóm
  2. Chọn nhóm brew và thêm tài khoản người dùng bạn muốn sử dụng brew vào nó.
  3. thay đổi quyền sở hữu / usr / nhóm thư mục cục bộ: sudo chgrp -R brew /usr/local
  4. thay đổi quyền để thêm ghi vào / usr / local thành nhóm: sudo chmod -R g+w /usr/local
  5. thay đổi nhóm thư mục bộ nhớ cache homebrew: sudo chgrp -R brew /Library/Caches/Homebrew
  6. thay đổi quyền truy cập thư mục bộ nhớ cache homebrew: sudo chmod -R g+w /Library/Caches/Homebrew

Người dùng duy nhất Homebrew

Nếu bạn không cố gắng sử dụng nhiều hơn một người dùng với Homebrew, thì giải pháp được cung cấp bởi các câu trả lời khác, dựa trên các đề xuất của brew doctorcó lẽ là đủ:

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

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

xác minh

Sau các bước này, brew doctornên báo cáo thành công bởi bất kỳ người dùng nào trong nhóm sản xuất bia , giả sử bạn đã đăng xuất và đăng nhập lại để áp dụng tư cách thành viên nhóm mới (nếu bạn đã đi theo lộ trình nhiều người dùng). Nếu bạn chỉ sửa những thứ cho một người dùng homebrew, thì việc đăng xuất và quay lại không cần thiết vì không có tư cách thành viên nhóm nào của bạn thay đổi.


2
Cảm ơn! Tôi có lẽ nên đọc thêm về các nhóm người dùng unix. Tôi hoàn toàn không biết gì về cách nó hoạt động để tiêu hóa lý luận đủ tốt. Nhưng nó có vẻ rất hợp lý, cảm ơn cho con trỏ!
Jikku Jose

1
các nhóm unix đơn giản hơn bạn tưởng - mọi tệp đều đã đọc, ghi và thực thi các quyền có sẵn cho 'người dùng' và 'nhóm' sở hữu tệp đó và cho 'người khác'. Nếu bạn đặt nhóm sở hữu tệp hoặc thư mục và thêm quyền ghi vào 'nhóm' cho thư mục đó, thì bất kỳ người dùng nào trong nhóm đó cũng có thể ghi vào thư mục. Thực sự không có gì nhiều hơn thế. gần như không phức tạp như quyền trong windows.
stonecrusher 10/03/2016

1
Vì vậy, cách dễ dàng để kết nối hệ thống cấp phép của một tập hợp tệp vào một nhóm để có thể thêm nhiều người dùng một cách dễ dàng để áp dụng tất cả các quyền đó trong một lần?
Jikku Jose

2
Điều này đã khắc phục sự cố liên kết bia của tôi, cảm ơn bạn.
Keith Tyler

Vẫn gây cho tôi một chút nguy hiểm khi có một thư mục nhạy cảm như /usr/local/binnhóm có thể ghi, đặc biệt. trong môi trường nhiều người dùng. Đây thực sự là cách ủ "chính thức"?
corwin.amber

67

Đối với những người đang tìm kiếm /usr/local/sbinkhông phải là lỗi có thể ghi:

CẬP NHẬT: Nó có thể là /usr/local/someOtherFolderNameví dụ /usr/local/include. Bạn chỉ cần tạo thư mục đó với:

  • sudo mkdir someOtherFolderName

Đầu tiên tạo sbinthư mục, lưu ý rằng điều này đòi hỏi sudođặc quyền

  • cd /usr/local

  • sudo mkdir sbin

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

  • brew link yourPackageName


6
Điều này làm việc cho tôi
cướp

Tôi cũng cần thêm thư mục vào ~ / .bash_profile của mình:PATH=$PATH:/usr/local/sbin
Julien

Sau nhiều giờ tìm kiếm, đây là điều duy nhất làm việc cho tôi. Tôi đang ở High Sierra.
ItsJoeTurner

34

Tôi tìm thấy cho thiết lập cụ thể của tôi các lệnh sau hoạt động

brew doctor

Và sau đó điều đó cho tôi thấy lỗi của tôi ở đâu, và lệnh này hơi khác so với nhận xét ở trên.

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

2
Cảm ơn bạn đã gợi ý rõ ràng. Tôi có xu hướng quênbrew doctor
Antony

1
Điều này đã giải quyết vấn đề ở đây
khaosdoctor

brew doctortốt.
AechoLiu

làm việc như một cơ duyên, cảm ơn
hexley

15

Tôi thấy vấn đề tương tự, chúng tôi có thể giải quyết theo ba bước: -

Bước 1

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

Bước 2

brew doctor

Bước 3

brew prune

Nếu bạn vẫn gặp phải bất kỳ vấn đề liên kết nào, hãy nói mysql, chỉ cần viết

brew link mysql

Điều này sẽ làm việc.


1
làm việc cho tôi cho rabbitmq
Omar

Mục đích của 'Bước 1' là gì?
Conrad C

1
bia bác sĩ ngón tay cái lên! Không pha chế prune, nhưng cài đặt các gói bị thiếu khác và nó hoạt động cho mongodb.
Chenlu

Gọi 'brew prune' bị vô hiệu hóa. Sử dụng 'ủ sạch' thay thế.
hanumanDev

12

Đối với những người gặp phải vấn đề này (được cấp 4 năm sau khi bài đăng này được thực hiện) trong khi chạy Mac OS High Sierra - các bước được nêu ở đây đã giải quyết vấn đề cho tôi. Về cơ bản chỉ phác thảo gỡ cài đặt và cài đặt lại bia.

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

Sau khi chạy những bước đó, brew link làm việc như một lá bùa!


Tôi thấy điều này hiệu quả với tôi (không có lệnh kết xuất ban đầu): github.com/Homebrew/brew/issues/3285#issuecomment-334976806
vr_do

Cảm ơn bạn! Đã thử câu trả lời hàng đầu của Harry, không có may mắn - đã thử điều này, và nó hoạt động như một cơ duyên!
Joe

Làm việc cho tôi, cảm ơn!
zen

9

Đối với tôi giải pháp là chạy brew update.

Vì vậy, LÀM NÀY ĐẦU TIÊN.

Đây có thể là thực tế bình thường đối với những người quen thuộc với homebrew, nhưng tôi không phải là một trong những người đó.

Chỉnh sửa: Tôi phát hiện ra rằng tôi cần cập nhật bằng cách chạy brew doctornhư được đề xuất bởi câu trả lời của @ kinnth cho cùng câu hỏi này.

Một quy trình xử lý sự cố chung có thể giống như sau: 1. chạy brew update 2. nếu điều đó không giúp chạy brew doctorvà làm theo chỉ dẫn của nó 3. nếu điều đó không giúp kiểm tra tràn ngăn xếp


1
Điều này cố định mọi thứ cho tôi và cũng đáng làm trước mọi thứ khác.
Rob Evans

Tất cả các bác sĩ sản xuất bia đều chỉ ra rằng tôi đã bỏ những thùng rác trong Hầm của mình ... vì vậy, không có gì để khắc phục vấn đề của OP
AlxVallejo

@AlxVallejo Đây là những gì tôi đã làm để giải quyết vấn đề tôi gặp phải khi gặp lỗi gần như giống hệt OP. Tin nhắn bạn nhận được từ Brew Doctor nghe có vẻ như là một vấn đề khác. Quy trình làm việc của "1. chạy bản cập nhật bia 2. nếu điều đó không giúp chạy bác sĩ bia và làm theo chỉ dẫn của nó 3. nếu điều đó không giúp kiểm tra tràn ngăn xếp" có thể vẫn được áp dụng.
FragmentalStew

6

Trong khi thực hiện nút liên kết brew Ngoài ra tôi cũng gặp các vấn đề sau:

Lỗi: Không thể symlink bao gồm / node / usr / local / include không thể ghi được.

Liên kết /usr/local/Cellar/node/9.3.0 ... Lỗi: Quyền bị từ chối @ dir_s_mkdir - / usr / local / lib

Để giải quyết vấn đề trên, chỉ cần truy cập / usr / local / và kiểm tra tính khả dụng của các thư mục 'bao gồm' và 'lib', nếu các thư mục đó không khả dụng, chỉ cần tạo chúng theo cách thủ công.

Và chạy lại nút cài đặt brew


5

Điều này là do người dùng hiện tại không được phép viết trong đường dẫn đó. Vì vậy, để thay đổi quyền r / w (đọc / ghi), bạn có thể sử dụng 1. terminal hoặc 2. Cửa sổ "Nhận thông tin" đồ họa.

1. Sử dụng thiết bị đầu cuối

Google cách sử dụng lệnh chmod / chown (thay đổi chế độ / thay đổi chủ sở hữu) từ thiết bị đầu cuối

2. Sử dụng đồ họa 'Nhận thông tin'

Bạn có thể nhấp chuột phải vào thư mục / tệp bạn muốn thay đổi quyền, sau đó mở Nhận thông tin sẽ hiển thị cho bạn một cửa sổ như bên dưới ở dưới cùng mà bạn có thể dễ dàng thay đổi quyền r / w: nhập mô tả hình ảnh ở đây

Nhớ thay đổi quyền trở lại thành "chỉ đọc" sau khi làm việc tạm thời, nếu có thể


sử dụng brew Doctor - nó sẽ xác định chính xác các thư mục (hệ thống) cần sửa.
johndpope

3

Tôi đã tìm thấy những điều liên quan sau đây cho người dùng Sophos Anti-Virus:

https://stackoverflow.com/a/32981184

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

Nói tóm lại, Sophos đang thay đổi quyền của các thư mục / usr / local nhất định. Sophos đã vá lỗi này và bản sửa lỗi được bao gồm trong phiên bản 9.4.1.


Thật không may, tôi vẫn nhận được điều này và đã cài đặt Sophos, FWIW: |
rogerdpack

2

Vấn đề của tôi là

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

chownkhông giúp đỡ, nhưng tôi đã làm theo brew doctorlời khuyên và cảnh báo này đã giúp tôi:

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

Sau khi brew prunetất cả làm việc tốt!


Tuyệt quá. Làm việc cho tôi.
Bagusflyer

1

Đối với những người không quen thuộc:

sudo chown -R YOUR_COMPUTER_USER_NAME PATH_OF_FILE

0

Nếu bạn đi đến thư mục trong công cụ tìm, nhấp chuột phải và chọn "Nhận thông tin", bạn có thể chuyển đến phần "Chia sẻ và quyền" cho thư mục và cho phép "Đọc & Viết" cho "mọi người"

Đây là những gì tôi làm để làm cho symlink vượt qua với lỗi này. Ngoài ra brew dường như đặt lại các quyền trên thư mục cũng như thể bạn đã không thay đổi bất cứ điều gì


0

Nếu bạn đã có một thư mục trong /usr/localgói bạn đang cài đặt, bạn có thể thử xóa thư mục này.

Trong trường hợp của tôi, trước đây tôi đã cài đặt gói tôi đang cố cài đặt mà không sử dụng brew, và sau đó đã gỡ cài đặt nó. Có một thư mục /usr/local/<my_package>/còn lại từ cài đặt trước đó. Tôi đã xóa thư mục này ( sudo rm -rf /usr/local/<my_package>/) và sau đó bước liên kết brew đã thành công.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.