3.2 سطر الأوامر ليس مخيفاً!! | كتاب لينكس الشامل | >> |
يعتبر سطر الأوامر في لينكس من أهم مميزاته لأنه يسمح لك بتنفيذ أشياء معقدة بطرق بسيطة جدا لذا من الطبيعي أن تجد نافذة سطر الأوامر دائمة مفتوحة عند مستخدمي لينكس ، فعلى الرغم من كون سطر الأوامر لغة برمجة تفسيرية إلا نه يمكن لغير الخبراء والمبرمجين استعماله بدون أي صعوبة
ومن باب الحرية -وهو شعار FSF- فإنك تستطيع استخدام أي برنامج ليكون مفسراً لأوامرك يسمى غلاف shell حاليا الأكثر شهرة هو bash ولكن يستطيع كل مستخدم تغييره واستخدام آخر مثل ksh,csh ...
BASH أي Bourne Again SHell وقد سمي كذلك لأن بيرني عمل برنامج سماه على اسمه غلاف بيرني ولكن بعد مدة ظهرت برامج أقوى منه مثل korn shell (اسمه ksh) و csh فانقرض هذا البرنامج حتى جاء أحد عشاقة فطوّره وأضاف عليه الميزيات المنافسة وسماه غلاف بيرني مرة أخرى !!
ويجب أن لا يختلط الموضع عليك بين الغلاف والطرفية terminal
فهي البرنامج الذي يشغل البرنامج الغلاف في البيئة الرسومية(أو غير الرسومية)
وأنت عندما تريد تشغيل سطر الأوامر في البيئة الرسومية تقوم بتشغيل الطرفية/التيرمينال
(كما هي العادة لا يوجد تيرمينال واحدة بل تختار ما يناسبك)
وتختلف هذه فيما بينها بمقدار الجمال ودعم اللغات ودعم الجر والاسقاط
مثلا
xterm الأبشع على الإطلاق وتغيير الخط أو الخلفية ضرب من الجنون
rxvt أقل بشاعة من سابقه
aterm جميل ويمكن أن تكون الخلفية شفافة
mlterm بها دعم رائع للغة العربية
konsol من أجمل ما يكون وهو تابع لمجموعة kde ويمكن أن تكون الخلفية شفافة
gnome-terminal من أجمل ما يكون وهو تابع لمجموعة gnome ويمكن أن تكون الخلفية شفافة
وتكون أيقونتهم على شكل شاشة سوداء
أو صدفة (معنى آخر ل shell ). ربما تجد الطرفية التي اختارتها التوزيعة في
القائمة الرئيسية ثم أدوات النظام System tools ثم الطرفية terminal.
وهناك أيضا الشاشة النصية غير الرسومية ال console ويمكن الذهاب إليها بالتغيير إلى طرفية إفتراضية VT غير رسومية (معظم التوزيعات تشغل سبع طرفيات افتراضية تعمل كل منها وكأنها جهاز منفصل وتخصص الأخيرة لتكون رسومية أي سيكون لديك سبعة أجهزة في جهاز) اضغط CTRL+ALT+Fn (حيث Fn هي F1 F2 ...) للتحول إلى الطرفية الوهمية النونية(الأولى أو الثانية...الخ ) إن الأمر أسهل مما يبدوا، اضغط CTRL+ALT+F1 ستتحول إلى شاشة نصية تطلب منك ادخال اسم مستخدم كلمة سر ثم تعطيك سطر أوامر تستطيع تشغيل أي شيء اضغط CTRL+ALT+F2 ستتحول إلى شاشة نصية أخرى وهكذا حتى السابعة التي هي الشاشة الرسومية وتعمل كلها معا ملاحظة: يمكنك التغيير من عددها أو ترتيبها تزيد منها إذا كنت مبذرا أو لديك جهاز سريع أو تقللها للتقليل من إرهاق الجهاز
عند تشغل سطر الأوامر بأي طريقة منها يظهر
[folder@host]$
للمستخدم العادي او [folder@host]#
للمستخدم الجذر
والحكمة من ذلك هو تحذيرك لأن خطأ إملائي بسيطة وأنت جذر
قد يخرب النظام بينما للمستخدم العادي يقول له "لا يحق لك تدمير النظام" وحتى هذه
يمكن تغييرها.
ابدأ بكتابة الأمر (انتبه الأحرف الكبيرةA تختلف عن الصغيرة a )وعندما تنسى كيف يكتب اكتب جزءاً منه ثم اضغط TAB
ولكي تعرف كل البدائل اضغط TAB مرتين
وعندما تنتهي اضغط إدخال [ENTER]
مثلا بدلا من كتابة cd /home/ali/ يكفي أن تكتب cd /h [TAB]a[TAB] وإذا كان هناك ali و ahmad cd /h [TAB]a[TAB][TAB] سيظهر ali ahmad اضغط l[TAB] ليصبح لديه al[TAB] ونكون انتهينا
هذا جدول يبين الأوامر الأساسية ، ما هو داخل أقواس مربعة [ ] يمكنك عدم كتابته ، و ... تعني التكرار ، | تعني اكتب هذا أو هذا وحتى لا تخلط ما هو الشيء الحرفي وما هو الذي تعوض مكانه معناه وضعنا هذه الأخيرة بخط مائل، الأمر ليس معقدا كما يبدو انتظر حتى ترى الأمثلة وتطبقها عمليا
cd [DIR] |
للدخول إلى مجلد(دليل) DIR
وإذا كتبت cd لوحدها سوف تذهب إلى الدليل البيت
وللعودة إلى الدليل الذي كنت فيه
اولا cd -
وللذهاب للدليل الأب للدليل الذي أنت فيه
cd ..
وللذهب إلى الدليل الأصل/الجذر الذي تتفرع منه الأدلة الأخرى
cd /
|
pwd | عرض المسار إلى الدليل الحالي |
ls [-lhFa] [PATTERN] | عرض الملفات التي تتفق مع PATTERN ، استخدم l للعرض المفصل و h لإظهار الحجم بطريقة مفهومة أكثر و F لوضع علامة تبين نوع الملف بعد اسمه و a لعرض جميع الملفات حتى التي تبدأ بنقطة وهناك الكثير |
clear | مسخ الشاشة |
echo ["STRING"] printf "STRING1" ["STRING2"] | الأولى تطبع النص إلى جهاز الإخراج القياسي ، الثانية بطريقة لغة السي |
whatis [COMMMAND | FILE] man [COMMMAND | FILE] info [COMMMAND | FILE] | عرض مساعدة عن الأمر أو الملف الفلاني مثلا man ls أو info grub (للخروج من البرنامج اضغط q) أو whatis gedit الذي يعرض معلومات من سطر واحد يتم توليدها بواسطة mkwhatis ويمكن البحث فيها بواسطة apropos |
less [FILE] more [FILE] | عرض ملف على الشاشة استخدم الأسهم و PageUP PageDown للحركة (للخروج من البرنامج اضغط q) |
cat [FILE]... | عرض ملف (ومجموعة ملفات) على الشاشة بطريقة غير تفاعلية (الوصف الحقيقي للأمر هو أنه يجمع هذه الملفات ثم يرسلها إلى جهاز الإخراج القياسي ) |
dd [if=FILE1] [of=FILE2] [bs=N] [count=M] | إرسال M وحدة كل منها بحجم N بايت (يمكنك أن تضع k و M للكيلو والميغا) الأول من الملف الأول (تعني if - input file) إلى الثاني (نعم output file) إذا لم تحدد إي من الملفين فإنه الدخل/الخرج القياسي. تستخدم غالياً مع ملفات الأجهزة. |
cp [-aRvi] SOURCE... DIST mv [-aRvi] SOURCE... DIST rm [-Rv] SOURCE... DIST |
نسخ ، نقل(نسخ وحذف الأصل أو تغيير الاسم) وحذف على الترتيب.
من المصدر(المصادر) إلى الهدف والخيارات هي : i السؤال "هل أنت متأكد؟" قبل الحذف v اكتب ماذا تفعل خطوة خطوة a الحفاظ على نوع الملف R نقل الأدلة الفرعية |
mkdir DIR... rmdir DIR... | عمل دليل جديد ، وحذف دليل فارغ على الترتيب. |
ln [-sf] FILE_OR_DIR LINK sln FILE_OR_DIR LINK |
عمل رابط/وصلة تشير إلى الملف الأول
وتتصرف مثلها تماماً ( أن يكون لديك نسختين من نفس الملف
في أماكن مختلفة إن شئت
دون أن تأخذ حيزاً على القرص) ، الخيارات : s أن يكون الرابط soft أي يظهر عند عمل ls -l f اجبار احلال الرابط الجديد مكان القديم. البرنامج الثاني static يعمل حتى لو كانت وصلات المكتبات غير صحيحة. |
su [USER] | التحول إلى مستخدم آخر إذا لم يذكر من هو يعتبر الجذر (طبعا بعد أن يقدم كلمة السر له) |
whoami | تخبرك من أنت !! أي المستخدم الذي تمثله الآن |
file [PATTERN] | عرض الملفات وما هو نوعها بطريقة مفهومة (اعتمادا على تركيبها ليس الإمتداد) مثلا يقول لك أن هذه English text file وذلك ASCII C text file وذلك MPEG video file ... |
df [-hbkmg] [PARTITION | DIR] du [-hbkmg] [FILE_OR_DIR] | عرض المساحة المتبقية،والمساحة التي يشغلها دليل معين b بالبايت ، k بالكيلوبايت ، m بالميغا ، g بالغيغا ، h بطريقة مفهومة |
free | عرض المساحة المتبقية من الذاكرة والذاكرة الإفتراضية |
COMMAND1 ; COMMAND2 [ ; COMMAND3]... | تنفيذ الأمر الأول ثم نفذ الثاني وهكذا |
COMMAND1 && COMMAND2 [ && COMMAND3]... | تنفيذ الأمر الأول فإذا نجح نفذ الثاني وهكذا |
COMMAND1 || COMMAND2 [ || COMMAND3]... | تنفيذ الأمر الأول فإذا لم ينجح نفذ الثاني وهكذا |
COMMAND1 & | نفذ الأمر في الخلفية (لا ينتظر حتى ينتهي ويمكنك من تشغيل أوامر أخرى ) |
COMMAND1 | COMMAND2 | تمرير مخرجات البرنامج الأول إلى الثاني ، تسمى هذه التقنية بالأنبوب (pipe) |
`COMMAND` | ناتج(مخرجات) تنفيذ هذه البرنامج ملاحظة ` تحصل ليها من المفتاح قرب الواحد الذي يحمل حرف الذال والعلامة ~ وهي ليست علامة اقتباس مفردة " بدون shift |
$VARIABLE | قيمة المتغير ويسمى هذا تعويض |
VARIABLE=VALUE | وضع المتغير على القيمة (لا يوجد مسافة) |
COMMAND [ < FILE1 ] [ > FILE2 ] | استخدام الملف الأول كجهاز ادخال افتراضي والملف الثاني كجهاز إخراج افتراضي |
COMMAND [ < FILE1 ] [ << "STRING" ] | استخدام الملف الأول كجهاز ادخال افتراضي من أوله وحتى الحصول على النص "STRING" |
COMMAND [ >> FILE ] | إضافة مخراجات الأمر إلى نهاية الملف |
COMMAND [ 1> FILE1 ] [ 2> FILE2 ] | ارسال المخرجات إلى الملف الأول وإرسال رسائل الخطأ إلى الملف الثاني |
ولتسهل عليك حفظ الأوامر اعرف أصل أسماءها
تكون خيارات معظم الأدوات على شكل -- ثم الخيار مثلا
--force --verbos
وللإختصار نضع - واحدة ثم الخيار المختصر
-f -v
ويجوز أيضا كتابة
-fv
بدون مسافة بينهما ، أي أن
[-abcdef]
تعني -a -b -c -d -e -f
.
وهكذا.
كما في الجدول يمكنك طلب مساعدة عن برنامج معين مثلا bc بكتابة
man bc
التي تعرض كتيب الاستخدام أو بكتابة
info bc
التي تعرض صفحة المعلومات
الفرق بين كتيب الإستعمال man و صفحة المعلومات info
أن الأولى أقل تفصيلاً واختصاراً وأكثر استعمالاً إلا أن
الثانية مفصلة أكثر ومتشعبة أكثر (تحرك بالأسهم ثم اضغط إدخال ENTER
على موضوع معين لعرضه للتالي n وللسابق p ولدرجة أعلى u)
للخروج من البرنامجان استخدم q وللبحث / أو ؟.
توفر كتيبات man معلومات عن المواضيع التالية(بالترتيب)
/dev
أي devices
/etc/lilo.conf
أي File formats
هذه بعض الأمثلة ععندما تشاهد # في مجموعة من الأوامر فهي وما بعدها إلى نهاية السطر لا تنفذ ، وللتمييز بينها وبين التي يكتبها الجهاز تلقائيا قبل الأمر (المُحث) عندما تكون الجذر وضعنا ما تكتبه أنت بخط غامق وما يظهر على الشاشة بخط عادي
bash$ cd ~ bash$ pwd /home/ali bash$ whoami ali bash$ echo "Hello World" Hello World bash$ echo "any thing after hash" # is a comment,it has no effect any thing after hash bash$ echo "Hello `whoami`" # note ` not '(single quote) Hello ali bash$ su password:******** bash# whoami root bash# exit bash$ whoami ali bash$ ls -F Projects/ readme.txt backround.jpeg test.sh* bash$ ls -l total 4 drwxr-xr-x 2 ali users 4024 May 28 19:20 Projects -rw-r--r-- 1 ali users 19106 May 28 19:20 readme.txt -rw-r--r-- 1 ali users 1224 May 28 19:20 backgrond.jpeg -rwxr-xr-x 1 ali users 1024 May 28 19:20 test.sh bash$ echo "ali is the owner of the files > and they belong to users group" notice that ali is the owner of the files and they belong to users group bash$ gedit readme.txt # يجب أن تغلق المحرر لتعود لكتابة الأوامر bash$ gedit readme.txt & # & تستطيع الكتابة دون إغلاقه بسبب bash$ mcedit readme.txt # بدون & لأنه غير رسومي ، F10 للخروج اكتب شيئا يملئ صفحتين في هذا الملف وخزن bash$ less readme.txt # press q to quit, / to search bash$ ls -l /usr/lib | less # list file in pager bash$ man file # كما في less bash$ file * # انظر النتيجة بنفسك bash$ mc
عند كتابة ls -l
فإن القائمة تكون مفصلة وتحتوي أولا على خصائص الملف
مثلا d للدليل/المجلد directory و l للوصلة link و أما c فتعني أن الملف عبارة عن جهاز حرفي charecter device
أي ترسل له المعلومات حرفاً تلو الآخر مثل لوحة المفاتيح
أما b للإشارة إلى أن الملف جهاز
block device مثل الأقراص
بعد الحرف الأول تأتي الأذونات مثلا rwxr-xr-x
للمالك ثم للمجموعة ثم للآخرين قراءة و كتابة وتنفيذ على الترتيب
ثم رقم يكون واحد للملف العادي ويكون عدد الأدلة الفرعية
للمجلدات (دون الوصلات وتجمع له 2 وهما الدليلان ./ و ../
)
ثم اسم المالك ثم المجموعة ثم الحجم ثم الوقت ثم اسم الملف
إذا كانت مخرجات أمر أكثر من صفحة
يمكنك العودة إلى الصفات التي فاتتك باستعمال
SHIFT+PGUP/SHIFT+PGDN
ويمكنك قص ونسخ الأوامر من الشاشة وذلك بتعليم (تحديد) النص
(بجر الفأرة من بداية الكلمة إلى نهايتها)
ثم النقر بالزر الأوسطر (الزرين معاً إذا لم يكن موجوداً)أو بالزر الأيمن في بعض البرامج
فينتقل النص إلى موقع المؤشر
لإيقاف عمل برنامج اضغط على CTRL+c (تكتب أحيانا Cc للإختصار)
لإيقاف الدخل اضغط على CTRL+d (وتعني نهاية الملف EOF)
وإذا كنت تتسائل لماذا لا يوجد خيار ل ls ليعرض صفحة صفحة
فذلك لأنك تستطيع استعمال CTRL+PageUp / CTRL+PageDown
للصعود لأعلى والنزول في أي وقت في أي برنامج
أو يمكنك ارسال مخرجات الأمر ls إلى less أو more باستخدام الأنبوب "|"
كما في المثال أعلاه.مستخدمي سطر الأوامر يحبون برنامج
mc (أي midnight commander) وهو شبيه ب nc (أي norton commander)
جربه وبرنامج mcedit جزء منه.
# تصحيح الأخطاء الإملائية في أمر تغير الدليل لمرة واحدة [/@host]$ cd /hpme/ali # بدلا من cd /home/ali cd: /hpme/ali not found [/@host]$ shopt -s cdspell [/@host]$ cd /hpme/ali # بدلا من cd /home/ali /home/ali [/home/ali@host]$ cd /user/ben /usr/bin [/usr/bin@host]$
هذا الأمر عليك طباعته كل مرة تريد تشغيل التدقيق الإملائي !!
كيف نجعل هذا الأمر ينفذ تلقائيا ؟ اعلم أنه يتم تنفيذ
/etc/profile
أو ~/.bashrc
تلقائيا فإذا كنت تريد إضافته لكل المستخدمين فعليك بالملف /etc/profile
أما إذا كنت تريده لك وحدك فليك بالملف .bashrc
في بيتك (تذكر أن ~ تعني الدليل البيت وهو يختلف من مستخدم إلى آخر) هذه الطريقة
# تصحيح الأخطاء الإملائية في أمر تغيير الدليل # تلقائيا ولك وحدك دون غيرك [~/@host]$ echo "shopt -s cdspell" >> .bashrc # تصحيح الأخطاء الإملائية في أمر تغيير الدليل # تلقائيا ولكل المستخدمين [~/@host]$ su root password:****** [/home/ahmad@host]# echo "shopt -s cdspell" >> /etc/profile [/home/ahmad@host]# exit [~/@host]$
لاحظ بدلا من تشغيل محرر نصوص وانتظار تحميله ثم فتح أحد الملفين المذكورين وإضافة السطر إلى آخره ثم تخزين الملف يااااه !! فقط كتبنا echo ثم الأمر وهي تطبع الأمر إلى الخرج ثم حولنا الخرج من الشاشة إلى نهاية الملف بإشارة الإتجاه المزدوجة >> فقط !! (لاحظ لو وضعناها مفردة لمحيت محتويات الملف السابقة)
اكتب الأمر اللازم لعمل ملف يحتوي على قائمة محتويات الدليل /usr/bin
.
# كيف تعمل ملف جديد بدون فتح محرر نصوص !! [~/@host]$ cat > test2.txt << HANGA Start Typing You can have more that one line To End the Typing, Type the Magic Word HANGA [~/@host]$ less test2.txt # cat يرسل كل الملفات التي تعطيها إياه إن لم توجد يأخذ الدخل القياسي -لوحة المفاتيح # وقد حددنا كلمة معينة لتكون إشارة إنهاء الإدخال وهي التي بعد << # وحددنا جهاز الإخراج ليكون الملف test2.txt
الأوامر التي ننفذها يتم تشغيلها من أدلة مختلفة منها غالبا الدليل الحالي ، وقد يكون برنامجان لهما نفس الاسم كيف تعرف أيها سينفذ؟ اكتب which COMMAND سيكتب لك المسار للأمر فإذا كنت تريد تنفيذ واحد من مسار آخر اكتب المسار قبل الأمر، أما كيف تحدد الأدلة التي يبحث فيها عن برامج فهو متغير البيئة PATH
# مسار البرنامج [~/@host]$ which cat /bin/cat [~/@host]$ echo "$PATH" /bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin:./ # لإضافة دليل إلى آخر (أقل أولوية) القائمة [~/@host]$ PATH="$PATH:/MY_DIR" [~/@host]$ echo "$PATH" /bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin:./:/MY_DIR # لإضافة دليل إلى أول (أعلى أولوية) القائمة [~/@host]$ PATH="/MY_FOLDER:$PATH" [~/@host]$ echo "$PATH" /MY_FOLDER:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin:./:/MY_DIR # هذا التعديل مؤقت ويزول عند إعادة التشغيل # لاحظ معظم التوزيعات تضع الدليل الحالي /. في آخر الألويات ############### # يجوز وضع التعويض في أي مكان [~/@host]$ echo $EDITOR vim [~/@host]$ $EDITOR # تشغيل البرنامج المحدد بالمتغير
لاحظ عندما تحدثنا عن أمر ls فإننا قلنا أنه يأخذ نموذج PATTERN وليس اسم ملف أو مجلد وهكذا معظم الأوامر الأخرى (حتى لو لم نذكر ذلك لأن bash هو من يقوم بالتعويض) ومعنى ذلك أنه يمكن أن نعطيه نموذج عن الملفات التي نريد فيقوم بالبحث عن ملفات تطابق النموذج الذي قدمناه ، وذلك برموز خاصة تترجم بالمعاني المبينة في الجدول المرافق وأي شيء آخر يترجم حرفيا تسمى هذه wild cards
* | أي شيء من أي طول (بما في ذلك لا شيء) | *term* | كل شيء فيه term |
? | رمز واحد أو لا شيء | S??autofs | يبدأ ب S ثم رمزان على الأكثر ثم autofs |
[SET] | أي رمز من عناصر المجموعة | [a-zA-z][0-9] | حرف ثم رقم من منزلة واحدة |
{PAT1 [ ,PAT2]...} | النموذج الأول أو الثاني ... | *.{jpeg,png} | أي شيء ينتهي ب . ثم jpeg أو png |
أصبح الآن هناك رموز لها معنى غير ما هي عليه
مثلا ؟ ليست علامة سؤال وإنما تمثل أي حرف
وأيضا $VAR
تعني قيمة المتغير VAR
فإذا أردنا المعنى الحرفي لشيء وليس المعنى المجازي
مثلا فتح ملف باسم
Why?
ونقصد هنا بعلامة السؤال علامة السؤال
وليس أي حرف
إذاً كيف نخبره بذلك
يتم ذلك بطريقة تسمى escape وذلك بإضافة \ قبل الرمز الذي تريد
مثلا
Why\?
ستعني الملف الذي نريد
مثلا إذا كنت تريد الذهاب إلى مجلد
Mohammad Ali
فإن كتابة
cd Mohammad Ali
لن تنجح لأن cd لا تأخذ سوى معامل واحد
والمسافة بين محمد ولي ستعتبر فاصل بين المعاملات
لذا فالصواب أن تقول
cd Mohammad\ Ali
هنا المسافة ستعني مسافة
وهناك طريقة أخرى وهي استعمال علامة التنصيص (الإقتباس) وهي
نوعان الأول هو التنصيص القوي (علامة تنصيص مفردة) وهي تمثل ما بداخلها حرفيا
أما الثانية فهي أضعف (مزدوجة) فهي تسمح بتعويض قيمة
المتغير و تقوم ب escape
لذا يمكنك استعمال التنصيص الضعيف مثلا
cd "Mohammad Ali"
ولكن إذا كان اسم المجلد $Ali
فإنه لن ينفع لأنه يقوم بالتعويض مكان Ali بقيمة المتغير
عندها نستخدم escape أو التنصيص المفرد القوي
cd '$Ali'
لا تسمي هكذا أسماء غريبة بها رموز مثل $?#%\ أو مسافة لأن هذا يربكك وأنت تطبع الأوامر. ولا تخلط بين علامة التنصيص المفردة ' وعلامة تنفيذ برنامج ` وأخذ الخرج الموجودة عند عرف الذال
إذا أردت طباعة أمر وأردت أكثر من سطر اكتب عندما تمل من السطر الحالي \ ثم اضغط ادخال تلاحظ أن لم ينفذ شيئا اطبع بعض الأوامر ثم \ وادخال وهكذا إلى أخر سطر لا تضع فيه \ عندها سينفذ الأوامر
bash$ ls)/usr/bin/ \ > /usr/sbin/ \ > /usr/doc/ | \ > less # نفس الأمر التالي bash$ ls /usr/bin/ /usr/sbin/ /usr/doc/ | less
<< السابق | كتاب لينكس الشامل | التالي >> |