Eu sei o que é ugoa (proprietário, grupo, outros, todos) ou rwx (ler/direita/executar) ou 4,2,1 ou -
, f
, d
, l
, e tentei ler man chmod
para entender o que é uma maiúscula X
, chmod
mas não havia uma entrada para ele. Eu então li neste artigo em posix/chmod mas fiquei preso nesta passagem:
Defina o bit executável somente se o destino a) for um diretório b) já tiver pelo menos um bit executável definido para qualquer usuário, grupo ou outros.
Eu também li neste artigo que dá este exemplo de código:
chmod -R u=rwX,g=rX,o=rX testdir/
Entendo que há uma permissão recursiva no testdir/
, em relação ao dono (u), grupo (g) e outros (o), mas admito que ainda sinto falta da intenção do X maiúsculo.
Talvez uma frase didática aqui possa lançar alguma luz sobre isso (o principal motivo de eu publicar isso aqui é porque não encontrei uma sessão de SE sobre isso).
Atualizar
Desculpe a todos, eu perdi isso no homem. Não imaginei que o X apareceria antes da lista de argumentos e pensei que a busca retornasse x ao invés de X, que pena.
A página de manual diz:
POSIX disse:
Este é um sinalizador de permissão condicional:
chmod
verifica o que está processando no momento e, se for um diretório ou se tiver algum bit de execução definido em suas permissões atuais (proprietário, grupo ou outro), ele age como se a permissão solicitada fossex
, caso contrário, ele o ignora. A condição é verificada no momento em quechmod
aplica aX
instrução específica, então você pode limpar os bits de execução na mesma execuçãoa-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 observando a parte “acesso” da
stat
saída de ou a primeira coluna dels -l
. Os bits de execução são representados porx
.-rwxr-xr-x
é comum para executáveis e indica que o bit executável é 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 Compreendendo as permissões do UNIX e seus atributos , que contém muito mais detalhes.Assim, no seu exemplo,
u=rwX
define as permissões do proprietário para ler e escrever 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 tradicionalfind . -type f -exec chmod 644 {} +
efind . -type d -exec chmod 755 {} +
comandos), e tenta lidar com executáveis de forma sensata.(Observe que o macOS
chmod
aparentemente suporta apenasX
operações+
.)Do
man chmod
:(grifo meu).
No entanto, isso não esclarece muito. Este artigo tem as duas regras que esclarecem o que ele faz:
Por exemplo, emitimos o seguinte comando chmod em um diretório:
Usando o X maiúsculo, o comando acima define o atributo executável de acordo com as duas regras a seguir:
Se o arquivo for um diretório, ele define o atributo executável para o proprietário, grupo e mundo, o que significa que eles podem entrar nesse diretório.
Se o arquivo for um arquivo comum, ele adicionará o atributo executável às suas permissões, se o arquivo já tiver algum bit de execução definido. Se o arquivo não tiver nenhum bit de execução definido, nenhum será adicionado.
Usando o x minúsculo seria impossível alcançar esse resultado com apenas um comando.
Espero que esclareça o uso de X .
Por favor, não polegar para cima esta resposta. É exatamente o que entendi da resposta de Stephen Kitt acima, que aceitei como correta.
1) Um X maiúsculo como em
a=rwX
diz: Todos os diretórios encontrados obterão x e todos os arquivos regulares encontrados que tenham pelo menos 1 bit executável em um dos três grupos de permissão, também obterão x em todos os três grupos.2) A combinação de
a-x
(que garante que todos os arquivos percam o bit de execução) e um subseqüentea=rwX
diz: Obtenha os bits de leitura e gravação em todos os lugares e um bit de execução apenas nos diretórios.