
Meu sistema Ubuntu 13.04 de 64 bits possui os seguintes diretórios em /
:
lib
lib32
lib64
libx32
libexec
No /usr
diretório há:
lib
lib32
libx32
libexec
Isso parecia algo que poderia ser facilmente respondido com uma pesquisa, mas não encontrei nada online, exceto que esses diretórios armazenam bibliotecas compartilhadas (exceto libexec). Mas quais bibliotecas compartilhadas vão para quais pastas (além de 32 bits na lib32 e 64 bits na lib64)? Alguém poderia explicar a diferença entre todos esses diretórios?
Responder1
Ah, sim, esta é uma parte muito confusa se você já lida com Unixes há algum tempo. Existe um padrão que a maioria dos Unixes “tentam” seguir chamadoFHS - Padrão de Hierarquia do Sistema de Arquivos.
Dado que uso principalmente distros baseadas em Red Hat, estou mais familiarizado comsua opinião sobre a ESFpara distribuições Fedora, CentOS e RHEL Linux. Mas eu também usei distros 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 vamos às suas perguntas. eu daria uma olhada noDocumento ESF, que rege vagamente essas estruturas de diretório. Em geral:
Diretório -/lib
Contém bibliotecas compartilhadas essenciais e módulos de kernel.
Propósito: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, ou seja. por binários em /bin e /sbin.
Nota 1:Bibliotecas compartilhadas que são necessárias apenas para binários em /usr (como qualquer binário 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.
Nota 2:Dado que o objetivo principal de /lib é conter bibliotecas para ferramentas implantadas nos diretórios /bin e /sbin, as bibliotecas em /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.
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 ou 32 bits em sistemas que suportam vários formatos binários, mas requerem bibliotecas com o mesmo nome.
Observação: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.
Propósito:/usr/lib inclui arquivos-objeto, bibliotecas e binários internos que não se destinam a serem executados diretamente por usuários ou scripts de shell.
Nota 1: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.
Nota 2:Por exemplo, o subdiretório perl5 para módulos e bibliotecas Perl 5.
Diretório -/usr/lib<qual>
Bibliotecas de formatos alternativos (opcional).
Propósito: /usr/lib<qual>
executa a mesma função que /usr/lib para 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.
Observação:No 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 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 vão em /usr/lib/*. Se houver executáveis que são necessários para uma biblioteca específica, mas esses executáveis não devem ser chamados diretamente pelos usuários ou pelo root, eles vão em /usr/libexec.