Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

chown -R

2 réponses
Avatar
Remi Moyen
Salut,

Dans la série "y'a deux sortes d'administrateurs, ceux qui ont fait une
connerie sous root, et ceux qui vont la faire", je suis passé très près de
la première catégorie (quoique, j'y ai déjà mis les pieds une ou deux
fois)...

Sur un système Linux (Debian) nouvellement installé (avec donc encore que
le compte root), je crée un compte utilisateur, et je copie dans le
/home/toto quelques fichiers de config que j'avais ailleurs et que je
voulais récuperer. Comme c'est root qui a fait la copie, ils appartiennent
donc à root:root. Je me dis rusément qu'il faut que je change ça, et comme
y'avait des sous-répertoires, et que tout ça était en .quelque-chose, ben
je tape la commande qu'il fallait pas :
chown -R toto:users .*

Fallait pas, parce que visiblement, il a aussi changé les appartenances de
.. ! Et pire encore, il a aussi changé celles de /home/titi, que j'avais
créé juste avant ! Plutôt stressé à l'idée d'avoir foutu en l'air tous les
droits de tous les fichiers, je me dis qu'il a du suivre bêtement les
chemins, à cause du -R. Or je constate que les dégats n'ont pas dépassé
/home.

Pourquoi donc ?

D'après ce que je comprends, il a du appliquer le chown sur le répertoire
courant (normal), puis sur le répertoire .., donc sur /home. Et à cause du
-R, il a refait ça depuis /home. Donc sur /home/titi. Mais pourquoi, à ce
moment là, il ne l'a pas appliqué sur .. (donc sur /, et partout avec le
-R) ?
--
Rémi Moyen
"Malgré les apparences, le temps est très varié à Nancy :
pluie, nuages, neige, brouillard, grêle, ..."

2 réponses

Avatar
Erwan David
Remi Moyen écrivait :

D'après ce que je comprends, il a du appliquer le chown sur le répertoire
courant (normal), puis sur le répertoire .., donc sur /home. Et à cause du
-R, il a refait ça depuis /home. Donc sur /home/titi. Mais pourquoi, à ce
moment là, il ne l'a pas appliqué sur .. (donc sur /, et partout avec le
-R) ?


c'est que l'expansion n'est pas faite au même endroit.

chown -R n'ira *jamais* dans .. sinon on aurait des boucles infinies,
il descend l'arbre.

Par contre c'est ton shell qui a expansé le .*, donc il ma mis .,
.. et le reste.

Donc chown a fait une descente d'arbre partant de .. et changé les
propriétaires de tout l'arbre situé sous ..

Dans ton cas la bonne commande aurait été chown -R .


--
Monde de merde

Avatar
Emmanuel Florac
Dans article
anapl.se>, disait...

D'après ce que je comprends, il a du appliquer le chown sur le répertoire
courant (normal), puis sur le répertoire .., donc sur /home. Et à cause du
-R, il a refait ça depuis /home. Donc sur /home/titi. Mais pourquoi, à ce
moment là, il ne l'a pas appliqué sur .. (donc sur /, et partout avec le
-R) ?


Parce que c'est le shell qui interprète les caractères spéciaux comme *
(c'est une des grandes erreurs historiques des concepteurs d'Unix,
d'ailleurs). Le shell a donc fait la chose suivante : il a établi la
liste correspondant à .*, soit ".. . titi/ toto/", puis il a exécuté la
commande chown -R toto.toto avec la liste en paramètre.

--
Quis, quid, ubi, quibus auxiliis, cur, quomodo, quando?