Bagaimana cara membuat tautan simbolis di / usr / bin pada Mac?

11

Lingkungan: OSX Sierra, Darwin Kernel Versi 16.3.0

Root Problem: Saya ingin menggunakan banyak skrip shell di repositori pusat, yang memiliki #! / Usr / bin / zsh. Di Mac saya, zsh ada di / bin / zsh.

Solusi yang dicoba: Saya ingin membuat tautan simbolis

ln -s /bin/zsh /usr/bin/zsh

Akun pengguna saya memiliki hak admin, tetapi saya bukan root, dan saya lebih suka untuk tidak mengaktifkan pengguna root di Mac ini. Karena itu saya pertama kali melakukan a

sudo su

untuk mendapatkan shell dengan hak akses root dan kemudian dieksekusi perintah ln . Namun saya masih mendapatkan pesan kesalahan ln: / usr / bin / zsh: Operasi tidak diizinkan .

Pertanyaan:

  • Mengapa saya mendapatkan pesan kesalahan ini?

  • Apa yang harus saya lakukan untuk membuat tautan?

  • Apakah ada cara yang lebih baik untuk mencapai tujuan awal saya? Perhatikan bahwa memperbaiki #! garis bukanlah suatu pilihan.

pengguna1934428
sumber
Kenapa tidak Anda hanya menyalin /usr/bin/zshke /bin/zsh?
Lenniey
1
@Lenniey Dengan begitu Anda membuat salinan longgar yang tidak akan diperbarui bersama dengan aslinya.
Mario
@ Mario Whelp ... tentu saja Anda benar. OP: jangan pernah melakukan itu! ;)
Lenniey
1
@Lenniey - Salinan harus dilawan! Dan jika Anda dapat menyalin, maka Anda dapat menautkan.
AFH
@ Oh ya komentar saya benar-benar berantakan ...
Lenniey

Jawaban:

15

Anda mendapatkan pesan ini karena Perlindungan Integritas Sistem Apple . Perlindungan Integritas Sistem mencakup perlindungan untuk bagian-bagian sistem ini:

/System
/usr
/bin
/sbin
Apps that are pre-installed with OS X

Jalur dan aplikasi yang aplikasi dan installer pihak ketiga dapat terus menulis untuk memasukkan:

/Applications
/Library
/usr/local

Ini berarti Anda cukup membuat tautan simbolis /usr/local/bin(masih dalam $ PATH Anda).

NAMUN, tampaknya Anda perlu membuat tautan simbolik secara khusus /usr/bin. Anda dapat mencapainya dengan menonaktifkan Perlindungan Integritas Sistem (tolong jangan lakukan itu, cukup edit skripnya ..). Anda dapat menonaktifkannya dengan (Saya belum mengujinya sendiri !!!):

Click the  menu.
Select Restart...
Hold down command-R to boot into the Recovery System.
Click the Utilities menu and select Terminal.
Type csrutil disable and press return.
Close the Terminal app.
Click the  menu and select Restart....
13ditarik
sumber
2
Anda telah melewatkan intinya: si penanya memiliki skrip yang menentukan #!/usr/bin/zhsebagai shell, jadi solusi yang ia cari adalah menautkan lokasi ini ke tempat shell sebenarnya berada, tetapi seperti yang Anda katakan ia dilindungi dari melakukan ini. Kecuali jika proteksi di-bypass, satu-satunya solusi adalah mengedit skrip dalam jumlah banyak.
AFH
Ya, Anda benar, ia harus mengedit skrip (yang dapat terjadi dengan satu perintah).
13dimitar
@Dimitar melihat pertanyaan: Apakah ada cara yang lebih baik untuk mencapai tujuan awal saya? Perhatikan bahwa memperbaiki #! garis bukanlah suatu pilihan.
Lenniey
1
catatan diambil, saya telah memodifikasi jawaban saya
13dimitar