**chmod** وهو اختصار من ***ch**ange **mod**e*. في الأنظمة الشبيهة بيونكس هو أمر لتغيير تصاريح نظام الملفات للملفات والمجلدات، يتم فلترة الطلبات عبر Umask.

تاريخ
-----

ظهر لأول مرة في الإصدار الأول لـ AT&T Unix.

كما نمت الأنظمة في عدد وأنواع قوائم التحكم بوصول المستخدمين  لذلك تمت إضافته إلى العديد من أنظمة الملفات لجعلها أكثر مرونة.

صيغة الأمر
----------

```
chmod [options] mode[,mode] file1 [file2...]

```

1. chmod هو أمر تغيير الصلاحيات.
2. options هو الخيارات التي يمكن استخدامها مع الأمر.
3. mode هو التصريح المراد وضعه على الملف أو المجلد.
4. file1، file2 هو اسم المجلد أو الملف المطلوب وضع التصريح له.

الخيارات تتضمن:

* -R جميع الملفات والمجلدات الفرعية وملفاتها.
* -f الاستمرار في التنفيذ حتى مع حدوث أخطاء.
* -v إظهار مزيد من المعلومات حول تقدم العملية.

التصريح المراد وضعه أو mode ينقسم إلى جزئين:

`octal mode`
`symbolic mode`

### octal mode

ال 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 والسطر التالي يوضح ملخص التعبير على التصاريح:

`read or r =4 write or w =2 execute or x =1`

وبالتالى عند إضافة هذه الأرقام إلى بعضها البعض نبدأ في تكوين التصريح المطلوب وضعه على الملف أو المجلد مثلا نريد وضع تصريح القراءة والكتابة على ملف ما كل ما علينا فعله إضافة الرقم 4 إلى الرقم 2 ليصبح التصريح كالتالى:

`r + w = rw 4 + 2 = 6` 

أما لو أردنا وضع تصريح القراءة والكتابة والتنفيذ معاً على ملف يكون الناتج بالشكل التالي:

`r + w + x = rwx 4 + 2 + 1 = 7`

ولو رجعنا قليلا لأعلى ذكرنا أن التصريح بشكلٍ عام مكون من أربعة أقسام نوع الملف، تصريح المالك، تصريح المجموعة، تصريح أي مستخدم آخر، فيتم استخدام الأرقام بأعلى لتكوين التصريح ونضرب مثالأ على ذلك:

لو أردنا إعطاء التصريحات التالية للملف one.txt لكل من: المالك، المجموعة، أي مستخدم آخر بالترتيب التالي:

* بالنسبة للمالك القراءة والكتابة.
* بالنسبة للمجموعة القراءة فقط.

بالنسبة لأى مستخدم آخر لا شيء.

فيكون على الشكل التالي

* بالنسبة للمالك التصريح المطلوب القراءة والكتابة: `r + w + - = rw- 4 + 2 + 0 = 6`
* بالنسبة للمجموعة المطلوب تصريح القراءة فقط: `r + - + - = r-- 4 + 0 + 0 = 4`
* بالنسبة لأى مستخدم آخر المطلوب لا شيء: `- + - + - = --- 0 + 0 + 0 = 0`

إذا التصريح بشكل نهائي يمكن كتابته على الصورة التالية بعد اضافته للأمر chmod كالتالي: `chmod 640 one.txt`

وإذا استعراضنا تصريح الملف الجديد بعد وضعه بالأمر ls -l سيظهر تصريح الملف بالشكل التالي: `-rw-r----`

**ملحوظة**: وجود ال - أو dash يعنى انتفاء التصريح الذي توجد هذه العلامة مكانه.

### symbolic mode

في هذا الوضع تم الاستعاضة عن الأرقام بالرموز العادية، ما أقصده بالرموز العادية هي r، w، x بمعنى حينما تود وضع تصريح القراءة أضف r، كذلك تود وضع تصريح الكتابة أضف w، كذلك تصريح التنفيذ x ولكن السؤال كيف ذلك ؟؟

يتم ذلك باستخدام الحروف u، g، o حيث يرمز الحرف u إلى كلمة user والتي تعنى تصريح المالك، ويرمز الحرف g إلى كلمة مجموعة والتي تعنى تصريح المجموعة، ويرمز الحرف o إلى كلمة other والتي تعنى تصريح أي شخص آخر على النظام ويتم إضافة التصريح للملف باستخدام ثلاثة رموز هي +، -، == حيث ترمز العلامة + إلى كلمة add أو إضافة وترمز العلامة- إلى كلمة minus أو إنقاص (تنبه هي نفس علامة- والاستخدام هنا نوعاً ما مختلف) وترمز العلامة == إلى كلمة equal أو يساوي ولفهم ذلك كله نفترض المثال السابق:

إذا أردنا إعطاء التصريحات التالية للملف one.txt لكل من: المالك، المجموعة، أي مستخدم آخر بالترتيب التالي:

* بالنسبة للمالك القراءة والكتابة.
* بالنسبة للمجموعة القراءة فقط.

بالنسبة لأى مستخدم آخر لا شيء.

فيكون بالشكل التالي:

* بالنسبة للمالك التصريح المطلوب هو تصريح القراءة والكتابة: `u=rw`
* النسبة للمجموعة التصريح المطلوب هو تصريح القراءة فقط: `g=r`
* بالنسبة لأى مستخدم آخر التصريح المطلوب هو لا شيء: `o-rwx`

إذا لوضع التصريح بشكل كامل تكون صيغته الكاملة كالتالى: `chmod u=rw,g=r,o-rwx filename`

في البداية وضع تصريح المالك مستخدماً الرمز = أو يساوى وبعد ذلك قمت بكتابة "،" أو comma لوضع تصريح آخر مع تصريح المالك هو تصريح المجموعة ثم قمت بكتابة، أو comma أخرى لإضافة تصريح المستخدمين الآخرين ولكن لاحظ معى أنى قمت باستخدام الرمز - أو minus لسحب أي تصريح بالنسبة لأى مستخدم آخر وفي السؤال كان المطلوب عدم إعطاء أي تصريح لأى مستخدم آخر.

وبالتالى حينما تود إضافة تصريحات متشابهة سواء للمالك أو المجموعة أو أي مستخدم آخر فلا يتطلب ذلك فصل كل عملية باستخدام، أو comma ولكن تستطيع إضافة العناصر المتشابهة إلى بعضها البعض.

مثال: قم بإعطاء تصريح القراءة والكتابة والتنفيذ لكل من المالك والمجموعة وتصريح القراءة والتنفيذ لأى مستخدم آخر للملف one.txt

`chmod ug=rwx,o=rx one.txt` 

مثال: قم بسحب تصريح الكتابة والتنفيذ للمجموعة وسحب أيضا تصريح التنفيذ من أي مستخدم آخر:

`chmod go-wx one.txt`

لاحظ معى قمت بإضافة كلام من المجموعة وأى مستخدم آخر إلى بعضهما البعض مع أنى أريد تنفيذ مهام مختلفة فكيف ذلك ؟

لو لاحظت معى أن الملف one.txt يوجد عليه التصريح rwxrwxr-x وما طلبته في سؤالى سحب كل من تصريح القراءة والتفيذ للمجموعة وتصريح التنفيذ لأى مستخدم آخر وذلك لأن تصريح الكتابة بالنسبة لأى مستخدم آخر في الأصل هو غير متوافر على التصريح الكامل للملف ولكن يوجد عامل مشترك وهو سحب تصريح التنفيذ لكلٍ من المجموعة وأى مستخدم آخر وذلك لمجرد التسهيل ليس إلا فكان من الممكن كتابة التصريح بالشكل التالي:

`chmod g-wx,o-x one.txt` 

وسوف تكون النتيجة مطابقة لما بأعلى وأود تنبيهك إلى شيء مهم أن كلا ً من الرمزين +، - يقومان بإضافة وسحب تصريح موجود بالفعل بمعنى لو كان تصريح ملف معين بالشكل التالي:

* rw-r--r-x

وأردت إضافة تصريح الكتابة لكل من المجموعة وأى مستخدم آخر فسيتم إضافة التصريحات الجديدة دون احداث تغيير في أي تصريح موجود بالفعل ولاحظ ذلك:

`chmod go+w filenmae` 

يكون ناتج التصريح عند عمل الأمر ls -l بالشكل التالي:

`rwxrw-rwx` 

ولكن ماذا لو أردنا وضع تصريح مماثل للأقسام الثلاثة أعنى المالك والمجموعة وأى مستخدم آخر ألا يوجد بديل ل u، g، o ؟؟

بالطبع يوجد الحرف a والذي يرمز إلى كلمة all أو الكل بمعنى تود أضافة تصريح التنفيذ لملف ما لكل من المالك والمجموعة وأى مستخدم آخر كل ما عليك فعله التالي:

`chmod a+x filename` 

والجدول التالي ملخص لكل من الحروف والرموز الخاصة بالوضع symbolic mode:

### Numeric Permissions

باستخدام Numeric Permissions وفي العادة تستخدم في سيرفرات الأنظمة الشبيهة بيونكس وتحديد الصلاحيات على الملفات والسكربتات.... على الإنترنت. مثل التصريح 777,755

`400 صلاحية قراءة للمستخدم مالك الملف`

`040 صلاحية قراءة من المجموعة المالكة للملف/المجلد`

`004 صلاحية قراءة من المستخدمين الاخرين على النظام`

`200 صلاحية كتابة للمستخدم مالك الملف`

`020 صلاحية كتابة من المجموعة المالكة للملف/المجلد`

`002 صلاحية كتابة من المستخدمين الاخرين على النظام`

`100 صلاحية تنفيذ للمستخدم مالك الملف`

`010 صلاحية تنفيذ من المجموعة المالكة للملف/المجلد`

`001 صلاحية تنفيذ من المستخدمين الاخرين على النظام`

400+040+004+200+100+010+001 = 755

لتغيير التصريح إلى التصريح 755 نطبق الأمر التالي: `chmod 755 filename`

حيث filename هو اسم الملف المراد تغيير تصريحه أو ان نضع مسار الملف/مجلد... كامل

التصريح 755 يعادل التصريح rwxr-xr-x

اما التصريح 777 يعادل `rwxrwxrwx` أي يعطينا تصريح القراءة والكتابة والتنفيذ لكل من المستخدم والمجموعة مالكة الملف والمستخدمون الآخرون على النظام.

انظر أيضاً
----------

* تصاريح نظام الملفات
* أوامر يونكس

مراجع
-----

1. ↑  وصلة مرجع: .
2. ↑  Tutorial for chmod نسخة محفوظة 26 ديسمبر 2017 على موقع واي باك مشين.
3. ↑  "AIX 5.3 System managment". *IBM knowledge Center*. IBM. مؤرشف من الأصل في 2016-03-04. اطلع عليه بتاريخ 2015-08-30.
4. ↑  chmod نسخة محفوظة 06 يناير 2018 على موقع واي باك مشين.

وصلات خارجية
------------

* `chmod` — صفحة دليل من أدوات جنو الأساسية.
* GNU "Setting Permissions" manual
* CHMOD-Win 3.0 — Freeware Windows' ACL ←→ CHMOD converter.
* Beginners tutorial with on-line "live" example
* Online Chmod Calculator

| * ع
* ن
* ت
أوامر يونكس |
| --- |
| نظام ملفات | 
* cat
* cd
* Chmod
* Chown
* Chgrp
* cksum
* cmp
* cp
* dd
* du
* df
* file
* fsck
* fuser
* ln
* ls
* mkdir
* mount
* mv
* pax
* Pwd
* rm
* rmdir
* size
* split
* tee
* touch
* type
* Umask

 |  |
| معالجة | 
* at
* bg
* chroot
* cron
* fg
* kill
* killall
* nice
* pgrep
* pidof
* pkill
* ps
* pstree
* time
* top

 |
| بيئة المستخدم | 
* clear
* env
* exit
* finger
* history
* أوامر يونكس
* logname
* ميزج (يونكس)
* passwd
* su
* sudo
* فترة التشغيل
* talk
* tput
* uname
* w
* wall
* who
* whoami
* write

 |
| تطوير برمجيات | 
* yacc
* strip
* nm
* make
* lex
* Ctags
* ar

 |
| معالجة نصوص | 
* awk
* banner
* basename
* Comm
* csplit
* cut
* diff
* dirname
* إد (محرر نصوص)
* إكس (محرر نصوص)
* fmt
* fold
* head
* iconv
* join
* less
* more
* paste
* محرر التيار (أداة يونكس)
* sort
* spell
* strings
* tail
* tr
* uniq
* vi
* wc
* xargs

 |
| اوامر شيل داخلية | 
* alias
* echo
* expr
* printf
* sleep
* test
* true and false
* unset
* wait
* yes

 |
| اوامر شبكات | 
* ديغ
* host
* ifconfig
* inetd
* نت كت
* نت ستات
* إن إس لوك أب
* ping
* rdate
* آر لوجين
* route
* أوبن إس إس إتش
* تريسروت

 |
| بحث | 
* find
* grep
* Locate
* whatis
* whereis

 |
| توثيق | 
* apropos
* help
* صفحة دليل (يونكس)

 |
| منوع | 
* bc
* dc
* cal
* توقيت يونكس
* lp
* lpr
* tty
* مستخدم (توضيح)

 |

* أيقونة بوابةبوابة برمجيات حرة
* أيقونة بوابةبوابة أمن المعلومات