จะสร้างลิงค์สัญลักษณ์ใน / usr / bin บน Mac ได้อย่างไร?


11

สภาพแวดล้อม: OSX Sierra, Kernel เวอร์ชั่นดาร์วิน 16.3.0

ปัญหาหลัก: ฉันต้องการใช้เชลล์สคริปต์จำนวนมากในที่เก็บส่วนกลางซึ่งมี #! / usr / bin / zsh บน Mac ของฉัน zsh อยู่ใน / bin / zsh

ความพยายามแก้ไข: ฉันต้องการสร้างลิงก์สัญลักษณ์

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

บัญชีผู้ใช้ของฉันมีสิทธิ์ผู้ดูแลระบบ แต่ฉันไม่รูทและฉันไม่ต้องการเปิดใช้งานผู้ใช้รูทบน Mac เครื่องนี้ ดังนั้นก่อนอื่นเลย

sudo su

เพื่อรับเชลล์ที่มีสิทธิ์ใช้งานรูทแล้วดำเนินการคำสั่งln อย่างไรก็ตามฉันยังคงได้รับข้อความแสดงข้อผิดพลาดln: / usr / bin / zsh: ไม่อนุญาตให้ใช้งาน

คำถาม:

  • เหตุใดฉันจึงได้รับข้อความแสดงข้อผิดพลาดนี้

  • ฉันต้องทำอย่างไรเพื่อสร้างลิงค์

  • มีวิธีที่ดีกว่าเพื่อให้บรรลุเป้าหมายเดิมของฉันหรือไม่? โปรดทราบว่าการแก้ไข #! บรรทัดไม่ใช่ตัวเลือก


ทำไมคุณไม่คัดลอก/usr/bin/zshไปที่/bin/zsh?
Lenniey

1
@ Lenniey ด้วยวิธีนี้คุณจะสร้างสำเนาที่ไม่ได้ปรับปรุงพร้อมกับต้นฉบับ
มาริโอ

@Mario whelp ... แน่นอนว่าคุณพูดถูก OP: อย่าทำอย่างนั้น! ;)
Lenniey

1
@ Lenniey - สำเนาต้องไปทางอื่น! และถ้าคุณสามารถคัดลอกได้คุณก็สามารถลิงค์ได้
AFH

@AFH ใช่ความคิดเห็นของฉันเป็นระเบียบสมบูรณ์ ...
Lenniey

คำตอบ:


15

คุณจะได้รับข้อความเพราะแอปเปิ้ลนี้ระบบป้องกันความซื่อสัตย์ การป้องกันความสมบูรณ์ของระบบรวมถึงการป้องกันสำหรับส่วนต่าง ๆ ของระบบ:

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

เส้นทางและแอพที่แอพและเครื่องมือติดตั้งของบุคคลที่สามสามารถเขียนต่อไปได้เช่น:

/Applications
/Library
/usr/local

ซึ่งหมายความว่าคุณสามารถสร้างลิงก์สัญลักษณ์ใน/usr/local/bin(ยังอยู่ใน $ PATH ของคุณ)

แต่ดูเหมือนว่าคุณต้องการสร้างลิงก์สัญลักษณ์/usr/binโดยเฉพาะ คุณสามารถทำได้โดยปิดการใช้งานการป้องกันความสมบูรณ์ของระบบ (โปรดอย่าทำเพียงแก้ไขสคริปต์ .. ) คุณสามารถปิดการใช้งานโดย (ฉันยังไม่ได้ทดสอบด้วยตัวเอง !!!):

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
คุณพลาดจุดสำคัญไปแล้ว: ผู้ถามมีสคริปต์ที่ระบุว่า#!/usr/bin/zhเป็นเชลล์ดังนั้นวิธีแก้ปัญหาที่เขาต้องการคือการเชื่อมโยงตำแหน่งนี้กับตำแหน่งที่เชลล์อาศัยอยู่จริง แต่เมื่อคุณบอกว่าเขาได้รับการปกป้องจากการทำเช่นนี้ วิธีการแก้ปัญหาเพียงอย่างเดียวดูเหมือนจะเป็นการแก้ไขชุดของสคริปต์
AFH

ใช่แล้วคุณถูกต้องเขาจะต้องแก้ไขสคริปต์ (ซึ่งสามารถเกิดขึ้นได้ด้วยคำสั่งเดียว)
13

@Dimitar ดูคำถาม: มีวิธีที่ดีกว่าเพื่อให้บรรลุเป้าหมายเดิมของฉัน โปรดทราบว่าการแก้ไข #! บรรทัดไม่ใช่ตัวเลือก
Lenniey

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