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

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

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

بعد انقطاع نعود إليكم لنُكمل ما بدأناه أﻻ وهى الرحلة الشيقة مع سطر الأوامر


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

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

والآن نتطرق إلى الجزء العملى المتعلق بالأمر touch فى أبسط صوره دون إضافة أى خيارات أخرى معه ولنرى كيفية تعديل الوقت والتاريخ على ملف معين ، ونبدأ أوﻻ باستعرض الملفات باستخدام الأمر ls كما يلى :

كود PHP:
shuffl@P0w3R:~$ ls -l ~
total 1167060
drwxr
-xr-x 7 shuffl shuffl 4096 2007-02-21 19:03 aaaa
-rw------- 1 shuffl shuffl 865301 2007-02-21 18:45 arp.html
-rw-r--r-- 1 shuffl shuffl 31295 2006-11-27 10:07 arp.html.zip
هنا قمنا أوﻻ باستعراض الملفات الموجودة على المجلد home directory والتى ترمز العلامة~ إليه وكانت النتيجة كما بأعلى والآن نريد مثلا تغيير الوقت والتاريخ للمجلد ونلاحظ أن آخر وقت تم التعديل على الملف كانت الساعة 19:03 والتاريخ هو 21-02-2007 كما يلى :

كود PHP:
shuffl@P0w3R:~$ touch aaaa
shuffl
@P0w3R:~$ ls -l~
total 1167060
drwxr
-xr-x 7 shuffl shuffl 4096 2007-02-22 06:17 aaaa
-rw------- 1 shuffl shuffl 865301 2007-02-21 18:45 arp.html
-rw-r--r-- 1 shuffl shuffl 31295 2006-11-27 10:07 arp.html.zip
كما ترون تم تحديث الأوقات الخاصة بالمجلد aaaa لتُصبح هى الأوقات الفعلية الحالية لدينا.,ويتضح من ذلك أن الأمر touch يقوم بالتعديل على كل من الملفات والمجلدات على حد سواء بمعنى إذا كان لديك ملفات نصية أو أى نوع ترغب فى تغيير وقت التعديل عليه فما عليك إﻻ كتابة الأمر مصحوبا بإسم الملف المُراد .

ولكن قد يتبادر إلى الأذهان سؤاﻻ ًبخصوص الأمر ، أﻻ وهو هل الأمر touch يقوم بتغيير وقت التعديل على الملفات إلى الأوقات الحالية فقط أم أى وقت وتاريخ أريده ؟؟

تعلمنا فيما مضى أن لينوكس عالماً آخر ، ففيه تمتلك القدرة على تطويع أى شىء تريده لأنه نظام مرن بما فيه الكفاية ليفعل لك ما تريده ، ولذلك تستطيع بالطبع عند استخدام الأمر touch لتغيير أوقات التعديل على ملفات تريدها أن تغير أوقات التعديل إلى الأوقات التى تختارها أنت وبالتالى كل ما نحتاجه هو اضافة خيار إلى الأمر touch ليقوم بهذه المهمة وهذا الخيار هو t- والذى عنده إضافته للأمر يقوم بتغيير الأوقات التى تختارها بسلاسة ومرونة رائعة والجدول التالى يوضح الصيغة العامة لتغيير أوقات الملفات كالتالى
[CC]YY]MMDDhhmm[.ss]] :
كود PHP:
character Meaning

CC First two characters of a four
-digit year

YY Two
-digit year:
* if
from (00-68) , assumes that first two
digits are 20
* if form (69-99) , assumes that first two
digits are 19
* if nothing , assumes current year

MM Month
(01-12)

DD Day (01-31)

hh Hour (01-23)

mm Minute (00-59)

ss Second (00-59)
والآن قد رأيت الجدول السابق لكيفية وضع القيم الخاصة بالتاريخ والوقت سواء كان التاريخ سنين ، شهور ، أيام وكذلك الوقت ساعات ، دقائق ، ثوان .

