Usando o comando grep sem especificar um determinado diretório [closed]

1

Você pode usar o comando grep sem especificar um caminho de diretório depois?

Exemplo:

$ sudo grep "filename" /

Eu também tentei isso:

 sudo find / -type f grep -l "filename"

Ainda sem sorte.

Basicamente eu estou procurando onde o LoadModule é especificado no arquivo de configuração do Apache2. Eu pensei que estava aqui: /etc/apache2/apache2.conf mas não é.

    
por Kevdog777 09.03.2016 / 11:01

2 respostas

3

O Grep espera que você forneça um nome de arquivo ou uma lista de nomes de arquivos. Não toma um caminho como argumento. Assim, sua primeira tentativa poderia ter sido escrita como

sudo grep searchstring /*

para procurar todos os arquivos imediatamente abaixo da raiz. (Que provavelmente não é o que você quer.)

Editar: o GNU grep pode pesquisar recursivamente, então você pode fazer

sudo grep -r searchstring /

No segundo caso, você entendeu mal como encontrar funciona. -type requer um argumento dizendo que tipo de arquivo procurar, e apenas adicionando "grep" depois não faz nada. Você pode, no entanto, dizer-lhe para executar um comando em cada arquivo que encontrar, e é provavelmente o que você estava procurando. Assim:

sudo find / -type f -exec grep -l searchstring {} \;

O {} significa "o nome do arquivo" e \; significa "o comando é feito agora".

    
por 09.03.2016 / 11:09
1

A resposta de Jenny é a mais geral. Você deve ser capaz de encontrar o que precisa com

grep -r -i '^[[:space:]]*LoadModule' /etc/apache2

Para ser pedante, você também deve procurar e anotar quaisquer diretivas 'include' que estejam fora da estrutura de diretórios do apache2.

Para isso, você pode tentar obter a lista de arquivos que o apache2ctl -t abre para verificar a configuração com algo como:

APACHE_HTTPD='ltrace -s4096 -e open@libapr* apache2' apache2ctl -t 2>&1 |
  cut -d\" -sf2 |
  grep -v /dev/ |
  sort -u |
  xargs -rd '\n' grep -i '^[[:space:]]*LoadModule'
    
por 09.03.2016 / 13:33