Considere alguns sistemas * nix comuns (como Debian, CentOS, Arch e Kali).

Eu sempre usado find; Não me lembro de usar o GNU find, mas a partir de um exemplo que vi, presumi que a sintaxe do GNU find pode ser mais simples (embora pode permitir menos operações).

Tenho duas perguntas:

  1. É find o utilitário padrão “localizar ou operar” em sistemas comuns ou os sistemas virão com ambos find e GNU find?

  2. Era GNU find pretendia ser mais simples de find ?

Comentários

  • você sempre usou o GNU find no linux, a menos que você ' sou um grande usuário de find no busybox ou android 😉 Em sistemas não Linux, GNU find é geralmente denominado gfind.
  • Experimente find --version😉
  • Aqueles sistemas que você ' está se referindo são sistemas GNU, GNU / Linux para a maioria, embora o Debian esteja disponível para outros alguns kernels como Nós vamos. Portanto, ' não é surpreendente que a find implementação nesses sistemas seja GNU find.

Resposta

Os utilitários GNU geralmente implementam o padrão POSIX e também o estendem com funcionalidade extra para maior conveniência (e, como o outro lado disso, diminuiu a portabilidade em Unices). O aspecto da portabilidade é porque você às vezes verá respostas ou comentários neste site que são muito cuidadosos em apontar quando um utilitário GNU ou alguma outra implementação específica de um utilitário é assumido.

Se você estiver em um Linux sistema, você muito provavelmente estaria usando a implementação GNU de find e provavelmente não teria outro find instalado. Em sistemas não Linux, você teria um find nativo e a possibilidade de também instalar GNU find (que na maioria das vezes seria instalado sob o nome gfind ou, com menos frequência, gnufind).

Como a maioria dos utilitários GNU, GNU find implementa e estende a especificação find padrão . Portanto, não é “mais simples”, mas indiscutivelmente mais complexo para ser mais conveniente, e seria um pouco mais fácil realizar certas tarefas complexas com ele do que com um find compatível com o padrão estrito .

Implementações estendidas de find frequentemente, por exemplo, implementam -maxdepth e -mindepth predicados que o padrão não menciona, e GNU find em particular também tem -printf para imprimir os nomes de caminho encontrados usando uma variedade de possibilidades de formatação (o find padrão não tem -printf) e predicados para fazer correspondência de expressão regular de vários tipos em nomes de caminho, bem como uma série de outros predicados não padrão, alguns dos quais também são encontrados em outras implementações de find (possivelmente com semânticas ligeiramente diferentes, como -execdir whi ch funciona um pouco diferente dependendo do que find está sendo usado 1 ).

O -delete predicado, usado na resposta para a qual você se vincula, não é padrão, mas implementado pelo GNU find, bem como no find em alguns outros sistemas não Linux. GNU find “s -delete irá reclamar se você usá-lo para deletar um diretório não vazio, mas a opção correspondente com, por exemplo, OpenBSD” s find não (nem excluirá o diretório não vazio).

A maioria dos sistemas Linux, independentemente da distribuição, usa o mesmo conjunto de ferramentas coreutils e findutils (variantes como Busybox existe, obviamente). Para usar um conjunto completamente diferente de implementações de ferramentas, você teria que mudar para um dos sistemas BSD de código aberto ou para macOS, Solaris, AIX ou algum outro Unix comercial.


1 GNU find adiciona ./ a nomes de caminho ao usar -execdir enquanto algumas outras implementações não.

Comentários

  • E -print0, e -direxec e -delete e … ;-). As opções de separador nulo disponíveis nas ferramentas GNU são particularmente convenientes.
  • @StephenKitt Mas raramente necessário 🙂
  • certo, exceto ao escrever respostas não POSIX aqui ;-). (Ou scripts que precisam funcionar em qualquer lugar .)
  • O principal problema com a documentação GNU é que ela tenta permitir que as pessoas usem apelidos não-padrão para métodos POSIX e, assim, causar o scripts relacionados para criar um bloqueio de fornecedor.
  • @StephenKitt -print0 também está disponível em * bsd e solaris; mas no solaris xargs -0 não ' funciona, então gxargs -0 (de /usr/bin/sfw) deve ser usado.

Resposta

A que as pessoas costumam se referir como Linux é melhor referido como GNU / Linux: Linux mais GNU. Portanto, as ferramentas que você está usando provavelmente são GNU.

  • Linux: um kernel, é usado em GNU / Linux, Android e muitos outros sistemas.
  • GNU: um sistema operacional, geralmente usado com o kernel Linux, mas também pode ser usado com BSD, Hurd, Cygwin (uma DLL para Windows da Microsoft, que finge ser um kernel), WSL (Subsistema Windows para Linux: GNU sem Linux, em Microsoft Windows), HPUX, Solaris, Dec Athena e muitos outros.

Portanto, você provavelmente está usando o GNU find.

GNU é um projeto a ser refeito escreva, uma versão gratuita (gratuita como na liberdade, não como no preço) de todo o Unix, incluindo ferramentas como find, o projeto GNU não se preocupa com a conformidade com POSIX: ele estará em conformidade onde fizer sentido, mas também fará melhorias.

Além disso, você pressupõe que haja apenas um outro find está errado.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *