Chown récursif commençant par le répertoire au-dessus du répertoire actuel

27

Je n'ai pas pu me connecter à mon compte "admin" et Alt+ Ctrl+ a F1montré que tous mes fichiers appartenaient à mon utilisateur "standard". Impair.

Donc , j'ai soigneusement changé pour /home/adminet a fait un

sudo chown -R admin:admin *

(et .*aussi).

Génial.

Ensuite, je n'ai pas pu me connecter en tant qu'utilisateur "standard" et il s'avère que tous les fichiers en /home/standardétaient désormais la propriété de "admin".

Assez humoristique. Pourquoi cela arrive-t-il?

sudo chown -R standard:standard /home/standard/*

a fait la même chose, a changé /home/adminaussi bien /home/standard.

Je suis plus confus que d'habitude car j'ai essayé de passer à la version 15.04 et cela a pratiquement détruit mon ordinateur, donc je remets les choses à la version 14.04, soyez patient avec moi.

DavidP
la source
Peut-être que l'un est un lien symbolique avec l'autre? que ls -l /homedit-on?
steeldriver

Réponses:

35

Ce problème est dû au fait que vous avez exécuté:

sudo chown -R admin:admin .*

Nous savons que cela .indique le répertoire courant et ..indique le répertoire parent. Lorsque vous exécutez la commande avec .*, cela signifie simplement que correspond à n'importe quel fichier caché dans le répertoire actuel (en indiquant avec .), le répertoire actuel lui-même ( .), le répertoire parent ( ..). Mettez simplement quelque chose après .( *signifie 0 ou plusieurs caractères). En conséquence, le répertoire parent ainsi que tous les répertoires enfants sont chownrécupérés admin:admin.

Regardez ce test:

test$ ls -al
drwxrwxr-x 4 foo foo 4096 Jun  3 07:15 .
drwxrwxr-x 4 foo foo 4096 Jun  2 18:06 ..
drwxrwxr-x 2 foo foo 4096 Jun  3 07:15 egg
drwxrwxr-x 2 foo foo 4096 Jun  3 07:12 spam

$ sudo chown -R bar:bar spam/.*

test$ ls -al
drwxrwxr-x 4 bar  bar  4096 Jun  3 07:15 .
drwxrwxr-x 4 foo  foo  4096 Jun  2 18:06 ..
drwxrwxr-x 2 bar  bar  4096 Jun  3 07:15 egg
drwxrwxr-x 2 bar  bar  4096 Jun  3 07:12 spam

Pour revenir en arrière, vous devez à chownnouveau accéder aux répertoires concernés.

Je ne sais pas vraiment quel était votre plan, mais voici quelques idées:

  • Vers chownn'importe quel répertoire récursivement (y compris les fichiers cachés):

    sudo chown -R foo:foo /spam/egg/
    
  • Pour chownuniquement les fichiers (y compris les fichiers cachés) à l'intérieur de ce répertoire (pas le répertoire lui-même):

    (shopt -s dotglob && sudo chown -R foo:foo egg/*)
    
  • Pour chownles fichiers non cachés uniquement (sans le répertoire lui-même):

    sudo chown -R foo:foo egg/*
    
heemayl
la source
Merci, je comprends maintenant ... duh; P Je ne sais toujours pas pourquoi le propriétaire a changé en premier lieu à moins que cela ne soit lié à Grub qui me donne une erreur et plante le programme d'installation 14.04 sur moi. Mon utilisateur standard a été le premier que j'ai créé et j'ai ensuite rétrogradé celui-ci et créé un nouveau.
DavidP
@DavidP Je ne sais pas trop à quoi tu veux en venir ..
heemayl
3

Je pense que c'est le paramètre ". *" Pour les fichiers; qui correspond à tout ce qui commence par ".", y compris le "." et les fichiers "..". Le ".." est le répertoire parent, qui comprend tout ce qu'il contient.

La meilleure façon est de sauvegarder un dossier et de spécifier le dossier réel que vous souhaitez modifier (/ home / admin).

Marty Fried
la source