لينكس بدون واجهه

الأربعاء-02-2009

بالامس لم يكن لى اى نية لأى عمل بسبب ان المشروع الاول توقف بسبب مشكله غبيبة فى Framework  الذى كنت اعمل عليه وبسبب نقص المعرفة بأحدى صيغ الملفات لفتحها التى اوقفت المشروع الثانى ونظرا لتوقف الانترنت لدى لسبب غير معروف على الاطلاق , توقف كل شئ

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

الدروس سوف تكون بطريقة تزايدية من مستوى المبتدئين الى المحترفين إن شاء الله

وان شاء الله سوف اجهز لدروس ايضا فى cakePHP ولو انى غالبا سوف اتركها لأتوجه الى Symfony

قد تواجهك مشكله فى القراءه بسبب مشكله العربي من اليمين للشمال فى قراءة بعض الاكواد ولكنى سوف احاول اصلاحها فور معرفة كيفية ذلك على ورد برس ؟!

————————————————————

بسم الله الرحمن الرحيم
//ENCODING UTF-8

+++++++++++++++++++++++++++++++++++++++++
+        لينكس بدون واجهه               +
+++++++++++++++++++++++++++++++++++++++++

الكاتب : أحمد محمد عربي
الرخصة : Creative Commons

———————————————-

لمن هذا الكتاب ؟
هذا الكتاب لا ينصح به لمن يخطو خطواته الاولى فى الجنو لينكس بسبب عدام استعدادهم للتعامل مع سطر الأوامر بسبب السمعة السيئة التى تركها نظام MS-DOS لدى اغلب المستخدمين عن سطر الاوامر عموما
وايضا تحتاج الى المام ولو قليل عن نظام الأوذونات (permissions)
ولكن ينصح به لمن يود ان يتعلم قليلا عن التجول فى عالم الجنو لينكس وأدواته والنصية والتى تبرز فعلا مدى قوة وبراعة تنظيم جنو لينكس

وسوف أحاول إستعارض اغلب الأوامر الهامه وايضا بعض الخدع الخفية على مستخدمى اللينكس

———————————————–

دليل القراءة:
-الاوامر تجدها بين قوسبن إسمهما CODE مثل


– اى أمر تجد أمامه علامة هاش – # – هو أمر يحتاج الى صلاحيات المستخدم رووت
– اى امر تجد امامه علامة الدولار – $ – هو أمر عادى ويمكنك تنفيذه وانت مستخدم عادى
-اى سطر موجود بيت علامتى CODE وليس مسبوقا بعلامة $ او # هو عبارة عن نتيجة الامر
– كلمة “إحذر” تعنى أن هذا الامر قد يسبب توقف نظامك عن العمل و يطلب منك ان تكون حذر جدا أثناء تنفيذه
– الكاتب غير مسئول عن اى سوء استخدام من قبل المستخدمين , فأى نصيحة أو أمر تم تجربته مرارا وتكرارا للتأكد من صحته
– أغلب الاوامر تم تجربتها تحت نظام “فيدورا 10” , وهذا يعنى أنك قد تجد بعض الاختلافات البسيطه عن نظامك وسوف أحاول جاهدا لكى أشير ايضا الى التغييرات التى سوف تجدها فى نظام “أوبنتو” , لأنه أشهر الانظمة استخداما

———————————————-

++جدول المجتويات++
-مقدمة
-الباش
-المتغيرات
-الأوامر

——————————————–

============ مقدمة ===========

عالم جنو لينكس رأئع جدا وجميل وليس صيحيح ان أوء جزء فيه هو سطر الاوامر بل على العكس فإن مستخدم جنو لينكس لن يشعر بأهمية النظام ولا حتى بالإختلاف الفعلى عن الانظمة الاخرى حتى يبدأ بتذوق سطر الاوامر
وهو الشئ الوحيد الذى سوف يثبت لك أن أنظمة تشغيل جنو لينكس جميعا لا تختلف عن بعضها اختلاف جوهرى ولكن الاختلافات تكون أحياننا كثيره فى أماكن ملفات الضبط والتعديل – configuration files- وليس فى البرامج نفسها او فى طريقة تصرفها هذا بالاضافة الى بعض الإضافات التى يضيفها مطورى التوزيعات أنفسهم فمثلا الانظمة المبنية على ريدهات – ومنها فيدورا تشتهر بـالأمان العالى متمثلا فى الجدار النارى الذى يكون مفعل إفتراضيا وايضا اداة SELinux والى توفر نحكم بدرجه كبيرة جدا – الى درجه قد تجعلك تغلقه نهائيا – وتوزيعة سوزى تشتهر بأداة Yast الشهيرة والتى تعتبر كما لو كانت نظام داخل النظام ولكن بالطبع هناك بعض التوزيعات المبنية على جنو لينكس مخصصة لأغراض معينة لبعضض المتخصصين مثلا فى مجال الامان او إدارة المصانع وقد تجدها غريبة نوعا ما ولكن فى أغلب الاحيان سوف تجد أنها مازالت تحمل رائحة جنو لينكس
وسوف نحاول معا ان نضع انفسنا فى الداخل لتعرف الفرق بين ركوب الدراجه وركوب الطائرة .

