O que significa “arquivo $ (grep –irl crud /usr/src/linux-2.4)”?

0

Alguém poderia explicar o que é o crud e como exatamente o grep funciona nesse caso?

file $(grep –irl crud /usr/src/linux-2.4)
    
por Kirill Ivanov 17.04.2017 / 14:24

2 respostas

2

Vamos quebrar isso. Primeiro, o formato $(command) é chamado de "substituição de comando" . É uma maneira de retornar a saída de um comando, criando essencialmente uma variável cujo valor é a saída desse comando. Por exemplo:

$ echo foo
foo
$ var=$(echo foo) ## set the output of 'echo foo' to the variable $var
$ echo "$var"
foo

Agora, neste caso, o comando que está sendo executado é grep -irl crud /usr/src/linux-2.4 . Para entender o que isso significa, execute man grep e veja o que cada uma dessas três opções ( i , r e l ) faz:

   -i, --ignore-case
          Ignore case distinctions in  both  the  PATTERN  and  the  input
          files.

   -r, --recursive
          Read all files  under  each  directory,  recursively,  following
          symbolic  links only if they are on the command line.  Note that
          if  no  file  operand  is  given,  grep  searches  the   working
          directory.  This is equivalent to the -d recurse option.

   -l, --files-with-matches
          Suppress normal output; instead print the  name  of  each  input
          file  from  which  output would normally have been printed.  The
          scanning will stop on the first match.

Considerados todos juntos, isso significa "recorrer a todos os arquivos em /usr/src/linux-2.4 e pesquisar em cada um deles sem distinção entre maiúsculas e minúsculas para a palavra crud e, em seguida, imprimir os nomes de quaisquer arquivos correspondentes".

Então, esse comando irá imprimir uma lista de nomes de arquivos contendo a palavra crud . Como estamos executando file $(grep . . . ) , isso significa que o comando file (que imprime o tipo de arquivo e algumas informações sobre o arquivo em questão) será executado em cada um dos arquivos retornados pelo grep .

Juntando tudo, esse comando imprimirá as informações básicas sobre todos os arquivos em /usr/src/linux-2.4 contendo a string crud . Na minha máquina 14.04, isso retorna:

$ file $(grep -irl crud /usr/src/)
/usr/src/linux-headers-3.16.0-77/include/linux/pktcdvd.h:                   C source, ASCII text
/usr/src/linux-headers-3.16.0-77/arch/arm/mach-sa1100/include/mach/cerf.h:  ASCII text
/usr/src/linux-headers-3.13.0-108/include/linux/pktcdvd.h:                  C source, ASCII text
/usr/src/linux-headers-3.13.0-108/arch/arm/mach-sa1100/include/mach/cerf.h: ASCII text
/usr/src/linux-headers-3.13.0-46/include/linux/pktcdvd.h:                   C source, ASCII text
/usr/src/linux-headers-3.13.0-46/arch/arm/mach-sa1100/include/mach/cerf.h:  ASCII text
/usr/src/linux-headers-3.16.0-30/include/linux/pktcdvd.h:                   C source, ASCII text
/usr/src/linux-headers-3.16.0-30/arch/arm/mach-sa1100/include/mach/cerf.h:  ASCII text
    
por terdon 17.04.2017 / 14:49
0

file , de acordo com a ajuda, determina o tipo do arquivo processado. O comando $(grep -irl crud /usr/src/linux-2.4) é:

  • $(<command>) Captura o valor do comando interno.
  • grep -irl crud /usr/src/linux-2.4 , é o comando interno, que está procurando pela string crud, com ignorar maiúsculas e minúsculas, recursivamente e imprimir apenas nomes de arquivos contendo correspondências.

Então, o seu comando completo, está procurando pelo tipo de arquivos que correspondem à string crud, dentro do diretório /usr/src/linux-2.4

    
por GTRONICK 17.04.2017 / 14:49