كانت جلساتنا تموت مع كل انقطاع للشبكة: كيف أنقذنا `tmux` من جحيم فقدان العمل على السيرفرات؟

يا جماعة الخير، السلام عليكم ورحمة الله. معكم أخوكم أبو عمر.

خليني أحكيلكم قصة صارت معي قبل كم سنة، قصة من اللي بتعلّم في الواحد وبتخليه يضرب كف بكف. كنا وقتها شغالين على مشروع ذكاء اصطناعي كبير، وكان لازم أعمل تدريب لنموذج (Model Training) على سيرفر بعيد. العملية هاي، زي ما بعضكم بعرف، بتاخد وقت… مش بس وقت، بتاخد وقت طوييييل. يعني بنحكي عن ساعات وأحياناً أيام.

المهم، شبكت على السيرفر عن طريق الـ SSH، شغّلت السكربت، والشاشة قدامي بتطبع أرقام وحسابات… شعور حلو صراحة، بتحس حالك بتصنع إشي عظيم. مرت أول ساعة، ثاني ساعة، والوضع تمام التمام. فجأة، وبدون سابق إنذار، “Connection to server lost…”، انقطع النت! طبعاً عنا في فلسطين، النت “ما شاء الله عليه”، بروح وبيجي على كيفه. حاولت أرجع أشبك… شبكت… بس شو الفايدة؟ الجلسة (Session) القديمة طارت، والسكربت اللي كان شغال وقف، وكل الساعات اللي راحت… راحت عالفاضي. يا الله شو انقهرت يومها! شعور العجز هداك، إنه شغلك كله معلّق بخيط رفيع اسمه “اتصال الإنترنت”، شعور بقتل الإنتاجية.

هاي الحادثة تكررت أكثر من مرة، لدرجة صرنا نخاف نشغّل أي عملية طويلة على السيرفرات. جلساتنا كانت بتموت حرفياً مع كل انقطاع للشبكة. لحد ما في يوم، واحد من الشباب “الختيارية” في الشغل، شافني بعاني، حط إيده على كتفي وحكالي: “يا أبو عمر، شكلك لسا ما تعرفت على الـ `tmux`”. ومن يومها، حياتي كمبرمج تغيرت.

ما هو الـ `tmux` يا أبو عمر؟ ليش كل هالضجة؟

بكل بساطة، الـ `tmux` هو اختصار لـ “Terminal Multiplexer”، أو “مُضاعِف الطرفية” بالعربي الفصيح. بس انسى الاسم التقني المعقّد، خليني أشرحلك إياه بطريقتي.

تخيل إنه عندك مكتب خاص فيك على السيرفر البعيد. هذا المكتب فيه شاشات وطاولات، وبتقدر تفتح فيه أكتر من برنامج وتخليهم شغالين. الـ `tmux` هو هاد المكتب. هو بيخلقلك “جلسة” (Session) على السيرفر، وهاي الجلسة بتضلها عايشة وشغالة في الخلفية، حتى لو سكرت لابتوبك، أو انقطع عندك النت، أو حتى لو انضرب نيزك جنب الراوتر تبعك!

بتقدر تفصل عن هاي الجلسة (Detach) وترجع لحياتك الطبيعية، وبعد ساعة، يوم، أو أسبوع، ترجع تتصل فيها (Attach) وتلاقي كل شي زي ما تركته بالزبط. كل النوافذ مفتوحة، كل الأوامر اللي كانت شغالة لساها شغالة، وكأنك ما غبت عنها دقيقة.

يلا نبلش شغل: كيف نبدأ مع `tmux`

كلام جميل، بس كيف بنستخدمه؟ الموضوع أسهل مما بتتخيل. خلينا نمشي خطوة بخطوة.

h3: 1. التثبيت (Installation)

أول شي لازم نثبّت الأداة. افتح الطرفية (Terminal) على جهازك المحلي أو على السيرفر واكتب الأمر المناسب لنظامك:

# For Debian/Ubuntu
sudo apt-get install tmux

# For CentOS/Fedora
sudo yum install tmux

# For macOS (using Homebrew)
brew install tmux

h3: 2. إنشاء أول جلسة (Your First Session)

