CHMOD - Aplicando permissões diferentes para arquivos x diretórios


9

Eu tenho tentado limpar as permissões em algumas caixas e vasculhado o homem chmod, bem como toda a documentação da Internet que eu manuseio sem sorte - então aqui vamos nós.

Basicamente, tenho um diretório com muitos subdiretórios e arquivos - e gostaria de definir as seguintes permissões:

Para diretórios: 770 (u + rwx, g + rwx, o-rwx)

Para arquivos: 660 (U + rw, g + rw, machado, o-rw)

Eu gostaria de tentar fazer isso com um único chmod recursivo, se possível - para evitar a recorrência em cada diretório e definir permissões arquivo a arquivo.

Eu imagino que deve haver uma maneira de fazer isso sem escrever um script de shell próprio - mas não consegui encontrar nada.

Eu aprecio sua ajuda!

Respostas:


10

Eu acho um script útil, pois geralmente é útil alterar as permissões de arquivo e diretório de uma só vez, e elas geralmente estão vinculadas. 770 e 660 para diretórios compartilhados em um servidor de arquivos, 755/644 para diretórios de servidores da Web, etc. Eu mantenho um script com o modo mais comumente usado para esse tipo de servidor na lixeira da raiz / e apenas localizo manualmente quando o comum modo não se aplica.

#!/bin/sh
# syntax: setperm.s destdir
#
if [ -z $1 ] ; then echo "Requires single argument: <directoryname>" ; exit 1 ;                                       fi

destdir=$1

dirmode=0770
filemode=0660

YN=no

printf "\nThis will RECURSIVELY change the permissions for this entire branch:\n                                      "
printf "\t$destdir\n"
printf "\tDirectories chmod = $dirmode\tFiles chmod = $filemode\n"
printf "Are you sure want to do this [$YN]? "

read YN

case $YN in
        [yY]|[yY][eE][sS])
        # change permissions on files and directories.
        find $destdir -type f -print0 | xargs -0 chmod $filemode $i
        find $destdir -type d -print0 | xargs -0 chmod $dirmode $ii ;;

        *) echo "\nBetter safe than sorry I always say.\n" ;;
esac

Uau! Era exatamente isso que eu estava procurando. Muito obrigado!
Skone

Ei, iPaulo - você pode por acaso explicar o "$ ii" na linha "encontre $ destdir -type d -print0 | xargs -0 chmod $ dirmode $ ii ;;". Não sei se entendi porque não é apenas "find $ destdir -type d -print0 | xargs -0 chmod $ dirmode $ i ;;" Obrigado!
Skone

20

Não há necessidade de scripts.

// Diretórios:

find . -type d -exec chmod XXX {} \;

// Arquivos:

find . -type f -exec chmod XXX {} \;

17

No seu caso, pode não ter que ser tão complicado quanto os outros pareceram ser (embora findseja realmente uma boa ferramenta para esse tipo de coisa em geral). A diferença entre os modos é o bit de execução. Se não houver arquivos com o bit de execução definido, você poderá fazê-lo em uma única chamada de chmod, exatamente como solicitado.

chmod -R u=rwX,g=rwX,o= FILE...

A chave aqui é a capital X, que a página de manual explica como

execute / pesquise apenas se o arquivo for um diretório ou já tiver permissão de execução para algum usuário.

Portanto, se seus arquivos ainda não tiverem o bit de execução definido, ele será definido apenas para diretórios.


Isso é ótimo, mas muito mais do que escrever 777. Existe uma abreviação para o -X?
Elliott B

6

Eu descobri que, pelo menos no meu caso de uso, usar rsyncpara copiar o diretório em si mesmo era muito mais rápido do que usar chmoddiretamente com uma lista de arquivos de find.

rsync -rpt --chmod=D770,F660 . .

Se você deseja adicionar um chownà mesma operação, rsyncfaça isso também com a --chown=user:groupopção


Whoah, isso é realmente muito mais rápido que o chmod -R.
Ep18

Muito mais rápido que o chmod. Existem desvantagens em usar o rsync dessa maneira? Eu tenho feito muito e tudo parece bem.
slothbear

1

Limpo e simples:

chmod 660 $(find . -type f)
chmod 770 $(find . -type d)

Abordagem muito elegante.
user5336

3
talvez, mas observe que isso só funciona se os arquivos não tiverem espaços. Uma abordagem mais "segura" éfind ... -exec chmod ... {} \;
isaaclw
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.