Differenza tra lib, lib32, lib64, libx32 e libexec


41

Il mio sistema Ubuntu 13.04 a 64 bit ha le seguenti directory in /:

lib
lib32
lib64
libx32
libexec

Nella /usrdirectory c'è:

lib
lib32
libx32
libexec

Sembrava qualcosa a cui si potesse facilmente rispondere con una ricerca, ma non ho trovato nulla online, a parte il fatto che queste directory memorizzano librerie condivise (tranne libexec). Ma quali librerie condivise vanno in quali cartelle (diverse da 32 bit in lib32 e 64 bit in lib64)? Qualcuno potrebbe spiegare la differenza tra tutte queste directory?


E BSD, Fedora, AIX e Solaris hanno i loro colpi di scena nelle strutture delle directory.

Risposte:


39

Ah sì, questa è una parte molto confusa se hai a che fare con Unix per un certo periodo di tempo. Esiste uno standard che la maggior parte degli Unix "tenta" di seguire chiamato FHS - Filesystem Hierarchy Standard .

Dato che utilizzo principalmente distribuzioni basate su Red Hat, conosco meglio le loro interpretazioni su FHS per le distribuzioni Fedora, CentOS e RHEL Linux. Ma ho usato anche distribuzioni basate su Debian e BSD e non sono poi così diverse in termini di dove sono conservate le cose, per quanto riguarda il filesystem.

Ora alle tue domande. Vorrei dare un'occhiata al documento FHS , che governa vagamente queste strutture di directory. In generale:

Directory - /lib

Contiene librerie condivise essenziali e moduli del kernel.

Scopo: la directory / lib contiene le immagini della libreria condivisa necessarie per avviare il sistema ed eseguire i comandi nel filesystem di root, ad es. dai binari in / bin e / sbin.

Nota1: librerie condivise che sono necessarie solo per i binari in / usr (ad esempio eventuali binari X Window) non deve essere in / lib. Solo le librerie condivise necessarie per eseguire i binari in / bin e / sbin possono essere qui.

Nota2: dato che lo scopo principale di / lib è contenere librerie per gli strumenti distribuiti nelle directory / bin & / sbin, le librerie in / lib possono essere a 32 o 64 bit.

Ad esempio (sistema Fedora 14 a 64 bit)

$ 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

Ecco un campionamento dei file dal mio / 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

Directory - /lib<qual>

Librerie condivise essenziali di formato alternativo (facoltativo). Queste sarebbero le directory / lib32, / lib64, ecc.

Scopo: potrebbero esserci una o più varianti della directory / lib su sistemi che supportano più di un formato binario che richiede librerie separate. Questo è comunemente usato per il supporto a 64 o 32 bit su sistemi che supportano più formati binari, ma richiedono librerie con lo stesso nome.

Nota: in questo caso, / lib32 e / lib64 potrebbero essere le directory della libreria e / lib un collegamento simbolico a una di esse.

Directory - /usr/lib

Librerie per programmazione e pacchetti.

Scopo: / usr / lib include file oggetto, librerie e binari interni che non sono destinati ad essere eseguiti direttamente da utenti o script di shell.

Nota 1: I file statici e le sottodirectory specifiche per applicazioni indipendenti dall'architettura varie devono essere inseriti in / usr / share.

Le applicazioni possono utilizzare una singola sottodirectory in / usr / lib. Se un'applicazione utilizza una sottodirectory, tutti i dati dipendenti dall'architettura utilizzati esclusivamente dall'applicazione devono essere inseriti in tale sottodirectory.

Nota2: Ad esempio, la sottodirectory perl5 per moduli e librerie Perl 5.

Directory - /usr/lib<qual>

Librerie di formati alternativi (facoltativo).

Scopo: /usr/lib<qual> esegue lo stesso ruolo / usr / lib per un formato binario alternativo, salvo che i link simbolici /usr/lib<qual>/sendmaile /usr/lib<qual>/X11non sono richiesti.

Nota: il caso in cui / usr / lib e /usr/lib<qual>sono uguali (uno è un collegamento simbolico all'altro) esisteranno questi file e le sottodirectory per applicazione.

TLDR;

In generale:

Se ci sono librerie richieste da un eseguibile nelle directory / bin o / sbin, tali librerie dovrebbero andare nelle directory / lib *.

Se ci sono librerie per usare programmi e pacchetti, vanno in / usr / lib / *. Se ci sono eseguibili necessari per una particolare libreria, ma non si suppone che questi eseguibili vengano chiamati dagli utenti direttamente o da root, vanno in / usr / libexec.


Grazie. Potresti chiarire però quando una libreria a 32 o 64 bit verrà inserita in lib rispetto alla sua corrispondente cartella <qual>? Non ho capito bene la tua spiegazione.
gsingh2011,

Lo scopo principale di / lib è contenere librerie per strumenti che sono in / bin e / sbin. Dato che / lib può contenere un mix di librerie a 32 e 64 bit. Aggiungerò anche questo commento alla risposta!
slm

Forse mettere la sezione TLDR in alto?
Kevinevpe,

1
Qual è la differenza tra lib32 e libx32?
Mikko Rantalainen,

2
libx32 è per x32 . È possibile utilizzare l' fileutilità con le librerie in queste directory per vedere la differenza.
elmicha,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.