الرئيسية قاعدة المعرفة البرمجة والمنطق لينكس للمهندسين: نظام التشغيل خلف كل خادم صناعي
البرمجة والمنطق

لينكس للمهندسين: نظام التشغيل خلف كل خادم صناعي

لماذا لينكس للمهندس الصناعي؟

في عالم الأتمتة الصناعية، ستجد أن معظم خوادم SCADA، ومنصات IoT، وأنظمة التحكم الحديثة تعمل على لينكس. لماذا؟ لأنه مجاني ومفتوح المصدر، مستقر لدرجة أن الخوادم تعمل لسنوات بدون إعادة تشغيل، خفيف ويعمل على أجهزة بسيطة، وآمن بتصميمه.

سواء كنت تُدير خادم SCADA، أو تُعِد Raspberry Pi كوحدة تجميع بيانات، أو تتصل بمتحكم عن بعد — لينكس مهارة أساسية لكل مهندس صناعي حديث.

الطرفية (Terminal): أداتك الأساسية

في لينكس، الطرفية هي مركز القيادة. كل شيء يمكن التحكم به بأوامر نصية — من إدارة الملفات إلى إعادة تشغيل الخدمات.

أوامر التنقل والملفات

# أين أنا الآن؟
pwd
# النتيجة: /home/engineer

# ما الملفات هنا؟
ls -la
# يعرض كل الملفات مع التفاصيل (الأذونات، الحجم، التاريخ)

# انتقل لمجلد
cd /var/log/scada

# اعرض آخر 50 سطراً من سجل النظام
tail -50 /var/log/syslog

# ابحث عن كلمة "error" في سجل SCADA
grep "error" /var/log/scada/server.log

# ابحث عن كل ملفات الإعدادات
find /etc -name "*.conf" -type f

إنشاء ونسخ ونقل وحذف

# إنشاء مجلد لبيانات الحساسات
mkdir -p /data/sensors/2025/december

# نسخ ملف إعدادات مع الاحتفاظ بنسخة احتياطية
cp /etc/scada/config.yaml /etc/scada/config.yaml.backup

# نقل سجلات قديمة للأرشيف
mv /var/log/scada/old_*.log /archive/logs/

# حذف ملفات مؤقتة أقدم من 30 يوماً
find /tmp -name "*.tmp" -mtime +30 -delete

نظام الملفات: الخريطة

لينكس يُنظّم كل شيء كشجرة واحدة تبدأ من / (الجذر):

/
├── bin/       → أوامر أساسية (ls, cp, mv)
├── etc/       → ملفات الإعدادات (هنا تُعدّل إعدادات SCADA)
├── home/      → مجلدات المستخدمين
├── var/       → بيانات متغيرة (سجلات، قواعد بيانات)
│   ├── log/   → سجلات النظام والتطبيقات
│   └── lib/   → بيانات التطبيقات
├── opt/       → برامج خارجية (هنا تُثبّت SCADA عادةً)
├── tmp/       → ملفات مؤقتة (تُحذف عند إعادة التشغيل)
├── dev/       → ملفات الأجهزة (USB, Serial ports)
└── proc/      → معلومات عن العمليات الجارية

ملاحظة مهمة: في لينكس، المنافذ التسلسلية (Serial Ports) تظهر كملفات:

# Arduino متصل عبر USB
ls /dev/ttyUSB0
# أو
ls /dev/ttyACM0

# قراءة بيانات من المنفذ التسلسلي مباشرة
cat /dev/ttyUSB0

الأذونات: من يستطيع ماذا؟

كل ملف في لينكس له ثلاثة مستويات أذونات:

-rwxr-xr--  1  engineer  scada  4096  Dec 20  config.yaml
│├──┤├──┤├──┤
│ │   │   └── أذونات الآخرين (Others): قراءة فقط
│ │   └────── أذونات المجموعة (Group): قراءة + تنفيذ
│ └────────── أذونات المالك (Owner): قراءة + كتابة + تنفيذ
└──────────── نوع الملف (- = ملف عادي، d = مجلد)

r = قراءة (4)، w = كتابة (2)، x = تنفيذ (1)

# اجعل سكربت الإقلاع قابلاً للتنفيذ
chmod +x /opt/scada/start.sh

# أذونات رقمية: المالك=كل شيء، المجموعة=قراءة+تنفيذ، الآخرون=لا شيء
chmod 750 /opt/scada/start.sh

# غيّر مالك ملف الإعدادات لمستخدم scada
chown scada:scada /etc/scada/config.yaml

في البيئة الصناعية: لا تُشغّل خدمات SCADA بصلاحيات root. أنشئ مستخدماً مخصصاً بأقل الصلاحيات اللازمة.

إدارة الخدمات بـ systemd

systemd هو نظام الإدارة الذي يتحكم بكل الخدمات في لينكس الحديث. يبدأ الخدمات تلقائياً عند الإقلاع، يراقبها، ويُعيد تشغيلها إذا تعطلت.

أوامر أساسية

# حالة خدمة SCADA
systemctl status scada-server

# إيقاف وتشغيل
systemctl stop scada-server
systemctl start scada-server
systemctl restart scada-server

# تفعيل البدء التلقائي عند الإقلاع
systemctl enable scada-server

# عرض سجلات الخدمة (آخر 100 سطر)
journalctl -u scada-server -n 100

# متابعة السجلات لحظياً
journalctl -u scada-server -f

إنشاء خدمة مخصصة

لنُنشئ خدمة تقرأ بيانات الحساسات وتُرسلها للخادم:

# /etc/systemd/system/sensor-collector.service
[Unit]
Description=Industrial Sensor Data Collector
After=network.target
Wants=network-online.target

[Service]
Type=simple
User=scada
Group=scada
WorkingDirectory=/opt/sensor-collector
ExecStart=/opt/sensor-collector/collect.sh
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal

# حماية أمنية
ProtectSystem=full
ProtectHome=true
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target
# تفعيل الخدمة الجديدة
sudo systemctl daemon-reload
sudo systemctl enable sensor-collector
sudo systemctl start sensor-collector

SSH: الوصول عن بعد

SSH (Secure Shell) يُمكّنك من التحكم بخادم لينكس عن بعد بأمان. في المصنع، تتصل من مكتبك بخادم SCADA في غرفة التحكم.

# اتصال بسيط
ssh engineer@192.168.1.100

# اتصال بمنفذ مختلف
ssh -p 2222 engineer@scada-server.factory.local

# نسخ ملف من الخادم لجهازك
scp engineer@192.168.1.100:/var/log/scada/today.log ./

# نسخ ملف إعدادات للخادم
scp config.yaml engineer@192.168.1.100:/etc/scada/

مفاتيح SSH: اتصال بدون كلمة مرور

أنشئ زوج مفاتيح مرة واحدة، ولن تحتاج لكتابة كلمة المرور مرة أخرى:

# توليد زوج مفاتيح
ssh-keygen -t ed25519 -C "engineer@factory"

# نسخ المفتاح العام للخادم
ssh-copy-id engineer@192.168.1.100

# الآن تتصل بدون كلمة مرور
ssh engineer@192.168.1.100

إدارة الحزم

لينكس يستخدم مدير حزم لتثبيت وتحديث البرامج. في أوبونتو/ديبيان:

# تحديث قائمة الحزم المتاحة
sudo apt update

# تحديث كل الحزم المثبتة
sudo apt upgrade

# تثبيت أدوات مفيدة
sudo apt install htop          # مراقب عمليات تفاعلي
sudo apt install net-tools     # أدوات شبكة (ifconfig, netstat)
sudo apt install mosquitto     # خادم MQTT لـ IoT
sudo apt install python3-pip   # مدير حزم بايثون

# البحث عن حزمة
apt search modbus

# إزالة حزمة
sudo apt remove package-name

مراقبة النظام

العمليات والموارد

# العمليات الجارية (لقطة)
ps aux | grep scada

# مراقبة تفاعلية (مثل Task Manager)
htop

# استخدام القرص
df -h

# استخدام الذاكرة
free -h

# من يستهلك أكبر مساحة على القرص؟
du -sh /var/log/* | sort -rh | head -10

مراقبة الشبكة

# عناوين IP الخاصة بالجهاز
ip addr show

# هل الخادم يستمع على المنفذ المطلوب؟
ss -tlnp | grep 8080

# اختبار الاتصال بجهاز آخر
ping 192.168.1.50

# تتبع مسار الحزم
traceroute 192.168.1.50

# مراقبة حركة الشبكة على منفذ معين
sudo tcpdump -i eth0 port 502   # مراقبة حركة Modbus

سكربتات Bash: أتمتة المهام

بدلاً من تكرار نفس الأوامر يومياً، اكتب سكربت يفعلها تلقائياً:

#!/bin/bash
# /opt/scripts/daily-maintenance.sh
# سكربت صيانة يومية لخادم SCADA

LOG_DIR="/var/log/scada"
BACKUP_DIR="/backup/logs"
DATE=$(date +%Y-%m-%d)

echo "[$DATE] بدء الصيانة اليومية..."

# 1. أرشفة السجلات القديمة
find $LOG_DIR -name "*.log" -mtime +7 -exec gzip {} \;
mv $LOG_DIR/*.gz $BACKUP_DIR/

# 2. فحص مساحة القرص
USAGE=$(df -h / | awk 'NR==2 {print $5}' | tr -d '%')
if [ "$USAGE" -gt 85 ]; then
  echo "WARNING: Disk usage at ${USAGE}%"
  # إرسال إنذار عبر البريد أو API
fi

# 3. فحص حالة الخدمات
for service in scada-server sensor-collector mosquitto; do
  if ! systemctl is-active --quiet $service; then
    echo "ERROR: $service is down! Restarting..."
    systemctl restart $service
  fi
done

# 4. حفظ نسخة احتياطية من الإعدادات
tar -czf $BACKUP_DIR/config-$DATE.tar.gz /etc/scada/

echo "[$DATE] اكتملت الصيانة اليومية"
# اجعل السكربت قابلاً للتنفيذ
chmod +x /opt/scripts/daily-maintenance.sh

# أضفه لـ cron ليعمل يومياً الساعة 2 صباحاً
crontab -e
# أضف السطر:
# 0 2 * * * /opt/scripts/daily-maintenance.sh >> /var/log/maintenance.log 2>&1

خلاصة

المهارة الاستخدام الصناعي
الطرفية إدارة يومية للخوادم
الأذونات تأمين أنظمة التحكم
systemd إدارة خدمات SCADA وIoT
SSH وصول آمن عن بعد
إدارة الحزم تثبيت وتحديث البرامج
سكربتات Bash أتمتة المهام المتكررة

لينكس ليس نظام تشغيل فقط — إنه بيئة عمل المهندس الصناعي الحديث. كل ما تعلمته هنا ستستخدمه يومياً في إدارة أنظمة المصنع الذكي.

Linux command-line bash permissions systemd SSH لينكس سطر الأوامر الصلاحيات الخدمات إدارة الخوادم الطرفية