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>/sendmail
e /usr/lib<qual>/X11
non 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.