Eu tive muitos problemas ao alterar a permissão de uma pasta que myfolder
reside /
. 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?
permissions
filesystem
chown
hidden-files
lucacerona
fonte
fonte
..
jogos.*
.*
significa qualquer arquivo que termine com.
*.
significa qualquer arquivo que comece com.
/
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.chmod
echown
são comandos semelhantes, ambos iniciam comch
, contém umo
e têm duas outras letras semelhantes (n
em
). </ 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.Respostas:
Lembre-se de que a linha de comando é expandida (interpretada) pelo shell antes de ser executada
é interpretado primeiro como:
observe o
/myfolder/..
na sua linha de comandochown -R luca:luca /myfolder/..
é equivalente aochown -R luca:luca /
que faz o chown correr "para trás"
Use
echo /myfolder/.*
quando você usar "*" para verificar.fonte
/myfolder
. Ofind
comando é 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 achown -R luca:luca /myfolder
).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
Eu mencionei que não há nada de especial nos nomes dos arquivos que começam com um ponto? Recursivo
chown
nã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:
echo .*
).fonte
chown -R luca:luca /myfolder/.[^.]*
eu achoecho .*
é 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 usarecho .*
)