Chown recursivo que comienza con el directorio sobre el directorio actual

27

No pude iniciar sesión en mi cuenta "admin" y Alt+ Ctrl+ F1mostró que todos mis archivos eran propiedad de mi usuario "estándar". Impar.

Así que cuidadosamente cambié /home/admine hice un

sudo chown -R admin:admin *

(y .*también)

Excelente.

Entonces no pude iniciar sesión como mi usuario "estándar" y resulta que todos los archivos /home/standardahora eran propiedad de "admin".

Bastante chistoso ¿Por qué está pasando esto?

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

hizo lo mismo, cambió /home/admintan bien como /home/standard.

Estoy más confundido de lo normal porque intenté actualizar a 15.04 y eso arruinó mi computadora, así que estoy volviendo a poner las cosas en 14.04, por favor sea paciente conmigo.

DavidP
fuente
¿Quizás uno es un enlace simbólico con el otro? que ls -l /homedice
steeldriver

Respuestas:

35

Este problema se debe a que ha ejecutado:

sudo chown -R admin:admin .*

Sabemos que .indica el directorio actual e ..indica el directorio padre. Cuando ejecuta el comando con .*, simplemente significa que coincide con cualquier archivo oculto en el directorio actual (indicando con .), el directorio actual en sí ( .), el directorio padre ( ..). Simplemente ponga cualquier cosa después .( *significa 0 o más caracteres). Como resultado, el directorio padre, junto con todos de la misma niño directorios obtener chown-ed a admin:admin.

Mira esta prueba:

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

Para volver atrás, necesita volver a chownlos directorios afectados.

No estoy realmente seguro de cuál era su plan, pero aquí hay algunas ideas:

  • A chowncualquier directorio de forma recursiva (incluidos los archivos ocultos):

    sudo chown -R foo:foo /spam/egg/
    
  • Para chownsólo los archivos (incluyendo archivos ocultos) dentro de ese directorio (no el propio directorio):

    (shopt -s dotglob && sudo chown -R foo:foo egg/*)
    
  • Para chownsólo los archivos no oculta (sin el directorio en sí mismo):

    sudo chown -R foo:foo egg/*
    
heemayl
fuente
Gracias, lo entiendo ahora ... duh; P Todavía no sé por qué el propietario cambió en primer lugar a menos que estuviera relacionado de alguna manera con Grub que me dio un error y bloqueó el programa de instalación 14.04. Mi usuario estándar fue el primero que creé y luego lo degradé y creé uno nuevo.
DavidP
@DavidP No tengo claro a qué te refieres ...
heemayl
3

Creo que es el parámetro ". *" Para archivos; que coincide con todo lo que comienza con ".", incluido el "." y los archivos "..". El ".." es el directorio principal, que incluye todo lo que se encuentra debajo.

La mejor manera es hacer una copia de seguridad de una carpeta y especificar la carpeta real que desea cambiar (/ home / admin).

Marty Fried
fuente