
私は複数のプラットフォームで次の grep 検索パターンを使用しました。
grep -r -I -D skip 'string_to_match' /
例えばフリーBSD8.0、フリーBSD6.4そしてデビアン 6.0(squeeze) コマンドはルート ディレクトリから再帰検索を実行し、バイナリ ファイルに 'string_to_match' がないものと想定し、デバイス、ソケット、名前付きパイプをスキップします。フリーBSD8.0そしてフリーBSD6.4GNU grepバージョン2.5.1を使用し、デビアン 6.0GNU grepバージョン2.6.3を使用します。フリーBSD6.4stderrに最後に出力された情報は「grep: /dev/cuad0: デバイスがビジーです」. この後、grepは「top -m io -o total」によるとgrepのI/O使用量が存在しないことからアイドル状態になります。同じ動作は以下でも当てはまります。フリーBSD8.0、しかしstderrに送られる最後の情報は「grep: /tmp/.wine-0: アクセス権が拒否されました」私のインストールでは、Debianの場合、stderrへの最後の出力は「grep: /proc/sysrq-trigger: 入出力エラー」Debian で grep プロセスの I/O 使用量を確認すると、次のようになります。
root@Debian:~# iotop -bp 22439
Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
22439 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % grep -r -I
-D skip 10.10.10.99 /
Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
22439 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % grep -r -I
-D skip 10.10.10.99 /
Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
22439 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % grep -r -I
-D skip 10.10.10.99 /
^Croot@Debian:~#
何が原因でしょうか?どのファイルを表示する方法はありますか?グレップ現在処理中ですlsof存在しない?私は使用できるlsofDebianでは、問題のあるファイル名は「0xc6b2c230 file struct, ty=0, op=0xc0d34120」のようです。これが何なのかわかりません。使用できません。lsofまたは統計FreeBSD で。
PS: 使えることは分かっています探す有用性はありますが、これは問題ではありません。
答え1
Linux では、 の代わりにlsof
の内容を一覧表示できます/proc/$(pgrep grep)/fd
。そのプロセスの開いているファイル記述子ごとにシンボリック リンクが表示され、対応するファイルを指すようになります。これが私の環境で実行した結果の例を以下に示します。
$ ls -gG /proc/$(pgrep grep)/fd
total 0
lrwx------ 1 64 Oct 18 19:39 0 -> /dev/pts/2
lrwx------ 1 64 Oct 18 19:39 1 -> /dev/pts/2
lrwx------ 1 64 Oct 18 19:39 2 -> /dev/pts/2
lr-x------ 1 64 Oct 18 19:39 3 -> /usr/share/groff/1.18.1.4/font/devdvi/generate/texb.map