Ah, sim, essa é uma parte muito confusa se você tiver lidado com Unixes por qualquer período de tempo. Existe um padrão que a maioria dos Unixes "tenta" seguir, chamado FHS - Padrão de Hierarquia do Sistema de Arquivos .
Dado que eu uso principalmente distribuições baseadas no Red Hat, eu estou mais familiarizado com sua visão sobre o FHS para distribuições Fedora, CentOS e RHEL Linux. Mas eu usei o Debian & Distros baseados em BSD também e eles não são tão diferentes em termos de onde as coisas são mantidas, sistema de arquivos sábio.
Agora, para as suas perguntas. Eu daria uma olhada no documento FHS , que rege livremente essas estruturas de diretórios. Em geral:
Diretório - /lib
Contém bibliotecas compartilhadas essenciais e módulos do kernel.
Finalidade: 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, isto é. por binários em / bin e / sbin.
Note1: As bibliotecas compartilhadas que são necessárias apenas para binários em / usr (como qualquer binários do X Window) não devem estar em / lib. Apenas as bibliotecas compartilhadas necessárias para executar binários em / bin e / sbin podem estar aqui.
Nota2: Considerando que o objetivo principal de / lib é conter bibliotecas para ferramentas implementadas nos diretórios / bin & / sbin, as bibliotecas em / lib podem ser 32 bits 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.
Propósito: 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 bits ou 32 bits em sistemas que suportam vários formatos binários, mas requerem bibliotecas com o mesmo nome.
Nota: Neste 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.
Finalidade: / 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.
Note1: Diversos arquivos estáticos e subdiretórios específicos de aplicativos independentes de 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 nesse subdiretório.
Note2: Por exemplo, o subdiretório perl5 para Perl 5 módulos e bibliotecas.
Diretório - /usr/lib<qual>
Bibliotecas de formato alternativo (opcional).
Finalidade: /usr/lib<qual>
desempenha o mesmo papel que / usr / lib em um formato binário alternativo, exceto que os links simbólicos /usr/lib<qual>/sendmail
e /usr/lib<qual>/X11
não são necessários.
Nota: O caso em que / usr / lib e /usr/lib<qual>
são iguais (um é um link simbólico para o outro) esses arquivos e os subdiretórios por aplicativo existirão.
TLDR;
Em geral:
Se houver bibliotecas requeridas por um executável nos diretórios / bin ou / sbin, essas bibliotecas devem estar nos diretórios / lib *.
Se houver bibliotecas para programas e pacotes de uso, elas serão colocadas em / usr / lib / *. Se existem executáveis que são necessários por uma biblioteca particular, mas estes executáveis não devem ser chamados pelos usuários diretamente ou pelo root, eles vão em / usr / libexec.