A diferença entre encontrar e encontrar GNU

3

Considere alguns sistemas comuns * nix (por exemplo, Debian, Ubuntu, Fedora, CentOS, Arch e Kali).

Eu uso o Linux desde 2014, mas sempre usei find . Não me lembro de usar pessoalmente o GNU find, mas de um exemplo Eu vi que a sintaxe do GNU find pode ser mais simples (embora também possa permitir menos operações).

Excepcionalmente, tenho duas perguntas:

  1. É apenas find o utilitário padrão "localizar ou operar" em sistemas comuns ou eles geralmente vêm com ambos find e GNU find ?

  2. Era GNU find destinado a ser mais simples que find ?

por JohnDoea 12.10.2018 / 12:35

2 respostas

10

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, diminuiu a portabilidade entre os Unices). O aspecto de portabilidade é por que você em algum momento 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 é assumida.

Se você estiver em um sistema Linux, provavelmente muito estará usando a implementação GNU de find , e você provavelmente não teria outro find instalado. Em sistemas não-Linux, você teria um nativo find e a possibilidade de instalar também o GNU find (que geralmente seria instalado sob o nome gfind ou, menos frequentemente, gnufind ).

Assim como a maioria dos utilitários GNU, o GNU find implementa e estende padrão find especificação . Portanto, ele não é "mais simples", mas "mais conveniente", e seria mais fácil realizar certas tarefas complexas com ele do que com um find estritamente compatível.

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

O predicado -delete , usado na resposta que você vincula, não é padrão, mas implementado pelo GNU find , bem como no find em alguns outros sistemas não-Linux.

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

1 O GNU find pré-anexa ./ aos nomes de caminho ao usar -execdir enquanto outras implementações não o fazem.

    
por 12.10.2018 / 12:41
0

O que as pessoas frequentemente chamam de Linux é mais conhecido como Gnu / Linux: Linux mais Gnu. Portanto, as ferramentas que você está usando provavelmente são Gnu.

  • Linux: um kernel, é usado no 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 do Microsoft Windows, ele finge ser um kernel), WSL (Windows Subsystem para Linux: Gnu sem Linux, no Windows da Microsoft), HPUX, Solaris, Dec Athena e muitos outros.
por 24.11.2018 / 12:36