fuser
を使用しています。出力は次のようになります。
$ fuser /
/: 1354rc 1362r 1370rc 1371rc 1395rc 1399rc 1403rc 1410rc 1414rc 1428r 1451rc 1458rc 1470rc 1472rc 1477rc 1480rc 1487rc 1492rc 1500rc 1504rc 1508r 1513r 1516rc 1551r 1563rc 1567rc 1569rc 1586rc 1592rc 1629r 1630r 1633r 1645r 1660r 1695rc 1712rc 1728rc 1885r 2262rc 2273r 2585r 2602r 3342r 3799r
私はこれを理解していますが、それをwc
またはnl
にパイプすると、出力が次のようになります。誰か教えてもらえますか?
$ fuser / | nl
/: rcrrcrcrcrcrcrcrcrrcrcrcrcrcrcrcrcrcrcrrrcrrcrcrcrcrcrrrrrrcrcrcrrcrrrrrr
1 1354 1362 1370 1371 1395 1399 1403 1410 1414 1428 1451 1458 1470 1472 1477 1480 1487 1492 1500 1504 1508 1513 1516 1551 1563 1567 1569 1586 1592 1629 1630 1633 1645 1660 1695 1712 1728 1885 2262 2273 2585 2602 3342 3799 4618
フューザーの一部はstdout(標準出力)に送信され、一部は標準エラーに送信されます。
配管機構は標準出力のみをキャッチします。
プレーンフューザー
mybox $ fuser /
/: 350r 356r 357r 364r 10484rc 10485r
ファイルのタイプ(cまたはr)がstderrにあるのに対し、pidがaにあるのを参照してください。
mybox $ fuser / > a
/: rrrrrcr
ファイル「a」は改行で終わらない。
mybox $ cat a
350 356 357 364 10484 10485mybox $
現在、両方をリダイレクトしています。
mybox $ fuser / > aa 2> bb
mybox $ cat aa
350 356 357 364 10484 10485mybox $
mybox $ cat bb
/: rrrrrcr
2>
リダイレクトstderr
1つのコマンドで両方をパイプする
mybox $ fuser / > cc 2>&1
mybox $ fuser / 2>&1 | wc
1 8 71
mybox $ fuser / 2>&1 | nl
1 /: 350r 356r 357r 364r 10484rc 10485r 11761r
2>&1
"merge" stdout
およびstderr
フューザーの主な用途の1つは、プロセスの「保持」マウントポイントを強制終了することです。
上記の私のコマンドから、ファイルの内容を使用してすべてのプロセスを強制終了できます。
mybox $ fuser /foo/bar > a
/foo/bar: rrrrrcr
mybox $ cat a
350 356 357 364 10484 10485mybox $
mybox $ kill $(<a)
フューザーは、出力の一部をstdoutに送信し、出力の一部をstderrに送信するように作成されました。これは2つの理由で行われました。
これは何かを記述してデバッグする最も簡単な方法ではありませんが、長続きする標準であるため、それを好きか嫌いか、それが出力を送信する方法です。つまり、パイプまたはリダイレクトすると、多くのpidまたはフラグが表示されますが、両方は取得されません。
そのような理由の詳細については、 #166417 を参照してください。