이곳은 백업 블로그 입니다. 현재 캐플이 활동 중인 블로그는 CAppleBlog.co.kr 입니다. 최신 정보들은 새로운 블로그에서 확인해 보세요. ^^

- 이곳은 기존 블로그들의 글을 한군데로 모아 놓은 백업 블로그입니다.

- 현재 링크는 대부분 올바르지 않으며 이러한 링크들은 모두 cappleblog.co.kr 로 이동합니다. (※ 링크 주의)

- 블로그와 커뮤니티는 서로 다른 공간입니다.(로그인을 따로 해야합니다.)

- 저는 윈티티(WinTT)이자 신비(ShinB)이며 캐플(CApple)입니다. 편한대로 불러주세요.

명령 프롬프트와 표준 입출력



윈도우의 명령어 쉘인 명령 프롬프트에는 표준 입력표준 출력이라는 것이 존재합니다. 명령 프롬프트는 기본적으로 표준 입력 장치는 '키보드' 로, 표준 출력 장치는 '모니터' 로 설정되어 있습니다. 즉, 이 말은 명령어의 입력은 키보드를 통해서 받고 명령의 처리 결과는 모니터 화면으로 출력해 주는 것이 표준이라는 것 입니다.



이를 간단하게 표현하면 아래와 같습니다.



그런데 명령 프롬프트의 이러한 표준 입출력을 키보드나 모니터가 아닌 파일이나 프린터와 같이 다른 방향으로 바꿀 수 있습니다. 이러한 것을 리다이렉션(리디렉션, Redirection)파이프(Pipe) 라고 합니다.

※ 리다이렉션과 리디렉션은 같은 말입니다. 리다이렉션은 영국식 발음이며 리디렉션은 미국식 발음입니다. 과거엔 리다이렉션이라는 발음을 많이 사용했으나 점차 리디렉션이라는 발음을 많이 사용하는 편 입니다. 그래서 결론은 우리나라 말 아니니까 그냥 대충 씁시다.






리다이렉션 - Redirection


리다이렉션이란 사전적 의미로 다른 방식이나 용도로 전용하여 쓰다, 다른 주소나 방향으로 다시 보내다라는 의미를 가진 Redirect 의 명사형을 의미합니다. 이를 명령 프롬프트의 표준 입력과 표준 출력에 대입하면 표준 입력이나 표준 출력의 방향을 다른 곳에서 받거나 다른 곳으로 보낸다는 의미 정도가 될 수 있습니다. 명령 프롬프트에서 정의하는 리다이렉션의 의미도 이와 다르지 않습니다.






입력 리다이렉션


표준 입력의 리다이렉션은 다음의 의미를 가집니다.

  • - 입력을 키보드에서 파일로 바꾸는 것
    - 리다이렉션을 의미하는 < 를 통해 입력 받을 파일을 지정


표준 입력의 리다이렉션을 설명하는데에는 Sort 명령이 가장 많이 사용됩니다.[뭐 사실 저도 윈도우에서 Sort 명령 말고 딱히 썼던 곳이;;;] Sort 명령은 키보드로부터 입력된 데이터를 오름차순 또는 내림차순으로 정렬해 주는 명령이죠. 아래와 같은 명령입니다.

키보드로 입력한 내용을 오름차순으로 정렬하는 Sort 명령



입력 리다이렉션은 이렇게 키보드로 입력받는 내용을 파일로부터 받는 것 입니다. 먼저 적절한 파일이 존재해야겠죠? 먼저 Copy 명령을 통해 list.txt 라는 파일을 만들고 리다이렉션을 사용하여 해당 파일을 입력받아 sort 로 정렬을 해 보도록 하겠습니다.

키보드 입력대신 미리 작성된 list.txt 파일을 입력으로 받아 내용을 정렬하는 Sort 명령




간단하죠? 이렇듯 입력의 방향을 파일로 바꾸는 입력 리다이렉션의 명령 형식은 아래와 같습니다.

명령 < 파일





출력 리다이렉션


다음으로 표준 출력의 리다이렉션은 다음의 의미를 가집니다.

  • - 출력의 방향을 모니터에서 파일로 바꾸는 것
    - 리다이렉션을 의미하는 > 또는 >> 를 통해 저장할 파일을 지정


가장 간단하게 파일의 목록을 출력하는 Dir 명령을 통해 설명을 해 보도록 하죠. Dir 명령은 파일의 목록을 출력해주는 명령입니다. 아래와 같이 말이죠.



