O que é um capital X em posix / chmod?

11

Sei o que é ugoa (proprietário, grupo, outros, todos) ou rwx (leitura / direita / executar) ou 4,2,1 ou -, f, d, l, e eu tentei ler em man chmodentender o que é um capital Xem chmodmas não havia uma entrada para ele. Li então neste artigo em posix / chmod, mas fiquei preso nesta passagem:

Defina o bit executável apenas 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.

Também li neste artigo que fornece este exemplo de código:

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

Entendo que existe uma permissão recursiva no testdir/, em relação ao proprietário (u), grupo (g) e outros (o), mas admito que ainda perco a intenção da capital X.

Talvez uma frase didática aqui possa lançar alguma luz sobre isso (a principal razão pela qual publiquei aqui é porque não encontrei uma sessão SE).

Atualizar

Desculpe tudo, eu senti falta disso no homem. Não imaginei que o X aparecesse antes da lista de argumentos e pensei que a pesquisa retornasse x em vez de X, que é ruim.

Arcticooling
fonte

Respostas:

20

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: chmodanalisa 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 chmoda Xinstrução específica é aplicada , para que você possa limpar os bits de execução na mesma execução a-x,a=rwXpara 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 statsaí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=rwXdefine 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 chmoduma 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 Xpara +operações.)

Stephen Kitt
fonte
Então eu vi e entendi errado o termo "conjunto de bits". é um inode com dono: raiz e grupo: raiz e permissões ---, ---, ---um indoe sem um "conjunto de bits"?
Arcticooling 13/01/19
Sim, ---------significa que nenhum bit está definido. Você pode achar essa pergunta útil.
Stephen Kitt
Stephen, acho que adicionar uma definição dos termos "executar conjunto de bits" (eu descreveria como ...,...,...) e "conjunto de bits inválido" (eu descreveria como ---,---,---), no início da resposta, poderia ajudar a torná-lo ainda mais didático e diminua a chance de alguém ter perdido isso; Isto é onde eu originalmente caí com isso.
Arcticooling 13/01/19
@Arcticooling, bem, as permissões são codificadas em bits e, por exemplo, a página de manual do GNU chmoddiz que "altera os bits do modo de arquivo de cada arquivo" etc. etc. Portanto, no contexto, "execute bit (s)" se refere a as três +xpermissões possíveis (ugo) . A meu ver, "nenhum conjunto de bits" soa estranho, pois não menciona nenhum contexto.
Ilkkachu
@Arcticooling Adicionei um parágrafo, apenas para esclarecer sua compreensão - “executar conjunto de bits”, pois ...,...,...realmente não significa nada, nem “conjunto de bits de execução inválido” (o que é inválido?).
Stephen Kitt
5

Do man chmod:

As letras rwxXst selecionam bits do modo de arquivo para os usuários afetados: leitura (r), gravação (w), execução (ou pesquisa de diretórios) (x), execução / pesquisa somente se o arquivo for um diretório ou se já tiver permissão de execução para alguns usuários. usuário (X), defina o ID do usuário ou grupo nas execuções, sinalizador de exclusão restrito ou bit adesivo (t).

(ênfase minha).

No entanto, isso não esclarece muito. Este artigo possui as duas regras que esclarecem o que 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 definirá 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 às suas permissões, se o arquivo já tiver algum bit de execução definido. Se o arquivo não tiver um conjunto de bits de execução, nenhum será adicionado.

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


Esperança de que esclarecer o uso da X .

Isaac
fonte
1

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


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

2) A combinação de a-x(que garante que todos os arquivos percam o bit de execução), e uma subseqüente a=rwXdiz: Obtenha os bits de leitura e gravação em todos os lugares e um bit de execução apenas nos diretórios.

user9303970
fonte