바이너리 파일 Linux / var / log / wtmp [닫힘]


1

왜 Linux 바이너리의 일부 파일이 있습니까? 예를 들어 / var / log / wtmp log? 더 정확하게 왜 이진 형식의 로그입니까?


로그 파일이 아닌 데이터베이스이기 때문에?
Satō Katsura

답변:


2

wtmp(과 utmp) 파일은 다시 1970 년대에 날짜 및 디자이너는 많은 이유를 제공하지 않았다. 당신이 볼 수있는 것은 그입니다 utmpwtmp고정 길이 레코드를 사용하여 기록 회계 정보는 텍스트 로그 파일은 디스크에 더 많은 공간을 사용하고 단지 바이너리 기록을 작성하는 것보다 메시지를 포맷하는 데 시간이 더 걸렸을 것이다.

추가 자료 (Unix 6th edition manual pages) :

또한, 1 판 (NO wtmp ) :


0

"고정 된 크기의 레코드"에는 몇 가지 이점이 있습니다. 따라서 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];
};

또 다른 장점 utmplastlog이 할 수있는 능력이다 스파 스 파일을.

예를 들어, 명령 이 lastlog( finger마지막 로그인 시간을 표시하는 데 사용) 데이터는 uid*에 기반한 오프셋에 저장됩니다 sizeof(struct lastlog). 계산 된 위치를 찾아 uid 12345678의 마지막 로그인 시간을 빠르고 쉽게 찾을 수 있습니다.

텍스트 파일에는 이러한 이점이 없습니다. 각 레코드는 가변 너비 이거나 채워 져야합니다. 결과가 더 크고 처리하기 어려우며 구문 분석이 필요할 수 있습니다 ( long ut_timeASCII 날짜 문자열을 구문 분석하는 것보다 처리하기가 더 쉽습니다).

ASCII는 사람과 사람이 조작해야하는 데이터에 적합합니다. 이진은 프로그램, 특히 사람이 반드시 볼 필요가없는 원시 데이터의 경우에 더 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.