chown -R user: user. * change les permissions en arrière: est-ce le bon comportement?


8

J'ai eu beaucoup de problèmes lors du changement de 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, j'ai réalisé que la propriété de a également /été modifiée, ce qui m'a bien sûr laissé un système cassé. Je pense que cela s'est produit à cause des ..matchs .*, mais cela me semble toujours bizarre.

La modification du répertoire parent est-elle le comportement correct ou dois-je déposer un rapport de bogue?

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


4
Il s'agit d'un comportement prévu comme ..match.*
Uwe Plonus

.*signifie tout fichier qui se termine par . *.signifie tout fichier qui commence par.
NickTux

4
@NikTh C'est l'inverse!
Uwe Plonus

Eh bien, une bonne pratique peut être de ne pas modifier /directement (création de dossiers, suppression, etc.) à moins que cela ne soit absolument nécessaire (ouvrez une question pour ce que vous voulez réaliser). Il est également dangereux d'utiliser des caractères génériques + des privilèges root car, le plus souvent, vous n'êtes pas sûr à 100% de ce qui est affecté par le caractère générique.
edwin

1
@LucaCerone Il est lié, chmodet ce chownsont des commandes similaires, toutes deux commencent par ch, contiennent un oet ont deux autres lettres similaires ( net m). </ literal> Sérieusement, ils sont tous deux de la forme: [cmd] -R [mode or user] [one or more files]. Certaines solutions proposées sur cette question fonctionnent également pour votre cas, par exemple celui de Sean Reifschneider (au milieu). Cette réponse s'applique également aux fichiers masqués uniquement en supprimant le modèle glob pour les fichiers non masqués.
Lekensteyn

Réponses:


5

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 à ce chown -R luca:luca /
qui fait que le chown fonctionne "à l'envers"

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


@Emmanuel: pourquoi voudriez-vous utiliser xargs et trouver quand l'option -R est suffisante?
janvier

@Emmanuel: merci! pouvez-vous développer un peu la recherche et les xargs?
lucacerone

@LucaCerone Je ne sais pas pourquoi vous avez accepté celui-ci, il modifie récursivement tous les fichiers /myfolder. La findcommande est superflue et rompt avec les noms de fichiers contenant des espaces. (si vous souhaitez modifier récursivement des fichiers, find /myfolder | xargs chown luca:lucaest similaire à chown -R luca:luca /myfolder).
Lekensteyn

Lekensteyn a raison j'ai oublié de grep ^.
Emmanuel

@Lekensteyn J'ai changé la recherche pour ne pas correspondre à l'espace
Emmanuel

4

Bien. La ligne de commande en tant que root est très puissante. Lisez certains de ces classiques. Et oui, l' .*appariement à ..est exactement ce qui est prévu. Le point n'est pas un caractère spécial. C'est une convention. Par convention, les fichiers qui commencent par un point sont masqués de la vue par défaut lors de l'inscription d'un répertoire - rien de moins et rien de plus. Par convention, l'inode menant au répertoire courant obtient le .nom et l'inode menant au répertoire parent obtient le ..nom.

Ce que vous auriez dû faire était

chown -R luca:luca /myfolder

Ai-je mentionné qu'il n'y a rien de spécial dans les noms de fichiers qui commencent par un point? Récursif chownne le pense pas.

À l'heure actuelle, vous pouvez peut-être récupérer certaines des 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" (comme echo .*).
  4. Ne fonctionne pas en tant que root.
  5. Il existe de nombreuses tâches qui peuvent être effectuées en toute sécurité à l'aide d'une interface graphique (votre problème est un exemple d'une telle tâche).
  6. Ai-je mentionné que vous devez éviter d'utiliser le compte root?

Je ne voulais pas changer la propriété de tous les fichiers du dossier ... seulement des fichiers cachés ..
lucacerone

2
OK, ma mauvaise alors. Dans ce cas, chown -R luca:luca /myfolder/.[^.]*je pense
janvier

2
echo .*est un bon moyen d'essayer l'extension. Il vous montrera exactement ce que voit le shell. ls .*peut être un peu plus déroutant, car il descendra dans les répertoires ( ls -d .*peut-être mieux, mais pourrait tout aussi bien utiliser echo .*)
Robie Basak

@RobieBasak bon point!
Janvier
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.