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

27

Não consegui fazer login na minha conta "admin" e Alt+ Ctrl+ F1mostrou que todos os meus arquivos pertencem ao meu usuário "padrão". Ímpar.

Então eu mudei cuidadosamente para /home/admine fiz uma

sudo chown -R admin:admin *

(e .*também).

Ótimo.

Então não consegui efetuar login como meu usuário "padrão" e, agora, todos os arquivos /home/standardpertencem a "admin".

Bem humorado. Por que isso está acontecendo?

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

fez a mesma coisa, mudou /home/admintanto quanto /home/standard.

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

DavidP
fonte
Talvez um seja um elo simbólico com o outro? o que ls -l /homediz?
steeldriver

Respostas:

35

Esse problema foi 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 .*, significa simplesmente que corresponde a qualquer arquivo oculto no diretório atual (indicando com .), o próprio diretório atual ( .), o diretório pai ( ..). Basta colocar qualquer coisa depois .( *significa 0 ou mais caracteres). Como resultado, o diretório pai e todos os diretórios filhos são chownacessados 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 reverter, você precisa chowndos diretórios afetados novamente.

Não tenho muita certeza de qual era seu plano, mas aqui estão algumas idéias:

  • Para chownqualquer diretório recursivamente (incluindo arquivos ocultos):

    sudo chown -R foo:foo /spam/egg/
    
  • Para chownapenas 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 chownapenas os arquivos não ocultos (sem o próprio diretório):

    sudo chown -R foo:foo egg/*
    
heemail
fonte
Obrigado, eu entendi agora ... duh; P Ainda não sei por que o proprietário mudou em primeiro lugar, a menos que tenha alguma relação com o Grub, que me deu um erro e travou o programa de instalação 14.04 em mim. Meu usuário padrão foi o primeiro que criei e depois o rebaixei e criei um novo.
DavidP
@DavidP Não estou claro o que você está recebendo em ..
heemayl
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).

Marty Fried
fonte