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 /optvà /usr/localkhông có ý định chứa cùng một bộ tệp.
/usr/locallà 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 makelệ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/foolà một phần của HĐH trong khi /usr/local/bin/foolà một thay thế cục bộ).
Tất cả các tệp bên dưới /usrcó 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/bincầ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/localvà sử dụng /opt/localthay thế để khắc phục vấn đề này.
/usr/locallà một di sản từ BSD ban đầu. Vào thời điểm đó, mã nguồn của /usr/bincác lệnh OS nằm trong /usr/src/binvà /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/srcvà 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, /optlà 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/localcô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ụ, someappsẽ được cài đặt /opt/someapp, với một trong các lệnh /opt/someapp/bin/foocủa nó, tệp cấu hình của nó sẽ nằm trong /etc/opt/someapp/foo.confvà các tệp nhật ký của nó /var/opt/someapp/logs/foo.access.
/usr/locallà một phiên bản cục bộ của/usrhệ thống tệp, trong khi đó/optlà nơi giữ chỗ cho các thứ linh tinh.