입출력 재지정(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파일에 저장 |
'공부 > 정보보안기사' 카테고리의 다른 글
<정보보안기사> 1. 시스템 이론 - 하드 링크(hard link)와 심볼릭 링크(symbolic link) (0) | 2024.11.16 |
---|---|
<정보보안기사> 1. 시스템 이론 - 파일 시스템 개요(부트 블록, 슈퍼 블록, 아이노드 리스트, 데이터 블록) (0) | 2024.11.15 |
<정보보안기사> 1. 시스템 이론 (ㄴ. UNIX/Linux 기본1) (0) | 2024.11.13 |
<정보보안기사> 1. 시스템 이론 (ㄱ. 윈도우 기본) (0) | 2024.11.12 |
댓글