versione 1.03, 1 settembre 2022
![]() | ![]() |
Michele Liberi mail: mliberi@gmail.com cell: 3485211456 |
Il comando cpfl rientra nella nutrita categoria degli archiviatori, ovvero di quei comandi che codificano un insieme di files all'interno di un'unico file, come ad esempio: zip/unzip, tar, cpio, pax, backup/restore.
La domanda sorge spontanea: perché creare un nuovo archiviatore quando il panorama è già così ben fornito? Il motivo è semplice: nessuno degli archiviatori esistenti ha tutte le caratteristiche che io chiedo ad un archiviatore.
Con il comando cpfl ho cercato di concentrare in un unico comando le migliori caratteristiche degli archiviatori esistenti:
Le ACL (Access Control Lists) sono metadati associati ai files che, in aggiunta ai permessi standard, ampliano la possibilità di gestire i permessi di accesso. La ACL non sono standard UNIX, ogni sistema operativo le gestisce a modo suo. Questo significa che ACL salvate su un sistema operativo non possono essere ripristinate su un altro sistema operativo. Tuttavia è fondamentale salvare tali informazioni in fase di archiviazione nel caso, molto frequente, che il ripristino avvenga su una macchina dotata del medesimo sistema operativo. Tra gli archiviatori citati l'unico in grado di gestire le ACL è backup/restore.
La gestione degli hard links è un punto dolente per tutti gli archiviatori che ho citato, nessuno di essi li gestisce in modo soddisfacente.
Se con tar o cpio archivio due link allo stesso file da 1GB otterrò un archivio da 2GB, il che significa che di fatto lo stesso dato viene archiviato due volte, con significativa perdita di tempo e spazio, mentre zip/unzip ignorano completamente gli hard link e li trattano come files separati, sia in fase di archviazione che in fase di estrazione.
cpfl è in grado di gestire gli hard link in modo intelligente. In fase di archiviazione il dato viene scritto una sola volta, in fase di estrazione viene ricreato il link.
cpfl è in grado di archiviare sia il soft link, sia l'intera catena di eventuali altri soft links fino ad arrivare al file regolare finale.
zip/unzip ignora completamente i soft links e li tratta come se fossero files distinti, tar e cpio li gestiscono solo parzialmente.
Per me è importantissimo che il comando sia disponibile e funzioni nello stesso identico modo su tutti i sistemi operativi. Questo è sicuramente uno dei punti di forza di zip/unzip, ma altrettanto non si può dire di tar e cpio, né tantomeno di pax e backup/restore, che sono disponibili solo in ambiente AIX.
Da questo punto di vista il comando tar, benché molto conosciuto ed utilizzato, è particolarmente problematico, perché in realtà è un comando molto vecchio e poco standard. Esistono infatti parecchie versioni diverse del comando tar con opzioni diverse. Spesso accade che la stessa opzione ha significati diversi con diverse versioni del comando. Questo fatto rende difficoltoso utilizzarlo in ambiente eterogeneo e scrivere shell scripts che lo utilizzano che siano portabili e funzionino correttamente su sistemi operativi diversi.
cpfl è un archiviatore a flusso, nel senso che in fase di archiviazione scrive i dati su standard output, e in fase di estrazione legge da standard input.
Questa è la caratteristica principale dei comandi tar e cpio, e la mancanza di questa caratteristica è il principale difetto di zip/unzip.
Un archiviatore a flusso può inviare i dati direttamente ad un altro programma, oppure può scrivere direttamente su un socket (per inviare i dati via TCP/IP ad un altro computer), oppure su unità a nastro, senza passare necessariamente per un file regolare su disco. La mancanza di questa caratteristica implica che i dati potranno solo essere scritti su un file regolare, il che impone limitazioni sull'utilizzo del comando e sull'integrazione con altri comandi.
cpfl gestisce nomi di files qualunque lunghezza. Con tar e cpio invece c'è il problema che i nomi dei files sono limitati a 100 caratteri, limite che nei sistemi operativi moderni è stato ampiamente superato.
cpfl legge da standard input, in fase di archiviazione, la lista dei files da archiviare. Questa caratteristica lo rende facilmente integrabile con qualunque programma che possa generare una lista di nomi di files, come ad esempio il comando find. Solo alcune versioni del comando tar hanno questa capacità, e l'opzione per attivarla, anche quando c'è, non è standard.
cpfl è in grado di manipolare e modificare, in fase di ripristino, i nomi dei files archiviati, anche se l'archiviazione è avvenuta con pathnames assoluti.
cpfl gestisce, in fase di ripristino, la sovrascrittura dei files con stesso nome che dovessero essere eventualmente già presenti su disco. Tra gli archiviatori citati questa caratteristica è presente solo nel comando unzip.
La sovrascittura può essere:
cpfl gestisce nativamente la compressione dei dati in fase di archiviazione, e la decompressione in fase di estrazione. Questa è la caratteristica principale di zip/unzip e manca negli altri archiviatori.
A dire il vero un archiviatore a flusso non avrebbe strettamente bisogno di questa caratteristica in quanto può essere usato congiuntamente ad un programma che svolge questa funzione. Tipicamente il comando tar viene usato insieme a gzip per creare archivi compressi, ma tale informazione viene poi mantenuta solo nel nome del file. In fase di estrazione bisogna fare attenzione ed usare le opzioni giuste.
cpfl memorizza il tipo di compressione utilizzato direttamente nell'archivio. In fase di estrazione non sarà necessario specificare alcuna opzione.
cpfl permette di aggiungere files ad un archivio esistente.
L'unico altro archiviatore tra quelli citati con questa caratteristica è lo zip.
Tra i metadati di un file ci sono il proprietario ed il gruppo. Queste informazioni, tradizionalmente, vengono memorizzate in forma numerica, sotto forma di ID.
La corrispondenza tra ID e nome viene mantenuta dal sistema operativo, rispettivamente nei files /etc/passwd e /etc/group, ma cosa succede se sposto un file da una macchina ad un'altra?
Tutti gli archiviatori memorizzano solo gli ID, quindi dopo l'estrazione il nome del proprietario e del gruppo possono cambiare.
A differenza di tutti gli altri archiviatori cpfl memorizza sia gli ID che i nomi, ed in fase di estrazione è possibile scegliere se mantenere gli ID oppure i nomi.