Mac OS X: nơi thông thường nơi tệp nhị phân sẽ sống


61

Tôi đã tải xuống một ứng dụng là một ứng dụng dòng lệnh và muốn đặt nó ở một nơi mà tôi có thể chạy nó từ dòng lệnh mà không cần phải gõ đường dẫn một cách rõ ràng.

  1. Các đường dẫn thông thường được sử dụng cho một cái gì đó như thế này là gì? /usr/bin? Có các tùy chọn khác nhau, một nếu tôi muốn nó cho tất cả người dùng và một nếu tôi muốn nó cho chỉ một người dùng cụ thể, như tài khoản quản trị viên của tôi?

  2. Hoặc tôi nên đặt nó trong thư mục riêng của nó trong thư mục Ứng dụng và thêm nó vào đường dẫn? Nếu vậy, tập tin nào kiểm soát nơi đường dẫn được đặt?

Câu trả lời:


53

Câu trả lời cốt lõi: bạn có thể muốn /usr/local/bin. Tùy thuộc vào mức độ gần đây của macOS của bạn, bạn có thể cần cập nhật mặc định của mình $PATH. Xem bên dưới để biết thêm chi tiết.

CẬP NHẬT 12-01-2018 Tại một số thời điểm kể từ khi tôi viết câu trả lời ban đầu của mình, Apple đã thay đổi mặc định $PATH. Kết quả là, rất nhiều điều tôi nói dưới đây không liên quan đến các máy Mac gần đây. Nếu bạn nhập echo $PATHvào một thiết bị đầu cuối, và /usr/local/binlà lần đầu tiên, thì bạn có thể bỏ qua mọi thứ bên dưới về việc thay đổi $PATH.

Câu trả lời gốc

Mac là bất thường về vấn đề này. Biến mặc định $PATHcho người dùng thông thường trông như thế này:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

Bằng cách đặt /usr/local/bin sau /usr/bin/bin, Mac nâng cấp hệ thống thông thường. Thông thường, bạn có thể đặt một cái gì đó vào /usr/local/bin(giả sử một trình thông dịch Perl thứ hai, được biên dịch theo một số cách không chuẩn), và sau đó một người dùng thông thường sẽ nhấn tùy chỉnh thay vì toàn bộ hệ thống trước tiên. Điều này là tốt Người dùng có thể nhận được các biến thể, nhưng hệ thống vẫn thuần túy. $PATHTuy nhiên, với mặc định của Apple , các mục trong /usr/binhoặc /binsẽ được tìm thấy trước mọi thứ trong đó /usr/local/bin. (Điều này về cơ bản đánh bại mục đích cài đặt, ví dụ: Perl tùy chỉnh /usr/local/bin.)

Để khắc phục điều này, bạn có thể thay đổi người dùng thông thường $PATHbằng cách chỉnh sửa .profiletệp trong thư mục chính của người dùng. (Tệp đó có thể không tồn tại, nếu bạn có bản cài đặt hoàn toàn mới. Trong trường hợp đó, hãy tạo tệp đó.)

Liên quan đến bán: Homebrew cung cấp quản lý gói tuyệt vời cho máy Mac. Theo mặc định, Homebrew cài đặt phần mềm vào /usr/local, nhưng nó làm theo cách giúp dễ dàng loại bỏ mọi thứ và trở về trạng thái vanilla sau đó.


1
Trên OsX 10.13.6 mới cài đặt của tôi (High Sierra), đường dẫn trước tiên chứa / usr / local / bin (mặc dù thư mục thậm chí không tồn tại) theo mặc định.
Legolas

1
@Legolas Apple dường như đã thay đổi cách họ xử lý việc này. Tôi sẽ chỉnh sửa bài viết.
Telemachus

9

/usr/local/bin/usr/local/sbinrất đáng để thêm vào đường dẫn của bạn, vì rất nhiều tệp tạo tệp cho các bản dựng nguồn được mặc định để cài đặt ở đó.

Nếu bạn sử dụng MacPorts , nó cũng đáng để thêm /opt/local/bin/opt/local/sbincũng vậy.

Cách tốt nhất để làm điều này là thêm

export PATH=/usr/local/bin:/usr/local/sbin:/opt/local/bin:/opt/local/sbin:$PATH

