0%
إدارة أنظمة Linux: الدليل الشامل

إدارة أنظمة Linux: الدليل الشامل

تعلّم إدارة أنظمة Linux: المستخدمون، وخدمات systemd، والعمليات، ومراقبة القرص والذاكرة، والسجلات، وcron، والنسخ الاحتياطي باستخدام rsync.

I

InSkillCoach

· دقيقة

إدارة أنظمة Linux: الدليل الشامل

إدارة نظام Linux أكثر بكثير من مجرد كتابة بعض الأوامر في الطرفية. إنها تعني فهم كيفية تفاعل المستخدمين والخدمات والعمليات والتخزين، والقدرة على التدخل بسرعة عندما يتوقف شيء ما عن العمل. في هذا الدليل نغطي الركائز السبع لإدارة النظام: إدارة المستخدمين، وخدمات systemd، والعمليات، ومراقبة الموارد، والسجلات، وجدولة المهام، والنسخ الاحتياطي. يحتوي كل قسم على أوامر حقيقية يمكنك تنفيذها على أي توزيعة حديثة (Debian وUbuntu وRocky Linux وFedora).

1. إدارة المستخدمين والمجموعات

إنشاء المستخدمين وتعديلهم

يُنشئ الأمر useradd مستخدمًا جديدًا. في معظم التوزيعات، تذكّر استخدام الخيار -m لإنشاء المجلد الشخصي.

# Créer un utilisateur avec son répertoire personnel et un shell bash
sudo useradd -m -s /bin/bash alice

# Définir son mot de passe
sudo passwd alice

# Vérifier les informations d'un utilisateur
id alice
getent passwd alice

يعدّل الأمر usermod حسابًا موجودًا:

# Ajouter alice au groupe docker (l'option -a est indispensable pour ne pas
# écraser les groupes existants)
sudo usermod -aG docker alice

# Changer le shell de connexion
sudo usermod -s /bin/zsh alice

# Verrouiller un compte (interdit la connexion par mot de passe)
sudo usermod -L alice

# Déverrouiller le compte
sudo usermod -U alice

# Définir une date d'expiration du compte
sudo usermod -e 2026-12-31 alice

إدارة المجموعات

# Créer un groupe
sudo groupadd developpeurs

# Lister les groupes d'un utilisateur
groups alice

# Supprimer un utilisateur d'un groupe
sudo gpasswd -d alice docker

# Supprimer un groupe
sudo groupdel developpeurs

إعداد sudo بشكل صحيح

لا تعدّل الملف /etc/sudoers مباشرة باستخدام محرر نصوص عادي: فقد يؤدي خطأ في الصياغة إلى فقدان صلاحية الوصول إلى root. استخدم دائمًا visudo الذي يتحقق من الصياغة قبل الحفظ.

# Éditer le fichier sudoers en toute sécurité
sudo visudo

# Bonne pratique : créer un fichier dédié dans /etc/sudoers.d/
sudo visudo -f /etc/sudoers.d/alice

أمثلة على قواعد sudoers:

# Donner tous les droits à alice (avec mot de passe)
alice ALL=(ALL:ALL) ALL

# Autoriser le groupe admin à tout faire
%admin ALL=(ALL) ALL

# Autoriser alice à redémarrer nginx sans mot de passe, et rien d'autre
alice ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx

2. خدمات systemd

systemctl: قائد الأوركسترا

يُعدّ systemd نظام التهيئة (init) في جميع التوزيعات الحالية تقريبًا. يتحكم الأمر systemctl في الخدمات (التي تُسمّى وحدات).

# Démarrer, arrêter, redémarrer un service
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx

# Recharger la configuration sans couper le service (si supporté)
sudo systemctl reload nginx

# Activer le démarrage automatique au boot
sudo systemctl enable nginx

# Activer et démarrer en une seule commande
sudo systemctl enable --now nginx

