저는 상대적으로 경험이 풍부한 Linux 사용자입니다. Unix/Linux에서 파이프를 사용하는 것이 언제 적합한지 더 잘 이해하고 싶습니다.
모든 책 참조에 따르면 파이프는 |
명령을 왼쪽에서 오른쪽으로 연결하는 데 사용됩니다. ls
, , 등 ps
의 일반적인 명령과 함께 사용 하면 echo
이전 명령이 버퍼 뷰어(예: less
)와 같은 항목을 열지 않고 출력만 생성하기 때문에 파이프가 매우 잘 작동한다는 것을 쉽게 이해할 수 있습니다.
따라서 를 실행하면 ls | tr -d 'a'
우리 둘 다 모든 것이 잘 작동한다는 것을 알 수 있습니다. 하지만 를 실행하면 top -n 1 | grep 'average'
상황이 조금 이상해지기 시작합니다. 실제로 파이프 왼쪽에 화면 지향 명령을 사용하면 파이프 연산자 자체가 해당 명령의 출력을 리디렉션하려고 시도하며 때로는 어떤 출력 리디렉션을 이해하기 어렵습니다. 이 경우 파이프 연산자를 잘못 사용했기 때문이라고 생각합니다.
문제는 "언제 파이프 연산자를 사용해야 합니까? top 및 기타 화면 지향 명령과 같은 특정 명령에 대해 파이프의 오른쪽을 사용하려고 하면 어떻게 됩니까?"입니다.
감사해요.
답변1
파이프 연산자( |
)는 두 명령(또는 명령 목록)을 연결합니다. 산출(표준 출력)는 왼쪽에서 입력(표준 입력) 오른쪽이요. 첫 번째 출력이 두 번째 입력과 일치하는지 확인해야 합니다. 일반적으로 오류 채널(표준 에러)은 파이프를 통해 리디렉션하지 않지만 파이프의 모든 프로세스에서 터미널에 직접 씁니다.
의 경우 top
대화형 세션에서 터미널에 쓰고 있다고 가정합니다. 이 -b
플래그를 사용하여 배치 환경을 채택해야 함을 알릴 수 있습니다. 이렇게 하면 터미널 위치 지정 순서, 색상 및 키보드 입력이 꺼집니다.
top -b -n1 | grep average
top - 21:43:52 up 4 days, 9:49, 0 user, load average: 0.00, 0.00, 0.00
ls
터미널이나 기타 출력 스트림에 직접 기록되는 경우를 감지하고 해당 출력을 적절하게 수정하는 것과 같은 특정 명령은 예를 들어 여러 파일이 포함된 디렉터리에서 ls
및 를 비교합니다 ls | cat
.