Homebrew: ไม่สามารถเชื่อมโยง / 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
Ondra Ž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 ทั้งหมดเพื่อการใช้งานปัจจุบันทำให้เกิดปัญหากับระบบหรือผู้ใช้อื่น ๆ ?
Don Giulio

10
sudo chown -R whoami จะไม่:admin /usr/local/binเทียบเท่าคำสั่งในคำตอบโดยไม่จำเป็นต้องแทนที่yourusenameด้วยชื่อผู้ใช้จริงของคุณหรือไม่
Jason Swett

5
ฉันต้อง chown usr/local/optซ้ำแล้วซ้ำอีก มันทำงานหลังจากนั้น
atripes

5
บน mac ของฉัน (10.9.5) การอนุญาตของ/usr/local/bin(และเพื่อน) ดูเหมือนจะย้อนกลับdrwxr-xr-x+และroot wheelทุกวัน ผมต้องกำหนดค่าใหม่ perms brew installเวลาฉันต้องการที่จะทุกคน ฉันคิดว่า OS กำลังรีเซ็ต perms เพื่อปกป้องฉันหรือไม่ ฉันจะหยุดได้อย่างไร (ฉันพยายามแล้วchflags uchg …แต่ก็ป้องกันไม่ให้มีการติดตั้ง)
Quinn Comendant

1
ฉันเพิ่มบัญชีของฉันลงในกลุ่ม "วงล้อ" สิ่งนี้ทำให้ฉัน "sudo chmod -R g + w / usr / local" - สิ่งนี้ช่วยให้สมาชิกของกลุ่ม "วงล้อ" เพื่อเขียนไปยังโฟลเดอร์ ดูเหมือนว่าปลอดภัยกว่าการเปลี่ยนเจ้าของโฟลเดอร์ที่ละเอียดอ่อนเหล่านี้เป็นบัญชีที่ปลอดภัยน้อยกว่ารูท
Michael Krebs

220

แทนที่จะใช้คำสั่งเฉพาะใด ๆ ฉันจะแนะนำให้ใช้brew doctorและดำเนินการคำเตือนทั้งหมดอย่างจริงจัง อาจมีปัญหาอื่น ๆ ที่คุณติดค้างที่อาจไม่ถูกจับในคำถามนี้

นอกจากนี้เมื่อชงได้รับการปรับปรุงตามเวลาคำสั่งเฉพาะอาจหรือไม่อาจยังคงใช้ได้ brew doctorอย่างไรก็ตามจะทำให้แน่ใจได้ว่าคุณจะได้รับการแก้ไขปัญหาล่าสุด


9
ฉันไม่อยากเชื่อเลยว่าคำตอบของคุณจะได้รับความนิยมน้อยลง แน่นอนว่ามีความรอบคอบมากกว่าการคาดเดาที่แสดงไว้ด้านบน
Robert of Fairfax

34
brew doctorจะไม่แก้ไขปัญหาเพียง แต่จะบอกคุณเกี่ยวกับเรื่องนี้และเมื่อคุณใช้คำแนะนำของแพทย์ชงบอกว่ามันไม่สามารถทำได้ นั่นไม่ใช่วิธีแก้ปัญหา
Keith Tyler เมื่อ

8
บางทีมีคนปรับปรุงมัน ตอนนี้ชงหมอแนะนำให้ฉันเรียกใช้ cmd ที่คล้ายกันกับคำตอบที่นิยมมากที่สุดและหลังจากทำเช่นนั้น symlink เบียร์ทำงาน ฉันใช้ mac ดังนั้นเราจะดูว่าใช้ได้นานแค่ไหน :-)
Joshua Richardson

2
มันมีประโยชน์มากขอบคุณ แก้ไขบางไดเรกทอรีพิเศษอื่น ๆ เพื่อปลุกข้อเสนอแนะด้านบน
SwimBikeRun

6
ชงหมอให้ปัญหาที่แน่นอนและให้วิธีแก้ปัญหาด้วยตนเองเช่นกัน!
netrox

74

คำตอบอื่น ๆ นั้นถูกต้องตราบใดที่พวกเขาไป แต่พวกเขาไม่ตอบว่าทำไมปัญหานี้อาจเกิดขึ้นและวิธีการแก้ไขสาเหตุของปัญหานั้น

สาเหตุ

