본문 바로가기
공부/정보보안기사

<정보보안기사> 1. 시스템 이론 - 파일 디스크립터(FD)와 입출력 재지정(I/O Redireciton)

by Richard_Hoon 2024. 11. 14.
반응형

 

 

입출력 재지정(I/O Redirection) 이란?

 

컴퓨터 프로그램이 일반적으로 사용하는 표준 입력(키보드) - FD:0 , 표준 출력(모니터) - FD:1 , 표준 에러 출력 - FD:2 를 다른 곳으로 바꿔주는 기능.

 

0, 1, 2는 입출력 재지정 시 자주 사용할 숫자라 기억해야함.

 

 

유닉스/리눅스에서 모든 것이 파일로 취급되는 이유

 

FD에 대해 알기 전에 이 내용을 알면 좋은데,

유닉스/리눅스 시스템에서는 모든 것이 파일로 취급된다고 할 수 있고 이는 4가지로 생각하면 됨.

 

1. 일관성 : 모든 자원을 파일로 취급함으로써, 다양한 종류의 자원을 동일한 방식으로 다뤄 시스템 복잡성을 줄이고 관리에 용이

2. 단순화 : 파일 시스템이라는 단일 추상화 계층을 통해 시스템을 구성하여 시스템을 이해하고 사용하기에 용이

3. 확장성 : 새로운 하드웨어나 소프트웨어를 추가할 때, 파일 시스템에 통합하기 용이

4. 유연성 : 다양한 파일 시스템(NTFS, ext4, XFS 등)을 지원하며 필요에 따라 파일 시스템을 교체하거나 추가할 수 있음

 

분류 예시)

 

 - 일반 파일 : 텍스트 파일, 이미지 파일, 실행 파일 등

 - 디렉터리 : 파일과 다른 디렉터리를 포함하는 특수한 종류의 파일

 - 네트워크 소켓 : 네트워크 통신을 위한 연결점을 나타내는 파일

 - 하드웨어 장치 : 키보드, 마우스, 디스크 드라이브 등 하드웨어 장치를 파일처럼 접근하여 입출력 수행 가능

 

 

FD(File Descriptor) 란?

 

 - 유닉스/리눅스 시스템에서 프로세스가 파일을 다룰 때 사용하는 추상적인 번호

 - 쉽게 말해 프로세스가 어떤 파일을 열었는지 기억하기 위한 일종의 파일포인터

 

표준 FD 설명은 다음과 같음

0 (STDIN) 표준 입력 (보통 키보드)
1 (STDOUT) 표준 출력 (보통 화면)
2 (STDERR) 표준 에러출력 (보통 화면)

 

 

 - 프로세스가 새로 생성될 때, 시스템은 기본적으로 표준입력, 표준출력, 표준 에러를 나타내는 FD 3개를 자동으로 할당함.

 - 이때 FD는 프로세스가 열린 파일을 식별하기 위해 사용하는 번호(0, 1, 2) 임

 - 고정된 번호를 가지므로 프로그램에서 별도 지정하지 않아도 쉽게 사용 가능

 

예시 설명)

 

ls 명령어를 실행하면 표준 출력(1)으로 파일 목록이 모니터 화면에 출력되는데, 이는 ls 명령어가 별도 출력 파일을 지정하지 않아도 자동으로 표준출력(모니터)에 결과를 보내기 때문

 

 

입출력 재지정(I/O Redirection)을 사용하는 이유

 

물줄기를 다른 곳으로 돌리는 것처럼 유동적으로 데이터 흐름을 바꾸기 위함.

 

 - 입력 재지정(Input Redirection)

   : 표준 입력을 키보드로 받는 것이 아닌 파일에서 읽도록 재지정하는 것

 

 - 출력 재지정(Output Redirection)

   : 표준 출력이나 표준 에러를 모니터(=터미널 화면)가 아닌 파일로 저장하게 재지정하는 것

 

 

 

입출력 재지정(I/O Redirection) 사용하는 방법

 

입출력 재지정은 특수문자를 사용하여 명령어와 사용함.

 

> 해당 내용(표준 출력)을 파일로 보냄 => 덮어쓰기로 이전 자료 지우고 새로 작성
>> 파일의 끝에 내용(표준 출력) 추가 => append방식으로 이전 자료에 계속 추가
< 파일의 내용을 표준 입력으로 사용
2> 표준 에러를 파일로 보냄
2>&1 표준 에러를 표준 출력과 같은 파일로 보냄

 

 

간단 예시

 

ls 1>list.txt 현재 디렉토리 파일 목록을 filelist.txt파일에 저장
ls >list.txt 위와 같음, 1은 표준출력(모니터)으로 생략 가능
ls >>list.txt 현재 디렉토리 파일 목록을 list.txt 파일 자료에 추가해서 저장
command 2> error.log command 명령어 실행 시 발생하는 모든 에러 메시지를 error.log 파일에 저장
command 2>> error.log command 명령어 실행 시 발생하는 모든 에러 메시지를 error.log 파일 맨 끝에 추가하여 저장
command 2> error.log command 명령어 실행 시 발생하는 에러 메시지를 error.log 파일에 저장

 

 

그냥 참고하면 좋을 예시

 

ls > list.txt 현재 디렉토리 파일 목록을 filelist.txt파일에 저장
grep 'error' log.txt > errors.txt log.txt파일에서 'error'라는 단어를 찾아 errors.txt 파일에 저장
cat file1.txt file2.txt > merget.txt file1.txt 와 file2.txt 파일 내용을 합쳐서 mergetd.txt 파일에 저장
find .-name "*.txt > textfiles.txt 확장자가 txt인 파일을 현재 디렉토리 및 하위 디렉토리에서 찾아 textfiles.txt파일에 저장

 

 

반응형

댓글