유닉스 재지향과 파이프에 대한 의문입니다.
글쓴이: offline2 / 작성시간: 월, 2011/11/14 - 5:21오전
파이프와 재지향에 대한 차이점을 설명하는 글 중에
ls > lpr ls | lpr
이 두가지의 차이점을 비교하는 것이 있었습니다.
ls | lpr 은
ls > file
lpr < file
로 바꿔 쓸 수 있으니
결국 lpr 명령에 file을 파라미터로 넘겨서 실행하는 것이라고 생각하는데
ls > lpr 의 경우에는
ls의 출력을 lpr이 받아들일 방법이 없어서(stdin으로 받을 수 없어서) 결과를 출력하지 못하는 것인가요?
redirection이라는 것이 대상에 대해 stdin을 변경하는 것인지
아니면 어떤 다른 원리로 작동하는 것인지 궁금합니다.
Forums:
파이프와 리다이렉션
이걸 이해 하시려면 표준 입력(stdin), 표준 출력(stdout), 표준 에러(stderr)이 각각 무엇을 의미하는지 아셔야 합니다.
자세히 설명드리면 길어지니 간단하게 현재 사용하시는 입/출력을 하는 콘솔을 의미한다고 생각하시면 됩니다. 키보드와 모니터가 될 수도 있고,
시리얼 장치가 될 수도 있고, 시스템마다 다릅니다. 그냥 복잡하니까 키보드(stdin)랑 모니터(stdout/stderr)이라고 생각하세요.
파이프는
$ 명령어1 | 명령어2
형태로 되어 있으면 명령어1의 표준 출력(stdout)을 명령어2의 표준 입력(stdin)으로 변경하는 것입니다. 그래서, 명령어1을 수행
한 뒤에 콘솔에 출력 할 메세지를 명령어2의 입력으로 넣어줍니다.
리다이렉션은
$ 명령어 > 파일
형태로 많이 사용합니다. 즉, 쉘에서 파일 읽기/쓰기를 할 때 리다이렉션을 사용합니다.
* > : 명령어의 표준 출력 내용을 파일에 쓰기
* >> : 명령어의 표준 출력 내용을 파일에 추가
* < : 명령어의 표준 입력을 파일로 변경(파일 내용을 읽음)
* 2> : 명령어의 표준 에러를 파일로 쓰기
ex>
$ make 2> err_msg.txt
이렇게 하면 컴파일 중에 에러 메세지를 'err_msg.txt' 파일에 저장합니다.
Just do it!
댓글 달기