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

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

اسمحولي أبدأ بقصة صارت معي قبل كم سنة، قصة بتلخص معاناة كل مبرمج بيشتغل على سيرفرات بعيدة. كانت الساعة حوالي 2 بعد منتصف الليل، وأنا في مكتبي الصغير في رام الله، منهمك في تدريب نموذج ذكاء اصطناعي على سيرفر قوي مستأجره بالخارج. العملية كانت محتاجة ساعات طويلة، يمكن 8 أو 9 ساعات متواصلة. كنت متابع النتائج أول بأول، أعدل بعض المتغيرات، وأسجل ملاحظاتي، والقهوة طبعاً ما كانت تفارقني.

وفجأة، وبدون أي سابق إنذار… “فصل النت”. الشاشة أمامي تجمدت، وظهرت رسالة “Connection closed by remote host”. قلبي وقع في رجلي. حاولت أرجع أتصل بالسيرفر بسرعة، لكن كنت عارف المصيبة اللي بستناني. لما فتحت الطرفية (Terminal) من جديد، لقيت العملية اللي كانت شغالة من 4 ساعات ميتة. راحت. تبخرت. كل التقدم اللي صار راح هباءً منثوراً. وقتها حسيت بقهر ما بعده قهر، وصرت أحكي لحالي “يا حبيبي، راح كل الشغل على الفاضي!”.

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

ما هو الـ `tmux` وليش بنحتاجه؟ (What is `tmux` and why do we need it?)

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

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

باختصار: `tmux` هو بوليصة تأمين لشغلك على السيرفرات البعيدة.

يلا نبلش: تثبيت وبدء أول جلسة `tmux`

الأمور أبسط مما بتتخيل. خلينا نمشي خطوة بخطوة.

التثبيت (Installation)

أول شي، لازم نثبت الأداة على السيرفر اللي بنشتغل عليه (مش على جهازنا المحلي). الأمر بيعتمد على توزيعة لينكس اللي بتستخدمها:

  • لأنظمة Debian/Ubuntu:
sudo apt update
sudo apt install tmux
  • لأنظمة CentOS/RHEL/Fedora:
sudo yum install tmux
# أو لو بتستخدم dnf
sudo dnf install tmux

وهيك بنكون ثبتنا الأداة. بسيطة، صح؟

بدء جلسة جديدة (Starting a new session)

بعد التثبيت، افتح الطرفية واكتب الأمر التالي:

tmux

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

tmux new -s my_project

هذا الأمر بينشئ جلسة جديدة اسمها “my_project”. تسمية الجلسات عادة ممتازة جداً لما يكون عندك أكثر من مشروع شغال عليهم بنفس الوقت.

التحكم في `tmux`: الأوامر الأساسية اللي لازم تعرفها

الـ `tmux` بيعتمد على مفهوم “المفتاح السحري” أو الـ “Prefix Key”. بشكل افتراضي، هذا المفتاح هو Ctrl+b. هذا يعني إنك عشان تعطي أمر لـ `tmux`، لازم تضغط Ctrl+b أولاً، بعدين تتركهم، وبعدها تضغط مفتاح الأمر. خلينا نشوف أهم الأوامر.

الانفصال والعودة للجلسات (Detaching and Re-attaching)

هذه هي الميزة الجوهرية في `tmux`. لنفترض أنك بدأت عملية طويلة داخل جلسة `tmux` وبدك تسكر اللابتوب وتروح تنام.

  • للانفصال (Detach) عن الجلسة: اضغط Ctrl+b ثم اضغط حرف d.

رح تلاقي حالك رجعت للطرفية العادية، لكن لا تخاف! الجلسة وكل شي فيها لسا شغالين في الخلفية. بتقدر تسكر اتصال الـ SSH وأنت متطمن.

طيب، كيف نرجع لشغلنا؟

  1. عرض الجلسات الشغالة: اكتب في الطرفية العادية الأمر tmux ls.
$ tmux ls
my_project: 1 windows (created Tue Dec 19 15:30:00 2023)
another_session: 2 windows (created Tue Dec 19 14:00:00 2023)
  1. العودة (Attach) لجلسة معينة: استخدم اسم الجلسة اللي بدك ياها.
tmux attach -t my_project

وبوم! 🎉 رح تلاقي حالك رجعت لنفس الشاشة، والعملية الطويلة لسا شغالة وكأنه ما صار شي.

النوافذ والأجزاء: تنظيم مساحة عملك (Windows and Panes)