vào .bashrctệp trong thư mục chính của bạn (bị ẩn, vì vậy CLI là cách tốt nhất để thực hiện việc này) hoặc, nếu bạn muốn thay đổi đường dẫn rộng của hệ thống, hãy thêm cùng một dòng vào /etc/bashrc(không bị ẩn), nhưng bạn sẽ cần phải sudolàm điều này

Nếu bạn không có .bashrcnhà của bất kỳ người dùng nào, bạn có thể tạo một cái và thêm dòng này vào nó, nhưng hãy nhớ thay đổi các quyền trên tệp bạn tạo để người dùng nghi ngờ (rõ ràng là không liên quan nếu bạn ' đang làm điều đó cho hồ sơ của riêng bạn).

Các $PATHcuối cùng gắn thêm đường dẫn mặc định hệ thống để bất cứ điều gì bạn đặt trước. Lưu ý rằng hệ thống tìm kiếm nhị phân theo thứ tự các đường dẫn đã cho, vì vậy nếu bạn cài đặt nhị phân trong /usr/localhoặc /opt/localcũng được cài đặt theo mặc định trên hệ thống, các phiên bản bạn cài đặt sẽ được tìm thấy trước, có thể (mặc dù hiếm khi) làm đảo lộn mọi thứ. Đó là giá trị xem ra cho.

Thông tin tốt là ở đây .

Tôi nên lưu ý rằng các giả định ở trên bạn đang sử dụng Bash cho shell, đây là mặc định trên Mac OS X v10.4 (Tiger) và Mac OS X v10.5 (Leopard), nhưng không phải trên các hệ thống trước đó, được sử dụng tcshthay thế, trong đó có một cú pháp khác nhau.

Tôi hy vọng điều đó sẽ giúp ...


1
/usr/local/binđã có trong OS X mặc định $PATH(mặc dù quá muộn - xem câu trả lời của tôi). Nếu bạn sử dụng MacPorts, trình cài đặt của nó sẽ chỉnh sửa đường dẫn của bạn khi cần thiết - ít nhất là nó luôn có trong trải nghiệm của tôi. Điều đó nói rằng, tốt cho người dùng biết những gì nó đang làm (và tại sao).
Telemachus

cũng phát hiện ra @Telemachus: bất cứ khi nào tôi xây dựng máy Mac cho riêng mình, tôi sẽ tùy chỉnh địa ngục ngay từ đầu, vì vậy tôi không bao giờ có thể nhớ được tiêu chuẩn và cái gì là của tôi!
avstrallen

1
Tôi biết những gì bạn đang mong đợi về trình cài đặt MacPorts tùy chỉnh các đường dẫn trong .profile, nhưng tôi đã có một dịp trong quá khứ vì một số lý do, tôi không biết điều gì, điều này đã thất bại (điều này làm tôi bối rối khá lâu!) ... vì vậy kể từ đó tôi có xu hướng nối nó bằng tay ...
avstrallen

"Cái nào bị ẩn, vì vậy CLI là cách tốt nhất để làm điều này": câu hỏi ngớ ngẩn, làm thế nào để bạn chạy TextEdit trên một tệp từ dấu nhắc lệnh?
Jason S

Không có câu hỏi ngu ngốc nào: sử dụng openlệnh với tên tệp làm đối số và nó sẽ mở với bất cứ điều gì được đặt làm trình soạn thảo văn bản mặc định (TextEdit làm tiêu chuẩn).
avstrallen

7

Tôi có xu hướng đi với /usr/local. Đây là một lời giải thích hay tại sao , đề cập đến Tiêu chuẩn phân cấp hệ thống tập tin (FHS) .⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢, trong đó lần lượt nói về /usr/local:

Hệ thống phân cấp thứ ba cho dữ liệu cục bộ, cụ thể cho máy chủ này. Thông thường có các thư mục con khác, ví dụ: bin, lib, share.⁢


Đúng, nó khá giống với các hệ điều hành * nix khác về vấn đề đó.
jtbandes

2
Vui lòng trích dẫn các phần thiết yếu của câu trả lời từ (các) liên kết tham chiếu, vì câu trả lời có thể trở nên không hợp lệ nếu (các) trang được liên kết thay đổi.
DavidPostill
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.