# Vérifier l'état détaillé
systemctl status nginx

# Lister toutes les unités en échec
systemctl --failed

# Lister tous les services actifs
systemctl list-units --type=service --state=running

تشريح وحدة systemd

تُوضع الوحدات المخصصة في /etc/systemd/system/. إليك خدمة بسيطة لتطبيق:

# /etc/systemd/system/monapp.service
[Unit]
Description=Mon application web
After=network.target

[Service]
Type=simple
User=monapp
WorkingDirectory=/opt/monapp
ExecStart=/opt/monapp/bin/serveur --port 8080
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

بعد أي تعديل على ملف وحدة، أعد تحميل الخدمة الخلفية (daemon):

# Prendre en compte les nouveaux fichiers d'unités
sudo systemctl daemon-reload
sudo systemctl enable --now monapp

journalctl: قراءة سجلات الخدمات

# Journaux d'un service précis
journalctl -u nginx

# Suivre les journaux en temps réel (équivalent de tail -f)
journalctl -u nginx -f

# Journaux depuis le dernier démarrage
journalctl -b

# Journaux des deux dernières heures
journalctl --since "2 hours ago"

# Filtrer par niveau de gravité (erreurs et pire)
journalctl -p err -b

3. إدارة العمليات

مراقبة العمليات

# Vue complète de tous les processus
ps aux

# Arborescence des processus (qui a lancé quoi)
ps auxf

# Vue temps réel classique
top

# Vue temps réel améliorée (à installer : apt install htop)
htop

# Trouver le PID d'un processus par son nom
pgrep -a nginx

الأولويات: nice وrenice

تتراوح أولوية العملية من -20 (أعلى أولوية) إلى 19 (أدنى أولوية). لا يستطيع منح قيمة سالبة سوى root.

# Lancer une compression avec une priorité basse pour ne pas gêner le système
nice -n 19 tar -czf /backup/archive.tar.gz /var/www

# Changer la priorité d'un processus déjà lancé (PID 4321)
sudo renice -n 10 -p 4321

إنهاء عملية

# Demander l'arrêt propre (SIGTERM, signal 15)
kill 4321

# Forcer l'arrêt (SIGKILL, signal 9) : en dernier recours uniquement
kill -9 4321

# Tuer tous les processus portant un nom donné
pkill -f "python script_bloque.py"

# Envoyer un signal de rechargement de configuration
kill -HUP 4321

4. مراقبة القرص والذاكرة

مساحة القرص: df وdu

# Occupation de tous les systèmes de fichiers, en unités lisibles
df -h

# Occupation des inodes (un disque peut être plein d'inodes avec de l'espace libre)
df -i

# Taille totale d'un répertoire
du -sh /var/log

# Les 10 plus gros sous-répertoires de /var
du -h --max-depth=1 /var | sort -rh | head -10

الذاكرة: free

# État de la mémoire en unités lisibles
free -h

# Rafraîchir toutes les 5 secondes
free -h -s 5

انتبه إلى العمود available بدلًا من free: يستخدم Linux الذاكرة غير المستغلة كذاكرة تخزين مؤقت للقرص، ويتم تحرير هذه الذاكرة تلقائيًا عندما تحتاج إليها التطبيقات. إن امتلاء الذاكرة بالتخزين المؤقت سلوك طبيعي وسليم.

عمليات الإدخال/الإخراج على القرص: iostat

يُعدّ iostat جزءًا من الحزمة sysstat (sudo apt install sysstat).

# Statistiques d'E/S étendues, rafraîchies toutes les 2 secondes
iostat -x 2

# Se concentrer sur un disque précis
iostat -x 2 /dev/sda

الأعمدة التي ينبغي مراقبتها: %util (تشبّع القرص، وإذا اقترب من 100% فهذا يعني وجود اختناق) وawait (متوسط زمن انتظار الطلبات بالميلي ثانية).

5. السجلات: journald وlogrotate

التحكم في حجم journald

افتراضيًا، قد يشغل journald مساحة كبيرة في /var/log/journal. حدّد حجمه في الملف /etc/systemd/journald.conf:

# /etc/systemd/journald.conf
[Journal]
SystemMaxUse=500M
MaxRetentionSec=1month
# Appliquer la configuration
sudo systemctl restart systemd-journald

# Vérifier l'espace occupé par les journaux
journalctl --disk-usage

# Purger manuellement au-delà de 200 Mo
sudo journalctl --vacuum-size=200M

logrotate لملفات السجلات التقليدية

يجب أن تُدار التطبيقات التي تكتب في /var/log (مثل nginx والتطبيقات المطوّرة داخليًا) بواسطة logrotate. مثال على إعداد في /etc/logrotate.d/monapp:

# /etc/logrotate.d/monapp
/var/log/monapp/*.log {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
    create 0640 monapp monapp
    postrotate
        systemctl reload monapp > /dev/null 2>&1 || true
    endscript
}
# Tester la configuration sans rien modifier
sudo logrotate -d /etc/logrotate.d/monapp

# Forcer une rotation immédiate
sudo logrotate -f /etc/logrotate.d/monapp

6. المهام المجدولة: cron ومؤقتات systemd

cron: الطريقة التقليدية

# Éditer la crontab de l'utilisateur courant
crontab -e

# Lister les tâches planifiées
crontab -l

صياغة سطر cron: minute heure jour_du_mois mois jour_de_semaine commande (الدقيقة، الساعة، يوم الشهر، الشهر، يوم الأسبوع، الأمر).

# Sauvegarde tous les jours à 2h30
30 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

# Nettoyage tous les dimanches à 4h
0 4 * * 0 find /tmp -type f -mtime +7 -delete

# Toutes les 15 minutes
*/15 * * * * /usr/local/bin/verifier-service.sh

مؤقتات systemd: البديل الحديث

توفّر المؤقتات (timers) تسجيل الأحداث عبر journalctl، وإدارة الاعتماديات، وتعويض عمليات التنفيذ الفائتة (Persistent=true). يلزم ملفان: ملف خدمة وملف مؤقت.

# /etc/systemd/system/backup.service
[Unit]
Description=Sauvegarde quotidienne

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
# /etc/systemd/system/backup.timer
[Unit]
Description=Déclenche la sauvegarde quotidienne

[Timer]
OnCalendar=*-*-* 02:30:00
Persistent=true

[Install]
WantedBy=timers.target
# Activer le timer et vérifier la prochaine exécution
sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer
systemctl list-timers backup.timer
المعيارcronمؤقت systemd
البساطةيكفي سطر واحدملفان للوحدات
تسجيل الأحداثعليك إدارته بنفسكمدمج مع journalctl
التعويض إذا كان الجهاز مطفأًلا (إلا مع anacron)نعم مع Persistent=true
الاعتماديات بين المهاملانعم (After=، Requires=)
الدقةعلى مستوى الدقيقةعلى مستوى الثانية

7. النسخ الاحتياطي: rsync وtar

rsync: المزامنة التزايدية

لا ينقل rsync سوى الفروقات، مما يجعله مثاليًا للنسخ الاحتياطي المنتظم، محليًا كان أو عن بُعد.

# Sauvegarde locale : -a préserve permissions, dates et liens ; -v verbeux
rsync -av /var/www/ /backup/www/

# Simulation sans rien copier (toujours tester d'abord)
rsync -avn --delete /var/www/ /backup/www/

# Miroir exact : --delete supprime dans la destination ce qui a disparu de la source
rsync -av --delete /var/www/ /backup/www/

# Sauvegarde distante via SSH avec exclusions
rsync -av --delete \
  --exclude 'cache/' \
  --exclude '*.tmp' \
  -e "ssh -p 2222" \
  /var/www/ backup@serveur-backup:/backups/www/

