O que é um X maiúsculo em posix / chmod?

5

Eu sei o que é ugoa (proprietário, grupo, outros, todos) ou rwx (leitura / direita / execução) ou 4,2,1 ou - , f , d , l e eu tentei ler em man chmod para entender o que é um X em chmod , mas não havia uma entrada para ele. Eu li então em este artigo em posix / chmod mas estava preso nesta passagem:

Set the executable bit only if the target a) is a directory b) has already at least one executable bit set for any one of user, group, others.

Eu também li em este artigo que fornece este código exemplo:

chmod -R u=rwX,g=rX,o=rX testdir/

Eu entendo que há uma permissão recursiva no testdir/ , em relação ao proprietário (u), grupo (g) e outros (o), mas admito que ainda sinto falta da intenção da capital X.

Talvez um texto didático aqui possa lançar alguma luz sobre isso (a principal razão pela qual eu publico isso aqui é porque eu não encontrei uma sessão SE sobre isso).

Atualizar

Desculpe tudo, eu senti falta disso no homem. Eu não imaginei que o X apareceria antes da lista de argumentos e achei que a pesquisa retornou x ao invés de X, meu erro.

    
por Arcticooling 13.01.2018 / 19:49

3 respostas

14

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.)

    
por 13.01.2018 / 19:56
5

Do man chmod :

The letters rwxXst select file mode bits for the affected users: read (r), write (w), execute (or search for directories) (x), execute/search only if the file is a directory or already has execute permission for some user (X), set user or group ID on execution (s), restricted deletion flag or sticky bit (t).

(ênfase minha).

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:

# chmod -R u=rwX,g=rX,o=rX testdir/'  

Usando o X maiúsculo, o comando acima define o atributo executável de acordo com as duas regras a seguir:

  1. 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.

  2. Se o arquivo for um arquivo normal, ele adicionará o atributo executável a 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, nenhum será adicionado.

Usando o x minúsculo, seria impossível alcançar esse resultado com apenas um comando.

Espero que seja esclarecido o uso de X .

    
por 13.01.2018 / 20:19
0

Por favor, não dedique esta resposta. É exatamente o que eu entendi da resposta de Stephen Kitt acima, que eu aceitei como correta.

1) Um X maiúsculo como em a=rwX diz: Todos os diretórios encontrados receberão x e todos os arquivos regulares encontrados com pelo menos 1 bit executável em um dos três grupos de permissão, também obtenha x nos três grupos.

2) O combo de a-x (que garante que todos os arquivos percam o bit de execução), e um a=rwX subsequente diz: Obter a leitura e gravação bits em todos os lugares e um bit de execução apenas em diretórios.

    
por 25.02.2018 / 01:33