التعامل مع الملفات
دايما كده كل نظام تشغيل ليه ملفات معينة كده معروفة ومحفوظة في الذهن ... طبعا ده لازم عشان الملفات دية بيبقى ليه وظايف حيوية جدا
خليك فاكر إنه سهل جدا إني احنا نعمل قايمة بكل الملفات المشهورة في اللينكس وهتحس بالخنقة شوية ... عشان هتلاقى تطبيقات مش عارف بتعمل ايه اصلا ... وبعدين حد يقولك اهو الملف الفلاني بقى بيعرف التطبيق ده وبيخليه يعمل كذا وبيساعدك بحيث توصل لكذا ؟!!
طبعا حاجة تخنق ...
يا عم قصر هو انت كل ده كنت فاكرني متخنقتش .. ده انت فعلا طيب
طبعا ولا كأني سمعت حاجة .... انا هبدأ معاك دلوقتي في العمليات اﻷساسية على الملفات من حذف وتعديل وبحث وعمليات تانية كده مهمة شوييتين
أولا :خصائص الملف
اظن زهقت من كتر الكلام عن خصائص الملفات وعرضها عن طريق اﻷمر ls ... بس مفيش قلق المرة دية ... هنحاول نأكد على كام حاجة سريعا مش اكتر
لاحظت طبعا الوان كتيرة وانت بتستخدم اﻷمر ده ... لو عايز تعرف معاني اﻷلوان دية وتخص آني نوع من الملفات عليك بالملف etc/DIR_COLORS/ ... هتلاقى فيه تفصيل كل اﻷلوان دية
المتصفح more ... هتحبه اكتر من المتصفح less على اساس إنه مبيحتاجش غير زرار واحد بس هو المسطرة للتصفح ... دوس مسطرة وتصفح الملف العجيب ده ؟ وقولي ايه اﻷخبار
بس على فكرة في طريقة تمييز تاني لأنواع الملفات ... وبتظهر لما تستخدم مثلا الخيار F مع اﻷمر ls ... جدول الرمز ده بسيط جدا
الرمز المعني
ولاحاجة ملف عادي
/ مجلد
* ملف تنفيذي
@ رابط
= socket
| بايب named pipe
وكلمة اخيرة بقى ... لو عايز معلومات زي ما انت عايز عن اﻷمر ls وبواقى اﻷوامر اﻷساسية ... اللي هي مجموعة داخل حزمة coreutils ... استخدم اﻷمر ده وهتفهم حاجات كتيرة جدا
info coreutils
امر info مش ظريف تصفحه قوي بس حاول تدوس h وتنفذ اللي بيقولك عليه ... ولو عايز تفصيل اكتر تابع التعليق على مقالة امر man
طبعا مش معقولة هنسيب خصائص الملف وكيفية عرضها من غير ما نتكلم عن اﻷمر file
حقيقي امر سهل وظريف ... ما عليك غير انت تكتب اﻷمر ده ﻷي ملف انت مش عارف هو الفورمات بتاعه ايه ... وهو هيقولك .... طبعا لا يعتمد على امتداد الملف .. ﻷن نظام اللينكس مفروض إنه اذكي من انه يعتمد على اﻷمتدادات ... ولكن هي بستخدم لدواعي التوضيح لا أكثر
واﻵن نزهة قصيرة مع اﻷمر file
ثانيا :انشاء وحذف الملفات
متنساش إني انت في تعاملك مع الملفات عامة عندك مدير الملفات بتاعك على الواجهة الرسومية خاصتك ... فعندك دلوقتي Konquerer لو كنت شغال KDE وعندك Nautilus لو كنت شغال GNOME ... ودول طبعا عاملين بالظبط زي منظم ملفاتك في الويندوز اللي ميتسماش Explorer ... طبعا فيه واجهات رسومية أخي وتطبيقات ملفات أخرى ... لكن ما يقال في هذا المقام إني في بديل للتعامل مع ملفاتك من هذه التطبيقات ... ولكن طبعا مع بعض القيود التى ستتضح يوما بعد اليوم عند التمرس على سطر اﻷوامر Bash Shell
طبعا انت مش ناسي إن اليونكس كله كان متصمم بحيث إن مفيش حاجة اسمها نوافذ أصلا ... :@
نبدأ دلوقتي بإنشاء المجلدات ...باﻷمر mkdir
andalusy@linux-box:~$ mkdir myFolder
طبعا أهي حاجة بسيطة جدا ... بس بجد انا معرفش ازاي نعملها من خلال الواجهة الرسومية .. من خلال الخيار p أنت دلوقتي بتقول اللينكس اعملي مجلد three بحيث يبقى جوة two ومن برة خالص one ... لو تعرف تعملها من الواجهة الرسومية قولى !!!
وده خيار من خيارات اﻷمر ... انا عارف إني انت مفروض تسأل كتير ايه فايدة سطر اﻷوامر ده كتير .. بس مش هتعرف غير بالممارسة
اسمحلى دلوقتي أوضح حاجة مهمة جدا ... نظام اليونكس عامة بيقولوا عليه Case Sensitive يعني بيتعرف على الكلمة من خلال حالة حروفها ... بمعني أوضح اليونكس بيشوف المجدات ONE,One,oNe,onE,one مجلدات مختلفة تماما بالمرة وهما كده عندو عبارة عن خمس مجلدات ... وده طبعا على عكس الويندوز عبارة عن نظام Case Insensitive ... بمعني انه غير قادر على التفرقة ما بين الخمس مجلدات دول وهشوفهم على انهم مجلد واحد
أما الماك بقى فجت في النص ... فقالت انا هفضل شغالة Case-Insensitive حصل تصادم ما بين اسمين ... مثلا ONE,one يبقى هتشوفهم على انهم مجلدين مختلفين Case-Sensitive ... طب زمانك بتقول وانا مالي بده كله يعني انا مش فاهم!!
ده توضيح لكيفية تسمية الملفات مش اكتر
نرجع تاني ﻷوامر الملفات ... ازاي هننقل الملفات بأمر mv
دلوقتي أنت نقلت الملف file1 للمجلد test الموجود في المجلد الحالى اللي انت شغال عليه
ازاي هننسخ الملفات بأمر cp
طبعا لو كنت عملت أمر man على اﻷمر mv اللي سبق كنت عرفت إنه بيستخدم للتعامل مع شجرة مجلدات كاملة .. يعني ينقل المجلد بمحتوياته ... طب لو كان محتوياته دية فيها مجلدات بتحتوي على مجلدات ... هيفضل ورا الشجرة لغاية لما يخلصها الخيار R للمعني Recursive ... يعني اللي اتقال ده
هنمسح الملفات دلوقتي بأمر rm والمجلدات باﻷمر rmdir
طبعا بيفضل اﻷمر ده مع الخيار i اختصارا لمفهوم interactive المقصود إنه هيأكد عليك عملية المسح الخطيرة دية ... والجدير بالذكر إن الباش BASH مفيهاش حاجة اسمها سلة مهملات على عكس الواجهة الرسومية فللى بيروح مبيرجعش ...
طبعا فيه خيار للrm بيسمحلك إنك تمسح بيه شجرة مجلدات كاملة ... بس انا هسيبلك المشكلة البسيطة دية إنت تدور عليها ؟
لقيتها ؟
ﻷ ... معرفتش ... على فكرة انت مش هينفع تقعد تقرا وتتفرج على المقالات كده ... لو كنت جربت كنت هتلاقى الحل مكتوب أصلا
ثالثا:: البحث عن الملفات :
بداية البحث عن الملفات خاصية مهمة جدا وضرورية .. ولازم تكون متقنها ... ومن غير كده بيبقى وضعك حرج جدا أحيان كتيرة .... فلو عايزين نبدأ فنبدأ بأسهل اﻷدوات وهي أوامر which and whereis
اﻷمر which :: بيدور في مسارات المتغير PATH ويرد عليك الملف ده موجود فين ... بس واضح طبعا إنه بحث قاصر على المسارات دية بس ... يعني مثلا لو عايز تعرف مكان أمر apropos
أما اﻷمر whereis
فبيزرود على كده وبيدور في قاعدة بيانات man ومعها المتغير PATH ومعها ملفات التعريف كمان ... كمثال
أمر find و locate و grep
اﻷوامر دية أوامر اساسية وضرورية ومتتوقعش معالجة تامة للموضوع في المقالة دية خالص ... ﻷن الموضوع مهم جدا وضوروي في فهم مواضيع مبنية عليه Regular Expressions and Shell Scripting
أمر Find
أمر قوي جدا واساسي في عالم جنو/لينكس ... وتعريفاته كتيرة جدا واحتمالاتها لا نهائية ... ومن غير التعريفات دية بيموت الجهاز ومبيجبش حاجة قوي ....
عامة الصيغة العامة واﻷساسية ليه
find [path] −name [SearchKeyword]
اﻷمر اﻷول لتحديد جميع الملفات اللي حجمها أكبر من 5000k
اﻷمر التاني لتحديد ملف معين بهذا اﻷسم
طبعا معالجة قاصرة للأمر عارف .. لكن حتى حينه يمكنك استخدام أمر man
أمر Locate
أمر الطف بكتير من أمر Find ... وباين عليك هتعتمد عليه عقبال ما تتعود اكتر واكتر على اﻷمر اﻷولاني .. اﻷمر ده بيعتمد على index متخزن فيه قاعدة بيانات بكل المعلومات الخاصة عن نظام الملفات ... طيب السؤال البديهي قاعد البيانت دة قاعدة تمسح نظام الملفات بتاعي ليل نهار يعني ولا هتعرف انت إني نظام الملفاتن بتاعي اتغير ؟؟
ﻷ طبعا لازم تعمل أمر updatedb عشان تجدد قاعدة البيانات بتاع اﻷمر أول بأول ... وانا كل شوية هقعد أعمل اﻷمر اللي بياخد وقت كبير ده ... ﻷ طبعا مفروض تبقى تعمل crontab
عشان اﻷمر يتنفذ تلقائي من ذات نفسه كل فترة معينة
ايه هو الcrontab ؟
ده برنامج عامل زي Windows Scheduler ... بيشغل برامج معينة في أوقات معينة احنا بنحددها
طب أعمل كده ازاي ؟
طبعا مش في المقالة دية ... حد يقدر يشرح الcrontab
ملحوظة أمر updatedb يحتاج إلى صلاحيات المستخدم المطلق .. لا تنسى ذلك
أمر grep
الكلمة دية أختصار Global Regular Expression Print أمر بقوة اربعين حصان ... حقيقي أمر قوي جدا ... ونحس كده أنه سحر اصلا
طبعا سحره بيكتمل في كتاب هاري بوتر التاسع ... ﻷ طبعا بيكتمل مع فهم مكتمل لجزئية الRE-Regular Expressions
متصفحات الملفات :
المتصفح cat : مبيعملش حاجة اكتر من انه يبعت محتويات الملف على المخرج الاساسي standard output اللي هو شاشة سطر اﻷوامر في حالتك
طبعا عامة مفيش اسهل من استخدام المتصفحات على الواجهة الرسومية ... وهذه منها العديد والعديد الذي لا يحصى ... حاول تجرب gedit or Kate
المتصفح less : متصفح متكامل لدجة انه معتمد في تصفح صفحات الman .. كلام زيادة عنه
المتصفح head and tail: طبعا ده مش شامبو ... دول متصفحين بيعرضوا ﻷما عدد معين من السطور أول الملف أو آخر الملف ... وبيتحدد السطور في خيارات اﻷمر
والمتصفحين دول مشهورين مع ملفات التقارير Log Files مع الخيار 'f' حيث يسمح لك بالمتابعة الحية ﻵخر ما يكتب على الملف حاجة كده Real-Time
رابعا : الروابط للملفات :
مش محتاجة فزلكة يعني ... رابط يعني وصلة هتوصلك للملف عن طريق تاني ... هي دية الروابط Links في ابسط صورها يعني
بس طبعا اليونكس لازم يعقدها ... اليونكس بيقول فيه حاجة اسمها رابط حقيقي Hard Link ورابط رمزي Soft Link
الترجمة الحرفية كانت هتكون رابط صلب ورابط لين أو ناعم ... وكل عام وانت بخير
الرابط الحقيقي ... بيعتمد على رقم الملف inode ,,, وأظن اتكلمنا عليه قبل كده
والرابط الرمزي بيعتمد على مسار الملف Path
أحسن فهم للمفهومين دول ... هو التجارب والحالات المختلفة
الروابط بتستخدم فيه ايه ؟
انت كده كده على الويندوز كنت بستخدم الروابط عشان تسهل الوصول إلى ملفات معينة وتحطها على سطح المكتب وهكذا ... برده في عالم اليونكس الموضوع قريب من كده ... أوقات بتبقى فيه برامج متوقعة ملفات معينة في اماكن معينة ... فنستخدم الروابط .. عشان منضيعش المساحة ونساعد على كفاءة اكتر ما بين اﻷنظمة المختلفة وهكذا
طيب ايه الفرق ما بين اﻷتنين ؟
ما احنا قولنا الحقيقي بيعتمد على رقم الملف inode وبالتالي مش هيقدر يبقى موجود إلا على
بارتيشين واحد بس .. ﻷن الinode يصلح تميزها في مجال نظام الملفات الواحد على البارتيشين الواحد ... بمعني إنك لما تلاقى ملفين مختلفين ليهم نفس اللinode معناها إنهم مش على نفس البارتيشين .. ومعناها برده إنك استحالة هتلاقي ملفين مختلفين ليهم inode واحد على بارتيشين واحد
وهنا يجي دور الرابط الرمزي الي هيعتمد على المسار ومش هيهمه حالص موضوع البارتيشين ده أو نظام الملفات .. وبالتالي هو هيكون انسب حل إن يتجول على الهادر كله بدون مشاكل
مش فاهم يعني ايه بيعتمد على inode ؟
يعني الملفين ليهم نفس الرقم وبالتالي بيشاورو على نفس الخصائص وبالتالي يبقى كل الطرق تؤدي ألي روما
حاول بقى دلوقتي تعدي على اﻷمتحان السريع ده ... وترد على نفسك
واحد : دلوقتي لو عملنا أي تعديلات على الملف المربوط برابط رمزي وأخر حقيقي ... هل ستنعكس هذه التعديلات على الرابطين على السواء
ج: طبعا ... طريقة وصول الرابط للملف اﻷصلي مختلفة نعم لكنها ستصل لنفس الملف المعدل
تنين : دلوقتي نقلنا الملف اﻷصلى لمجلد تاني أو مسحناها ... ماذا سيحدث ؟
ج: في الحالتين سيتأثر الرابط المزي ﻷنه يعتمد على المسار ... لكن الرابط الحقيقي لن يتأثر ﻷنه يعتمد على رقم الملف ... زي متقول الرقم القومي بتاعه ... مفروض متغيرش .. طلع رابط صلب يعني
تلاتة : غيرنا اسم الملف اﻷصلى ؟
ج: نفس الحال الرابط الرمزي هبنكسر ﻷنه معتمد على المسار .. لكن الرابط الحقيقي ولا همه
اربعة : مسحنا الملف وبعدين انشأناه تاني بنفس اﻷسم .. ماذا سيحدث ؟
ج:الرابط الحقيقي بالطبع سينكسر .. ﻷن الملف الذي أنشأ أخذ رقم inode جديد وبالتالي لن يربط بالملف الصحيح ... لكن الرابط الرمزي لن يشعر بأي شئ وسيربط الملف الصحيح ﻷنه معتمد على المسار ... وﻷسم متغيرش .. يعني طلع رابط لين فعلا .. مش عارف احنا ليه مش مرنين جدا ... ودايما بنخبط في الحيط
يا حلاوة انا سقطت ..
لا تقلق أخي العزيز ... فعامة موضوع الروابط هذه مزعج نوعا ما ... خصوصا لو كان ﻷول مرة ... بإذن الله هتفهمه كده كده ... بس اﻷزمة بس اني انت مش متعود عليه ده حتى الShortcuts بتاعة الويندوز مش كده خالص وملهاش دعوة بالموضوع أصلا ... والتعامل بتاعها كله بيتم في اللينكس من خلال الواجهة الرسومية -- حاجة برة سطراﻷوامر خالص --
وهتلاقى واخدة اﻷمتدادات desktop or lnk
وده يعتبر نوع تالت من الروابط ؟ في انتظار منتدي عربي ﻷكتشافه ؟
احتمال طبعا ... بس عامة زي ما قولنا ده مش نوع تالت ولا حاجة ... لدرجة إن الباش بتعامل النوع ده من الملفات على انه ملف عادي regular file
اليك المفيد
حاول بقى تكمل التعديلات والحالات اللي ذكرناه عشان توصل ﻷكمل فهم لدرس الروابط ده
خليك فاكر إنه سهل جدا إني احنا نعمل قايمة بكل الملفات المشهورة في اللينكس وهتحس بالخنقة شوية ... عشان هتلاقى تطبيقات مش عارف بتعمل ايه اصلا ... وبعدين حد يقولك اهو الملف الفلاني بقى بيعرف التطبيق ده وبيخليه يعمل كذا وبيساعدك بحيث توصل لكذا ؟!!
طبعا حاجة تخنق ...
يا عم قصر هو انت كل ده كنت فاكرني متخنقتش .. ده انت فعلا طيب
طبعا ولا كأني سمعت حاجة .... انا هبدأ معاك دلوقتي في العمليات اﻷساسية على الملفات من حذف وتعديل وبحث وعمليات تانية كده مهمة شوييتين
أولا :خصائص الملف
اظن زهقت من كتر الكلام عن خصائص الملفات وعرضها عن طريق اﻷمر ls ... بس مفيش قلق المرة دية ... هنحاول نأكد على كام حاجة سريعا مش اكتر
لاحظت طبعا الوان كتيرة وانت بتستخدم اﻷمر ده ... لو عايز تعرف معاني اﻷلوان دية وتخص آني نوع من الملفات عليك بالملف etc/DIR_COLORS/ ... هتلاقى فيه تفصيل كل اﻷلوان دية
andalusy@linux-box:~$ more /etc/DIR_COLORS
# Configuration file for the color ls utility
#
# This file goes in the /etc directory, and must be world readable.
# You can copy this file to .dir_colors in your $HOME directory to override
# the system defaults.
# COLOR needs one of these arguments: 'tty' colorizes output to ttys, but not
# pipes. 'all' adds color characters to all output. 'none' shuts colorization
# off.
COLOR tty
# Extra command line options for ls go here.
# Basically these ones are:
# -F = show '/' for dirs, '*' for executables, etc.
# -T 0 = don't trust tab spacing when formatting ls output.
OPTIONS -F -T 0
# Below, there should be one TERM entry for each termtype that is colorizable
TERM linux
TERM linux-c
TERM console
TERM con132x25
TERM con132x30
TERM con132x43
TERM con132x60
TERM con80x25
TERM con80x28
TERM con80x30
TERM con80x43
TERM con80x50
TERM con80x60
TERM gnome
TERM mach-color
TERM rxvt
--More--(31%)
المتصفح more ... هتحبه اكتر من المتصفح less على اساس إنه مبيحتاجش غير زرار واحد بس هو المسطرة للتصفح ... دوس مسطرة وتصفح الملف العجيب ده ؟ وقولي ايه اﻷخبار
بس على فكرة في طريقة تمييز تاني لأنواع الملفات ... وبتظهر لما تستخدم مثلا الخيار F مع اﻷمر ls ... جدول الرمز ده بسيط جدا
الرمز المعني
ولاحاجة ملف عادي
/ مجلد
* ملف تنفيذي
@ رابط
= socket
| بايب named pipe
وكلمة اخيرة بقى ... لو عايز معلومات زي ما انت عايز عن اﻷمر ls وبواقى اﻷوامر اﻷساسية ... اللي هي مجموعة داخل حزمة coreutils ... استخدم اﻷمر ده وهتفهم حاجات كتيرة جدا
info coreutils
امر info مش ظريف تصفحه قوي بس حاول تدوس h وتنفذ اللي بيقولك عليه ... ولو عايز تفصيل اكتر تابع التعليق على مقالة امر man
طبعا مش معقولة هنسيب خصائص الملف وكيفية عرضها من غير ما نتكلم عن اﻷمر file
حقيقي امر سهل وظريف ... ما عليك غير انت تكتب اﻷمر ده ﻷي ملف انت مش عارف هو الفورمات بتاعه ايه ... وهو هيقولك .... طبعا لا يعتمد على امتداد الملف .. ﻷن نظام اللينكس مفروض إنه اذكي من انه يعتمد على اﻷمتدادات ... ولكن هي بستخدم لدواعي التوضيح لا أكثر
واﻵن نزهة قصيرة مع اﻷمر file
andalusy@linux-box:~$ file Documents/
Documents/: directory
andalusy@linux-box:~$ file linuxforarab.pdf
linuxforarab.pdf: PDF document, version 1.2
andalusy@linux-box:~$ file El-Rahman.rm
El-Rahman.rm: RealMedia file
andalusy@linux-box:~$ file office.sdw
office.sdw: Microsoft Office Document
andalusy@linux-box:~$ file logo.xcf
logo.xcf: GIMP XCF image data, version 0, 150 x 38, RGB Color
andalusy@linux-box:~$ file mydata.txt
mydata.txt: ISO−8859 text
andalusy@linux-box:~$ file logo2.png
logo2.png: PNG image data, 616 x 862, 8−bit grayscale, non−interlaced
andalusy@linux-box:~$ file figure
figure: ASCII text
andalusy@linux-box:~$ file slide1
slide1: HTML document text
ثانيا :انشاء وحذف الملفات
متنساش إني انت في تعاملك مع الملفات عامة عندك مدير الملفات بتاعك على الواجهة الرسومية خاصتك ... فعندك دلوقتي Konquerer لو كنت شغال KDE وعندك Nautilus لو كنت شغال GNOME ... ودول طبعا عاملين بالظبط زي منظم ملفاتك في الويندوز اللي ميتسماش Explorer ... طبعا فيه واجهات رسومية أخي وتطبيقات ملفات أخرى ... لكن ما يقال في هذا المقام إني في بديل للتعامل مع ملفاتك من هذه التطبيقات ... ولكن طبعا مع بعض القيود التى ستتضح يوما بعد اليوم عند التمرس على سطر اﻷوامر Bash Shell
طبعا انت مش ناسي إن اليونكس كله كان متصمم بحيث إن مفيش حاجة اسمها نوافذ أصلا ... :@
نبدأ دلوقتي بإنشاء المجلدات ...باﻷمر mkdir
andalusy@linux-box:~$ mkdir myFolder
andalusy@linux-box:~$ ls -F
myFolder/
andalusy@linux-box:~$ mkdir -p one/two/three
andalusy@linux-box:~$
طبعا أهي حاجة بسيطة جدا ... بس بجد انا معرفش ازاي نعملها من خلال الواجهة الرسومية .. من خلال الخيار p أنت دلوقتي بتقول اللينكس اعملي مجلد three بحيث يبقى جوة two ومن برة خالص one ... لو تعرف تعملها من الواجهة الرسومية قولى !!!
وده خيار من خيارات اﻷمر ... انا عارف إني انت مفروض تسأل كتير ايه فايدة سطر اﻷوامر ده كتير .. بس مش هتعرف غير بالممارسة
اسمحلى دلوقتي أوضح حاجة مهمة جدا ... نظام اليونكس عامة بيقولوا عليه Case Sensitive يعني بيتعرف على الكلمة من خلال حالة حروفها ... بمعني أوضح اليونكس بيشوف المجدات ONE,One,oNe,onE,one مجلدات مختلفة تماما بالمرة وهما كده عندو عبارة عن خمس مجلدات ... وده طبعا على عكس الويندوز عبارة عن نظام Case Insensitive ... بمعني انه غير قادر على التفرقة ما بين الخمس مجلدات دول وهشوفهم على انهم مجلد واحد
أما الماك بقى فجت في النص ... فقالت انا هفضل شغالة Case-Insensitive حصل تصادم ما بين اسمين ... مثلا ONE,one يبقى هتشوفهم على انهم مجلدين مختلفين Case-Sensitive ... طب زمانك بتقول وانا مالي بده كله يعني انا مش فاهم!!
ده توضيح لكيفية تسمية الملفات مش اكتر
نرجع تاني ﻷوامر الملفات ... ازاي هننقل الملفات بأمر mv
mv [OPTIONS] SOURCE DESTINATION
andalusy@linux-box:~$ mv file1 test/
دلوقتي أنت نقلت الملف file1 للمجلد test الموجود في المجلد الحالى اللي انت شغال عليه
ازاي هننسخ الملفات بأمر cp
cp [OPTIONS] SOURCE DESTINATION
andalusy@linux-box:~$ cp -R test1/ myFolder/
طبعا لو كنت عملت أمر man على اﻷمر mv اللي سبق كنت عرفت إنه بيستخدم للتعامل مع شجرة مجلدات كاملة .. يعني ينقل المجلد بمحتوياته ... طب لو كان محتوياته دية فيها مجلدات بتحتوي على مجلدات ... هيفضل ورا الشجرة لغاية لما يخلصها الخيار R للمعني Recursive ... يعني اللي اتقال ده
هنمسح الملفات دلوقتي بأمر rm والمجلدات باﻷمر rmdir
rm [OPTIONS] SOURCE
rmdir DIRECTORY
andalusy@linux-box:~$ rm −ri test/
rm: descend into directory `test'? y
rm: descend into directory `test/reports'? y
rm: remove directory `test/reports'? y
rm: descend into directory `test/backup'? y
rm: remove `test/backup/sysbup.tar'? y
rm: remove directory `test/backup'? y
rm: remove directory `test'? y
andalusy@linux-box:~$
طبعا بيفضل اﻷمر ده مع الخيار i اختصارا لمفهوم interactive المقصود إنه هيأكد عليك عملية المسح الخطيرة دية ... والجدير بالذكر إن الباش BASH مفيهاش حاجة اسمها سلة مهملات على عكس الواجهة الرسومية فللى بيروح مبيرجعش ...
طبعا فيه خيار للrm بيسمحلك إنك تمسح بيه شجرة مجلدات كاملة ... بس انا هسيبلك المشكلة البسيطة دية إنت تدور عليها ؟
لقيتها ؟
ﻷ ... معرفتش ... على فكرة انت مش هينفع تقعد تقرا وتتفرج على المقالات كده ... لو كنت جربت كنت هتلاقى الحل مكتوب أصلا
ثالثا:: البحث عن الملفات :
بداية البحث عن الملفات خاصية مهمة جدا وضرورية .. ولازم تكون متقنها ... ومن غير كده بيبقى وضعك حرج جدا أحيان كتيرة .... فلو عايزين نبدأ فنبدأ بأسهل اﻷدوات وهي أوامر which and whereis
اﻷمر which :: بيدور في مسارات المتغير PATH ويرد عليك الملف ده موجود فين ... بس واضح طبعا إنه بحث قاصر على المسارات دية بس ... يعني مثلا لو عايز تعرف مكان أمر apropos
andalusy@linux-box:~$ which apropos
/usr/bin/apropos
andalusy@linux-box:~$
أما اﻷمر whereis
فبيزرود على كده وبيدور في قاعدة بيانات man ومعها المتغير PATH ومعها ملفات التعريف كمان ... كمثال
andalusy@linux-box:~$ whereis mount
mount: /bin/mount /sbin/mount.fuse /sbin/mount.cifs /sbin/mount.ncpfs /sbin/mount.ncp /sbin/mount.ntfs-3g /sbin/mount.smbfs /sbin/mount.ntfs-fuse /usr/share/man/man2/mount.2.gz /usr/share/man/man8/mount.8.gz
andalusy@linux-box:~$
أمر find و locate و grep
اﻷوامر دية أوامر اساسية وضرورية ومتتوقعش معالجة تامة للموضوع في المقالة دية خالص ... ﻷن الموضوع مهم جدا وضوروي في فهم مواضيع مبنية عليه Regular Expressions and Shell Scripting
أمر Find
أمر قوي جدا واساسي في عالم جنو/لينكس ... وتعريفاته كتيرة جدا واحتمالاتها لا نهائية ... ومن غير التعريفات دية بيموت الجهاز ومبيجبش حاجة قوي ....
عامة الصيغة العامة واﻷساسية ليه
find [path] −name [SearchKeyword]
andalusy@linux-box:~$ find . −size +5000k
andalusy@linux-box:~$ find . −name filename.txt
اﻷمر اﻷول لتحديد جميع الملفات اللي حجمها أكبر من 5000k
اﻷمر التاني لتحديد ملف معين بهذا اﻷسم
طبعا معالجة قاصرة للأمر عارف .. لكن حتى حينه يمكنك استخدام أمر man
أمر Locate
أمر الطف بكتير من أمر Find ... وباين عليك هتعتمد عليه عقبال ما تتعود اكتر واكتر على اﻷمر اﻷولاني .. اﻷمر ده بيعتمد على index متخزن فيه قاعدة بيانات بكل المعلومات الخاصة عن نظام الملفات ... طيب السؤال البديهي قاعد البيانت دة قاعدة تمسح نظام الملفات بتاعي ليل نهار يعني ولا هتعرف انت إني نظام الملفاتن بتاعي اتغير ؟؟
ﻷ طبعا لازم تعمل أمر updatedb عشان تجدد قاعدة البيانات بتاع اﻷمر أول بأول ... وانا كل شوية هقعد أعمل اﻷمر اللي بياخد وقت كبير ده ... ﻷ طبعا مفروض تبقى تعمل crontab
عشان اﻷمر يتنفذ تلقائي من ذات نفسه كل فترة معينة
ايه هو الcrontab ؟
ده برنامج عامل زي Windows Scheduler ... بيشغل برامج معينة في أوقات معينة احنا بنحددها
طب أعمل كده ازاي ؟
طبعا مش في المقالة دية ... حد يقدر يشرح الcrontab
ملحوظة أمر updatedb يحتاج إلى صلاحيات المستخدم المطلق .. لا تنسى ذلك
andalusy@linux-box:~$ sudo updatedb
andalusy@linux-box:~$ locate stdio.h
/opt/gnome/include/glib-2.0/glib/gstdio.h
/usr/include/bits/stdio.h
/usr/include/boost/iostreams/filter/stdio.hpp
/usr/include/stdio.h
/usr/lib/perl5/5.8.8/i586-linux-thread-multi/CORE/nostdio.h
/usr/share/man/man0p/stdio.h.0p.gz
/usr/src/linux-2.6.18.2-34/arch/powerpc/boot/stdio.h
/usr/src/linux-2.6.18.2-34/arch/powerpc/xmon/nonstdio.h
/usr/src/linux-2.6.18.2-34/arch/ppc/boot/include/nonstdio.h
/usr/src/linux-2.6.18.2-34/arch/ppc/xmon/nonstdio.h
أمر grep
الكلمة دية أختصار Global Regular Expression Print أمر بقوة اربعين حصان ... حقيقي أمر قوي جدا ... ونحس كده أنه سحر اصلا
طبعا سحره بيكتمل في كتاب هاري بوتر التاسع ... ﻷ طبعا بيكتمل مع فهم مكتمل لجزئية الRE-Regular Expressions
andalusy@linux-box:~$ grep yourusername /etc/passwd
andalusy@linux-box:~$ ls -A | grep -i filename.txt
متصفحات الملفات :
المتصفح cat : مبيعملش حاجة اكتر من انه يبعت محتويات الملف على المخرج الاساسي standard output اللي هو شاشة سطر اﻷوامر في حالتك
طبعا عامة مفيش اسهل من استخدام المتصفحات على الواجهة الرسومية ... وهذه منها العديد والعديد الذي لا يحصى ... حاول تجرب gedit or Kate
المتصفح less : متصفح متكامل لدجة انه معتمد في تصفح صفحات الman .. كلام زيادة عنه
المتصفح head and tail: طبعا ده مش شامبو ... دول متصفحين بيعرضوا ﻷما عدد معين من السطور أول الملف أو آخر الملف ... وبيتحدد السطور في خيارات اﻷمر
والمتصفحين دول مشهورين مع ملفات التقارير Log Files مع الخيار 'f' حيث يسمح لك بالمتابعة الحية ﻵخر ما يكتب على الملف حاجة كده Real-Time
andalusy@linux-box:~$ tail -f /var/log/messages
رابعا : الروابط للملفات :
مش محتاجة فزلكة يعني ... رابط يعني وصلة هتوصلك للملف عن طريق تاني ... هي دية الروابط Links في ابسط صورها يعني
بس طبعا اليونكس لازم يعقدها ... اليونكس بيقول فيه حاجة اسمها رابط حقيقي Hard Link ورابط رمزي Soft Link
الترجمة الحرفية كانت هتكون رابط صلب ورابط لين أو ناعم ... وكل عام وانت بخير
الرابط الحقيقي ... بيعتمد على رقم الملف inode ,,, وأظن اتكلمنا عليه قبل كده
والرابط الرمزي بيعتمد على مسار الملف Path
أحسن فهم للمفهومين دول ... هو التجارب والحالات المختلفة
الروابط بتستخدم فيه ايه ؟
انت كده كده على الويندوز كنت بستخدم الروابط عشان تسهل الوصول إلى ملفات معينة وتحطها على سطح المكتب وهكذا ... برده في عالم اليونكس الموضوع قريب من كده ... أوقات بتبقى فيه برامج متوقعة ملفات معينة في اماكن معينة ... فنستخدم الروابط .. عشان منضيعش المساحة ونساعد على كفاءة اكتر ما بين اﻷنظمة المختلفة وهكذا
طيب ايه الفرق ما بين اﻷتنين ؟
ما احنا قولنا الحقيقي بيعتمد على رقم الملف inode وبالتالي مش هيقدر يبقى موجود إلا على
بارتيشين واحد بس .. ﻷن الinode يصلح تميزها في مجال نظام الملفات الواحد على البارتيشين الواحد ... بمعني إنك لما تلاقى ملفين مختلفين ليهم نفس اللinode معناها إنهم مش على نفس البارتيشين .. ومعناها برده إنك استحالة هتلاقي ملفين مختلفين ليهم inode واحد على بارتيشين واحد
وهنا يجي دور الرابط الرمزي الي هيعتمد على المسار ومش هيهمه حالص موضوع البارتيشين ده أو نظام الملفات .. وبالتالي هو هيكون انسب حل إن يتجول على الهادر كله بدون مشاكل
مش فاهم يعني ايه بيعتمد على inode ؟
يعني الملفين ليهم نفس الرقم وبالتالي بيشاورو على نفس الخصائص وبالتالي يبقى كل الطرق تؤدي ألي روما
حاول بقى دلوقتي تعدي على اﻷمتحان السريع ده ... وترد على نفسك
واحد : دلوقتي لو عملنا أي تعديلات على الملف المربوط برابط رمزي وأخر حقيقي ... هل ستنعكس هذه التعديلات على الرابطين على السواء
ج: طبعا ... طريقة وصول الرابط للملف اﻷصلي مختلفة نعم لكنها ستصل لنفس الملف المعدل
تنين : دلوقتي نقلنا الملف اﻷصلى لمجلد تاني أو مسحناها ... ماذا سيحدث ؟
ج: في الحالتين سيتأثر الرابط المزي ﻷنه يعتمد على المسار ... لكن الرابط الحقيقي لن يتأثر ﻷنه يعتمد على رقم الملف ... زي متقول الرقم القومي بتاعه ... مفروض متغيرش .. طلع رابط صلب يعني
تلاتة : غيرنا اسم الملف اﻷصلى ؟
ج: نفس الحال الرابط الرمزي هبنكسر ﻷنه معتمد على المسار .. لكن الرابط الحقيقي ولا همه
اربعة : مسحنا الملف وبعدين انشأناه تاني بنفس اﻷسم .. ماذا سيحدث ؟
ج:الرابط الحقيقي بالطبع سينكسر .. ﻷن الملف الذي أنشأ أخذ رقم inode جديد وبالتالي لن يربط بالملف الصحيح ... لكن الرابط الرمزي لن يشعر بأي شئ وسيربط الملف الصحيح ﻷنه معتمد على المسار ... وﻷسم متغيرش .. يعني طلع رابط لين فعلا .. مش عارف احنا ليه مش مرنين جدا ... ودايما بنخبط في الحيط
يا حلاوة انا سقطت ..
لا تقلق أخي العزيز ... فعامة موضوع الروابط هذه مزعج نوعا ما ... خصوصا لو كان ﻷول مرة ... بإذن الله هتفهمه كده كده ... بس اﻷزمة بس اني انت مش متعود عليه ده حتى الShortcuts بتاعة الويندوز مش كده خالص وملهاش دعوة بالموضوع أصلا ... والتعامل بتاعها كله بيتم في اللينكس من خلال الواجهة الرسومية -- حاجة برة سطراﻷوامر خالص --
وهتلاقى واخدة اﻷمتدادات desktop or lnk
وده يعتبر نوع تالت من الروابط ؟ في انتظار منتدي عربي ﻷكتشافه ؟
احتمال طبعا ... بس عامة زي ما قولنا ده مش نوع تالت ولا حاجة ... لدرجة إن الباش بتعامل النوع ده من الملفات على انه ملف عادي regular file
اليك المفيد
يلا نروح البيت
andalusy@linux-box:~$ cd ~
بنعمل ملف جديد
andalusy@linux-box:~$ touch original_file
بنعرض بيانات الملف اللي عملناها
andalusy@linux-box:~$ ls -l
-rw-r--r-- 1 username usergroup 0 Jan 16 16:19 original_file
رقم صفر يعني الملف لسه فاضي .. رقم واحد يعني رابط حقيقي للملف .. متخفش مفيش عفاريت ... هو الملف ذات نفسه
بنعمل رابط حقيقي
andalusy@linux-box:~$ ln original_file hard_link
بنستعرض تاني
andalusy@linux-box:~$ ls -l
-rw-r--r-- 2 username usergroup 0 Jan 16 16:19 hard_link
-rw-r--r-- 2 username usergroup 0 Jan 16 16:19 original_file
رقم اتنين يعني فيه رابطين للملف واحد للملف ذات نفسه وواحد للربط الجديد
اكيد نفسك تعرف رقم الملف
inode number
andalusy@linux-box:~$ ls -i
45116 hard_link
45116 original_file
هنعمل دلوقتي رابط رمزي
andalusy@linux-box:~$ ln -s original_file soft_link
هنستعرض الملف بالروابط بتاعته
andalusy@linux-box:~$ ls -l
-rw-r--r-- 2 username usergroup 0 Jan 16 16:19 hard_link
-rw-r--r-- 2 username usergroup 0 Jan 16 16:19 original_file
-rw-r--r-- 1 username usergroup 13 Jan 16 16:30 soft_link -> original_file
طبعا الرابط الرمزي عبارة عن ملف مختلف برقم ملف مختلف ايضا ليه خصايصه لوحده
andalusy@linux-box:~$ ls -i
45116 hard_link
45116 original_file
45129 soft_link
andalusy@linux-box:~$
حاول بقى تكمل التعديلات والحالات اللي ذكرناه عشان توصل ﻷكمل فهم لدرس الروابط ده
- مدونة قاسم
- لُجأو سجل لتعلق
- قراءة(1317)