출력 리다이렉션은 이렇게 화면으로 출력되는 내용을 파일로 저장을 하는 것 입니다. 리다이렉션을 통해 C: 드라이브의 파일 목록을 텍스트 파일로 저장을 하겠습니다.



화면에 아무 것도 표시가 되질 않죠? 출력의 방향이 모니터에서 파일로 바뀌었기 때문에 화면에는 아무 것도 표시되지 않는 것 입니다. 그 내용은 고스란히 지정한 C-list.txt 라는 파일에 저장이 되어 있습니다. Type 명령으로 확인을 해보죠.




잘 저장이 되어 있네요. 이렇듯 출력의 방향을 파일로 바꾸는 출력 리다이렉션의 명령 형식은 아래와 같습니다.

명령 > 파일
명령 >> 파일


이 때 > 는 기존에 파일이 있다면 무조건 새로 덮어쓰기 때문에 이를 원치 않고 기존의 파일에 추가하여 기록하고 싶다면 >> 을 쓰게 됩니다.




입출력 리다이렉션의 혼용


이와 같은 입력과 출력 리다이렉션은 목적에 따라 혼용하여 사용할 수 있습니다. 위에서 입력 리다이렉션을 사용하여 list.txt 라는 파일의 내용을 Sort 명령을 통해 오름차순으로 정렬한 후 출력했었죠? 그런데 여기에 출력 리다이렉션을 통해 정렬 결과를 화면으로 출력하지 않고 파일로 기록할 수도 있습니다. 즉, 입출력 리다이렉션이 모두 사용되는 것이죠.



Type 명령을 두 파일의 내용을 확인하여 결과를 한 번 볼까요?



잘 정렬되어 저장되었네요.




출력 리다이렉션의 다른 방향


위에서 이야기 했지만 출력 리다이렉션은 표준 출력의 방향을 다른 곳으로 향하게 하는 것 입니다. 위에서는 새로운 출력의 방향으로 파일을 예제로 들었지만 사실 파일로만 출력을 보낼 수 있는 것은 아닙니다. 윈도우에는 예약어라는 게 존재합니다.[사실 도스 시절부터 존재했죠] 대표적으로 CON, PRN, NUL, AUX 등이 있는데 이러한 예약어는 각각 윈도우에 의해 미리 지정된 장치를 의미하는 것으로 파일명이나 폴더명으로도 쓰지 못 합니다. 대표적으로 CON 은 키보드를 PRN 은 프린터를 NUL 은 값이 없는, 빈 곳을(null) 의미합니다.

출력 리다이렉션을 통해 출력의 결과를 파일이 아닌 이러한 곳으로 보낼 수도 있습니다. 다른 것은 모르겠고 프린터를 의미하는 PRN 과 빈 곳을 의미하는 NUL 로는 가끔씩 보내기도 합니다.


☞ 명령의 결과를 프린터로 출력

명령 > prn


☞ 명령의 결과를 출력하지 않음

명령 > nul







파이프 - Pipe


파이프는 우리가 흔히 아는 그 파이프가 맞습니다. 파이프는 이 지점과 저 지점을 연결하여 파이프를 통해 액체나 기체가 한 곳에서 다른 곳으로 흘러갈 수 있게 해주죠. 명령 프롬프트에서 파이프의 역할도 이와 비슷합니다. 명령과 명령을 하나로 연결하여 앞선 명령의 출력을 뒤의 명령의 입력으로 연결해 주는 것이죠. 즉, 출력이 입력으로 자연스럽게 흘러들어가는 겁니다.



  • - 어떤 명령의 표준 출력을 다음 명령의 표준 입력으로 전환하여 두 명령을 마치 하나의 명령처럼 만들어 주는 것
  • - 파이프를 의미하는 | 를 통해 명령과 명령을 연결
  • - | 를 기준으로 좌측 명령의 표준 출력이 우측 명령의 표준 입력이 됨. (표준 출력 | 표준 입력)


Dir 명령과 Sort 명령을 파이프를 통해 연결하여 간단하게 C: 드라이브의 파일 목록만을 역순으로 정렬해서 출력하도록 하죠.



간단하죠? 이러한 파이프는 리다이렉션과 조합하여 사용할 수도 있습니다.





지금까지 윈도우의 명령 프롬프트에서 사용할 수 있는 리다이렉션과 파이프에 대해서 알아보았습니다. 별로 재미없는 내용이지만 목적에 따라 굉장히 유용하게 사용될 수 있는 기능이니 알아두고 계시면 좋을 듯 하여 소개해 드립니다. 이상입니다. ^^


: