Diferença entre lib, lib32, lib64, libx32 e libexec


41

Meu sistema Ubuntu 13.04 de 64 bits possui os seguintes diretórios /:

lib
lib32
lib64
libx32
libexec

No /usrdiretório existe:

lib
lib32
libx32
libexec

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 estão em 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?


E BSD, Fedora, AIX e Solaris têm suas próprias reviravoltas nas estruturas de diretório.

Respostas:


39

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>/sendmaile /usr/lib<qual>/X11nã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.


Obrigado. Você poderia esclarecer, porém, quando uma biblioteca de 32 ou 64 bits será colocada na lib em oposição à pasta lib <qual> correspondente? Não entendi direito sua explicação.
precisa saber é o seguinte

O principal objetivo do / lib é conter bibliotecas para ferramentas que estão em / bin e / sbin. Dado que / lib pode conter uma mistura de bibliotecas de 32 e 64 bits. Vou adicionar este comentário à resposta também!
slm

Talvez coloque a seção TLDR no topo?
Kevinarpe

1
Qual é a diferença entre lib32 e libx32?
Mikko Rantalainen

2
libx32 é para x32 . Você pode usar o fileutilitário com as bibliotecas desses diretórios para ver a diferença.
elmicha
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.