web-dev-qa-db-fra.com

chown -R utilisateur: utilisateur. * modifie les autorisations en arrière: est-ce le comportement correct?

J'ai eu beaucoup de mal à changer l'autorisation d'un dossier myfolderrésidant dans /. J'ai émis la commande

Sudo chown -R luca:luca /myfolder/.*

Mon intention était de changer la propriété de tous les fichiers cachés dans /myfolder.

Malheureusement, je me suis rendu compte que la propriété de / avait également été modifiée, ce qui m'a bien sûr laissé un système défaillant. Je pense que cela est dû au fait que .. correspond à .*, mais me semble toujours étrange.

Le comportement correct du répertoire parent est-il correct ou dois-je enregistrer un rapport de bogue?

Si c'était mon erreur d'utiliser chown, quelles sont les meilleures pratiques à suivre pour éviter de changer la propriété des dossiers et des fichiers système?

8
lucacerone

N'oubliez pas que la ligne de commande est développée (interprétée) par le shell avant d'être exécutée

Sudo chown -R luca:luca /myfolder/.*

est d'abord interprété comme:

Sudo chown -R luca:luca /myfolder/.  /myfolder/.. /myfolder/.Adobe  /myfolder/.bash_history

notez le /myfolder/.. dans votre ligne de commande

chown -R luca:luca /myfolder/.. est équivalent à chown -R luca:luca /
qui fait courir le chown "à l'envers"

Utilisez echo /myfolder/.* lorsque vous utilisez "*" pour vérifier.

5
Emmanuel

Bien. La ligne de commande en tant que root est très puissante. Lire certains de ceux-ci classiques. Et oui, .* correspondant à .. correspond exactement à ce qui est prévu. Dot n'est pas un caractère spécial. C'est une convention. Par convention, les fichiers commençant par un point sont masqués de la vue par défaut lors de la création d'un répertoire - rien de moins, rien de plus. Par convention, l'inode menant au répertoire en cours obtient le nom . et l'inode menant au répertoire parent obtient le nom ...

Ce que tu aurais dû faire était

chown -R luca:luca /myfolder

Ai-je mentionné qu'il n'y a rien de spécial à propos des noms de fichiers commençant par un point? Recursive chown ne le pense pas.

À l’heure actuelle, vous pourrez peut-être récupérer certaines fonctionnalités en redéfinissant la propriété sur root. À long terme, vous devrez probablement réinstaller le système.

En règle générale:

  1. Évitez de travailler en tant que root.
  2. Si vous travaillez en tant que root, lisez chaque commande deux fois avant d'appuyer sur Entrée.
  3. Si vous n'êtes pas sûr de l'expansion, essayez-le d'abord avec une commande "sûre" (telle que echo .*).
  4. Ne travaillez pas en tant que root.
  5. De nombreuses tâches peuvent être effectuées en toute sécurité à l’aide d’une interface graphique (votre problème en est un exemple).
  6. Ai-je mentionné que vous devriez éviter d'utiliser le compte root?
4
January