والآن إلى ملاحظة مهمة وهى متعلقة بالأرقام التى ليست على صورة ثنائية بمعنى ، إذا كان الرقم لديك مكون من خانة واحدة فقط كرقم 1 أو 2 أو 3 إلخ ينبغى أن تقوم بكتابة صفر قبل الرقم حتى تقوم الطرفية بفهم صيغة تغيير الوقت والتاريخ بشكل سليم . والآن نتطرق إلى بعض الأمثلة المتعلقة بالأمر touch بعد إضافته إلى الخيار t- لكى نقوم بوضع تاريخ ووقت معين من اختيارنا كالتالى :

مثال : قمنا بإنشاء ملف جديد باسم wireless.log والآن نريد استعراض كافة المعلومات الخاصة بالملف بداية من التصاريخ الموضوعة عليه ، واستعراض المالك له والمجموعة كذلك آخر وقت تم التعديل فيه على الملف كالتالى :

كود PHP:
shuffl@P0w3R:~/Desktop$ ls -l wireless.log
-rw-r--r-- 1 shuffl shuffl 0 2007-04-16 18:17 wireless.log
هنا فى المثال الوقت الذى تم آخر تعديل فيه على الملف هو الساعة 18:17 والتاريخ هو 16-04-2007 .

نريد الآن تغيير ذلك الوقت والتاريخ لتكون الساعة 00:00 ويكون التاريخ 31-12-1992 ويكون ذلك كالتالى :

كود PHP:
shuffl@P0w3R:~/Desktop$ touch -t 9212310000 wireless.log
shuffl
@P0w3R:~/Desktop$ ls -l wireless.log
-rw-r--r-- 1 shuffl shuffl 0 1992-12-31 00:00 wireless.log
كما ترون تمت المهمة بنجاح وقمنا بتعديل كلا ً من الوقت والتاريخ اللذان قمنا باختيارهما . نأتى إلى مثال آخر ونريد تغيير الوقت إلى الساعة 02:34 والتاريخ هو 17-05-2034 عن طريق عمل التالى :

كود PHP:
shuffl@P0w3R:~/Desktop$ touch -t 3405170234 wireless.log
shuffl
@P0w3R:~/Desktop$ ls -l wireless.log
-rw-r--r-- 1 shuffl shuffl 0 2034-05-17 02:34 wireless.log
وبالفعل تم لنا ذلك أيضا ً !! . ونأتى إلى مثال أخير وهو تغيير الوقت إلى الساعة 17:03 والتاريخ إلى 19-10-2007 أى السنة الحالية :

كود PHP:
shuffl@P0w3R:~/Desktop$ touch -t 10191703 wireless.log
shuffl
@P0w3R:~/Desktop$ ls -l wireless.log
-rw-r--r-- 1 shuffl shuffl 0 2007-10-19 17:03 wireless.log
والآن نشرح كيفية وضع القيم فى الأمثلة السابقة ، فى المثال الأول أردنا تغيير التاريخ إلى 31-12-1992 قمنا أوﻻ بكتابة السنة المُرادة من اليسار وهى 92 ثم الشهر المُراد وهو 12 ثم اليوم المُراد وهو 31 ولكن قد يستوقفنى البعض ويقول لى لما لم تكتب صيغة السنة كاملة من أربعة أرقام لتُصبح 1992 بدلا من 92 أو بصيغة أخرى كيف علمت الطرفية أنّ السنة التى أريدها هى 1992 وليست مثلا 2099 أو شىءٌ من ذاك القبيل ؟؟

لو تتذكرون بأعلى وضعت جدول يحدد صيغ وضع الوقت والتاريخ فالبداية كانت من الحرفين CC واللذان يرمزان إلى أول رقمين من أربعة أرقام من السنة وبعدهما الحرفان YY واللذان يرمزان إلى الرقمين الآخرين من أرقام السنة وذكرت أنّ للحرفين YY ثلاث حالات :

الأولى : أن يكون الرقمان فى المدة من سنة رقمها 00 إلى سنة رقمها 68 وهنا تعتبر الطرفية أن أول رقمين هما 20 وبالتالى يصبح نطاق الأرقام من 00 إلى 68 خاص بالألفية الثانية أو من سنة 2000 إلى سنة 2068 وهذه الحالة تمثل المثال رقم واحد.

