الاثنين، 4 أكتوبر 2010

البحث بواسطة الأمر find في لينكس

البحث باستخدام الأمر
find
في لينكس

تعد الأداة "find" , من أهم أدوات البحث في لينكس ,  و لا يقتصر فائدتها على البحث عن الملفات بل تستطيع تنفيذ الأوامر و 
  تنظيم الملفات بواسطتها, لذا سوف أعرض أهم الاستخدامات  للأمر find 



1-عرض جميع الملفات و المجلدات :


تستطيع استخدام أمر "find" لعرض لائحة الملفات كما في المثال التالي: 
find
find /usr/bin /home/user
في الأمر الأول سيعرض جميع الملفات في الدليل الحالي , و في الأمر الثاني  سنحصل عن الملفات و المجلدات في المجلدات "/home/user"و  "/usr/bin" .






2-البحث بواسطة الاسم :
تستخدم التعليمة "-name" للبحث عن الملفات و المجلدات المطابقة للاسم المعين :

find –name "firefox"
find /home/user /usr/bin –name "fire*"
find /home/user–name "*.html"


  • الأمر الأول سيبحث عن الملفات و المجلدات التي تحمل الاسم "firefox" , لن يعرض الأمر الملفات التي تطابق الأحرف و لكن لا تطابق الحالة مثل "FireFOX" أو "FIREfox"
  •  الأمر الثاني ستظهر الملفات و المجلدات التي تبدأ بالكلمة "fire"
  •  الأمر الثالث ستعرض الملفات التي ينتهي أسمها بالامتداد ".html"
3-البحث بواسطة الاسم مع تجاهل حالة الأحرف:
"-iname" هذه التعليمة تقوم بالبحث مع تجاهل حالة الأحرف:
find /home/ -iname "firefox"
سيعرض الأمر جميع الملفات و المجلدات التي تطابق الاسم مثل :"fireFox" و "FIREFOX"

4-تحديد عدد المجلدات الفرعية باستخدام الأمرين  (maxdepth-mindepth):
ألق نظره على الأمر:
find / -name "*.txt"
هذا الأمر سيبحث في جميع المجلدات الفرعية و المجلدات المنبثقة منها في الدليل |"/"  .
الآن ألقى نظره على المسار "/usr/share/bin" يقسم الأمر "find" المجلدات إلى مستويات كالتالي:
level
folder
1
/usr
2
/usr/share
3
/usr/share/bin
الأن وقد فهمت طريقة المستويات  , تستطيع التحكم في "depth" أي العمق باستخدام:
تحدد القيمة الصغرى لعدد المستويات "المجلدات" التي سيبدأ عندها البحث
mindepth
تحدد القيمة الكبرى لعدد المستويات "المجلدات " التي سينتهي فيها البحث
maxdepth

الأن مع الأمثلة:
find /home/user –maxdepth 1 –name "firefox"
find /home/user –mindepth 2 –name "firefox"
-سيقوم الأمر الأول بالبحث في المجلد "/home/user" فقط متجاهلا  المجلدات الفرعية .
 -الأمر الثاني سيبحث في المجلدات الفرعية والمجلدات المتفرعة أيضا  متجاهلا المجلد "/home/user".


5-تحديد  نوع الملفات أو المجلدات المراد البحث عنها:

لابد أنك لاحظت أننا أذا بحثنا عن الاسم سيعرض المجلدات و الملفات من دون أن نستطيع عرض الملفات فقط  أو العكس, لذا لتحديد نوع الملفات تستخدم التعليمة "-type" التي تقسم الملفات ألي:
الشرح
الرمز
ملف "socket" لتبادل المعلومات
s
المجلدات
d
ملف عادي
f

الأن مع مثال بسيط:
find /home/user –name firefox –type d
find /home/user –name "test" –type f
-يقوم الأمر الأول بالبحث عن المجلدات بالاسم  "firefox"
-الأمر الثاني يعرض الملفات باسم   "test"



6-البحث عن الملفات بواسطة أسم المستخدم  و رقم المجموعة(group):
تستطيع البحث عن الملف باستخدام أسم المالك للملف"owner name" أو رقم المستخدم "uid" أو رقم "group" المجموعة المنتمي لها مالك الملف:
الشرح
التعليمة
البحث بواسطة القيمة الرقمية للمالك الملف
-uid
تستخدم القيمة الرقمية للمجموعة للبحث في الملفات التي تعود ملكيتها للمستخدمين في المجموعة
-gid
تستخدم أسم المستخدم للبحث عن الملفات العائدة له
-user
تستخدم  أسم المجموعة للبحث
-group

أنظر للمثال التالي:
find /home/user –uid 0
find /home/user –gid 1000
find /home/user –user root
-المثال الأول يبحث عن ملفات المستخدم الذي يجمل القيمة الرقمية 0 و في أنظمة لينكس يكون "root"
-المثال الثاني يبحث عن الملفات العائدة للمجموعة التي تحمل القيمة الرقمية (1000)
-المثال الثالث يبحث عن الملفات و المجلدات العائدة للمستخدم "root"

