تخطَّ إلى المحتوى

١٠ يوليو ٢٠٢٦

حل خطأ Permission denied في لينكس بالعربي

شارك المقال:

أشهر رسالة يقابلها كل مستخدم لينكس جديد:

bash: ./deploy.sh: Permission denied

أو عند محاولة الكتابة:

touch: cannot touch 'app.log': Permission denied

لينكس ليس عنيدًا معك — هو يطبّق نظام صلاحيات صارمًا هو سرّ أمانه. من يفهم هذا النظام مرة واحدة لا يحتاج «حلولًا سحرية» بعدها.

أولًا: اقرأ الوضع قبل أي أمر

ls -l deploy.sh
-rw-r--r-- 1 baraa developers 512 Jul 10 09:00 deploy.sh

فكّ الشيفرة -rw-r--r--:

الجزءيخصمعناه هنا
rw-المالك (baraa)قراءة + كتابة، بلا تنفيذ
r--المجموعة (developers)قراءة فقط
r--بقية المستخدمينقراءة فقط

المشكلة ظاهرة فورًا: لا أحد يملك x — لذلك رفض النظام تنفيذ السكربت.

الحالات الأربع الأشهر وحلولها

1) سكربت لا يعمل → أعطه إذن التنفيذ

chmod +x deploy.sh    # أضف صلاحية التنفيذ
./deploy.sh           # ✅ يعمل الآن

هذا حل 70% من حالات Permission denied عند المبتدئين. (بديل سريع دون تغيير الصلاحيات: bash deploy.sh — تشغّل المفسّر وتمرر له الملف قراءةً.)

2) ملف يملكه مستخدم آخر → صحّح الملكية

يحدث كثيرًا بعد فك أرشيف بـ sudo أو نسخ ملفات من مكان محمي — مجلد مشروعك صار ملكًا لـ root:

ls -l                       # المالك root? هذه هي المشكلة
sudo chown -R $USER:$USER .  # أعد ملكية مجلد المشروع الحالي إليك

القاعدة: ملفات مشروعك يجب أن تكون ملكك أنت — وبعدها لن تحتاج sudo للتعامل معها إطلاقًا.

3) مهمة نظام حقيقية → sudo في محله

sudo apt install nginx        # ✅ تثبيت حزم
sudo nano /etc/hosts          # ✅ ملفات النظام
sudo systemctl restart nginx  # ✅ إدارة خدمات

💡 نسيت sudo؟ sudo !! تعيد تنفيذ الأمر السابق نفسه بصلاحيات مرفوعة.

⚠️ لكن انتبه: sudo pip install وsudo npm install ليسا من هذه الفئة — راجع حل أخطاء pip لتعرف لماذا البيئة الافتراضية هي الحل الصحيح.

4) المنافذ الصغيرة (أقل من 1024)

Error: listen EACCES: permission denied 0.0.0.0:80

المنافذ تحت 1024 محجوزة للنظام. للتجربة المحلية استخدم منفذًا عاليًا (3000، 8080) — وهذا يقاطع أحيانًا مع خطأ شقيق EADDRINUSE: المنفذ مستخدم أصلًا.

chmod بالأرقام — للفهم لا للحفظ

كل صلاحية رقم: r=4، w=2، x=1، والمجموع لكل فئة:

chmod 755 deploy.sh   # rwx r-x r-x — سكربتات: المالك كامل والبقية تنفيذ
chmod 644 notes.txt   # rw- r-- r-- — ملفات عادية: المالك يكتب والبقية تقرأ

هذان الرقمان (755 للتنفيذ، 644 للملفات) يغطيان الحياة اليومية كلها. وchmod 777 ليس بينهما أبدًا — إنه "افتحوا كل الأبواب للجميع".

قائمة تحقّق سريعة

  • ls -l أولًا — من المالك؟ وأي صلاحية ناقصة؟
  • سكربت لا يعمل؟ → chmod +x.
  • ملفات مشروعك ملك root؟ → sudo chown -R $USER:$USER . مرة واحدة.
  • الأمر يمس النظام نفسه؟ → sudo بثقة. يمس ملفاتك؟ → المشكلة ملكية.
  • لا تحل أي شيء بـ 777.

الخلاصة

Permission denied رسالة إخبارية لا عدائية: "الصلاحية الفلانية ناقصة". اقرأ ls -l، حدد الصلاحية الناقصة والفئة المعنية، وأعطِ أضيق إذن يحل المشكلة: +x للسكربتات، chown لملكيتك، وsudo لملفات النظام حصرًا.

أكمل أساسيات الطرفية في مسار لينكس بالعربي، وكمّل سلسلة أخطاء البيئة مع حل أخطاء pip install وحل خطأ المنفذ المستخدم EADDRINUSE.

📚 مصادر رسمية للتعمّق: صفحات دليل Linux الرسمية

الأسئلة الشائعة

ما معنى الرموز rwxr-xr-- في ls -l؟

ثلاث مجموعات من ثلاثة رموز: صلاحيات المالك ثم المجموعة ثم بقية المستخدمين. r قراءة وw كتابة وx تنفيذ والشرطة تعني ممنوع. فمثلًا rwxr-xr-- تعني: المالك يفعل كل شيء، المجموعة تقرأ وتنفّذ، والبقية يقرؤون فقط.

لماذا chmod 777 حل سيئ رغم أنه يُنهي الخطأ؟

لأن 777 تعطي كل المستخدمين — بما فيهم أي عملية أو مخترق على الجهاز — حق القراءة والكتابة والتنفيذ. تختفي الرسالة وتُفتح ثغرة. الصحيح إعطاء أضيق صلاحية تحل المشكلة: +x للتنفيذ، أو chown لتملّك مجلدك.

متى أستخدم sudo ومتى يكون خطأً؟

sudo لمهام النظام الفعلية: تثبيت حزم بمدير الحزم، تعديل ملفات /etc، إدارة الخدمات. ويكون خطأً عندما يعوّض ملكية خاطئة لملفات مشروعك — إن احتجت sudo لتعديل ملفاتك أنت فالحل chown وليس مزيدًا من sudo، وأبدًا لا تستخدم sudo مع pip أو npm.

اقرأ أيضًا

تصفّح كل المقالات في المدوّنة، أو ابدأ التعلّم من المسارات و خرائط الطريق.