الثانية : أن يكون الرقمان فى المدة من سنة رقمها 69 إلى سنة رقمها 99 وهنا تعتبر الطرفية أن أول رقمين هما 19 وبالتالى يصبح نطاق الأرقام من 69 إلى 99 خاص بالقرن التاسع عشر أو من سنة 1969 إلى سنة 1999 وهى الحالة تمثل المثال رقم اثنان.

الثالثة : إذا لم تضع أرقاما ً فتعتبر الطرفية أنّ السنة المُرادة هى السنة الحالية وهذه الحالة تمثل المثال رقم ثلاثة.

توضيح : كما ذكرت أعلى أنّ للسنة تكتب أربعة أرقام أى من الممكن أن تكتب سنة 1992 بهذه الشكل أو أن تكتب الرقمين 92 فقط ، كذلك يمكنك كتابة سنة 2022 هكذا أو أن تكتب السنة مُكتفيا بالرقمين 22 فقط .

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

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

قد يندهش البعض لذلك ولكن تعال معى لترى كيف يمكن عمل ذلك كالتالى :

كود PHP:
shuffl@P0w3R:~/Desktop$ touch test.txt
shuffl
@P0w3R:~/Desktop$ ls -l

-rw-r--r-- 1 shuffl shuffl 0 2007-04-17 09:00 test.txt
-rw-r--r-- 1 shuffl shuffl 0 1969-10-19 17:03 wireless.log
-rw-r--r-- 1 shuffl shuffl 493 2006-10-02 18:08 xchat.desktop
نعم ! ﻻ تندهش فعلا قام الأمر بإنشاء ملف جديد وهو الملف test.txt وبالتالى نستنتج من ذلك أنه يُمكنك إنشاء أى ملف بأى صيغة تُريدها باستخدام الأمر touch و كلُ ما عليك عمله هو مجرد فقط كتابة الأمر متبوعا ًبإسم الملف الذى تود إنشاؤه .


الأمر : mkdir


( Create a New Directory )
استعرضنا فى الأمر السابق touch بعض المهام الجيدة التى يقوم بها من تعديل وقت وتواريخ الملفات إلى إمكانية إنشائه ملفات فارغة وبعد أن تعرفنا على هذه المهام نريد التقدم خطوة أخرى وهى كيفية إنشاء مجلدات ؟؟

هنا يأتى دور الأمر mkdir والذى هو اختصار كلمتىّ make directory ، وكل ما عليك عمله لإنشاء مجلد فارغ هو مجرد كتابة الأمر mkdir متبوعا بإسم المجلد بالشكل التالى :

كود PHP:
shuffl@P0w3R:~/Desktop$ mkdir test
shuffl
@P0w3R:~/Desktop$ ls -l

drwxr
-xr-x 8 shuffl shuffl 4096 2007-03-11 07:56 terminolgies
drwxr
-xr-x 2 shuffl shuffl 4096 2007-04-17 09:32 test
-rw-r--r-- 1 shuffl shuffl 0 2007-04-17 09:00 test.txt
ملحوظة : معظم التوزيعات عن إنشاء مجلدات باستخدام الأمر mkdir يكون التصريح الإفتراضى للمجلد هو القراءة والكتابة والتنفيذ لصاحب الجلد أو المالك ، والقراءة والتنفيذ لكلا ً المجموعة وأى مستخدم آخر على التوزيعة وقد بينت هذا الأمر فى موضوع التصاريح على الملفات والمجلدات بأنظمة unix-like فلتراجعه على هذا الرابط :

http://www.linuxac.org/forum/showthread.php?t=2437

والأمر mkdir ذكى بما فيه الكفاية ، بمعنى حينما تود إنشاء ملف يحمل نفس الإسم فى مسار معين على الفور يُخبرك الأمر أنه ﻻ يستطيع تكرار المجلد ﻷنه موجود مُسبّقا ً ولنرى ذلك كالتالى :

