.\" -*- coding: UTF-8 -*- .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" Generated by scdoc 1.11.4 .\" Complete documentation for this program is not available as a GNU info page .nh .ad l .\" Begin generated content: .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH RPM\-LUA 7 "6 مارس 2026" "RPM 6.0.1" .PP .SH الاسم .PP rpm\-lua \- مفسر Lua المضمن في RPM .PP .SH موجز .PP %scriptlet \-p .PP %{lua:.\&.\&.\&} .PP .SH الوصف Lua هي لغة برمجة عامة الغرض صُممت خصيصًا لتُضمن في البرامج الأخرى، ويضم RPM مفسر Lua مضمنًا للاستخدام في \fBrpm\-macros\fP(7) المتقدمة وبريمجات المعاملات.\& .PP يجعل مفسر Lua المضمن أشياءً متنوعة ممكنة كانت صعبة أو مستحيلة باستخدام وحدات الماكرو المجردة أو سكريبتات الصدفة الخارجية، مثل المساعدة في القضاء على حلقات الاعتمادية في بريمجات الحزم.\& .PP .SH "وحدات الماكرو" .SS "الوصول إلى وحدات الماكرو" يتضمن امتداد \fBrpm\fP وظائف متنوعة للتعامل مع وحدات الماكرو، ولكن الطريقة الأكثر ملاءمة للوصول إلى \fBrpm\-macroproc\fP(7) من بيئة Lua في RPM هي عبر جدول \fBmacros\fP العام.\& .PP لا تفرق Lua بين صيغ فهرس الجدول واسم الحقل، لذا فإن \fBmacros.\&foo\fP و \fBmacros['\&foo'\&]\fP متكافئان، استخدم ما يناسب الغرض بشكل أفضل.\& .PP مثل أي جدول Lua حقيقي، تٌعاد العناصر غير الموجودة كقيمة \fBnil\fP، ويمكن استخدام التعيين لتعريف أو إلغاء تعريف وحدات الماكرو.\& .PP مثال: .nf .RS 4 if not macros\&.yours then macros\&.my = \&'my macro\&' end local v = { \&'_libdir\&', \&'_bindir\&', \&'_xbindir\&' } for _, v in ipairs(v) do if not macros[v] then macros[v] = \&'default\&' end end .fi .RE .PP تتشارك جميع وحدات الماكرو بيئة تنفيذ Lua العامة نفسها.\& .PP .SS "استدعاء وحدات الماكرو الوسيطية" يمكن استدعاء وحدات الماكرو الوسيطية (بما في ذلك جميع وحدات الماكرو المدمجة) بطريقة Lua أصلية عبر جدول \fBmacros\fP، باستخدام صيغة \fBmacros.\&\fP\fIالاسم\fP\fB()\fP أو \fBmacros[\fP\fIالاسم\fP\fB]()\fP.\& .PP تُمرر المعطيات عبر معطى واحد، والذي يكون إما .PD 0 .IP \(bu 4 سلسلة نصية واحدة، وفي هذه الحالة تُوسّع وتُجزّأ باستخدام القواعد الأصلية للماكرو .IP \(bu 4 جدولاً، وفي هذه الحالة تُستخدم محتويات الجدول كمعطيات حرفية لا تُوسّع بأي شكل من الأشكال .PD .PP مثال 1: .nf .RS 4 macros\&.with(\&'foo\&') .fi .RE .PP مثال 2: .nf .RS 4 macros\&.dostuff({\&'one\&', \&'two\&', \&'three\&'}) .fi .RE .PP .SS "إرجاع البيانات" حسب التعريف، فإن أي شيء يُطبع عبر \fBprint()\fP في Lua سينتهي به المطاف في توسعة الماكرو.\& يمكن لوحدات ماكرو Lua أيضًا أن تستخدم \fBreturn\fP لإرجاع مخرجاتها، مما يجعل برمجة وحدات الماكرو المساعدة تبدو أكثر طبيعية.\& .PP مثال: .nf .RS 4 %sum() %{lua: local v = 0 for _, a in ipairs(arg) do v = v + tonumber(a) end return v } .fi .RE .PP .SS "الخيارات والمعطيات" تستقبل وحدات ماكرو Lua الوسيطية خياراتها ومعطياتها في جدولين محليين هما \fBopt\fP و \fBarg\fP، حيث يحتوي \fBopt\fP على قيم الخيارات المعالجة مفهرسة بحرف الخيار، ويحتوي \fBarg\fP على معطيات مفهرسة رقميًا.\& .PP يتواجد هذان الجدولان دائمًا بغض النظر عما إذا كانت الخيارات أو المعطيات قد مُررت بالفعل لتبسيط الاستخدام.\& .PP مثال: .nf .RS 4 %foo(a:b) %{lua: if opt\&.b then print(\&'do b\&') else print(\&'or not\&') end if opt\&.a == \&'s\&' then print(\&'do s\&') end if #arg == 0 then print(\&'no arguments :(\&') else for i = 1, #arg do print(arg[i]) end end } .fi .RE .PP .SH البريمجات يمكن استخدام Lua الداخلية كمفسر لأي من بريمجات معاملات RPM، بما في ذلك المشغلات ومشغلات الملفات: .PP مثال: .nf .RS 4 %pre \-p print(\&'أهلاً من Lua\&') .fi .RE .PP بينما تُعد \fI/bin/sh\fP العريقة عادةً أكثر ملاءمة لأنشطة السكريبت المتعلقة بالتحزيم، فإن مفسر Lua المضمن له ميزات فريدة لبريمجات المعاملات: فهي لا تضيف أي اعتماديات إضافية للحزم، وبالتالي يمكن أن تساعد في القضاء على حلقات الاعتمادية.\& يمكن أن يكون هذا فرقًا حاسمًا في مجموعة حزم "التمهيد" المبكرة في التثبيت الأولي.\& .PP على وجه الخصوص، يُعد سكريبت Lua المضمن هو الخيار الوحيد القابل للاستخدام بشكل عام في بريمجات \fB%pretrans\fP أثناء التثبيت الأولي للنظام.\& .PP كما أن Lua المضمنة أسرع بكثير من تنفيذ مفسر قد يكون ثقيلاً لمجرد تشغيل سطرين من سكريبت صدفة.\& .PP ملاحظة: يجب ألا تضع البريمجات التي تستخدم Lua الداخلية افتراضات حول مشاركة بيئة التنفيذ مع بريمجات أخرى.\& .PP .SS المعطيات يمكن الوصول إلى معطيات البريمجات من جدول \fBarg\fP عام.\& .PP ملاحظة: في Lua، تبدأ الفهارس عادةً من 1 (واحد) بدلاً من 0 (صفر)، وللأفضل أو للأسوأ، يتبع تطبيق RPM هذه الممارسة.\& وبالتالي فإن فهارس معطيات البريمجات تختلف بواحد عن التوقعات العامة بناءً على معطيات البريمجات التقليدية.\& المعطى الذي يحتوي على عدد نسخ الحزم المثبتة هو \fBarg[2]\fP والمعطى المماثل لأهداف المشغلات هو \fBarg[3]\fP، مقارنة بـ \fB$1\fP و \fB$2\fP التقليديين في سكريبتات الصدفة.\& .PP مثال: .nf .RS 4 %postun \-p if arg[2] == 0 then print("erasing") end .fi .RE .PP .SS "الحزم القابلة للنقل" تحمل بريمجات الحزم القابلة للنقل بالإضافة إلى ذلك جدول \fBRPM_INSTALL_PREFIX\fP عاماً يحتوي على جميع البوادئ الممكنة للحزمة.\& .PP أُضيف: 4.\&18.\&0 .PP .SS "حالة الخروج" بينما لا ينبغي السماح للبريمجات بالفشل بشكل طبيعي، يمكنك الإشارة إلى حالة فشل البريمج باستخدام دالة \fBerror(\fP\fIالرسالة\fP، [\fIالمستوى\fP]\fB)\fP في Lua إذا احتجت لذلك.\& .PP .SH "ملفات SPEC" في سياق تحليل ملف \fBrpm\-spec\fP(5) باستخدام \fBrpmbuild\fP(1) أو \fBrpmspec\fP(1)، تحتوي بيئة Lua في RPM على الجداول العامة التالية الخاصة بملف spec: .PP \fBpatches\fP .RS 4 أسماء ملفات الرقع في ملف spec، بنفس الترتيب الذي ظهرت به في ملف spec.\& .PP .RE \fBpatch_nums\fP .RS 4 أرقام الرقع في ملف spec، بنفس الترتيب الذي ظهرت به في ملف spec.\& .PP .RE \fBsources\fP .RS 4 أسماء ملفات المصادر في ملف spec، بنفس الترتيب الذي ظهرت به في ملف spec.\& .PP .RE \fBsource_nums\fP .RS 4 أرقام المصادر في ملف spec، بنفس الترتيب الذي ظهرت به في ملف spec.\& .PP .RE مثال: .nf .RS 4 for i, p in ipairs(patches) do print(string\&.format("echo %d: %sn", patch_nums[i], patches[i])) end .fi .RE .PP .SH الامتدادات بالإضافة إلى مكتبات Lua القياسية (رهناً بإصدار Lua الذي رُبط به RPM)، تتوفر الامتدادات التالية في مفسر Lua الداخلي لـ RPM.\& يمكن استخدامها في جميع السياقات التي يمكن استخدام Lua الداخلية فيها.\& .PP .SS "امتداد rpm" .PP تتوفر الدوال التالية الخاصة بـ RPM: .PP \fBb64decode(\fP\fIالمعطى\fP\fB)\fP .RS 4 إجراء فك ترميز base64 على المعطى.\& انظر أيضًا b64encode().\& .PP مثال: .nf .RS 4 blob = \&'binary data\&' print(blob) e = rpm\&.b64encode(blob) print(e) d = rpm\&.b64decode(e) print(d) .fi .RE .PP .RE \fBb64encode(\fP\fIالمعطى\fP [، \fIطول_السطر\fP]\fB)\fP .RS 4 إجراء ترميز base64 على المعطى.\& يمكن تحديد طول السطر اختيارياً عبر المعطى الثاني.\& انظر أيضًا b64decode().\& .PP .RE \fBdefine("\fP\fIالاسم\fP \fIالمتن\fP\fB")\fP .RS 4 تعريف ماكرو عام باسم \fIالاسم\fP ومتنه \fIالمتن\fP.\& انظر أيضًا \fBوحدات الماكرو\fP.\& .PP مثال: .nf .RS 4 rpm\&.define(\&'foo 1\&') .fi .RE .PP .RE \fBexecute(\fP\fIالمسار\fP [، \fIمعطى1\fP [،.\&.\&.\&]\fB)\fP .RS 4 تنفيذ أمر خارجي.\& هذا مفيد لتنفيذ أوامر مساعدة خارجية دون الاعتماد على الصدفة.\& \fIالمسار\fP هو الأمر المراد تنفيذه، يليه عدد اختياري من المعطيات لتمريرها إلى الأمر.\& .PP لتحكم أفضل في تنفيذ العملية والمخرجات، انظر rpm.\&spawn().\& .PP أُضيف: 4.\&15.\&0 .PP مثال: .nf .RS 4 rpm\&.execute(\&'ls\&', \&'\-l\&', \&'/\&') .fi .RE .RE \fBexpand(\fP\fIالمعطى\fP\fB)\fP .RS 4 إجراء توسعة ماكرو RPM على السلسلة النصية \fIالمعطى\fP.\& انظر أيضًا \fBوحدات الماكرو\fP.\& .PP مثال: .nf .RS 4 rpm\&.expand(\&'%{_libdir}/mydir\&') .fi .RE .PP .RE \fBglob(\fP\fIالنمط\fP، [\fIالأعلام\fP]\fB)\fP .RS 4 إرجاع جدول بأسماء المسارات التي تطابق \fIالنمط\fP.\& إذا كانت \fIالأعلام\fP تحتوي على \fBc\fP، فيُعاد \fIالنمط\fP في حالة عدم وجود تطابقات.\& .PP مثال: .nf .RS 4 for i, p in ipairs(rpm\&.glob(\&'*\&')) do print(p) end .fi .RE .PP .RE \fBinteractive()\fP .RS 4 إطلاق جلسة تفاعلية للاختبار والتنقيح.\& استخدم \fBrpmlua\fP(1) بدلاً من ذلك.\& .PP مثال: .nf .RS 4 rpm \-\-eval "%{lua: rpm\&.interactive()}" .fi .RE .PP .RE \fBisdefined(\fP\fIالاسم\fP\fB)\fP .RS 4 اختبار ما إذا كان الماكرو \fIالاسم\fP معرفاً وما إذا كان وسيطياً، تُعاد النتيجة في قيمتين منطقيتين.\& انظر أيضًا \fBوحدات الماكرو\fP.\& (أُضيف: 4.\&17.\&0) .PP مثال: .nf .RS 4 if rpm\&.isdefined(\&'_libdir\&') then \&.\&.\&. end .fi .RE .PP .RE \fBload(\fP\fIالمسار\fP\fB)\fP .RS 4 تحميل ملف ماكرو من المسار المعطى.\& مكافئ لماكرو \fB%{load:.\&.\&.\&}\fP المدمج.\& .PP مثال: .nf .RS 4 rpm\&.load(\&'my\&.macros\&') .fi .RE .PP .RE \fBopen(\fP\fIالمسار\fP، [\fIالوضع\fP[.\&\fIالأعلام\fP]]\fB)\fP .RS 4 فتح دفق ملف باستخدام مرافق الإدخال والإخراج في RPM، مع دعم لضغط وفك ضغط شفافين.\& .PP \fIالمسار\fP هو سلسلة اسم الملف، متبوعة اختيارياً بسلسلة \fIالوضع\fP لتحديد سلوك الفتح: .PD 0 .IP \(bu 4 \fBa\fP: الفتح للإلحاق .IP \(bu 4 \fBw\fP: الفتح للكتابة، مع القطع .IP \(bu 4 \fBr\fP: الفتح للقراءة (مبدئي) .IP \(bu 4 \fB+\fP: الفتح للقراءة والكتابة .IP \(bu 4 \fBx\fP: الإخفاق في حال وجود الملف .PD .PP ويُتبع اختيارياً بـ \fBrpm\-payloadflags\fP(7) للضغط وفك الضغط.\& .PP أُضيف: 4.\&17.\&0 .PP مثال: .nf .RS 4 f = rpm\&.open(\&'some\&.txt\&.gz\&', \&'r\&.gzdio\&') print(f:read()) .fi .RE .PP كائن rpm.\&fd المُعاد يملك الدوال (methods) التالية: .PP \fBfd:close()\fP .PP غلق دفق الملف.\& .PP مثال: .nf .RS 4 f = rpm\&.open(\&'file\&') f:close() .fi .RE .PP \fBfd:flush()\fP .PP إفراغ دفق الملف.\& .PP مثال: .nf .RS 4 f = rpm\&.open(\&'file\&', \&'w\&') f:write(\&'foo\&') f:flush() f:close() .fi .RE .PP \fBfd:read(\fP[\fIlen\fP]\fB)\fP .PP قراءة البيانات من دفق الملف بما يصل إلى \fIlen\fP من البايتات، أو قراءة الملف كاملاً إذا لم يُحدد الطول.\& .PP مثال: .nf .RS 4 f = rpm\&.open(\&'/some/file\&') print(f:read()) .fi .RE .PP \fBfd:seek(\fP\fImode\fP, \fIoffset\fP\fB)\fP .PP إعادة تعيين إزاحة الملف للدفق.\& \fImode\fP هو أحد الخيارات \fBset\fP أو \fBcur\fP أو \fBend\fP، والإزاحة (offset) تكون مرتبطة بالوضع المختاد: مطلقة، أو نسبية للوضع الحالي، أو نسبية للنهاية.\& لا تدعم كل الدفق عمليات الإزاحة.\& .PP يُعيد إزاحة الملف بعد العملية.\& .PP انظر أيضاً \fBlseek\fP(3).\& .PP مثال: .nf .RS 4 f = rpm\&.open(\&'newfile\&', \&'w\&') f:seek(\&'set\&', 555) f:close() .fi .RE .PP \fBfd:write(\fP\fIbuf\fP [, \fIlen\fP]\fB)\fP .PP كتابة البيانات الموجودة في \fIbuf\fP إلى دفق الملف، إما بالكامل أو بما يصل إلى \fIlen\fP من البايتات إذا حُدد الطول.\& .PP مثال: .nf .RS 4 f = rpm\&.open(\&'newfile\&', \&'w\&') f:write(\&'data data\&') f:close() .fi .RE .PP \fBfd:reopen(\fP\fImode\fP\fB)\fP .PP إعادة فتح دفق بوضع جديد (انظر \fBrpm.\&open()\fP).\& .PP مثال: .nf .RS 4 rpm\&.open(\&'some\&.txt\&.gz\&') f = f:reopen(\&'r\&.gzdio\&') print(f:read())} .fi .RE .PP .RE \fBredirect2null(\fP\fIfdno\fP\fB)\fP (مهجور) .RS 4 إعادة توجيه واصف الملف fdno إلى /dev/null (كان يُعرف قبل الإصدار 4.\&16 باسم posix.\&redirect2null()) .PP هذه الدالة مهجورة ومتاحة فقط لحزم RPM v4 من أجل التوافقية مع الإصدارات السابقة.\& استخدم `rpm.\&spawn()` أو `rpm.\&execute()` بدلاً منها.\& .PP .nf .RS 4 pid = posix\&.fork() if pid == 0 then posix\&.redirect2null(2) assert(posix\&.exec(\&'/bin/awk\&')) elseif pid > 0 then posix\&.wait(pid) end .fi .RE .PP .RE \fBspawn(\fP{\fIcommand\fP} [, {\fIactions\fP}]\fB)\fP .RS 4 تفريخ (Spawn)، أي تنفيذ، برنامج خارجي.\& .PP {\fIcommand\fP} هو جدول يتكون من الأمر ووسائطه.\& يمكن استخدام جدول ثانٍ اختياري لتمرير إجراءات متنوعة متعلقة بتنفيذ الأمر، والإجراءات المدعومة حالياً هي: .PP .nf .RS 4 | الإجراء | الوسيط (الوسائط) | الوصف |\-\-\-\-\-\-\-\-\-|\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- | *stdin* | المسار | إعادة توجيه المدخل القياسي إلى المسار | *stdout*| المسار | إعادة توجيه المخرج القياسي إلى المسار | *stderr*| المسار | إعادة توجيه الخطأ القياسي إلى المسار .fi .RE .PP يُعيد حالة خروج الأمر: صفر عند النجاح، أو صف (\fBnil\fP, message, code) عند الإخفاق.\& .PP أُضيف: 4.\&20 .PP مثال: .nf .RS 4 rpm\&.spawn({\&'systemctl\&', \&'restart\&', \&'httpd\&'}, {stderr=\&'/dev/null\&'}) .fi .RE .PP .RE \fBundefine(\fP\fIname\fP\fB)\fP .RS 4 إلغاء تعريف ماكرو.\& انظر أيضاً \fBMACROS\fP.\& .PP لاحظ أن هذا يخرج فقط أحدث تعريف للماكرو بالاسم المعطى من المكدس، أي أنه قد تظل هناك تعريفات ماكرو بنفس الاسم بعد عملية إلغاء التعريف.\& .PP مثال: .nf .RS 4 rpm\&.undefine(\&'zzz\&') .fi .RE .PP .PP .RE \fBvercmp(\fP\fIv1\fP, \fIv2\fP\fB)\fP .RS 4 إجراء مقارنة إصدار RPM على سلاسل الوسائط.\& يُعيد \-1 أو 0 أو 1 إذا كان \fIv1\fP أصغر من أو يساوي أو أكبر من \fIv2\fP.\& انظر \fBrpm\-version\fP(7).\& .PP ملاحظة: في RPM الأقدم من 4.\&16 كانت هذه العملية تعمل على أجزاء الإصدار فقط، وهو ما لا يعطي نتائج صحيحة على سلاسل \fIEVR\fP الكاملة.\& .PP مثال: .nf .RS 4 rpm\&.vercmp(\&'1\&.2\-1\&', \&'2\&.0\-1\&') .fi .RE .PP .RE \fBver(\fP\fIevr\fP\fB)\fP, \fBver(\fP\fIe\fP, \fIv\fP, \fIr\fP\fB)\fP .RS 4 إنشاء كائن إصدار RPM.\& يأخذ هذا إما سلسلة \fIevr\fP تُحلل إلى مكوناتها، أو العصر (epoch) والإصدار (version) والإطلاق (release) في وسائط منفصلة (يمكن أن تكون سلاسل أو أرقاماً).\& للكائن ثلاث سمات: \fBe\fP للعصر، و\fBv\fP للإصدار، و\fBr\fP للإطلاق، ويمكن طباعته بصيغة EVR الخاصة به ويدعم المقارنة الأصلية في Lua.\& .PP أُضيف: 4.\&17.\&0 .PP مثال: .nf .RS 4 v1 = rpm\&.ver(\&'5:1\&.0\-2) v2 = rpm\&.ver(3, \&'5a\&', 1) if v1 < v2 then \&.\&.\&. end if v1\&.e then \&.\&.\&. end .fi .RE .PP .RE .SS "امتداد posix" .PP تقدم مكتبة Lua القياسية مجموعة محدودة نوعاً ما من عمليات الإدخال والإخراج (io).\& يعزز امتداد \fBposix\fP بشكل كبير ما يمكن القيام به من Lua.\& .PP الدوال التالية متاحة في مساحة أسماء \fBposix\fP، أي لاستدعائها استخدم \fBposix.\&function()\fP.\& تركز هذه الوثائق على اتفاقيات واجهة برمجة تطبيقات Lua، وللمزيد من المعلومات حول استدعاءات النظام المقابلة ارجع إلى دليل النظام، مثل \fBaccess\fP(3) لـ \fBposix.\&access()\fP.\& .PP \fBaccess(\fP\fIpath\fP [, \fImode\fP]\fB)\fP .RS 4 اختبار إمكانية الوصول إلى الملف/الدليل \fIpath\fP.\& انظر \fBaccess\fP(3).\& إذا حُذف \fImode\fP فسيُختبر الوجود، وإلا فإنه مزيج من الاختبارات التالية: .PD 0 .IP \(bu 4 \fBr\fP: قابل للقراءة .IP \(bu 4 \fBw\fP: قابل للكتابة .IP \(bu 4 \fBx\fP: قابل للتنفيذ .IP \(bu 4 \fBf\fP: موجود .PD .PP مثال: .nf .RS 4 if posix\&.access(\&'/bin/rpm\&', \&'x\&') then \&.\&.\&. end .fi .RE .PP .RE \fBchdir(\fP\fIpath\fP\fB)\fP .RS 4 تغيير دليل العمل الحالي إلى \fIpath\fP.\& انظر \fBchdir\fP(1).\& .PP مثال: .nf .RS 4 posix\&.chdir(\&'/tmp\&') .fi .RE .PP .RE \fBchmod(\fP\fIpath\fP, \fImode\fP\fB)\fP .RS 4 تغيير وضع الملف/الدليل.\& يمكن أن يكون الوضع إما رقماً ثمانياً كما في استدعاء النظام \fBchmod\fP(2)، أو تمثيلاً نصياً مشابهاً لـ \fBchmod\fP(1).\& .PP مثال: .nf .RS 4 posix\&.chmod(\&'aa\&', 600) posix\&.chmod(\&'bb\&', \&'rw\-\&') posix\&.chmod(\&'cc\&', \&'u+x\&') .fi .RE .PP .RE \fBchown(\fP\fIpath\fP, \fIuser\fP, \fIgroup\fP\fB)\fP .RS 4 تغيير المالك/المجموعة للملف/الدليل \fIpath\fP.\& وسائط \fIuser\fP و \fIgroup\fP قد تكون إما قيم معرفات رقمية أو أسماء مستخدمين/مجموعات.\& انظر \fBchown\fP(2) و \fBchown\fP(1).\& .PP ملاحظة: هذه عملية ذات امتيازات.\& .PP مثال: .nf .RS 4 posix\&.chown(\&'aa\&', 0, 0) posix\&.chown(\&'bb\&', \&'nobody\&', \&'nobody\&') .fi .RE .PP .RE \fBctermid()\fP .RS 4 الحصول على اسم الطرفية المتحكمة.\& انظر \fBctermid\fP(3).\& .PP مثال: .nf .RS 4 print(posix\&.ctermid()) .fi .RE .PP .RE \fBdir(\fP[\fIpath\fP]\fB)\fP .RS 4 الحصول على محتويات الدليل \- مثل \fBreaddir\fP(3).\& إذا حُذف \fIpath\fP، يُستخدم الدليل الحالي.\& .PP مثال: .nf .RS 4 for i,p in pairs(posix\&.dir(\&'/\&')) do print(p\&.\&.\&'n\&') end .fi .RE .PP .RE \fBerrno()\fP .RS 4 الحصول على رسالة \fBstrerror\fP(3) والرقم المقابل لـ \fBerrno\fP(3) الحالي.\& .PP مثال: .nf .RS 4 f = \&'/zzz\&' if not posix\&.chmod(f, 100) then s, n = posix\&.errno() print(f, s) end .fi .RE .PP .RE \fBexec(\fP\fIpath\fP [, \fIargs\fP.\&.\&.\&]\fB)\fP (مهجور) .RS 4 تنفيذ برنامج.\& لا يمكن القيام بذلك إلا بعد posix.\&fork().\& .PP هذه الدالة مهجورة ومتاحة فقط لحزم RPM v4 من أجل التوافقية مع الإصدارات السابقة.\& استخدم \fBrpm.\&spawn()\fP أو \fBrpm.\&execute()\fP بدلاً منها.\& .PP .RE \fBfiles(\fP[\fIpath\fP]\fB)\fP .RS 4 التكرار عبر محتويات الدليل.\& إذا حُذف المسار، يُستخدم الدليل الحالي.\& .PP مثال: .nf .RS 4 for f in posix\&.files(\&'/\&') do print(f\&.\&.\&'n\&') end .fi .RE .PP .RE \fBfork()\fP (مهجور) .RS 4 تفريخ (Fork) عملية جديدة.\& انظر \fBfork\fP(2).\& .PP هذه الدالة مهجورة ومتاحة فقط لحزم RPM v4 من أجل التوافقية مع الإصدارات السابقة.\& استخدم \fBrpm.\&spawn()\fP أو \fBrpm.\&execute()\fP بدلاً منها.\& .PP مثال: .nf .RS 4 pid = posix\&.fork() if pid == 0 then posix\&.exec(\&'/foo/bar\&') elseif pid > 0 then posix\&.wait(pid) end .fi .RE .PP .RE \fBgetcwd()\fP .RS 4 الحصول على الدليل الحالي.\& انظر \fBgetcwd\fP(3).\& .PP مثال: .nf .RS 4 if posix\&.getcwd() ~= \&'/\&' then \&.\&.\&. endif .fi .RE .PP .RE \fBgetenv(\fP\fIname\fP\fB)\fP .RS 4 الحصول على متغير بيئة.\& انظر \fBgetenv\fP(3).\& .PP مثال: .nf .RS 4 if posix\&.getenv(\&'HOME\&') ~= posix\&.getcwd() then print(\&'not at home\&') end .fi .RE .PP .RE \fBgetgroup(\fP\fIgroup\fP\fB)\fP .RS 4 الحصول على معلومات \fBgroup\fP(5) لمجموعة ما.\& قد يكون \fIgroup\fP إما معرفاً رقمياً أو اسم مجموعة.\& إذا حُذف، تُستخدم المجموعة الحالية.\& يُعيد جدولاً يحتوي على الحقلين \fBname\fP و \fBgid\fP المحددين لاسم المجموعة ومعرفها على التوالي، وفهارس من 1 فصاعداً تحدد أعضاء المجموعة.\& .PP مثال: .nf .RS 4 print(posix\&.getgroup(\&'wheel\&')\&.gid) .fi .RE .PP .RE \fBgetlogin()\fP .RS 4 احصل على اسم الولوج.\& راجع \fBgetlogin\fP(3).\& .PP مثال: .nf .RS 4 n = posix\&.getlogin() .fi .RE .PP .RE \fBgetpasswd\fP([\fIالمستخدم\fP [, \fIالمحدد\fP]]\fB)\fP .RS 4 احصل على معلومات \fBpasswd\fP(5) لحساب مستخدم.\& قد يكون \fIالمستخدم\fP إما معرفًا رقميًا أو اسم مستخدم.\& إذا أُغفل، استُخدم المستخدم الحالي.\& قد يكون معامل \fIالمحدد\fP الاختياري أحد ما يلي: .PD 0 .IP \(bu 4 \fBname\fP .IP \(bu 4 \fBuid\fP .IP \(bu 4 \fBgid\fP .IP \(bu 4 \fBdir\fP .IP \(bu 4 \fBshell\fP .IP \(bu 4 \fBgecos\fP .IP \(bu 4 \fBpasswd\fP .PD .PP إذا أُغفل، أُعيد جدول يحتوي على كل هذه الحقول.\& .PP مثال: .nf .RS 4 pw = posix\&.getpasswd(posix\&.getlogin(), \&'shell\&')| .fi .RE .PP .RE \fBgetprocessid(\fP[\fIالمحدد\fP]\fB)\fP .RS 4 احصل على معلومات حول العملية الحالية.\& قد يكون معامل \fIالمحدد\fP الاختياري أحد .PD 0 .IP \(bu 4 \fBegid\fP: معرف المجموعة الفعال .IP \(bu 4 \fBeuid\fP: معرف المستخدم الفعال .IP \(bu 4 \fBgid\fP: معرف المجموعة .IP \(bu 4 \fBuid\fP: معرف المستخدم .IP \(bu 4 \fBpgrp\fP: معرف مجموعة الأب .IP \(bu 4 \fBpid\fP: معرف العملية .IP \(bu 4 \fBppid\fP: معرف العملية الأب .PD .PP إذا أُغفل، أُعيد جدول يحتوي على كل هذه الحقول.\& .PP مثال: .nf .RS 4 if posix\&.getprocessid(\&'pid\&') == 1 then \&.\&.\&. end .fi .RE .PP .RE \fBkill(\fP\fIpid\fP [, \fIالإشارة\fP]\fB)\fP .RS 4 أرسل \fBsignal\fP(7) (إشارة) إلى عملية.\& يجب أن تكون \fIالإشارة\fP قيمة رقمية، مثلاً: \& \fB9\fP لـ \fBSIGKILL\fP.\& إذا أُغفلت، استُخدمت \fBSIGTERM\fP.\& راجع أيضًا \fBkill\fP(2).\& .PP مثال: .nf .RS 4 posix\&.kill(posix\&.getprocessid(\&'pid\&')) .fi .RE .PP .RE \fBlink(\fP\fIالمسار_القديم\fP, \fIالمسار_الجديد\fP\fB)\fP .RS 4 أنشئ اسمًا جديدًا عند \fIالمسار_الجديد\fP لملف موجود في \fIالمسار_القديم\fP، ويعرف أيضًا بالوصلة الصلبة.\& راجع أيضًا \fBlink\fP(2).\& .PP مثال: .nf .RS 4 f = rpm\&.open(\&'aaa\&', \&'w\&') posix\&.link(\&'aaa\&', \&'bbb\&') .fi .RE .PP .RE \fBmkdir(\fP\fIالمسار\fP\fB)\fP .RS 4 أنشئ دليلًا جديدًا في \fIالمسار\fP.\& راجع أيضًا \fBmkdir\fP(2).\& .PP مثال: .nf .RS 4 posix\&.mkdir(\&'/tmp\&') .fi .RE .PP .RE \fBmkfifo(\fP\fIالمسار\fP\fB)\fP .RS 4 أنشئ FIFO أو ما يعرف بأنبوب مسمى في \fIالمسار\fP.\& راجع أيضًا \fBmkfifo\fP(2).\& .PP مثال: .nf .RS 4 posix\&.mkfifo(\&'/tmp/badplace\&') .fi .RE .PP .RE \fBpathconf(\fP\fIالمسار\fP [, \fIالمحدد\fP]\fB)\fP .RS 4 احصل على معلومات \fBpathconf\fP(3) لـ \fIالمسار\fP.\& قد يكون \fIالمحدد\fP الاختياري أحد .PD 0 .IP \(bu 4 \fBlink_max\fP .IP \(bu 4 \fBmax_canon\fP .IP \(bu 4 \fBmax_input\fP .IP \(bu 4 \fBname_max\fP .IP \(bu 4 \fBpath_max\fP .IP \(bu 4 \fBpipe_buf\fP .IP \(bu 4 \fBchown_restricted\fP .IP \(bu 4 \fBno_trunc\fP .IP \(bu 4 \fBvdisable\fP.\& .PD .PP إذا أُغفل، أُعيد جدول يحتوي على كل هذه الحقول.\& .PP مثال: .nf .RS 4 posix\&.pathconf(\&'/\&', \&'path_max\&') .fi .RE .PP .RE \fBputenv(\fP\fIالسلسلة\fP\fB)\fP .RS 4 غيّر أو أضف متغير بيئة.\& راجع أيضًا \fBputenv\fP(3).\& .PP مثال: .nf .RS 4 posix\&.putenv(\&'HOME=/me\&') .fi .RE .PP .RE \fBreadlink(\fP\fIالمسار\fP\fB)\fP .RS 4 اقرأ قيمة الوصلة الرمزية عند \fIالمسار\fP.\& راجع أيضًا \fBreadlink\fP(2).\& .PP مثال: .nf .RS 4 posix\&.mkdir(\&'aaa\&') posix\&.symlink(\&'aaa\&', \&'bbb\&') print(posix\&.readlink(\&'bbb\&')) .fi .RE .PP .RE \fBrmdir(\fP\fIالمسار\fP\fB)\fP .RS 4 أزل دليلاً \fIالمسار\fP.\& راجع أيضًا \fBrmdir\fP(2).\& .PP مثال: .nf .RS 4 posix\&.rmdir(\&'/tmp\&') .fi .RE .PP .RE \fBsetgid(\fP\fIالمجموعة\fP\fB)\fP .RS 4 اضبط هوية المجموعة.\& قد تُحدد \fIالمجموعة\fP إما كمعرف رقمي أو اسم مجموعة.\& راجع أيضًا \fBsetgid\fP(2).\& .PP ملاحظة: هذه عملية ذات امتيازات.\& .PP .RE \fBsetuid(\fP\fIالمستخدم\fP\fB)\fP .RS 4 اضبط هوية المستخدم.\& قد يُحدد \fIالمستخدم\fP إما كمعرف رقمي أو اسم مستخدم.\& راجع أيضًا \fBsetuid\fP(2).\& .PP ملاحظة: هذه عملية ذات امتيازات.\& .PP مثال: .nf .RS 4 posix\&.setuid(\&'nobody\&') .fi .RE .PP .RE \fBsleep(\fP\fIالثواني\fP\fB)\fP .RS 4 نَمْ لمدة قدرها \fIالثواني\fP.\& راجع أيضًا \fBsleep\fP(3).\& .PP مثال: .nf .RS 4 posix\&.sleep(5) .fi .RE .PP .RE \fBstat(\fP\fIالمسار\fP [, \fIالمحدد\fP]\fB)\fP .RS 4 احصل على معلومات \fBstat\fP(3) لملف في \fIالمسار\fP.\& قد يكون \fIالمحدد\fP الاختياري أحد .PD 0 .IP \(bu 4 \fBmode\fP .IP \(bu 4 \fBino\fP .IP \(bu 4 \fBdev\fP .IP \(bu 4 \fBnlink\fP .IP \(bu 4 \fBuid\fP .IP \(bu 4 \fBgid\fP .IP \(bu 4 \fBsize\fP .IP \(bu 4 \fBatime\fP .IP \(bu 4 \fBmtime\fP .IP \(bu 4 \fBctime\fP .IP \(bu 4 \fBtype\fP.\& .PD .PP إذا أُغفل، أُعيد جدول يحتوي على كل هذه الحقول.\& .PP مثال: .nf .RS 4 print(posix\&.stat(\&'/tmp\&', \&'mode\&'))| s1 = posix\&.stat(\&'f1\&') s2 = posix\&.stat(\&'f2\&') if s1\&.ino == s2\&.ino and s1\&.dev == s2\&.dev then \&.\&.\&. end .fi .RE .PP .RE \fBsymlink(\fP\fIالمسار_القديم\fP, \fIالمسار_الجديد\fP\fB)\fP .RS 4 أنشئ وصلة رمزية عند \fIالمسار_الجديد\fP تشير إلى \fIالمسار_القديم\fP.\& راجع أيضًا \fBsymlink\fP(2).\& .PP مثال: .nf .RS 4 posix\&.mkdir(\&'aaa\&') posix\&.symlink(\&'aaa\&', \&'bbb\&') .fi .RE .PP .RE \fBsysconf(\fP[\fIالمحدد\fP]\fB)\fP .RS 4 احصل على معلومات \fBsysconf\fP(3).\& قد يكون معامل \fIالمحدد\fP الاختياري أحد ما يلي: .PD 0 .IP \(bu 4 \fBarg_max\fP .IP \(bu 4 \fBchild_max\fP .IP \(bu 4 \fBclk_tck\fP .IP \(bu 4 \fBngroups_max\fP .IP \(bu 4 \fBstream_max\fP .IP \(bu 4 \fBtzname_max\fP .IP \(bu 4 \fBopen_max\fP .IP \(bu 4 \fBjob_control\fP .IP \(bu 4 \fBsaved_ids\fP .IP \(bu 4 \fBversion\fP.\& .PD .PP إذا أُغفل، أُعيد جدول يحتوي على كل هذه الحقول.\& .PP مثال: .nf .RS 4 posix\&.sysconf(\&'open_max\&')| .fi .RE .PP .RE \fBtimes(\fP[\fIالمحدد\fP]\fB)\fP .RS 4 احصل على أوقات العملية والعمليات الأبناء المنتظرة \fBtimes\fP(2).\& قد يكون معامل \fIالمحدد\fP الاختياري أحد .PD 0 .IP \(bu 4 \fButime\fP .IP \(bu 4 \fBstime\fP .IP \(bu 4 \fBcutime\fP .IP \(bu 4 \fBcstime\fP .IP \(bu 4 \fBelapsed\fP .PD .PP إذا أُغفل، أُعيد جدول يحتوي على كل هذه الحقول.\& .PP مثال: .nf .RS 4 t = posix\&.times() print(t\&.utime, t\&.stime) .fi .RE .PP .RE \fBttyname(\fP[\fIfd\fP]\fB)\fP .RS 4 احصل على اسم الطرفية المرتبطة بواصف الملف \fIfd\fP.\& إذا أُهمل \fIfd\fP، يُستخدم \fB0\fP (أي المدخل المبدئي).\& انظر \fBttyname\fP(3).\& .PP مثال: .nf .RS 4 if not posix\&.ttyname() then \&.\&.\&. endif .fi .RE .PP .RE \fBumask(\fP[\fImode\fP]\fB)\fP .RS 4 احصل على \fBumask\fP(2) للعملية أو اضبطه.\& يمكن تحديد \fImode\fP كعدد ثماني أو سلسلة نمط نصية بشكل مشابه لـ \fBposix.\&chmod()\fP.\& .PP مثال: .nf .RS 4 print(posix\&.umask()) posix\&.umask(222) posix\&.umask(\&'ug\-w\&') posix\&.umask(\&'rw\-rw\-r\-\-\&') .fi .RE .PP .RE \fBuname(\fP\fIformat\fP\fB)\fP .RS 4 احصل على معلومات \fBuname\fP(2) حول النظام الحالي.\& توجيهات التنسيق التالية مدعومة: .PP .PD 0 .IP \(bu 4 \fB%m\fP: اسم نوع العتاد .IP \(bu 4 \fB%n\fP: اسم هذه العقدة .IP \(bu 4 \fB%r\fP: مستوى الإصدارة الحالي لهذا التنفيذ .IP \(bu 4 \fB%s\fP: اسم نظام التشغيل هذا .IP \(bu 4 \fB%v\fP: مستوى النسخة الحالي لهذا التنفيذ .PD .PP مثال: .nf .RS 4 print(posix\&.uname(\&'%s %r\&')) .fi .RE .PP .RE \fButime(\fP\fIpath\fP [, \fImtime\fP [, \fIctime\fP]]\fB)\fP .RS 4 غيّر أزمنة الوصول والتعديل الأخيرة.\& يُعبر عن mtime و ctime بالثواني منذ حقبة يونكس (epoch).\& انظر \fButime\fP(2).\& .PP إذا أُهمل \fImtime\fP أو \fIctime\fP، يُستخدم الوقت الحالي، بشكل مشابه لـ \fBtouch\fP(1).\& .PP مثال: .nf .RS 4 posix\&.mkdir(\&'aaa\&') posix\&.utime(\&'aaa\&', 0, 0) .fi .RE .PP .RE \fBwait(\fP[\fIpid\fP]\fB)\fP (مهجور) .RS 4 انتظر عملية وليدة.\& إذا حُدد \fIpid\fP فانتظر تلك الوليدة تحديدًا.\& انظر أيضًا \fBwait\fP(2).\& .PP هذه الدالة مهجورة ومتاحة فقط لحزم RPM v4 من أجل التوافقية مع الإصدارات السابقة.\& استخدم \fBrpm.\&spawn()\fP أو \fBrpm.\&execute()\fP بدلاً منها.\& .PP مثال: .nf .RS 4 pid = posix\&.fork() if pid == 0 then posix\&.exec(\&'/bin/ls\&')) elseif pid > 0 then posix\&.wait(pid) end .fi .RE .PP .PP .RE \fBsetenv(\fP\fIname\fP, \fIvalue\fP [, \fIoverwrite\fP]\fB)\fP .RS 4 غيّر أو أضف متغير البيئة \fIname\fP.\& الوسيط الاختياري \fIoverwrite\fP هو قيمة منطقية تحدد السلوك عندما يكون هناك متغير موجود مسبقًا بنفس الاسم.\& انظر أيضًا \fBsetenv\fP(3).\& .PP مثال: .nf .RS 4 posix\&.setenv(\&'HOME\&', \&'/me\&', true) .fi .RE .PP .RE \fBunsetenv(\fP\fIname\fP\fB)\fP .RS 4 أزل المتغير \fIname\fP من البيئة.\& انظر أيضًا \fBunsetenv\fP(3).\& .PP مثال: .nf .RS 4 posix\&.unsetenv(\&'HOME\&') .fi .RE .PP .RE .SH "التوسيع والتخصيص" عند الاستهلال، ينفذ RPM سكربت استهلال لوا عام \fIinit.\&lua\fP من الدليل الذي يتوسع إليه \fB%getconfdir\fP، وعادة ما يكون \fI/usr/lib/rpm/init.\&lua\fP.\& يمكن استخدام هذا لتخصيص بيئة لوا في rpm دون إعادة تجميع RPM.\& .PP بالنسبة لمفسر لوا المضمن، يُبحث عن الوحدات المحملة باستخدام \fBrequire\fP بشكل رئيس من \fB%{getconfdir}/lua/\fP.\& يعد \fB%_rpmluadir\fP اختصارًا لهذا المسار.\& .PP .SH "انظر أيضًا" \fBrpm\-macros\fP(7) \fBrpm\-payloadflags\fP(7) \fBrpmlua\fP(1) \fBrpm\-version\fP(7) .PP \fBhttps://www.\&lua.\&org/\fP .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .