J'ai eu beaucoup de problèmes lors du changement de l'autorisation d'un dossier myfolder
ré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?
permissions
filesystem
chown
hidden-files
lucacerone
la source
la source
..
match.*
.*
signifie tout fichier qui se termine par.
*.
signifie tout fichier qui commence par.
/
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.chmod
et cechown
sont des commandes similaires, toutes deux commencent parch
, contiennent uno
et ont deux autres lettres similaires (n
etm
). </ 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.Réponses:
N'oubliez pas que la ligne de commande est développée (interprétée) par le shell avant d'être exécutée
est d'abord interprété comme:
notez le
/myfolder/..
dans votre ligne de commandechown -R luca:luca /myfolder/..
est équivalent à cechown -R luca:luca /
qui fait que le chown fonctionne "à l'envers"
À utiliser
echo /myfolder/.*
lorsque vous utilisez "*" pour vérifier.la source
/myfolder
. Lafind
commande 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:luca
est similaire àchown -R luca:luca /myfolder
).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
Ai-je mentionné qu'il n'y a rien de spécial dans les noms de fichiers qui commencent par un point? Récursif
chown
ne 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:
echo .*
).la source
chown -R luca:luca /myfolder/.[^.]*
je penseecho .*
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 utiliserecho .*
)