الـ `tmux` مش بس بحافظ على جلستك، هو كمان بنظم مساحة عملك بشكل خرافي. فكر في الجلسة كأنها مشروع. داخل كل مشروع (جلسة)، عندك “نوافذ” (Windows) زي التابات في المتصفح، وداخل كل نافذة، عندك “أجزاء” (Panes) بتقدر تقسم فيها الشاشة.

  • إنشاء نافذة جديدة (New Window): Ctrl+b ثم c.
  • التنقل بين النوافذ:
    • Ctrl+b ثم n (للنافذة التالية – next).
    • Ctrl+b ثم p (للناذة السابقة – previous).
    • Ctrl+b ثم رقم النافذة (مثلاً 0, 1, 2).
  • تقسيم الشاشة عمودياً (Vertical Split): Ctrl+b ثم %.
  • تقسيم الشاشة أفقياً (Horizontal Split): Ctrl+b ثم ".
  • التنقل بين الأجزاء (Panes): Ctrl+b ثم مفاتيح الأسهم (, , , ).
  • إغلاق جزء أو نافذة: ببساطة اكتب exit أو اضغط Ctrl+d.

بهذه الطريقة، بتقدر تفتح ملف كود في جزء، وتشغل السيرفر في جزء ثاني، وتراقب الـ logs في جزء ثالث، وكل هذا في نفس الشاشة وبدون ما تفتح 10 نوافذ SSH.

نصائح من أبو عمر: حركات احترافية في `tmux`

بعد سنين من الاستخدام اليومي، تعلمت كم حركة بتخلي الحياة مع `tmux` أسهل وأجمل.

تخصيص `tmux` لعيونك

بتقدر تعدل كل شي في `tmux` عن طريق ملف اسمه .tmux.conf في مجلد الـ home الخاص فيك. من أشهر التعديلات هو تغيير المفتاح السحري لشي أسهل من Ctrl+b، مثل Ctrl+a (زي برنامج screen القديم).

أنشئ الملف ~/.tmux.conf وأضف فيه الأسطر التالية:

# Change prefix key to Ctrl+a
unbind C-b
set-option -g prefix C-a
bind-key C-a send-prefix

# Enable mouse support
set -g mouse on

تفعيل الفأرة (mouse support) بخليك تقدر تغير حجم الأجزاء وتختار النوافذ بالماوس مباشرة. شي كتير مريح.

العمل الجماعي مع `tmux`

هل تعلم أنك بتقدر تشارك جلستك مع زميلك في العمل؟ هذا مفيد جداً في الـ Pair Programming أو لما بدك مساعدة في حل مشكلة معينة.

  1. الشخص الأول ينشئ الجلسة: tmux new -s pair_debugging
  2. الشخص الثاني يتصل بنفس الجلسة: tmux attach -t pair_debugging

الآن كلاكما يرى نفس الشاشة ويكتب في نفس الطرفية في الوقت الفعلي. أداة جبارة للتعاون عن بعد.

الخلاصة: `tmux` مش مجرد أداة، هو بوليصة تأمين لشغلك 🙏

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

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

بالتوفيق يا جماعة!

أبو عمر

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

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

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

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

آخر المدونات

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

اختباراتي كانت خضراء لكن الكود مليء بالعلل: كيف أنقذني ‘الاختبار الطفري’ (Mutation Testing) من جحيم الثقة الزائفة؟

أشارككم قصة حقيقية حول كيف خدعتني الاختبارات "الخضراء" وأدخلت علة حرجة إلى الإنتاج. سأشرح لكم تقنية "الاختبار الطفري" (Mutation Testing) التي غيرت مفهومي عن جودة...

3 أبريل، 2026 قراءة المزيد
نصائح برمجية

الكود الخاص بي كان هرماً من الشروط: كيف أنقذتني ‘شروط الحماية’ (Guard Clauses) من جحيم القراءة الصعبة؟

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

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

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

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

2 أبريل، 2026 قراءة المزيد
خوارزميات

مشاكلي الفرعية كانت تتكرر بلا نهاية: كيف أنقذتني ‘البرمجة الديناميكية’ من جحيم الحسابات الزائدة؟

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

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

بياناتي التسويقية كانت عمياء: كيف أنقذني ‘الإحالة من جانب الخادم’ (Server-Side Tracking) من جحيم فقدان البيانات

في يوم من الأيام، اكتشفت أن بيانات حملاتي التسويقية كانت شبه عمياء بسبب أدوات حظر الإعلانات وتحديثات الخصوصية. في هذه المقالة، أشارككم قصتي وكيف كانت...

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

واجهاتي كانت فوضى: كيف أنقذني ‘نظام التصميم’ (Design System) من جحيم عدم الاتساق؟

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

2 أبريل، 2026 قراءة المزيد
برمجة وقواعد بيانات

استعلاماتي كانت تزحف: كيف أنقذتني ‘الفهرسة’ (Indexing) من جحيم الاستجابات البطيئة؟

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

2 أبريل، 2026 قراءة المزيد
الشبكات والـ APIs

تطبيقي كان يعتمد على التحديث اليدوي: كيف أنقذتني ‘الويب سوكتس’ (WebSockets) من جحيم الاستقصاء المستمر (Polling)؟

أتذكر جيدًا ذلك المشروع الذي كاد أن يحرق أعصابي وسيرفراتي. في هذه المقالة، أشارككم قصتي مع جحيم الاستقصاء المستمر (Polling) وكيف كانت تقنية الـ WebSockets...

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