มีสาเหตุที่เป็นไปได้สองประการสำหรับปัญหานี้:

  1. การติดตั้ง homebrew ดำเนินการกับผู้ใช้อื่นนอกเหนือจากที่คุณใช้งานอยู่ในปัจจุบัน Homebrew คาดหวังว่ามีเพียงผู้ใช้ที่ติดตั้งไว้ก่อนหน้านี้เท่านั้นที่จะต้องการใช้งาน
  2. คุณติดตั้งซอฟต์แวร์บางตัวที่เขียนไปยัง / usr / local โดยไม่ใช้ Brew นี่คือสาเหตุที่brew doctorแนะนำถ้าคุณเรียกใช้

สารละลาย

Multiuser Homebrew

หากคุณมีบัญชีผู้ใช้หลายบัญชีและคุณต้องการให้มากกว่าหนึ่งบัญชีสามารถใช้ชงได้คุณต้องดำเนินการตามขั้นตอนไม่กี่ขั้นตอนไม่เช่นนั้นคุณจะต้องเปลี่ยนความเป็นเจ้าของโครงสร้างไฟล์ Homebrew ทุกครั้งที่คุณสลับผู้ใช้ และนั่นไม่ใช่ความคิดที่ดี

คำแนะนำโดยละเอียดสามารถพบได้ทั่วไปแต่คำตอบอย่างรวดเร็วคือ:

  1. สร้างกลุ่มที่ชื่อว่า brew:

    1. เปิดการตั้งค่าระบบ
    2. คลิกบัญชี
    3. คลิกที่ "+" (ปลดล็อคก่อนถ้าจำเป็น)
    4. ภายใต้บัญชีใหม่ให้เลือกกลุ่ม
    5. ป้อนชง
    6. คลิกสร้างกลุ่ม
  2. เลือกชงกลุ่มและเพิ่มบัญชีผู้ใช้ที่คุณต้องการที่จะใช้ชงกับมัน
  3. เปลี่ยนความเป็นเจ้าของกลุ่มโฟลเดอร์ / usr / local: sudo chgrp -R brew /usr/local
  4. เปลี่ยนการอนุญาตเพื่อเพิ่มการเขียนไปยัง / usr / local เป็นกลุ่ม: sudo chmod -R g+w /usr/local
  5. เปลี่ยนกลุ่มไดเรกทอรีแคช homebrew: sudo chgrp -R brew /Library/Caches/Homebrew
  6. เปลี่ยนการอนุญาตไดเรกทอรีแคช homebrew: sudo chmod -R g+w /Library/Caches/Homebrew

ผู้ใช้ Homebrew

หากคุณไม่ได้พยายามใช้ผู้ใช้มากกว่าหนึ่งรายกับ Homebrew การแก้ปัญหาโดยคำตอบอื่น ๆ โดยยึดตามคำแนะนำของbrew doctorอาจจะเพียงพอ:

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

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

การตรวจสอบ

หลังจากขั้นตอนเหล่านี้brew doctorควรจะรายงานความสำเร็จโดยผู้ใช้ใด ๆ ในการชงกลุ่มสมมติว่าคุณได้ออกจากระบบและกลับมาอยู่ในการใช้สมาชิกกลุ่มใหม่ (ถ้าคุณไปเส้นทางที่ผู้ใช้หลายคน) ที่ หากคุณเพิ่งแก้ไขสิ่งต่าง ๆ สำหรับโฮมบรูว์ของผู้ใช้เดี่ยวไม่จำเป็นต้องออกจากระบบและกลับเข้าสู่ระบบเนื่องจากไม่มีการเปลี่ยนแปลงสมาชิกกลุ่มของคุณ


2
ขอบคุณ! ฉันควรอ่านเพิ่มเติมเกี่ยวกับกลุ่มผู้ใช้ยูนิกซ์ ฉัน clueless โดยสิ้นเชิงเกี่ยวกับวิธีการทำงานย่อยเหตุผลดีพอ แต่ฟังดูสมเหตุสมผลมากขอบคุณสำหรับตัวชี้!
Jikku Jose

1
กลุ่ม unix นั้นง่ายกว่าที่คุณคิด - ทุกไฟล์มีการอ่านเขียนและดำเนินการอนุญาตสำหรับ 'ผู้ใช้' และ 'กลุ่ม' ที่เป็นเจ้าของไฟล์นั้นและสำหรับ 'ผู้อื่น' หากคุณตั้งกลุ่มที่เป็นเจ้าของไฟล์หรือโฟลเดอร์และเพิ่มสิทธิ์การเขียนเป็น 'กลุ่ม' สำหรับโฟลเดอร์นั้นผู้ใช้ในกลุ่มนั้นสามารถเขียนลงในโฟลเดอร์ได้ ไม่มีอะไรมากไปกว่านั้นอีกแล้ว ไม่ซับซ้อนเกือบเท่ากับสิทธิ์ใน windows
stonecrusher

