리다이렉션
"오늘의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]
핸들 | 이름 | 설명 |
---|---|---|
0 | stdin | 표준 입력 |
1 | stdout | 표준 출력 |
2 | stderr | 표준 오류 |
예를 들어, `명령어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