لماذا محرّر في الطرفية؟
على خادم عبر SSH لا توجد واجهة رسومية ولا VS Code. ستحتاج أن تعدّل ملف إعداد nginx أو .env من الطرفية مباشرة. يكفي أن تتقن محرّرًا واحدًا، والاثنان الموجودان تقريبًا على كل خادم هما nano وvim.
nano: الأسهل
nano /etc/hosts
sudo nano /etc/nginx/nginx.conf # ملفات النظام تحتاج sudo
الاختصارات مكتوبة أسفل الشاشة (^ تعني Ctrl):
| الاختصار | يفعل |
|---|---|
Ctrl+O ثم Enter | حفظ |
Ctrl+X | خروج (يسأل عن الحفظ إن عدّلت) |
Ctrl+W | بحث |
Ctrl+K وCtrl+U | قصّ سطر ولصقه |
Alt+U | تراجع |
ابدأ بـ nano إن كنت جديدًا: لا أوضاع ولا مفاجآت.
vim: الأقوى، بفكرة واحدة
سرّ vim الذي يربك الجميع: أوضاع. المفاتيح تعني أشياء مختلفة حسب الوضع:
- الوضع العادي (Normal): تبدأ فيه. المفاتيح أوامر لا حروف.
- وضع الإدراج (Insert): اضغط
iلتكتب نصًّا عاديًا، وEscللعودة. - وضع الأوامر: اضغط
:في الوضع العادي لأوامر مثل الحفظ والخروج.
vim config.yml
| في الوضع العادي | يفعل |
|---|---|
i | ابدأ الكتابة |
Esc | ارجع للوضع العادي |
:w و:q | حفظ، خروج |
:wq | حفظ وخروج |
:q! | خروج بلا حفظ |
/كلمة ثم n | بحث |
dd وp | قصّ سطر، لصق |
u | تراجع |
عالق في vim؟ اضغط Esc مرّتين، ثم اكتب :q! واضغط Enter. هذا يخرجك دائمًا دون حفظ.
السجلّات: أول مكان تبحث فيه
حين يتعطّل شيء، السبب مكتوب غالبًا في سجلّ. يوجد مكانان رئيسيان:
journalctl: سجلّات systemd
journalctl -u nginx # سجلّ خدمة nginx
journalctl -u nginx -f # متابعة حيّة
journalctl -u nginx --since "1 hour ago"
journalctl -u myapp -n 50 --no-pager # آخر 50 سطرًا
journalctl -p err -b # الأخطاء فقط منذ آخر إقلاع
journalctl --disk-usage # كم تأخذ السجلّات من القرص
كل خدمة تعمل عبر systemd تُجمع مخرجاتها هنا تلقائيًا، حتى console.log في تطبيق Node يعمل كخدمة.
/var/log: ملفات السجلّ التقليدية
| الملف | المحتوى |
|---|---|
/var/log/syslog (أو messages في Fedora) | سجلّ النظام العام |
/var/log/auth.log (أو secure) | محاولات الدخول وsudo |
/var/log/nginx/access.log | كل طلب لخادم الويب |
/var/log/nginx/error.log | أخطاء nginx |
sudo tail -f /var/log/nginx/error.log
sudo grep "Failed password" /var/log/auth.log | tail # محاولات تخمين كلمات السر
سيناريو: الخدمة لا تبدأ
sudo systemctl start myapp # Job for myapp.service failed...
systemctl status myapp # آخر أسطر السجلّ والسبب المختصر
journalctl -u myapp -n 30 --no-pager # التفاصيل الكاملة
اقرأ أول خطأ في السجلّ لا آخره: الأخطاء التالية غالبًا نتيجة للأول.
السجلّات تكبر: logrotate
السجلّات تكبر للأبد ما لم تُدوَّر. أداة logrotate تفعل هذا تلقائيًا لمعظم الخدمات: تعيد تسمية app.log إلى app.log.1، وتضغط القديمة (app.log.2.gz)، وتحذف الأقدم. إعداداتها في /etc/logrotate.d/. لهذا تجد ملفات مرقّمة ومضغوطة في /var/log، وتقرؤها بـ zcat أو zgrep.
أخطاء شائعة
- عالق في vim:
Escثم:q!. - تعديل ملف نظام بلا
sudo: تكتشف عند الحفظ فقط أنه "read-only". في vim احفظ بـ:w !sudo tee %، أو أعد فتحه بـsudo. - إعداد خاطئ يُسقط الخدمة: افحص قبل إعادة التشغيل:
sudo nginx -t. - قراءة آخر خطأ فقط: السبب الحقيقي غالبًا في أول خطأ.
- سجلّات تملأ القرص: راجع
journalctl --disk-usageوإعداداتlogrotate.
🎯 التالي: الأمان وأفضل الممارسات.