بعد التثبيت، اكتب الأمر التالي لإنشاء جلسة جديدة:

tmux

رح تلاحظ إنه شكْل الطرفية تغير شوي، وظهر شريط أخضر في الأسفل. مبروك! أنت الآن داخل جلسة `tmux`. بس هاي الطريقة مش عملية، الأفضل دايماً تعطي اسم للجلسة عشان تعرفها بعدين.

نصيحة من أبو عمر: لا تنشئ جلسة بدون اسم! رح تتوه بينهم بعدين. استخدم الأمر `-s` (اختصار لـ session) لتسمية الجلسة.

خلينا نطلع من هاي الجلسة (اكتب `exit` واضغط Enter) ونجرب الطريقة الصح:

tmux new -s my-project

الآن أنت داخل جلسة اسمها “my-project”. بتقدر تبدأ تشغل أوامرك، مثلاً تشغل سيرفر التطبيق تبعك أو أي عملية طويلة.

h3: 3. السحر الحقيقي: الفصل والعودة (Detaching & Attaching)

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

Ctrl + b (اترك الأزرار) ثم اضغط على حرف d (اختصار لـ detach).

رح تلاقي حالك رجعت للطرفية العادية تبعتك، مع رسالة بتقول “[detached (from session my-project)]”. الجلسة الآن عايشة بأمان على السيرفر.

طيب، كيف نرجع؟

أولاً، بتقدر تشوف كل الجلسات الشغالة باستخدام الأمر:

tmux ls

رح يعطيك قائمة بالجلسات وأسمائها. عشان ترجع تتصل بجلستنا، استخدم الأمر `attach` مع تحديد اسم الجلسة:

tmux attach -t my-project

وها أنت قد عدت! كل شيء كما تركته تماماً. الآن لو انقطع النت، كل اللي عليك تعمله هو تعيد الاتصال بالسيرفر وتكتب أمر الـ `attach` لترجع لشغلك.

للمحترفين فقط: إتقان `tmux`

الـ `tmux` مش بس عشان يحفظ الجلسات. هو أداة إنتاجية جبارة بتسمحلك تنظم شاشة الطرفية تبعتك بشكل مذهل.

h3: النوافذ (Windows) والأجزاء (Panes)

الـ `tmux` بعطيك مستويين من التنظيم داخل الجلسة الواحدة:

  • النوافذ (Windows): تخيلها مثل التابات (Tabs) في متصفح جوجل كروم. بتقدر تفتح أكتر من نافذة، كل واحدة لها غرض معين (واحدة للسيرفر، واحدة للداتا بيز، واحدة للـ Git).
  • الأجزاء (Panes): داخل كل نافذة، بتقدر تقسم الشاشة نفسها لأجزاء، سواء بشكل أفقي أو عمودي.

أهم الاختصارات (كلها تبدأ بـ `Ctrl + b` ثم…):

  • c: لإنشاء نافذة جديدة (create).
  • ,: لإعادة تسمية النافذة الحالية.
  • w: لعرض قائمة بكل النوافذ والتنقل بينها.
  • n: للانتقال للنافذة التالية (next).
  • p: للانتقال للنافذة السابقة (previous).
  • %: لتقسيم الشاشة عمودياً (vertical split).
  • ": لتقسيم الشاشة أفقياً (horizontal split).
  • Arrow Keys (الأسهم): للتنقل بين الأجزاء المقسمة.
  • x: لإغلاق الجزء الحالي.

مثال عملي: تخيل أنك تعمل على مشروع ويب. بتقدر تقسم شاشتك كالتالي:

  • جزء علوي كبير: لكتابة الكود باستخدام محرر نصوص مثل `vim` أو `nano`.
  • جزء سفلي مقسوم نصفين:
    • النصف الأيسر: لتشغيل سيرفر التطوير ومراقبة المخرجات.
    • النصف الأيمن: لتنفيذ أوامر `git` أو أي أوامر طرفية أخرى.

بهذه الطريقة، كل ما تحتاجه موجود أمامك في شاشة واحدة، دون الحاجة للتنقل بين عشرات النوافذ.

