내가 이해하려고 하는 로그시스템 마이닝. 0(표준 입력), 1(표준 출력), 2(표준 오류) 이외의 파일 설명자(예: 3, 6, 7, -2)가 나열되어 있습니다.
이것이 파일 인덱스이거나 메모리의 파일 번호라면 왜 음수가 있습니까?
행사 구성은 이렇습니다.
*%evt.num %evt.time %evt.cpu %proc.name (%thread.tid) %evt.dir %evt.type %evt.args
58650327 12:56:29.887941337 0 clear_console (5527) > open
58650328 12:56:29.887948371 0 clear_console (5527) < open fd=-2(ENOENT) name=/dev/tty0 flags=3(O_RDWR) mode=0
58650329 12:56:29.887949853 0 clear_console (5527) > open
58650330 12:56:29.887954188 0 clear_console (5527) < open fd=-13(EACCES) name=/dev/console flags=3(O_RDWR) mode=0
58650331 12:56:29.887954835 0 clear_console (5527) > open
58650332 12:56:29.887956940 0 clear_console (5527) < open fd=-13(EACCES) name=/dev/console flags=1(O_RDONLY) mode=0
58650333 12:56:29.887957474 0 clear_console (5527) > open
58650334 12:56:29.887959911 0 clear_console (5527) < open fd=-13(EACCES) name=/dev/console flags=2(O_WRONLY) mode=0
58650363 12:56:29.888201994 0 bash (5506) > open
58650390 12:56:29.912662138 0 bash (5506) < open fd=-2(ENOENT) name=/etc/bash.bash_logout flags=1(O_RDONLY) mode=0
58650395 12:56:29.912720036 0 bash (5506) > open
58650396 12:56:29.912735157 0 bash (5506) < open fd=3(<f>/home/ubuntu/.bash_history) name=/home/ubuntu/.bash_history flags=10(O_APPEND|O_WRONLY) mode=0
58650426 12:56:29.953271487 0 bash (5506) > open
58650427 12:56:29.953303756 0 bash (5506) < open fd=3(<f>/home/ubuntu/.bash_history) name=/home/ubuntu/.bash_history flags=1(O_RDONLY) mode=0
58650541 12:56:29.962503103 0 sshd (5495) > open
58650542 12:56:29.962537862 0 sshd (5495) < open fd=6(<f>/etc/passwd) name=/etc/passwd flags=4097(O_RDONLY|O_CLOEXEC) mode=0
58650559 12:56:29.962636515 0 sshd (5495) > open
58650560 12:56:29.962646634 0 sshd (5495) < open fd=6(<f>/var/run/utmp) name=/var/run/utmp flags=4097(O_RDONLY|O_CLOEXEC) mode=0
58651059 12:56:29.997560921 0 sshd (5495) > open
58651060 12:56:29.997629170 0 sshd (5495) < open fd=7(<f>/var/run/utmp) name=/var/run/utmp flags=4099(O_RDWR|O_CLOEXEC) mode=0
58651091 12:56:29.997727995 0 sshd (5495) > open
58651092 12:56:29.997768935 0 sshd (5495) < open fd=6(<f>/var/log/wtmp) name=/var/log/wtmp flags=2(O_WRONLY) mode=0
58651991 12:56:30.016524060 0 sshd (5495) > open
58651992 12:56:30.016573912 0 sshd (5495) < open fd=4(<f>/etc/login.defs) name=/etc/login.defs flags=1(O_RDONLY) mode=0
58652240 12:56:30.053254470 0 sshd (5495) > open
58652241 12:56:30.053280905 0 sshd (5495) < open fd=4(<f>/etc/passwd) name=/etc/passwd flags=4097(O_RDONLY|O_CLOEXEC) mode=0
답변1
open()
(참고자료 참조)을 사용하여 파일을 열면 파일 man 2 open
설명자( int
C 언어)를 얻게 됩니다. 표준 스트림은 설명자 0, 1, 2와 연결되어 있으며 다른 모든 열린 파일 스트림에는 이와 연결된 별도의 설명자가 있습니다.
한 번에 열 수 있는 파일 수에는 일반적으로 약 512 또는 1024개( ulimit -Hn
하드 캡 참조)로 제한되어 있으며 열려 있는 각 파일에는 연결된 파일 설명자가 있습니다.
개념적으로 이는 커널이 유지 관리하는 배열에 대한 인덱스일 뿐입니다. 파일 설명자와 세 가지 표준 스트림을 제외한 다른 스트림 사이에는 고정된 연관이 없습니다.
질문에 추가한 로그에는 오류 코드( ENOENT
및 )와 EACCESS
관련된 "부정 파일 설명자"가 표시됩니다. 시스템 open()
호출은 오류 시 음수를 반환합니다.
man errno
이러한 오류 코드에 대한 설명은 참고자료를 참조하세요 .
파일 설명자는 프로세스별로 작성되므로 프로세스 A의 파일 설명자 6은 프로세스 B의 파일 설명자 6과 동일한 스트림이 아닙니다.