Bonsoir à tous,
Je suis confronté à un problème avec tar lors de la restauration de fichiers archivés, en effet, les permissions des répertoires sont perdues à l'extraction de l'archive tar.
Je vais par la suite vous décrire mon problème par des exemples.
Pour commencer, mes versions logicielles :
$ uname -r
3.17.4-200.fc20.x86_64
$ tar --version
tar (GNU tar) 1.26
Je crée une arborescence de démo avec 2 répertoires et un fichier.
Les répertoires sont volontairement en permissions 550 et le fichier en 440 :
$ tree -p
.
└── [dr-xr-x---] dossier1
└── [dr-xr-x---] dossier2
└── [-r--r-----] fichier
2 directories, 1 file
Ensuite, on archive tout ça :
$ tar -cf archive.tar ./*
$ tar -vtf archive.tar
dr-xr-x--- utilisateur/utilisateur 0 2014-12-12 20:13 ./dossier1/
dr-xr-x--- utilisateur/utilisateur 0 2014-12-12 20:13 ./dossier1/dossier2/
-r--r----- utilisateur/utilisateur 149 2014-12-12 20:11 ./dossier1/dossier2/fichier
On constate que tout est bien comme il faut dans l'archive. (oui, mon nom d'utilisateur est "utilisateur", j'aime l'originalité)
On extrait l'archive complète :
$ tar -xf archive.tar
$ tree -p
.
├── [-rw-rw-r--] archive.tar
└── [dr-xr-x---] dossier1
└── [dr-xr-x---] dossier2
└── [-r--r-----] fichier
2 directories, 2 files
Jusqu'ici, tout va bien.
Maintenant, on recommence en restaurant uniquement le fichier "fichier", en conservant l'arborescence :
$ tar -xf archive.tar ./dossier1/dossier2/fichier
$ tree -p
.
├── [-rw-rw-r--] archive.tar
└── [drwxrwxr-x] dossier1
└── [drwxrwxr-x] dossier2
└── [-r--r-----] fichier
2 directories, 2 files
Là, ça ne va plus : les permissions du fichier sont bonnes, mais les répertoires sont dans les choux, ils sont écrits selon le umask et pas les permissions archivées.
On réessaye avec l'option -p de tar :
$ man tar | grep '\--same-permissions' -A2
-p, --same-permissions, --preserve-permissions
restaure toutes les informations de protection.
$ tar -xpf archive.tar ./dossier1/dossier2/fichier
$ tree -p
.
├── [-rw-rw-r--] archive.tar
└── [drwxrwxr-x] dossier1
└── [drwxrwxr-x] dossier2
└── [-r--r-----] fichier
2 directories, 2 files
Même résultat…
Par curiosité, on tente un rang au-dessus, sur "dossier2" :
$ tar -xpf archive.tar ./dossier1/dossier2
$ tree -p
.
├── [-rw-rw-r--] archive.tar
└── [drwxrwxr-x] dossier1
└── [dr-xr-x---] dossier2
└── [-r--r-----] fichier
2 directories, 2 files
On constate donc que tar, lorsque l'on extrait une archive complète, respecte les permissions archivées ; par contre, lorsque l'on spécifie un fichier ou un répertoire bien précis dans une archive à restaurer, tar respecte les permissions de ce fichier ou ce répertoire, mais pas celles de ses parents.
Je trouve ceci plutôt gênant, je me vois mal remettre les permissions à la main répertoire par répertoire ou devoir extraire toute une archive pour un seul fichier.
Est-ce un comportement normal ?
Comment y remédier ?
Merci par avance pour votre aide.
PS : j'obtiens le même comportement en super-utilisateur.