למד את הפקודה Linux - wtmp

שֵׁם

utmp, wtmp - רשומות כניסה

תַקצִיר

#include

תיאור

קובץ utmp מאפשר למשתמש לגלות מידע על מי משתמש כרגע במערכת. ייתכן שיש יותר משתמשים כרגע באמצעות המערכת, כי לא כל התוכניות להשתמש רישום utmp.

אזהרה: utmp לא ניתן לכתוב, כי תוכניות רבות במערכת (בטיפשות) תלויים בשלמותה. אתה מסתכן logfiles מערכת מזויף ושינויים של קבצי מערכת אם אתה משאיר utmp לכתיבה לכל משתמש.

הקובץ הוא רצף של ערכים עם המבנה הבא שהוצהר בקובץ include (שים לב שמדובר בהגדרה אחת בלבד במספר, הפרטים תלויים בגרסת 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 # הגדרת חשבון 9 # הגדרת דף UT_LINESIZE 12 #define UT_NAMESIZE 32 #define UT_HOSTSIZE 256 struct exit_status {short int e_termination; / * מצב סיום התהליך. * / קצר int e_exit; / * מצב היציאה התהליך. * /}; struct utmp {קצר ut_type; / * סוג ההתחברות * / pid_t ut_pid; / * pid של תהליך הכניסה * / char ut_line [UT_LINESIZE]; / * שם התקן של tty - "/ dev /" * / char ut_id [4]; / * init מזהה או abbrev. ttyname * / char ut_user [UT_NAMESIZE]; / * שם משתמש * / char ut_host [UT_HOSTSIZE]; / * hostname עבור התחברות מרחוק * / struct exit_status ut_exit; / * מצב היציאה של תהליך המסומן כ- DEAD_PROCESS. * / ארוך ut_session; / * מזהה הפעלה, המשמש windowing * / struct timeval ut_tv; / * ערך הזמן נעשה. * / int32_t ut_addr_v6 [4]; / * כתובת ה- IP של המארח מרחוק. * / char כרית [20]; /* שמור לשימוש עתידי. * /}; / * פריצות תאימות לאחור. * / #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]

מבנה זה נותן את השם של הקובץ המיוחד המשויך למסוף המשתמש, שם המשתמש של המשתמש, וזמן הכניסה בצורה של זמן (2). שדות מחרוזת מסתיימים על ידי '\ 0' אם הם קצרים יותר מהגודל של השדה.

את הערכים הראשונים שנוצרו אי פעם תוצאה של init (8) עיבוד inittab (5). אולם לפני הכניסה לערך, init (8) מנקה את ה- utmp על ידי הגדרת ut_type ל- DEAD_PROCESS , ניקוי ut_user , ut_host ו- ut_time עם bull null עבור כל רשומה ש- ut_type אינו DEAD_PROCESS או RUN_LVL ושלא קיים בה תהליך עם PID ut_pid . אם לא ניתן למצוא רשומה ריקה עם ut_id הצורך, init יוצרת חדשה. הוא קובע ut_id מ inittab , ut_pid ו- ut_time לערכים הנוכחיים, ו- ut_type ל- INIT_PROCESS .

getty (8) מאתרת את הערך על ידי pid, משתנה ut_type ל- LOGIN_PROCESS , משתנה ut_time , מגדיר ut_line , ומחכה חיבור ייקבע. (8), לאחר שהמשתמש אושר, משנה את ut_type ל- USER_PROCESS , משנה את ut_time ומגדיר ut_host ו- ut_addr . בהתאם getty (8) ואת הכניסה (8), רשומות עשוי להיות ממוקם על ידי ut_line במקום ut_pid עדיף.

כאשר init (8) מוצא כי תהליך יצא, הוא מאתר את הערך utmp שלו על ידי ut_pid , קובע ut_type ל DEAD_PROCESS , ומנקה ut_user , ut_host ו ut_time עם בתים null.

xterm (1) ו emulators מסוף אחרים ישירות ליצור רשומת USER_PROCESS וליצור את ut_id באמצעות שתי האותיות האחרונות של / dev / ttp % c או באמצעות p % d עבור / dev / pts / % d . אם הם מוצאים DEAD_PROCESS עבור מזהה זה, הם למחזר אותו, אחרת הם יוצרים ערך חדש. אם הם יכולים, הם יסמנו את זה בתור DEAD_PROCESS על היציאה וזה מומלץ כי הם ut_line , ut_time , ut_user , ו ut_host גם כן.

xdm (8) לא צריך ליצור רשומת utmp, כי אין מסוף שהוקצה. לתת לזה ליצור אחד יגרום שגיאות, כגון 'אצבע: לא יכול stat /dev / machine.dom'. זה צריך ליצור ערכי wtmp, אם כי, בדיוק כמו ftpd (8) עושה.

Telnetd (8) מגדיר כניסה LOGIN_PROCESS ומשאיר את השאר כדי להיכנס (8) כרגיל. לאחר הפגישה telnet מסתיים, Telnetd (8) מנקה את utmp בדרך המתוארת.

קובץ wtmp מתעד את כל פרטי הכניסה והיומנים. הפורמט שלה הוא בדיוק כמו utmp, אלא שם משתמש ריק מציין יציאה על הטרמינל המשויך. יתר על כן, שם הטרמינל "~" עם שם משתמש "כיבוי" או "אתחול מחדש" מציין כיבוי או אתחול מחדש של המערכת וזוג שמות המסופים "|" / "}" מתעד את זמן המערכת הישן / חדש כאשר התאריך (1) משנה אותו. wtmp נשמר על ידי כניסה (1), init (1), וכמה גרסאות של getty (1). אף אחת מהתוכניות הללו לא יוצרת את הקובץ , כך שאם הוא יוסר, הרישומה כבויה.