Хотя оба предназначены для хранения файлов, не относящихся к операционной системе, /optи /usr/localне предназначены для того, чтобы содержать один и тот же набор файлов.
/usr/localэто место для установки файлов, созданных администратором, обычно с помощью makeкоманды (например, ./configure; make; make install). Идея состоит в том, чтобы избежать столкновений с файлами, которые являются частью операционной системы, которые могут быть либо перезаписаны, либо перезаписаны локальными (в противном случае они /usr/bin/fooявляются частью ОС, а /usr/local/bin/fooявляются локальной альтернативой).
Все файлы /usrдоступны для совместного использования между экземплярами ОС, хотя это редко делается в Linux. Это часть, где FHS немного противоречит самому себе, так как /usrопределено, что она предназначена только для чтения, но /usr/local/binдля успешной локальной установки программного обеспечения требуется чтение и запись. Стандарт файловой системы SVR4, который был основным источником вдохновения FHS, рекомендует избегать /usr/localи использовать /opt/localвместо этого для преодоления этой проблемы.
/usr/localэто наследие от оригинального BSD. В то время исходный код /usr/binкоманд ОС находился в /usr/src/binи /usr/src/usr.bin, а источник локально разработанных команд - в /usr/local/src, а их двоичные файлы - в /usr/local/bin. Там не было никакого понятия упаковки (вне тарболы).
С другой стороны, /optэто каталог для установки разделенных пакетов (то есть пакетов, не входящих в дистрибутив операционной системы, но предоставленных независимым источником), каждый из которых находится в своем собственном подкаталоге. Они уже созданы целыми пакетами, предоставленными независимым сторонним дистрибьютором программного обеспечения. В отличие от /usr/localвещей, эти пакеты следуют соглашениям каталога (или, по крайней мере, они должны). Например, someappбудет установлен в /opt/someapp, с одной из его команд /opt/someapp/bin/foo, его файл конфигурации будет в /etc/opt/someapp/foo.conf, а его файлы журнала в /var/opt/someapp/logs/foo.access.
/usr/localэто локальная версия/usrфайловой системы, в то время как/optзаполнитель для разных вещей.