chown -R user: user. * altera as permissões para trás: esse é o comportamento correto?

8

Eu tive muitos problemas ao alterar a permissão de uma pasta que myfolderreside /. Eu emiti o comando

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

Minha intenção era mudar a propriedade de todos os arquivos ocultos /myfolder.

Infelizmente, percebi que também a propriedade de /foi alterada, o que obviamente me deixou com um sistema quebrado. Eu acho que isso aconteceu porque ..combina .*, mas ainda parece estranho para mim.

Alterar o diretório pai é o comportamento correto ou devo registrar um relatório de erro?

Se foi meu erro usar o chown, quais são as práticas recomendadas para impedir a alteração da propriedade de pastas e arquivos do sistema?

lucacerona
fonte
4
Este é o comportamento pretendido como ..jogos.*
Uwe Plonus
.*significa qualquer arquivo que termine com . *.significa qualquer arquivo que comece com.
NickTux
4
@ Nikik É o contrário!
Uwe Plonus
Bem, uma prática recomendada pode não ser a modificação /direta (criação de pastas, remoção, etc.), a menos que seja absolutamente necessário (abra uma pergunta para o que você queria alcançar). Também é perigoso o uso de curingas + privilégios de root, porque, na maioria das vezes, você não tem 100% de certeza do que foi afetado pelo curinga.
21413 Edwin
1
@LucaCerone Ele está relacionado chmode chownsão comandos semelhantes, ambos iniciam com ch, contém um oe têm duas outras letras semelhantes ( ne m). </ literal> Sério, ambos são da forma: [cmd] -R [mode or user] [one or more files]. Algumas soluções oferecidas nessa questão também funcionam para o seu caso, por exemplo, uma de Sean Reifschneider (no meio). Esta resposta também é aplicável a arquivos ocultos apenas removendo o padrão glob para arquivos não ocultos.
Lekensteyn

Respostas:

5

Lembre-se de que a linha de comando é expandida (interpretada) pelo shell antes de ser executada

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

é interpretado primeiro como:

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

observe o /myfolder/..na sua linha de comando

chown -R luca:luca /myfolder/..é equivalente ao chown -R luca:luca /
que faz o chown correr "para trás"

Use echo /myfolder/.*quando você usar "*" para verificar.

Emmanuel
fonte
@Emmanuel: por que você usaria o xargs e descobriria quando a opção -R é suficiente?
janeiro
@Emmanuel: obrigado! você pode expandir um pouco sobre o find e xargs?
Lucacerone
@LucaCerone Não sei por que você aceitou este, ele altera recursivamente todos os arquivos /myfolder. O findcomando é supérfluo e quebra com nomes de arquivos que contêm espaço em branco. (se você deseja alterar recursivamente os arquivos, find /myfolder | xargs chown luca:lucaé semelhante a chown -R luca:luca /myfolder).
Lekensteyn
Lekensteyn está certo, eu esqueci de grep ^.
Emmanuel
@Lekensteyn Mudei o find para não coincidir com o espaço
Emmanuel
4

Bem. A linha de comando como root é muito poderosa. Leia alguns desses clássicos. E sim, .*combinar com ..é exatamente o que se destina. Dot não é um caractere especial. É uma convenção. Por convenção, os arquivos que começam com um ponto são ocultados da exibição padrão ao listar um diretório - nada menos e nada mais. Por convenção, o inode que leva ao diretório atual obtém o .nome e o inode que leva ao diretório pai obtém o ..nome.

O que você deveria ter feito foi

chown -R luca:luca /myfolder

Eu mencionei que não há nada de especial nos nomes dos arquivos que começam com um ponto? Recursivo chownnão pensa assim.

No momento, você poderá recuperar algumas das funcionalidades alterando a propriedade de volta à raiz. A longo prazo, você provavelmente terá que reinstalar o sistema.

Como uma regra geral:

  1. Evite trabalhar como root.
  2. Se você trabalha como root, leia cada comando duas vezes antes de pressionar Enter.
  3. Se você não tiver certeza sobre a expansão, tente primeiro com um comando "seguro" (como echo .*).
  4. Não trabalhe como root.
  5. Há muitas tarefas que podem ser executadas com segurança usando uma interface gráfica (seu problema é um exemplo dessa tarefa).
  6. Eu mencionei que você deve evitar o uso da conta root?
janeiro
fonte
Eu não queria alterar a propriedade de todos os arquivos na pasta ... apenas os arquivos ocultos ..
lucacerone
2
OK, meu mal então. Nesse caso, chown -R luca:luca /myfolder/.[^.]*eu acho
janeiro
2
echo .*é uma boa maneira de experimentar a expansão. Isso mostrará exatamente o que o shell vê. ls .*pode ser um pouco mais confuso, como ele vai descer diretórios ( ls -d .*poderia ser melhor, mas pode muito bem usar echo .*)
Robie Basak
@RobieBasak good point!
janeiro