Estaba tratando de hacerlo por chown
dentro /opt
y, por alguna razón, chown
salté a los padres y me di todo.
¿Alguien puede sugerir por qué / cómo podría suceder esto y cómo evitar hacerlo en el futuro? Es un poco preocupante que ejecutar un comando en un directorio dado pueda saltar y ejecutarlo en el directorio raíz.
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
Duque dugal
fuente
fuente
sudo chown -R root:wwwdata /opt
según el diálogo --help ... ¿quizás el uso de esa tubería causó algún problema?.*
coincide..
(el directorio padre, que es/
) - consulte ¿Los directorios padres chmod “.. chmod 777. * -R” (..)?cd
ir al directorio raíz y omitir leaing /, o iniciar el comando con(
, lo que significa que el comando no se ejecutará hasta que)
se escriba la coincidencia , dando la oportunidad de presionar Ctrl-C y rescatar de un error grave (comorm -rf /tmp/foo-install
presionar Enter en lugar de T).Respuestas:
Esto sucedió porque usaste:
cuando deberías haber usado esto en su lugar:
Primero,
-R
es recursivo para todos los directorios bajo el directorio de destino.Además,
*
coincidirá con todos los archivos y directorios del directorio actual. A continuación,.*
coincidirá con todos los archivos y directorios un nivel por encima del directorio actual.Para evitar esto en el futuro, puede usar el
ls
comando para verificar la ruta antes de ejecutar elchown
comando como en estos ejemplos:Otra forma de evitar esto es utilizar siempre la ruta completa al directorio en el que desea ejecutar un comando.
Aquí hay un ejemplo:
Editar:
Puede usar el siguiente comando para
chmod
todos los archivos o directorios ocultos directamente debajo/opt
(suponiendo que el primer carácter después del.
que los oculta es una letra, un número, un guión o un guión bajo que debería ser verdadero para la mayoría de los archivos).Puede verificar qué archivos esto
chmod
ejecutará ejecutando el siguiente comando:La primera parte del comando :
for i in /opt/.[A-Za-z0-9-_]*
dice que, para todos los resultados del globo,/opt/.[A-Za-z0-9-_]*
asigne cada resultado a la variable "i".El glob aquí dice que el primer carácter debe ser
.
y que el siguiente carácter[A-Za-z0-9-_]
debe ser cualquier carácter que sea AZ o az o cualquier número 0-9 o a-
o a_
.Esto excluirá los resultados
.
y..
que representan el directorio actual y el directorio sobre el directorio actual y solo incluirá archivos y directorios ocultos.La segunda parte del comando :
do sudo chmod root:www-data "/opt/$i"
dice ejecutar el comando para todas las variables que coinciden con el valor actual de$i
.La tercera parte del comando :
done
dice que he terminado.Además, usó la
-R
opción conchmod
y la-R
opción es recursiva y se aplicará a todos los directorios y archivos.Cuando solo usa el
chmod
comando sin opciones, el comando solo se aplicará al archivo o directorio específico que le proporcionó y no se aplicará recursivamente a los directorios.fuente
ls
salida y es muy lenta mientras se usa la respuestafind
.**
, e incluso eso tiene que habilitarse explícitamente. En mi humilde opinión, debe ser más claro sobre el papel de-R
. (2) Se recomienda a las personas que eviten el uso de plain*
porque puede coincidir con nombres de archivos que comienzan con-
, que luego se interpretarán como opciones. debería proteger contra eso, pero no estoy seguro de que todos los comandos honren esa convención. ... (Continúa)command
-- *
*
,./*
e incluso/opt/*
no pueden encontrar "archivos de puntos" (.*
) a menos que ladotglob
opción esté configurada. Como dicen Joshua Besneatte e ilkkachu ,chown -R /opt
ychown -R .
están mejor. ... (Continúa)El shell glob
.*
coincide..
(el directorio padre) en este caso, lamentablemente, eso es/
:Para una discusión adicional ver:
fuente
Sus problemas llegaron porque
.*
coincide con todo lo que comienza con un punto. El contexto es el directorio actual, ya que esta expresión no incluye una ruta. Entonces, si hay archivos o carpetas ocultos como.git
en el directorio actual, los emparejará. Pero (como verá al ejecutarls -a
en esa carpeta), también coincidirá.
y..
Y
..
, por supuesto, es el directorio principal, por lo que sechmod -R
dirigió recursivamente a todo el directorio principal.fuente
/opt/.*
no ayudaría,/opt/..
es la misma que..
con CWD =/opt
..
tenía la intención de usarse como contexto, pero no funcionó de esa manera debido a la barra oblicua perdida ...