بسم الله الرحمن الرحيم
عذرا على التأخير ولكن سنكمل بعد ذلك بلا توقف
هذا الجزء الأزل والجزء التانى سيشرح المحرر الرائع vi
اليوم هنتكلم عن بعض النقاط المهمة فى نظام لينوكس

وقبل أى شىء يجب على الجميع ملاحظة أن اللينوكس يقوم بمعامله كل جزء فى السيستم وكل شىء وحتى الخدمات التى يقدمها على أساس انها text files ولذلك وجدت أهمية معرفه كيف تتعامل مع الملفات فى نظام لينوكس


نبدأ على بركة الله :

نبدأ بالامر sort

ما عمل هذا الأمر ؟؟ يقوم هذا الأمر بترتيب ملف معين على حسب أى شىء يتم تحديده بالامر فمثلا أريد ترتيب السطور فى ملف مثل

كود PHP:
/etc/passwd 
نفكر أولا على أى أساس سيتم الترتيب و كيف نقوم بهذا وما الجزء الذى سنقوم بالترتيب على أساسه ولكن أولا نقوم بعرض جزء من الملف :
كود PHP:
root:x:0:0:root:/root:/bin/bash
daemon
:x:1:1:daemon:/usr/sbin:/bin/sh
bin
:x:2:2:bin:/bin:/bin/sh
sys
:x:3:3:sys:/dev:/bin/sh
sync
:x:4:65534:sync:/bin:/bin/sync
games
:x:5:60:games:/usr/games:/bin/sh
man
:x:6:12:man:/var/cache/man:/bin/sh 
والمزيد ....

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

كود PHP:
sort -t: -k1 /etc/passwd 
فى الخيار -t قمنا بتحديد الفاصل بين الحقول الذى سيتم العد على أساسه والترتيب هنا ترتيب أبجدى ولكن ماذا إذا قمنا بعمل

كود PHP:
sort -t: -nk3 /etc/passwd 
سيكون الترتيب هنا عددى ولذلك اضنا حرف ال n ويكون الترتيب على أساس الخانة الثالثة فى السطر

يرجى قراءة ال man الخاص بالامر عن طريق :
كود PHP:
man sort 
وهذا جزء بسيط من الخيارات للأمر
كود PHP:
  **Common options
    
