Ah, sim, essa é uma parte muito confusa se você lida com o Unixes por qualquer período de tempo. Existe um padrão que a maioria dos Unixes "tenta" seguir, chamado FHS - Filesystem Hierarchy Standard .
Dado que eu uso principalmente as distribuições baseadas no Red Hat, estou mais familiarizado com a sua opinião sobre as distribuições FHS para Fedora, CentOS e RHEL Linux. Mas eu também usei distribuições baseadas em Debian e BSD e elas não são tão diferentes em termos de onde as coisas são mantidas, em termos de sistema de arquivos.
Agora para suas perguntas. Eu daria uma olhada no documento FHS , que governa livremente essas estruturas de diretório. Em geral:
Diretório - /lib
Contém bibliotecas compartilhadas essenciais e módulos do kernel.
Objetivo: O diretório / lib contém as imagens da biblioteca compartilhada necessárias para inicializar o sistema e executar os comandos no sistema de arquivos raiz, ie. por binários em / bin e / sbin.
Nota1: Bibliotecas compartilhadas que são necessárias apenas para binários em / usr (como quaisquer binários do X Window) não devem estar em / lib. Somente as bibliotecas compartilhadas necessárias para executar binários em / bin e / sbin podem estar aqui.
Nota2: Como o principal objetivo do / lib é conter bibliotecas para ferramentas implementadas nos diretórios / bin & / sbin, as bibliotecas no / lib podem ser de 32 ou 64 bits.
Por exemplo (sistema Fedora 14 de 64 bits)
$ uname -a
Linux grinchy 2.6.35.14-106.fc14.x86_64 #1 SMP Wed Nov 23 13:07:52 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux
Aqui está uma amostra dos arquivos do meu / lib
./libpam.so.0.82.2: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
./libplc4.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
./libidn.so.11.6.1: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
./upstart/telinit: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
./upstart/runlevel: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
./upstart/shutdown: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
./upstart/reboot: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
./libdb-4.8.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
./firmware/mixart/miXart8.elf: ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 (SYSV), statically linked, not stripped
./libtinfo.so.5.7: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
Diretório - /lib<qual>
Bibliotecas compartilhadas essenciais de formato alternativo (opcional). Estes seriam os diretórios / lib32, / lib64, etc.
Objetivo: Pode haver uma ou mais variantes do diretório / lib em sistemas que suportam mais de um formato binário que requer bibliotecas separadas. Isso é comumente usado para suporte de 64 ou 32 bits em sistemas que suportam vários formatos binários, mas requerem bibliotecas com o mesmo nome.
Nota: Nesse caso, / lib32 e / lib64 podem ser os diretórios da biblioteca e / lib um link simbólico para um deles.
Diretório - /usr/lib
Bibliotecas para programação e pacotes.
Objetivo: / usr / lib inclui arquivos de objetos, bibliotecas e binários internos que não devem ser executados diretamente por usuários ou scripts de shell.
Nota1: Vários arquivos estáticos e subdiretórios estáticos, específicos da aplicação, independentes da arquitetura devem ser colocados em / usr / share.
Os aplicativos podem usar um único subdiretório em / usr / lib. Se um aplicativo usar um subdiretório, todos os dados dependentes da arquitetura usados exclusivamente pelo aplicativo deverão ser colocados dentro desse subdiretório.
Nota2: Por exemplo, o subdiretório perl5 para módulos e bibliotecas do Perl 5.
Diretório - /usr/lib<qual>
Bibliotecas de formato alternativo (opcional).
Finalidade: /usr/lib<qual>
executa a mesma função que / usr / lib para um formato binário alternativo, a não ser que as ligações simbólicas /usr/lib<qual>/sendmail
e /usr/lib<qual>/X11
não são necessários.
Nota: Nos casos em que / usr / lib e /usr/lib<qual>
os mesmos (um é um link simbólico para o outro), esses arquivos e os subdiretórios por aplicativo existirão.
TLDR;
Em geral:
Se houver bibliotecas exigidas por um executável nos diretórios / bin ou / sbin, essas bibliotecas deverão estar nos diretórios / lib *.
Se houver bibliotecas para usar programas e pacotes, elas serão acessadas em / usr / lib / *. Se houver executáveis necessários para uma biblioteca específica, mas esses executáveis não devem ser chamados pelos usuários diretamente ou pela raiz, eles serão acessados em / usr / libexec.