퓨저 출력이 불분명해 보입니다.

퓨저 출력이 불분명해 보입니다.

내가 사용하는 출력은 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

답변1

fusionr는 일부를 stdout(표준 출력)으로 보내고 일부는 표준 오류로 보냅니다.

출력은 어떻게 나누어지나요?

파이프 메커니즘은 표준 출력만 캡처합니다.

일반 퓨저

mybox $ fuser /
/:                     350r   356r   357r   364r 10484rc 10485r

이제 리디렉션하여 pid가 a에 있고 파일 형식(c 또는 r)이 stderr에 있는지 확인하세요.

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

하나의 명령으로 둘 다 전송

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"병합" stdoutstderr

출력이 분할되는 이유는 무엇입니까?

fusionr의 주요 용도 중 하나는 마운트 지점을 "보유"하는 프로세스를 종료하는 것입니다.

위의 명령을 기반으로 파일 내용을 사용하여 모든 프로세스를 종료할 수 있습니다.

mybox $ fuser /foo/bar > a
/foo/bar:                  rrrrrcr

mybox $ cat a
   350   356   357   364 10484 10485mybox $
mybox $ kill $(<a)
  • $( ) 구문 의미: 'a' 파일의 내용

답변2

fusionr는 출력의 일부를 stdout으로 보내고 일부는 stderr로 보내도록 작성되었습니다. 이렇게 하는 데는 두 가지 이유가 있습니다.

  1. 이는 일치하는 모든 PID를 다른 프로세스로 파이프할 수 있음을 의미합니다.
  2. POSIX 표준은 다음과 같이 말합니다.

무언가를 작성하고 디버그하는 가장 쉬운 방법은 아니지만 오랫동안 지속되어 온 표준이므로 좋거나 싫거나 이렇게 출력을 보냅니다. 즉, 파이프하거나 리디렉션하면 많은 PID나 플래그 중 하나를 얻을 수 있지만 둘 다 얻을 수는 없습니다.

이러한 경우가 발생하는 이유에 대한 자세한 내용은 다음을 참조하세요.#166417

관련 정보