جلساتي كانت تموت مع كل انقطاع اتصال: كيف أنقذني `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`، تغيرت طريقة عملي على السيرفرات بشكل جذري. لم أعد أخاف من انقطاع الإنترنت، وأصبحت أكثر تنظيماً وإنتاجية بفضل النوافذ والأجزاء. الأداة حولت تجربة العمل عن بعد من مصدر قلق إلى بيئة عمل مستقرة وموثوقة.

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

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

أبو عمر

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

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

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

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

آخر المدونات

ذكاء اصطناعي

بحثنا كان يعثر على الكلمات، لا على النوايا: كيف أنقذتنا قواعد بيانات المتجهات من جحيم البحث الدلالي الأعمى؟

أشارككم قصة من قلب المعركة البرمجية، يوم كان نظام البحث لدينا أصمًا وأعمى، لا يفهم سوى تطابق الكلمات. سنغوص في عالم قواعد بيانات المتجهات (Vector...

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

قاعدة بياناتنا كانت تجيب على ‘هل هذا موجود؟’ ببطء قاتل: كيف أنقذنا ‘مرشح بلوم’ (Bloom Filter) من جحيم الاستعلامات المكلفة؟

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

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

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

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

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

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

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

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

أنظمتنا كانت تسأل ‘هل هناك جديد؟’ كل ثانية: كيف أنقذتنا ‘الخطافات الشبكية’ (Webhooks) من جحيم الاستقصاء المستمر (Polling)؟

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

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

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

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

14 أبريل، 2026 قراءة المزيد
التوظيف وبناء الهوية التقنية

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

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

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