نصائح من دار أبو عمر

  • التخصيص هو المفتاح: أنشئ ملف `~/.tmux.conf` وقم بتخصيص `tmux` على كيفك. يمكنك تغيير الألوان، اختصارات الأزرار (كثيرون يفضلون `Ctrl+a` بدلاً من `Ctrl+b`)، وتعديل شريط الحالة السفلي.
  • النسخ واللصق: النسخ واللصق في `tmux` له طريقة خاصة (scrollback mode). للدخول لوضع النسخ اضغط `Ctrl+b` ثم `[`. يمكنك الآن التحرك بالأسهم. اضغط `Space` لبدء التحديد و `Enter` لنسخ المحدد. للصق، استخدم `Ctrl+b` ثم `]`.
  • البرمجة الثنائية عن بعد (Remote Pair Programming): هل تعلم أنه يمكنك أنت وزميلك الاتصال بنفس جلسة `tmux` من جهازين مختلفين؟ هذا يسمح لكما بالكتابة على نفس الطرفية ورؤية ما يفعله الآخر في نفس اللحظة. كنا نستخدمها للمراجعة المباشرة للكود وحل المشاكل معاً، وكأننا جالسين في نفس الغرفة.

الخلاصة يا جماعة الخير 📝

منذ ذلك اليوم الذي تعلمت فيه `tmux`، لم أعد أخشى انقطاع الإنترنت أثناء العمل على السيرفرات. أصبحت أفتح جلسة لكل مشروع في بداية الأسبوع، وأتنقل بينها بسهولة، مطمئناً أن عملي في أمان.

أداة `tmux` ليست مجرد حل لمشكلة انقطاع الاتصال، بل هي نقلة نوعية في طريقة تفكيرك وتعاطيك مع الطرفية. تمنحك القوة والتحكم لتنظيم مساحة عملك الرقمية كما تشاء، مما يزيد من تركيزك وإنتاجيتك بشكل كبير.

نصيحتي لك: لا تتردد. خصص ساعة من وقتك اليوم لتثبيت `tmux` وتعلم أساسياته. قد يبدو الأمر معقداً في البداية، ولكن أعدك أنك ستشكرني لاحقاً. استثمر في أدواتك، فهي التي تصنع الفارق بين المبرمج العادي والمبرمج المحترف. 😉

والله ولي التوفيق.

أبو عمر

سجل دخولك لعمل نقاش تفاعلي

كافة المحادثات خاصة ولا يتم عرضها على الموقع نهائياً

آراء من النقاشات

لا توجد آراء منشورة بعد. كن أول من يشارك رأيه!

آخر المدونات

اختبارات الاداء والجودة

كان إطلاقنا للميزات مقامرة: كيف أنقذنا اختبار التحميل (Load Testing) باستخدام k6 من جحيم انهيار الخوادم؟

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

5 مايو، 2026 قراءة المزيد
​معمارية البرمجيات

كانت ذاكرة فريقنا هي الوثيقة الوحيدة: كيف أنقذتنا ‘سجلات القرارات المعمارية’ (ADRs) من جحيم التغييرات المرعبة؟

أشارككم قصة من قلب المعركة البرمجية، كيف كاد مشروعنا أن ينهار بسبب قرار قديم لم يتذكره أحد. وكيف أصبحت "سجلات القرارات المعمارية" (ADRs) هي ذاكرتنا...

5 مايو، 2026 قراءة المزيد
تسويق رقمي

كانت ميزانيتنا التسويقية تحترق: كيف أنقذتنا ‘نماذج الإحالة’ من جحيم تخمين العائد على الاستثمار؟

أتذكر جيداً تلك الاجتماعات المحمومة، حيث كانت الأرقام تتراقص على الشاشة والميزانية التسويقية تتآكل دون أن نعرف أين يذهب كل دولار. في هذه المقالة، أشارككم...

5 مايو، 2026 قراءة المزيد
تجربة المستخدم والابداع البصري

كانت تفاعلات المستخدم صامتة وميتة: كيف أنقذتنا ‘التفاعلات الدقيقة’ (Microinteractions) من جحيم التجربة المربكة؟

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

5 مايو، 2026 قراءة المزيد
البودكاست