はい、できますがgrep
/dev/sda1
、/proc
たぶんしたくないでしょう。さらに詳細に:
はい、grepのバイナリコンテンツを実行できます/dev/sda1
。しかし、最近の大容量のハードディスクでは、これには非常に長い時間がかかり、結果は役に立たない可能性があります。
はい、内容をgrepできますが/proc
、コンピュータのメモリがファイルとしてマップされていることに注意してください。ギガバイトのRAMを備えた最新のコンピューターでは、grepに長い時間がかかり、繰り返しになりますが、結果は役に立ちそうにありません。
例外として、ファイルシステムが破損しているハードディスク上のデータを探している場合grep something /dev/sda1
、ファイルのデータを回復する試みの一部として実行される可能性があります。
の他の問題のあるファイル /dev
ハードディスクとハードディスクパーティション/dev
は、十分な忍耐力があれば、ぎこちないことがあります。ただし、他のファイル(ヒント:user2313067)は問題を引き起こす可能性があります。
/dev/zero
無限の長さのファイルです。幸い、grep
(少なくともGNUバージョン)はそれをスキップするのに十分スマートです。
$ grep something /dev/zero
grep: input is too large to count
/dev/random
そして/dev/urandom
また無限です。停止grep something /dev/random
するように指示されない限り、コマンドは永久に実行されますgrep
。
/dev/urandom
パスワードを生成するときにgrepを使用すると便利です。たとえば、ランダムな5文字の英数字を取得するには:
$ grep --text -o '[[:alnum:]]' /dev/urandom | head -c 10
G
4
n
X
2
十分な数の文字を受け取った後head
、パイプを閉じてgrepを終了させるため、これは無限ではありません。
無限ループ
"...リンク...トラバースしたときに無限ループを作成..."
Grep(少なくともGNUバージョン)は、それを行わないほど賢いです。次の2つのケースを考えてみましょう。
この-r
オプションを使用すると、コマンドラインで明示的に指定されない限り、grep はシンボリックリンクをたどりません。したがって、無限ループは不可能です。
では-R
オプション、grepのないシンボリックリンクをたどりますが、それらをチェックし、ループに巻き込まれることを拒否。説明する:
$ mkdir a
$ ln -s ../ a/b
$ grep -R something .
grep: warning: ./a/b: recursive directory loop
から問題のあるディレクトリを除外する grep -r
余談ですが、grep
grepが特定のファイルまたはディレクトリを検索しないようにするための限定的な機能を提供します。たとえば、という名前のすべてのディレクトリを除外することができproc
、sys
と、dev
とはgrepの再帰検索から:
grep --exclude-dir proc --exclude-dir sys --exclude-dir dev -r something /
また、我々は除外することができproc
、sys
およびdev
bashのの拡張グロブを使用して:
shopt -s extglob
grep -r something /!(proc|sys|dev)
grep
います。/proc
マップされたメモリにつながるファイルを検索するとgrep
、(ランダムな)メモリ内のEOFにヒットし、次のデータが検索する新しいファイル名?私はgrep
ソースコードを読み始めましたが、私はそれをあまり見ないでしょう。