우노
[Linux] 재지향(Redirection)이란? 본문
- 오늘은 리눅스의 I/O 재지향(redirection)에 대해서 설명드리겠습니다.
- 재지향은 파이프(pipe)와 더불어 리눅스의 명령어들을 훨씬 강력하게 무장시켜주는 역할을 하는 핵심 기능입니다.
개요
리눅스 쉘은 항상 아래와 같이 표준 입출력을 파일 형태 로 열고 있습니다.
- 표준입력 ( stdin: 키보드)
- 표준출력( stdout: 모니터)
- 표준에러( stderr: 모니터)
기본적으로 프로그램은 연산 결과를 출력 장치(파일, 모니터, 프린터 등)로 내보내는데요.
이 출력되는 데이터를 임의로 다른 장치로 보내는 것을 재지향(redirection)이라고 합니다.
다시 말하면 파일이나 프로그램, 명령어 등의 출력을 낚아채어 다른 파일이나 프로그램, 명령어의 표준 입력으로 보내는 것을 말합니다.
사용법
표준 입출력은 파일 형태로 열려 있다고 말씀드렸는데요.
리눅스에서 열려 있는 파일은 파일 디스크립터(file descriptor)를 할당 받게 됩니다.
- 표준 입력(stdin) = 0
- 표준 출력(stdout) = 1
- 표준 에러(stderr) = 2
이렇게 0, 1, 2 의 파일 디스크립터를 할당받기 때문에 이를 이용해서 재지향을 할 수 있습니다.
< file
- 파일로부터 표준 입력을 받도록 재지향합니다.
> file
- 표준 출력을 파일로 재지향 합니다.
- 파일이 없으면 새로 만들고, 파일이 있으면 덮어씁니다.
>> file
- 표준 출력을 파일로 재지향 합니다.
- 파일이 없으면 새로 만들고, 파일이 있으면 파일의 끝에 덧붙입니다.
2>&1
- 표준 에러를 표준 출력으로 재지향합니다.
- 표준 에러도 표준 출력의 자격으로 보내집니다.
예제
명령어 예제
test.py의 입력으로 test.in 파일을 받는다.
python3 test.py < test.in
test.py의 실행결과를 test.out 파일로 저장한다.
python3 test.py > test.out
test.py의 입력으로 test.in 파일을 받고 출력을 test.out 파일에 저장한다.
python3 test.py < test.in > test.out
(Pipe 사용) test.py의 입력으로 test.in을 받고 결과를 test1.py의 입력으로 넣는다.
python3 test.py < test.in | python3 test1.py
python 파일 내부의 stdin, stdout 예제 코드
import re from collections import Counter import sys # 파일 입력 받기 document = sys.stdin.read() # 문자열 전체 소문자로 변환 document_lower = document.lower() # 문자열에서 알파벳과 숫자만 가져와 리스트화 words = re.findall('[a-z0-9]+',document_lower) # 문서에 나타난 단어 리스트 Count word_counts = Counter(words) # 가장 많이 등장한 단어 1000개 뽑아 stdout으로 적기 for word, count in word_counts.most_common(1000): sys.stdout.write(word + '\t' + str(count) + '\n')
'Operating System > Linux & Ubuntu' 카테고리의 다른 글
[Linux] vi에서 여러줄 주석처리/해제하는 방법 (2) | 2021.03.11 |
---|---|
[Linux] vi에서 블럭 지정 후, 한 번에 tab 넣는 방법 (0) | 2021.03.04 |
[Linux] cp (0) | 2020.07.22 |
[Linux] 환경변수설정 (0) | 2020.07.17 |
[Linux] grep (0) | 2020.07.17 |
Comments