맨위로가기

리다이렉션

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

리다이렉션은 명령어의 입력, 출력, 오류를 다른 파일이나 장치로 변경하는 기능이다. `<`는 파일에서 입력을 받아 명령어에 전달하고, `>`는 명령 출력 결과를 파일에 저장하며, `>>`는 파일 끝에 결과를 추가한다. 파이프(`|`)는 한 명령어의 출력을 다른 명령어의 입력으로 연결하며, 표준 입출력 스트림(stdin, stdout, stderr)을 파일 핸들을 통해 명시적으로 지정할 수 있다. `tee` 명령어를 사용하면 표준 출력을 여러 파일이나 파이프에 동시에 전달할 수 있다.

더 읽어볼만한 페이지

  • 도스 기술 - EXE
    EXE 파일 형식은 운영 체제에 따라 다양한 종류가 있는 실행 파일의 한 형태로, DOS MZ 실행 파일에서 PE, PE32+까지 발전해 왔으며, 코드, 데이터, 스택을 별도 관리하고 재배치 항목을 통해 실행 환경에 유연하게 대응하는 특징을 가진다.
  • 도스 기술 - COM 파일
    COM 파일은 CP/M 및 MS-DOS 운영체제에서 사용된 실행 파일 형식으로, 메타데이터 없이 코드와 데이터로 구성되어 64KB 크기 제한을 가지며, 단순한 구조로 극소의 실행 파일을 만들 수 있지만 보안 취약점도 존재한다.
  • 유닉스 - 유닉스 시간
    유닉스 시간은 1970년 1월 1일 00:00:00 UTC부터 경과된 초를 나타내는 시스템으로, 컴퓨터 시스템에서 시간 저장 및 처리에 널리 사용되며 32비트 정수 표현 시 2038년 문제를 야기할 수 있고 64비트 정수로 해결 가능하며, 다양한 시스템에서 타임스탬프로 활용되지만 윤초 처리 차이로 UTC 시간과 완벽히 일치하지는 않는다.
  • 유닉스 - 유닉스 계열
    유닉스 계열은 유닉스 운영체제의 특징과 설계를 공유하는 운영체제들을 지칭하며, 유전적, 상표, 기능적 유닉스로 분류되고 macOS는 상표 유닉스이자 유전적 유닉스에 해당하며 리눅스는 기능적 유닉스의 대표적인 예이다.
  • 윈도우 관리 - 블루스크린
    블루스크린은 윈도우 운영체제에서 발생하는 치명적인 오류로, 컴퓨터 작동을 멈추고 파란색 화면에 오류 메시지를 표시하며, 하드웨어 또는 소프트웨어 문제로 인해 발생하고, 시스템 복원, 안전 모드 부팅 등의 방법으로 대처한다.
  • 윈도우 관리 - 파워셸
    파워셸은 마이크로소프트에서 개발한 작업 자동화 솔루션으로, 명령줄 셸과 스크립트 언어의 기능을 결합하여 윈도우 시스템 관리를 위해 설계되었으며, .NET 프레임워크 기반의 객체 지향적 특징을 갖고 다양한 플랫폼에서 자동화 스크립트 작성 및 실행, 시스템 구성 관리 등에 활용된다.
