A lógica está errada. Você está pensando que esse arquivo não deveria ter sido listado porque é de propriedade de user123
e tem o r
bit do usuário configurado. No entanto, ele está listado porque corresponde ao segundo critério (é de propriedade do grupo user123
e tem o r
bit do grupo não definido).
Sua segunda versão funciona devido a uma das leis de Morgan : negando a ORing lógica de um grupo de declarações é logicamente equivalente a ANDing a negação das declarações individuais. Em outras palavras:
! ( A || B || C ) == ( !A && !B && !C )
Portanto, o trabalho find
está procurando por um arquivo que
- Não é (pertence ao usuário
user123
e pode ser lido pelo usuário) E - Não é (pertencente ao grupo
user123
e legível pelo dito grupo) E - Não é legível pelo mundo.
enquanto o primeiro find
está procurando por um arquivo que
- É de propriedade do usuário
user123
e não pode ser lido pelo dito usuário OU - É de propriedade do grupo
user123
e não pode ser lido pelo grupo OU (se você o tiver concluído) - Não é legível pelo mundo
Assim, um arquivo correspondente a QUALQUER um dos 3 critérios acima (e não necessariamente todos) seria listado como você viu.
Editar
Por acaso (depois de ver o seu perfil), eu sou um grande fã do seu livro O'Reilly:)