Domanda

sto usando Perl Archive :: Tar modulo. Conserva i permessi dei file, ma non conserva il sticky bit. All'altra estremità dove ho estrarre l'archivio, tutti i bit appiccicose sono andati. Credo che il sistema operativo UNIX / LINUX memorizza questi bit appiccicose da qualche altra parte. Come posso fare il mio archivio preservare bit sticky anche?

Utilizzando l'opzione -p per tar conserva, ma come faccio a farlo utilizzando Archive :: tar ? Sto usando il modulo di Perl su entrambi i lati.

È stato utile?

Soluzione

Secondo la fonte raffinata, Archivio :: :: Tar strisce di file al largo delle alte bit dalla modalità. È possibile provare il seguente incantesimo magico all'inizio dello script (prima di tutto potrebbe aver fatto riferimento Archive :: Tar) e vedere se questo sovverte:

use Archive::Tar::Constant ();
BEGIN {
    local $SIG{__WARN__} = sub{};
    *Archive::Tar::Constant::STRIP_MODE = sub(){ sub {shift} };
}
...
use Archive::Tar;
...

Breve spiegazione: STRIP_MODE è una costante che contiene una subroutine che può essere passato alla modalità raw e restituisce la modalità che devono essere conservati. Normalmente è impostato su

sub { shift() & 0777 }

Poiché si tratta di una costante, importato da Archive :: :: Tar Constant in archivio :: :: Tar File e là utilizzato, qualunque esso è impostato sarà inline in archivio :: :: Tar file come si è compilato . Quindi, per cambiare, la costante deve essere modificato prima di essere inline, cioè prima Archive :: :: Tar File mai viene caricato.

NB. Perché cambiare una costante inlinable è incline ad errori (cambiarla dopo che è troppo tardi per avere alcun effetto), genera normalmente un severo avvertimento che non può essere disabilitato con mezzi usuali.

Altri suggerimenti

Non è sicuro, ma sul comando tar ufficiale, è necessario passare -p per rendere questo accada

Si potrebbe voler dare un'occhiata al Archive :: Tar documentazione per i dettagli. Da una breve occhiata, sembra che

$Archive::Tar::CHMOD = 1;

dovrebbe fare quello che vuoi, anche se la documentazione afferma che l'impostazione di cui sopra è il default. Può essere che Archive :: Tar spoglia i bit di modalità di ordine superiore, come lo sticky bit.

è l'archivio sia stato creato e si estrae con Archive :: Tar, o stai usando il programma tar di serie ad un'estremità o l'altro?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top