-r performs a reverse (descendingsort
    
-n performs a numeric sort
    
-f ignores (folds) case of characters in strings
    
-(uniqueremoves duplicate lines in output
    
-t c uses c as a field separator
    
-k X sorts by c-delimited field X
          Can be used multiple times 
ومن أهمها طبعا الخيار -u فهى لا تظهر النتائج المتشابهة فى الترتيب بل تظهرها مرة واحدة فقط كالتالى :

نفذ الامر التالى :
كود PHP:
touch userlist.txt
echo "kareem abd elkader
> mostafa ahmed
> kareem abd elkader
> mostafa ahmed"
>userlist.txt

sort -u userlist.txt 
وهنا هتكون النتيجة :
كود PHP:
root@kareem-pc:~# sort -u userlist.txt
kareem abd elkader
mostafa ahmed 
بينما فى تنفيذ الأمر uniq على المخرجيقوم بعدهم ويقوم بذكر كم مرة تكررت الكلمة فى النص مع الترتيب كالتالى
كود PHP:
root@kareem-pc:~# sort userlist.txt | uniq -c
      
2 kareem abd elkader
      2 mostafa ahmed 
نأتى إلى أمر اخر وهوا
كود PHP:
diff and patch 
ما هوا الأمر diff

مثلا : لديك ملفان لإعدادات الأباتشى مثلا أحدهما معطوب والآخر سليم وتريد أن تعرف ما الفرق بين المعطوب والسليم أو أوجه الإختلاف بينهما لمعرفه وجه الخطأ هنا تظهر فائدة الأمر diff

كود PHP:
#diff broken.txt work.txt 
وهنا هيقوم بعرض المختلف بينهم وطبعا الترتيب واضح فالملف المعطوب ذكر أولا والملف السليم ذكر ثانيا وسيتم توضيح لماذا ولكن ليس الىن بل عند شرح patch

وهنا نريد مثلا ذكر الإختلافات بين الملفين فى ملف بحيث أستطيع مراقبة ومعرفة الإختلافات بشكل أوضح بعيدا عن شاشة الشل راقب الأمر التالى :

كود PHP:
#diff -u broken.txt work.txt >patch.patch 
الامر التالى أخرج لك الإختلاف فى ملف منفرد
والان أردت مثلا أن تقوم بتنفيذ الاختلافات على الملف المعطوب لديك ؟؟ماذا سيحدث ؟؟

نقوم بالتجربة :
1- قم بإنشاء ملفين متشابهين وليكن
كود PHP:
#echo " linux rox
windows is sucks
mac 
for design
freebsd is amazing
">work.txt

#echo "
fedora rox
windws is bad system
mac
freebsd is amazing
">broken.txt 
2- الان قم بالمقارنة وإخراج الناتج منهم :

كود PHP:
diff -u broken.txt work.txt >systems.patch 
3- قم بعرض محتويات الملف الناتج :
كود PHP:
root@kareem-pc:~# cat systems.patch
--- broken.txt    2009-03-25 03:41:32.000000000 +0200
+++ work.txt    2009-03-25 03:41:17.000000000 +0200
@@ -1,+1,@@
-
fedora rox
-windws is bad system
-mac
linux rox
+windows is sucks
+mac for design
 freebsd is amazing 
والان نريد تطبيق الملف systems.patch على الملف broken.txt
نقوم بالامر التالى :
كود PHP:
root@kareem-pc:~# patch -b broken.txt systems.patch 
patching file broken.txt 
وتمت عمليه الباتش
الامر هنا قام بعمل تطبيق للتغييرات الموجود فى ملف باتش على الملف المعطوب وهوا broken.txt وتم اختيار الخيار -b لكى يقوم بعمل نسخة احتياطية من الملف أو backup وسنرى هذا والان قم بعمل التالى :
كود PHP:
#ls -l
-rw-r--r-- 1 root root   61 2009-03-25 03:44 work.txt
-rw-r--r-- 1 root root  220 2009-03-25 03:44 systems.patch
-rw-r--r-- 1 root root   61 2009-03-25 03:46 broken.txt
-rw-r--r-- 1 root root   55 2009-03-25 03:43 broken.txt.orig 
الان لديك أربعة ملفات منهم ملف الباتش والملف السليم والملف المعطوب وملف نسخة احتياطية للملف المعطوب وهى original وفى حين رغبت فى استرجاعه فى اى وقت ويمكنك قراءة المحتوى لكل ملف عن طريق
كود PHP:
#cat filename 
نكمل حديثنا ونستعمل أدارة رائعة فى لينوكس وهى
كود PHP:
aspell check letter.txt 
تقوم بعمل spelling فى الملف ويعمل لك check للهجاء للملفوتختار التعديل فتنفذه لك
مثل القاموس تماما

ننتقل إلى أهم الأوامر فى عالم لينوكس
كود PHP:
sed 
هوا عبارة عن محرر للنصوص يقوم بأكثر من عملية مثلا التحرير والبحث عن النصوص والتنفيذ على ملف هذه الأداة من أقوى الأدوات فى لينوكس وأقوى مما يبدو للجميع نبدأ حديثنا عنها :

كود PHP:
#sed -e 's/Ahmed/kareem/' /home/filename 
يقوم هذا الامر الان بالبحث داخل الملف المذكور مساره هنا /home/filename على كلمة Ahmed وإستبدالها بكلمة kareem ويعرض لنا النتائج فقط لاننا إستخدمنا الخيار -e فقد قام بالبحث والتحرير وذلك فى النتيجة المعروضة فقط لك وللتأكد قم بعرض الملف وستجد لم يتغير شىء

كود PHP:
#sed -i 's/Ahmed/kareem/' /home/filename 
بعد تغيير هذا الخيار قم بعرض الملف تلاحظ طبعا ماحدث من تغيير

والان ننتقل إلى طريقة أخرى لإستخدام هذى الأداة فمثلا :
كود PHP:
#sed '1,50s/dog/cat/g' /home/filename 
هنا يقوم بالبحث من السطر الاول وحتى السطر 50للبحث عن كلمة dog وابدالها بكلمة cat وذلك فى الملف كله Global

مثال اخر

كود PHP:
#sed '/kareem/,/redhat/s/engineer/SystemAdministrator/g' /home/filename 
هنا طلبت من الامر ان يقوم بالبحث فى الملف المذكور عن كل سطر يحتوى على كلمة kareem و redhat ويقوم بالبحث
داخل السطر عن كلمة engineer وتحويلها الى SystemAdministrator

ولكن فلنفترض وجود اكثر من كلمة أريد البحث عنها وتغييرها وقد لا يجمعهم سطر واحد ولكنهم فى الملف وهنا تقوم بالامر التالى :
كود PHP:
sed -'s/ahmed/kareem/' -'s/zeko/mostafa/' /home/filename 
وهناك فكرة أفضل

تضع كل تعديلاتك فى ملف كالتالى مثلا
كود PHP:
s/ahmed/kareem/
s/zeko/mostafa
وتقوم بتطبيق كل هذى التغييرات على الملف كالتالى :
كود PHP:
sed -f myedit /home/filename 
غلى هنا فقد إنتهينا من شرح بعض الأدوات المهمة فى التحكم فى النصوص والمحررات الخاصة بها فى لينوكس
ملاحظة : قد لايبدو مفيدا لدى البعض درسا مثل هذا ولكنه من القواعد الأساسية لأى مدير نظام system administrator ان يعرف ماذا يجب أن يكون بين يديه لتغيير ملفات ال config فى السيستم

ترقبوا المزيد
ولا تنسونا من صالح دعواتكم
وشكرى لأستاذى المهندس مصطفى طنطاوى
كريم عبد القادر
25مارس 2009
4:55 صباحا