========= الباش ==============
هو سطر الاوامر الذى تكتب بداخله وهو فى الحقيقة يوصل أوامرك التى تريد تنفيذها الى الكرنل ( قلب النظام المحرك ) ويقوم الكرنل بالتعامل معها وماهو إلا برنامج ايضا مثل اى برنامج اخر ولكن هذا البرنامج يعتبر مميز لأنه ليس اداة تنفذ أمر معين وينتهى دورها ولكن هو وسيلة تواصل مع باقى الادوات وبمكنك التفكير فيه على اساس أنه وكيل اعمالك , فأنت مثلا تطلب منه مسح ملف معين عن طريقة كتابة صيغة ذلك الامر وهو يقوم بتنفيذ الامر لك
ولكنه ليس هو البرنامج الوحيد الذى يمكنك من عمل هذا , ولكن هناك برامج أخرى او يمكنك ان تطلق عليها الاسم الصيحيح لتصيف تلك البرامج , شل Shell
مثل C Shell و TCH و Zsh و غيرها
وإذا كنت استوعبت تلك الفقرة الاسابقة فسوف تعلم أن الاختلاف بينها هو طريقة تواصلها معك و ليس نتيجة الامر او صيغة الامر الذى سوف تنفذة
هذا بالاضافة الى ان كل واحد من الشل له أحياننات بعض الاوامر التى تكون داخل الشل نفسه وليست برامج موجوده فعليا على جهازك يمكنك الوصول اليها وتسمى أوامر مدمجة Built-in commands وايضا مايسمى بالمتغيرات البيئية او Environement Commands
وسوف نتعامل مع الباش فقط , لانه الاشهر وهو الذى سوف تجدة يعمل افتراضيا على اغلب التوزيعات
والباش يمكنه تلقى الاوامر منك أمر بطريقة مباشرة او ان تقوم بتحديد ملف يحتوى على كل الاوامر دفعه واحده ليقوم بتفيذها على التوالى الامر الاول ثم الثانى وهكذا
كيفية فتح الباش ؟
بمجرد فتح سطر الاوامر أنت داخل الباش , مبروك !!!
ولكن الباش ليس الامر سهل له كما تظن فهو يقوم بتنفيذ بعض الاشياء قبل ان يكون جاهزا لتلقى أوامرك فهو يقوم بتنفيذ الاوامر فى الملفات التالية
/etc/profile
/etc/bashrc
~/.bash_profile
~/.bashrc
وهى ملفات تقوم بتحديد بعض الاشياء الخاصة بالمستخدم الحالى بالاضافة الى تحديد المتغيرات البيئية الخاصة بكل مستخدم
ولاحظ أن الحرف  – ~ – يتم استبداله بالمسار الخاص بالمجلد الخاص بك او home directory او اختصارا الـ home
وبعد تنفيذ الملفات بنفس الترتيب – الترتيب هام جدا – يظهر لك الؤشر وهو يومض منتظرا أوامرك
[CODE]
[ahmed@wizard-box ~]$ |
[/CODE]
و يمكنك تغيير الرسالة التى تظهر لك – هى تحتوى على اسم المستخدم الذى يعمل داخل الباش حاليا وإسم جهازك و المسار الحالى –  بنفسك عن طريق تغيير قيمة المتغير PS1

********المتغيرات *********
المتغيرات او Variables ليست أكثر من سجل او مخزن تخزف فى داخله قيمة معينة ووحيدة وقد تكون تلك القيمة حرف او كلمة او عدة كلمات او رقم
وهناك بعض المتغيرات التى يقوم الباش بصنعها مباشرة بمجرد فتحه وتسمى بالمتغيرات البيئية – ليس لها علاقة بجمعيات حماية البئية ولكن كلمة بيئية تعنى بيئة العمل وهى يمثلها الباش هنا – ولكل متغير وظيقة تظهر تلك الوظيفة من خلال قيمة المتغير
مثلا المتغير USER يحمل إسم المستخدم المتواجد دخل الباش حاليا
[CODE]
[ahmed@wizard-box]$ echo $USER
ahmed
[/CODE]
من المثال تلاحظ أننا استخدمنا الامر echo لعرض محتويات متغير , وأن اسم المتغير يكون مسبوقا بعلامة الدولار $ , مثل USER$

يمكنك عمل متغير بنفسك وبطريقة سهله جدا وبدون تعقيدات لغات البرمجة فقط اكتب اسم المتغير متبوعا بعلامة = ومتبوعة بقيمة المتغير مثل :
[CODE]
[ahmed@wizard-box]$ ME=ahmed
[ahmed@wizard-box]$ echo $ME
ahmed
[/CODE]
ويمكنك تغيير القيمة مرة أخرى بنفس الطريقة , سهل جدا ولا مشكله فى ذلك

ولعلك تسأل ما هى اهمية وجود المتغيرات هنا الاتكفى الام لغات البرمجة ؟
فى الحقيقة اغلب برامج اللينكس غالبا تحب التواصل مع بعضها عن طريق المتغيرات و هى ايضا التى توضح طريقة سير العمل بالنسبة للبرامج الاخرى
فمثلا المتغير PATH وهو متغير بيئى يحتوى على مسار البحث فى البرامج التنفيذية , فعندما أقوم بكتابة أمر مثل
[CODE]
[ahmed@wizard-box]$ cat /proc/cpuinfo
[/CODE]
يقوم الباش بقراة قيمة المتغير PATH ويقوم بالبحث عن برنامج يسمى cat فى المسارات التى قرأها من المتغير PATH وفى حالة وجده يقوم بتنفيذة ولكن فى حالة لم يجده تظهر لك الرسالة “command not found” ولذلك فإن الامر cat هو نفسه الامر bin/cat/ ولكن فى الطريقة الاولى تركت الباش يبحث عن مكان الامر بنفسه وفى الثانية حددت له مكن الامر بنفسى

ويمكنك فى المثال التالى رؤية المسارات التى يتم البحث فيها عندى :
[CODE]
[ahmed@wizard-box]$ echo $PATH
/usr/lib64/qt-3.3/bin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/real/RealPlayer:/home/ahmed/bin:/usr/local/real/RealPlayer
[/CODE]
ولعل اشهر الخدع واكثرها اثارة للجنون المشاكل معا خدعة مسح المسار , حيث ان المتغير PATH غير محمى يمكن لاى شخص اخترق جهازك مثلا ان يقوم بمسح قيمة المتغير PATH وطبعا عندما تحاول تنفيذ أمر معين حتى لو كان ابسط الاوامر يجد الباش ان PATH لا يحتوى على اى مسارات وبالتالى تجن انت وتقول كيف هذا؟ إنه ابسط امر , لابد ان اللينكس جن جنونه ؟؟
والخدعة كالتالى
[CODE]
[ahmed@wizard-box]$ PATh=”
[ahmed@wizard-box]$ cat /proc/cpuinfo
bash: cat: No such file or directory
[/CODE]

هناك ايضا المتغير UID والذى يحتوى على رقم المستخدم الخالص بك وهو غالبا ما يكون 1000 – المستخدم رووت رقمه 0 (صفر) – وهو متغير محمى read-only ولا يمكنك تغييره وهو الذى غالبا ماتستخدمه البرامج التى تحتاج الى صلاحيات عالية للتأكد من أنك تملك هذة الصلاحيات
[CODE]
[ahmed@wizard-box]$ UID=0
bash: UID: readonly variable
[/CODE]

ولكن فى حالة ما إذا حاولت تسجيل قيمة متغير يحتوى على مسافات يجب عليك وضعه بين علامتى التنصيص المفرده- ‘ahmed’ –  او المزدوجه – “ahmed” – ذلك لأن الباش يعتبر أن المسافة هى التى تفصل المتغير عن الامر الذى سوف يتم تنفيذه بعد الامر مباشرة ولكن ما الفرق بينهما ؟
لنفرض أنك تود وضع قيمة متغير داخل قيمة متغير , لا حظ المثال التالى
[CODE]
[ahmed@wizard-box]$ MSG=’Welcome to GNU Linux Mr $USER’
[ahmed@wizard-box]$ echo $MSG
Welcome to the sweet shells Mr $USER

[ahmed@wizard-box]$ MSG=”Welcome to GNU Linux Mr $USER”
[ahmed@wizard-box]$ echo $MSG
Welcome to the sweet shells Mr ahmed
[/CODE]
فى الحالة علامة التنصيص المفرده تم تخزين كلمة USER$ كما هى , ولكن فى الحالة الثانية تم اعتبارها متغير وتم استبدالة بقيمته ولا حظ ايضا أنك إذا حاولت وضع قيمة تحتوى على علامة تنصيص  مزدوجه داخل علاتى التنصيص المزدوجه لابد من من تهريبها escape بأن تجعلها مسبوقه بعلامة الشارطه المائلة الى الخلف backward slash مثل
[CODE]
[ahmed@wizard-box]$ MSG=”My Name is \”$USER\” , Right ?”
[ahmed@wizard-box]$ echo $MSG
My Name is “ahmed” , Right ?
[/CODE]

