Câu hỏi Làm thế nào để tạo liên kết tượng trưng trong / usr / bin trên máy Mac?


Môi trường: OSX Sierra, phiên bản hạt nhân Darwin 16.3.0

Vấn đề gốc: Tôi muốn sử dụng một loạt các kịch bản shell trong một kho lưu trữ trung tâm, có một #! / Usr / bin / zsh. Trên máy Mac của tôi, zsh nằm trong / bin / zsh.

Giải pháp đã cố gắng: Tôi muốn tạo một liên kết tượng trưng

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

Tài khoản người dùng của tôi có quyền quản trị, nhưng tôi không phải là người chủ và tôi không muốn cho phép người dùng root trên máy Mac này. Vì vậy, tôi đã làm một

sudo su

để có được một trình bao với các đặc quyền root và sau đó thực thi ln chỉ huy. Tuy nhiên tôi vẫn nhận được thông báo lỗi ln: / usr / bin / zsh: Thao tác không được phép.

Câu hỏi:

  • Tại sao tôi nhận được thông báo lỗi này?

  • Tôi phải làm gì để tạo liên kết?

  • Có cách nào tốt hơn để đạt được mục tiêu ban đầu của tôi không? Lưu ý rằng sửa lỗi #! dòng không phải là một lựa chọn.


6
2018-01-18 12:25


gốc


Tại sao bạn không chỉ cần sao chép /usr/bin/zsh đến /bin/zsh? - Lenniey
@ Lenniey Bằng cách đó, bạn đang tạo một bản sao rời sẽ không được cập nhật cùng với bản gốc. - Mario
@Mario whelp ... tất nhiên bạn nói đúng. OP: đừng bao giờ làm thế! ;) - Lenniey
@ Lenniey - Bản sao cần phải đi theo cách khác! Và nếu bạn có thể sao chép, thì bạn có thể liên kết. - AFH
@AFH yeah bình luận của tôi là một mớ hỗn độn hoàn chỉnh ... - Lenniey


Các câu trả lời:


Bạn nhận được thông báo này vì Apple Bảo vệ toàn vẹn hệ thống. Bảo vệ toàn vẹn hệ thống bao gồm bảo vệ cho những phần này của hệ thống:

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

Đường dẫn và ứng dụng mà các ứng dụng và trình cài đặt của bên thứ ba có thể tiếp tục viết để bao gồm:

/Applications
/Library
/usr/local

Điều này có nghĩa là bạn chỉ có thể tạo liên kết tượng trưng trong /usr/local/bin (nó vẫn còn trong $ PATH) của bạn.

NHƯNG, có vẻ như bạn đặc biệt cần tạo liên kết tượng trưng trong /usr/bin. Bạn có thể đạt được điều đó bằng cách vô hiệu hóa tính năng Bảo vệ toàn vẹn hệ thống (vui lòng không làm điều đó, chỉ cần chỉnh sửa tập lệnh ..). Bạn có thể vô hiệu hóa nó bằng cách (tôi đã không thử nghiệm nó bản thân mình !!!):

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....

9
2018-01-18 12:31



Bạn đã bỏ lỡ điểm: người hỏi có các kịch bản chỉ định #!/usr/bin/zh như trình bao, vì vậy giải pháp mà anh ta tìm kiếm là liên kết vị trí này với nơi thực sự nằm, nhưng khi bạn nói anh ta được bảo vệ khỏi việc này. Trừ khi bảo vệ bị bỏ qua, giải pháp duy nhất có vẻ là một bản chỉnh sửa hàng loạt các tập lệnh. - AFH
Vâng, bạn đã đúng, anh ấy phải chỉnh sửa các kịch bản (có thể xảy ra với một lệnh duy nhất). - 13dimitar
@Dimitar nhìn vào câu hỏi: Có cách nào tốt hơn để đạt được mục tiêu ban đầu của tôi không? Lưu ý rằng sửa lỗi #! dòng không phải là một lựa chọn. - Lenniey
lưu ý, tôi đã sửa đổi câu trả lời của mình - 13dimitar