it-swarm-vi.com

Sự khác biệt giữa / opt và / usr / local là gì?

Theo Tiêu chuẩn phân cấp hệ thống tập tin , /opt dành cho "cài đặt gói phần mềm ứng dụng bổ trợ". /usr/local là "để quản trị viên hệ thống sử dụng khi cài đặt phần mềm cục bộ". Những trường hợp sử dụng có vẻ khá giống nhau. Phần mềm không có phân phối thường được cấu hình theo mặc định để cài đặt trong /usr/local hoặc là /opt không có vần điệu hoặc lý do cụ thể mà họ đã chọn.

Có một số khác biệt tôi đang thiếu, hoặc cả hai đều làm điều tương tự, nhưng tồn tại vì lý do lịch sử?

440
Patches

Mặc dù cả hai đều được thiết kế để chứa các tệp không thuộc hệ điều hành, /opt/usr/local không có ý định chứa cùng một tập tin.

/usr/local là nơi để cài đặt các tệp được quản trị viên xây dựng, thường bằng cách sử dụng lệnh make (ví dụ: ./configure; make; make install). Ý tưởng là để tránh xung đột với các tệp là một phần của hệ điều hành, chúng sẽ bị ghi đè hoặc ghi đè lên các tệp cục bộ nếu không (ví dụ: /usr/bin/foo là một phần của HĐH trong khi /usr/local/bin/foo là một thay thế địa phương).

Tất cả các tệp trong /usr có thể chia sẻ giữa các phiên bản HĐH, mặc dù điều này hiếm khi được thực hiện với Linux. Đây là một phần mà FHS hơi mâu thuẫn, như /usr được định nghĩa là chỉ đọc, nhưng /usr/local/bin cần phải đọc-ghi để cài đặt phần mềm cục bộ để thành công. Tiêu chuẩn hệ thống tệp SVR4, vốn là nguồn cảm hứng chính của FHS, được khuyến nghị nên tránh /usr/local Và sử dụng /opt/local thay vào đó để khắc phục vấn đề này.

/usr/local là một di sản từ BSD gốc. Vào thời điểm đó, mã nguồn của /usr/bin Các lệnh hệ điều hành nằm trong /usr/src/bin/usr/src/usr.bin, trong khi nguồn của các lệnh được phát triển cục bộ là trong /usr/local/src và nhị phân của chúng trong /usr/local/bin. Không có khái niệm về bao bì (bên ngoài tarball).

Mặt khác, /opt là một thư mục để cài đặt các gói chưa được xử lý (nghĩa là các gói không phải là một phần của phân phối Hệ điều hành, nhưng được cung cấp bởi một nguồn độc lập), mỗi gói trong thư mục con riêng của nó. Họ đã được xây dựng toàn bộ các gói được cung cấp bởi một nhà phân phối phần mềm độc lập của bên thứ ba. Không giống /usr/local Stuff, các gói này tuân theo các quy ước thư mục (hoặc ít nhất là chúng nên). Ví dụ: someapp sẽ được cài đặt trong /opt/someapp, với một trong những lệnh của nó là /opt/someapp/bin/foo, tập tin cấu hình của nó sẽ ở /etc/opt/someapp/foo.conf và các tệp nhật ký của nó trong /var/opt/someapp/logs/foo.access.

393
jlliagre

Sự khác biệt cơ bản là /usr/local dành cho phần mềm không được quản lý bởi trình đóng gói hệ thống, nhưng vẫn tuân theo các quy tắc triển khai unix tiêu chuẩn.

Đó là lý do tại sao bạn có /usr/local/bin, /usr/local/sbin/usr/local/include Vân vân...

/opt mặt khác là dành cho phần mềm không tuân theo điều này và được triển khai theo kiểu nguyên khối. Điều này thường bao gồm phần mềm thương mại và/hoặc đa nền tảng được đóng gói theo kiểu "Windows".

89
Šimon Tóth

Chúng thực sự rất giống nhau, và việc sử dụng cái này hay cái kia là vấn đề quan điểm hơn. Tạp chí Linux đã có cuộc thảo luận về điểm/điểm này về chủ đề chính xác này tại đây .

18
philfr

Đối với cá nhân tôi, đó là những gì Bill nói trong liên kết của @ philfr:

