.\" -*- coding: UTF-8 -*- .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH utmp 5 "21 سبتمبر 2025" "صفحات دليل لينكس 6.18" .SH الاسم utmp, wtmp \- سجلات الدخول .SH موجز .nf \fB#include \fP .fi .SH الوصف يسمح ملف \fIutmp\fP باكتشاف معلومات حول من يستخدم النظام حالياً. قد يكون هناك مستخدمون إضافيون يستخدمون النظام حالياً، لأن ليست كل البرامج تستخدم تسجيل utmp. .P \fBتحذير:\fP لا يجب أن يكون \fIutmp\fP قابلاً للكتابة من قبل فئة المستخدم "آخرون"، لأن العديد من برامج النظام (بشكل أحمق) تعتمد على سلامته. تخاطر بسجلات نظام مزيفة وتعديلات لملفات النظام إذا تركت \fIutmp\fP قابلاً للكتابة لأي مستخدم غير المالك ومالك المجموعة للملف. .P الملف هو تسلسل من بنى \fIutmp\fP، المُعلنة كما يلي في \fI\fP (لاحظ أن هذا مجرد تعريف واحد من عدة تعريفات موجودة؛ التفاصيل تعتمد على إصدار libc): .P .in +4n .EX /* Values for ut_type field, below */ \& #define EMPTY 0 /* Record does not contain valid info (formerly known as UT_UNKNOWN on Linux) */ #define RUN_LVL 1 /* Change in system run\-level (see \fBinit\fP(1))\ */ #define BOOT_TIME 2 /* Time of system boot (in \f[I]ut_tv\fR) */ #define NEW_TIME 3 /* Time after system clock change (in \f[I]ut_tv\fR) */ #define OLD_TIME 4 /* Time before system clock change (in \f[I]ut_tv\fR) */ #define INIT_PROCESS 5 /* Process spawned by \fBinit\fP(1)\ */ #define LOGIN_PROCESS 6 /* Session leader process for user login */ #define USER_PROCESS 7 /* Normal process */ #define DEAD_PROCESS 8 /* Terminated process */ #define ACCOUNTING 9 /* Not implemented */ \& #define UT_LINESIZE 32 #define UT_NAMESIZE 32 #define UT_HOSTSIZE 256 \& struct exit_status { /* Type for ut_exit, below */ short e_termination; /* Process termination status */ short e_exit; /* Process exit status */ }; \& struct utmp { short ut_type; /* Type of record */ pid_t ut_pid; /* PID of login process */ char ut_line[UT_LINESIZE]; /* Device name of tty \- "/dev/" */ char ut_id[4]; /* Terminal name suffix, or inittab(5) ID */ char ut_user[UT_NAMESIZE]; /* Username */ char ut_host[UT_HOSTSIZE]; /* Hostname for remote login, or kernel version for run\-level messages */ struct exit_status ut_exit; /* Exit status of a process marked as DEAD_PROCESS; not used by Linux \fBinit\fP(1)\ */ /* The ut_session and ut_tv fields must be the same size when compiled 32\- and 64\-bit. This allows data files and shared memory to be shared between 32\- and 64\-bit applications. */ #if __WORDSIZE == 64 && defined __WORDSIZE_COMPAT32 int32_t ut_session; /* Session ID ( \fBgetsid\fP(2)), used for windowing */ struct { int32_t tv_sec; /* Seconds */ int32_t tv_usec; /* Microseconds */ } ut_tv; /* Time entry was made */ #else long ut_session; /* Session ID */ struct timeval ut_tv; /* Time entry was made */ #endif \& int32_t ut_addr_v6[4]; /* Internet address of remote host; IPv4 address uses just ut_addr_v6[0] */ char __unused[20]; /* Reserved for future use */ }; \& /* Backward 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] .EE .in .P تعطي هذه البنية اسم الملف الخاص المرتبط بطرفية المستخدم، واسم دخول المستخدم، ووقت الدخول بصيغة \fBtime\fP(2). تُنهى حقول السلسلة ببايت فارغ (\[aq]\[rs]0\[aq]) إذا كانت أقصر من حجم الحقل. .P تنتج الإدخالات الأولى التي تُنشأ من معالجة \fBinit\fP(1) لـ \fBinittab\fP(5). قبل معالجة إدخال، مع ذلك، ينظف \fBinit\fP(1) utmp عن طريق تعيين \fIut_type\fP إلى \fBDEAD_PROCESS\fP، ومسح \fIut_user\fP و \fIut_host\fP و \fIut_time\fP ببايتات فارغة لكل سجل يكون \fIut_type\fP فيه ليس \fBDEAD_PROCESS\fP أو \fBRUN_LVL\fP وحيث لا توجد عملية بمعرف PID \fIut_pid\fP. إذا لم يُعثر على سجل فارغ بمعرف \fIut_id\fP المطلوب، ينشئ \fBinit\fP(1) سجلاً جديداً. يعيّن \fIut_id\fP من inittab، و \fIut_pid\fP و \fIut_time\fP إلى القيم الحالية، و \fIut_type\fP إلى \fBINIT_PROCESS\fP. .P يحدد \fBmingetty\fP(8) (أو \fBagetty\fP(8)) الإدخال بواسطة PID، ويغير \fIut_type\fP إلى \fBLOGIN_PROCESS\fP، ويغير \fIut_time\fP، ويعيّن \fIut_line\fP، وينتظر إنشاء الاتصال. بعد مصادقة المستخدم، يغير \fBlogin\fP(1) \fIut_type\fP إلى \fBUSER_PROCESS\fP، ويغير \fIut_time\fP، ويعيّن \fIut_host\fP و \fIut_addr\fP. اعتماداً على \fBmingetty\fP(8) (أو \fBagetty\fP(8)) و \fBlogin\fP(1)، قد تُحدد السجلات بواسطة \fIut_line\fP بدلاً من \fIut_pid\fP المفضل. .P عندما يجد \fBinit\fP(1) أن عملية قد خرجت، يحدد إدخال utmp الخاص بها بواسطة \fIut_pid\fP، ويعيّن \fIut_type\fP إلى \fBDEAD_PROCESS\fP، ويمسح \fIut_user\fP و \fIut_host\fP و \fIut_time\fP ببايتات فارغة. .P ينشئ \fBxterm\fP(1) ومحاكيات طرفية أخرى مباشرة سجلاً من نوع \fBUSER_PROCESS\fP ويولّد \fIut_id\fP باستخدام السلسلة التي تشكل جزء اللاحقة من اسم الطرفية (الأحرف التي تلي \fI/dev/\fP[pt]\fIty\fP). إذا وجدوا \fBDEAD_PROCESS\fP لهذا المعرف، يعيدون استخدامه، وإلا ينشئون إدخالاً جديداً. إذا استطاعوا، سيوسمونه كـ \fBDEAD_PROCESS\fP عند الخروج ويُنصح بأن يفرغوا \fIut_line\fP و \fIut_time\fP و \fIut_user\fP و \fIut_host\fP أيضًا. .P ينشئ \fBtelnetd\fP(8) إدخالاً من نوع \fBLOGIN_PROCESS\fP ويترك الباقي لـ \fBlogin\fP(1) كالمعتاد. بعد انتهاء جلسة telnet، ينظف \fBtelnetd\fP(8) utmp بالطريقة الموصوفة. .P يسجل ملف \fIwtmp\fP جميع عمليات الدخول والخروج. تنسيقه تماماً مثل \fIutmp\fP باستثناء أن اسم مستخدم فارغ يشير إلى خروج على الطرفية المرتبطة. علاوة على ذلك، يشير اسم الطرفية \fB\[ti]\fP مع اسم المستخدم \fBshutdown\fP أو \fBreboot\fP إلى إيقاف تشغيل النظام أو إعادة تشغيله، ويسجل زوج أسماء الطرفيات \fB|\fP/\fB}\fP وقت النظام القديم/الجديد عندما يغيره \fBdate\fP(1). تتم صيانة \fIwtmp\fP بواسطة \fBlogin\fP(1) و \fBinit\fP(1) وبعض إصدارات \fBgetty\fP(8) (مثل \fBmingetty\fP(8) أو \fBagetty\fP(8)). لا ينشئ أي من هذه البرامج الملف، لذا إذا أُزيل، يتم إيقاف حفظ السجلات. .SH الملفات \fI/var/run/utmp\fP .br \fI/var/log/wtmp\fP .SH الإصدارات لا يحدد معيار POSIX.1 بنية \fIutmp\fP، بل يحدد بنية باسم \fIutmpx\fP (كجزء من امتداد XSI)، مع مواصفات للحقول \fIut_type\fP و \fIut_pid\fP و \fIut_line\fP و \fIut_id\fP و \fIut_user\fP و \fIut_tv\fP. ولا يحدد معيار POSIX.1 أطوال الحقلين \fIut_line\fP و \fIut_user\fP. .P يُعرّف نظام لينكس بنية \fIutmpx\fP لتكون مطابقة لبنية \fIutmp\fP. .SH المعايير لينكس. .SH التاريخ لا تتوافق مدخلات utmp في لينكس مع معيار v7/BSD ولا مع System V؛ بل هي مزيج من الاثنين. .P يحتوي نظام v7/BSD على حقول أقل؛ والأهم من ذلك أنه يفتقر إلى \fIut_type\fP، مما يؤدي ببرامج v7/BSD الأصلية إلى عرض (على سبيل المثال) مدخلات ميتة أو مدخلات تسجيل دخول. علاوة على ذلك، لا يوجد ملف تهيئة يخصص خانات للجلسات. يقوم نظام BSD بذلك لأنه يفتقر إلى حقول \fIut_id\fP. .P في لينكس (كما في نظام System V)، لن يتغير حقل \fIut_id\fP الخاص بسجل ما بمجرد ضبطه، مما يحجز تلك الخانة دون الحاجة إلى ملف تهيئة. قد يؤدي مسح حقل \fIut_id\fP إلى حدوث حالات تضارب (race conditions) تؤدي إلى تلف مدخلات utmp وثغرات أمنية محتملة. إن مسح الحقول المذكورة أعلاه عن طريق ملئها ببايتات فارغة (null bytes) ليس مطلوبًا وفق دلالات System V، ولكنه يجعل من الممكن تشغيل العديد من البرامج التي تفترض دلالات BSD والتي لا تعدّل utmp. يستخدم لينكس اصطلاحات BSD لمحتويات السطر، كما هو موثق أعلاه. .P .\" mtk: What is the referrent of "them" in the following sentence? .\" System V only uses the type field to mark them and logs .\" informative messages such as \f[B]"new time"\f[] in the line field. لا يحتوي نظام System V على حقول \fIut_host\fP أو \fIut_addr_v6\fP. .SH ملاحظات على عكس العديد من الأنظمة الأخرى التي يمكن فيها تعطيل سجل utmp عن طريق حذف الملف، يجب أن يكون ملف utmp موجودًا دائمًا في لينكس. إذا كنت ترغب في تعطيل الأمر \fBwho\fP(1)، فقم بضبط صلاحيات الملف بحيث لا يكون قابلاً للقراءة من قبل الجميع (world readable). .P تنسيق الملف معتمد على الجهاز، لذا يُوصى بمعالجته فقط على بنية الجهاز التي أُنشئ فيها. .P لاحظ أنه على منصات \fIbiarch\fP، أي الأنظمة التي يمكنها تشغيل تطبيقات 32\-بت و64\-بت (x86\-64, ppc64, s390x، إلخ)، يكون حجم \fIut_tv\fP نفسه في وضع 32\-بت كما في وضع 64\-بت. وينطبق الشيء نفسه على \fIut_session\fP و\fIut_time\fP إذا كانا موجودين. يسمح هذا بمشاركة ملفات البيانات والذاكرة المشتركة بين تطبيقات 32\-بت و64\-بت. يُحقق هذا بتغيير نوع \fIut_session\fP إلى \fIint32_t\fP، ونوع \fIut_tv\fP إلى هيكل بحقلين \fIint32_t\fP هما \fItv_sec\fP و\fItv_usec\fP. وبما أن \fIut_tv\fP قد لا يكون مطابقًا لـ \fIstruct\ timeval\fP، فبدلاً من الاستدعاء: .P .in +4n .EX gettimeofday((struct timeval *) &ut.ut_tv, NULL); .EE .in .P يُوصى بالطريقة التالية لتعيين هذا الحقل: .P .in +4n .EX struct utmp ut; struct timeval tv; \& gettimeofday(&tv, NULL); ut.ut_tv.tv_sec = tv.tv_sec; ut.ut_tv.tv_usec = tv.tv_usec; .EE .in .\" .P .\" Note that the \f[I]utmp\f[] struct from libc5 has changed in libc6. .\" Because of this, .\" binaries using the old libc5 struct will corrupt .\" .IR /var/run/utmp " and/or " /var/log/wtmp . .\" .SH BUGS .\" This man page is based on the libc5 one, things may work differently now. .SH "انظر أيضًا" \fBac\fP(1), \fBdate\fP(1), \fBinit\fP(1), \fBlast\fP(1), \fBlogin\fP(1), \fBlogname\fP(1), \fBlslogins\fP(1), \fBusers\fP(1), \fButmpdump\fP(1), \fBwho\fP(1), \fBgetutent\fP(3), \fBgetutmp\fP(3), \fBlogin\fP(3), \fBlogout\fP(3), \fBlogwtmp\fP(3), \fBupdwtmp\fP(3) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .