A página de manual diz:
executar / pesquisar apenas se o arquivo for um diretório ou se já tiver permissão de execução para algum usuário ( X
)
O POSIX diz:
O símbolo de permissão X deve representar a parte de execução / pesquisa dos bits do modo de arquivo se o arquivo for um diretório ou se os bits atuais do modo de arquivo (não modificado) tiverem pelo menos um dos bits de execução (S_IXUSR, S_IXGRP ou S_IXOTH) definidos. Será ignorado se o arquivo não for um diretório e nenhum dos bits de execução estiver definido nos bits atuais do modo de arquivo.
Este é um sinalizador de permissão condicional: chmod
analisa o que está sendo processado no momento e, se é um diretório ou se possui algum bit de execução definido em suas permissões atuais (proprietário, grupo ou outro), ele age como se a permissão solicitada fosse x
, caso contrário, ele a ignora. A condição é verificada no momento em que chmod
a X
instrução específica é aplicada , para que você possa limpar os bits de execução na mesma execução a-x,a=rwX
para definir apenas o bit executável nos diretórios.
Você pode ver se um arquivo possui um bit de execução definido, observando a parte "access" da stat
saída do ou a primeira coluna de ls -l
. Os bits de execução são representados por x
. -rwxr-xr-x
é comum para executáveis e indica que o bit executável está definido para o proprietário, grupo e outros usuários; -rw-r--r--
é comum para outros arquivos e indica que o bit executável não está definido (mas o bit de leitura está definido para todos e o bit de gravação para o proprietário). Consulte Noções básicas sobre permissões UNIX e seus atributos, com muito mais detalhes.
Assim, no seu exemplo, u=rwX
define as permissões do proprietário para ler e gravar em todos os casos e, para diretórios e arquivos executáveis, execute; da mesma forma para group ( g=rX
) e other ( o=rX
), leia e execute para diretórios e arquivos executáveis.
A intenção desse operador é permitir que o usuário forneça chmod
uma variedade de arquivos e diretórios e obtenha as permissões de execução corretas (supondo que nenhum dos arquivos tenha um conjunto de bits de execução inválido). Evita ter que distinguir entre arquivos e diretórios (como no tradicional find . -type f -exec chmod 644 {} +
e nos find . -type d -exec chmod 755 {} +
comandos) e tenta lidar com os executáveis de maneira sensata.
(Note-se que o MacOSchmod
aparentemente suporta apenas X
para +
operações.)
---, ---, ---
um indoe sem um "conjunto de bits"?