Trên một hệ thống phát triển, hoặc một hộp cát, có một thư mục/opt nơi bạn có thể chỉ cần ném mọi thứ và xem liệu chúng có hoạt động hay không. Tôi biết tôi sẽ không tự mình nỗ lực đóng gói mọi thứ để thử chúng. Nếu ứng dụng không hoạt động, bạn chỉ cần rm thư mục/opt/mytestapp và ứng dụng đó là lịch sử. Đóng gói có thể có ý nghĩa khi bạn đang triển khai một triển khai lớn (đôi khi tôi thực hiện các ứng dụng gói), nhưng rất nhiều lần, thật tuyệt khi ném công cụ vào/opt.

Thật không may, hầu hết make install script đẩy tập tin vào /usr/local thay vì chỉ tạo một liên kết tượng trưng ở đó: - /

13
pepoluan

Đầu tiên, tôi không nghĩ có một câu trả lời nghiêm ngặt; quản trị viên khác nhau sẽ có ý kiến ​​khác nhau, theo nền tảng của họ. Trong lịch sử, /usr/local đến đầu tiên; đó là hội nghị ở Berkley, IIRC. Tại một thời điểm trong quá trình phát triển Hệ thống V, nếu tôi không nhầm (điều này đã xảy ra từ lâu và tôi đã không ghi chú), đã có một quyết định hoặc mong muốn có thể gắn kết /usr chỉ đọc, có nghĩa là bạn không thể thêm phần mềm mới vào nó; đó có thể là lý do tại sao /opt đã được phát minh. Khi điều đó xảy ra, có rất nhiều phần mềm hiện có đã ghi vào /usr ý tưởng đó không bao giờ thực sự lên khỏi mặt đất.

Sở thích cá nhân của tôi là /opt, với thư mục con riêng cho từng sản phẩm; điều này làm cho việc loại bỏ một sản phẩm là một trường hợp đơn giản của rm -fr. Nhưng nếu tất cả phần mềm của bạn được cài đặt thông qua trình quản lý gói tốt, điều đó không thành vấn đề và nếu phần mềm bạn cài đặt không tuân thủ nghiêm ngặt các quy ước này và ghi các cấu hình và như vậy ở đâu đó trong /usr, điều đó cũng không quan trọng, mặc dù vì những lý do ngược lại.

12
James Kanze

Tôi có một chút khác biệt về vấn đề này.
[.__.] Trong khi mọi thứ trong jlliagre 's answer là chính xác, ứng dụng thực tế đối với tôi, khi triển khai phần mềm trong một cụm, đi xuống các biến môi trường mặc định và mặc định tái sử dụng libs.

Chỉ cần đặt - /usr/local và tất cả các thư mục con của nó nằm trong các lọ env thích hợp, chẳng hạn như PATHMANPATH, và /usr/local/lib{,64} đang ở trong ldconfig (/etc/ld.so.conf.d/).

/opt/ OTOH không - cả hai đều có lợi khi yêu cầu nhiều phiên bản hoặc các gói xung đột cùng tồn tại trong hệ thống, nhưng yêu cầu một số loại quản lý môi trường (ví dụ: mô-đun môi trường hoặc bộ sưu tập phần mềm ) và bất lợi ở chỗ nó có khả năng "lãng phí" không gian lưu trữ bằng cách sao chép các thư viện dùng chung, khi mỗi cài đặt trong /opt có thể hoàn toàn khép kín.

Đối với bản chất được chia sẻ của /usr/local để làm việc, giả sử rằng ví dụ: nhị phân được cài đặt trực tiếp vào /usr/local/bin (và trang man để thích hợp /usr/local/share/man/...) thay vì /usr/local/app/{bin,share/man,...} Vân vân.

10
Dani_l

Tóm lại, câu trả lời ruột của tôi ...

Đã sử dụng phần chia sẻ công bằng FreeBSD của tôi kể từ 2.2.6 và Red Hat Linux kể từ phiên bản 9 ...

/usr/local == Old School Conventions
/opt       == New School Conventions

Sự sắp xếp mọi thứ trên các hệ thống tệp UNIX/Linux có liên quan nhiều đến các quy ước và truyền thống, hơn là logic tuyệt đối.

Mặt khác, tôi chủ yếu đồng ý với những người khác. :-)

Luôn luôn có một số ngoại lệ cho quy tắc. Vào cuối ngày, bạn quyết định điều gì là tốt nhất cho thiết lập của bạn (khi bạn có thể).

0
Anthony Rutledge