J'essayais de l' chown
intérieur /opt
et pour une raison quelconque j'ai chown
sauté vers le parent et tout réprimé.
Quelqu'un peut-il suggérer pourquoi / comment cela pourrait se produire et comment éviter de le faire à l'avenir? C'est un peu inquiétant que l'exécution d'une commande dans un répertoire donné puisse effectivement sauter et l'exécuter dans le répertoire racine.
ubuntu: /opt > sudo chown -R root:www-data .*
chown: changing ownership of '../var/lib/lxcfs/proc/cpuinfo': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/meminfo': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/stat': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/uptime': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/diskstats': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/swaps': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/devices': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/blkio': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/hugetlb': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/rdma': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/pids': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/freezer': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/cpuset': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/memory': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/perf_event': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/cpu,cpuacct': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/net_cls,net_prio': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/name=systemd': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/unified': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs': No such file or directory
^C
:ubuntu: /opt >
permissions
chown
Duke Dougal
la source
la source
sudo chown -R root:wwwdata /opt
selon la boîte de dialogue --help ... peut-être que l'utilisation de ce canal a causé un problème ???.*
correspond..
(le répertoire parent, qui est/
) - voir Estcd
accéder au répertoire racine et omettre le leaing /, soit démarrer la commande avec(
, ce qui signifie que la commande ne sera pas exécutée tant que la correspondance n'aura pas été)
tapée, donnant la possibilité d'appuyer sur Ctrl-C et de renflouer d'une mauvaise erreur (commerm -rf /tmp/foo-install
et en appuyant sur Entrée au lieu de T).Réponses:
Cela est arrivé parce que vous avez utilisé:
quand vous auriez dû utiliser ceci à la place:
Tout d'abord,
-R
est récursif pour tous les répertoires sous le répertoire cible.En outre,
*
correspondra à tous les fichiers et répertoires du répertoire actuel. Ensuite,.*
correspondra à tous les fichiers et répertoires un niveau au - dessus du répertoire actuel.Pour éviter cela à l'avenir, vous pouvez utiliser la
ls
commande pour vérifier le chemin avant d'exécuter lachown
commande comme dans ces exemples:Une autre façon d'éviter cela est de toujours utiliser le chemin d'accès complet au répertoire dans lequel vous souhaitez exécuter une commande.
Voici un exemple:
Modifier:
Vous pouvez utiliser la commande suivante pour
chmod
tous les fichiers ou répertoires cachés directement sous/opt
(en supposant que le premier caractère après le.
qui les rend cachés soit une lettre, un chiffre, un tiret ou un trait de soulignement qui devrait être vrai pour la plupart des fichiers).Vous pouvez vérifier de quels fichiers il s'agit
chmod
en exécutant la commande suivante:La première partie de la commande :
for i in /opt/.[A-Za-z0-9-_]*
dit que, pour tous les résultats du glob/opt/.[A-Za-z0-9-_]*
affectez chaque résultat à la variable "i".Le glob ici dit que le premier caractère doit être
.
et que le caractère suivant[A-Za-z0-9-_]
doit être n'importe quel caractère qui est AZ ou az ou n'importe quel nombre 0-9 ou a-
ou a_
.Cela exclura les résultats
.
et..
qui représentent le répertoire en cours et le répertoire au-dessus du répertoire en cours et n'inclura que les fichiers et répertoires cachés.La deuxième partie de la commande :
do sudo chmod root:www-data "/opt/$i"
indique d'exécuter la commande pour toutes les variables qui correspondent à la valeur actuelle de$i
.La troisième partie de la commande :
done
dit que j'ai fini.De plus, vous avez utilisé l'
-R
option avecchmod
et l'-R
option est récursive et s'appliquera à tous les répertoires et fichiers.Lorsque vous n'utilisez que la
chmod
commande sans options, la commande ne s'applique qu'au fichier ou répertoire spécifique que vous lui avez donné et ne s'applique pas récursivement aux répertoires.la source
ls
sortie et est très lent tandis que la réponse est à utiliserfind
.**
, et même cela doit être explicitement activé. À mon humble avis, vous devriez être plus clair sur le rôle de-R
. (2) Il est conseillé aux utilisateurs d'éviter d'utiliser plain*
car il peut correspondre aux noms de fichiers commençant par-
, qui seront alors interprétés comme des options. devrait protéger contre cela, mais je ne suis pas sûr que toutes les commandes respectent cette convention. … (Suite)command
-- *
*
,./*
et ne/opt/*
parviennent même pas à trouver des «fichiers de points» (.*
) à moins que l'dotglob
option ne soit définie. Comme le disent Joshua Besneatte et ilkkachu ,chown -R /opt
et ilschown -R .
sont meilleurs. … (Suite)Le shell glob
.*
correspond..
(le répertoire parent) dans ce cas, malheureusement, c'est/
:Pour une discussion supplémentaire, voir:
la source
Vos problèmes sont venus parce que
.*
correspond à tout ce qui commence par un point. Le contexte est le répertoire courant, car cette expression n'inclut pas de chemin. Donc, s'il y a des fichiers ou des dossiers cachés comme.git
dans le répertoire actuel, vous les rapprocherez. Mais (comme vous le verrez en exécutantls -a
dans ce dossier), vous allez également faire correspondre.
et..
Et
..
, bien sûr, est le répertoire parent, doncchmod -R
ciblé récursivement tout dans le répertoire parent.la source
/opt/.*
n'aiderait pas,/opt/..
est le même..
qu'avec CWD =/opt
..
comme contexte, mais cela n'a pas fonctionné de cette façon en raison de la barre oblique manquante ...