chown -R user: user. * cambia los permisos al revés: ¿es este el comportamiento correcto?


8

Me metí en muchos problemas al cambiar el permiso de una carpeta que myfolderreside en /. Emití el comando

sudo chown -R luca:luca /myfolder/.*

Mi intención era cambiar la propiedad de todos los archivos ocultos /myfolder.

Desafortunadamente, me di cuenta de que también /se cambió la propiedad de , lo que, por supuesto, me dejó con un sistema roto. Creo que esto sucedió porque ..coincide .*, pero todavía me parece extraño.

¿Cambiar el directorio principal es el comportamiento correcto o debo presentar un informe de error?

Si fue mi error al usar chown, ¿cuáles son las mejores prácticas para evitar cambiar la propiedad de las carpetas y archivos del sistema?


44
Este es el comportamiento previsto como ..partidos.*
Uwe Plonus

.*significa cualquier archivo que termina con . *.significa cualquier archivo que comienza con.
NickTux

44
@NikTh ¡Al revés!
Uwe Plonus

Bueno, una práctica recomendada podría ser no modificar /directamente (crear carpetas, eliminar, etc.) a menos que sea completamente necesario (abra una pregunta para lo que desea lograr). También es peligroso usar comodines + privilegios de root porque, la mayoría de las veces, no está 100% seguro de lo que ha afectado el comodín.
edwin

1
@LucaCerone Está relacionado, chmody chownson comandos similares, ambos comienzan con ch, contiene una oy tienen otras dos letras similares ( ny m). </ literal> En serio, los dos son de la forma: [cmd] -R [mode or user] [one or more files]. Algunas soluciones ofrecidas en esa pregunta también funcionan para su caso, por ejemplo, esta de Sean Reifschneider (en el medio). Esta respuesta también se aplica a los archivos ocultos solo eliminando el patrón global para archivos no ocultos.
Lekensteyn

Respuestas:


5

Recuerde que el shell expande (interpreta) la línea de comando antes de ejecutarla

sudo chown -R luca:luca /myfolder/.*

se interpreta primero como:

sudo chown -R luca:luca /myfolder/.  /myfolder/.. /myfolder/.adobe  /myfolder/.bash_history

tenga /myfolder/..en cuenta la en su línea de comando

chown -R luca:luca /myfolder/..es equivalente a chown -R luca:luca /
eso hace que el chown funcione "hacia atrás"

Úselo echo /myfolder/.*cuando use "*" para verificar.


@Emmanuel: ¿por qué usarías xargs y buscarías si la opción -R es suficiente?
enero

@ Emmanuel: gracias! ¿Puedes ampliar un poco sobre el hallazgo y xargs?
lucacerone

@LucaCerone No estoy seguro de por qué aceptaste este, recursivamente cambia todos los archivos /myfolder. El findcomando es superfluo y se rompe con nombres de archivos que contienen espacios en blanco. (si desea cambiar archivos de forma recursiva, find /myfolder | xargs chown luca:lucaes similar a chown -R luca:luca /myfolder).
Lekensteyn

Lekensteyn tiene razón, olvidé grep ^.
Emmanuel

@Lekensteyn Cambié el hallazgo para que no coincida con el espacio
Emmanuel

4

Bien. La línea de comando como root es muy poderosa. Lee algunos de estos clásicos. Y sí, .*coincidir con ..es exactamente lo que se pretende. Dot no es un personaje especial. Es una convención. Por convención, los archivos que comienzan con un punto están ocultos de la vista predeterminada cuando se enumera un directorio, nada menos y nada más. Por convención, el inodo que conduce al directorio actual obtiene el .nombre y el inodo que conduce al directorio principal obtiene el ..nombre.

Lo que deberías haber hecho fue

chown -R luca:luca /myfolder

¿Mencioné que no hay nada especial en los nombres de archivo que comienzan con un punto? Recursivo chownno lo cree así.

En este momento, es posible que pueda rescatar parte de la funcionalidad cambiando la propiedad nuevamente a la raíz. Sin embargo, a la larga, probablemente tendrá que reinstalar el sistema.

Como regla general:

  1. Evita trabajar como root.
  2. Si trabaja como root, lea cada comando dos veces antes de presionar Enter.
  3. Si no está seguro acerca de la expansión, pruébelo primero con un comando "seguro" (como echo .*).
  4. No trabajes como root.
  5. Hay muchas tareas que se pueden realizar de forma segura utilizando una interfaz gráfica (su problema es un ejemplo de dicha tarea).
  6. ¿Mencioné que debería evitar usar la cuenta raíz?

No quería cambiar la propiedad de todos los archivos de la carpeta ... solo de los archivos ocultos ...
lucacerone 05 de

2
OK, mi mal entonces. En ese caso, chown -R luca:luca /myfolder/.[^.]*creo
enero

2
echo .*Es una buena forma de probar la expansión. Te mostrará exactamente lo que ve el caparazón. ls .*puede ser un poco más confuso, ya que bajará directorios ( ls -d .*podría ser mejor, pero también podría usar echo .*)
Robie Basak

@RobieBasak buen punto!
enero
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.