ioerror

<, >, >> 사용법 및 옵션 - 표준 입출력 리다이렉션(재지정) 연산자 본문

OS

<, >, >> 사용법 및 옵션 - 표준 입출력 리다이렉션(재지정) 연산자

반응형

<, >, >> 사용법 및 옵션 - 표준 입출력 리다이렉션(재지정) 연산자

<, >, >> - Input/Output Redirection Operators

표준 입출력 리다이렉션(재지정) 연산자

명령어의 표준 입력(stdin), 표준 출력(stdout), 표준 에러(stderr)의 데이터 흐름 방향을 기본 터미널 화면이나 키보드가 아닌 파일 또는 다른 파일 기술자(File Descriptor)로 변경하는 유닉스 및 리눅스 쉘(Shell)의 핵심 리다이렉션 연산자이다.

1. 명령어 용도

  • 사용가능 OS, Shell: POSIX 호환 모든 유닉스 및 리눅스 쉘 (bash, zsh, ksh, sh 등)
  • 명령어의 실행 결과를 파일로 저장하거나 로그 기록을 누적하여 백업하는 경우
  • 파일의 내용을 키보드 입력 대신 명령어의 표준 입력으로 전달하는 경우
  • 크론탭(crontab) 또는 자동화 스크립트 실행 시 로그 및 에러 메시지를 지정된 파일로 분리하여 기록하는 경우

2. 명령어 서식

Bash
 
# 1. 입력 리다이렉션 (Input Redirection)
command < input_file

# 2. 출력 리다이렉션 (덮어쓰기 - Output Redirection Overwrite)
command > output_file

# 3. 출력 리다이렉션 (추가하기 - Output Redirection Append)
command >> output_file

3. 명령어 옵션

  • 주요 옵션 소개 테이블
연산자/구문 설명 사용가능 OS 및 쉘
< file 지정한 파일의 내용을 명령어의 표준 입력(stdin, FD 0)으로 전달하다. [POSIX/Shell]
> file 명령어의 표준 출력(stdout, FD 1)을 파일로 리다이렉션하여 기존 내용을 덮어쓰다. [POSIX/Shell]
>> file 명령어의 표준 출력(stdout, FD 1)을 파일로 리다이렉션하여 기존 내용 끝에 추가하다. [POSIX/Shell]
2> file 명령어의 표준 에러(stderr, FD 2)를 파일로 리다이렉션하여 덮어쓰다. [POSIX/Shell]
2>> file 명령어의 표준 에러(stderr, FD 2)를 파일로 리다이렉션하여 끝에 추가하다. [POSIX/Shell]
&> file 또는 >& file 표준 출력과 표준 에러를 모두 지정한 파일로 리다이렉션하다 (덮어쓰기). [Bash/zsh]
&>> file 표준 출력과 표준 에러를 모두 지정한 파일 끝에 추가하다. [Bash 4.0+/zsh]
2>&1 표준 에러(FD 2)를 표준 출력(FD 1)이 가리키는 곳으로 리다이렉션하다. [POSIX/Shell]
1>&2 표준 출력(FD 1)을 표준 에러(FD 2)가 가리키는 곳으로 리다이렉션하다. [POSIX/Shell]
<< WORD 히어 다큐먼트(Here Document) 형태로 지정한 키워드(WORD)가 나올 때까지의 입력 스트림을 전달하다. [POSIX/Shell]
<<< "string" 히어 스트링(Here String) 형태로 단일 문자열을 표준 입력으로 직접 전달하다. [Bash/zsh/ksh]
`> file` noclobber 옵션이 활성화된 상태에서도 강제로 파일에 덮어쓰다.
  • 명령어 옵션 사용시 결과 예시
Bash
 
# 1. 입력 리다이렉션 (<) - 파일 내용을 cat 명령의 입력으로 전달
cat < input.txt
# output:
# Hello Linux World

# 2. 출력 리다이렉션 (>) - 실행 결과를 파일로 저장 (덮어쓰기)
date > log.txt
cat log.txt
# output:
# Sun Aug  9 16:37:10 KST 2026

# 3. 추가 출력 리다이렉션 (>>) - 파일 끝에 실행 결과 누적
echo "Line 2" >> log.txt
cat log.txt
# output:
# Sun Aug  9 16:37:10 KST 2026
# Line 2

# 4. 표준 출력과 표준 에러 병합 리다이렉션 (2>&1 및 &>)
ls /valid_dir /invalid_dir > output.log 2>&1
cat output.log
# output:
# ls: cannot access '/invalid_dir': No such file or directory
# /valid_dir:
# file1.txt  file2.txt

# 5. 히어 스트링 (<<<)을 이용한 단일 문자열 전달 [Bash/zsh]
grep "error" <<< "system error occurred"
# output:
# system error occurred

4. 명령어 특이사항(유의사항)

  • noclobber 옵션과 > 덮어쓰기 방지: 쉘 환경에서 set -o noclobber가 설정되어 있으면 > 연산자로 기존 파일에 덮어쓰기를 시도할 때 cannot overwrite existing file 오류가 발생하며 파일 훼손이 방지된다. 강제로 덮어쓰려면 >| 연산자를 사용해야 하다.
  • 리다이렉션 구문 순서의 중요성 (> file 2>&1 vs 2>&1 > file): command > file 2>&1 구문은 표준 출력을 먼저 파일로 보낸 뒤 표준 에러를 표준 출력이 가리키는 동일한 파일로 전달하므로 두 출력이 모두 파일에 기록된다. 반면 command 2>&1 > file 순서로 작성하면 표준 에러가 현재 터미널(stdout)로 먼저 연결된 후 표준 출력만 파일로 전달되므로 에러 메시지가 파일에 저장되지 않고 화면에 출력되다.
  • 권한 승격(sudo) 시 리다이렉션 실행 주체: sudo echo "data" > /root/file.txt 실행 시 echo 명령만 root 권한으로 작동하며, > 파일 쓰기는 현재 쉘의 일반 사용자 권한으로 수행되어 Permission denied 오류가 발생하다. 이를 해결하려면 echo "data" | sudo tee /root/file.txt 또는 sudo sh -c 'echo "data" > /root/file.txt' 형식을 사용해야 하다.
  • 파일 기술자(File Descriptor) 번호: 0은 표준 입력(stdin), 1은 표준 출력(stdout), 2는 표준 에러(stderr)를 나타내며, 연산자 바로 앞에 붙여 사용할 때 숫자와 연산자 사이에 공백이 없어야 하다 (예: 2>, 1>).

관련 명령어들

  • tee: 표준 입력을 받아 표준 출력과 지정한 하나 이상의 파일에 동시에 기록하다.
  • cat: 파일 내용을 출력하거나 여러 파일을 하나로 연결하다.
  • pipe (|): 한 명령어의 표준 출력을 다른 명령어의 표준 입력으로 직접 전달하다.
  • /dev/null: 모든 입력을 무시하고 버리는 유닉스 특수 장치 파일이다.

https://ioerror.tistory.com/entry/UNIX-Linux-Command-Reference

 

UNIX & Linux Command Reference

유닉스 / 리눅스 명령어 표유닉스와 리눅스 환경에서 자주 사용되는 필수 명령어들을 완벽하게 정리한다. 서버 관리, 프로그래밍, 일상적인 시스템 운영 등 어떤 목적이든 터미널 환경을 능숙하

ioerror.tistory.com

 

반응형
Comments