Manpages

이 름

utmp, wtmp − 로 그 인 레 코 드 .

사 용 법

#include <utmp.h>

설 명

utmp 파 일 은 현 재 누 가 시 스 템 을 사 용 하 고 있 는 지 에 대 한 정 보 를 알 려 준 다 . 모 든 프 로 그 램 이 utmp 로 그 를 사 용 하 는 것 은 아 니 기 때 문 에 , 현 재 더 많 은 사 용 자 가 있 을 수 있 다 .

Warning: utmp 는 쓰 기 가 가 능 하 지 않 아 야 한 다 . 왜 냐 하 면 많 은 프 로 그 램 들 이 (어 리 석 게 도 ) 이 것 의 완 전 하 리 라 생 각 하 기 때 문 이 다 . utmp 를 쓰 기 가 능 상 태 로 두 면 , 가 짜 시 스 템 로 그 파 일 이 생 길 수 도 있 고 , 시 스 템 파 일 이 변 경 될 수 도 있 다 .

이 파 일 은 안 에 포 함 된 파 일 에 선 언 된 구 조 에 따 른 엔 트 리 의 시 퀀 스 이 다 . (이 것 은 여 러 정 의 중 하 나 임 을 명 심 하 자 ; 자 세 한 것 은 libc의 버 전 에 따 라 다 르 다 .):

#define UT_UNKNOWN

0

#define RUN_LVL

1

#define BOOT_TIME

2

#define NEW_TIME

3

#define OLD_TIME

4

#define INIT_PROCESS

5

#define LOGIN_PROCESS

6

#define USER_PROCESS

7

#define DEAD_PROCESS

8

#define ACCOUNTING

9

#define UT_LINESIZE

12

#define UT_NAMESIZE

32

#define UT_HOSTSIZE

256

struct exit_status {

short int e_termination;

/* process termination status. */
short int e_exit;

/* process exit status. */

};

struct utmp {

short ut_type;

/* type of login */
pid_t ut_pid;

/* pid of login process */
char ut_line[UT_LINESIZE];

/* device name of tty − "/dev/" */
char ut_id[4];

/* init id or abbrev. ttyname */
char ut_user[UT_NAMESIZE];

/* user name */
char ut_host[UT_HOSTSIZE];

/* hostname for remote login */
struct exit_status ut_exit;

/* The exit status of a process

marked as DEAD_PROCESS. */
long ut_session;

/* session ID, used for windowing*/
struct timeval ut_tv;

/* time entry was made. */
int32_t ut_addr_v6[4];

/* IP address of remote host. */
char pad[20];

/* Reserved for future use. */

};

/* Backwards compatibility hacks. */
#define ut_name ut_user
#ifndef _NO_UT_TIME
#define ut_time ut_tv.tv_sec
#endif
#define ut_xtime ut_tv.tv_sec
#define ut_addr ut_addr_v6[0]

이 구 조 는 사 용 자 의 터 미 널 , 사 용 자 의 로 그 인 명 , time(2) 의 형 태 로 나 타 낸 로 그 인 시 간 에 관 련 된 특 수 파 일 의 이 름 을 출 력 한 다 . 영 역 의 크 기 보 다 작 다 면 문 자 열 영 역 은 ’\0’로 끝 난 다 .

첫 번 째 엔 트 리 는 항 상 inittab(5)를 실 행 하 는 init(8)로 인 한 결 과 를 생 성 한 다 . 엔 트 리 가 실 행 되 기 전 에 , init(8)ut_typeDEAD_PROCESS로 설 정 하 고 , ut_typeDEAD_PROCESSRUN_LVL가 아 니 고 , PID ut_pid로 실 행 하 는 것 이 없 는 각 각 의 기 록 을 위 해 ,ut_user, ut_host, ut_time을 null 바 이 트 로 지 움 으 로 써 utmp를 지 운 다 . 필 요 한 ut_id 에 빈 기 록 을 찾 을 수 없 다 면 , init는 새 로 운 것 을 만 든 다 . 이 것 은 inittab, ut_pid, ut_time로 부 터 ut_id을 현 제 값 으 로 , ut_typeINIT_PROCESS로 설 정 한 다 .

