//

Thursday, September 27, 2012

10 פקודות Find שפשוט חייבים להכיר

לינוקס זה קבצים. כך תמיד היה. רוב הדברים במערכת שלנו הם קבצים - devices, links, sockets ועוד.
לכן תמצאו את הכלי find כשימושי במיוחד בעבודה שלכם עם מערכת ההפעלה.

בפוסט הזה אני אנסה לתת לכם טעימה קטנה מfind עם 10 דוגמאות שחייבים להכיר =)

lets go

1. שימוש בסיסי

לפני שאננו קופצים למים העמוקים בואו נראה דוגמה בסיסית לשימוש בfind:

find  /  -name "*.txt" 
אז מה בעצם אנחנו רואים כאן?

/ הוא המיקום שממנו אנו רוצים להתחיל. שימוש נפוץ נוסף הוא פשוט לשים נקודה. הכוונה בנקודה היא המקום בו אנו נמצאים עכשיו.

name- אומר שהביטוי הבא הוא חלק מהשם של הקובץ (או השם כולו) שאנו רוצים לחפש.
בדוגמה הזאת השתמשתי בWildCards. הכוונה בכוכבית היא 0 תווים או יותר ולא משנה באיזה תו מדובר.
מה שאנחנו מחפשים כאן זה למעשה את כל הקבצים שמסתיימים בtxt - דרך שימושית למצוא את כל הקבצים מסוג מסויים.


2. זמן רבותיי, זמן

לעיתים קרובות נרצה לדעת אילו קבצים שונו היום, אילו לפני חודש ואולי רק יומיים ומעלה.  את כל אלה ויותר נוכל לבדוק באמצעות find

find /tmp -mtime 2
בדוגמה אנו מחפשים את כל הקבצים ששונו לפני יומיים בדיוק. ניתן להשתמש בסימנים + - כדי לחפש קבצים ותיקיות ששונו לפני יותר מיומיים או פחות מיומיים.

אופציות חשובות נוספות הן:
atime - access time למעשה הזמן שבו נעשה שינוי בקובץ שלא בתוכן שלו.
ctime - change time הזמן שבו השתנו מאפייני הקובץ כמו הרשאות, metadata וכו'


3. הרשאות

find מאפשרת לנו לחפש גם קבצים עם הרשאות מסויימות

find  . -perm 646
בדוגמה הנ"ל אנו מחפשים את כל הקבצים עם הרשאות קריאה וכתיבה לowner ולothers והרשאות קריאה לgroup.

באמצעות not- ניתן למצוא את כל הקבצים שאין להם את ההרשאות הנ"ל.

בנוסף ניתן לחפש בצורה סימבולית. למשל  



find  . -perm -ug=rwx

4. סוג קובץ

לפעמים המטרה שלנו בחיפוש היא לאו דווקא למצוא קובץ רגיל. לעיתים נרצה לחפש תיקיות ובפעמים אחרות block device. לכן חשוב להכיר איך לחפש גם סוגי קבצים אחרים.


find /var -type d 

בדוגמה הנ"ל אנחנו מחפשים את כל התיקיות תחת var/
כדי ללמוד על סוגים נוספים ניתן להסתכל בדפי הman של find


5. חפש ובצע

אחת מהאופציות החזקות (ומהמסוכנות) שיש לfind להציע זאת אופציית הexec
exec מאפשרת לנו לבצע כל פעולה שנרצה על הקבצים שמצאנו בעת החיפוש


find ~ -name *.txt -exec rm -f {} \;
בדוגמה הנ"ל אנו מחפשים את כל הקבצים שמסתיימים בtxt ולאחר מכן מוחקים את אותם קבצים.
זאת דוגמה לשימוש מסוכן בפקודה. אין לדעת מה נעלה בעת החיפוש. לכן יש לשים לב ולנסות לעשות את זה בזהירות. בדוגמה הזאת למשל, הייתי שם i- ולא f-


6. קצת עומק

