리눅스 리다이렉션(Redirection)
재 연결의 사전적인 의미를 가진 Redirection은 리눅스에서 어떻게 활용되는지 알아 보겠습니다. 리눅스 리다이렉션(Redirection)에서 많이 활용되는 명령어 목록은 다음과 같습니다.
✅ 리눅스 리다이렉션: 표준 출력, 표준 오류
리눅스 ls, cat 명령어 등은 기본적인 표준 출력을 나타냅니다. 리눅스 리다이렉션은 표준 입력(Standard Input)과 표준 출력(Standard Output)으로 나뉘기 때문에 I/O 리다이렉션(리디렉션)으로 부릅니다.
1. 표준 출력(Standard Output) 리디렉션
표준 출력의 방향을 재 정의 할 수 있습니다. 화면으로 출력하는 것이 아닌 출력하는 새로 생성한 파일로 리디렉션을 합니다. 오른쪽 부동표 “>” 기호를 사용해서 리디렉션 연산자를 사용하는 예시는 아래와 같습니다.
ls -l www > output.txt
less 명령어로 표준 출력으로 생성한 파일을 확인할 수 있습니다.
less www/output.txt
-rw-r--r-- 1 root root 0 Jan 20 12:41 123test.txt
-rw-r--r-- 1 root root 0 Jan 20 12:41 TestFile.txt
-rw-r--r-- 1 root root 0 Jan 20 12:31 abc.12
-rw-r--r-- 1 root root 0 Jan 20 12:31 abc123
-rw-r--r-- 1 root root 0 Jan 20 12:38 gg1
-rw-r--r-- 1 root root 0 Jan 20 12:38 gg1~
-rw-r--r-- 1 root root 0 Jan 20 12:38 gg2
-rw-r--r-- 1 root root 0 Jan 20 12:38 gg3
1.1 표준 오류(standard error) 리디렉션
디렉토리가 존재하지 않아 표준 오류가 발생했습니다.
ls -l www > output.txt
ls: cannot access www: No such file or directory
-rw-r--r-- 1 root root 0 Feb 3 11:39 output.txt
1.2 표준 출력(Standard Output) 행 추가하기
오른쪽 부동표를 두번 입력해서 “>>” 기존에 존재하는 파일 행 아래에 내용을 추가할 수도 있습니다.
ls -l www/index.html >> output.txt
2. 파일 디스크립터(FD: File descriptor(서술자))와 리디렉션 기호
※파일 디스크립터(File Descriptor)란? 리눅스와 유닉스에서는 시스템을 전부 파일로 처리하여 관리합니다. (하드웨어 등 모든 장치도 포함) 시스템에서 프로세스가 파일에 접근하기 위한 방법으로 파일 디스크립터(FIle Descriptor)라는 핸들이 필요합니다. 해당 파일을 open할때(해당 파일에 접근할 때) 파일 디스크립터는 0부터 N까지 즉, 음수가 아닌 0부터 차례대로 숫자를 부여 받습니다. 0, 1, 2는 프로세스가 메모리에서 실행을 시작할 때 기본적으로 할당되는 파일 디스크립터입니다.
리눅스 셸은 디스크립터를 각각 0, 1, 2로 표현합니다.
표준 입력이 0, 표준 출력이 1, 표준 오류는 2로 표시합니다.
I/O 리디렉션 | 리디렉션 | 리디렉션 추가 | 표준 입력 리디렉션 |
> | >> | < | |
파일 디스크립터 | 표준입력 | 표준 출력 | 표준 오류 |
0 | 1 ( >와 1>은 동일한 의미) | 2 |
~]# ls -l abc(없는 파일) 2> abc.txt
ls: cannot access abc: No such file or directory
~]# cat abc.txt
cat: abc.txt: No such file or directory
리다이렉션 기호 | 방향 | 의미 |
> | 표준 출력 | 명령 > 파일 : 명령의 결과를 파일로 저장 |
>> | 표준 출력 (추가) | 명령 >> 파일 : 명령의 결과를 기존 파일에 추가하여 저장 |
< | 표준 입력 | 명령 < 파일 : 파일의 내용을 명령에 입력 |
2.1 I/O 리디렉션 하나의 파일로 리디렉션 하기
표준 출력과 표준 오류를 하나의 파일로 리디렉션 하는 방법은 다음과 같습니다. 리눅스 셸에서 사용되던 가장 전통적인 방법입니다.
ls -l www > www.txt 2>&1
ls -l www &> www.txt
ls -l www &>> www.txt
2.2 리눅스 리다이렉션 “/dev/null”로 보내기
없는 파일로 리디렉션을 할 때 다음과 같이 사용할 수 있습니다.
2.4 리눅스 리다이렉션에서 엠퍼센트(&) 의미
표준 오류로 재정의 시 “2>&1″에 포함된 엠퍼센트는 리디렉션 연산자의 문자 역할을 합니다.
✅ 표준 입력(Standard Input) 연산자와 파이프라인(Pipeline) 연산자
명령행 인자 없이 cat 명령어를 입력 했을 때 아무 일도 일어나지 않지만 cat 명령어는 표준 입력으로 실행되고 있습니다. [Ctrl-d] 키로 빠져 나옵니다.
~]# cat
^C
~]#
파이프라인(Pipeline)을 활용하면 표준 출력을 표준 입력으로 연결합니다.
ls /bin /usr/bin | sort | uniq | wc -l
1008
단순한 명령어로 예시를 들었지만 리눅스 다중 명령어 중 하나인 파이프는 리눅스 서버의 각종 로그를 원하는 방식으로 보는데 매우 유용하비다.
>와 |의 차이점
I/O 리디렉션에서 파이프라인 연산자 파이프(|)는 명령의 출력을 두 번째 명령의 입력으로 입력하며, 리디렉션 연산자 오른쪽 부동호(>)는 명령과 파일을 연결해 줍니다.