파일 디스크립터(FD)
1. 개념
-리눅스 혹은 유닉스 계열의 시스템에서 프로세스(process)가 파일(file)에 접근하기 위한 추상적인 키
-유닉스 시스템은 일반적인 파일부터 디렉토리, 소켓, 파이프, 블록/캐릭터 디바이스 등등 모든 객체들을 파일로 관리
-프로세스가 실행 중에, 파일 Open시 커널은 해당 프로세스의 파일 디스크립터 숫자 중 사용하지 않는 가장 작은 값 할당하는데
그 다음 프로세스가 열려있는 파일에 시스템 콜을 이용해서 접근할 때, 파일 디스크립터(FD)값으로 파일에 접근한다
-프로그램이 프로세스로 메모리에서 실행을 시작 할 때, 기본적으로 할당되는 파일 디스크립터 0,1,2 를 제외하고 3부터 fd 할당
FD | ||
0 | 표준 입력 (stdin) | 키보드로 명령을 입력받는 것 |
1 | 표준 출력 (stdout) | 키보드로 입력받은 명령의 실행결과를 모니터로 출력 |
2 | 표준 오류 (stderr) | 에러를 모니터로 출력 |
2. 파일 스크립터(FD) 확인
#PID를 통해서 fd를 조회할 수 있다
$sudo ls -trn /proc/[PID]/fd
3. FD최대값
- FD최대값 = OPEN_MAX
- OPEN_MAX는 limits.h 에 정의되어 있고, OS마다 그 크기가 다름
$getconf OPEN_MAX
256 //값 출력
입출력 리다이렉션
출력 결과를 모니터에 출력하지 않고 파일에 저장
리다이렉션 기호 앞에 디폴트로 1(기본출력)이 지정된다
리다이렉션 기호 | ||
> | 출력 리다이렉션 | 명령 (FD번호)> 파일명 : 명령 결과를 파일에 저장(기존 파일 내용 지우고 덮어씀) |
>> | 출력 리다이렉션 | 명령 (FD번호) >> 파일명 : 명령 결과를 기존 파일 끝에 추가 |
< | 입력 리다이렉션 | 명령 < 파일명 : 파일 내용을 입력 |
기호 | 의미 |
명령 >& 파일명 | 명령이 실행된 표준 출력의 결과와 에러를 파일로 출력 |
명령 >>& 파일명 | 명령이 실행된 표준 출력의 결과와 에러를 파일로 덧붙여 출력 |
명령 >! 파일명 | 파일의 존재유무와 상관없이 생성하고 명령이 실행된 표준 출력의 결과를 파일로 출력 |
명령 >&! 파일명 | 파일의 존재유무와 상관없이 생성하고 명령이 실행된 표준 출력의 결과와 에러를 파일로 출력 |
명령 >>! 파일명 | 파일의 존재 유무와 상관ㅇ벗이 생성하고 파일에 덧붙여 출력 |
명령 >>&! 파일명 | 파일의 존재 유무와 상관없이 생성하고 명령이 실행된 표준 출력의 결과와 에러를 파일이 덧붙여 출력 |
명령A | 명령 B | 명령 A의 출력을 명령 B 입력으로 사용하여 실행 |
명령A |& 명령 B | 명령 A의 출력과 에러를 명령B의 입력으로 사용하여 실행 |
명령 /dev/null 2>&1 |
에러 메세지 미출력 |
- /dev/null : 특수 파일, 디렉터리 아님
널 장치는 일반적으로 리다이렉션에 쓰여지는데 프로세스의 원하지 않는 출력 스트림을 버리거나 입력 스트림을 위해 비어있는 파일의 역할을 하기 위해 사용된다.
https://ko.wikipedia.org/wiki/%EB%84%90_%EC%9E%A5%EC%B9%98
'Shell > 1' 카테고리의 다른 글
/etc/sudoers | visudo (0) | 2021.09.13 |
---|---|
UFW(Uncomplicated Firewal) 설정 (0) | 2021.09.06 |
vim .vimrc환경설정 (0) | 2021.06.19 |
make / Makefile (0) | 2021.05.18 |
touch (0) | 2020.10.15 |