كود PHP:
shuffl@P0w3R:~/Desktop$ mkdir test
mkdir
: cannot create directory `test': File exists
الآن تعلمنا خطوة أخرى وهى إنشاء مجلد فارغ باستخدام أمر جديد وهو الأمر mkdir ، ولكن كما قلنا فى البداية أن لكل أمر من أوامر الطرفية بعض الخيارات التى يتم إضافتها إليه لتُكسب الأمر قوة ً ومرونة ً حقيقية وهذا ما يحدث للأمر mkdir فَيُوجد لدى الأمر بعض الخيارات المهمة نستعرض البعض منها على سبيل المثال :

mkdir -p


(Create a New Directory and Necessary Subdirectories)


أول خيار نستعرضه مع الأمر mkdir هو الخيار p- والذى يرمز إلى parents-- ، حيث يُمكنك هذا الخيار عند دمجه مع الأمر من إنشاء المجلد الذى توده بالإضافة إلى مجلدات فرعية تحت هذا المجلد دون الحاجة إلى إنشاء كل مجلد فرعى على حده !! دون أن نكثر الكلام نأخذ مثالا ً عمليا ً على ذلك :

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

كود PHP:
shuffl@P0w3R:~/Desktop$ mkdir -p pictures/personal/natural
shuffl
@P0w3R:~/Desktop$ ls -l

drwxr
-xr-x 3 shuffl shuffl 4096 2007-04-17 09:48 pictures
drwxr
-xr-x 8 shuffl shuffl 4096 2007-03-11 07:56 terminolgies
-rw-r--r-- 1 shuffl shuffl 0 2007-04-17 09:00 test.txt


shuffl
@P0w3R:~/Desktop$ cd pictures/
shuffl@P0w3R:~/Desktop/pictures$ ls -l

drwxr
-xr-x 3 shuffl shuffl 4096 2007-04-17 09:48 personal


shuffl
@P0w3R:~/Desktop/pictures$ cd personal/
shuffl@P0w3R:~/Desktop/pictures/personal$ ls -l

drwxr
-xr-x 2 shuffl shuffl 4096 2007-04-17 09:48 natural
كما ترى قام الأمر باستخدام الخيار p- بإنشاء المجلد الرئيسى وهو pictures ، ثم قام بإنشاء مجلد فرعى تحت المجلد pictures وهو المجلد personal ، ثم قام أخيرا بإنشاء مجلد فرعى آخر تحت المجلد الفرعى personal وهو المجلد natural .


mkdir -v


(Find Out What mkdir Is Doing As It Acts)


الخيار الذى سنتحدث عنه الآن مُفيد فى بعض الحالات أثناء قيامك أداء مهمة معينة باستخدام أمر مُعين يمكن إضافة هذا الخيار معه ، بمعنى حينما قمنا فى النقطة السابقة والتى تحدثنا فيها عن الخيار p- لم نعلم كيف بدأ الأمر mkdir فى إنشاء المجلدات ، هل بدأ أوﻻ بإنشاء المجلد الرئيسى ، أم بدأ أوﻻ بإنشاء آخر مجلد فرعى وهكذا ، ولذلك الخيار v- يتيح لنا إمكانية معرفة أى المجلدات تم البدء فى إنشائها أوﻻ والخيار v- يرمز إلى verbose-- وبالتالى نستطيع تكرار المثل السابق ولكن الجديد هنا إضافة خياران فى نفس واحد هما الخيار p- والخيار v- كالتالى :

كود PHP:
shuffl@P0w3R:~/Desktop$ mkdir -vp picutres/personal/natural

mkdir
: created directory `picutres'
mkdir: created directory
`picutres/personal'
mkdir: created directory `picutres/personal/natural'
كما تلاحظ قام الأمر mkdir أوﻻ بإنشاء المجلد pictures ثم قام بعد ذلك بإنشاء المجلد personal داخل المجلد pictures ثم قام أخيرا ً بإنشاء المجلد natural داخل المجلد personal والذى هو بدوره داخل المجلد natural .

ملحوظة : ﻻ يفضل استخدام الخيار v- مع أوامر فك الضغط عن الملفات حيث يقوم الخيار بمضاعفة الوقت اللازم لعملية الفك .

إلى هذا الحد نكتفى فى هذه المشاركة ونُكمل فى المشاركات القادمة بإذنه تعالى وما أسألكم هو الدعاء لى بظاهر الغيب فقط .

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

http://www.linuxac.org/forum/showthread.php?t=1603

دمتم بحفظ الله وعنايته

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

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

إرسال تعليق