cat ./file | head 와 head ./file 의 차이

19.08.15 18:13 작성 조회수 89

1

안녕하세요, head 명령어를 사용하는 도중에 궁금증이 생겨 질문드립니다.

어떤 파일의 앞 10줄만을 출력할 때,

1. cat ./file | head

2. head ./file

두 명령어를 모두 사용할 수 있습니다.

물론 1번은 pipe로 파일 전체 내용을 head의 input으로 주는 것이고, 2번은 head의 인자로 파일을 주는 것이므로 의미상 차이는 있습니다. 하지만 결국 결과물은 같은데, 특정 코드를 사용해야 하는 상황이 따로 있나요?

감사합니다.

답변 1

답변을 작성해보세요.

1

말씀하신대로 결과물은 같습니다. 하지만 파이프를 사용하지 않는 2번 방법이 성능상 더 좋습니다. 파이프를 사용하게되면 결국 프로세스를 하나 더 생성하게 됩니다. 파이프의 사용으로 프로세스를 추가 생성하기 때문에 성능이 떨어지게 되는 것이죠. 예를 들어주신 부분은 파이프를 한번만 사용하고, 처리 내용이 간단해서 사실 성능상 차이가 있다고 말하긴 힘들죠. 하지만 좀 더 복잡한 조건을 처리해야 하는 경우 파이프를 여러번 사용하는 경우가 있는데, 이런 작업에 경우 파이프를 많이 사용하는 것과 파이프를 사용하지 않고 처리하는 것은 처리 성능에서 꽤 큰 차이를 보입니다. 

결론적으로, 파이프는 커맨드라인 툴 간의 glue 역할을 하는 아주 좋은 도구 입니다. 하지만 파이프를 남발하게 되면 성능이 떨어질 수 있으므로 높은 성능을 필요로 하는 경우에는 가급적 파이프를 사용하지 않는 것이 성능상 장점이 있습니다.