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
và /usr/local
không có ý định chứa cùng một bộ tệp.
/usr/local
là nơi để cài đặt các tệp được xây dựng bởi quản trị viên, thường bằng cách sử dụng make
lệnh (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, 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ế cục bộ).
Tất cả các tệp bên dưới /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 trong đó 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 thế để khắc phục vấn đề này.
/usr/local
là một di sản từ BSD ban đầu. Vào thời điểm đó, mã nguồn của /usr/bin
các lệnh OS nằm trong /usr/src/bin
và /usr/src/usr.bin
, trong khi nguồn của các lệnh được phát triển cục bộ nằm trong /usr/local/src
và các nhị phân của chúng nằm 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ý (tức 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 như /usr/local
công cụ, 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 /opt/someapp
, với một trong các lệnh /opt/someapp/bin/foo
của nó, tệp cấu hình của nó sẽ nằm trong /etc/opt/someapp/foo.conf
và các tệp nhật ký của nó /var/opt/someapp/logs/foo.access
.
/usr/local
là một phiên bản cục bộ của/usr
hệ thống tệp, trong khi đó/opt
là nơi giữ chỗ cho các thứ linh tinh.