يا جماعة الخير، السلام عليكم ورحمة الله.
اسمحولي أبدأ بقصة صارت معي قبل كم سنة، قصة بتلخص معاناة كل مبرمج بيشتغل على سيرفرات بعيدة. كانت الساعة حوالي 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 وأنت متطمن.
طيب، كيف نرجع لشغلنا؟
- عرض الجلسات الشغالة: اكتب في الطرفية العادية الأمر
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)
- العودة (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 أو لما بدك مساعدة في حل مشكلة معينة.
- الشخص الأول ينشئ الجلسة:
tmux new -s pair_debugging - الشخص الثاني يتصل بنفس الجلسة:
tmux attach -t pair_debugging
الآن كلاكما يرى نفس الشاشة ويكتب في نفس الطرفية في الوقت الفعلي. أداة جبارة للتعاون عن بعد.
الخلاصة: `tmux` مش مجرد أداة، هو بوليصة تأمين لشغلك 🙏
منذ أن بدأت أستخدم `tmux`، تغيرت طريقة عملي على السيرفرات بشكل جذري. لم أعد أخاف من انقطاع الإنترنت، وأصبحت أكثر تنظيماً وإنتاجية بفضل النوافذ والأجزاء. الأداة حولت تجربة العمل عن بعد من مصدر قلق إلى بيئة عمل مستقرة وموثوقة.
نصيحتي الأخيرة الك: لا تستنى لما تضيع عليك ساعات طويلة من الشغل عشان تتعلمها. ابدأ اليوم، خصص ساعة من وقتك لتجربة الأوامر الأساسية، وصدقني، بعد أسبوع واحد فقط من الاستخدام، رح تسأل حالك كيف كنت عايش بدونها. رح تدعيلي.
بالتوفيق يا جماعة!