리다이렉션
컴퓨터 과학에서의 리디렉션
정의
목적프로그램의 표준 스트림 방향을 바꾸는 것
관련 용어파일 디스크립터
표준 스트림
프로세스 간 통신
유닉스 계열 운영체제에서의 리디렉션
기본 개념모든 프로세스는 3개의 표준 스트림을 가짐: 표준 입력 (stdin), 표준 출력 (stdout), 표준 에러 (stderr)
각 스트림은 파일 디스크립터로 표현됨 (0, 1, 2)
리디렉션은 스트림과 연결된 파일을 변경하는 것
명령어 예시`command > file`: 표준 출력을 파일에 기록 (덮어쓰기)
`command >> file`: 표준 출력을 파일에 추가
`command < file`: 파일의 내용을 표준 입력으로 사용
`command 2> file`: 표준 에러를 파일에 기록
`command 2>> file`: 표준 에러를 파일에 추가
`command &> file` 또는 `command >& file`: 표준 출력과 표준 에러를 모두 파일에 기록
`command < input.txt > output.txt`: 표준 입력을 `input.txt`에서, 표준 출력을 `output.txt`로 리디렉션
`command | command2`: command의 표준 출력을 command2의 표준 입력으로 연결 (파이프라인)
파일 디스크립터 복제`dup2(2)` 시스템 호출을 사용하여 파일 디스크립터를 복제 가능
`freopen(3)` 함수를 사용하여 스트림을 다른 파일에 연결 가능
셸에서의 구현
역할셸이 리디렉션을 처리하고, 자식 프로세스에게 리디렉션된 스트림을 제공
방식fork를 사용하여 자식 프로세스를 생성
dup2(2)를 사용하여 파일 디스크립터를 복제
execve(2)를 사용하여 명령어를 실행
역사
최초 구현1964년 MIT의 Multics 시스템에서 입출력 리디렉션 기능 구현
유닉스켄 톰슨이 유닉스에 리디렉션 기능 추가
관련 항목
관련 기능파이프라인
히어 문서
tee 명령어
관련 시스템 콜`dup(2)`
`dup2(2)`
`pipe(2)`
`popen(3)`

2. 표준 입출력 리다이렉션

리다이렉션은 명령어 사이에 특정 문자열을 추가하여 구현된다. 일반적으로 사용되는 구문은 다음과 같다.[1]


  • `명령어1 > 파일1`: `명령어1`을 실행하고 그 출력 결과를 `파일1`에 저장한다. 이때 `파일1`의 기존 내용은 덮어쓰기되어 삭제된다.[1]
  • `명령어1 < 파일1`: `파일1`의 내용을 `명령어1`의 입력으로 사용하여 실행한다. (키보드 입력 대신)[1]
  • `명령어1 < 들어오는파일 > 나가는파일`: `명령어1`은 `들어오는파일`에서 내용을 읽어 들여 `나가는파일`에 기록한다.[1]
  • `>>` 연산자를 사용하면 명령어의 출력을 파일 끝에 추가할 수 있다.[1]

2. 1. 리다이렉션 기본

`명령어 > 파일` 형태로 사용하면 `명령어`의 표준 출력을 `파일`에 저장한다. 이때, `파일`의 기존 내용은 지워지고 새로운 내용으로 덮어쓰기된다. `명령어 >> 파일` 형태로 사용하면 `명령어`의 표준 출력을 `파일`의 끝에 추가한다.[1]

`명령어 < 파일` 형태로 사용하면 `파일`의 내용을 `명령어`의 표준 입력으로 사용한다. 이는 마치 사용자가 키보드로 입력하는 것 대신, 파일의 내용을 입력으로 사용하는 것과 같다.[1]

`명령어 < 입력파일 > 출력파일` 형태로 사용하면 `입력파일`을 읽어 `명령어`를 실행하고, 그 결과를 `출력파일`에 저장한다.[1]

2. 2. 리다이렉션 활용 (Variants)

`command >> file1` 형태로 사용하면 `command`의 표준 출력을 `file1`의 끝에 추가한다.[1] `<<` 연산자를 사용하여 스크립트 내에 직접 입력 데이터를 포함시키는 방식을 히어 문서(Here Document)라고 한다.[1] `<<<` 연산자를 사용하여 문자열을 명령어의 표준 입력으로 전달하는 방식을 히어 문자열(Here String)이라고 한다.[1]

```bash

명령어1 >> 파일1

```

위와 같이 사용하면 `명령어1`의 실행 결과를 `파일1` 끝에 추가한다.

```bash

명령어1 <
문서

!

```

위의 예시에서 `<<` 다음에 오는 문자열은 꼭 "!"가 아니어도 된다. 주로 "!"나 "EOF" 등을 사용하며, 이 문자열은 문서의 끝을 나타낸다.

```bash

tr a-z A-Z <<< "one two three"

```

위와 같이 `<<<` 연산자를 이용해서 문자열을 명령어의 표준 입력으로 전달할 수 있다.

3. 파이프 처리

세 개의 프로그램 파이프라인이 텍스트 터미널에서 실행되는 모습.


