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

38

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

lib
lib32
lib64
libx32
libexec

No diretório /usr , há:

lib
lib32
libx32
libexec

Isso parecia algo que poderia ser facilmente respondido com uma pesquisa, mas eu não encontrei nada online, além de que esses diretórios armazenam bibliotecas compartilhadas (exceto libexec). Mas quais bibliotecas compartilhadas vã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?

    
por gsingh2011 04.05.2013 / 06:56

1 resposta

37

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.

    
por 04.05.2013 / 09:33