1
ดังนั้นวิธีง่ายๆในการรวมกลุ่มระบบการอนุญาตของชุดไฟล์ไปยังกลุ่มเพื่อให้ผู้ใช้หลายคนสามารถเพิ่มความสะดวกในการใช้สิทธิ์เหล่านั้นทั้งหมดในครั้งเดียว?
Jikku Jose

2
วิธีนี้แก้ไขปัญหาลิงก์ชงของฉันขอบคุณ
Keith Tyler

ยังคงนัดฉันเป็นอันตรายเล็กน้อยที่จะมีไดเรกทอรีที่ละเอียดอ่อนเช่น/usr/local/binกลุ่มเขียนได้โดยเฉพาะอย่างยิ่ง ในสภาพแวดล้อมที่มีผู้ใช้หลายคน นี่เป็นวิธีที่ "เป็นทางการ" หรือไม่?
corwin.amber

67

สำหรับผู้ที่กำลังมองหา/usr/local/sbinไม่ใช่ข้อผิดพลาดที่เขียนได้:

UPDATE:มันอาจจะเป็นเช่น/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
สิ่งนี้ใช้ได้กับฉัน
robin

ฉันยังต้องการเพิ่มไดเรกทอรีไปยัง ~ / .bash_profile ของฉัน:PATH=$PATH:/usr/local/sbin
Julien

หลังจากผ่านไปหลายชั่วโมงของการค้นหานี่เป็นสิ่งเดียวที่เหมาะกับฉัน ฉันอยู่ที่เซียร่าสูง
ItsJoeTurner

34

ฉันพบการตั้งค่าเฉพาะของฉันคำสั่งต่อไปนี้ใช้งานได้

brew doctor

และนั่นแสดงให้ฉันเห็นว่าข้อผิดพลาดของฉันอยู่ที่ใดและจากนั้นคำสั่งนี้แตกต่างกันเล็กน้อยจากความคิดเห็นด้านบน

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

2
ขอบคุณสำหรับคำแนะนำที่ชัดเจน ฉันมักจะลืมbrew doctor
Antony

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
ทำงานให้ฉันเพื่อ rabbitmq
โอมาร์

'ขั้นตอนที่ 1' มีวัตถุประสงค์อะไร?
Conrad C

1
ชงแพทย์ยกนิ้วให้! ไม่ได้ตัดลูกพรุน แต่ติดตั้งแพ็คเกจอื่น ๆ ที่หายไปและใช้งานได้กับ Mongodb
Chenlu

ปิดใช้งานการเรียก 'brew prune' แล้ว ใช้ 'การล้างข้อมูลชง' แทน
HanumanDev

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 ทำงานอย่างมีเสน่ห์


ฉันพบสิ่งนี้ใช้งานได้สำหรับฉัน (ไม่มีคำสั่งเริ่มต้นการถ่ายโอนข้อมูล): github.com/Homebrew/brew/issues/3285#issuecomment-334976806
vr_driver

ขอบคุณ! ลองคำตอบยอดเยี่ยมจากแฮรี่ไม่มีโชค - ลองสิ่งนี้และมันก็ใช้งานได้อย่างมีเสน่ห์!
Joe

ทำงานให้ฉันขอบคุณ!
เซน

9

brew updateสำหรับผมการแก้ปัญหาคือการเรียกใช้

ดังนั้นทำสิ่งนี้ก่อน

นี่อาจเป็นเรื่องปกติสำหรับผู้ที่คุ้นเคยกับ homebrew แต่ฉันไม่ใช่คนเหล่านั้น

แก้ไข: ฉันค้นพบว่าฉันต้องการอัปเดตโดยเรียกใช้brew doctorตามคำแนะนำของ @ kinnth สำหรับคำถามเดียวกันนี้

เวิร์กโฟลว์การแก้ไขปัญหาทั่วไปอาจมีลักษณะดังนี้: 1. เรียกใช้brew update 2. หากไม่ได้ช่วยให้ทำงานได้brew doctorและทำตามคำแนะนำที่ 3 หากไม่ช่วยตรวจสอบสแต็คล้น


1
สิ่งนี้แก้ไขทุกอย่างให้ฉันและคุ้มค่าที่จะทำอะไรก่อน
Rob Evans

หมอชงทุกคนชี้ให้เห็นว่าฉันมีถังที่ไม่ชอบในห้องใต้ดินของฉัน ... ดังนั้นมันจึงไม่ทำอะไรเลยที่จะแก้ไขปัญหาของ OP
AlxVallejo

@AlxVallejo นี่คือสิ่งที่ฉันทำเพื่อแก้ไขปัญหาที่ฉันมีเมื่อฉันได้รับข้อผิดพลาดเกือบเหมือน OP ข้อความที่คุณได้รับจาก Brew Doctor ดูเหมือนจะเป็นปัญหาที่แตกต่าง เวิร์กโฟลว์ของ "1. เรียกใช้การอัปเดตการชง 2. หากนั่นไม่ช่วยให้เรียกหมอชงและทำตามคำแนะนำที่ 3 หากไม่ช่วยตรวจสอบการล้นสแต็ก" อาจยังคงใช้
FragmentalStew

6

ในขณะที่ทำลิงค์ชงโหนดนอกจากนี้ฉันได้รับปัญหาต่อไปนี้เช่นกัน:

ข้อผิดพลาด: ไม่สามารถ symlink include / node / usr / local / include ไม่สามารถเขียนได้

กำลังเชื่อมโยง /usr/local/Cellar/node/9.3.0 ... ข้อผิดพลาด: การอนุญาตถูกปฏิเสธ @ dir_s_mkdir - / usr / local / lib

เพื่อแก้ปัญหาข้างต้นเพียงไปที่ / usr / local / และตรวจสอบความพร้อมใช้งานของโฟลเดอร์ 'รวม' และ 'lib' หากโฟลเดอร์เหล่านั้นไม่พร้อมใช้งานเพียงแค่สร้างด้วยตนเอง

และเรียกใช้ชงติดตั้งโหนดอีกครั้ง


5

นี่เป็นเพราะผู้ใช้ปัจจุบันไม่ได้รับอนุญาตให้เขียนในเส้นทางนั้น ดังนั้นในการเปลี่ยนการอนุญาต r / w (อ่าน / เขียน) คุณสามารถใช้ 1 เทอร์มินัลหรือ 2 หน้าต่างกราฟิก "รับข้อมูล"

1. การใช้เทอร์มินัล

Google วิธีใช้ คำสั่งchmod / chown (เปลี่ยนโหมด / เปลี่ยนเจ้าของ) จากเทอร์มินัล

2. การใช้กราฟิก 'รับข้อมูล'

คุณสามารถคลิกขวาที่โฟลเดอร์ / ไฟล์ที่คุณต้องการเปลี่ยนการอนุญาตจากนั้นเปิดรับข้อมูลซึ่งจะแสดงหน้าต่างด้านล่างที่ด้านล่างซึ่งคุณสามารถเปลี่ยนการอนุญาต r / w ได้อย่างง่ายดาย: ป้อนคำอธิบายรูปภาพที่นี่

อย่าลืมเปลี่ยนสิทธิ์กลับไปเป็น "อ่านอย่างเดียว" หลังจากงานชั่วคราวของคุณถ้าเป็นไปได้


ใช้ชงหมอ - มันจะถูกต้องระบุโฟลเดอร์ (ระบบ) ที่ต้องแก้ไข
johndpope

3

ฉันพบสิ่งต่อไปนี้ที่เกี่ยวข้องกับผู้ใช้ Sophos Anti-Virus:

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


น่าเสียดายที่ฉันยังคงได้รับสิ่งนี้และติดตั้ง 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

หากคุณไปที่โฟลเดอร์ในตัวค้นหาคลิกขวาและเลือก "รับข้อมูล" คุณสามารถไปที่ส่วน "การแบ่งปันและการอนุญาต" สำหรับโฟลเดอร์และอนุญาตให้ "อ่านและเขียน" เป็น "ทุกคน"

นี่คือสิ่งที่ฉันทำเพื่อให้ symlink ส่งผ่านข้อผิดพลาดนี้ ชงดูเหมือนว่าจะรีเซ็ตสิทธิ์ในโฟลเดอร์เช่นถ้าคุณไม่ได้เปลี่ยนแปลงอะไร


0

หากคุณมีไดเรกทอรีอยู่แล้ว/usr/localสำหรับแพ็คเกจที่คุณกำลังติดตั้งคุณสามารถลองลบไดเรกทอรีนี้ได้

ในกรณีของฉันฉันได้ติดตั้งแพคเกจก่อนหน้านี้ฉันพยายามติดตั้งโดยไม่ต้องใช้การชงและจากนั้นถอนการติดตั้ง มีไดเรกทอรีที่/usr/local/<my_package>/เหลือจากการติดตั้งก่อนหน้านี้ ฉันลบโฟลเดอร์นี้ ( sudo rm -rf /usr/local/<my_package>/) และหลังจากนั้นขั้นตอนการเชื่อมโยงการชงสำเร็จ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.