Como posso alterar todo o conteúdo dentro do diretório para qual propriedade e permissões de arquivo padrão existem?

5

Eu movi o conteúdo de outro disco para meu diretório pessoal, mas as permissões não são o que deveriam ser. Primeiro, alterei a propriedade inserindo:

  ~$ sudo chown -R USERME /home/USERHOME/

O que eu acho que funciona agora.

Mas agora eu queria simplesmente alterar todos os arquivos e subdiretórios para as permissões padrão, com arquivos sendo lidos + escritos e diretórios sendo r + w + x. Eu não encontrei uma maneira recursiva de lidar com isso. Eu corri:

  ~$ sudo chmod 755 -R /home/USERHOME/

Para tornar tudo disponível para mim. No entanto, os arquivos aparecem como executáveis, e isso não é o que eu quero. Há muito mais subdiretórios e arquivos, então estou procurando uma solução recursiva simples.

Basicamente, acho que estou procurando uma maneira recursiva de reaplicar o parâmetro umask padrão a uma pasta inteira com (eu acho) chmod.

Atualização:

Eu postei uma solução graças ao @SkyDan e "mudando o chmod para arquivos mas não diretórios "

    
por briank 10.06.2014 / 05:50

4 respostas

6

chmod pode fazer isso, você não precisa encontrar.

Use o modo simbólico e o capital X .

chmod -R u=rwX,og=rX directory

alternadamente para evitar a repetição e facilitar a edição. Podemos fazer com que a ação seja orientada, em vez de orientada para o papel.

chmod -R a=rX,u+w directory

A letra maiúscula X diz ao chmod para aplicar x aos diretórios, (e se já existir, por exemplo, go+X ).

Extrato manual:

O formato de um modo simbólico é [ugoa ...] [[+ - =] [perms ...] ...], em que perms é zero ou mais letras do conjunto rwxXst ou uma única letra do conjunto ugo. Múltiplos modos simbólicos podem ser dados, separados por vírgulas.

Uma combinação das letras ugoa controla qual acesso dos usuários ao arquivo será alterado: o usuário que o possui (u), outros usuários no grupo do arquivo (g), outros usuários que não estão no grupo do arquivo (o) , ou todos os usuários (a). Se nenhum destes é dado, o efeito é como se fosse dado, mas os bits que são definidos no umask não são afetados.

O operador + faz com que os bits de modo de arquivo selecionados sejam adicionados aos bits de modo de arquivo existentes de cada arquivo; - faz com que eles sejam removidos; e = faz com que eles sejam adicionados e faz com que bits não mencionados sejam removidos, exceto que os bits de ID de grupo e de usuário não mencionados de um diretório não são afetados.

As letras rwxXst selecionam bits de modo de arquivo para os usuários afetados: ler (r), escrever (w), executar (ou procurar diretórios) (x), executar / pesquisar somente se o arquivo for um diretório ou já tiver executado permissão para algum usuário (X), definir usuário ou ID de grupo em execução (s), sinalizador de exclusão restrito ou bit (t) fixo. Em vez de uma ou mais dessas letras, você pode especificar exatamente uma das letras ugo: as permissões concedidas ao usuário que possui o arquivo (u), as permissões concedidas a outros usuários que são membros do grupo do arquivo (g), e as permissões concedidas a usuários que não estão em nenhuma das duas categorias anteriores (o).

    
por 10.06.2014 / 14:09
2

Arquivos e diretórios geralmente precisam de bits de modo de arquivo diferentes, enquanto chmod -R geralmente aplica o mesmo modo a todas as entradas.

Para diferenciar arquivos e diretórios, find é um utilitário útil.

Altere o modo de arquivos regulares:

# Finds all regular files and passes them to chmod
find /path/to/dir -type f | xargs chmod u=rw,g=r,o=r

Altere o modo de diretórios:

# Directories require the execution bit to be accessible
find /path/to/dir -type d | xargs chmod u=rwx,g=rx,o=rx

O utilitário find é ele próprio recursivo, portanto, não é necessário usar chmod com o sinalizador -R .

    
por 10.06.2014 / 08:45
0

Se você deseja ter permissões separadas para cada arquivo / diretório, etc., é necessário encontrar primeiro esses itens e depois fazer algo neles Exemplo:

 find . -type d -name '*spec_dir*' | xargs chmod 755 

Então, acima, procurará todos os subdiretórios do atual e, em seguida, definirá as permissões como drwxr-xr-x para todas as encontradas, o que contém o nome spec_dir .

Se você precisar adicionar / remover permissões sem redefini-las, use o formato g +/- p. Exemplo, adicione apenas permissão de execução para outro grupo: o+x

chmod o+x file ou no contexto de comando acima ... | xargs chmod o+x

E o mesmo que você poderia fazer pelos seus arquivos find . -type f -name 'my_files*' ... etc.

    
por 10.06.2014 / 07:31
0

Atualizar

Graças à ajuda de @SkyDan e esta questão unix aqui Eu encontrei uma solução.

Eu fiz primeiro

~$ find . -type d -print0 | xargs -0 chmod 755

Para alterar todos os diretórios para leitura, gravação e executáveis para o usuário. Então eu fiz

~$ find . -type f -print0 | xargs -0 chmod 644

Para tornar todos os arquivos de leitura / gravação para o usuário.

    
por 10.06.2014 / 17:25

Tags