getty(8)는 pid로 엔 트 리 를 찾 고 , ut_typeLOGIN_PROCESS로 바 꾸 고 , ut_time을 바 꾸 고 , ut_line을 설 정 하 고 , 접 속 을 기 다 린 다 . 믿 을 수 있 음 이 증 명 된 후 에 , login(8)ut_typeUSER_PROCESS로 바 꾸 고 , ut_time을 바 꾸 고 , ut_hostut_addr을 설 정 한 다 getty(8)login(8)에 따 라 , 기 록 은 적 당 한 ut_pid 대 신 , ut_line으 로 발 견 된 다 .

init(8)는 프 로 세 스 가 종 료 된 것 을 발 견 하 면 , utmp 항 목 을 ut_pid 옆 에 위 치 시 키 고 , ut_type를 READ_PROCESS으 로 설 정 하 며 , ut_user, ut_host 그 리 고 ut_time를 null 바 이 트 로 소 거 한 다 .

xterm(1)와 다 른 터 미 널 에 뮬 레 이 터 는 USER_PROCESS 기 록 을 만 들 고 , /dev/ttyp%c의 마 지 막 두 문 자 를 사 용 하 거 나 , /dev/pts/%d에 대 한 p%d를 사 용 함 으 로 서 , ut_id를 생 성 시 킨 다 . 만 일 이 들 이 이 ID에 대 한
DEAD_PROCESS를 발 견 한 다 면 , 그 들 은 이 를 재 사 용 할 것 이 고 , 그 렇 지 않 으 면 , 새 로 운 엔 트 리 를 만 든 다 . 만 일 발 견 할 수 있 다 면 , 그 아 이 디 를 DEAD_PROCESS로 서 표 기 하 고 , 이 들 은 또 한 ut_line, ut_time, ut_user 그 리 고 ut_host로 null 처 리 한 다 .

할 당 된 터 미 널 이 없 으 면 , xdm(8)는 utmp 기 록 을 만 들 어 서 는 안 된 다 . 이 를 하 나 만 들 도 록 허 용 하 는 것 은 다 음 과 같 은 문 제 들 의 원 인 이 된 다 . 핑 거 (finger), /dev/machine.dom을 시 작 할 수 없 다 . 그 러 나 , ftpd(8)가 하 는 것 처 럼 wtmp 엔 트 리 를 만 들 어 야 한 다 .

telnetd(8)LOGIN_PROCESS 엔 트 리 를 설 정 하 고 , login(8) 나 머 지 부 분 은 보 통 과 같 이 남 겨 둔 다 . 텔 넷 세 션 이 끝 난 후 , telnetd(8)는 utmp는 설 명 한 방 식 으 로 소 거 한 다 .

wtmp 파 일 은 모 든 로 그 인 과 로 그 아 웃 을 기 록 한 다 . 이 파 일 의 포 맷 은 널 사 용 자 이 름 이 관 련 된 터 미 널 에 서 로 그 아 웃 을 가 리 키 는 것 을 제 외 하 고 는 거 의 utmp과 비 슷 하 다 . 더 욱 이 , 사 용 자 이 름 "shutdown" 혹 은 "reboot"을 지 닌 터 미 널 이 름 "~"은 시 스 템
셧 다 운 혹 은 리 부 트 를 가 리 키 고 , 터 미 널 이 름 쌍 "|"/"}"date(1)이 이 를 변 경 시 킬 때 , 오 래 된 /새 로 운 시 스 템 을 로 그 로 기 록 한 다 . wtmplogin(1), init(1), WfIgetty(1)의 일 부 버 전 에 의 해 유 지 된 다 . 이 러 한 프 로 그 램 들 중 하 나 도 파 일 을 만 들 지 못 하 므 로 , 만 일 삭 제 되 면 , 기 록 유 지 는 되 지 않 는 다 .