בברירת מחדל find מחפש בכל תתי התיקיות בנתיב שאנו מציינים.
כדי להגביל את עומק החיפוש ניתן לציין את האפשרות maxdepth


find / -maxdepth 2 -name "mario"
maxdepth 2 פירושו חפש בנתיב שצויין ושלב אחד למטה. כך למשל הוא יחפש גם בתיקייה etc/ אך לא מעבר לכך.
ניתן להתחיל חיפוש גם בעומק מסויים (כלומר לא מהנתיב שצויין) עם האפשרות mindepth


7. חדש יותר

מקודם ציינתי שניתן לחפש לפי זמן מסויים שקובץ נערך או בוצעה גישה אליו. ניתן לבצע חיפוש יותר חכם בהקשר הזה של מודיפקציה של קבצים.


find . -newer file1


הפקודה תחפש בנתיב הנוכחי את כל הקבצים ששונו לאחר זמן השינוי של file1
שימושי במקרה ואתם רוצים לראות את השינויים האחרונים בתיקייה מסויימת.

8. גודל

לפעמים נרצה לאתר את הקבצים הכי גדולים בעץ קבצים שלנו על מנת לפנות כמה שיותר מקום. האופציה size מאוד שימושית במקרה הזה:


find /tmp -size +38k 

כאן אתם יכולים לראות דוגמה לחיפוש של קבצים מעל 38 קילובייט. ניתן לחפש לפי גדלים שונים. M גדולה למשל ייחפש לנו בגדלים של Megabytes

9.   Iname

לינוקס היא case sensitive. כלומר הקובץ file והקובץ File הם קבצים שונים בתכלית.
לא תמיד ברור לנו מה שם הקובץ שאנחנו מחפשים. גם כשאנחנו כבר יודעים איזה קובץ אנחנו מחפשים, לא תמיד נהיה בטוחים איך הוא מאויית (אות גדולה בהתחלה? הכל אותיות קטנות? גדולות?) בשביל זה בדיוק יש את iname


find / -iname data
בדוגמה הנ"ל אנחנו מחפשים את כל הקבצים שנקראים data. זה לא משנה אם הם רשומים כDATA או Data. 
find ימצא אותם בכל מקרה.

10. משתמשים וקבוצות

נניח שמשתמש מסויים עזב את הארגון שלנו ואנחנו רוצים לוודא שכל הקבצים ששייכים לו נמחקו מהאחסון.
find מאפשר לנו לחפש גם לפי שיוך קבצים למשתמש וקבוצה מסויימת.


find /users/doron -uid 500 -group doron

נניח שהuid של doron הוא 500 וגם של הקבוצה ששמה כמו שם המשתמש (doron). בדוגמה אנו מחפשים את כל הקבצים ששייכים למשתמש doron ולקבוצה שלו. find מאפשרת לנו לחפש עם האפשרויות uid וgid, ומצד שני גם מילולית עם user וgroup.

מספר טיפים

לעיתים תתקלו בדברים לא רצויים עם הפקודה find.

אחת מה"תקלות" הנפוצות בעבודה עם find היא חוסר הרשאות למיקום מסויים במערכת שמוציא לנו שגיאות יחד עם הפלט של החיפוש. כדי לסנן את השגיאות הללו מומלץ להשתמש בredirection כך:

find / -name "*.mkv" 2> /dev/null

דבר נוסף שנרצה לעשות לעיתים קרובות הוא לחפש במספר מקומות בו זמנית. כדי לעשות את זה פשוט מפרידים בין המקומות באמצעות רווח.


find /tmp  /var/log  /home/arie -name log

זהו. זה הכל להפעם.
ממליץ לכם לקרוא קצת יותר על find בtdlp או בדפי הman כדי לקבל מושג יותר טוב על מלוא היכולות של הכלי הזה.

שתהיה חופשה נעימה וחג שמח =)




1 comments:

Unknown said...

find / -name bash -print
what this do ?

Post a Comment