Chown recursivo começando com o diretório acima do diretório atual

8

Eu não consegui entrar na minha conta "admin" e Alt + Ctrl + F1 mostrou que todos os meus arquivos eram de propriedade da minha "Usuário comum. Ímpar.

Então eu cuidadosamente mudei para /home/admin e fiz um

sudo chown -R admin:admin *

(e .* também).

Ótimo.

Então eu não consegui logar como meu usuário "padrão" e todos os arquivos em /home/standard agora eram de propriedade de "admin".

Muito bem humorado. Por que isso está acontecendo?

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

fez a mesma coisa, alterou /home/admin bem como /home/standard .

Estou mais confuso do que o habitual porque tentei atualizar para o 15.04 e isso praticamente destruiu meu computador, então estou colocando as coisas de volta em 14.04, por favor, seja paciente comigo.

    
por DavidP 03.06.2015 / 00:12

2 respostas

12

Esse problema é causado porque você executou:

sudo chown -R admin:admin .*

Sabemos que . indica o diretório atual e .. indica o diretório pai. Quando você executa o comando com .* , significa simplesmente que corresponde a qualquer arquivo oculto no diretório atual (informando com . ), o próprio diretório atual ( . ), o diretório pai ( .. ). Basta colocar qualquer coisa depois de . ( * significa 0 ou mais caracteres). Como resultado, o diretório pai junto com todos os diretórios filhos obtém chown -ed para admin:admin .

Veja este teste:

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 voltar, você precisa chown dos diretórios afetados novamente.

Eu não tenho certeza qual foi seu plano, mas aqui estão algumas idéias:

  • Para chown de qualquer diretório recursivamente (incluindo arquivos ocultos):

    sudo chown -R foo:foo /spam/egg/
    
  • Para chown apenas os arquivos (incluindo arquivos ocultos) dentro desse diretório (não o próprio diretório):

    (shopt -s dotglob && sudo chown -R foo:foo egg/*)
    
  • Para chown apenas os arquivos não ocultos (sem o próprio diretório):

    sudo chown -R foo:foo egg/*
    
por heemayl 03.06.2015 / 03:46
3

Eu acho que é o parâmetro ". *" para arquivos; que corresponde a tudo que começa com ".", incluindo o "." e os arquivos "..". O ".." é o diretório pai, que inclui tudo sob ele.

A melhor maneira é fazer backup de uma pasta e especificar a pasta real que você deseja alterar (/ home / admin).

    
por Marty Fried 03.06.2015 / 02:45