답변:
wtmp
(과 utmp
) 파일은 다시 1970 년대에 날짜 및 디자이너는 많은 이유를 제공하지 않았다. 당신이 볼 수있는 것은 그입니다 utmp
및 wtmp
고정 길이 레코드를 사용하여 기록 회계 정보는 텍스트 로그 파일은 디스크에 더 많은 공간을 사용하고 단지 바이너리 기록을 작성하는 것보다 메시지를 포맷하는 데 시간이 더 걸렸을 것이다.
추가 자료 (Unix 6th edition manual pages) :
또한, 1 판 (NO wtmp
이 ) :
"고정 된 크기의 레코드"에는 몇 가지 이점이 있습니다. 따라서 utmp / wtmp 레코드의 히스토리 구조는
struct utmp {
char ut_line[8]; /* tty name */
char ut_name[8]; /* user id */
char ut_host[16]; /* host name, if remote */
long ut_time; /* time on */
};
(이것은 SunOS 4 시스템에서 온 것입니다. 읽기 쉬운 항목이기 때문에 방금 선택했습니다.)
따라서 sizeof(struct utmp)
바이트 를 건너 뛰기 만하면 파일에 데이터를 쉽게 추가하고 역순으로 표시 할 수 있습니다. 이것은 프로그램 last
이 역순으로보고 하는 것을 쉽게합니다 .
정확한 데이터 구조는 시간이 지남에 따라 변경되었지만 레코드 크기는 여전히 고정되어 있습니다.
예를 들어 현재 FreeBSD 머신은 다음을 가지고 있습니다 :
struct utmpx {
short ut_type; /* Type of entry. */
struct timeval ut_tv; /* Time entry was made. */
char ut_id[8]; /* Record identifier. */
pid_t ut_pid; /* Process ID. */
char ut_user[32]; /* User login name. */
char ut_line[16]; /* Device name. */
#if __BSD_VISIBLE
char ut_host[128]; /* Remote hostname. */
#else
char __ut_host[128];
#endif
char __ut_spare[64];
};
또 다른 장점 utmp
및 lastlog
이 할 수있는 능력이다 스파 스 파일을.
예를 들어, 명령 이 lastlog
( finger
마지막 로그인 시간을 표시하는 데 사용) 데이터는 uid
*에 기반한 오프셋에 저장됩니다 sizeof(struct lastlog)
. 계산 된 위치를 찾아 uid 12345678의 마지막 로그인 시간을 빠르고 쉽게 찾을 수 있습니다.
텍스트 파일에는 이러한 이점이 없습니다. 각 레코드는 가변 너비 이거나 채워 져야합니다. 결과가 더 크고 처리하기 어려우며 구문 분석이 필요할 수 있습니다 ( long ut_time
ASCII 날짜 문자열을 구문 분석하는 것보다 처리하기가 더 쉽습니다).
ASCII는 사람과 사람이 조작해야하는 데이터에 적합합니다. 이진은 프로그램, 특히 사람이 반드시 볼 필요가없는 원시 데이터의 경우에 더 좋습니다.