Defina rapidamente as permissões e a propriedade de compartilhamento de arquivos do Linux em um grande NAS

1

Eu tenho um cluster isolado de sistemas Linux, sistemas Windows e dispositivos, todos montando um conjunto de compartilhamentos remotos (via NFS e CIFS). O sistema operacional que compartilha os sistemas de arquivos é o Linux. Eu freqüentemente criar novos compartilhamentos remotos que também são compartilhados. Eu tenho um conjunto específico de requisitos para permissões e propriedade de arquivos que estou realizando atualmente com os seguintes comandos (em um pequeno script bash):

find -type d -exec chmod u=rwx {} \;
find -type d -exec chmod go=rx {} \;
find -type f -exec chmod u=rw {} \;
find -type f -exec chmod go=r {} \;
find . -exec chown nobody {} \;
find . -exec chgrp nogroup {} \;
find -name ".*" -exec chown nobody {} \;
find -name ".*" -exec chgrp nogroup {} \;

Isso leva uma eternidade em um sistema de arquivos grande. Eu estou procurando uma maneira de conseguir isso significativamente mais rápido.

Especificamente:

  1. Todos os arquivos e diretórios (incluindo arquivos '.' ocultos e diretórios) precisam ser de propriedade de 'nobody'
  2. Todos os arquivos e diretórios (incluindo arquivos '.' ocultos e diretórios) precisa ser grupo 'nogroup'
  3. Todos os arquivos precisam de direitos 'rw' para o proprietário e 'r' direitos para grupo e outro
  4. Todos os diretórios precisam de direitos 'rwx' para o proprietário e direitos 'rx' para grupo e outros
por MT. 09.08.2014 / 05:42

2 respostas

1

Tanto chown como chmod oferecem uma opção -R que torna a recursiva. Estes dois comandos fazem quase tudo o que você quer e são bastante rápidos:

chmod -R u=rwX,go=rX *
chown -R nobody:nogroup *

O modo u=rwX define o modo de usuário para ler e gravar e, com a condição de que o arquivo / diretório já tenha permissão de execução para alguém, eXecute. Assim, isso mantém a permissão de execução nos diretórios, mas não promove outros arquivos a serem executados, a menos que já tenham esse atributo. go=rX concede permissão de leitura em grupo e outra e, na mesma condição, permissão de execução.

O comando chown -R nobody:nogroup * mudará o proprietário para nobody e group para nogroup para todos os arquivos recursivamente.

Esses comandos funcionam em arquivos ocultos em todos os diretórios recorridos. O glob * não seleciona os arquivos ocultos no diretório atual. Isso pode ser solucionado (1) especificando-os explicitamente ou (2) definindo a opção dotglob do bash: shopt -s dotglob .

Remover permissão de execução

Se você tiver arquivos normais que precisam ter sua permissão de execução removida, aqui está um aumento de velocidade para isso:

find -type f -executable -exec chmod a-x {} +

Como o acima termina com + em vez de \; , o find colocará tantos nomes de arquivo na linha de comando chmod quanto possível. Isso reduz bastante o número de vezes que um processo precisa ser criado para executar chmod .

Além disso, a opção -executable reduz o número de nomes de arquivos processados estritamente para aqueles que precisam da permissão de execução removida.

    
por 09.08.2014 / 06:41
0

Uma coisa acelera imediatamente o processo, não usando -exec na localização, mas canalizando os nomes resultantes para xargs:

 find . -type d -print0 | xargs -0 chmod 777 

O exemplo acima é apenas um exemplo, -print0 passa corretamente aqueles arquivos desagradáveis com nomes de arquivos estranhos e os parâmetros -0 no comando xargs lêem esta saída corretamente.

De qualquer forma, a cadeia de comandos acima será chamada repetidamente apenas um chmod após o número máximo de argumentos ter sido fornecido pelo comando find com o último chmod contendo os argumentos restantes. Por não gerar um chmod para cada arquivo, você acaba economizando muito tempo.

    
por 09.08.2014 / 08:02