7-البحث عن الملف بحسب المساحة:
تستطيع البحث عن الملفات و المجلدات بحسب المساحة باستخدام التعليمة  "-size" متبوعة بالقيمة المطلوبة كالتالي:
الشرح
القيمة
يبحث عن الملفات المساوية للقيمة n
n
يبحث عن الملفات الأكبر مساحة من n
+n
يبحث عن الملفات الأقل مساحة من n
-n
و القيم تستطيع أن تكتبها كما في الجدول التالي:
الشرح
القيمة
الحجم بالبايتات "bytes"
c
الحجم بالكلمة (الكلمة تساوي 2 بايت "bytes")
w
الحجم بالكيلوبايت (1024 بايت)
k
الميغابايت(1048576 بايت)
M
الجيجابايت (1073741824 بايت)
G

و الآن مع الأمثلة:
find /home/usr –size 100M –type f
find /home/user –size -433k –type f
find /home/user –size +122c –type f
-الأمر الأول يبحث عن الملفات التي مساحتها تساوي 100M
-الأمر الثاني يبحث عن الملفات الأصغر من 433 كيلوبايت
-الأمر الثالث يبحث عن الملفات الأكبر من 122 بايت
8-البحث عن الملفات بحسب الصلاحيات:
قبل أن أبدا في شرح طريقة البحث رأيت أنه يجب أن أشرح طريقة لينكس في تنظيم الصلاحيات , يقسم لينكس مجموعات المستخدمين إلى ثلاث مجموعات هي:
الآخرون"other"-
المجموعة المنتمي لها المستخدم "Group"
مالك الملف – "Owner"

ويقسم الصلاحيات إلى ثلاث مجموعات أيضا:
الشرح
القيمة الرقمية
القيمة الحرفية
القراءة
4
r
الكتابة
2
w
التنفيذ (برنامج) للملفات أو البحث للمجلدات
1
x

تستطيع كتابة الصلاحيات بطريقتين الأولى باستخدام رمز المجموعة و من بعدها رمز الصلاحيات مثل:
o+rw
حرف "o" يرمز للمالك  و "rw" يرمز لتمكين القراء و الكتابة .
والطريقة الثانية باستخدام الطريقة الرقمية :
كما في الصلاحية "664" و تقسم كما في التالي:
القيمة
6
6
4
المجموعة
Owner
group
other
التفسير
القراءة و الكتابة
القراءة و الكتابة
القراءة فقط

تحصل على القيمة بجمع القيمة الرقمية للصلاحية (القراءة 4+الكتابة 2)
الأن بعد أن أصبحت لديك فكرة عن الصلاحيات في لينكس لنأتي عن طريقة البحث تستخدم التعليمة –perm كما في الأمثلة التالية:
find ./ -perm /660
find ./ -perm /u+rw,g+rw
find ./ -perm /u=rw,g=rw
تقوم جميع الأوامر التي عرضناها بالبحث عن الملفات التي تحمل الأذن:rw للمالك ولمجموعته المختلف فقط هو طريقة كتابة الصلاحيات فقط..
البحث عن الملفات و المجلدات الخالية:
تستطيع البحث عن الملفات الخالية بأستخدام التعليمة "-empty" كما في المثال التالي:
find /home/ -empty
سيقوم الأمر بطباعة الملفات و المجلدات الخالية فقط  .



9-تنفيذ الأوامر على الملفات و المجلدات:
تستطيع تنفيذ الأوامر على الملفات التي تطابف شروط البحث بواسطة التعليمة "-exec" كما في المثال التالي:
find /home/user –name "*.txt" –type f –exec grep "name" {} \;
يقوم المثال بالبحث عن الملفات النصية البحث في محتويتها عن الكلمة "name"  باستخدام الأمر "grep" المتبوع المتغير الخاص بالملفات في الأمر "find" الذي هو "{}" , لكن يجب أن تختم الأمر بـ"\;" لذا يجب أن تكون التعليمة "-exec" في أخر الأمر .

هنالك طريقة أخرى في الأمر "find" وهي التعليمة "-ok" الفرق الوحيد بينها و بين "-exec" أنها تعرض رسالة للمستخدم تطلب الموافقة على تنفيذ الأمر على الملف :
find /home/ -type d –empty –exec rm –r {} \;

-في الخاتمة يجب أن أنوه أنني لم أتطرق إلى جميع أوامر "find" بل عرضت الأوامر الأكثر استخداما لذا أذا أردت التعمق في الموضع أستخدم دليل الأستخدام المرفق مع "find" الذي تستطيع عرضه باستخدام الأمر :
man find

هناك تعليق واحد: