Homebrew: Tidak dapat symlink, / usr / local / bin tidak dapat ditulis [ditutup]

361

Saat menginstal tig, HomeBrewmenampilkan masalah berikut saat menginstal dependensi:

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
Jikku Jose
sumber
3
Ini bukan milik stackowerflow.com, melainkan superuser.com atau askdifferent.com
Ondra Žižka

Jawaban:

582

Mengikuti jawaban Alex saya bisa menyelesaikan masalah ini; Tampaknya ini menjadi masalah tidak spesifik untuk paket yang diinstal tetapi dari izin homebrewfolder.

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

Untuk beberapa paket, Anda mungkin perlu melakukan ini ke /usr/local/shareatau /usr/local/opt:

sudo chown -R `whoami`:admin /usr/local/share
sudo chown -R `whoami`:admin /usr/local/opt
Jikku Jose
sumber
25
Tidak mencatat ulang semua / usr / local / bin untuk penggunaan saat ini memberikan masalah pada sistem atau pengguna lain?
Don Giulio
10
Bukankah sudo chown -R whoami :admin /usr/local/binsetara dengan perintah dalam jawaban, tanpa perlu mengganti yourusenamedengan nama pengguna Anda yang sebenarnya?
Jason Swett
5
Saya juga harus mengunyahnya usr/local/optsecara rekursif. Setelah itu berhasil.
Atrip
5
Di mac saya (10.9.5) izin /usr/local/bin(dan teman) tampaknya kembali ke drwxr-xr-x+dan root wheelsetiap hari. Saya harus mengkonfigurasi ulang perms setiap kali saya mau brew install. Saya berasumsi OS mengatur ulang izin untuk melindungi saya? Bagaimana saya bisa menghentikannya? (Saya sudah mencoba chflags uchg …tetapi itu mencegah minuman dari menginstal.)
Quinn Comendant
1
Saya menambahkan akun saya ke grup "roda". Ini memungkinkan saya untuk "sudo chmod -R g + w / usr / local" - ini memungkinkan anggota grup "roda" untuk menulis ke folder. Tampaknya lebih aman daripada mengubah pemilik folder sensitif ini ke akun yang kurang aman daripada root.
Michael Krebs
220

Daripada menjalankan perintah tertentu, saya akan merekomendasikan menjalankan brew doctordan menerima semua peringatan dengan serius. Mungkin ada masalah lain yang membuat Anda buntu dan mungkin tidak ditangkap dalam pertanyaan ini.

Juga, karena minuman diperbarui dengan waktu, perintah tertentu mungkin atau mungkin tidak tetap valid. brew doctorNamun, akan memastikan bahwa Anda mendapatkan pemecahan masalah terbaru.

zakishaheen
sumber
9
Saya tidak percaya jawaban Anda kurang populer. Ini tentu lebih bijaksana daripada menebak yang diungkapkan di atas.
Robert dari Fairfax
34
brew doctortidak akan memperbaiki masalah, itu hanya akan memberi tahu Anda tentang hal itu, dan ketika Anda mengambil saran dokter, minuman mengatakan itu tidak bisa melakukannya. Itu bukan solusi
Keith Tyler
8
Mungkin seseorang memperbaikinya. Sekarang dokter minuman menyarankan saya menjalankan cmd yang sama dengan jawaban yang paling populer, dan setelah melakukannya, symlink minuman berfungsi. Saya menggunakan mac, jadi kita akan melihat berapa lama itu berlangsung. :-)
Joshua Richardson
2
Ini sangat berguna terima kasih. Memperbaiki beberapa direktori khusus lainnya untuk menghilangkan saran di atas.
SwimBikeRun
6
brew doctor memberikan masalah EXACT dan memberikan solusi manual juga!
netrox
74

Jawaban yang lain adalah benar, sejauh mereka pergi, tetapi mereka tidak menjawab mengapa masalah ini mungkin terjadi, dan bagaimana mengatasi akar penyebab itu.

Sebab

Ada dua kemungkinan penyebab masalah ini:

  1. Instalasi homebrew dilakukan dengan pengguna selain yang sedang Anda gunakan. Homebrew berharap bahwa hanya pengguna yang menginstalnya semula yang ingin menggunakannya.
  2. Anda menginstal beberapa perangkat lunak yang menulis ke / usr / lokal tanpa menggunakan minuman. Ini adalah penyebabnya brew doctor, jika Anda menjalankannya.

Larutan

Homebrew multi-pengguna

Jika Anda memiliki beberapa akun pengguna, dan Anda ingin lebih dari satu di antaranya dapat menggunakan minuman, Anda harus menjalankan beberapa langkah, jika tidak, Anda harus terus-menerus mengubah kepemilikan struktur file Homebrew setiap kali Anda berpindah pengguna, dan itu bukan ide bagus.

Instruksi terperinci dapat ditemukan online , tetapi jawaban cepatnya adalah ini:

  1. Buat grup dengan nama brew:

    1. Buka preferensi Sistem
    2. Klik Akun
    3. Klik "+" (buka kunci jika perlu)
    4. Di bawah Akun baru pilih Grup
    5. masukkan brew
    6. Klik Buat Grup
  2. Pilih grup minuman , dan tambahkan akun pengguna yang ingin Anda gunakan.
  3. ubah kepemilikan grup folder / usr / lokal: sudo chgrp -R brew /usr/local
  4. ubah izin untuk menambahkan write ke / usr / local sebagai grup: sudo chmod -R g+w /usr/local
  5. ubah grup direktori cache homebrew: sudo chgrp -R brew /Library/Caches/Homebrew
  6. ubah izin direktori cache homebrew: sudo chmod -R g+w /Library/Caches/Homebrew

Homebrew Pengguna Tunggal

Jika Anda tidak mencoba menggunakan lebih dari satu pengguna dengan Homebrew, maka solusi yang disediakan oleh jawaban lain, berdasarkan saran dari brew doctormungkin cukup:

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

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

Verifikasi

Setelah langkah-langkah ini, brew doctorharus melaporkan keberhasilan oleh setiap pengguna dalam minuman kelompok, dengan asumsi Anda sudah log out dan kembali menerapkan keanggotaan kelompok baru (jika Anda pergi rute multiuser). Jika Anda hanya mengoreksi hal-hal untuk homebrew pengguna tunggal, maka logout dan kembali tidak perlu karena tidak ada keanggotaan grup Anda yang berubah.

tukang stonecrusher
sumber
2
Terima kasih! Saya mungkin harus membaca lebih lanjut tentang grup pengguna unix. Saya sama sekali tidak mengerti bagaimana cara kerjanya untuk mencerna alasannya dengan cukup baik. Tapi kedengarannya masuk akal, terima kasih untuk penunjuknya!
Jikku Jose
1
grup unix lebih sederhana daripada yang Anda duga - setiap file telah membaca, menulis, dan mengeksekusi izin yang tersedia untuk 'pengguna' dan 'grup' yang memiliki file itu, dan untuk 'orang lain'. Jika Anda mengatur grup yang memiliki file atau folder, dan menambahkan izin menulis ke 'grup' untuk folder itu, maka setiap pengguna dalam grup itu dapat menulis ke folder. Benar-benar tidak ada yang lebih dari itu. tidak hampir serumit izin di windows.
stonecrusher
1
Jadi ini cara mudah untuk mengelompokkan sistem izin satu set file ke grup sehingga beberapa pengguna dapat ditambahkan dengan mudah untuk menerapkan semua izin itu dalam sekali jalan?
Jikku Jose
2
Ini memperbaiki masalah tautan minuman saya, terima kasih.
Keith Tyler
Masih menganggap saya agak berbahaya untuk memiliki direktori sensitif seperti yang /usr/local/bindapat ditulis grup, esp. dalam lingkungan multi-pengguna. Apakah ini benar-benar cara minuman "resmi"?
corwin.amber
67

Bagi yang mencari /usr/local/sbinbukanlah kesalahan yang bisa ditulisi:

UPDATE: Bisa jadi /usr/local/someOtherFolderNamemisalnya /usr/local/include. Anda hanya perlu membuat folder itu dengan:

  • sudo mkdir someOtherFolderName

Pertama buat sbinfolder, perhatikan bahwa ini membutuhkan sudohak istimewa

  • cd /usr/local

  • sudo mkdir sbin

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

  • brew link yourPackageName

gokcand
sumber
6
Ini bekerja untuk saya
robin
Saya juga perlu menambahkan direktori ke ~ / .bash_profile:PATH=$PATH:/usr/local/sbin
Julien
Setelah berjam-jam mencari, ini adalah satu-satunya hal yang berhasil untuk saya. Saya di High Sierra.
ItsJoeTurner
34

Saya menemukan untuk pengaturan khusus saya perintah berikut ini berfungsi

brew doctor

Dan kemudian itu menunjukkan saya di mana kesalahan saya, dan kemudian perintah ini sedikit berbeda dari komentar di atas.

sudo chown -R $(whoami) /usr/local/opt
kinn
sumber
2
Terima kasih atas saran yang jelas. Saya cenderung lupabrew doctor
Antony
1
Ini menyelesaikan masalah di sini
khaosdoctor
brew doctoritu bagus.
AechoLiu
bekerja seperti pesona, terima kasih
hexley
15

Saya menemukan masalah yang sama, kami dapat menyelesaikannya dalam tiga langkah: -

Langkah 1

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

Langkah 2

brew doctor

Langkah 3

brew prune

Jika Anda masih mendapatkan masalah penautan, katakan mysqlsaja, cukup tulis

brew link mysql

Ini akan bekerja

Harry_pb
sumber
1
bekerja untuk saya untuk rabbitmq
Omar
Apa tujuan dari 'Langkah 1'?
Conrad C
1
bew dokter jempol! Tidak melakukan brew pangkas, tetapi menginstal paket lain yang hilang dan berfungsi untuk mongodb.
Chenlu
Memanggil 'brew prune' dinonaktifkan. Gunakan 'brew cleanup' sebagai gantinya.
hanumanDev
12

Bagi mereka yang mengalami masalah ini (diberikan 4 tahun setelah posting ini dibuat) saat menjalankan Mac OS High Sierra - langkah-langkah yang dijelaskan di sini memecahkan masalah bagi saya. Pada dasarnya hanya menguraikan menghapus dan menginstal ulang minuman.

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

Setelah menjalankan langkah-langkah itu, brew link bekerja seperti pesona!

Eron Salling
sumber
Saya menemukan ini bekerja untuk saya (tanpa perintah dump awal): github.com/Homebrew/brew/issues/3285#issuecomment-334976806
vr_driver
Terima kasih! Mencoba jawaban teratas oleh Harry, tidak beruntung - mencoba ini, dan itu bekerja seperti pesona!
Joe
Bekerja untuk saya, terima kasih!
zen
9

Bagi saya solusinya adalah menjalankan brew update.

Jadi, LAKUKAN PERTAMA INI.

Ini mungkin praktik biasa bagi orang-orang yang terbiasa dengan homebrew, tapi saya bukan orang seperti itu.

Sunting: Saya menemukan bahwa saya perlu memperbarui dengan menjalankan brew doctorseperti yang disarankan oleh jawaban @ kinnth untuk pertanyaan yang sama.

Alur kerja pemecahan masalah umum mungkin terlihat seperti ini: 1. run brew update 2. jika itu tidak membantu menjalankan brew doctordan ikuti arahannya 3. jika itu tidak membantu memeriksa stack overflow

FragmentalStew
sumber
1
Ini memperbaiki segalanya untuk saya dan layak dilakukan sebelum hal lain.
Rob Evans
Semua yang dilakukan oleh dokter minuman menunjukkan bahwa saya memiliki keg yang tidak disukai di Cellar saya ... sehingga tidak melakukan apa pun untuk memperbaiki masalah OP
AlxVallejo
@AlxVallejo Ini adalah apa yang saya lakukan untuk menyelesaikan masalah yang saya alami ketika saya menerima kesalahan yang hampir sama dengan OP. Pesan yang Anda terima dari Brew Doctor bagi saya terdengar seperti masalah yang berbeda. Alur kerja "1. jalankan pembaruan minuman 2. jika itu tidak membantu menjalankan dokter pembuatan bir dan ikuti arahannya 3. jika itu tidak membantu memeriksa stack overflow" mungkin masih berlaku.
FragmentalStew
6

Saat melakukan brew link node Selain itu saya mendapat masalah berikut juga:

Kesalahan: Tidak dapat symlink include / node / usr / local / include tidak dapat ditulisi.

Menautkan /usr/local/Cellar/node/9.3.0 ... Kesalahan: Izin ditolak @ dir_s_mkdir - / usr / local / lib

Untuk mengatasi hal di atas, cukup buka / usr / local / dan periksa ketersediaan folder 'include' dan 'lib', jika folder tersebut tidak tersedia, buat saja secara manual.

Dan jalankan brew install node lagi

Wasantha Wijayaratna
sumber
5

Ini karena pengguna saat ini tidak diizinkan untuk menulis di jalur itu. Jadi, untuk mengubah izin r / w (baca / tulis), Anda dapat menggunakan 1. terminal, atau 2. Jendela "Get Info" grafis.

1. Menggunakan Terminal

Google cara menggunakan perintah chmod / chown (ubah mode / ubah pemilik) dari terminal

2. Menggunakan grafis 'Dapatkan Info'

Anda dapat mengklik kanan pada folder / file yang ingin Anda ubah izinnya, lalu buka Dapatkan Info yang akan menampilkan jendela seperti di bawah ini di bagian bawahnya Anda dapat dengan mudah mengubah izin r / w: masukkan deskripsi gambar di sini

Ingatlah untuk mengubah izin kembali menjadi "hanya baca" setelah pekerjaan sementara Anda, jika memungkinkan

Hasaan Ali
sumber
gunakan brew doctor - ini akan mengidentifikasi dengan benar folder (sistem) yang perlu diperbaiki.
johndpope
2

Masalah saya adalah

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

chowntidak membantu, tetapi saya mengikuti brew doctorsaran berjalan dan peringatan ini membantu saya:

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

Setelah brew prunesemua bekerja dengan baik!

Pavel Druzhinin
sumber
Bagus. Bekerja untukku.
Bagusflyer
1

Bagi mereka yang tidak terbiasa:

sudo chown -R YOUR_COMPUTER_USER_NAME PATH_OF_FILE
Justin
sumber
0

Jika Anda pergi ke folder di finder, klik kanan dan pilih "Dapatkan Info" Anda dapat pergi ke bagian "Berbagi dan Izin" untuk folder dan mengizinkan "Baca & Tulis" ke "semua orang"

Inilah yang saya lakukan untuk membuat symlink lulus dengan kesalahan ini. Pembuatan bir juga tampaknya mengatur ulang izin pada folder juga seolah-olah Anda belum mengubah apa pun

Carl Lippert
sumber
0

Jika Anda sudah memiliki direktori di /usr/local untuk paket yang Anda instal, Anda dapat mencoba menghapus direktori ini.

Dalam kasus saya, saya sebelumnya menginstal paket yang saya coba instal tanpa menggunakan minuman, dan kemudian mencopotnya. Ada direktori yang /usr/local/<my_package>/tersisa dari instalasi sebelumnya. Saya menghapus folder ini ( sudo rm -rf /usr/local/<my_package>/) dan setelah itu langkah pembuatan bir berhasil.

Samuel Peter
sumber