-
المساهمات
2854 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
38
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Hassan Hedr
-
يمتلك الأمر ls في لينكس العديد من الخيارات الرائعة التي ستعطيك معلومات مهمة عن ملفاتك. الأمر ls يقوم بعرض قائمة بالملفات على أنظمة POSIX وهو أمر سهل وبسيط، عادة ما يقلل من شأنه لأن مهمته بسيطة (فهو فعليًا يفعل مهمة واحدة فقط)، ولكن يمكنك تعديل استخدامك له لتحصل على الكثير منه. من بين أهم أوامر لينكس التي يجب أن تعرفها، يحتل الأمر ls المرتبة الثالثة ربما بينها، لأن الأمر ls ليس فقط يعرض قائمة بالملفات، بل أيضا يعرض لك معلومات مهمة عنها. مثل من يملك الملف أو المجلد، متى تم تعديل الملف آخر مرة، وحتى نوع الملف، وهو أمر مهم يبيّن لك أين تقف الآن وما الملفات والأغراض المتاحة في المسار الحالي وماذا يمكنك أن تفعل بهم. إذا كانت خبرتك مع الأمر ls مقتصرة على الاسم البديل لهذا الأمر التي يأتي جاهزًا مع توزيعتك في ملف bashrc.، فربما فاتك الكثير. جنو أو BSD؟ قبل أن نلقي نظرةً على خفايا الأمر ls، يجب أن تحدد أي إصدار من ls لديك. أشهر إصدارين هما إصدار جنو، الذي يأتي ضمن حزمة coreutils ضمن جنو، وإصدار BSD. إذا كنت تعمل على لينكس، فعلى الأغلب الأمر ls مثبت لديك أما إذا كنت تعمل على BSD أو نظام ماك، فأنت تملك نسخة إصدار BSD فهناك فروقات، سنغطيها في هذا المقال. يمكنك معرفة النسخة التي لديك باستخدام الخيار version--: $ ls --version إذا كان الخرج يحتوي على معلومات عن حزمة coreutils الخاصة بجنو، فلديك الإصدار الخاص بجنو، أما إذا ظهر لك خطأ فأنت تملك نسخة BSD (يمكنك تنفيذ الأمر man ls | head للتأكد). يجب عليك التحقق أيضا من الإعدادات المسبقة التي قد تأتي مع توزيعتك. التخصيصات في الأوامر عادة تكون موجودة داخل الملف HOME/.bashrc$ أو HOME/.bash_aliases$ أو داخل HOME/.profile$، وعادة تكون موجودة لإعطاء اسم بديل للأمر ls يتضمن خصائص أكثر تعقيدًا، مثال: alias ls='ls --color' التخصيصات التي تأتي مع التوزيعة مفيدة، ولكن تجعل من الصعب التمييز بين عمل الأمر ls بمفرده وما تقدمه الخيارات الإضافية من مزايا. إذا كنت تريد تنفيذ الأمر ls بمفرده وتجاهل أي تسمية بديلة يمكنك استخدام محرف الهروب الخط المائل العكسي (\) قبل الأمر: $ \ls التصنيف عند تنفيذ الأمر ls بمفرده سيعرض قائمة بالملفات موزعة على أعمدة بقدر العرض المتوفر على الطرفية لديك: $ ls ~/example bunko jdk-10.0.2 chapterize otf2ttf.ff despacer overtar.sh estimate.sh pandoc-2.7.1 fop-2.3 safe_yaml games tt المعلومات التي ستظهر مفيدة، لكن بدون رموز تفيد التمييز بين أنواع الملفات (مجلد - ملف نصي - صورة - الخ…) فلن تفيدنا كثيرًا. يمكنك استخدام الخيار F- (أو classify-- في نسخة جنو) لعرض رمز بعد كل اسم ملف لتمييز نوعه: $ ls ~/example -F bunko jdk-10.0.2/ chapterize* otf2ttf.ff* despacer* overtar.sh* estimate.sh pandoc@ fop-2.3/ pandoc-2.7.1/ games/ tt* الرموز بعد أسماء الملفات تدل على نوع الملف، وتحمل الدلالات التالية: خط مائل عكسي (/) يدل على نوع المجلد. محرف النجمة (*) يدل أن الملف تنفيذي. يتضمن ذلك الملفات الثنائية (الشيفرة المصرّفة) وكذلك النصوص البرمجية (الملفات النصية التي تملك صلاحية التنفيذ). المحرف (@) يدل على وصلة رمزية (أو اسم بديل). محرف المساواة (=) يدل على مقبس. على BSD، محرف إشارة النسبة المئوية (%) يدل على أن الملف مشار إليه كمحذوف whiteout (وهي طريقة لحذف الملفات على بعض الأنظمة). على جنو، محرف إشارة الأصغر (<) يدل على باب (طريقة للتواصل بين الإجرائيات على ايلوموس و سولاريس) محرف الخط العمودي (|) يدل على FIFO. نسخة أبسط من هذا الخيار هي p-، وهي تبيّن فقط الفرق بين الملفات والمجلدات. عرض قائمة تفاصيل طويلة نحتاج في كثير من الأحيان إلى عرض تفاصيل أكثر عن الملفات من خرج الأمر ls، لذا العديد من التوزيعات تُعِّين اسمًا بديلا على شكل ll تكون قيمته ls -l. تعرض القائمة الطويلة العديد من الخصائص المهمة لنا مثل الصلاحيات، المستخدم مالك الملف، المجموعة التي ينتمي إليها الملف، حجم الملف بالبايت، وتاريخ آخر تعديل على الملف: $ ls -l -rwxrwx---. 1 seth users 455 Mar 2 2017 estimate.sh -rwxrwxr-x. 1 seth users 662 Apr 29 22:27 factorial -rwxrwx---. 1 seth users 20697793 Jun 29 2018 fop-2.3-bin.tar.gz -rwxrwxr-x. 1 seth users 6210 May 22 10:22 geteltorito -rwxrwx---. 1 seth users 177 Nov 12 2018 html4mutt.sh [...] إذا كانت وحدة البايت مربكة لك، أضف الخيار h- (أو الخيار human-- على جنو) ليتم ترجمة الحجوم الى صيغة مقروءة بشكل أفضل: $ ls --human -rwxrwx---. 1 seth users 455 Mar 2 2017 estimate.sh -rwxrwxr-x. 1 seth seth 662 Apr 29 22:27 factorial -rwxrwx---. 1 seth users 20M Jun 29 2018 fop-2.3-bin.tar.gz -rwxrwxr-x. 1 seth seth 6.1K May 22 10:22 geteltorito -rwxrwx---. 1 seth users 177 Nov 12 2018 html4mutt.sh يمكنك تخفيف المعلومات الظاهرة عبر إظهار فقط عمود مالك الملف باستخدام الخيار o- أو فقط عمود المجموعة المالكة للملف عبر الخيار g-: $ ls -o -rwxrwx---. 1 seth 455 Mar 2 2017 estimate.sh -rwxrwxr-x. 1 seth 662 Apr 29 22:27 factorial -rwxrwx---. 1 seth 20M Jun 29 2018 fop-2.3-bin.tar.gz -rwxrwxr-x. 1 seth 6.1K May 22 10:22 geteltorito -rwxrwx---. 1 seth 177 Nov 12 2018 html4mutt.sh يمكنك دمج الخيارين لإخفاء كلا العمودين. صيغة الوقت والتاريخ صيغة قائمة التفاصيل الطويلة للأمر ls تكون عادةً على الشكل التالي: -rwxrwx---. 1 seth users 455 Mar 2 2017 estimate.sh -rwxrwxr-x. 1 seth users 662 Apr 29 22:27 factorial -rwxrwx---. 1 seth users 20697793 Jun 29 2018 fop-2.3-bin.tar.gz -rwxrwxr-x. 1 seth users 6210 May 22 10:22 geteltorito -rwxrwx---. 1 seth users 177 Nov 12 2018 html4mutt.sh لا يمكن ترتيب أسماء الشهور بهذه الصيغة بسهولة، لا حسابيا (حسب اذا كنت تفضل أسماء الشهور أو رقم يدل على ترتيبها) ولا إدراكيًا. يمكنك تغيير صيغة عرض العلامة الزمنية عبر الخيار time-style-- إضافة إلى اسم الصيغة. الصيغ المتاحة هي: (1970-01-01 21:12:00) full-iso. long-iso (1970-01-01 21:12). iso (01-01 21:12). locale (سيتم استخدام إعداداتك المحلية). posix-STYLE (بدل كلمة STYLE بالمعرّف المحلي). يمكنك أيضا إنشاء صيغة مخصصة مماثلة للصيغ التي يدعمها الأمر date. الترتيب بحسب الوقت يرتب الأمر ls القائمة افتراضيًا حسب الترتيب الأبجدي. يمكنك تغيير الترتيب إلى الترتيب بحسب الوقت الذي تم فيه تعديل الملفات آخر مرة (الأحدث أولًا) باستخدام الخيار t-: $ touch foo bar baz $ ls bar baz foo $ touch foo $ ls -t foo bar baz نوع القائمة الخرج القياسي للأمر ls يوازن بين قابلية القراءة والتوفير في المساحة، لكن أحيانا تحتاج أن تكون قائمة الملفات بترتيب معين. ولتحديد تنسيق القائمة ليكون عناصر وبينها فاصلة، نستخدم الخيار m-: ls -m ~/example bar, baz, foo لإجبار وضع العناصر بحيث يكون كل ملف بسطر، نستخدم الخيار 1- (رقم واحد وليس حرف L صغير): $ ls -1 ~/bin/ bar baz foo لترتيب العناصر حسب اللاحقة لكل ملف وليس حسب اسم الملف، نستخدم الخيار X-: $ ls bar.xfc baz.txt foo.asc $ ls -X foo.asc baz.txt bar.xfc إخفاء الملفات من الخرج التي قد لا تحتاج لرؤيتها هناك بعض العناصر في خرج الأمر ls التي قد لا تهتم لرؤيتها، مثل المحارف الوصفية . و .. التي تدل على "المسار الحالي" و "مستوى واحد للخلف" على التوالي. اذا كان لديك معرفة بكيفية التنقل بين المجلدات داخل الطرفية، فأنت تعلم أن كل مسار يشير إلى نفسه كـ . وللمسار الأب كـ ..، لذ قد لا تحتاج لرؤية تلك الدلالات في كل مرة تستخدم بها الخيار a- لعرض الملفات المخفية. لعرض تقريبا كل الملفات المخفية (ما عدا . و ..) يمكنك استخدام A-: $ ls -a . .. .android .atom .bash_aliases [...] $ ls -A .android .atom .bash_aliases [...] هناك عُرف في العديد من أدوات يونكس أن يتم حفظ ملفات النسخ الاحتياطي باسم ملف متبوع بمحرف مميز ما. على سبيل المثال المحرّر Vim، يقوم بحفظ ملفات النسخ الاحتياطية باسم متبوع بالمحرف ~ . هذه الملفات ستنقذك في الكثير من المرات، لكن قد لا تحتاج لرؤيتها دومًا داخل قائمة الملفات، لإخفائها يمكنك استعمال الخيار B- أو igonre-backups-- وسيقوم الأمر ls بإخفاء ملفات النسخ الاحتياطي ذات اللواحق المشهورة (هذا الخيار غير متوفر في إصدار BSD للأمر ls): $ ls bar.xfc baz.txt foo.asc~ foo.asc $ ls -B bar.xfc baz.txt foo.asc ملفات النسخ الاحتياطي لازالت موجودة، فقط تم إخفائها من قائمة الملفات. جنو إيماكس GNU Emacs يحفظ ملفات نسخ احتياطي (إلا إذا تم تغيير إعدادات ذلك) عبر وضع محرف المربع # قبل وبعد اسم الملف. تطبيقات أخرى أيضا ستستخدم صيغ أخرى لأسماء الملفات تلك. لذا يمكنك تحديد نمط مخصص لاسم الملفات التي تود إخفاءها من الخرج عبر الخيار hide--: $ ls bar.xfc baz.txt #foo.asc# foo.asc $ ls --hide="#*#" bar.xfc baz.txt foo.asc عرض محتويات المجلدات لن يعرض الأمر ls محتويات المجلدات إلا إذا حددت له مجلدًا معينًا لعرض محتوياته، لذلك يمكنك استخدام الخيار R- لعرض شجرة محتويات كل المجلدات: $ ls -F example/ quux* xyz.txt $ ls -R quux xyz.txt ./example: bar.xfc baz.txt #foo.asc# foo.asc تبسيط استخدام الخيارات المكررة عبر الاسم البديل ربما يكون الأمر ls من أكثر الأوامر استخداما خلال الجلسة الواحدة. فهو كعينيك وأذنيك، يوضح لك السياق الحالي ويؤكد لك نتيجة وجود الملفات من عدمها وبينما يحتوي على الكثير من المزايا فهو سهل الاستخدام للغاية، حرفان فقط وزر Enter، وستعلم تماما أين أنت وماذا يوجد حولك، قد تعتاد على هذه البساطة وتنسى الاستفادة من خياراته المفيدة. الحل يكون بتحديد اسم بديل للأمر ls يتضمن الخيارات التي توفر لك المعلومات التي تحتاجها دومًا. لتعيين اسم بديل في جلسة باش Bash، أنشئ ملفًا في مجلد المنزل لحسابك بالاسم bash_aliases. (يجب وضع النقطة في بداية اسم الملف). في هذا الملف حدد قائمة الأوامر التي تريد تعيين اسمًا بديلا لها ثم قيمة هذا الاسم البديل. مثال: alias ls='ls -A -F -B --human --color' السطر السابق يجعل صدفة باش تترجم الأمر ls الى ls -A -F -B --human --color. ولست مقيدًا بتعيين أسماء بديلة للأوامر المتوفرة فقط. بل يمكنك إنشاء أسماء بديلة خاصة بك: alias ll='ls -l' alias la='ls -A' alias lh='ls -h' لكي تُفعّل تلك الأسماء البديلة، يجب على الصدفة أن تعلم بوجود ملف الإعدادات bash_aliases.. قم بفتح الملف bashrc. في محرر النصوص (أو قم بإنشائه، إن لم يكن موجودًا)، وضع داخله الشيفرة التالية: if [ -e $HOME/.bash_aliases ]; then source $HOME/.bash_aliases fi في كل مرة سيحمّل الملف bashrc. (أي في كل مرة سيتم فيها إنشاء جلسة صدفة جديدة)، سيقوم باش بتحميل الملف bash_aliases. إلى البيئة الحالية. يمكنك إغلاق وإعادة فتح الجلسة الحالية لتفعيل ذلك أو يمكنك إجبار تحميل الإعدادات عبر تنفيذ الأمر: $ source ~/.bashrc إذا نسيت بعد فترة ما إذا كنت قد قمت بتعيين اسم بديل لأمر ما أم لا، الأمر which سيخبرك بذلك: $ which ls alias ls='ls -A -F -B --human --color' /usr/bin/ls إذا كنت قد حددت اسما بديلا للأمر ls قيمته هو الأمر نفسه مع بضعة خيارات أخرى. وتريد تنفيذ الأمر بمفرده وتجاهل الاسم البديل المعين له يمكنك إسباق الأمر بمحرف الخط المائل العكسي (\). مثلا في الاسم البديل السابق استخدمنا الخيار B- لإخفاء ملفات النسخ الاحتياطي من الخرج، أما في حال أردت مشاهدة تلك الملفات وتجاهل الاسم البديل ينفذ الأمر كالتالي: $ ls bar baz foo $ \ls bar baz baz~ foo ختاما يحوي الأمر ls العديد من الخيارات المفيدة، العديد منها متخصصة بحالة معينة أو تعتمد على نوع الطرفية التي تستخدمها. يمكنك القراءة ومعرفة المزيد من الخيارات بتنفيذ الأمر info ls على أنظمة جنو، أو man ls على أنظمة جنو و BSD. قد تجد من الغريب على نظام شعاره الأساسي هو "قم بعمل واحد، وقم به جيدًا" أن يثقل أمرا واحدا بخمسين خيار. لكن حقيقةً أن الأمر ls يقوم بشيء واحد فقط: يظهر قائمة بالملفات. والخمسين خيار المتوفرين سيمكنوك من تحديد كيف تريد هذه القائمة، بالفعل ls يقوم بعمل واحد ويقوم به جيدًا. ترجمة -وبتصرف- للمقال Master the Linux ls command لصاحبه Seth Kenlon. اقرأ أيضًا ما الفروق بين الأوامر grep وegrep fgrep مدخل إلى الأمر ss في لينكس مقدمة إلى أمر tar في لينكس كيف تستخدِم أمرَي find و locate للبحث عن الملفّات على Linux النسخة الكاملة من كتاب أنظمة التشغيل للمبرمجين
-
يقدم التخزين السحابي العديد من المزايا، لكن لن يغنيك ذلك عن امتلاكك لبياناتك على قرص صلب فيزيائي خاص بك. عندما تخزن بياناتك على القرص الصلب ستعلم تماما أين بياناتك، ويمكنك الوصول اليها دائما عند الحاجة. الأمر الأفضل من ذلك حتى أن تخزن بياناتك على قرص محمول، مثل ذاكرة اليو اس بي USB Drive، لست فقط على علم أين تقع بياناتك بل يمكنك حملها معك لأي مكان. إذا كنت مستخدم جديد للينكس، أو كنت تحاول التعامل مع نظام ملفات لينكس على قرص خارجي، قد تجد الأقراص الخارجية أمرا مربكًا، ستكون عرضة لأخطاء في الصلاحيات أو التضارب فيها، أو حتى خسارة البيانات الوصفية للملفات metadata، هناك إجابتين "صحيحتين" لذلك: نظام ملفات ExFAT وقوائم التحكم بالوصول ACL. نظام ملفات ExFAT رسميا، كان نظام ملفات ExFAT معرضًا لمخاطر قانونية كثيرة من قبل مايكروسوفت لأنها كانت تمتلك الشيفرة الخاصة به. قاموا بمقاضاة شركات ومنظمات عديدة من قبل دفاعًا عن ملكيتهم لنظام الملفات FAT، لذا كان الخوف مسيطرًا أنهم قد يعيدوا الكرّة مع نظام ExFAT. لكن مؤخرًا قامت مايكروسوفت بجعل معايير نظام ExFAT مفتوح المصدر. لم يوفروا برنامج تشغيل له ولكنه يوجد برنامج تشغيل حالي له على لينكس، وبعد أن توفر للمطورين إمكانية الوصول للمعايير بشكل كامل أصبح التطوير والتحسين عليها أمرًا حتميًا. محاسن نظام ExFAT أنه عابر للمنصات (ويندوز، ماك، والعديد من الأجهزة المحمولة تستخدمه)، وقد تم تصميمه دون اعتبار لنظام الصلاحيات على الملفات. حيث يمكنك توصيل محرك خارجي بتنسيق ملفات ExFAT لأي جهاز حاسوب، وكل الملفات ستكون متاحة للجميع. سيُعد هذا أمرا أيجابيًا أو سلبيًا بحسب طريقة استخدامك، لكن بالنسبة للاستعمال مع ملفات الوسائط المتعددة ذلك يعد أمرا إيجابيا جدًا. قوائم التحكم بالوصول ACL يمكنك -إن كنت تفضل- استخدام نظام ملفات لينكس على محرك الملفات المحمول، لكن لجعل مشاركة الملفات أمرا سلسًا يجب استخدام قوائم التحكم بالوصول ACL اختصارًا إلى Access control lists. عند إنشاء ملف أو مجلد على محرك ملفات، يوجد إعدادات افتراضية على نظامك ستحدد ما الصلاحيات التي سيحصل عليها هذا الملف أو المجلد. في معظم الحالات، الإعدادات الافتراضية تكون كافية ومنطقية، مثلا عند إنشائك لملف في مسار مجلد المنزل لحسابك الشخصي فعادةً أنت لا تريد إعطاء صلاحية الوصول إليه للمستخدمين الآخرين. لكن عندما تنشئ ملفًا في محرك خارجي، فأغلب الأحيان ستحتاج مشاركته مع الآخرين (حتى لو كان الشخص الآخر هو أنت لكن من جهاز حاسوب آخر). يمكنك إعادة تعريف الصلاحيات الافتراضية لمشاهدة الملفات عن طريق قائمة التحكم بالوصول، ويمكنك التحكم بوضع إنشاء الملفات عن طريق إضافة بت لاصق sticky bit. قائمة التحكم بالوصول هي طبقة من سياسات الحماية تقع في الخصائص الإضافية للمجلدات والملفات وتسمح لك بتحديد استثناءات على الصلاحيات المحددة من قبل نظام الملفات. وأكثر ما توفره هذه الطبقة، هي تجاوز نموذج المالك الوحيد والمجموعة المالكة الوحيدة لنظام صلاحيات يونكس التقليدي. على سبيل المثال، بينما حسابي بإسم حسان (بالمعرّف 1000) على جهازي المكتبي يملك مجلدًا على سطح المكتب، حساب آخر لي بإسم حسان على جهازي المحمول (بالمعرّف 500) من وجهة نظر نظام الملفات هو لا يملك نفس المجلد ولا يصل إليه، فقط لأن المعرّف لكل من الحسابين مختلف. نفس المشكلة مع نظام تملّك المجموعات، مجموعة بالمعرّف 1000 قد تملك مجلدًا على جهاز، مجموعة أخرى على جهاز آخر بمعرّف مغاير (500 أو 10922) لن تصل إلى نفس المجلد. قائمة التحكم بالوصول تستطيع حل المشكلة بإضافة مُلّاك أفراد أو مجموعات ثانويين للمجلدات والملفات. مشاهدة قائمة الوصول الحالية جميع المجلدات والملفات في أغلب أنظمة الملفات الشائعة على لينكس لديها قائمة تحكم بالوصول افتراضية وتكون مخزّنة في الخصائص الإضافية، وهي نوع من البيانات الوصفية لا تلاحظه عادةَ. يمكنك مشاهدتها عبر الطرفية بتنفيذ الأمر التالي: $ getfacl ./example # file: /run/media/drive/example # owner: hassan # group: users user::rwx group::rwx other::r-- أسطر التعليق الظاهرة هي مرجع فقط، تدل على أسم الملف وحساب المالك والمجموعة المالكة للملف الحالي الذي تستعرض معلومات عنه حاليًا. الأسطر اللاحقة لذلك تُظهر القواعد المطبقة على هذا الملف أو المجلد. في المثال السابق، صلاحيات المستخدم المالك مضبوطة للقيمة rwx، ومثلها للمجموعة المالكة rwx، وللباقي --r. هذه الصلاحيات تعكس الصلاحيات الافتراضية لقائمة التحكم بالوصول الافتراضية لنظام الملفات: $ ls -lA /run/media/drive drwxrwxr-- 26 hassan users 4096 Jan 16 21:04 example $ id uid=1000(hassan) gid=100(users) groups=100(users)... طالما أن حساب المستخدم hassan (بالمعرف 1000) أو حساب عضو في المجموعة users (بالمعرف 100) يتعاملون مع المجلد example، فلهم صلاحية وصول كاملة. أي حساب آخر سيمتلك صلاحية القراءة r فقط. تعيين قائمة التحكم بالوصول لتعديل قائمة التحكم بالوصول، يمكنك استخدام الأمر setfacl أو عبر استخدام مدير ملفات يدعم قوائم التحكم بالوصول. يمكنك التعميم أو التخصيص عندما تعيّن قائمة التحكم بالوصول. إذا كنت فقط تريد تعديل إعدادات صلاحيات نظام الملفات، يمكنك استخدام أحد الأمرين chmod أو setfacl وهي إعدادات تحكم بالوصول عامة لأنك لا تضيف صلاحيات جديدة عن تلك المتاحة ليونكس من معايير نظام الملفات. $ setfacl --modify g::r example $ getfacl ./example | grep "group::" group::r-- $ ls -l . | grep example drwxr--r-- 26 hassan users 4096 Jan 16 21:04 example العملية نفسها ممكنة عبر استعمال الأمر chmod: $ chmod g+x example $ getfacl ./example | grep "group::" group::r-x $ ls -l . | grep example drwxr-xr-- 26 seth users 4096 Jan 16 21:04 example إضافة مستخدمين ومجموعات للاستفادة من مزايا التي توفرها قوائم التحكم بالوصول يجب أن نستخدمها لإضافة صلاحيات إضافية مغايرة الصلاحيات الأصلية في يونكس. إذا سجلت الدخول على جهاز سطح المكتب من حسابي hassan ذو المعرّف 1000، وأعلم أنني أريد الوصول واستعمال مجلد مخزن على القرص المحمول من حساب hassan ذو المعرّف 500 من جهازي المحمول، لن يكون عندها كافيا أن أحدد مالك المجلد هو الحساب hassan فقط، لأن المعرّفين لكلا الحسابين ليسا متطابقين. يمكنك إضافة مستخدم أو معرّف مستخدم لقائمة تحكم بالوصول كالتالي: $ setfacl --modify u:500:rwx example $ getfacl example # file: /run/media/drive/example # owner: hassan # group: users user::rwx user:500:rwx [...] كما نلاحظ تم إضافة سطر قيد جديد خاص بالمستخدم ذو المعرّف 500 إلى قائمة التحكم بالوصول الخاصة بالمجلد. الآن أصبح من الممكن وصل مخزن الملفات المحمول الذي يحوي هذا المجلد على جهاز يونكس أو لينكس آخر وسيتم السماح للمستخدم بالمعرّف 500 بالوصول الى المجلد example. يمكنك أيضا إضافة حسابات مستخدمين آخرين عبر اسم الحساب، أو مجموعات عبر اسم المجموعة أو معرّف المجموعة. المعرّفات هي المهمة مع الصلاحيات، لكن إذا كنت في بيئة مختلطة (مثلا بيئة خوادم RHEL و العملاء البدائيين)، فيجب التحقق من معرّفات الحسابات والمجموعات التي تضيفها، فالحسابات في هذه البيئات قد تبدو متشابهة بالإسم ولكنها تختلف بمعرّفاتها. تعيين القواعد الافتراضية لقوائم التحكم بالوصول إذا تعاملت مع قوائم التحكم بالوصول على أنها إعدادات لمرة واحدة، فسريعًا ما ستواجه مشاكل عندما يبدأ المستخدمون الآخرون بإنشاء الملفات والمجلدات. أي ملف أو مجلد سيتم إنشاءه من أي مستخدم سيورث تلقائيا إعدادات الصلاحيات الافتراضية للنظام (وقائمة التحكم بالوصول). هذا يعني عندما يقوم حساب hassan على الحاسب المحمول ذي المعرّف 500 بإنشاء ملف داخل مجلد تم مشاركته معه، لن يتمكن حساب hassan الآخر ذو المعرّف 1000 على جهاز سطح المكتب من الوصول إليه، لأن مالك الملف سيتم تعيينه للحساب ذي المعرّف 500 فقط. يمكن تطبيق قائمة تحكم بالوصول افتراضية للمجلدات حيث أن أي ملف أو مجلد سيتم إنشاؤه داخل هذا المجلد سيورّث تلقائيا قائمة التحكم بالوصول للمجلد الأب. يمكنك تعيين قائمة تحكم بالوصول افتراضية لمجلد عبر تمرير الخيار default-- كالتالي: $ setfacl --default --modify u:500:rwx example $ setfacl --default --modify u:1000:rwx example $ getfacl --omit-header example user::rwx user:500:rwx group::rw- mask::rwx other::r-x default:user::rwx default:group::rw- default:group:500:rwx default:group:1000:rwx default:mask::rwx default:other::r-x الآن عندما يقوم مستخدم بإنشاء مجلد جديد داخل المجلد example، سيتم توريث قائمة التحكم بالوصول له لتكون نفسها للمجلد الأب: $ cd example $ mkdir penguins $ getfacl --omit-header penguins user::rwx group::rw- group:500:rwx group:1000:rwx mask::rwx other::r-x default:user::rwx default:group::rw- default:group:500:rwx default:group:1000:rwx default:mask::rwx default:other::r-x هذا يعني أن أي مجلد أو ملف سيرث تلقائيا نفس قائمة التحكم بالوصول، ولن يتم استثناء أي من الحسابين بالمعرّفات 500 أو 100 من الوصول للملفات أو المجلدات. قائمة تحكم بالوصول عملية لمحركات الأقراص الخارجية عند استخدام نظام ملفات لينكس على محرك أقراص خارجي، لضمان الوصول للملفات والمجلدات لكل المستخدمين الذين يتوقع استخدامهم له أسهل طريقة هي تعيين قائمة تحكم بالوصول واحدة على المجلد في أعلى مستوى. لنفرض مثلا لديك مخزن ملفات USB يدعى mydrive منسّق بنظام الملفات ext4. وتريد السماح بالوصول للملفات المخزنة فيه لكل من حساباتك على جهاز سطح المكتب والجهاز المحمول وأيضا زميلك أحمد. أولا قم بإنشاء مجلد في أعلى مستوى من في مخزن الملفات: $ mkdir /mnt/mydrive/umbrella ثم قم بتطبيق قائمة تحكم بالوصول على ذلك المجلد لضمان الوصول لكل حسابات المستخدمين الذي تريد: $ setfacl --modify \ u:500:rwx,u:1000:rwx,u:ahmad:rwx \ /mnt/mydrive/umbrella أخيرًا تقوم بتطبيق قائمة تحكم بالوصول افتراضية ليتم توريثها لكل الملفات والمجلدات المنشأة داخل الملف umbrella (الأمر التالي يستخدم اختصار خيار modify--): $ setfacl --default -m u:500:rwx,u:1000:rwx,u:ahmad:rwx \ /mnt/mydrive/umbrella تطبيق القواعد الافتراضية على نظام حالي إذا كنت تريد تطبيق قائمة تحكم بالوصول واحدة لعدة ملفات موجودة مسبقًا، يمكنك الاستعانة بالأمر find. أولا نقوم بالبحث عن المجلدات التي نريدها ثم نطبق عليها قائمة التحكم بالوصول: $ find /mnt/mydrive/umbrella -type d | \ parallel --max-args=6 setfacl \ --default -m u:500:rwx,u:1000:rwx,u:ahmad:rwx إن تطبيق صلاحية التنفيذ للملفات بشكل عشوائي أمر غير محبذ، لذا نبحث عن كل الملفات ونغير الصلاحيات لها إلى rw. الملفات التي تتطلب التنفيذ يمكن تعيين صلاحية التنفيذ لها إما بشكل يدوي أو عبر إضافة لاحقة لها: $ find /mnt/mydrive/umbrella -type f | \ parallel --max-args=6 setfacl \ --default -m u:500:rw,u:1000:rw,u:ahmad:rw يمكنك تغيير المعاملات الممررة للأوامر السابقة بحسب حاجتك (لا تقم بتنفيذ الأمر الذي يقوم بمسح صلاحية التنفيذ على المجلد user/، أو على مجلد يحتوي فقط على ملفات تنفيذية). المحركات الخارجية لا تدع الارتباك حول تحديد صلاحيات الملفات على المحركات الخارجية المشتركة يحدّك، ولا تحصر نفسك فقط في صلاحيات يونكس التقليدية. استفد من مزايا قوائم التحكم بالوصول لتتمكن من استخدام أنظمة ملفات لينكس أينما ذهبت. ترجمة -وبتصرف- للمقال Access control lists and external drives on Linux: What you need to know لصاحبه Seth Kenlon. اقرأ أيضًا التعرف على اختناقات الأداء في نظام لينكس باستخدام الأدوات مفتوحة المصدر نصائح وحيل لاستخدام نظام CUPS للطباعة في لينكس تعديل الصور والتلاعب بها عبر سطر الأوامر في لينكس التعرف على اختناقات الأداء في نظام لينكس باستخدام الأدوات مفتوحة المصدر [فيديو] الأذونات في نظام لينكس
-
يبدو أن المشكلة لديك هي في إجرائية FilterStudentData حيث أنك تمرر لها نص عبارة عن أسماء العلامات التجارية مفصولة فيما بينها بفاصلة "," يجب معالجة هذه القيمة وفصل العناصر وتحويلها إلى مصفوفة ليكون لها معنى عند تمريرها للمعامل IN يبدو أنك نسيت ذكر التابع dbo.SplitString قبل القوسين حاول تعديل الإجرائية إلى التالي: CREATE PROCEDUER FilterStudentData ( @stItem VARCHAR(15) = NULL ) AS BEGIN SELECT * FROM [Table] WHERE (Item IN dbo.SplitString(@stItem, ',')) OR ISNULL(@stItem,'') = '' END
-
لا تعتمد على تذكر الدوال وكيفية استخدامها، عند قيامك بالبرمجة يجب أن يكون تركيزك على حل المشكلة نفسها، طريقة استخدام التوابع أو كيف استخدمها هذا مكانه مستند التوثيق للغة أو المكتبة أو إطار العمل الذي تعمل عليه. بعد استخدامك المتكرر لتابع أو طريقة ما ستجد نفسك تتذكرها دائما فهي مثل أي مهارة مع الاستخدام ستتمكن منها. مهما كان مستواك عند ابتعادك عن ممارسة البرمجة سواء بشكل عام أو الابتعاد عن استخدام لغة أو مكتبة أو إطار عمل بشكل خاص، حتمًا ستنسى ماكنت متمرسًا به، الحل هو الممارسة الدائمة.
- 2 اجابة
-
- 2
-
-
تأكد من أن المستودع الذي تحاول رفعه يحتوي على بنية صحيحة لملفات مشروع رياكت اذا كان ملف package-lock.json موجودًا حاول حذفه ومحاولة الرفع مجددًا اذا كان ملف package-lock.json غير موجودًا حاول تنفيذ الأمر npm install لتوليد الملف ثم حاول رفع المشروع مجددًا
-
هناك ثلاث أنظمة تشغيل رئيسية، ويندوز و ماك و لينكس، بما أن حاسوبك ليس من شركة آبل فلن يكون لديك خيار استخدام نظام ماك، بقي المقارنة بين ويندوز ولينكس، ويندوز أفضل من ناحية وجود التعاريف والبرامج والأداء مع قطع العتاد، للاستعمال البرمجي ويندوز اختيار ممتاز ولن تواجه مشاكل معه، ومؤخرًا ويندوز أصبح يأتي مع نواة لينكس، أي يمكنك إن احتجت العمل على نظام لينكس أن تقوم بذلك من داخل ويندوز نفسه عبر ما يسمى WSL يتيح لك تثبيت عدة أنظمة لينكس معا وتشغيل برامجها والتطوير داخلها. ويندوز اختيار ممتاز للمطورين من كافة النواحي.
- 2 اجابة
-
- 1
-
-
يمكن عمل ذلك عبر جعل زر الطباعة يدل على رابط لمسار مخصص للطباعة ويدل على البيانات التي يجب طباعتها، <?php // مسار مخصص للطباعة Route::get('print-data', ...)->name('print-data'); ويُضمّن الزر في ال view مع إضافة البيانات المناسبة للدلالة على البيانات المطلوب طباعتها حسب بنية مشروعك، لنفرض المتغير table يدل على الجدول المطلوب طباعته كالتالي: <a href="{{ route('print-data', ['table' => '2']) }}"> طباعة الجدول </a> وفي متحكم مسار الطباعة نستخرج البيانات المطلوب طباعتها ونمررها ل view خاصة للطباعة ونعيدها : <?php class PrintDataController { function index($request) { $table = $request->query('table'); $data = ... استخراج البيانات return view('print-view', compact('data')); } } في ال view الخاصة بالطباعة ننشئ الجدول كما هو مطلوب وننفذ أمر الطباعة عبر JavaScript كالتالي: <table> ... البيانات </table> <script> // تنفيذ أمر طباعة الصفحة الحالية آليًا window.print(); </script>
- 1 جواب
-
- 1
-
-
يمكن ذلك عبر استدعاء الدالة year من الصنف Illuminate\Database\Schema\Blueprint، وستقوم بإنشاء عمود من النوع YEAR، يصبح ملف التهجير كالتالي: <?php use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; Schema::table('table_name', function (Blueprint $table) { $table->year('عمود_السنة'); ... });
- 1 جواب
-
- 2
-
-
انشاء المشاريع دون إطار عمل يمكنك العمل دومًا وانشاء المشاريع وتطويرها بدون إطار عمل وباللغة الأصلية فقط وستحصل على نتيجة جيدة إضافة لتمكنك من اللغة نفسها ومن مفاهيم أساسية في تطوير المواقع، لكن ستجد نفسك بعد إنشاء أكثر من مشروع أن هناك قطع برمجية تقوم بإعادة كتابتها واستخدامها وتحتاجها في عدة مشاريع معًا، قد تجد حلًا بأن تستخرج تلك القطع البرمجية وتكتبها على شكل حزمة خارجية تضيفها جاهزة لكل مشروع جديد تقوم بكتابته. في حال أردت إضافة مزايا جديدة أو الصيانة على تلك الحزمة فهي أصبحت في مكان واحد سيكون من السهل عليك ذلك. لقد طورتَ إطار العمل الخاص بك ما قمت به الآن هو كتابة مكتبة أو إطار العمل الخاص بك، عوضًا عن ذلك فالمعتاد أننا نستعين بمكتبات وأطر عمل جاهزة فيها كل المكونات التي نحتاجها لتطوير المواقع وهي تحت الصيانة الدائمة من أصحابها ويجري تطويرها وتحسينها باستمرار، وستوفر الكثير من الوقت والجهد. لماذا ابدء بتعلم التطوير من دون أطار عمل؟ تعلمك للمفاهيم تلك في بادئ الأمر عبر كتابتها يدويا -ولو لمرة واحدة- سيعزز من قدرتك على فهم لماذا استخدام أطر العمل والمكتبات الخارجية.
-
JavaBean تتطلب وجود تابع باني للصنف بدون معاملات، يجب إضافة باني بدون معاملات للصنف users_dataclass، في كوتلن يمكنك حل المشكلة بإضافة قيم افتراضية للمعاملات ليتمكن Firebase بناء نسخة من الصف من دون تمرير معاملات كالتالي data class users_dataclass(var name: String = "", var adress: String = "", var age: String = "")
-
يعتمد ذلك على توفير وصف للمعلومات داخل صفحة HTML بهيكلية تسمح لمحركات البحث بالتعرف على المحتوى وتصنيفه بشكل أفضل، يمكنك التعرف عليها عبر موقها الرسمي Schema.org التقييم بالنجوم يستخدم تحديدا الخاصية aggregateRating يجب أولا تحديد القيمة vocab على العنصر الجذر لتشير إلى المرجع المستخدم لتوصيف هيكلية البيانات، يمكن الاعتماد على الخواص typeof لتحديد نوع الغرض، و property للإشارة أن محتوى العنصر هو قيمة الخاصية لنوع الغرض الأب مثال لتوصيف منتج مع تقييم له: <div vocab="https://schema.org/" typeof="Product"> <span property="name">اسم المنتج</span> <img property="image" src="صورة المنتج.jpg" /> <div property="aggregateRating" typeof="AggregateRating"> التقييم <span property="ratingValue">3.5</span>/5 عدد التقييمات <span property="reviewCount">11</span> تقييم </div> </div> عندما يقوم محرك البحث بالوصول لهذه الصفحة سيفهم أن محتواها يعبر عن منتج، ولهذا المنتج اسم وصورة وتقييم، وللتقييم يوجد قيمة حالية وعدد المراجعات الكليّة وسيقوم بعرضها بالشكل المناسب :
- 2 اجابة
-
- 1
-
-
يجب أيضا بعد التأكد من أن قيمة اسم ملف الصورة لا يجوي فراغات في بدايته كما ذكر عدنان، التأكد من مسار الصورة وتحديدا مكان تواجد ملف الصور images، تحديدك لمسار الصورة كالتالي يعني أن ملف الصور images مرتبط بمسار الصفحة الحالية. # قيمة مسار الصورة images/image.png # بفرض مسار الصفحة الحالي example.com/some/path # مسار الصورة سيكون example.com/some/path/images/image.png اذا كان مسار الصور الصحيح هو مطلق وليس نسبي (أي ليس متعلق بمسار الصفحة الحالية)، فيجب إضافة "/" لبداية المسار. # قيمة مسار الصورة /images/image.png # بفرض مسار الصفحة الحالي example.com/some/path # مسار الصورة سيكون example.com/images/image.png
-
قم بإرفاق التالي لتتوضح المشكلة رسالة الخطأ كاملة من أول سطر لها الكود الخاص بالصنف users_dataclass شكل البيانات لديك في قاعدة بيانات Firebase
-
واحدة من أهم مساهمات شركة أبل في جنو/لينكس كانت تبني CUPS داخل نظام MacOS X، هل سبق لك أن حاولت إعداد طابعة على توزيعة سطح المكتب جنو/لينكس في أواخر التسعينات أو قبل ذلك حتى؟ سابقًا كان الأمر ممكنا في حال كنت تعمل لدى منظمة لديها فريق دعم فني لإعدادها ويوجد العتاد المخصص لذلك أو حتى خادم خاص للطباعة، إذ كانت هناك العديد من المعايير والبروتوكولات المختلفة للتعامل مع الطابعات، وجزء صغير من الباعة الكبار (عادةً الذين يستخدمون يونكس) يقدمون دعمًا متخصصًا وبرامج تشغيل لجميع منتجاتها. لكن إذا أراد أحد المهتمين بالمصادر مفتوحة اقتناء طابعة منزلية تعمل على توزيعة لينكس المفضلة لديه، كان لذلك قصة أخرى، فكان عليه أن يقضي الكثير من الوقت على المنتديات، أو مجموعات الأخبار، أو حتى على نظام دردشة IRC (هل تتذكر أسلاف شبكات التواصل والمحادثة تلك؟) وهو يسأل عن الطابعات التي يسهل تنصيب برامج التشغيل الخاصة بها على لينكس. أُصدرت أول نسخة من نظام CUPS في عام 1999، من قبل شركة Easy Software Products، وهو اختصارًا لنظام الطباعة المشترك ليونكس Common Unix Printing System، تبنت النظام حينها معظم توزيعات لينكس الشهيرة وعينته كنظام الطباعة الافتراضي فيها. كان سبب النجاح الكبير لهذا النظام هو كونه معيارًا واحدًا قادر على التعامل مع عدة طابعات وبروتوكولات مختلفة . لكن إذا لم تقم شركة الطابعة بتوفير محرك CUPS (برنامج تعريفي على نظام CUPS) لطابعتها، فسيكون من الصعب أو يستحيل جعلها تعمل، لكن بعض الأشخاص الأذكياء وظفوا الهندسة العكسية لحل تلك المشكلة. وكانت هناك بعض الطابعات تستطيع العمل مع هذا النظام مباشرةً، وهي تلك التي تدعم بوست سكربت PostScript وبروتوكول الطباعة عبر الانترنت Internet Printing Protocol (يختصر إلى IPP). تبني آبل لنظام الطباعة CUPS في بدايات الألفية الثانية كانت شركة أبل تعاني لبناء نظام طباعة جديد لنظامها الحديث Mac OS X فقررت آنذاك في شهر آذار عام 2002 توفير الوقت من خلال تبني CUPS داخل نظام تشغيلها الرئيسي. لا أحد من شركات الطابعات تمكن من تجاهل الحصة السوقية لأجهزة شركة أبل، لذا أصبح الكثير من برامج تشغيل الطابعات الجديدة لأنظمة Mac OS X تدعم CUPS، مرورًا بمعظم الشركات ومنتجاتها، من تصميم بصري، وطباعة الصور. أصبحت CUPS مهمة للغاية بالنسبة لآبل التي اشترت البرمجية من Easy Software Products عام 2007؛ ومنذ ذلك الحين وأبل مستمرة في دعم وتطوير ما أصبح ملكيتها الفكرية. ما علاقة كل هذا بجنو/لينكس؟ في حين أن آبل ضمنت CUPS داخل نظام MacOS X، كان قد استخدم بشكل افتراضي في العديد من التوزيعات ومتاحًا لمعظم التوزيعات الأخرى. لكن القليل من برامج التشغيل المخصصة كانت متاحة، ما يعني أنهم لم يكونوا مصنفين ومحزّمين ك "مخصص لجنو/لينكس". بمجرد أن أصبحت محركات CUPS متاحة داخل نظام MacOS X، انتشرت طريقة بين محبي جنو/لينكس وهي تنزيل ملفات المحركات واستخراج ملفات PPD منها، ثم تجربتها مع طابعتك. هذا كان سحر CUPS: إن توفر محرك تشغيل، فهو غالبًا سيعمل على جميع أنظمة التشغيل التي تستخدم CUPS للطباعة، طالما أنه يستخدم بروتوكول مدعوم (مثل IPP). هكذا بدأت تتوفر برامج تشغيل الطابعات لجنو/لينكس. انتشار دعم CUPS أدرك بائعي الطابعات بعد ذلك كله أنه من السهل توفير برامج تشغيل لأنظمة جنو/لينكس بعد أن قاموا بتطويرها لدعم ماك. حاليًا من السهل إيجاد برنامج تشغيل لجنو/لينكس خاص بطابعة ما حتى الحديثة منها. بعض التوزيعات تتضمن حزم تحتوي على الكثير من برامج التشغيل، ومعظم العلامات التجارية تقدم برامج تشغيل مخصصة أحيانا عبر تقديمها داخل حزمة، وأحيانا أخرى مع ملف PPD في ملف مضغوط. تطبيقات متقدمة للتحكم بالطابعة متوفرة أيضًا، بعضها رسمي، وبعضها غير رسمي، مما يجعل بالإمكان على سبيل المثال مراقبة مستويات الحبر أو تنظيف رؤوس الطباعة. في بعض الحالات، يكون تثبيت طابعة على جنو/لينكس أسهل حتى من تثبيتها على أنظمة التشغيل الأخرى. خصوصًا مع التوزيعات التي تستخدم الشبكات بدون إعداد (مثل بونجور Bonjour، أفاهي Avahi) للاستكشاف التلقائي ومشاركة الطابعات عبر الشبكة. حيل ونصائح تثبيت طابعة PDF: تثبيت طابعة PDF على جنو/لينكس سهل للغاية فقط ابحث عن حزمة cups-pdf على توزيعتك المفضلة وثبتها، إن لم تُنشئ الحزمة طابعة PDF تلقائيا، يمكنك إضافة واحدة من إعدادات النظام لتتمكن من طباعة ملفات PDF من خلال أي تطبيق. الوصول لواجهة الويب الخاصة بنظام CUPS: إذا كانت الواجهة الافتراضية لإدارة الطابعات لديك لا تعمل أو لا تعجبك، فاستخدم متصفح الويب واذهب إلى العنوان http://localhost:631/admin. بإمكانك إدارة كل الطابعات المنصبة على حاسوبك، ضبط الإعدادات الخاصة بهم، وحتى إضافة طابعة جديدة كل ذلك عبر واجهة الويب تلك. قد تكون الواجهة متاحة على الحواسيب الأخرى المتصلة بشبكتك المحلية في هذه الحالة فقط قم بتغيير اسم النطاق localhost باسم مضيف الآخر أو عنوان الآي بي IP الخاص به. التأكد من مستوى الحبر: إن كانت طابعتك من إحدى الأنواع التالية: Epson ،Canon ،HP، Sony. فبإمكانك رؤية مستوى الحبر عبر تطبيق بسيط. ابحث عن الحزمة ink في مستودعات حزمة نظام التشغيل لديك. المشاركة في تطوير CUPS: كحال العديد من المشاريع مفتوحة المصدر، CUPS يتم تطويره من خلال جيت هاب Github. قم بزيارة موقع CUPS وقسم المشاكل في GitHub لتتعرف على كيفية المساهمة في التطوير. رخصة CUPS في بادئ الأمر تم اصدار CUPS تحت رخصة GPLv2 فمن غير المؤكد لماذا لكن ربما لجعل توزيعها أسهل داخل جنو/لينكس أو ربما كان ذلك شائعا بين المشاريع مفتوحة المصدر في ذاك الوقت. لاحقا في شهر نوفمبر عام 2017 قررت شركة أبل تغيير الرخصة إلى Apache 2.0. العديد من المراقبين علّق أن ذلك يتماشى مع استراتيجية الشركة لنقل الملكية الفكرية لمشاريعها مفتوحة المصدر إلى تراخيص تتماشى مع عمل الشركة في حين يمكن أن ينتج هذا التغيير في الرخصة مشاكل في تضمين CUPS داخل جنو/لينكس، لكنه ما زال متوفرًا في معظم التوزيعات. في الختام تم إصدار CUPS في عام 1999، علينا شكر جميع من ساهم في نجاح هذا المشروع مفتوح المصدر، من مبرمجيه الأوائل، لمطوري برامج التشغيل، وصولًا للعاملين على صيانته حاليًا. في المرة القادمة التي تطبع فيها مستخدمًا نظام التشغيل جنو/لينكس المفضل لديك، تذكر أن تقول "شكرًا" لكل من عمل على لنظام CUPS. شركة أبل غير مشهورة بمساهماتها في مجال البرامج مفتوحة المصدر، لكن إن أمعنت النظر (مثلا إلى إصدارات آبل المفتوحة المصدر والتطوير مفتوح المصدر)، فسوف تلاحظ كمّ المكونات مفتوحة المصدر في أنظمة تشغيل وبرامج آبل. ترجمة -وبتصرف- للمقال Tips and tricks for using CUPS for printing with Linux لصاحبه Antoine Thomas. اقرأ أيضًا تعديل الصور والتلاعب بها عبر سطر الأوامر في لينكس التعرف على اختناقات الأداء في نظام لينكس باستخدام الأدوات مفتوحة المصدر [فيديو] الأذونات في نظام لينكس
-
في الغالب المواقع تستخدم ال Cookies وتضع داخلها قيم مشفرة لا يمكن الاطلاع على محتواها، وتعين مدة صلاحية لها طويلة كما تم الشرح سابقًا JWT مناسبة أكثر للتواصل بين الخدمات وهو استخدامها الشائع، لكن مع زوار المواقع ارسال Cookie مع تعيين مدة صلاحية مناسبة سيفي بالغرض المطلوب
- 18 اجابة
-
- 1
-
-
يجب أن نسأل ما الفرق بين الفترة الطويلة والفترة القصيرة في تذكر المستخدم ؟ لنطور نظام المصادقة على عدة مستويات: المستوى الأول (عدم تذكر المستخدم أبدا، يبرز المستخدم هويته عند كل طلب): لنبدأ من الأساس وهو أن على المستخدم في كل مرة يرسل بها طلب إلى النظام أن يبرز هويته بشكل صريح، لا يمكننا أن نجعل نظام التوثيق بهذه البساطة حيث يمكن لأي مستخدم انتحال شخصية أي مستخدم آخر، لذا نطلب من المستخدم إرسال كلمة سر تم الاتفاق عليها مسبقًا مع كل طلب لتوثيق مصداقية المستخدم، في هذا المستوى نحن لا نتذكر المستخدم أبدًا فقط نعالج ونتحقق من كل طلب بشكل منفرد المستوى الثاني (تذكر المستخدم لفترة قصيرة، تنتهي الفترة بإغلاق المتصفح): بدل من طلب تأكيد هوية المستخدم عند كل طلب نقوم بالتحقق من أول طلب فقط ونرسل للمستخدم رمزًا يستخدمه في الطلبات اللاحقة، أحد طرق تنفيذ ذلك عن طريق ارسال الرمز داخل Cookie يستخدمها المستخدم خلال جلسته ويقوم برميها عند إغلاق المتصفح، سيتطلب ذلك إعادة إبراز المستخدم لهويته عند كل جلسة (في كل مرة يفتح التصفح من جديد) المستوى الثالث (تذكر المستخدم بشكل دائم، فترة تذكر لا تنتهي أو فترة طويلة جدًا): نفس فكرة المستوى الثاني لكن نخبر المستخدم بالحفاظ على الرمز لفترة أطول وعدم رميه حال إغلاق المتصفح، يتم ذلك بتعيين فترة صلاحية طويلة لل Cookie (مثلا 30 عام). الأمان مسؤولية المستخدم فهو المسؤول عن الاحتفاظ برمز الدخول المرسل من قبلك بشكل آمن، أي عدم إرساله لأحد وعدم السماح لأحد بالوصول إليه وذلك عن طريق استخدام المتصفحات الآمنة التي توفر الحماية لبيانات المستخدم، وكذلك الانتباه من استخدام البرامج الخبيثة التي تقوم بمحاولة سرقة تلك البيانات مسؤوليتك في حماية بيانات المستخدم من طرفك يجب الاحتفاظ ببيانات المستخدمين بشكل مشفر ومنع الوصول لها، ويمكنك المشاركة في مساعدة حماية المستخدم من سوء استخدام بياناته عبر: منع الاتصال بموقعك إلا عن طريق اتصال مشفر (مثل HTTPS أو SSH) وضع علامة HTTP Only على ال Cookies المرسلة وهي اشارة للمستخدم أن يرسلها فقط مع طلبات HTTP ولا يجعلها مرئية ل JavaScript إرسال Cookie مشفرة للمستخدم تضمن لك أن نظامك هو من ولد البيانات داخلها كل المواقع والأنظمة تعتمد المبادئ السابقة لحماية بيانات المستخدمين والحماية من الاختراق وهناك عدة طرق لتنفيذ كل الأفكار السابقة وليست طريقة واحدة، ولكن المبادئ الأساسية تبقى نفسها
- 18 اجابة
-
- 1
-
-
سنشرح في هذا المقال كيفية استخدام الحزمة ImageMagick للتعديل على مقاس الصور وحجمها وحتى دمجها معًا والتعديل عليها كإضافة إطار، فالأداة ImageMagick هي أداة متعددة المهام تمكنك من التعديل على الصور عبر سطر الأوامر. في حين يمكنك استخدام برامج سطح المكتب العديدة للتعديل على الصور مثل GIMP أو GLIMPSE أو Photoshop، لكن أحيانًا يكون من الأسهل والأسرع الاستعانة بأحد أدوات حزمة ImageMagick، بالإضافة لكونها تدعم مجموعة متنوعة من صيغ الصور، من ضمنها صور JPG وPNG. تثبيت ImageMagick على لينكس يمكنك تثبيت ImageMagick في نظام التشغيل لينكس باستخدام مدير الحزم المتوفر لديك. مثال، على التوزيعات المشابهة لفيدورا تنفذ الأمر: $ sudo dnf install imagemagick على التوزيعات المشابهة لديبيان يكون أمر التثبيت كالتالي: $ sudo apt install imagemagick أما على نظام ماك فاستخدم MacPorts أو Homebrew وعلى نظام ويندوز، استخدم Chocolatey. تصميم شبكة من الصور كثيرا ما أجد نفسي أعدل على الصور قبل نشرها، لنفرض أن لدي عدة صور للقطات شاشة وأريد نشرها على شكل شبكة من الصور، للقيام بذلك استخدم الأمر montage من حزمة ImageMagick. الصيغة العامة للأمر montage هي كالتالي: montage {input} {actions} {output} في حالتي لدي صور لقطات الشاشة جميعها بنفس القياس: 320×240 بكسل، ولإنشاء شبكة مؤلفة من ستة صور صورتين عرضًا وثلاثة طولًا، يمكنني استخدام الأمر السابق كالتالي: $ montage acronia.png \ ascii-table.png \ music.png \ programming-chess.png \ petra.png \ amb.png \ -tile 2x3 -geometry +1+1 \ screenshot-montage.png سينتج صورةً واحدةً مؤلفةً من لقطات الشاشة الستة، مع إطار فاصل حول كل صورة بعرض واحد بكسل، بالحساب يتبيّن أن قياس الصورة الناتجة سيكون 644 بكسل عرضًا و726 بكسل طولًا. لاحظ ترتيب الصور، إذ يقوم الأمر montage في ImageMagick بترتيب الصور من اليسار إلى اليمين ومن الأعلى إلى الأسفل. في مثالي هذا، في الصف الأول من الصور ومن اليسار تظهر صورة اللعبة مفتوحة المصدر 2D shooter Acronia، وبجانبها صورة جدول محارف ASCII، وفي الصف الأوسط صورة مشغل موسيقى مفتوح المصدر وبجانبه صورة مثال برمجي للعبة شطرنج، وفي الصف الثالث والأخير تظهر صورة لعبة Post Apocalyptic Petra مفتوحة المصدر وبجانبها صورة FreeDOS AMB مساعد القراءة. تعديل مقاس الصور عادةً ما أقوم باستخدام ImageMagick على خادم الويب الخاص بي لتعديل قياس الصور، لنفرض مثلا أنّي أريد تضمين صورة لقططي على موقعي الالكتروني. الصورة التي التقطتها عبر كاميرا الهاتف حجمها كبير جدًا حوالي 4000×3000 بكسل بحجم 3.3 ميغابايت. هذا الحجم كبير جدًا بالنسبة لصفحة ويب. في هذه الحالة استخدم أداة التحويل convert من حزمة ImageMagick لتصغير قياس الصورة وبالتالي تقليل حجمها لأستطيع تضمينها ضمن صفحة الويب دون التأثير على سرعة تحميل الصفحة. تحوي ImageMagick حزمة أدوات متكاملة أشهرها الأمر convert الصيغة العامة لاستخدامه هي كالتالي: convert {input} {actions} {output} لتعديل حجم صورة اسمها PXL_20210413_015045733.jpg إلى قياس أكثر ملائمة 500 بكسل عرضًا نستخدم الأمر كالتالي: $ convert PXL_20210413_015045733.jpg -resize 500x sleeping-cats.jpg الصورة الجديدة الناتجة أصبح حجمها 65 كيلو بايت فقط. يمكنك تحديد كِلا البعدين لقياس الصورة الناتجة عبر تمرير قيمة العرض والطول إلى الخيار resize- لكن عند تحديد العرض فقط فإن ImageMagick ستقوم بحسابته وتحديد الطول تلقائيا للمحافظة على نسبة الطول إلى العرض وتضمن في هذه الحالة عدم تشوه الصورة. أتمتة معالجة الصور في Bash يمكن لنص برمجي (سكربت باش) يستخدم أدوات ImageMagick أن يجعل من تحضير الصور للنشر أمرًا سريعًا وسهلًا. لا يتعامل الكتّاب مع الكلمات فقط، إنما مع الصور أيضًا. من متطلبات الكتابة التقنية عرض الكثير من لقطات الشاشة لتوضيح العمليات والتقنيات المستخدمة. فقد تختلف متطلبات منصات النشر من حيث حجم وصيغة الصور المطلوبة. باعتباري مستشار تقني ومهندس أنظمة، كتبت العديد من التوثيقات للعملاء، عادة بصيغة مايكروسوفت وورد (doc.) باعتبارها الصيغة المطلوبة. يمكن لأي مستند أن يزداد حجمه كلما تم إضافة المحتوى إليه خصوصًا إن كان بالمحتوى صور كثيرة. في الماضي أغلب لقطات الشاشة كانت بصيغة (bmp.)، والتي يمكن أن تكون بأحجام كبيرة جدًا، فمثلًا مستند لشرح طريقة تثبيت نظام تشغيل على الخادم سيكون حجمه كبيرًا جدًا. تحسين الصور بتصغير حجمها مع الحفاظ على وضوح المحتوى وقابلية القراءة للنصوص في الصورة كان عملًا مرهقًا. كان يمكن تحويل ملفات Bitmap إلى jpeg ولاحقًا إلى png. استمرت الصعوبة في التعديل حتى عندما انتقلت لاحقًا من استخدام حزمة الأوفيس إلى LibreOffice. لحسن الحظ أغلب أدوات التقاط الشاشة تقوم بحفظ الصور بصيغ صغيرة الحجم مثل png. موقع Openscource.com (وأغلب المواقع) يضع قيودًا معينة للصور في مقالاته حتى يجري تحسينها لمحركات البحث. قمت بتطوير طريقة سريعة بثلاث خطوات لتجهيز الصور لنشرها في مقالاتي. الخطوة الأولى هي التحضير لالتقاط الصور بذكاء، كأن أقوم بتغيير حجم النافذة أو تغيير نوع الخط أما الخطوتان الإضافيتان أصبحا مكررتين جدًا، وهما التأكد أن الصورة لن تزيد على 600 بكسل عرضًا وتطبيق إطار حول الصورة. النص البرمجي prepimg.sh قمت بكتابة نص البرمجي أو سكربت في Bash يدعى prepimg.sh لتولي تلك المهام، وهو يستخدم أداتين من حزمة ImageMagick. الخطوة الأولى تعديل قياس الصورة أداة التقاط الشاشة تحفظ الصور في المجلد Pictures باسم عام افتراضي مثال Screenshot-20210923222312.png. النص البرمجي prepimg.sh يتحقق من قياس عرض الملفات بالـبكسل في هذا المجلد ويقوم بتعديل قياس أي صورة تزيد عن الحد المسموح. هذه الخطوة تستخدم البرنامج identify من حزمة ImageMagick لتحديد عرض الصورة (w%). $ identify -format %w Screenshot-20210903202655.png 1217 تم إسناد قيمة عرض الصورة إلى المتغير w لمقارنته بالحد الأعلى المسموح 600 بكسل. بالإمكان تعديل هذا الحد عبر المتغير MAXWIDTH$ فإذا تجاوز العرض قيمة MAXWIDTH، فعندها يتم استدعاء برنامج آخر من حزمة ImageMagick يدعى convert يقوم بتصغير عرض الصورة. التالي تابع من النص البرمجي الذي يقوم بمعالجة الصورة: if [ "$W" -gt "$MAXWIDTH" ] then [[ $VERBOSE -gt 0 ]] && echo "${1} is ${W} - reducing" convert -resize "${MAXWIDTH}" \ "${SCREENSHOTS}"/"${1}" \ "${READY}"/"${1}" ... يتم تصغير حجم الصورة كما ينبغي و حفظها في مختلف محدد باستخدام المتغير READY$. في حالة استخدامي يتم تغيير مقاس الصورة لتصبح 598 بكسل أي أصغر قليلا من الحد المسموح به وذلك لترك مسافة لإضافة للإطار لاحقا. الخطوة الثانية إضافة إطار للصورة أحيانًا قد تبدو الصورة وكأنها مدمجة مع خلفية صفحة الويب. هذا بسبب أن الألوان الواقعة على أطراف الصورة تكون مماثلة لألوان خلفية الصفحة. التالي مثال على ذلك: صورة بدون إطار كما نلاحظ في الصورة العليا، من المستحيل تحديد أين تقع حدود الصورة. هذه المشكلة غير محصورة باللون الأبيض فحسب بل تعتمد على لون خلفية الصورة ولون خلفية صفحة الويب للموقع فإذا كانت خلفية الموقع باللون الأحمر وحدود الصورة أيضًا حمراء، ستظهر نفس المشكلة، لذلك كتبت أمرًا يعالج هذه المشكلة باستخدام الأداة convert وهو الأمر التالي: convert -bordercolor black -border 1 Screenshot-20210903202655.png الخيار border- يضيف إطار لكل صورة بمقدار 1 بكسل. يكفي تمرير هذا الخيار لإضافة الإطار، لكنني أريد تحديد لون الإطار أيضا لذا سأستخدم الخيار bordercolor- الصورة التالية هي نفس الصورة لكن بعد إضافة الإطار، ألا تبدو أوضح الآن؟ الصورة بعد إضافة الإطار الخطوة الثالثة تجهيز كل الصور قمت باستخدام حلقة for للمرور على صور لقطات الشاشة في المجلد الخاص بها، وأقوم باستدعاء التابع process_img لكل ملف، إذ يتولى التابع تعديل عرض الصورة وإضافة الإطار وأيضا يقوم بالتحقق فيما إذا كان الملف الذي يتعامل معه حاليا هو ملف صورة. process_img() { # verify that file is an image file, and then get dimensions if file "${SCREENSHOTS}"/"${1}" | grep -qE 'image|bitmap'; then [[ $VERBOSE -gt 0 ]] && echo "${1} is an image" W=$(identify -format %w "${SCREENSHOTS}"/"${1}") else echo "File ${SCREENSHOTS}/${1} is not an image." W=0 fi # resize and border if [ "$W" -gt "$MAXWIDTH" ] then [[ $VERBOSE -gt 0 ]] && echo "${1} is ${W} - reducing" convert -resize "${MAXWIDTH}" \ -bordercolor $BORDER \ -border 1 \ "${SCREENSHOTS}"/"${1}" \ "${READY}"/"${1}" else convert -bordercolor $BORDER \ -border 1 \ "${SCREENSHOTS}"/"${1}" \ "${READY}"/"${1}" fi } الخطوة الأخيرة للنص البرمجي هي حفظ ملف الصورة المُعالَج في مجلد فرعي اسمه Ready، والمحدد من قبل المتحول المسمى READY$ وهذه الخطوة تضمن الإبقاء على ملف الصورة الأصلي للاستخدام لاحقًا. الخطوة الرابعة تجهيز البرنامج الملف Prepimg.sh يتضمن أيضا شرحًا للخيارات التي يمكن استخدامها معه: $ prepimg.sh -h prepimg.sh Version 0.7 - written by Alan Formy-Duval prepimg.sh [OPTIONS] --verbose, -v Be verbose --directory, -d Screenshot directory (default: /home/alan/Pictures/Screenshots) --ready, -r Ready directory (default: /home/alan/Pictures/Screenshots/Ready) --border, -b Border color (default: black) الشفرة المبينة في هذا المقال غير كاملة ويجب اعتبارها شيفرة وهمية. تستطيع مراجعة النص البرمجي كاملًا في مستودع prepimg في GitHub. إن كنت تفضل البرمجة النصية باستخدام Bash أو البرمجة بلغات أخرى مثل C أو Python، فالأتمتة ستساعدك بشكل كبير. مرّة تلو الأخرى، أدرك كيف لشيفرة صغيرة أن تخفف من المشاكل مما يسمح لنا الاستفادة من الوقت بشكل أفضل. ننصحك بالرجوع إلى التوثيق العربي للغة Bash أو لغة على موسوعة حسوب لتعلمها وكتابة سكربتات احترافية فيها لأتمتة المهام. ختاما ImageMagick هي حزمة من الأدوات المفيدة جدًا للتعديل على الصور، بإمكانك الاستفادة من استخدامها في إجراء العديد من العمليات على الصور من تعديل وتصميم. أيضا ستوفر عليك الكثير من الوقت في حال استخدمت أدواتها في أتمتة المهام المتكررة الخاصة بتنسيق الصور وتعديل قياسها وحجمها. ترجمة -وبتصرّف- للمقالات: Create a photo collage from the Linux command line Resize an image from the Linux terminal Automate image processing with this Bash script لصاحبه Jim Hall. اقرأ أيضًا 4 أدوات مفتوحة المصدر من أجل مراقبة نظام لينكس التعرف على اختناقات الأداء في نظام لينكس باستخدام الأدوات مفتوحة المصدر [فيديو] الأذونات في نظام لينكس
-
كلا السطرين يقوم بجلب مسار المجلد الحاوي على المجلد الأب (أي مستويين إلى الأعلى) الفرق أن ()resolve ستقوم بمعالجة أي مسارات نسبية في المسار الممرر لها، وأيضا تقوم بمعالجة أي ذكر لوصلات رمزية Symbolic Links، لكن في حالتك هذه أنت تمرر المتغير __file__ وبالتالي أنت لا تستفيد من هذه المزايا، بالتالي الحالتين متماثلتين لديك # بفرض الملف الحالي # /path/to/current/file.py BASE_DIR = Path(__file__).resolve().parent.parent # /path/to BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # /path/to
- 7 اجابة
-
- 2
-
-
يمكنك انشاء عرض لمشروعك على مستقل، وسيقوم المهتمون بإضافة عروضهم ويمكنك اختيار انسب عرض لك والاتفاق مع المستقل على كل التفاصيل
- 1 جواب
-
- 1
-
-
الخاصية isRevoked تستخدم لتحديد ما إذا كانت ال token الحالية ملغاة أم لا (صاحب الحساب سحب بعض الصلاحيات - قام بتسجيل خروج من الأجهزة الأخرى - الخ...), عبر استدعاء التابع done بداخلها وتمرير المعامل الثاني ك true اذا كنت تريد تحديد ال token للدور الجديد vendor كملغاة مثل ما تفعل بالدور client يمكنك تضمينه كالتالي: async function isRevoked(req, payload, done) { if (payload.userRole === "admin") { return done(); } if (payload.userRole === "client") { return done(null, true); } if (payload.userRole === "vendor") { return done(null, true); } }
-
بما أنك تقوم بحساب الايرادات الجديدة: الايرادات القديمة + نسبة الربح × السعر في المتحول rev في السطر التالي: const rev = monyState[0].rev + req.body.rev * req.body.price; يجب حساب اجمالي الربح الجديد كالتالي: الايرادات الجديدة (التي تم حسابها سابقا) - المصروفات ليصبح اجمالي الحساب كالتالي // const netProf = monyState[0].rev - monyState[0].expens; const netProf = rev - monyState[0].expens;
- 2 اجابة
-
- 2
-
-
تأكد من تعيين المتغيرات في الإعدادات التالية ونسخك للمفتاح والمعرّف بشكل صحيح: <?php $this->settings['paypel_client_id']; $this->settings['paypel_secret']; تأكد أيضا أي يكون هذا المفتاح مفعلا Enabled في حساب المطور الخاص بك في باي بال إذا كان مصدر الإعدادات لديك هو متغيرات البيئة Environment variables حاول ايقاف الخادم وتنفيذ الأمر التالي ثم إعادة تشغيله: php artisan config:cache
- 1 جواب
-
- 1
-
-
يمكنك طباعته مباشرة سطر بسطر باستخدام Console.WriteLine كالتالي: Console.WriteLine("*********"); Console.WriteLine("* Hello *"); Console.WriteLine("*********"); لينتج لديك الخرج التالي ********* * Hello * *********
-
حاول تنفيذ الأمر التالي sqldeveloper.exe --AddVMOption=-Duser.language=ar أو يمكنك تعديل اللغة من القائمة: Tools > Preferences > Database > NLS
-
لمعرفة المجلد الافترضي لمكان ملف ال dmp قم بفتح جلسة بتنفيذ الأمر : sqlplus /nolog ثم الاتصال بقاعدة بيانات النظام والاستعلام عن مسارات مجلدات قواعد البيانات كالتالي SQL> connect SYSTEM/fyicenter SQL> COL owner FORMAT A8; SQL> COL directory_name FORMAT A16; SQL> COL directory_path FORMAT A40; SQL> SELECT * FROM dba_directories; سيظهر لك المسارات بالشكل التالي OWNER DIRECTORY_NAME DIRECTORY_PATH ----- -------------- ------------------------------------- SYS DATA_PUMP_DIR \oraclexe\app\oracle\admin\XE\dpdump\ SYS TEST_DIR /oraclexe/test SYS ORACLECLRDIR \oraclexe\app\oracle\product\10.2.0\server\bin\clr قم بالذهاب الى مسار المجلد DATA_PUMP_DIR الظاهر في الاستعلام وستجد ملفات ال dmp
