الجمعة، 20 مارس 2009

سطر الأوامر نظرة عن قرب أكثر 05

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


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

تلك كانت مقدمة بسيطة للأمر cp والذى سوف أتناوله إن شاء الله فى معرض حديثى ، لكن فى البداية لنبدأ بشكل مُبسط لكيفية إستخدام الأمر cp، كل ما عليك فعله هو كتابة الأمر cp متبوعاً بإسم الملف الذى تود نسخه ثم أخيراً متبوعا بإسم الملف الجديد المنسوخ ! عملية سهلة أليس كذلك ؟؟ فكر فى العناصر المكونة للأمر cp وهى فى البداية العنصر الرئيسى لعملية النسخ وهو الأمر ذاته ثم بعد ذلك الملف الذى تود نسخه من مصدر معين ثم أخيراً العنصر الثالث وهو الملف المنسوخ الذى تود الحصول عليه ، لذا نستطيع التعبير أيضاً بطريقة أخرى عن العناصر الرئيسية المكونة لعملية النسخ فى صورة أبسط من ذلك بكثير كالتالى :

كود PHP:
cp "source المصدر الذى نقوم بالنسخ منه" "Destination الجهة التى نقوم بالنسخ إليها"
ولكى نستطيع فهم ما قلناه من كلمات نظرية لابد من تسخين أيدينا قليلا ولذا نسرع بفتح محاكى الطرفية ونقوم بتنفيذ التالى :

مثال 1 :

كود PHP:
¹eng1n33r@p0w3r:~$ pwd
/export/home/eng1n33r
كود PHP:
²eng1n33r@p0w3r:~$ ls
debian
.vdi
language
win
.vdi
كود PHP:
³eng1n33r@p0w3r:~$ cp language language_bakup
كود PHP:
eng1n33r@p0w3r:~$ ls
debian
.vdi
language
language_bakup
win
.vdi
الآن نتطرق إلى شرح المثال :

1- فى البداية قمنا بطباعة الدليل الحالى الذى نعمل عليه بإستخدام الأمر pwd (لمعرفة المزيد عن الأمر راجع الموضوع أعلى ).

2- بعد ذلك قمنا بإستعراض الملفات التى توجد داخل ذلك المجلد بإستخدام الأمر ls (لمعرفة المزيد عن الأمر راجع الموضوع أعلى).

3- قمنا بعملية النسخ فى أبسط صورها التى كان الغرض منها هو عمل نسخة من الملف "language" بإستخدام الأمر cp وكان صيغة الأمر فى المثال هو إسم الملف الأصلى الذى نود نسخه وهو "language" متبوعا بإسم الملف الجديد المنسوخ والذى كان فى المثال "language_bakup" .

4- أخيراً قمنا بإستعراض الملفات داخل المجلد مرة أخرى بإستخدام الأمر ls للتأكيد فعليا من وجود نسخة من الملف كما فعلنا .


كما ترى فى هذا المثال أن عملية النسخ بسيطة جدا كل ما أردنا فعله هو مجرد نسخ ملف مرة أخرى داخل نفس المجلد الذى يوجد ، لذا تفاديا لعملية التكرار قمنا بتغيير إسم الملف الجديد المنسوخ إلى إسم آخر .

لكن السؤال الذى قد يدور فى ذهن البعض الآن " لكنى لا أريد نسخ الملف مرتين داخل مجلد واحد ، ما أريد فعله هو نسخ ملف معين إلى مسار آخر هل يمكننى فعل ذلك ؟؟

الإجابة بالطبع تستطيع ، وإﻻ ما الفائدة إذا من عملية النسخ ، ولكى تلمس ذلك عن قرب نأخد المثال التالى :

مثال 2 :
كود PHP:
¹eng1n33r@p0w3r:~$ pwd
/export/home/eng1n33r
كود PHP:
²eng1n33r@p0w3r:~$ cp language /export/home/eng1n33r/Desktop/
كود PHP:
³eng1n33r@p0w3r:~$ ls /export/home/eng1n33r/Desktop/
cool-stack topics
LAC_magazine_Jul_Aug_2008
.pdf
language
links
.txt
شرح المثال :

1- فى البداية قمنا بإستخدام الأمر pwd لمعرفة الدليل الحالى الذى نعمل عليه .

2- بعد ذلك قمنا بنسخ الملف "language" من المجلد الحالى الذى نعمل بداخله إلى المسار الجديد "الجهة" التى نود نسخ الملف إليها والتى كانت فى المثال "/export/home/eng1n33r/Desktop/"

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

3- قمنا أخيرا باستخدام الأمر ls لإستعراض المجلد Desktop للتأكد فعلا من تمام عملية نسخ الملف "language" ، وبالفعل تمت عملية النسخ بنجاح .

إذا نستطيع إستنتاج قاعدة مهمة فى التعامل مع الأمر cp :


عند البدء فى عملية النسخ ينبغى معرفة المصدر "source" الذى تود النسخ ثم بعد ذلك يكون متبوعا بالجهة "destination" المراد النسخ إليه ، هذا كل ما فى الأمر .

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

مثال على ذلك :

كود PHP:
eng1n33r@p0w3r:~$ pwd
/export/home/eng1n33r
كود PHP:
eng1n33r@p0w3r:~$ cp /export/home/eng1n33r/Desktop/Q_plus_A.txt .

إستخدام الأمر cp مع ال WildCards

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

الآن حان وقت الكسل ، فمع دمج الWildCards مع الأمر cp ستشعر بأن الأمور أصبحت أسهل بكثير من ذى قبل ، فلتتخيل معى هذه العملية فى البداية كان الأمر طبيعى جدا أن تقوم بنسخ ملف واحد ولم تكن لتوجد مشكلة فى ذلك الأمر لكن هل فكرت قليلا أنك فى يوم من الأيام لن تكتفى بنسخ ملف واحد وستحتاج إلى نسخ عدة ملفات ؟؟

أرى أنه قد وصل إليك ما أريد إيصاله ، ولسان حالك بالطبع هل سأقوم بنسخ الملفات التى أريدها واحدا تلو الآخر ؟؟ مهمة شاقة أليس كذلك ؟

نعم مهة شاقة أى شاقة ، فلنتفرض أنك تريد نسخ ألف ملف مرة واحدة من مسار أو مجلد إلى آخر هل حينها ستقوم بعمل ذلك ألف مرة ؟؟ أشك لذا يأتى هنا دور "*" أو ال "asterisk" والتى تعنى عند استخدامها "الكل" فمثلا أنا أريد نقل عشرة ملفات من مجلد إلى آخر مرة واحدة فنستطيع التعبير عن العشرة ملفات دفعة واحدة بإستخدام "*" ولكى تتضح الأمور بشكل أكبر لديك نأخد مثالا .

مثال 3 :
كود PHP:
¹eng1n33r@p0w3r:~$ cd Desktop/VOIP/
كود PHP:
²eng1n33r@p0w3r:~/Desktop/VOIP$ ls
1008.mp3 index
.htm VOIP-Overview.pdf VOIP-SER-Part2.pdf
index_files VOIPfull
.pdf VOIP-SER-Part1.pdf VOIP-Testbed.pdf
كود PHP:
³eng1n33r@p0w3r:~/Desktop/VOIP$ cp * /export/home/eng1n33r/Desktop/akl/
كود PHP:
eng1n33r@p0w3r:~/Desktop/VOIP$ ls /export/home/eng1n33r/Desktop/akl/
1008.mp3 VOIPfull.pdf VOIP-SER-Part1.pdf VOIP-Testbed.pdf
index
.htm VOIP-Overview.pdf VOIP-SER-Part2.pdf
شرح المثال :

1- فى البداية قمنا بالولوج إلى الدليل الذى توجد بداخله الملفات التى نريد نسخها بإستخدام الأمر cd .

2- بعد ذلك قمنا بإستعراض الملفات التى توجد داخل ذلك المجلد بإستخدام الأمر ls .

3- الآن قمنا بإستخدام الأمر cp مع * للتعبير أننا نريد نسخ جميع الملفات داخل المجلد VOIP ونسخ هذه الملفات إلى المسار المذكور فى المثال .

4- أخيراً نقوم بالتأكد فعليا من نسخ الملفات إلى الجهة التى اردنا نسخ الملفات إليها بإستخدام الأمر ls .

ونكمل إن شاء الله لاحقا ً

السلام عليكم ورحمة الله وبركاته

ليست هناك تعليقات:

إرسال تعليق