انتبه إلى الشرطة المائلة الأخيرة: /var/www/ ينسخ محتوى المجلد، بينما /var/www ينسخ المجلد نفسه إلى الوجهة.

tar: الأرشيفات الكاملة

# Créer une archive compressée horodatée
tar -czf /backup/www-$(date +%Y%m%d).tar.gz /var/www

# Lister le contenu sans extraire
tar -tzf /backup/www-20260917.tar.gz

# Extraire dans un répertoire précis
tar -xzf /backup/www-20260917.tar.gz -C /tmp/restauration

# Archive avec compression zstd (plus rapide que gzip)
tar --zstd -cf /backup/www.tar.zst /var/www

التحقق من نسخك الاحتياطية

النسخة الاحتياطية التي لم تُختبر ليست نسخة احتياطية. جدول عمليات استعادة تجريبية بانتظام:

# Restaurer dans un répertoire temporaire et comparer avec la source
mkdir /tmp/test-restauration
tar -xzf /backup/www-20260917.tar.gz -C /tmp/test-restauration
diff -r /tmp/test-restauration/var/www /var/www

أفضل الممارسات

  • استخدم دائمًا visudo لتعديل إعدادات sudo، وفضّل الملفات المخصصة داخل /etc/sudoers.d/.
  • امنح أضيق صلاحيات sudo ممكنة: أمرًا محددًا بدلًا من ALL.
  • بعد كل تعديل على وحدة systemd، نفّذ systemctl daemon-reload ثم تحقق باستخدام systemctl status.
  • فضّل kill (SIGTERM) على kill -9: امنح العمليات فرصة للإنهاء بشكل سليم.
  • راقب الـ inodes (df -i) بقدر ما تراقب مساحة القرص: فقد يتعطل النظام رغم وجود مساحة فارغة.
  • حدّد حجم journald وفعّل logrotate منذ تثبيت أي خدمة جديدة.
  • أعد توجيه مخرجات مهام cron إلى ملف سجل، أو استخدم مؤقتات systemd للاستفادة من journalctl.
  • طبّق قاعدة 3-2-1 للنسخ الاحتياطي: ثلاث نسخ، على وسيطين مختلفين، ونسخة واحدة خارج الموقع.
  • اختبر عمليات الاستعادة بانتظام، وليس نسخك الاحتياطية فحسب.

الخلاصة

تقوم إدارة أنظمة Linux على عدد قليل من الأدوات الأساسية التي ستستخدمها يوميًا: useradd وvisudo للحسابات، وsystemctl وjournalctl للخدمات، وps وtop وkill للعمليات، وdf وfree وiostat للموارد، وcron أو مؤقتات systemd للأتمتة، وrsync للنسخ الاحتياطي. إتقان هذه الأدوات يتيح لك تشخيص الغالبية العظمى من حوادث بيئة الإنتاج وحلّها.

الخطوة المنطقية التالية هي الأتمتة: حوّل تدخلاتك اليدوية إلى سكربتات، ثم إلى مهام مجدولة، ثم إلى إعدادات تُدار بأدوات مثل Ansible. المدير الجيد للأنظمة هو من لا يكرر العملية نفسها يدويًا مرتين.

InSkillCoach

نبذة عن InSkillCoach

خبير في التدريب والتقنيات

مدرّب متخصص في التقنيات المتقدمة والذكاء الاصطناعي، تدعمه شركة GNeurone Inc.

الشهادات:

  • AWS Certified Solutions Architect – Professional
  • شهادات Google Cloud
  • Microsoft Certified: DevOps Engineer Expert
  • Certified Kubernetes Administrator (CKA)
  • CompTIA Security+
2.0k
144

التعليقات

التعليقات مدعومة عبر GitHub Discussions

سجّل الدخول باستخدام GitHub للمشاركة في النقاش

تم نسخ الرابط!