Làm cách nào để tạo liên kết tượng trưng trong / usr / bin trên máy Mac?


11

Môi trường: OSX Sierra, Hạt nhân Darwin Phiên bản 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 kho lưu trữ trung tâm, có #! / 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 root và tôi không muốn kích hoạt người dùng root trên máy Mac này. Vì vậy, lần đầu tiên tôi đã làm một

sudo su

để lấy shell với quyền root và sau đó thực thi lệnh ln . 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 việc sửa lỗi #! dòng không phải là một lựa chọn.


Tại sao bạn không sao chép /usr/bin/zshvào /bin/zsh?
Lenniey

1
@Lenniey Bằng cách đó, bạn đang tạo một bản sao lỏng lẻo sẽ không được cập nhật cùng với bản gốc.
Mario

@Mario whelp ... tất nhiên là bạn đúng. OP: đừng bao giờ làm thế! ;)
Lenniey

1
@Lenniey - Bản sao cần phải đi theo con đường khác! Và nếu bạn có thể sao chép, thì bạn có thể liên kết.
AFH

@AFH vâng bình luận của tôi là một mớ hỗn độn ...
Lenniey

Câu trả lời:


15

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

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

Các đường dẫn và ứng dụng mà ứ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ần tạo một liên kết tượng trưng trong /usr/local/bin(nó vẫn nằm trong $ PATH của bạn).

NHƯNG, có vẻ như bạn đặc biệt cần phải tạo liên kết tượng trưng trong /usr/bin. Bạn có thể đạt được nó bằng cách vô hiệu hóa 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 các tập lệnh ..). Bạn có thể vô hiệu hóa nó bằng cách (Tôi chưa tự mình kiểm tra !!!):

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

2
Bạn đã bỏ lỡ vấn đề: người hỏi có các tập lệnh xác định #!/usr/bin/zhlà shell, vì vậy giải pháp anh ta tìm kiếm là liên kết vị trí này với nơi shell thực sự nằm, nhưng như bạn nói anh ta được bảo vệ khỏi việc này. Trừ khi bảo vệ được bỏ qua, giải pháp duy nhất dường như là chỉnh sửa hàng loạt các tập lệnh.
AFH

Vâng, bạn đã đúng, anh ta phải chỉnh sửa các tập lệnh (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 việc sửa lỗi #! dòng không phải là một lựa chọn.
Lenniey

1
lưu ý, tôi đã sửa đổi câu trả lời của mình
13dimitar
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.