파일 디스크립터는 운영 체제가 프로세스와 파일, 소켓, 파이프 등의 입력 및 출력을 관리하기 위해 사용하는 정수 값입니다. 각 프로세스는 세 가지 기본 파일 디스크립터를 가집니다:
표준 입력 (stdin)
파일 디스크립터: 0
설명: 표준 입력은 프로세스가 데이터를 읽어들이는 기본 스트림입니다. 일반적으로 사용자 입력을 받기 위해 사용됩니다.
기본 입력 장치: 키보드 (기본적으로는 사용자가 터미널에 입력하는 데이터)
예시:이 명령어를 실행한 후에 입력된 내용이 화면에 출력됩니다. 입력을 종료하려면 Ctrl+D를 누릅니다.
cat 명령어는 기본적으로 표준 입력으로부터 데이터를 읽습니다. 터미널에서 cat을 실행하고 입력을 하면, 입력된 데이터가 화면에 출력됩니다.cat
표준 출력 (stdout)
파일 디스크립터: 1
설명: 표준 출력은 프로세스가 데이터를 출력하는 기본 스트림입니다. 결과를 사용자에게 표시하기 위해 사용됩니다.
기본 출력 장치: 모니터 (기본적으로는 터미널에 출력되는 데이터)
예시:이 명령어는 "Hello, World!"를 터미널에 출력합니다.
echo 명령어는 표준 출력을 사용하여 문자열을 출력합니다.echo "Hello, World!"
표준 에러 출력 (stderr)
파일 디스크립터: 2
설명: 표준 에러 출력은 프로세스가 오류 메시지를 출력하는 기본 스트림입니다. 일반적으로 오류나 경고를 사용자에게 전달하기 위해 사용됩니다.
기본 출력 장치: 모니터 (기본적으로는 터미널에 오류 메시지가 출력됨)
예시:이 명령어는 오류 메시지를 터미널에 출력합니다.
ls 명령어를 사용해 존재하지 않는 디렉토리를 조회할 때, 오류 메시지가 표준 에러로 출력됩니다.ls non_existent_directory
리디렉션을 사용하면 표준 입력, 출력, 에러 출력을 파일이나 다른 스트림으로 변경할 수 있습니다.
command < inputfilecat < file.txt는 file.txt 파일의 내용을 표준 입력으로 사용하여 cat 명령어가 내용을 읽습니다.command > outputfileecho "Hello" > file.txt는 "Hello"를 file.txt 파일에 기록합니다. 파일이 존재하면 덮어쓰고, 존재하지 않으면 새로 생성합니다.command 2> errorfilels non_existent_directory 2> error.log는 오류 메시지를 error.log 파일에 기록합니다.command > outputfile 2> errorfilecommand > output.log 2> error.log는 표준 출력을 output.log에, 표준 에러를 error.log에 기록합니다.command > outputfile 2>&1command > all.log 2>&1는 표준 출력과 표준 에러를 모두 all.log 파일에 기록합니다