Sim, você pode grep
/dev/sda1
e /proc
mas provavelmente não quer. Em mais detalhes:
Sim, você pode executar grep o conteúdo binário de /dev/sda1
. Porém, com discos rígidos grandes e modernos, isso levará muito tempo e o resultado provavelmente não será útil.
Sim, você pode visualizar o conteúdo, /proc
mas esteja ciente de que a memória do seu computador está mapeada como arquivos. Em um computador moderno com gigabytes de RAM, isso levará muito tempo para grep e, novamente, o resultado provavelmente não será útil.
Como exceção, se você estiver procurando dados em um disco rígido com um sistema de arquivos danificado, poderá executar grep something /dev/sda1
como parte de uma tentativa de recuperar os dados do arquivo.
Outros arquivos problemáticos em /dev
Os discos rígidos e partições de disco rígido abaixo /dev
podem ser, se houver paciência suficiente, recebidos. Outros arquivos (dica de chapéu: user2313067 ), no entanto, podem causar problemas:
/dev/zero
é um arquivo de tamanho infinito. Felizmente, grep
(pelo menos a versão GNU) é inteligente o suficiente para ignorá-la:
$ grep something /dev/zero
grep: input is too large to count
/dev/random
e /dev/urandom
também são infinitos. O comando grep something /dev/random
será executado para sempre, a menos que grep
seja sinalizado para parar.
Pode ser útil grep /dev/urandom
ao gerar senhas. Para obter, por exemplo, cinco caracteres alfanuméricos aleatórios:
$ grep --text -o '[[:alnum:]]' /dev/urandom | head -c 10
G
4
n
X
2
Isso não é infinito porque, depois de receber caracteres suficientes, head
fecha o canal, causando o término do grep.
Loops infinitos
"... links ... criam loops infinitos quando percorridos ..."
O Grep (pelo menos a versão GNU) é inteligente o suficiente para não fazer isso. Vamos considerar dois casos:
Com a -r
opção, o grep não segue links simbólicos, a menos que eles sejam especificados explicitamente na linha de comandos. Portanto, loops infinitos não são possíveis.
Com a -R
opção, grep faz seguir links simbólicos mas verifica-los e se recusa a ficar preso em um loop. Ilustrar:
$ mkdir a
$ ln -s ../ a/b
$ grep -R something .
grep: warning: ./a/b: recursive directory loop
Excluindo diretórios problemáticos de grep -r
Como um aparte, grep
fornece um recurso limitado para impedir que o grep procure determinados arquivos ou diretórios. Por exemplo, você pode excluir todos os diretórios nomeados proc
, sys
e dev
de pesquisa recursiva do grep com:
grep --exclude-dir proc --exclude-dir sys --exclude-dir dev -r something /
Alternativamente, podemos excluir proc
, sys
e dev
usando globs prolongados do bash:
shopt -s extglob
grep -r something /!(proc|sys|dev)
grep
pesquisar um arquivo/proc
que leve à memória mapeada, isso pode ocorrer quegrep
atinge um EOF dentro da memória (aleatória) e interpreta os seguintes dados como um novo nome de arquivo para pesquisar? Comecei a ler ogrep
código fonte, mas acho que não vou ver muito nele.