파 일

/var/run/utmp
/var/log/wtmp

호 환

리 눅 스 utmp 엔 트 리 는 v7/BSD 이 나 SYSV도 따 르 지 않 는 다 . 이 들 은 앞 의 두 가 지 의 혼 합 이 다 . v7/BSD는 더 적 은 필 드 를 갖 고 있 으 며 , 가 장 중 요 한 것 은 죽 은 엔 트 리 나 로 그 인 엔 트 리 를 보 여 주 도 록 하 는 v7/BSD 유 사 프 로 그 램 들 이 부 족 하 다 는 데 있 다 . 더 우 기 , 세 션 에 슬 롯 을 할 당 할 설 정 파 일 이 없 다 . ut_id 필 드 가 없 기 때 문 에 , BSD는 역 시 그 러 하 다 .

리 눅 스 에 서 , ut_id 필 드 기 록 은 일 단 설 정 되 면 절 대 변 경 되 지 않 는 다 . 즉 , 일 단 설 정 되 면 , 설 정 파 일 이 필 요 없 이 , 그 슬 롯 을 남 겨 둔 다 . ut_id 를 소 거 하 면 , 붕 괴 된 utmp 엔 트 리 들 과 잠 재 적 인 보 안 구 멍 들 을 초 래 할 수 있 는 상 태 를 만 든 다 . 위 에 언 급 했 던 필 드 들 을 null 바 이 트 로 채 움 으 로 서 소 거 하 는 것 은 SYSV에 서 는 요 구 되 지 않 지 만 , 많 은 프 로 그 램 들 이 실 행 되 도 록 허 용 한 다 . 리 눅 스 는 행 의 내 용 에 있 어 , BSD 전 통 을 사 용 한 다 .

SYSV는 이 들 을 표 시 하 기 위 해 오 직 유 형 필 드 를 사 용 하 고 , 행 필 드 내 에 "new time"와 같 은 정 보 성 메 시 지 들 을 기 록 한 다 . UT_UNKNOWN는 리 눅 스 에 서 만 볼 수 있 는 것 같 다 .

이 파 일 을 삭 제 함 으 로 서 utmp 로 깅 이 보 이 는 다 양 한 다 른 시 스 템 들 과 는 달 리 , utmp는 리 눅 스 상 에 서 항 상 존 재 한 다 . 만 일 여 러 분 이 who(1)의 기 능 을 정 지 시 키 면 , utmp 영 역 이 읽 혀 지 지 않 도 록 해 야 한 다 .

libc5에 서 utmp 구 조 체 는 libc6내 에 서 변 경 되 었 다 는 것 을 참 조 하 라 . 이 때 문 에 , 이 전 의 libc5 구 조 체 를 사 용 하 는 바 이 너 리 들 은 .IR /var/run/utmp 과 /var/log/wtmp를 붕 괴 시 킨 다 .

데 비 안 시 스 템 들 은 새 로 운 utmp 포 맷 을 사 용 하 는 패 치 된 libc5를 포 함 한 다 . libc5에 서 직 접 액 세 스 되 기 때 문 에 , utmp에 있 어 문 제 는 여 전 히 존 재 한 다 .

RESTRICTIONS

파 일 포 맷 은 머 신 에 의 존 적 이 기 때 문 에 , 이 것 이 생 성 되 는 머 신 의 아 키 텍 쳐 에 서 만 처 리 되 도 록 하 는 것 이 좋 다 .

버 그

이 맨 페 이 지 는 libc5에 기 반 하 며 , 현 재 와 다 르 게 동 작 할 수 도 있 다 .

관 련 항 목

ac(1), date(1), getutent(3), init(8), last(1), login(1), updwtmp(3), who(1)