A página de manual diz:
execute/search only if the file is a directory or already has execute permission for some user (
X
)
POSIX diz:
The perm symbol X shall represent the execute/search portion of the file mode bits if the file is a directory or if the current (unmodified) file mode bits have at least one of the execute bits (S_IXUSR, S_IXGRP, or S_IXOTH) set. It shall be ignored if the file is not a directory and none of the execute bits are set in the current file mode bits.
Este é um sinalizador de permissão condicional: chmod
examina o que está processando atualmente e, se for um diretório, ou se tiver qualquer bit de execução definido em suas permissões atuais (proprietário, grupo ou outro), ele funcionará como se a permissão solicitada for x
, caso contrário, ela será ignorada. A condição é verificada no momento em que chmod
aplica a instrução X
específica, para que você possa limpar os bits de execução na mesma execução com a-x,a=rwX
para definir apenas o bit executável nos diretórios.
Você pode ver se um arquivo tem um bit de execução definido olhando a parte de "acesso" da saída de stat
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 as permissões do UNIX e seus atributos , que têm 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, executar; da mesma forma para o grupo ( g=rX
) e outros ( o=rX
), leia e execute para diretórios e arquivos executáveis.
A intenção deste operador é permitir que o usuário dê 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 nos comandos tradicionais find . -type f -exec chmod 644 {} +
e find . -type d -exec chmod 755 {} +
) e tenta lidar com executáveis de uma maneira sensata.
(Observe que macOS chmod
aparentemente suporta apenas X
para +
operações.)