파이프(`|`)는 한 명령어의 표준 출력을 다른 명령어의 표준 입력으로 연결하는 기능이다. 여러 명령어를 연결하여 복잡한 작업을 수행할 수 있다.[2]

```bash

명령어1 | 명령어2

```

위 코드는 `명령어1`을 실행하고, 그 출력을 `명령어2`의 입력으로 사용한다.

예를 들어, `echo` 명령어를 다른 명령어와 결합하여 비상호적인 셸에서 상호적인 작업을 수행할 수 있다.

```bash

echo -e "user\npass" | ftp localhost

```

위 코드는 `user`와 `pass`를 입력으로 받아 ftp 클라이언트를 실행한다. 이는 ftp 클라이언트에 사용자 이름과 비밀번호를 자동으로 입력하는 효과를 낸다.

도스 환경에서는 `format` 명령어 사용 시 사용자의 동의(`Y` 키 입력)를 받아야 하지만, 다음과 같이 `echo` 명령어를 함께 사용하면 사용자 동의 없이 C 드라이브를 빠른 포맷할 수 있다.

```dos

echo y | format c: /q

4. 표준 파일 핸들 리다이렉션

유닉스 셸에서는 파일 핸들(파일 디스크립터)을 사용하여 리다이렉션 대상을 명시적으로 지정할 수 있다. 표준 입출력 스트림은 다음과 같이 표현된다.[3][4]

핸들이름설명
0stdin표준 입력
1stdout표준 출력
2stderr표준 오류



예를 들어, `명령어1 2> 파일1`은 `명령어1`을 실행하되, 표준 오류 스트림을 `파일1`로 리다이렉션한다. `command > file 2>&1`와 같이 사용하면 `command`의 표준 출력과 표준 오류를 모두 `file`에 저장할 수 있다.

일부 셸에서는 `&>` 또는 `>&`와 같이 표준 출력과 표준 오류를 함께 리다이렉션하는 단축 표현을 지원하기도 한다. 예를 들어 `command &>file` 또는 `command >&file`과 같이 사용하면 `command > file 2>&1`와 동일한 결과를 얻을 수 있다.

5. 체인 파이프라인

리다이렉션과 파이프를 함께 사용하여 복잡한 명령 체인을 만들 수 있다. 예를 들어 `sort infile | uniq -c | sort -n > outfile` 명령어는 `infile`의 내용을 정렬하고, 중복되는 줄의 발생 횟수를 세며, 그 결과를 다시 숫자 순서로 정렬하여 `outfile`에 저장한다.[5] 이러한 방식은 셸 스크립트배치 파일에서 자주 사용된다.

또 다른 예로,

```bash

ls | grep '\.sh' | sort > shlist

```

명령어는 현재 디렉터리의 내용을 나열하고, `.sh`를 포함하는 줄만 걸러내어 사전순으로 정렬한 후, `shlist` 파일에 저장한다. 이러한 구조는 셸 스크립트배치 파일에서 매우 흔하게 사용된다.

6. 다중 출력 리다이렉션

tee는 명령의 출력을 여러 대상으로 리다이렉션할 수 있다.[1]

```bash

ls -lrt | tee xyz

```

이 명령은 파일 목록 출력을 파일 xyz와 표준 출력 모두에 기록한다.[1]

참조

[1] 간행물 The GNU C Library Reference Manual for version 2.38 https://www.gnu.org/[...]
[2] 웹사이트 KHB: Synthesis: An Efficient Implementation of Fundamental Operating Systems Services https://lwn.net/Arti[...]
[3] 웹사이트 How to redirect shell command output https://www.redhat.c[...] 2022-04-21
[4] 웹사이트 Redirections (Bash Reference Manual) https://www.gnu.org/[...]
[5] 웹사이트 Piping and Redirecting Output in the Linux Terminal https://www.linux.or[...]
[6] 지식백과 방향 지정 (컴퓨터/통신 > 컴퓨터/통신일반) https://terms.naver.[...]
[7] 지식백과 방향 변경 (컴퓨터/통신 > 통신/네트워크 > 컴퓨터네트워크) https://terms.naver.[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com