Chmod
chmod وهو اختصاراً من "change mode". في الأنظمة الشبيهة بيونكس هو أمر لتغيير تصاريح نظام الملفات للملفات والمجلدات، يتم فلترة الطلبات عبر umask.
ظهر لأول مرة في الإصدار الأول لـ AT&T Unix.
كما نمت الأنظمة في عدد وأنواع قوائم التحكم بوصول المستخدمين لذلك تمت إضافته إلى العديد من أنظمة الملفات لجعلها أكثر مرونة.الخيارات تتضمن:
التصريح المراد وضعه أو mode ينقسم إلى جزئين:
codice_1
codice_2
ال octal هو نظام الأعداد الثماني أي يبدأ بالعدد 0 وحتى العدد رقم 7 وتم استخدامه من قِبل علماء الكمبيوتر للتعبير عن الأرقام بمعنى، الكمبيوتر كجهاز لا يعلم الكلمة مثلا " word " كله ما يعلمه هو 0 أو 1 أو بمعنى set or reset وهكذا، ولكى تتم العملية بالشكل المطلوب لابد من تحويل الرموز أو الحروف أو حتى الأرقام العادية في صورة أصفار وواحائد فقط أي بطريقة مثل هذه 01011101 هنا ظهرت طرق للتعبير عن هذه الرموز أو الحروف أو الأرقام العادية لعمل ذلك التحويل بطريقة بسيطة على سبيل المثال طريقة الأعداد ال binary representation أو التمثيل الثنائي وهو إما 0 أو 1، وطريقة ال octal representation أو التمثيل الثماني ويشمل الأعداد من 0 وحتى الرقم 7، وطريقة ال hexidecimal representation أو التمثيل السادس عشر ويشمل الأعداد من 0 حتى الرقم 9 ومن الحرف A حتى الحرف F، حيث يمثل الحرف A الرقم 10 والحرف B الرقم 11 وهكذا انتهاءً بالحرف F والذي يمثل الرقم 15 وبالتالى تكون هناك طريقة بسيطة للتحويل ما بين هذه الأنظمة خصوصا الثمانى والسادس عشر مع النظام الثنائي والذي يستخدمه الكمبيوتر في تنفيذ عملياته والجدول التالي يوضح كيف يمكن تحويل رقم من نظام ثمانى إلى ثنائي، ومن سادس عشر إلى ثنائي:
باستخدام النظام الثمانى أمكن تخزين التصاريح الخاصة بأي ملف أو مجلد على النظام بطريقة سهلة جدا حيث تم التعويض عن رمز كل تصريح بعدد معين مثلا الرمز r والذي يرمز إلى تصريح القراءة تم التعويض عنه بالرقم 4، والرمز w والذي يمثل تصريح الكتابة تم التعويض عنه بالرقم 2، كذلك الرمز x والذي يمثل تصريح التنفيذ تم التعويض عنه بالرقم 1 والسطر التالي يوضح ملخص التعبير على التصاريح:
codice_3
وبالتالى عند إضافة هذه الأرقام إلى بعضها البعض نبدأ في تكوين التصريح المطلوب وضعه على الملف أو المجلد مثلا نريد وضع تصريح القراءة والكتابة على ملف ما كل ما علينا فعله إضافة الرقم 4 إلى الرقم 2 ليصبح التصريح كالتالى:
codice_4
أما لو أردنا وضع تصريح القراءة والكتابة والتنفيذ معاً على ملف يكون الناتج بالشكل التالي:
codice_5
ولو رجعنا قليلا لأعلى ذكرنا أن التصريح بشكلٍ عام مكون من أربعة أقسام نوع الملف، تصريح المالك، تصريح المجموعة، تصريح أي مستخدم آخر، فيتم استخدام الأرقام بأعلى لتكوين التصريح ونضرب مثالأ على ذلك:
لو أردنا إعطاء التصريحات التالية للملف one.txt لكل من: المالك، المجموعة، أي مستخدم آخر بالترتيب التالي:
بالنسبة لأى مستخدم آخر لا شيء.
فيكون على الشكل التالي
إذا التصريح بشكل نهائي يمكن كتابته على الصورة التالية بعد اضافته للأمر chmod كالتالي: codice_9
وإذا استعراضنا تصريح الملف الجديد بعد وضعه بالأمر ls -l سيظهر تصريح الملف بالشكل التالي: codice_10
ملحوظة: وجود ال - أو dash يعنى انتفاء التصريح الذي توجد هذه العلامة مكانه.
في هذا الوضع تم الاستعاضة عن الأرقام بالرموز العادية، ما أقصده بالرموز العادية هي r، w، x بمعنى حينما تود وضع تصريح القراءة أضف r، كذلك تود وضع تصريح الكتابة أضف w، كذلك تصريح التنفيذ x ولكن السؤال كيف ذلك ؟؟
يتم ذلك باستخدام الحروف u، g، o حيث يرمز الحرف u إلى كلمة user والتي تعنى تصريح المالك، ويرمز الحرف g إلى كلمة مجموعة والتي تعنى تصريح المجموعة، ويرمز الحرف o إلى كلمة other والتي تعنى تصريح أي شخص آخر على النظام ويتم إضافة التصريح للملف باستخدام ثلاثة رموز هي +، -، == حيث ترمز العلامة + إلى كلمة add أو إضافة وترمز العلامة- إلى كلمة minus أو إنقاص (تنبه هي نفس علامة- والاستخدام هنا نوعاً ما مختلف) وترمز العلامة == إلى كلمة equal أو يساوي ولفهم ذلك كله نفترض المثال السابق:
إذا أردنا إعطاء التصريحات التالية للملف one.txt لكل من: المالك، المجموعة، أي مستخدم آخر بالترتيب التالي:
بالنسبة لأى مستخدم آخر لا شيء.
فيكون بالشكل التالي:
إذا لوضع التصريح بشكل كامل تكون صيغته الكاملة كالتالى: codice_14
في البداية وضع تصريح المالك مستخدماً الرمز = أو يساوى وبعد ذلك قمت بكتابة "،" أو comma لوضع تصريح آخر مع تصريح المالك هو تصريح المجموعة ثم قمت بكتابة، أو comma أخرى لإضافة تصريح المستخدمين الآخرين ولكن لاحظ معى أنى قمت باستخدام الرمز - أو minus لسحب أي تصريح بالنسبة لأى مستخدم آخر وفي السؤال كان المطلوب عدم إعطاء أي تصريح لأى مستخدم آخر.
وبالتالى حينما تود إضافة تصريحات متشابهة سواء للمالك أو المجموعة أو أي مستخدم آخر فلا يتطلب ذلك فصل كل عملية باستخدام، أو comma ولكن تستطيع إضافة العناصر المتشابهة إلى بعضها البعض.
مثال: قم بإعطاء تصريح القراءة والكتابة والتنفيذ لكل من المالك والمجموعة وتصريح القراءة والتنفيذ لأى مستخدم آخر للملف one.txt
codice_15
مثال: قم بسحب تصريح الكتابة والتنفيذ للمجموعة وسحب أيضا تصريح التنفيذ من أي مستخدم آخر:
codice_16
لاحظ معى قمت بإضافة كلام من المجموعة وأى مستخدم آخر إلى بعضهما البعض مع أنى أريد تنفيذ مهام مختلفة فكيف ذلك ؟
لو لاحظت معى أن الملف one.txt يوجد عليه التصريح rwxrwxr-x وما طلبته في سؤالى سحب كل من تصريح القراءة والتفيذ للمجموعة وتصريح التنفيذ لأى مستخدم آخر وذلك لأن تصريح الكتابة بالنسبة لأى مستخدم آخر في الأصل هو غير متوافر على التصريح الكامل للملف ولكن يوجد عامل مشترك وهو سحب تصريح التنفيذ لكلٍ من المجموعة وأى مستخدم آخر وذلك لمجرد التسهيل ليس إلا فكان من الممكن كتابة التصريح بالشكل التالي:
codice_17
وسوف تكون النتيجة مطابقة لما بأعلى وأود تنبيهك إلى شيء مهم أن كلا ً من الرمزين +، - يقومان بإضافة وسحب تصريح موجود بالفعل بمعنى لو كان تصريح ملف معين بالشكل التالي:
وأردت إضافة تصريح الكتابة لكل من المجموعة وأى مستخدم آخر فسيتم إضافة التصريحات الجديدة دون احداث تغيير في أي تصريح موجود بالفعل ولاحظ ذلك:
codice_18
يكون ناتج التصريح عند عمل الأمر ls -l بالشكل التالي:
codice_19
ولكن ماذا لو أردنا وضع تصريح مماثل للأقسام الثلاثة أعنى المالك والمجموعة وأى مستخدم آخر ألا يوجد بديل ل u، g، o ؟؟
بالطبع يوجد الحرف a والذي يرمز إلى كلمة all أو الكل بمعنى تود أضافة تصريح التنفيذ لملف ما لكل من المالك والمجموعة وأى مستخدم آخر كل ما عليك فعله التالي:
codice_20
والجدول التالي ملخص لكل من الحروف والرموز الخاصة بالوضع symbolic mode:
باستخدام Numeric Permissions وفي العادة تستخدم في سيرفرات الأنظمة الشبيهة بيونكس وتحديد الصلاحيات على الملفات والسكربتات... على الإنترنت. مثل التصريح 777,755
codice_21
codice_22
codice_23
codice_24
codice_25
codice_26
codice_27
codice_28
codice_29
400+040+004+200+100+010+001 = 755
لتغيير التصريح إلى التصريح 755 نطبق الأمر التالي: codice_30
حيث filename هو اسم الملف المراد تغيير تصريحه أو ان نضع مسار الملف/مجلد... كامل
التصريح 755 يعادل التصريح rwxr-xr-x
اما التصريح 777 يعادل codice_31 أي يعطينا تصريح القراءة والكتابة والتنفيذ لكل من المستخدم والمجموعة مالكة الملف والمستخدمون الآخرون على النظام.