ويمكنك معرفة المتغيرات البيئية الموجوده حاليا أثناء وجودك داخل الباش باستخدام الامر env او set ومن محتويات كل متغير يمكنك تخمين وظيفته
[CODE]
[ahmed@wizard-box]$ env
ORBIT_SOCKETDIR=/tmp/orbit-ahmed
HOSTNAME=wizard-box.localdomain
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000
XDG_SESSION_COOKIE=c77ecf3d22b99699320e0d90497c639f-1234292970.200803-870335569
GTK_RC_FILES=/etc/gtk/gtkrc:/home/ahmed/.gtkrc-1.2-gnome2
WINDOWID=69230040
QTDIR=/usr/lib64/qt-3.3
QTINC=/usr/lib64/qt-3.3/include
USER=ahmed
LIBGL_DRIVERS_PATH=/usr/lib64/dri:/usr/lib/dri
GNOME_KEYRING_SOCKET=/tmp/keyring-1EUEnm/socket
SSH_AUTH_SOCK=/tmp/keyring-1EUEnm/ssh
SESSION_MANAGER=local/unix:@/tmp/.ICE-unix/2705,unix/unix:/tmp/.ICE-unix/2705
USERNAME=ahmed
MAIL=/var/spool/mail/ahmed
PATH=/usr/lib64/qt-3.3/bin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/real/RealPlayer:/home/ahmed/bin:/usr/local/real/RealPlayer
DESKTOP_SESSION=gnome
INPUTRC=/etc/inputrc
PWD=/home/ahmed
XMODIFIERS=@im=imsettings
LANG=en_US.UTF-8
GNOME_KEYRING_PID=2699
GDM_LANG=en_US.UTF-8
GDMSESSION=gnome
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
SHLVL=2
HOME=/home/ahmed
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
LOGNAME=ahmed
QTLIB=/usr/lib64/qt-3.3/lib
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-3fZsvcXIH8,guid=a8925152e6d12fc7ca8807934991d0ea
LESSOPEN=|/usr/bin/lesspipe.sh %s
DISPLAY=:0.0
G_BROKEN_FILENAMES=1
COLORTERM=gnome-terminal
XAUTHORITY=/var/run/gdm/auth-for-ahmed-3t6toU/database
_=/usr/bin/env

[/CODE]

******** الأوامر ********
الأوامر هى عبارة عن برامج يمكنك من اداء وظائف معينة فكل أمر تقوم بتنفذة ما هو إلا برنامج يتم استدعائه لتنفيذ تلك الوظيفة
ولكن هناك إثتثناء من تلك القاعدة وهى الاوامر الداخلية built-in commands وهو أوامر موجوده داخل الباش نفسه ولن تجد لها ملفات تنفيذية  مثل الامر cp و الامر ،kill , ويمكنك تنفيذ الامر ‘man cd’ لمعرفة ذلك بنفسك
واغلب الأوامر تحتاج الى arguments او متغيرات يتم ادخالها الى الامر بكتابة الامر متبوعا بإسم المتغير و قيمة ذلك المتغير مباشرة وأحياننا قد يكون ذلك المتغير مباشر وليس له إسم مثل الامر cat الى اشرنا اليه مسبقا وقد يكون يحتاج الى إسم مثل
[CODE]
[ahmed@wizard-box]$ wc /etc/passwd
46   70 2287 /etc/passwd

[ahmed@wizard-box]$ wc -l /etc/passwd
46 /etc/passwd
[CODE]
فالامر يتسخدم لحساب عدد الاسطر والحروف والارقام لملف نصى معين
ولكن فى المثال الاول الامر لم يكن يحتاج الى اى شئ , سوى إسم الملف ولكن اذا قمت باضافة argument اخر سوف يتغير الخرج او وظيفة ذلك البرنامج
ففى الحالة الاولى نلاحظ انه قام بكتابة عدد الحروف والكلمات والاسطر ولكن فى الحالة التانية بعد اضافة l- قام بعرض عدد الاسطر فقط ولاحظ انه كان مسبوقا بعلامة شارطه متوسطة dash –
هناك بعض البرامج التى تستخدم تلك arguments لتحديد قيم اخرى فكتابة الـ argument وحده غير كاف , ويمكنك متابعة باقى البرامج لمعرفة القصد من وراء ذلك

الامر man :

وسوف نمر على بعض الاوامر فى الطريق
الامر

Advertisements

اترك رد

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s

%d مدونون معجبون بهذه: