أهلاً يا شباب! اليوم بنتكلم عن شي أساسي ومهم جداً في عالم Linux: الأنابيب وإعادة التوجيه (Pipes and Redirections). هذي الأدوات بتخليك تتحكم في تدفق البيانات بين الأوامر والملفات، وتنجز شغلك بكفاءة عالية. يلا ندخل في الموضوع على طول.
1. الأنابيب (Pipes: |)
البايپ (Pipe) يخليك تاخذ مخرجات أمر معين (Standard Output) وتخليها مدخل لأمر ثاني (Standard Input). كأنك بتوصل ماسورة بين برنامجين عشان البيانات تمشي بينهم.
الرمز هو الشرطة العمودية: |.
مثال عملي:
لو تبغى تشوف كل العمليات اللي شغالة على جهازك وتفلتر منها بس اللي فيها كلمة "ssh":
ps aux | grep ssh
هنا، ps aux بيطلع لك كل العمليات، بعدين | يرسل هذي المخرجات لـ grep ssh اللي بدوره بيبحث عن كلمة "ssh" ضمن المخرجات اللي وصلته.
ملاحظة: الأنابيب مفيدة جداً لربط الأوامر الصغيرة مع بعضها لإنشاء مهام معقدة.
2. إعادة توجيه المخرجات (Output Redirection: >)
إعادة التوجيه تخليك تغير مسار مخرجات أمر معين من الشاشة (Standard Output) إلى ملف بدالها. الرمز هو علامة أكبر من: >.
مثال عملي:
لو تبغى تحفظ قائمة الملفات في مجلد معين بملف نصي:
ls -l > files.txt
هنا، مخرجات الأمر ls -l (قائمة الملفات بالتفصيل) ما راح تظهر على الشاشة، بدل كذا راح تنحفظ داخل ملف اسمه files.txt. لو الملف ما كان موجود، راح ينشأ. لو كان موجود، راح يتم مسح محتوياته القديمة وكتابة الجديدة فوقها.
تحذير: استخدم
>بحذر! إذا كان الملف موجود مسبقاً، سيتم مسح كل محتوياته.
3. إضافة للملفات (Append Output Redirection: >>)
هذا مثل > بالضبط، لكن بدل ما يمسح محتويات الملف القديمة، بيضيف المخرجات الجديدة لنهاية الملف. الرمز هو علامتي أكبر من: >>.
مثال عملي:
لو تبغى تضيف قائمة ملفات مجلد ثاني لنفس الملف السابق:
ls -a >> files.txt
الآن، محتويات ls -a راح تنضاف لنهاية ملف files.txt بدون ما تمسح المحتويات الموجودة فيه أصلاً.
4. إعادة توجيه الأخطاء (Error Redirection: 2>)
الأنظمة الشبيهة بيونكس عندها ثلاث قنوات رئيسية لتدفق البيانات:
0: Standard Input (stdin) - المدخلات1: Standard Output (stdout) - المخرجات العادية2: Standard Error (stderr) - مخرجات الأخطاء
عادةً، > و >> يتعاملون مع stdout (القناة رقم 1). لو تبغى تعيد توجيه stderr (القناة رقم 2) لملف، تستخدم 2>.
مثال عملي:
لو حاولت تعرض ملف مو موجود، بيطلع لك خطأ. لو تبغى تحفظ هذا الخطأ بملف:
cat non_existent_file 2> errors.log
هنا، الخطأ اللي بيطلع من أمر cat (لأن الملف non_existent_file مو موجود) راح ينحفظ في ملف errors.log.
5. إعادة توجيه المخرجات والأخطاء معاً (&> أو >&)
أحياناً تبغى تحفظ كل شي، سواء كان مخرجات عادية أو أخطاء، في ملف واحد. هنا تستخدم &> أو >&.
مثال عملي:
لو تبغى تحفظ كل مخرجات وأخطاء أمر معين في ملف واحد:
find /sys -name "power" &> full_output.log
هذا الأمر ممكن ينتج عنه أخطاء (مثل أذونات الوصول) ومخرجات عادية. كل شي راح ينحفظ في full_output.log.
طريقة بديلة (وأقدم شوي) هي توجيه stderr لـ stdout، ثم توجيه stdout لملف:
some_command > output.log 2>&1
هنا، 2>&1 يعني "وجه القناة رقم 2 (stderr) لنفس المكان اللي رايحة له القناة رقم 1 (stdout)". وبما أن stdout رايحة لـ output.log، فـ stderr بتروح لنفس الملف.
6. إعادة توجيه المدخلات (Input Redirection: <)
مثل ما تقدر توجه المخرجات لملف، تقدر تخلي ملف يكون هو المدخل لأمر معين بدل الكيبورد. الرمز هو علامة أصغر من: <.
مثال عملي:
لو عندك ملف اسمه names.txt فيه أسماء، وتبغى أمر sort يرتبها من الملف مباشرة:
sort < names.txt
هنا، sort راح ياخذ محتويات names.txt كمدخل له ويرتبها ويعرضها على الشاشة.
خلاصة
الأنابيب وإعادة التوجيه أدوات قوية جداً تخليك تتحكم بالبيانات وتنجز مهام معقدة بسهولة. تدرب عليها كثير عشان تصير جزء من طريقة تفكيرك وأنت تتعامل مع الطرفية.
|: يوصل مخرجات أمر كمدخل لأمر آخر.>: يحفظ مخرجات أمر في ملف (ويمسح القديم).>>: يضيف مخرجات أمر لنهاية ملف.2>: يحفظ أخطاء أمر في ملف.&>أو>&: يحفظ المخرجات والأخطاء معاً في ملف.<: يجعل ملف هو مدخل لأمر.
أتمنى يكون الشرح واضح ومفيد. أي سؤال، لا تترددوا!