리눅스는 CLI(Command Line Interface)명령어 기반 운영체제이기 때문에, 명령어를 input 하거나, 결과가 output 되는 형식으로 이용한다.
파일 디스크립터는 리눅스 운영체제가 특정 파일에 접근할 때 사용되는 값을 의미한다.
리눅스 시스템에서 모든것은 파일로 관리되는데, 입력과 출력도 마찬가지.
이 때 기본적으로 표준 입력, 출력, 오류는 항상 고정으로 0번 1번 2번 파일번호를 가진다.
| 종류 | 영문 | 파일 디스크립터 | 특징 |
|---|---|---|---|
| 표준 입력 스트림 | stdin | 0 | 키보드로 명령어를 치고 엔터를 이용해 입력하는 방식을 의미 |
| 표준 출력 스트림 | stdout | 1 | 키보드로 명령어를 실행하고 정상 종료 시 출력되는 내용을 의미 |
| 표준 오류 스트림 | stderr | 2 | 명령어 실행 시 발생한 에러 메시지 내용을 의미 |
리다이렉션(Redirection)은 말 그대로, 방향을 변경하는것을 의미한다.
리다이렉션은 파일 디스크립터를 활용하여 표준 출력과 에러를 자유롭게 다룰 수 있다.
키보드로 표준 입력을 받거나 화면으로 출력하는 것이 아니라, 파일로 표준 입력을 받고, 파일로 표준 출력을 받는 기능을 의미한다.
| 종류 | 기호 | 사용법 | 설명 |
|---|---|---|---|
| 표준 출력 (덮어쓰기) | > | 명령어 > 파일 | 명령어의 결과를 파일에 덮어씀. |
| 표준 출력 (추가) | >> | 명령어 >> 파일 | 명령어의 결과를 파일에 추가 |
| 표준 입력 | < | 명령어 < 파일 | 파일의 내용을 명령어의 입력으로 사용 |
| 형태 | 의미 |
|---|---|
| [명령어] 1> [파일] | 명령어 > 파일과 같은 의미로, 표준 출력을 파일에 덮어쓴다. |
| [명령어] 2> [파일] | 명령어 실행 시 에러가 발생하면, 에러 내용을 파일에 덮어쓴다. |
| [명령어] 1> [파일] 2> [파일2] | 명령어 실행 시, 결과는 파일에, 에러는 파일2에 덮어쓴다. |
| [명령어] 1> [파일] 2> [파일] | 명령어 실행 시, 표준 출력과 에러를 모두 파일에 쓴다. |
| 형태 | 의미 |
|---|---|
| [명령어] 1> [파일] 2> /dev/null | 명령어 실행 시, 결과는 파일에 쓰고, 에러는 출력하지 않고 버린다. |
| [명령어] > [파일] 2>&1 | 명령어 실행 시, 표준 출력과 에러 모두 파일에 쓴다. |
~$ find / -name *.txt 1>& a.txtfind : 파일 시스템에서 파일을 찾아라.
/ : 루트 디렉토리
-name *.txt : '.txt'확장자를 가진 파일을 찾아라.'.txt' 확장자를 가진 모든 파일의 목록을 a.txt라는 파일에 저장해라.
~$ ls -al -Hello 1> b.txt 2> a.txtls -al : 디렉토리의 내용을 나열. -a는 모든 파일 나열, -l은 자세한 정보 출력.
1> b.txt : 표준 출력(ls -al -Hello 명령어의 출력)을 b.txt 파일에 저장.
2> a.txt : 표준 에러 출력(ls -al -Hello 명령어에서 발생하는 모든 오류 메시지)을 a.txt 파일에 저장.ls -al -Hello 명령어의 정상적인 출력은 b.txt에 저장되고, 오류메시지는 a.txt에 저장된다.
~$ ls -Hello > c.txt 2>&1ls를 사용해 -Hello인 특정 옵션과 함께 디렉토리의 내용을 나열하고, 그 결과와 오류 메시지를 함께 c.txt 파일에 저장